diff --git a/site/site/_htmx/assets/.gitkeep b/site/site/_htmx/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/site/site/_htmx/templates/pages/about-us.j2 b/site/site/_htmx/templates/pages/about-us.j2 new file mode 100644 index 0000000..82b64f5 --- /dev/null +++ b/site/site/_htmx/templates/pages/about-us.j2 @@ -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. #} +
+
+
+

{{ texts["about-us-page-title"] }}

+

{{ texts["about-us-page-subtitle"] }}

+
+
+ +
+
+

{{ texts["about-us-page-description"] | safe }}

+ +

{{ texts["about-us-h-quien"] }}

+

{{ texts["about-us-quien-1"] | safe }}

+

{{ texts["about-us-quien-2"] | safe }}

+ +

{{ texts["about-us-h-porque"] }}

+

{{ texts["about-us-porque-1"] | safe }}

+

{{ texts["about-us-porque-2"] | safe }}

+ +

{{ texts["about-us-h-como"] }}

+

{{ texts["about-us-como-1"] | safe }}

+

{{ texts["about-us-como-2"] | safe }}

+

{{ texts["about-us-como-3"] | safe }}

+ +

{{ texts["about-us-h-abierto"] }}

+

{{ texts["about-us-abierto-1"] | safe }}

+

{{ texts["about-us-abierto-2"] | safe }}

+
+
+
diff --git a/site/site/_htmx/templates/pages/conceptos.j2 b/site/site/_htmx/templates/pages/conceptos.j2 new file mode 100644 index 0000000..f95a0ec --- /dev/null +++ b/site/site/_htmx/templates/pages/conceptos.j2 @@ -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
llega renderizado del servidor y no por `fetch`. #} +
+ + +
+
+

{{ texts["conceptos-page-title"] }}

+

{{ texts["conceptos-page-subtitle"] }}

+ +

{{ texts["conceptos-intro"] }}

