chore: site _htmx files
This commit is contained in:
parent
48865076f2
commit
ca77949611
7 changed files with 292 additions and 6 deletions
0
site/site/_htmx/assets/.gitkeep
Normal file
0
site/site/_htmx/assets/.gitkeep
Normal file
36
site/site/_htmx/templates/pages/about-us.j2
Normal file
36
site/site/_htmx/templates/pages/about-us.j2
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{# Sin esta plantilla la página cae en `pages/static.j2`, que lee exactamente tres claves
|
||||
(-page-title, -page-subtitle, -page-description): un titular sobre un solo párrafo, y un 200.
|
||||
Ese es el motivo de que /about-us fuese pobre — no la copia, el renderizador.
|
||||
Los enlaces viajan DENTRO del valor Fluent y salen por `| safe`: cada idioma lleva su propia
|
||||
ruta (/case-files vs /expedientes) y el traductor la conserva. #}
|
||||
<article class="ds-page ds-page-about-us" data-page-id="about-us">
|
||||
<header class="ds-page-header">
|
||||
<div class="ds-container">
|
||||
<h1 class="ds-heading-xl">{{ texts["about-us-page-title"] }}</h1>
|
||||
<p class="ds-text-lead">{{ texts["about-us-page-subtitle"] }}</p>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="ds-page-body">
|
||||
<div class="ds-container">
|
||||
<p class="ds-text-lead ds-text-muted">{{ texts["about-us-page-description"] | safe }}</p>
|
||||
|
||||
<h2>{{ texts["about-us-h-quien"] }}</h2>
|
||||
<p>{{ texts["about-us-quien-1"] | safe }}</p>
|
||||
<p>{{ texts["about-us-quien-2"] | safe }}</p>
|
||||
|
||||
<h2>{{ texts["about-us-h-porque"] }}</h2>
|
||||
<p>{{ texts["about-us-porque-1"] | safe }}</p>
|
||||
<p>{{ texts["about-us-porque-2"] | safe }}</p>
|
||||
|
||||
<h2>{{ texts["about-us-h-como"] }}</h2>
|
||||
<p>{{ texts["about-us-como-1"] | safe }}</p>
|
||||
<p>{{ texts["about-us-como-2"] | safe }}</p>
|
||||
<p>{{ texts["about-us-como-3"] | safe }}</p>
|
||||
|
||||
<h2>{{ texts["about-us-h-abierto"] }}</h2>
|
||||
<p>{{ texts["about-us-abierto-1"] | safe }}</p>
|
||||
<p>{{ texts["about-us-abierto-2"] | safe }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
70
site/site/_htmx/templates/pages/conceptos.j2
Normal file
70
site/site/_htmx/templates/pages/conceptos.j2
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
{# Conceptos clave — el glosario del proyecto, SERVIDO, no pintado con JS.
|
||||
|
||||
Todo el texto se proyecta de .ontoref/ontology/glossary.ncl (scripts/build/gen-conceptos.nu →
|
||||
conceptos.ftl) — el mismo fichero del que responde `ontoref describe term` en la terminal. Aquí
|
||||
no se escribe ni una palabra del vocabulario.
|
||||
|
||||
Leía `registry.ncl`, que es el ÁRBITRO DE TRADUCCIÓN, no el glosario: la página se llamaba
|
||||
«Conceptos clave» y listaba `commit`, `push`, `rebase` — decisiones sobre cómo se dicen las
|
||||
cosas en español, no conceptos de ontoref. Y en inglés salía vacía, porque las reglas del
|
||||
árbitro se indexan por idioma de DESTINO y el inglés es la fuente. Las 20 definiciones inglesas
|
||||
llevaban meses escritas en el glosario, sin que nada las leyera.
|
||||
|
||||
El tooltip (glossary-tooltip.js) atiende a quien tropieza con una palabra a mitad de frase.
|
||||
Esta página atiende a los otros dos lectores: el que quiere el mapa antes de empezar, y Google.
|
||||
Por eso el <dl> llega renderizado del servidor y no por `fetch`. #}
|
||||
<div class="ds-bg-page">
|
||||
<style>
|
||||
.cpt{margin:0}
|
||||
.cpt dt{font-family:ui-monospace,"Courier New",monospace;font-weight:700;font-size:.95rem;
|
||||
margin-top:1.8rem;scroll-margin-top:5rem;display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
|
||||
.cpt dd{margin:.15rem 0 0;line-height:1.6}
|
||||
.cpt dt:target{outline:2px solid currentColor;outline-offset:.35rem;border-radius:.2rem}
|
||||
|
||||
/* La ficha del concepto: qué ES (categoría) y de dónde NACE (axioma, tensión, ADR…). No es
|
||||
adorno — es la mitad del dato que el glosario guarda, y la página que lo omitía dejaba cada
|
||||
definición flotando sin decir de qué parte del proyecto sale. */
|
||||
.cpt .cpt-meta{display:flex;flex-wrap:wrap;gap:.5rem;margin:.15rem 0 .4rem;
|
||||
font-family:ui-monospace,"Courier New",monospace;font-size:.68rem;
|
||||
letter-spacing:.06em;text-transform:uppercase;opacity:.62}
|
||||
.cpt .cpt-cat{border:1px solid currentColor;border-radius:.25rem;padding:.05rem .35rem}
|
||||
.cpt .cpt-origin{opacity:.85}
|
||||
|
||||
/* `verified = false` significa que el término nació en una sesión y todavía no lo ratifica
|
||||
ningún ADR. Se DICE. Un término en borrador impreso igual que uno ratificado es la página
|
||||
afirmando de más en nombre del proyecto. */
|
||||
.cpt .cpt-draft{font-family:ui-monospace,"Courier New",monospace;font-size:.6rem;font-weight:700;
|
||||
letter-spacing:.1em;padding:.1rem .35rem;border-radius:.25rem;
|
||||
border:1px solid #c98a22;color:#c98a22;background:rgba(201,138,34,.10)}
|
||||
|
||||
.cpt .cpt-rel{display:block;margin-top:.4rem;font-size:.82rem;opacity:.8}
|
||||
.cpt .cpt-rel a{text-decoration:underline}
|
||||
.cpt .cpt-more{display:inline-block;margin-top:.4rem;font-size:.8rem;white-space:nowrap}
|
||||
</style>
|
||||
|
||||
<section class="py-ds-8 ds-container">
|
||||
<div class="mx-auto max-w-3xl">
|
||||
<h1 class="text-3xl font-bold ds-text mb-2">{{ texts["conceptos-page-title"] }}</h1>
|
||||
<p class="ds-body-lg ds-text-secondary mb-6">{{ texts["conceptos-page-subtitle"] }}</p>
|
||||
|
||||
<p class="ds-body ds-text-secondary mb-8">{{ texts["conceptos-intro"] }}</p>
|
||||
|
||||
{# Sin rama «vacío». Antes existía porque el inglés SIEMPRE llegaba a 0 y había que confesarlo.
|
||||
Leyendo el glosario, cero conceptos no es un estado de la página: es un glosario roto, y lo
|
||||
refusa el generador antes de escribir nada. Una rama que no puede darse es una rama que
|
||||
nadie prueba. #}
|
||||
<div class="ds-text">
|
||||
{{ texts["conceptos-html"] | safe }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{# SIN tooltip, deliberadamente. Esta página ES donde se montan las explicaciones: cada término
|
||||
tiene su definición en el <dd> de al lado. Un tooltip aquí explica una palabra señalando a la
|
||||
frase que ya está a dos centímetros — y como el script gasta la decoración en la PRIMERA
|
||||
ocurrencia de cada unidad de lectura, la gastaba justo en el <dt> que el <dd> define.
|
||||
|
||||
La razón por la que estuvo puesto (los términos se citan unos a otros) era real y pedía otra
|
||||
cosa: un enlace al ancla del término citado. Eso es lo que ahora emite el generador desde
|
||||
`related_terms`, y cada <dt> ya tiene `id` y `:target`. #}
|
||||
</div>
|
||||
146
site/site/_htmx/templates/pages/lenguaje.j2
Normal file
146
site/site/_htmx/templates/pages/lenguaje.j2
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
{# GENERADO desde .ontoref/ontology/registry.ncl por scripts/gen-nota-lenguaje.nu. NO EDITAR. #}
|
||||
{# Vive en site/_htmx/templates/pages/ — NUNCA en htmx-templates/, que `just templates`
|
||||
borra y reensambla en cada ejecución (adr-070). Las filas de las tablas son DATOS del
|
||||
registro y por eso van aquí; la prosa es TEXTO y va en Fluent, donde un traductor la alcanza. #}
|
||||
<article class="ds-page ds-page-lenguaje" data-page-id="lenguaje">
|
||||
<header class="ds-page-header">
|
||||
<div class="ds-container">
|
||||
<h1 class="ds-heading-xl">{{ texts["lenguaje-page-title"] }}</h1>
|
||||
<p class="ds-text-lead">{{ texts["lenguaje-page-subtitle"] }}</p>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="ds-page-body">
|
||||
<div class="ds-container">
|
||||
<p>{{ texts["lenguaje-intro"] }}</p>
|
||||
|
||||
<h2>{{ texts["lenguaje-h-criterio"] }}</h2>
|
||||
<p>{{ texts["lenguaje-criterio-lead"] }}</p>
|
||||
<p><b>{{ texts["lenguaje-criterio-1-t"] }}</b> {{ texts["lenguaje-criterio-1"] }}</p>
|
||||
<p><b>{{ texts["lenguaje-criterio-2-t"] }}</b> {{ texts["lenguaje-criterio-2"] }}</p>
|
||||
<p>{{ texts["lenguaje-criterio-3"] }}</p>
|
||||
<p>{{ texts["lenguaje-criterio-run"] }}</p>
|
||||
|
||||
<h2>{{ texts["lenguaje-h-kept"] }}</h2>
|
||||
<p>{{ texts["lenguaje-kept-lead"] }}</p>
|
||||
<table class="ds-table">
|
||||
<thead><tr><th>{{ texts["lenguaje-th-termino"] }}</th><th>{{ texts["lenguaje-th-que-es"] }}</th><th>{{ texts["lenguaje-th-porque-queda"] }}</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><code>gate</code></td><td>una gate — la condición tipada que una transición debe satisfacer para poder ocurrir</td><td><b>no hay palabra española fiel — traducirlo rompe el concepto</b></td></tr>
|
||||
<tr><td><code>commit</code></td><td>un commit — la unidad de cambio registrada, con su hash</td><td><b>es un identificador — traducirlo rompe la referencia</b></td></tr>
|
||||
<tr><td><code>push</code></td><td>un push — el envío de los commits al remoto</td><td><b>es un identificador — traducirlo rompe la referencia</b></td></tr>
|
||||
<tr><td><code>rebase</code></td><td>un rebase — reescribir la rama sobre otra base</td><td><b>es un identificador — traducirlo rompe la referencia</b></td></tr>
|
||||
<tr><td><code>pull request</code></td><td>un Pull Request — la propuesta de fusión, con su revisión</td><td><b>es un identificador — traducirlo rompe la referencia</b></td></tr>
|
||||
<tr><td><code>hook</code></td><td>un hook — el enganche que dispara en un punto del ciclo</td><td><b>es un identificador — traducirlo rompe la referencia</b></td></tr>
|
||||
<tr><td><code>NCL</code></td><td>NCL — el lenguaje de configuración tipada en el que se declara todo esto</td><td><b>es un identificador — traducirlo rompe la referencia</b></td></tr>
|
||||
<tr><td><code>ADR</code></td><td>un ADR — el registro de una decisión de arquitectura, con sus restricciones</td><td><b>es un identificador — traducirlo rompe la referencia</b></td></tr>
|
||||
<tr><td><code>DAG</code></td><td>un DAG — grafo dirigido acíclico; la forma que tiene un modo</td><td><b>es un identificador — traducirlo rompe la referencia</b></td></tr>
|
||||
<tr><td><code>JSONL</code></td><td>JSONL — un objeto JSON por línea; el formato del testigo</td><td><b>es un identificador — traducirlo rompe la referencia</b></td></tr>
|
||||
<tr><td><code>Ed25519</code></td><td>Ed25519 — el esquema con el que se firma un testigo</td><td><b>es un identificador — traducirlo rompe la referencia</b></td></tr>
|
||||
<tr><td><code>exit</code></td><td>exit — el código de salida de un proceso (0 = pasa)</td><td><b>es un identificador — traducirlo rompe la referencia</b></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>{{ texts["lenguaje-h-rendered"] }}</h2>
|
||||
<p>{{ texts["lenguaje-rendered-lead"] }}</p>
|
||||
<table class="ds-table">
|
||||
<thead><tr><th>{{ texts["lenguaje-th-en-ingles"] }}</th><th>{{ texts["lenguaje-th-decimos"] }}</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>witness</td><td><b>testigo</b></td></tr>
|
||||
<tr><td>door</td><td><b>puerta</b></td></tr>
|
||||
<tr><td>drift</td><td><b>deriva</b></td></tr>
|
||||
<tr><td>workflow</td><td><b>flujo de trabajo</b></td></tr>
|
||||
<tr><td>harness</td><td><b>arnés</b></td></tr>
|
||||
<tr><td>fixture</td><td><b>configuración de prueba</b></td></tr>
|
||||
<tr><td>guardrail</td><td><b>salvaguarda</b></td></tr>
|
||||
<tr><td>guardrails</td><td><b>salvaguardas</b></td></tr>
|
||||
<tr><td>red-team</td><td><b>prueba adversaria</b></td></tr>
|
||||
<tr><td>onboarding</td><td><b>incorporación</b></td></tr>
|
||||
<tr><td>onboarded</td><td><b>incorporado</b></td></tr>
|
||||
<tr><td>scripted</td><td><b>automatizado</b></td></tr>
|
||||
<tr><td>FSM</td><td><b>máquina de estados</b></td></tr>
|
||||
<tr><td>flag</td><td><b>opción de línea de comandos</b></td></tr>
|
||||
<tr><td>runtime</td><td><b>tiempo de ejecución</b></td></tr>
|
||||
<tr><td>backlog</td><td><b>cartera de pendientes</b></td></tr>
|
||||
<tr><td>seed</td><td><b>semilla</b></td></tr>
|
||||
<tr><td>constraint</td><td><b>restricción</b></td></tr>
|
||||
<tr><td>constraints</td><td><b>restricciones</b></td></tr>
|
||||
<tr><td>modes</td><td><b>modos</b></td></tr>
|
||||
<tr><td>schema</td><td><b>esquema</b></td></tr>
|
||||
<tr><td>reflection</td><td><b>reflexión</b></td></tr>
|
||||
<tr><td>merge</td><td><b>fusión</b></td></tr>
|
||||
<tr><td>parse</td><td><b>analizar</b></td></tr>
|
||||
<tr><td>deploy</td><td><b>desplegar</b></td></tr>
|
||||
<tr><td>link</td><td><b>enlazar</b></td></tr>
|
||||
<tr><td>log</td><td><b>registrar</b></td></tr>
|
||||
<tr><td>build</td><td><b>compilar</b></td></tr>
|
||||
<tr><td>debug</td><td><b>depurar</b></td></tr>
|
||||
<tr><td>test</td><td><b>prueba</b></td></tr>
|
||||
<tr><td>fork</td><td><b>bifurcación</b></td></tr>
|
||||
<tr><td>library</td><td><b>biblioteca</b></td></tr>
|
||||
<tr><td>run</td><td><b>ejecución</b></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>{{ texts["lenguaje-h-verbos"] }}</h2>
|
||||
<p>{{ texts["lenguaje-verbos-1"] }}</p>
|
||||
<p>{{ texts["lenguaje-verbos-2"] }}</p>
|
||||
<p>{{ texts["lenguaje-verbos-3"] }}</p>
|
||||
<p>{{ texts["lenguaje-verbos-4"] }}</p>
|
||||
<table class="ds-table">
|
||||
<thead><tr><th>{{ texts["lenguaje-th-no-escribimos"] }}</th><th>{{ texts["lenguaje-th-escribimos"] }}</th><th>{{ texts["lenguaje-th-porque"] }}</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><s>gatear</s></td><td><b>evaluar la gate / poner una gate</b></td><td>calco</td></tr>
|
||||
<tr><td><s>driftar</s></td><td><b>deriva</b></td><td>calco</td></tr>
|
||||
<tr><td><s>comitear</s></td><td><b>hacer un commit</b></td><td>calco</td></tr>
|
||||
<tr><td><s>commitear</s></td><td><b>hacer un commit</b></td><td>calco</td></tr>
|
||||
<tr><td><s>pushear</s></td><td><b>hacer un push</b></td><td>calco</td></tr>
|
||||
<tr><td><s>rebasear</s></td><td><b>aplicar un rebase</b></td><td>calco</td></tr>
|
||||
<tr><td><s>mergear</s></td><td><b>fusionar</b></td><td>calco</td></tr>
|
||||
<tr><td><s>parsear</s></td><td><b>analizar</b></td><td>calco</td></tr>
|
||||
<tr><td><s>deployar</s></td><td><b>desplegar</b></td><td>calco</td></tr>
|
||||
<tr><td><s>deploar</s></td><td><b>desplegar</b></td><td>calco</td></tr>
|
||||
<tr><td><s>linkear</s></td><td><b>enlazar</b></td><td>calco</td></tr>
|
||||
<tr><td><s>loguear</s></td><td><b>registrar</b></td><td>calco</td></tr>
|
||||
<tr><td><s>buildear</s></td><td><b>compilar</b></td><td>calco</td></tr>
|
||||
<tr><td><s>debuggear</s></td><td><b>depurar</b></td><td>calco</td></tr>
|
||||
<tr><td><s>testear</s></td><td><b>probar</b></td><td>calco</td></tr>
|
||||
<tr><td><s>forkear</s></td><td><b>bifurcar</b></td><td>calco</td></tr>
|
||||
<tr><td><s>forkar</s></td><td><b>bifurcar</b></td><td>calco</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3>{{ texts["lenguaje-h-friends"] }}</h3>
|
||||
<p>{{ texts["lenguaje-friends-1"] }}</p>
|
||||
<p>{{ texts["lenguaje-friends-2"] }}</p>
|
||||
<table class="ds-table">
|
||||
<thead><tr><th>{{ texts["lenguaje-th-no-escribimos"] }}</th><th>{{ texts["lenguaje-th-escribimos"] }}</th><th>{{ texts["lenguaje-th-porque"] }}</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><s>compuerta</s></td><td><b>gate</b></td><td>desplaza — Cognato de la ELECTRÓNICA (logic gate). Arrastra la lectura de circuito a una frase sobre transiciones de estado.</td></tr>
|
||||
<tr><td><s>puerta</s></td><td><b>gate</b></td><td>desplaza — Ya la usa `door` (la entrada de embudo, ADR-064). Traducir así fusionaría dos conceptos en una palabra.</td></tr>
|
||||
<tr><td><s>confirmar</s></td><td><b>hacer un commit</b></td><td>falso amigo — git ENVÍA este locale español y dice «confirmar» — y casi nadie lo usa, porque corta al lector de todo mensaje de error y de toda la do…</td></tr>
|
||||
<tr><td><s>enviar</s></td><td><b>hacer un push</b></td><td>falso amigo — «enviar» pierde que el destino es el remoto declarado, no un destinatario cualquiera.</td></tr>
|
||||
<tr><td><s>petición de tirón</s></td><td><b>Pull Request</b></td><td>falso amigo — Literal y sin referente: nadie lo reconocería en la forja.</td></tr>
|
||||
<tr><td><s>enganche</s></td><td><b>hook</b></td><td>desplaza — «enganche» no nombra nada en la herramienta; el lector no puede volver de la palabra al fichero.</td></tr>
|
||||
<tr><td><s>librería</s></td><td><b>biblioteca</b></td><td>falso amigo — Una librería es una TIENDA. El cognado derivó, y el desplazamiento es invisible precisamente porque la palabra sigue pareciéndose a su ori…</td></tr>
|
||||
<tr><td><s>corrida</s></td><td><b>ejecución</b></td><td>regional — Válido en varias variantes americanas; en España evoca la tauromaquia y rompe la frase. Es una elección de REGISTRO, no una corrección <20>…</td></tr>
|
||||
<tr><td><s>corridas</s></td><td><b>ejecuciones</b></td><td>regional — </td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>{{ texts["lenguaje-h-hablando"] }}</h2>
|
||||
<p>{{ texts["lenguaje-hablando-1"] }}</p>
|
||||
<p>{{ texts["lenguaje-hablando-2"] }}</p>
|
||||
<p>{{ texts["lenguaje-hablando-3"] }}</p>
|
||||
|
||||
<h2>{{ texts["lenguaje-h-legal"] }}</h2>
|
||||
<p>{{ texts["lenguaje-legal-1"] }}</p>
|
||||
<p><b>{{ texts["lenguaje-legal-2"] }}</b></p>
|
||||
<p>{{ texts["lenguaje-legal-3"] }}</p>
|
||||
<p>{{ texts["lenguaje-legal-4"] }}</p>
|
||||
|
||||
<hr>
|
||||
<p><small>{{ texts["lenguaje-foot"] }} <a href="mailto:ontoref@jesusperez.pro">ontoref@jesusperez.pro</a></small></p>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
|
|
@ -94,3 +94,5 @@
|
|||
</article>
|
||||
|
||||
{% include "partials/image-zoom.j2" %}
|
||||
|
||||
{% include "partials/glossary.j2" %}
|
||||
|
|
|
|||
|
|
@ -31,11 +31,23 @@
|
|||
</div>
|
||||
|
||||
<dialog class="nl-modal" aria-label="{{ f.title[lang] or f.title['en'] }}">
|
||||
{# hx-boost="false" + hx-disable: this form must POST natively cross-origin to
|
||||
listmonk. Without it, a page-level hx-boost hijacks the submit and htmx
|
||||
rejects the external URL (htmx:invalidPath) — the POST never fires. #}
|
||||
<form class="nl-modal__card" method="post" action="{{ newsletter.action }}"
|
||||
hx-boost="false" hx-disable>
|
||||
{# The submit is RELAYED by our own server (POST /api/htmx/newsletter), which forwards it to the
|
||||
provider named in newsletter.ncl and answers with a fragment swapped in right here.
|
||||
|
||||
It used to POST natively, cross-origin, straight to listmonk. That works — and it takes the
|
||||
reader with it: the browser navigated away and left them on listmonk's own page, thanked by a
|
||||
stranger, in listmonk's language, with no way back. A failure dropped them there too.
|
||||
|
||||
Doing it from the page with fetch() could not replace this: a cross-origin response is opaque,
|
||||
so the modal could not tell success from failure and would have to CLAIM success. Relaying
|
||||
server-side is what makes the outcome KNOWABLE — and only a knowable outcome can be reported
|
||||
honestly. #}
|
||||
<form class="nl-modal__card" method="post"
|
||||
hx-post="/api/htmx/newsletter"
|
||||
hx-target="closest .nl-modal__card"
|
||||
hx-swap="outerHTML"
|
||||
hx-disabled-elt="[data-nl-submit]">
|
||||
<input type="hidden" name="lang" value="{{ lang }}">
|
||||
<button type="button" class="nl-modal__close" data-nl-close
|
||||
aria-label="{{ f.close_label[lang] or f.close_label['en'] }}">×</button>
|
||||
<h2 class="nl-modal__title">{{ f.title[lang] or f.title['en'] }}</h2>
|
||||
|
|
@ -56,7 +68,8 @@
|
|||
<input type="text" name="nonce" value="" tabindex="-1" autocomplete="off" aria-hidden="true"
|
||||
style="position:absolute;left:-9999px;width:1px;height:1px;opacity:0">
|
||||
{# single target list #}
|
||||
<input type="hidden" name="l" value="{{ newsletter.list_uuid }}">
|
||||
{# The target list is NOT sent from here any more: the relay reads it from the same
|
||||
newsletter.ncl, so which list a subscriber lands on is not a value a browser can rewrite. #}
|
||||
|
||||
<label class="nl-consent">
|
||||
<input type="checkbox" name="consent" value="1" required data-nl-consent>
|
||||
|
|
|
|||
|
|
@ -24,6 +24,25 @@
|
|||
<div class="nav-dd__menu">
|
||||
<a href="{{ item.href }}" class="nav-dd__item">Ontoref</a>
|
||||
{%- for it in menu_items %}{% if "/dominios" in it.href or "/domains" in it.href %}<a href="{{ it.href }}" class="nav-dd__item">{{ it.label }}</a>{% endif %}{% endfor -%}
|
||||
{#- Conceptos, en LOS DOS idiomas. Estuvo solo en español y por una razón que era
|
||||
cierta: /concepts servía el estado vacío, y un enlace a una página vacía es
|
||||
la mitad de un idioma añadido. Pero la causa no era que faltaran glosas
|
||||
inglesas — era que la página leía `registry.ncl`, el árbitro de traducción,
|
||||
cuyas reglas se indexan por idioma de DESTINO; el inglés es la fuente y no
|
||||
genera ninguna. Las 20 definiciones inglesas llevaban meses escritas en
|
||||
`glossary.ncl`. Ahora la página las proyecta y el idioma está entero.
|
||||
|
||||
La condición se escribió esperando «cuando existan glosas inglesas»: el
|
||||
diagnóstico apuntaba al dato que faltaba en vez de al consumidor que miraba
|
||||
donde no era, así que la espera no habría terminado nunca sola. -#}
|
||||
<a href="{{ '/conceptos' if '/acerca-de' in item.href else '/concepts' }}" class="nav-dd__item">{{ 'Conceptos' if '/acerca-de' in item.href else 'Concepts' }}</a>
|
||||
{#- ADR en AMBOS idiomas: su ruta declara el mismo path para los dos
|
||||
(`en = "/adr", es = "/adr"`) y el índice sirve las 12 entradas en inglés, así
|
||||
que no hay aquí la asimetría que tiene Conceptos. Se enlaza desde el nav y no
|
||||
con `menu` en la ruta porque este desplegable se escribe a mano: `menu_items`
|
||||
solo aporta el item padre y `dominios`. La página existía y respondía 200
|
||||
desde hacía tiempo sin que nada la enlazara. -#}
|
||||
<a href="/adr" class="nav-dd__item">ADR</a>
|
||||
{%- if "/acerca-de" in item.href %}<a href="/nosotros" class="nav-dd__item">Nosotros</a>{% else %}<a href="/about-us" class="nav-dd__item">About us</a>{% endif -%}
|
||||
</div>
|
||||
</details>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue