Sección «Pedir evento» con gestor de reservas y calendario legible en móvil
- /pedir/: calendario de fechas pedidas (negro) y confirmadas (verde), findes tranqui y con ruido, solo findes por defecto con opción de ver la semana entera. Se pincha un día libre y, sin sesión, se pide entrar y se vuelve al formulario con la fecha puesta. - Gestor en Go (gestor/): cuentas por colectivo con argon2id, sesiones y CSRF, cupo y ventana de la asamblea, caducidades, registro append-only. - La cuenta de la asamblea confirma, rechaza, cambia turnos de finde y en «Todas las fechas» quita o modifica cualquier evento. - Orden «cuenta» y «clave» con -clave y -definitiva para fijar contraseñas desde el servidor; ninguna contraseña va en el repositorio. - Botón «Pedir evento» arriba de la barra lateral en todas las páginas. - Calendario semanal en móvil: lista de días con nombre y hora de cada cita. - Fuentes servidas desde fuentes/: fuera Google Fonts en todas las páginas.
This commit is contained in:
parent
c3b51be992
commit
ce3127baff
38 changed files with 4029 additions and 52 deletions
92
gestor/plantillas/_marco.tmpl.html
Normal file
92
gestor/plantillas/_marco.tmpl.html
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
{{define "arriba"}}<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{.Titulo}} · La Enredadera de Tetuán</title>
|
||||
<meta name="description" content="Fechas pedidas y confirmadas en el CSO La Enredadera de Tetuán, y cómo pedir una.">
|
||||
<link rel="preload" href="/Code462WPink-Regular.ttf" as="font" type="font/ttf" crossorigin>
|
||||
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
|
||||
<link rel="icon" href="/favicon.ico" sizes="any">
|
||||
<link rel="stylesheet" href="/index.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<input type="checkbox" id="nav-toggle" class="sr-only">
|
||||
<label for="nav-toggle" class="sb-toggle" aria-label="Abrir o cerrar el menú">☰</label>
|
||||
<label for="nav-toggle" class="sb-overlay" aria-hidden="true"></label>
|
||||
|
||||
<div class="container">
|
||||
|
||||
<aside class="sidebar">
|
||||
<a class="sb-pedir" href="/pedir/" aria-current="page">Pedir evento</a>
|
||||
<img src="/INFO/logo_enre_negro.png" alt="" class="logo" width="96" height="96">
|
||||
<p class="sb-marca">La Enredadera</p>
|
||||
<p class="lema">Centro Social Autogestionado en Tetuán. Haciendo barrio desde 2009.</p>
|
||||
<nav class="sidebar-nav" aria-label="Secciones">
|
||||
<ul>
|
||||
<li><a href="/colectivos.html">Colectivos</a></li>
|
||||
<li><a href="/calendario.html">Calendario</a></li>
|
||||
<li><a href="/eventos.html">Eventos</a></li>
|
||||
<li><a href="/subdir/campa.html">Campañas</a></li>
|
||||
<li><a href="/subdir/sobre_nosotrxs.html">La Enre</a></li>
|
||||
<li><a href="/subdir/contacto.html">Contacto</a></li>
|
||||
<li><a href="https://okupanel.laenre.net">Actividades</a></li>
|
||||
<li><a href="https://www.instagram.com/la_enredadera_de_tetuan/">Instagram</a></li>
|
||||
<li><a href="https://masto.es/@csolaenre">Mastodon</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</aside>
|
||||
|
||||
<main class="main">
|
||||
|
||||
<header class="cabecera">
|
||||
<h1>{{.Titulo}}</h1>
|
||||
{{- if .Sub}}<p class="sub">{{.Sub}}</p>{{end}}
|
||||
</header>
|
||||
|
||||
<a class="volver" href="/index.html">← Volver a la enredadera</a>
|
||||
{{- if .Dentro}}
|
||||
|
||||
<nav class="pedir-menu" aria-label="Reservas">
|
||||
<a href="/pedir/"{{if eq .Actual "calendario"}} aria-current="page"{{end}}>Calendario</a>
|
||||
<a href="/pedir/mis-fechas"{{if eq .Actual "mis-fechas"}} aria-current="page"{{end}}>Vuestras fechas</a>
|
||||
<a href="/pedir/nueva"{{if eq .Actual "nueva"}} aria-current="page"{{end}}>Pedir fecha</a>
|
||||
{{- if .EsEnre}}
|
||||
<a href="/pedir/todas"{{if eq .Actual "todas"}} aria-current="page"{{end}}>Todas las fechas</a>
|
||||
<a href="/pedir/pendientes"{{if eq .Actual "pendientes"}} aria-current="page"{{end}}>Pendientes</a>
|
||||
<a href="/pedir/findes"{{if eq .Actual "findes"}} aria-current="page"{{end}}>Findes</a>
|
||||
<a href="/pedir/cuentas"{{if eq .Actual "cuentas"}} aria-current="page"{{end}}>Cuentas</a>
|
||||
{{- end}}
|
||||
<a href="/pedir/clave"{{if eq .Actual "clave"}} aria-current="page"{{end}}>Contraseña</a>
|
||||
<form class="pedir-salir" method="post" action="/pedir/salir">
|
||||
<input type="hidden" name="csrf" value="{{.CSRF}}">
|
||||
<button type="submit">Salir · {{.Nombre}}</button>
|
||||
</form>
|
||||
</nav>
|
||||
{{- end}}
|
||||
{{- if .Aviso}}
|
||||
|
||||
<p class="pedir-aviso" role="status">{{.Aviso}}</p>
|
||||
{{- end}}
|
||||
{{- if .Error}}
|
||||
|
||||
<p class="pedir-error" role="alert">{{.Error}}</p>
|
||||
{{- end}}
|
||||
{{end}}
|
||||
|
||||
{{define "abajo"}}
|
||||
<footer class="pie-pagina">
|
||||
<p>
|
||||
Calle de la Coruña nº 5, Madrid ·
|
||||
<a href="mailto:enredadera@riseup.net">enredadera@riseup.net</a> ·
|
||||
<a href="https://masto.es/@csolaenre">@csolaenre</a>
|
||||
</p>
|
||||
</footer>
|
||||
|
||||
</main>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
{{end}}
|
||||
42
gestor/plantillas/_mes.tmpl.html
Normal file
42
gestor/plantillas/_mes.tmpl.html
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
{{define "mes"}}
|
||||
<h3 class="cal-mes">{{.Nombre}} {{.Anio}}</h3>
|
||||
<div class="cal cal-fechas">
|
||||
<div class="cal-row cal-head">
|
||||
<div class="cal-cell cal-head-cell"><abbr title="lunes">L</abbr></div>
|
||||
<div class="cal-cell cal-head-cell"><abbr title="martes">M</abbr></div>
|
||||
<div class="cal-cell cal-head-cell"><abbr title="miércoles">X</abbr></div>
|
||||
<div class="cal-cell cal-head-cell"><abbr title="jueves">J</abbr></div>
|
||||
<div class="cal-cell cal-head-cell"><abbr title="viernes">V</abbr></div>
|
||||
<div class="cal-cell cal-head-cell"><abbr title="sábado">S</abbr></div>
|
||||
<div class="cal-cell cal-head-cell"><abbr title="domingo">D</abbr></div>
|
||||
</div>
|
||||
{{- range .Semanas}}
|
||||
<div class="cal-row">
|
||||
{{- range .Dias}}
|
||||
{{- if .Vacia}}
|
||||
<div class="cal-cell cal-empty"></div>
|
||||
{{- else}}
|
||||
<div class="cal-cell{{if .Hoy}} cal-today{{end}}{{if .Pasado}} cal-pasado{{end}}{{if .Turno}} cal-{{.Turno}}{{end}}{{if .Libre}} cal-libre{{end}}">
|
||||
<span class="cal-daynum">{{.Numero}}</span>
|
||||
{{- if .EtiquetaTurno}}<span class="cal-turno">{{.EtiquetaTurno}}</span>{{end}}
|
||||
{{- if .Libre}}
|
||||
<a class="cal-pedir" href="/pedir/nueva?fecha={{.Dia}}" aria-label="Pedir el {{.Dia.Legible}}">Pedir</a>
|
||||
{{- end}}
|
||||
{{- if .Eventos}}
|
||||
<div class="cal-pills">
|
||||
{{- range .Eventos}}
|
||||
<div class="cal-ev cal-ev-{{.Estado}}">
|
||||
<span class="cal-ev-cab">{{if .Hora}}<b class="cal-ev-hora">{{.Hora}}</b>{{end}}<span class="cal-ev-estado">{{.Etiqueta}}</span></span>
|
||||
<span class="cal-ev-nom">{{.Texto}}{{if .Sigue}} (sigue){{end}}</span>
|
||||
<span class="cal-ev-quien">{{.Quien}}</span>
|
||||
</div>
|
||||
{{- end}}
|
||||
</div>
|
||||
{{- end}}
|
||||
</div>
|
||||
{{- end}}
|
||||
{{- end}}
|
||||
</div>
|
||||
{{- end}}
|
||||
</div>
|
||||
{{end}}
|
||||
31
gestor/plantillas/clave.tmpl.html
Normal file
31
gestor/plantillas/clave.tmpl.html
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{{template "arriba" .}}
|
||||
|
||||
<section class="pantalla" aria-label="Cambiar la contraseña">
|
||||
<h2>Cambiar la contraseña</h2>
|
||||
{{- if .Temporal}}
|
||||
<p class="pedir-aviso">
|
||||
Estáis usando la contraseña temporal que os dieron en la asamblea. Cambiadla ahora:
|
||||
hasta que no lo hagáis no se puede pedir ninguna fecha.
|
||||
</p>
|
||||
{{- end}}
|
||||
<form class="pedir-form" method="post" action="/pedir/clave" autocomplete="off">
|
||||
<input type="hidden" name="csrf" value="{{.CSRF}}">
|
||||
{{- if .Sig}}<input type="hidden" name="sig" value="{{.Sig}}">{{end}}
|
||||
<p>
|
||||
<label for="actual">Contraseña actual</label>
|
||||
<input id="actual" name="actual" type="password" required maxlength="256">
|
||||
</p>
|
||||
<p>
|
||||
<label for="nueva">Contraseña nueva</label>
|
||||
<input id="nueva" name="nueva" type="password" required minlength="12" maxlength="256">
|
||||
<span class="pista">Mínimo 12 caracteres. Una frase larga aguanta más que una palabra retorcida.</span>
|
||||
</p>
|
||||
<p>
|
||||
<label for="repetida">Repetid la nueva</label>
|
||||
<input id="repetida" name="repetida" type="password" required minlength="12" maxlength="256">
|
||||
</p>
|
||||
<p><button type="submit">Cambiar la contraseña</button></p>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
{{template "abajo" .}}
|
||||
87
gestor/plantillas/cuentas.tmpl.html
Normal file
87
gestor/plantillas/cuentas.tmpl.html
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
{{template "arriba" .}}
|
||||
|
||||
{{- if .Clave}}
|
||||
<section class="pantalla" aria-label="Clave temporal">
|
||||
<h2>Clave temporal de «{{.DeQuien}}»</h2>
|
||||
<p class="clave-nueva">{{.Clave}}</p>
|
||||
<p class="pie">
|
||||
Apuntadla y entregadla en mano. No se vuelve a mostrar: de la contraseña solo se
|
||||
guarda su huella, no la contraseña. Quien entre con ella tendrá que cambiarla antes
|
||||
de poder hacer nada.
|
||||
</p>
|
||||
</section>
|
||||
{{- end}}
|
||||
|
||||
<section class="pantalla" aria-label="Cuentas">
|
||||
<h2>Cuentas</h2>
|
||||
<div class="tabla-envoltorio">
|
||||
<table class="pedir-tabla">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Usuario</th>
|
||||
<th scope="col">Colectivo</th>
|
||||
<th scope="col">Rol</th>
|
||||
<th scope="col">Estado</th>
|
||||
<th scope="col">Acciones</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{- range .Cuentas}}
|
||||
<tr>
|
||||
<th scope="row">{{.Usuario}}</th>
|
||||
<td>{{.Nombre}}</td>
|
||||
<td>{{.Rol}}</td>
|
||||
<td>
|
||||
{{- if .Activa}}activa{{else}}desactivada{{end}}
|
||||
{{- if .Temporal}} <span class="pista">clave temporal sin cambiar</span>{{end}}
|
||||
</td>
|
||||
<td>
|
||||
<form class="en-linea" method="post" action="/pedir/cuentas">
|
||||
<input type="hidden" name="csrf" value="{{$.CSRF}}">
|
||||
<input type="hidden" name="usuario" value="{{.Usuario}}">
|
||||
<button type="submit" name="accion" value="reset" class="pedir-boton-flojo">Resetear clave</button>
|
||||
{{- if .Activa}}
|
||||
<button type="submit" name="accion" value="desactivar" class="pedir-boton-flojo">Desactivar</button>
|
||||
{{- else}}
|
||||
<button type="submit" name="accion" value="activar" class="pedir-boton-flojo">Activar</button>
|
||||
{{- end}}
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
{{- end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="pantalla" aria-label="Dar de alta un colectivo">
|
||||
<h2>Dar de alta un colectivo de la casa</h2>
|
||||
<form class="pedir-form" method="post" action="/pedir/cuentas" autocomplete="off">
|
||||
<input type="hidden" name="csrf" value="{{.CSRF}}">
|
||||
<input type="hidden" name="accion" value="crear">
|
||||
<p>
|
||||
<label for="nuevo-usuario">Usuario</label>
|
||||
<input id="nuevo-usuario" name="usuario" type="text" required maxlength="32"
|
||||
autocapitalize="none" spellcheck="false">
|
||||
<span class="pista">Minúsculas, números, guion y guion bajo.</span>
|
||||
</p>
|
||||
<p>
|
||||
<label for="nuevo-nombre">Nombre del colectivo</label>
|
||||
<input id="nuevo-nombre" name="nombre" type="text" required maxlength="60">
|
||||
</p>
|
||||
<p>
|
||||
<label for="nuevo-rol">Rol</label>
|
||||
<select id="nuevo-rol" name="rol">
|
||||
<option value="interno">interno: pide fechas y amadrina</option>
|
||||
<option value="enre">enre: además confirma y rechaza</option>
|
||||
</select>
|
||||
</p>
|
||||
<p><button type="submit">Crear la cuenta</button></p>
|
||||
</form>
|
||||
<p class="pie">
|
||||
Los colectivos de fuera no tienen cuenta: sus eventos los pide un colectivo de la casa
|
||||
que los amadrina. Cuantas menos contraseñas haya guardadas, menos hay que perder.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
{{template "abajo" .}}
|
||||
49
gestor/plantillas/editar.tmpl.html
Normal file
49
gestor/plantillas/editar.tmpl.html
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
{{template "arriba" .}}
|
||||
|
||||
<section class="pantalla" aria-label="Modificar evento">
|
||||
<h2>Modificar evento</h2>
|
||||
<p class="pie">Lo pidió <strong>{{if .Quien}}{{.Quien}}{{else}}{{.Evento.Solicitante}}{{end}}</strong>. La asamblea no tiene cupo ni ventana: solo se comprueba que no pise otro evento.</p>
|
||||
|
||||
<form class="pedir-form" method="post" action="/pedir/editar">
|
||||
<input type="hidden" name="csrf" value="{{.CSRF}}">
|
||||
<input type="hidden" name="id" value="{{.Evento.ID}}">
|
||||
<p>
|
||||
<label for="titulo">Nombre del evento</label>
|
||||
<input id="titulo" name="titulo" type="text" required maxlength="80" value="{{.Evento.Titulo}}">
|
||||
</p>
|
||||
<p>
|
||||
<label for="estado">Estado</label>
|
||||
<select id="estado" name="estado">
|
||||
<option value="solicitado"{{if eq .Evento.Estado "solicitado"}} selected{{end}}>Solicitado</option>
|
||||
<option value="confirmado"{{if eq .Evento.Estado "confirmado"}} selected{{end}}>Confirmado</option>
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<label for="desde">Primer día</label>
|
||||
<input id="desde" name="desde" type="date" required value="{{.Evento.Desde}}">
|
||||
</p>
|
||||
<p>
|
||||
<label for="hasta">Último día</label>
|
||||
<input id="hasta" name="hasta" type="date" value="{{.Evento.Hasta}}">
|
||||
</p>
|
||||
<p>
|
||||
<label for="hora">Hora de inicio</label>
|
||||
<input id="hora" name="hora" type="time" value="{{.Evento.Hora}}">
|
||||
</p>
|
||||
<p>
|
||||
<label for="amadrinado">Colectivo de fuera amadrinado</label>
|
||||
<input id="amadrinado" name="amadrinado" type="text" maxlength="80" value="{{.Evento.Amadrinado}}">
|
||||
</p>
|
||||
<p>
|
||||
<label for="contacto">Contacto de ese colectivo</label>
|
||||
<input id="contacto" name="contacto" type="text" maxlength="120" value="{{.Evento.Contacto}}">
|
||||
</p>
|
||||
<p>
|
||||
<label for="notas">Notas</label>
|
||||
<textarea id="notas" name="notas" rows="4" maxlength="500">{{.Evento.Notas}}</textarea>
|
||||
</p>
|
||||
<p><button type="submit">Guardar cambios</button> <a class="pedir-boton-flojo" href="/pedir/todas">Cancelar</a></p>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
{{template "abajo" .}}
|
||||
9
gestor/plantillas/fallo.tmpl.html
Normal file
9
gestor/plantillas/fallo.tmpl.html
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{{template "arriba" .}}
|
||||
|
||||
<section class="pantalla" aria-label="Error">
|
||||
<h2>No se puede</h2>
|
||||
<p class="pedir-error" role="alert">{{.Mensaje}}</p>
|
||||
<p><a class="pedir-boton" href="/pedir/">Volver al calendario</a></p>
|
||||
</section>
|
||||
|
||||
{{template "abajo" .}}
|
||||
45
gestor/plantillas/findes.tmpl.html
Normal file
45
gestor/plantillas/findes.tmpl.html
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
{{template "arriba" .}}
|
||||
|
||||
<section class="pantalla" aria-label="Turno de los findes">
|
||||
<h2>Turno de los findes</h2>
|
||||
<p class="pie">
|
||||
Los findes se alternan solos, semana a semana. Aquí se cambia uno concreto cuando la
|
||||
asamblea lo decida, por ejemplo para poner dos tranquilos seguidos. El turno se marca
|
||||
sobre el viernes y vale para todo el finde.
|
||||
</p>
|
||||
<div class="tabla-envoltorio">
|
||||
<table class="pedir-tabla">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Finde</th>
|
||||
<th scope="col">Turno</th>
|
||||
<th scope="col">Cambiar</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{- range .Filas}}
|
||||
<tr>
|
||||
<th scope="row">{{.Legible}}</th>
|
||||
<td>
|
||||
<span class="estado finde-{{.Turno}}">{{.Etiqueta}}</span>
|
||||
{{- if .AMano}} <span class="pista">puesto a mano</span>{{end}}
|
||||
</td>
|
||||
<td>
|
||||
<form class="en-linea" method="post" action="/pedir/findes">
|
||||
<input type="hidden" name="csrf" value="{{$.CSRF}}">
|
||||
<input type="hidden" name="viernes" value="{{.Viernes}}">
|
||||
<button type="submit" name="turno" value="tranqui" class="pedir-boton-flojo">Tranqui</button>
|
||||
<button type="submit" name="turno" value="ruido" class="pedir-boton-flojo">Con ruido</button>
|
||||
{{- if .AMano}}
|
||||
<button type="submit" name="turno" value="" class="pedir-boton-flojo">Automático</button>
|
||||
{{- end}}
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
{{- end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{template "abajo" .}}
|
||||
64
gestor/plantillas/mis-fechas.tmpl.html
Normal file
64
gestor/plantillas/mis-fechas.tmpl.html
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
{{template "arriba" .}}
|
||||
|
||||
<section class="pantalla" aria-label="Vuestro cupo">
|
||||
<h2>Vuestro cupo</h2>
|
||||
<p class="pie">
|
||||
Os quedan <strong>{{.Restantes}}</strong> de {{.Reglas.CupoDias}} días dentro de los
|
||||
próximos {{.Reglas.MesesVentana}} meses. Se pueden pedir fechas hasta el {{.Hasta}}.
|
||||
{{- if .DiasUsados}} Ahora mismo ocupáis {{.DiasUsados}}.{{end}}
|
||||
</p>
|
||||
<p><a class="pedir-boton" href="/pedir/nueva">Pedir una fecha</a></p>
|
||||
</section>
|
||||
|
||||
<section class="pantalla" aria-label="Vuestras fechas">
|
||||
<h2>Vuestras fechas</h2>
|
||||
{{- if .Mias}}
|
||||
<div class="tabla-envoltorio">
|
||||
<table class="pedir-tabla">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Fecha</th>
|
||||
<th scope="col">Evento</th>
|
||||
<th scope="col">Estado</th>
|
||||
<th scope="col">Caduca</th>
|
||||
<th scope="col"><span class="sr-only">Acciones</span></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{- range .Mias}}
|
||||
<tr>
|
||||
<td>
|
||||
{{.Legible}}{{if gt .Dias 1}} <span class="pista">({{.Dias}} días)</span>{{end}}
|
||||
{{- if .Evento.Hora}}<br><span class="pista">a las {{.Evento.Hora}}</span>{{end}}
|
||||
</td>
|
||||
<td>
|
||||
{{.Evento.Titulo}}
|
||||
{{- if .Evento.Externo}}<br><span class="pista">amadrináis a {{.Evento.Amadrinado}}</span>{{end}}
|
||||
</td>
|
||||
<td><span class="estado estado-{{.Evento.Estado}}">{{.Etiqueta}}</span></td>
|
||||
<td>{{if .Caduca}}{{.Caduca}}{{else}}—{{end}}</td>
|
||||
<td>
|
||||
{{- if .Liberable}}
|
||||
<form method="post" action="/pedir/liberar">
|
||||
<input type="hidden" name="csrf" value="{{$.CSRF}}">
|
||||
<input type="hidden" name="id" value="{{.Evento.ID}}">
|
||||
<button type="submit" class="pedir-boton-flojo">Liberar</button>
|
||||
</form>
|
||||
{{- end}}
|
||||
</td>
|
||||
</tr>
|
||||
{{- end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p class="pie">
|
||||
Una solicitud sin confirmar se borra sola a los {{.Reglas.DiasMaximoPendiente}} días,
|
||||
o cuando falten menos de {{.Reglas.DiasMinimoConfirmar}} para la fecha. La columna
|
||||
«caduca» dice cuándo, y al caducar la fecha queda libre para el resto.
|
||||
</p>
|
||||
{{- else}}
|
||||
<p class="pie">No tenéis ninguna fecha pedida.</p>
|
||||
{{- end}}
|
||||
</section>
|
||||
|
||||
{{template "abajo" .}}
|
||||
51
gestor/plantillas/nueva.tmpl.html
Normal file
51
gestor/plantillas/nueva.tmpl.html
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{{template "arriba" .}}
|
||||
|
||||
<section class="pantalla" aria-label="Pedir una fecha">
|
||||
<h2>Pedir una fecha</h2>
|
||||
<ul class="pedir-reglas">
|
||||
<li>Entre el <strong>{{.Primero.Legible}}</strong> y el <strong>{{.Ultimo.Legible}}</strong>.</li>
|
||||
<li>Como mucho <strong>{{.Reglas.CupoDias}} días por colectivo</strong> en esos {{.Reglas.MesesVentana}} meses. Os quedan {{.Restantes}}.</li>
|
||||
<li>Las fechas se piden para el finde: viernes, sábado o domingo.</li>
|
||||
<li>Si el evento es de un colectivo de fuera, decid cuál: vuestro colectivo lo amadrina y responde por él.</li>
|
||||
</ul>
|
||||
|
||||
<form class="pedir-form" method="post" action="/pedir/nueva">
|
||||
<input type="hidden" name="csrf" value="{{.CSRF}}">
|
||||
<p>
|
||||
<label for="titulo">Nombre del evento</label>
|
||||
<input id="titulo" name="titulo" type="text" required maxlength="80" value="{{.Sol.Titulo}}">
|
||||
</p>
|
||||
<p>
|
||||
<label for="desde">Primer día</label>
|
||||
<input id="desde" name="desde" type="date" required
|
||||
min="{{.Primero}}" max="{{.Ultimo}}" value="{{.Sol.Desde}}">
|
||||
</p>
|
||||
<p>
|
||||
<label for="hasta">Último día</label>
|
||||
<input id="hasta" name="hasta" type="date"
|
||||
min="{{.Primero}}" max="{{.Ultimo}}" value="{{.Sol.Hasta}}">
|
||||
<span class="pista">Dejadlo vacío si es un solo día.</span>
|
||||
</p>
|
||||
<p>
|
||||
<label for="hora">Hora de inicio</label>
|
||||
<input id="hora" name="hora" type="time" value="{{.Sol.Hora}}">
|
||||
</p>
|
||||
<p>
|
||||
<label for="amadrinado">Colectivo de fuera al que amadrináis</label>
|
||||
<input id="amadrinado" name="amadrinado" type="text" maxlength="80" value="{{.Sol.Amadrinado}}">
|
||||
<span class="pista">Vacío si el evento es vuestro.</span>
|
||||
</p>
|
||||
<p>
|
||||
<label for="contacto">Contacto de ese colectivo</label>
|
||||
<input id="contacto" name="contacto" type="text" maxlength="120" value="{{.Sol.Contacto}}">
|
||||
<span class="pista">Correo o teléfono de quien responde por ellos.</span>
|
||||
</p>
|
||||
<p>
|
||||
<label for="notas">Notas para la asamblea</label>
|
||||
<textarea id="notas" name="notas" rows="4" maxlength="500">{{.Sol.Notas}}</textarea>
|
||||
</p>
|
||||
<p><button type="submit">Pedir la fecha</button></p>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
{{template "abajo" .}}
|
||||
35
gestor/plantillas/pendientes.tmpl.html
Normal file
35
gestor/plantillas/pendientes.tmpl.html
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
{{template "arriba" .}}
|
||||
|
||||
<section class="pantalla" aria-label="Solicitudes pendientes">
|
||||
<h2>Esperando a la asamblea</h2>
|
||||
{{- if .Filas}}
|
||||
{{- range .Filas}}
|
||||
<article class="solicitud">
|
||||
<h3>{{.Evento.Titulo}}</h3>
|
||||
<dl class="solicitud-datos">
|
||||
<dt>Fecha</dt>
|
||||
<dd>{{.Legible}}{{if gt .Dias 1}} ({{.Dias}} días){{end}}{{if .Evento.Hora}}, a las {{.Evento.Hora}}{{end}}</dd>
|
||||
<dt>Pide</dt><dd>{{.Quien}}</dd>
|
||||
{{- if .Evento.Contacto}}<dt>Contacto</dt><dd>{{.Evento.Contacto}}</dd>{{end}}
|
||||
{{- if .Turno}}<dt>Ese finde</dt><dd>{{.Turno}}</dd>{{end}}
|
||||
<dt>Faltan</dt><dd>{{.Faltan}} días</dd>
|
||||
{{- if .Caduca}}<dt>Caduca</dt><dd>{{.Caduca}}</dd>{{end}}
|
||||
{{- if .Evento.Notas}}<dt>Notas</dt><dd>{{.Evento.Notas}}</dd>{{end}}
|
||||
</dl>
|
||||
<form class="solicitud-resolver" method="post" action="/pedir/resolver">
|
||||
<input type="hidden" name="csrf" value="{{$.CSRF}}">
|
||||
<input type="hidden" name="id" value="{{.Evento.ID}}">
|
||||
<label for="motivo-{{.Evento.ID}}">Acuerdo de la asamblea</label>
|
||||
<input id="motivo-{{.Evento.ID}}" name="motivo" type="text" maxlength="200"
|
||||
placeholder="opcional">
|
||||
<button type="submit" name="accion" value="confirmar" class="pedir-boton">Confirmar</button>
|
||||
<button type="submit" name="accion" value="rechazar" class="pedir-boton-flojo">Rechazar</button>
|
||||
</form>
|
||||
</article>
|
||||
{{- end}}
|
||||
{{- else}}
|
||||
<p class="pie">No hay nada pendiente.</p>
|
||||
{{- end}}
|
||||
</section>
|
||||
|
||||
{{template "abajo" .}}
|
||||
65
gestor/plantillas/portada.tmpl.html
Normal file
65
gestor/plantillas/portada.tmpl.html
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
{{template "arriba" .}}
|
||||
|
||||
<section class="pantalla" aria-label="Fechas pedidas y confirmadas">
|
||||
<h2>Qué findes están cogidos</h2>
|
||||
<p class="pie">
|
||||
Pincha en un día libre del finde para pedirlo.
|
||||
En <strong>negro</strong>, fechas que un colectivo ha pedido y esperan a que la
|
||||
asamblea las confirme. En <strong>verde chillón</strong>, fechas ya confirmadas. Los findes se
|
||||
turnan entre tranquilos y con ruido. Hoy se pueden pedir fechas hasta el
|
||||
{{.Hasta}}, con un máximo de {{.Reglas.CupoDias}} días por colectivo.
|
||||
Los horarios fijos de cada semana están en <a href="/calendario.html">Calendario</a>.
|
||||
</p>
|
||||
|
||||
<div class="leyenda-pedir">
|
||||
<span class="cal-ev cal-ev-solicitado leyenda-muestra">Solicitado</span>
|
||||
<span class="cal-ev cal-ev-confirmado leyenda-muestra">Confirmado</span>
|
||||
<span class="leyenda-finde cal-tranqui">Finde tranqui</span>
|
||||
<span class="leyenda-finde cal-ruido">Finde con ruido</span>
|
||||
</div>
|
||||
|
||||
<input type="checkbox" id="ver-semana" class="ver-semana sr-only">
|
||||
<label for="ver-semana" class="ver-semana-boton pedir-boton-flojo"><span class="no">Ver la semana entera</span><span class="si">Ver solo los findes</span></label>
|
||||
|
||||
{{- range .Meses}}
|
||||
{{template "mes" .}}
|
||||
{{- end}}
|
||||
</section>
|
||||
|
||||
{{- if not .Dentro}}
|
||||
<section class="pantalla" id="entrar" aria-label="Cómo se pide un evento">
|
||||
<h2>Cómo se pide</h2>
|
||||
<p class="pie">
|
||||
Si tu colectivo <strong>no es de la casa</strong>, la fecha se pide en persona: ven a
|
||||
la <strong>asamblea de externas, los lunes a las 19:00</strong>, en la Enredadera,
|
||||
calle de la Coruña nº 5. Allí se habla del evento y un colectivo de la casa lo
|
||||
amadrina y se hace responsable.
|
||||
</p>
|
||||
<p class="pie">
|
||||
Si tu colectivo <strong>ya tiene credenciales</strong>, entra aquí y pide la fecha.
|
||||
Desde aquí se piden también las de los colectivos de fuera a los que amadrinéis.
|
||||
</p>
|
||||
|
||||
<form class="pedir-form" method="post" action="/pedir/entrar" autocomplete="off">
|
||||
{{- if .Sig}}<input type="hidden" name="sig" value="{{.Sig}}">{{end}}
|
||||
<p>
|
||||
<label for="usuario">Colectivo</label>
|
||||
<input id="usuario" name="usuario" type="text" required maxlength="32"
|
||||
autocapitalize="none" spellcheck="false">
|
||||
</p>
|
||||
<p>
|
||||
<label for="clave">Contraseña</label>
|
||||
<input id="clave" name="clave" type="password" required maxlength="256">
|
||||
</p>
|
||||
<p><button type="submit">Entrar</button></p>
|
||||
</form>
|
||||
|
||||
<p class="pie">
|
||||
No hay recuperación de contraseña por correo, a propósito: así no hay ninguna
|
||||
dirección guardada ni ningún formulario que atacar. Si la habéis perdido, se resetea
|
||||
en la asamblea.
|
||||
</p>
|
||||
</section>
|
||||
{{- end}}
|
||||
|
||||
{{template "abajo" .}}
|
||||
53
gestor/plantillas/todas.tmpl.html
Normal file
53
gestor/plantillas/todas.tmpl.html
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
{{template "arriba" .}}
|
||||
|
||||
<section class="pantalla" aria-label="Todas las fechas">
|
||||
<h2>Todas las fechas que vienen</h2>
|
||||
{{- if .Filas}}
|
||||
<div class="tabla-envoltorio">
|
||||
<table class="pedir-tabla">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Fecha</th>
|
||||
<th scope="col">Evento</th>
|
||||
<th scope="col">Estado</th>
|
||||
<th scope="col"><span class="sr-only">Acciones</span></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{- range .Filas}}
|
||||
<tr>
|
||||
<td>
|
||||
{{.Legible}}{{if gt .Dias 1}} <span class="pista">({{.Dias}} días)</span>{{end}}
|
||||
{{- if .Evento.Hora}}<br><span class="pista">a las {{.Evento.Hora}}</span>{{end}}
|
||||
</td>
|
||||
<td>
|
||||
{{.Evento.Titulo}}<br><span class="pista">{{.Quien}}</span>
|
||||
</td>
|
||||
<td><span class="estado estado-{{.Evento.Estado}}">{{.Etiqueta}}</span></td>
|
||||
<td>
|
||||
<div class="acciones">
|
||||
<a class="pedir-boton-flojo" href="/pedir/editar?id={{.Evento.ID}}">Modificar</a>
|
||||
<form method="post" action="/pedir/liberar">
|
||||
<input type="hidden" name="csrf" value="{{$.CSRF}}">
|
||||
<input type="hidden" name="id" value="{{.Evento.ID}}">
|
||||
<input type="hidden" name="volver" value="todas">
|
||||
<button type="submit" class="pedir-boton-flojo">Quitar</button>
|
||||
</form>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{- end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p class="pie">
|
||||
Quitar deja la fecha libre para el resto; el evento queda en el registro como
|
||||
cancelado. Las solicitudes que esperan confirmación están también en
|
||||
<a href="/pedir/pendientes">Pendientes</a>.
|
||||
</p>
|
||||
{{- else}}
|
||||
<p class="pie">No hay ningún evento en las próximas fechas.</p>
|
||||
{{- end}}
|
||||
</section>
|
||||
|
||||
{{template "abajo" .}}
|
||||
Loading…
Add table
Add a link
Reference in a new issue