Ficha por pasos, cita visible y recordatorio por correo al invitado
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TSyR5Zw5eGj6oPTRVjvP1b
This commit is contained in:
co-authored by
Claude Sonnet 5.5
parent
caecb951d8
commit
f5f16ac55b
+30
-18
@@ -28,11 +28,38 @@ def pregunta(q):
|
||||
d = f'<small>{esc(q["desc"])}</small>' if q['desc'] else ''
|
||||
return f' <label><span>{esc(q["titulo"])}{mark}</span>{d}\n {campo}\n </label>'
|
||||
|
||||
EMAIL = ''' <label><span>Tu correo electrónico <span class="req" title="Obligatoria">*</span></span><small>Te enviaremos un recordatorio de tu cita y así podemos responderte.</small>
|
||||
<input name="email" type="email" autocomplete="email" maxlength="200" required>
|
||||
</label>'''
|
||||
bloques = []
|
||||
for s in secciones:
|
||||
nota = f'\n <p class="note">{esc(s["nota"])}</p>' if s['nota'] else ''
|
||||
bloques.append(f' <fieldset class="sec">\n <legend>{esc(s["titulo"])}</legend>{nota}\n' +
|
||||
'\n'.join(pregunta(q) for q in s['preguntas']) + '\n </fieldset>')
|
||||
bloques[0] = bloques[0].replace('</fieldset>', EMAIL + '\n </fieldset>')
|
||||
|
||||
def nav(i, total):
|
||||
ant = '<button type="button" class="btn ghost prev">← Anterior</button>' if i else ''
|
||||
sig = ('<button class="btn primary" type="submit">Enviar mi ficha</button>' if i == total - 1
|
||||
else '<button type="button" class="btn primary next">Siguiente →</button>')
|
||||
return f' <div class="nav">{ant}{sig}</div>\n </fieldset>'
|
||||
|
||||
FINAL = ''' <fieldset class="sec">
|
||||
<legend>Antes de enviar</legend>
|
||||
<p class="note">Este podcast se realiza de forma altruista y colaborativa.</p>
|
||||
<div class="trap" aria-hidden="true"><label>No rellenes este campo <input name="web" type="text" tabindex="-1" autocomplete="off"></label></div>
|
||||
<label class="check">
|
||||
<input name="consent" type="checkbox" required>
|
||||
<span>He leído y acepto las <a href="terminos.html#participacion" target="_blank" rel="noopener">condiciones de participación</a> descritas. <span class="req">*</span></span>
|
||||
</label>
|
||||
<label class="check">
|
||||
<input name="privacy" type="checkbox" required>
|
||||
<span>He leído la <a href="privacidad.html" target="_blank" rel="noopener">política de privacidad</a> y acepto que usen estos datos para preparar el episodio. <span class="req">*</span></span>
|
||||
</label>
|
||||
</fieldset>'''
|
||||
pasos = bloques + [FINAL]
|
||||
pasos = [p[:p.rindex(' </fieldset>')] + nav(i, len(pasos)) for i, p in enumerate(pasos)]
|
||||
CUERPO = chr(10).join(pasos)
|
||||
|
||||
page = f'''<!doctype html>
|
||||
<html lang="es">
|
||||
@@ -54,27 +81,12 @@ page = f'''<!doctype html>
|
||||
<h1>Ficha del <em>invitado</em></h1>
|
||||
<p id="hola" class="lead-c" hidden></p>
|
||||
<p id="malo" class="status err" hidden>Este enlace no es válido o ha caducado. Escríbenos a <a href="mailto:andaquenosabesnada@gmail.com">andaquenosabesnada@gmail.com</a> y te mandamos uno nuevo.</p>
|
||||
<p id="cita" class="cita" hidden></p>
|
||||
<p id="intro" class="lead-c" hidden>{esc(F['description'])}</p>
|
||||
|
||||
<form id="g" class="form" novalidate hidden data-ok="¡Gracias! Hemos recibido tu ficha. Te escribiremos pronto con los siguientes pasos.">
|
||||
<label>Tu correo electrónico (opcional, para poder responderte)
|
||||
<input name="email" type="email" autocomplete="email" maxlength="200">
|
||||
</label>
|
||||
{chr(10).join(bloques)}
|
||||
<fieldset class="sec">
|
||||
<legend>Antes de enviar</legend>
|
||||
<p class="note">Este podcast se realiza de forma altruista y colaborativa.</p>
|
||||
<div class="trap" aria-hidden="true"><label>No rellenes este campo <input name="web" type="text" tabindex="-1" autocomplete="off"></label></div>
|
||||
<label class="check">
|
||||
<input name="consent" type="checkbox" required>
|
||||
<span>He leído y acepto las <a href="terminos.html#participacion" target="_blank" rel="noopener">condiciones de participación</a> descritas. <span class="req">*</span></span>
|
||||
</label>
|
||||
<label class="check">
|
||||
<input name="privacy" type="checkbox" required>
|
||||
<span>He leído la <a href="privacidad.html" target="_blank" rel="noopener">política de privacidad</a> y acepto que usen estos datos para preparar el episodio. <span class="req">*</span></span>
|
||||
</label>
|
||||
</fieldset>
|
||||
<button class="btn primary" type="submit">Enviar mi ficha</button>
|
||||
{CUERPO}
|
||||
<p id="paso" class="paso" aria-live="polite"></p>
|
||||
<p id="st" class="status" role="status" aria-live="polite"></p>
|
||||
<p class="note">Tus respuestas se guardan en este navegador mientras escribes, por si cierras la página. Se borran al enviarlas.</p>
|
||||
</form>
|
||||
|
||||
Reference in New Issue
Block a user