+ + {# 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. #} +
+ {{ texts["conceptos-html"] | safe }} +
+
+
+ + {# SIN tooltip, deliberadamente. Esta página ES donde se montan las explicaciones: cada término + tiene su definición en el
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
que el
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
ya tiene `id` y `:target`. #} +
diff --git a/site/site/_htmx/templates/pages/lenguaje.j2 b/site/site/_htmx/templates/pages/lenguaje.j2 new file mode 100644 index 0000000..c3d0ae0 --- /dev/null +++ b/site/site/_htmx/templates/pages/lenguaje.j2 @@ -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. #} +
+
+
+

{{ texts["lenguaje-page-title"] }}

+

{{ texts["lenguaje-page-subtitle"] }}

+
+
+ +
+
+

{{ texts["lenguaje-intro"] }}

+ +

{{ texts["lenguaje-h-criterio"] }}

+

{{ texts["lenguaje-criterio-lead"] }}

+

{{ texts["lenguaje-criterio-1-t"] }} {{ texts["lenguaje-criterio-1"] }}

+

{{ texts["lenguaje-criterio-2-t"] }} {{ texts["lenguaje-criterio-2"] }}

+

{{ texts["lenguaje-criterio-3"] }}

+

{{ texts["lenguaje-criterio-run"] }}

+ +

{{ texts["lenguaje-h-kept"] }}

+

{{ texts["lenguaje-kept-lead"] }}

+ + + + + + + + + + + + + + + + +
{{ texts["lenguaje-th-termino"] }}{{ texts["lenguaje-th-que-es"] }}{{ texts["lenguaje-th-porque-queda"] }}
gateuna gate — la condición tipada que una transición debe satisfacer para poder ocurrirno hay palabra española fiel — traducirlo rompe el concepto
commitun commit — la unidad de cambio registrada, con su hashes un identificador — traducirlo rompe la referencia
pushun push — el envío de los commits al remotoes un identificador — traducirlo rompe la referencia
rebaseun rebase — reescribir la rama sobre otra basees un identificador — traducirlo rompe la referencia
pull requestun Pull Request — la propuesta de fusión, con su revisiónes un identificador — traducirlo rompe la referencia
hookun hook — el enganche que dispara en un punto del cicloes un identificador — traducirlo rompe la referencia
NCLNCL — el lenguaje de configuración tipada en el que se declara todo estoes un identificador — traducirlo rompe la referencia
ADRun ADR — el registro de una decisión de arquitectura, con sus restriccioneses un identificador — traducirlo rompe la referencia
DAGun DAG — grafo dirigido acíclico; la forma que tiene un modoes un identificador — traducirlo rompe la referencia
JSONLJSONL — un objeto JSON por línea; el formato del testigoes un identificador — traducirlo rompe la referencia
Ed25519Ed25519 — el esquema con el que se firma un testigoes un identificador — traducirlo rompe la referencia
exitexit — el código de salida de un proceso (0 = pasa)es un identificador — traducirlo rompe la referencia
+ +

{{ texts["lenguaje-h-rendered"] }}

+

{{ texts["lenguaje-rendered-lead"] }}

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{{ texts["lenguaje-th-en-ingles"] }}{{ texts["lenguaje-th-decimos"] }}
witnesstestigo
doorpuerta
driftderiva
workflowflujo de trabajo
harnessarnés
fixtureconfiguración de prueba
guardrailsalvaguarda
guardrailssalvaguardas
red-teamprueba adversaria
onboardingincorporación
onboardedincorporado
scriptedautomatizado
FSMmáquina de estados
flagopción de línea de comandos
runtimetiempo de ejecución
backlogcartera de pendientes
seedsemilla
constraintrestricción
constraintsrestricciones
modesmodos
schemaesquema
reflectionreflexión
mergefusión
parseanalizar
deploydesplegar
linkenlazar
logregistrar
buildcompilar
debugdepurar
testprueba
forkbifurcación
librarybiblioteca
runejecución
+ +

{{ texts["lenguaje-h-verbos"] }}

+

{{ texts["lenguaje-verbos-1"] }}

+

{{ texts["lenguaje-verbos-2"] }}

+

{{ texts["lenguaje-verbos-3"] }}

+

{{ texts["lenguaje-verbos-4"] }}

+ + + + + + + + + + + + + + + + + + + + + +
{{ texts["lenguaje-th-no-escribimos"] }}{{ texts["lenguaje-th-escribimos"] }}{{ texts["lenguaje-th-porque"] }}
gatearevaluar la gate / poner una gatecalco
driftarderivacalco
comitearhacer un commitcalco
commitearhacer un commitcalco
pushearhacer un pushcalco
rebasearaplicar un rebasecalco
mergearfusionarcalco
parsearanalizarcalco
deployardesplegarcalco
deploardesplegarcalco
linkearenlazarcalco
loguearregistrarcalco
buildearcompilarcalco
debuggeardepurarcalco
testearprobarcalco
forkearbifurcarcalco
forkarbifurcarcalco
+ +

{{ texts["lenguaje-h-friends"] }}

+

{{ texts["lenguaje-friends-1"] }}

+

{{ texts["lenguaje-friends-2"] }}

+ + + + + + + + + + + + + +
{{ texts["lenguaje-th-no-escribimos"] }}{{ texts["lenguaje-th-escribimos"] }}{{ texts["lenguaje-th-porque"] }}
compuertagatedesplaza — Cognato de la ELECTRÓNICA (logic gate). Arrastra la lectura de circuito a una frase sobre transiciones de estado.
puertagatedesplaza — Ya la usa `door` (la entrada de embudo, ADR-064). Traducir así fusionaría dos conceptos en una palabra.
confirmarhacer un commitfalso 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…
enviarhacer un pushfalso amigo — «enviar» pierde que el destino es el remoto declarado, no un destinatario cualquiera.
petición de tirónPull Requestfalso amigo — Literal y sin referente: nadie lo reconocería en la forja.
enganchehookdesplaza — «enganche» no nombra nada en la herramienta; el lector no puede volver de la palabra al fichero.
libreríabibliotecafalso 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…
corridaejecuciónregional — 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 �…
corridasejecucionesregional —
+ +

{{ texts["lenguaje-h-hablando"] }}

+

{{ texts["lenguaje-hablando-1"] }}

+

{{ texts["lenguaje-hablando-2"] }}

+

{{ texts["lenguaje-hablando-3"] }}

+ +

{{ texts["lenguaje-h-legal"] }}

+

{{ texts["lenguaje-legal-1"] }}

+

{{ texts["lenguaje-legal-2"] }}

+

{{ texts["lenguaje-legal-3"] }}

+

{{ texts["lenguaje-legal-4"] }}

+ +
+

{{ texts["lenguaje-foot"] }} ontoref@jesusperez.pro

+
+
+
diff --git a/site/site/_htmx/templates/pages/post.j2 b/site/site/_htmx/templates/pages/post.j2 index 9f808ce..e54e9cb 100644 --- a/site/site/_htmx/templates/pages/post.j2 +++ b/site/site/_htmx/templates/pages/post.j2 @@ -94,3 +94,5 @@ {% include "partials/image-zoom.j2" %} + +{% include "partials/glossary.j2" %} diff --git a/site/site/_htmx/templates/partials/cta/subscribe.j2 b/site/site/_htmx/templates/partials/cta/subscribe.j2 index 3a0770c..3cf1b0c 100644 --- a/site/site/_htmx/templates/partials/cta/subscribe.j2 +++ b/site/site/_htmx/templates/partials/cta/subscribe.j2 @@ -31,11 +31,23 @@ - {# 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. #} -
+ {# 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. #} + +

{{ f.title[lang] or f.title['en'] }}

@@ -56,7 +68,8 @@ {# single target list #} - + {# 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. #}