Skip to content

v2.9 Share & Power Input: compartir doc por URL (gzip nativo), regex en reemplazo, JSONPath y accesibilidad (92/92 tests)#9

Merged
luisfemojica merged 1 commit into
mainfrom
v2.9-share-power
Jun 13, 2026
Merged

v2.9 Share & Power Input: compartir doc por URL (gzip nativo), regex en reemplazo, JSONPath y accesibilidad (92/92 tests)#9
luisfemojica merged 1 commit into
mainfrom
v2.9-share-power

Conversation

@luisfemojica

Copy link
Copy Markdown
Owner

Resumen

v2.9 "Share & Power Input": cuatro mejoras del backlog, todas dentro de la filosofía un-archivo/cero-dependencias. 92/92 tests pasando.

📤 Compartir documento por URL

Botón 📤 Compartir doc: comprime el documento con CompressionStream (gzip nativo del navegador, cero dependencias) y lo codifica en base64url dentro del hash de la URL. El hash nunca se envía a ningún servidor — la privacidad del proyecto queda intacta. Al abrir el enlace, loadDocFromHash() descomprime y carga el documento con validación en vivo.

  • Roundtrip con unicode verificado (😀 ñandú & más)
  • base64url puro (sin +, /, =) — apto para URL sin escapar
  • Límite ~45KB comprimido con aviso claro; aviso también en navegadores sin CompressionStream
  • Ejemplo real: 79 chars → 126 chars en el enlace

♻️ Regex en buscar y reemplazar

Checkbox regex en la fila de reemplazo: expresiones regulares con grupos $1, $2... tanto en "Reemplazar" (siguiente desde el cursor, con vuelta al inicio) como en "Todo". Regex inválida muestra aviso sin romper. Verificado: (\d+) USD$1 EUR reemplazó 2 coincidencias correctamente.

🧭 JSONPath en el árbol JSON

Paridad con el árbol XML: click en una clave copia su ruta JSONPath ($.tienda.libros[0].titulo) al portapapeles. Las rutas XML siguen rellenando además el campo XPath (hay motor de consulta); las JSON solo se copian (no hay motor JSONPath embebido).

♿ Accesibilidad (primera pasada WCAG)

Estaba prometida en los objetivos de calidad de SCOPE.md y nunca se había hecho:

  • role="alert" en el contenedor de errores, aria-live="polite" en la validación en vivo
  • aria-label en botones de icono (▲▼) y selects
  • aria-hidden="true" en los gutters decorativos (no son contenido para lectores)
  • Foco visible por teclado (outline ámbar de 3px) en todos los controles, en los 5 temas

Descartado en esta versión

UI bilingüe ES/EN — ~100+ strings a tocar con riesgo real de regresiones. Se reconsiderará como versión propia si el proyecto gana tracción internacional. Documentado en SCOPE.md y ROADMAP.md.

Tests

7 nuevos: JSONPath en árbol JSON, gzip/gunzip roundtrip + base64url, regex con grupos (UI), regex inválida (UI), carga desde #doc= (UI), y atributos ARIA (UI). 92/92 pasando; el CI correrá el workflow headless al abrir el PR.

Métricas

index.html: ~2277 líneas / ~88KB (límites: ~2500 / 100KB duro).

🤖 Generated with Claude Code

…idad

Features:
- Compartir documento por URL: botón que comprime el documento con
  CompressionStream (gzip nativo del navegador, cero dependencias) y lo
  codifica en base64url dentro del hash de la URL — que nunca se envía a
  ningún servidor. loadDocFromHash() descomprime al abrir el enlace.
  Límite ~45KB comprimido; aviso en navegadores sin soporte.
- Regex en buscar y reemplazar: checkbox 'regex' con grupos $1,$2... en
  Reemplazar y Todo. Regex inválida muestra aviso sin romper.
- JSONPath en el árbol JSON: click en una clave copia su ruta
  ($.tienda.libros[0].titulo) al portapapeles, en paridad con el árbol XML.
- Accesibilidad (primera pasada WCAG): role=alert en errores, aria-live en
  validación, aria-label en iconos/selects, aria-hidden en gutters, y foco
  visible por teclado (outline ámbar) en todos los controles y temas.

Descartado: UI bilingüe ES/EN (~100+ strings, riesgo de regresiones).

Tests: 7 nuevos — 92/92 pasando.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@luisfemojica luisfemojica merged commit cbf0eb9 into main Jun 13, 2026
1 check passed
@luisfemojica luisfemojica deleted the v2.9-share-power branch June 13, 2026 16:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant