Skin para MediaWiki, especialmente diseñado y desarrollado para la wiki
de la e[ad] PUCV desde cero (con SkinMustache + skin.json).
Este skin está deliberadamente dedicado a Casiopea pero es fácilmente extendible a cualquier wiki con poco esfuerzo.
Está pensado desde la pantalla pequeña del teléfono en mente, con CSS moderno (que usa Grid/Flexbox, parámetros centralizados y variación de tema claro/oscuro), y con foco en accesibilidad WCAG 2.1 AA y con compatibilidad con Semantic MediaWiki.
El 11 de noviembre de 1572, el astrónomo danés Tycho Brahe observó una estrella nueva y brillante en la constelación de Casiopea. La llamó stella nova y documentó sus mediciones en De nova stella (1573), el tratado que dio al mundo la palabra «nova».
Aquello no era una estrella naciendo sino muriendo: hoy se conoce como SN 1572, «la supernova de Tycho», una supernova de tipo Ia en el brazo de Perseo, a unos 8.000–13.000 años luz. Llegó a brillar como Venus (magnitud ≈ −4), fue visible a plena luz del día durante semanas y se apagó en marzo de 1574. Su mayor consecuencia no fue astronómica sino filosófica: demostró que los cielos —que la tradición aristotélica creía inmutables y perfectos— cambian. Fue una de las grietas por donde entró la revolución científica.
wfLoadSkin( 'StellaNova' );
// opcional durante desarrollo:
// $wgDefaultSkin = 'stellanova';Probar sin cambiar el default: añadir ?useskin=stellanova a cualquier
URL.
Nombre de carpeta: wfLoadSkin( 'X' ) carga skins/X/skin.json, así
que el argumento debe coincidir con la carpeta. Las URLs de los assets
(fuentes incluidas) se calculan de la carpeta real donde el wiki sirve el
skin (Hooks::onResourceLoaderRegisterModules), no de un nombre fijo: por
eso da igual clonar en StellaNova, stella-nova o vía symlink — basta que
el wfLoadSkin apunte a esa carpeta y los woff2 resuelven solos. (Antes,
remoteSkinPath estaba hardcodeado y las fuentes daban 404 si la carpeta no
se llamaba exactamente StellaNova.)
Stella Nova sigue el camino oficial de MediaWiki para skins modernos:
SkinMustache + skin.json, separando datos (PHP) de presentación
(Mustache + CSS) y declarando todo en JSON.
skin.jsondeclara el grueso: el nombre del skin, losResourceModuleSkinStyles(estilos para extensiones), losHooks, losMessagesDirs. No hay archivo de bootstrap PHP que llame awfLoadSkin. La única salvedad: losResourceModulesdel skin (skins.stellanova.styles/.scripts) se registran en PHP (Hooks::onResourceLoaderRegisterModules) en vez de declararse aquí, para calcular suremoteSkinPathde la carpeta real y que las fuentes resuelvan sin importar cómo se llame el directorio al clonar (ver Instalación).includes/SkinStellaNova.phpextiendeSkinMustache. Es la única clase PHP del skin (aparte de los hooks): el resto del trabajo lo hace la plantilla. Su única responsabilidad es emitir las data keys propias que el.mustacheva a interpolar (is-sn-fullscreen,sn-identity,sn-isotype,sn-prefs,sn-chrome.notice/sidebar/footer).includes/templates/skin.mustachees la plantilla raíz. Consume las data keys que emiteSkinMustache({{{html-headelement}}},{{{html-body-content}}},{{#data-portlets}}…) más las propias del skin. Empieza con{{{html-headelement}}}y cierra con</body></html>.includes/Hooks.phpregistra el behaviour switch__PANTALLACOMPLETA__, sirve las preferencias del usuario como opciones de cuenta cuando está registrado, e inyecta el script inline de pre-pintado (resuelve tema y preferencias antes del primer paint para evitar FOUC).resources/tokens.cssdefine el sistema de diseño con custom properties (--sn-*): paleta, escala tipográfica, ritmo vertical (baseline grid), espacios, sombras, movimiento. Light/dark se voltea solo cambiando un puñado de tokens.resources/stella-nova.cssconsume los tokens para el layout y los componentes. Sin Bootstrap, sin framework — CSS moderno (Grid, Flexbox, container queries puntuales,:has(),color-mix()).resources/skin.jses JS vanilla (sin jQuery propio) y de mejora progresiva: sin él la página es legible y el pre-pintado deHooks.phpya aplicó el tema. Cubre el panel de preferencias, los menús emergentes y la búsqueda como modal en viewport compact.
Si vienes a tocar el skin por primera vez, conviene leerlo en este
orden: skin.json (qué declara) → skin.mustache (qué emite) →
tokens.css (qué variables hay) → stella-nova.css (cómo se aplica).
SkinStellaNova.php solo si necesitas un dato nuevo en la plantilla.
docs/ARCHITECTURE.md— principios y doctrina: SkinMustache,skinStylespara SMW/SRF, mobile-first, WCAG 2.1 AA, identidad tri-estado, chrome administrable.docs/DEVELOPMENT.md— plan de desarrollo: estado, roadmap M0–M8, workflow local, checklist de verificación, decisiones tomadas (y por qué).docs/LAYOUTS.md— esquemas ASCII de los layouts del skin: estándar (desktop), compact (mobile),__PANTALLACOMPLETA__(.sn-canvas), drawer de preferencias e impresión. Con breakpoints anotados.docs/DISENO.md— para diseñadoras y diseñadores: dónde tocar cada cosa (tabla), cómo iterar sin pelear con la caché de ResourceLoader, tipografía/íconos/color, y el espécimen gráfico (en línea o local endocs/specimen/) para iterar el sistema visual sin levantar la wiki.docs/EXTENSIONES.md— compatibilidad con extensiones: cómo el skin absorbe los CSS de 22 extensiones (incl. SMW, SRF, PageForms, OOUI, Maps, Echo…) sin parchearlas, los dos niveles de absorción (reescrita a mano vs snapshot tokenizado) y el flujo para integrar una nueva.docs/WIKITEXTO.md— guía editorial para quien escribe páginas: palabras mágicas del skin (__PANTALLACOMPLETA__) y clases CSS opt-in disponibles desde wikitexto (full-width,grilla+cols-N,plantilla,img-circle,noprint,sn-notice).specs/stella-nova.allium— especificación de comportamiento (Allium): resolución de preferencias, chrome administrable desde el namespaceStella-Nova, modo pantalla completa, identidad tri-estado (anónimo / cuenta temporal 1.43 / registrado) y el contrato de fidelidad estructural con MediaWiki y sus extensiones.
GPL-2.0-or-later. Ver COPYING.
Este proyecto está vivo, por lo que es cambiante e inestable, seguramente con fallas y aspectos incompletos. Tiene los bordes filosos, cuidado con cortarse los dedos.
