Primeros pasos
Módulos de JavaScript
Qué añade cada script opcional, cómo cargar solo el que necesitas y qué hace la página sin ellos.
Todas las páginas de LUZ funcionan sin JavaScript. Los scripts añaden comportamiento: copiar, resaltar, un botón que alterna el modo de color, reproductores, pestañas y ordenación de tablas. El catálogo añade los suyos: búsqueda, aviso de cookies, la hora del día para el modo de color, una línea de tiempo y el seguimiento del desplazamiento de la barra lateral.
Cargarlo todo o un módulo
<script type="module" src="https://cdn.jsdelivr.net/npm/@luz-ds/core@0.3.0/dist/luz.min.js"></script>
import { initTabs } from "@luz-ds/core/tabs";
initTabs();
luz.jsinicia todos los módulos al cargar la página.- Importar un solo módulo no hace nada hasta que llamas a su función
init. midi.jsytable-sort.jsson fragmentos independientes:luz.jscarga cada uno cuando hace falta y solo en las páginas que lo necesitan.theme-mode.jses otro:luz.jslo carga solo en una página con un<luz-theme-mode>. Consulta Modo de color.- La búsqueda del sitio está en
@luz-ds/catalog: consulta Búsqueda. El aviso de cookies también está ahí, en un módulo propio quecatalog.jsno incluye: consulta Consentimiento de cookies. La hora del día para el modo de color es un tercer módulo del mismo tipo,theme-time.js, quecatalog.jscarga solo en páginas con un<luz-theme-time>: consulta Modo de color según la hora del día. - La línea de tiempo y el seguimiento del desplazamiento de la barra lateral también están en
@luz-ds/catalog, comotimeline.jsysidebar.js.catalog.jscarga el primero en páginas con<luz-timeline>y el segundo en páginas con.luz-sidebar, o con una lista marcada condata-luz-spy. Impórtalos por su nombre para una línea de tiempo o una barra lateral añadidas más tarde:@luz-ds/catalog/timeliney@luz-ds/catalog/sidebar. - Una página que solo carga core no tiene seguimiento del desplazamiento. El cajón de la barra lateral es un popover nativo y funciona sin script.
- La línea de tiempo tiene un diccionario pequeño propio para sus cuatro botones (solo
enyes), y despuésdata-luz-label-*y ellangmás cercano. Un idioma añadido conregisterLocale()no le llega: llama ainitTimeline(document, t)con latde core.
Los módulos
Los 13 módulos de JavaScript de core
| Módulo | Qué hace | Exportaciones principales |
|---|---|---|
luz.js | Punto de entrada: vuelve a exportar todos los módulos y los inicia al cargar la página | Todo lo que aparece a continuación |
theme.js | Cambio a un aspecto propio; el modo de color es de theme-mode.js | applyTheme |
theme-mode.js | El elemento <luz-theme-mode>, en un archivo propio que se carga bajo demanda | Ninguna: al importarlo se define el elemento |
theme-boot.js | Un script clásico para la <head>: el modo de color antes del primer pintado | Ninguna |
clipboard.js | Copiar con respuesta visual | copyToClipboard, initCopyButtons |
modal.js | Alternativa para los atributos command y commandfor en navegadores que no los admiten | initModals, supportsCommands |
highlight.js | Resaltado de sintaxis sin dependencias para bloques de código | highlightBlock, initHighlight |
player.js | Reproductores de vídeo, audio y MIDI con una interfaz común | mountPlayer, mountMidiPlayer, initPlayers |
tabs.js | Activación de pestañas y compatibilidad con el teclado | activateTab, initTabs |
i18n.js | Textos que escriben los scripts en el idioma del lang más cercano: inglés en el punto de entrada y los demás idiomas se cargan cuando los usa una página | t, getLang, registerLocale, loadLocales |
utils.js | Funciones auxiliares | formatTime, escapeHtml, calculateProgress |
table-sort.js | Ordena una tabla en el navegador: un encabezado marcado con data-luz-sort se convierte en botón. Se carga cuando hace falta, solo en páginas que tienen uno | initTableSort(root, t) |
midi.js | Analizador MIDI y programador de Web Audio, cargado cuando hace falta | MidiPlayer |
Idiomas y textos que escriben los scripts
El inglés está en el punto de entrada. Cada uno de los demás idiomas que incluye LUZ es un archivo pequeño, que se carga al inicio en páginas cuyo <html lang> o cuyo lang fuera de un enlace o una opción lo indica; las páginas en inglés no hacen ninguna solicitud.
Con los módulos individuales, llama tú a loadLocales() y usa await loadLocales() antes de initHighlight() e initPlayers(). Si no se puede cargar un archivo, se muestra un único aviso en la consola y se usa el inglés.
Para un idioma que LUZ no incluya, establece una vez data-luz-label-* en <html> o <body>, o llama a registerLocale() antes de iniciar los scripts.
Para comprobar el archivo, añade un mapa de importación con una sección integrity antes del primer script de módulo, solo en las páginas de ese idioma. Un enlace modulepreload con integrity no es una protección en Safari ni Firefox: úsalo como mejora del rendimiento.
Añadir un idioma a LUZ requiere un pull request: el archivo JSON packages/core/src/i18n/<code>.json, una línea en el mapa files de i18n.js y una fila de presupuesto. Los pasos están en AGENTS.md.
Sin JavaScript
A qué recurre cada comportamiento cuando el script no se ejecuta:
| Componente | Sin JavaScript |
|---|---|
Enlaces y todos los paneles apilados | |
Los cuatro botones de opción siguen cambiando el modo; Automático sigue al sistema y no se recuerda la elección | |
No se muestran ni la barra ni los momentos; los botones de opción de core siguen cambiando el modo y no se aplica ninguna hora del día | |
Oculto; el texto sigue pudiéndose seleccionar | |
Los controles propios del navegador para archivos multimedia; MIDI muestra su texto alternativo | |
Se abre donde el navegador admite command; en los demás casos, el botón de apertura no hace nada | |
Texto sin formato ni colores | |
Un encabezado con enlace se ordena en el servidor; un encabezado simple no se puede ordenar. Nunca se ocultan filas | |
Una lista ordenada con una línea y un punto por elemento; todos los elementos son visibles | |
Funciona, incluido el cajón; el enlace actual no sigue el desplazamiento | |
Índice y otras listas data-luz-spy | Enlaces a las secciones; no se marca cuál está a la vista |