Saltar al contenido principal

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.

Esta traducción la ha escrito una IA y todavía no la ha revisado ninguna persona. Leer esta página en inglés

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

HTML
<script type="module" src="https://cdn.jsdelivr.net/npm/@luz-ds/core@0.3.0/dist/luz.min.js"></script>
JS
import { initTabs } from "@luz-ds/core/tabs";
initTabs();
  • luz.js inicia 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.js y table-sort.js son fragmentos independientes: luz.js carga cada uno cuando hace falta y solo en las páginas que lo necesitan.
  • theme-mode.js es otro: luz.js lo 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 que catalog.js no 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, que catalog.js carga 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, como timeline.js y sidebar.js. catalog.js carga el primero en páginas con <luz-timeline> y el segundo en páginas con .luz-sidebar, o con una lista marcada con data-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/timeline y @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 en y es), y después data-luz-label-* y el lang más cercano. Un idioma añadido con registerLocale() no le llega: llama a initTimeline(document, t) con la t de core.

Los módulos

Los 13 módulos de JavaScript de core
MóduloQué haceExportaciones 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:

ComponenteSin 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