MediaWiki:Common.js
De Documentación UNED
Nota: Después de publicar, quizás necesite actualizar la caché de su navegador para ver los cambios.
- Firefox/Safari: Mantenga presionada la tecla Shift mientras pulsa el botón Actualizar, o presiona Ctrl+F5 o Ctrl+R (⌘+R en Mac)
- Google Chrome: presione Ctrl+Shift+R (⌘+Shift+R en Mac)
- Edge: mantenga presionada Ctrl mientras pulsa Actualizar, o presione Ctrl+F5
/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios en cada carga de página */
/**
* Auto-abrir miniaturas en <gallery mode="slideshow">
* Colocar en: MediaWiki:Common.js
* Autor: Paola + TI
*/
(function () {
// === CONFIGURACIÓN BÁSICA ===
// Si querés que aplique a todo el wiki, dejá esta lista vacía.
// Si querés que aplique SOLO a ciertas páginas, agrega sus títulos exactos:
// ej.: var PAGES_WHITELIST = ['Galeria', 'Documentación/Proyectos/GaleriaA'];
var PAGES_WHITELIST = []; // <= lista vacía = aplicar en todas
// Heurística para ubicar el botón que alterna la tira de miniaturas
function findToggleButton($root) {
var $buttons = $root.find('.mw-gallery-slideshow-buttons');
if (!$buttons.length) return $();
// Buscar botón/enlace por atributos accesibles y clases comunes
var $toggle = $buttons.find('button, a').filter(function () {
var $el = $(this);
var aria = ($el.attr('aria-label') || '').toLowerCase();
var title = ($el.attr('title') || '').toLowerCase();
var cls = ($el.attr('class') || '').toLowerCase();
return (
aria.includes('miniaturas') || aria.includes('thumbnails') ||
title.includes('miniaturas') || title.includes('thumbnails') ||
cls.includes('toggle') || cls.includes('thumb')
);
}).first();
// Si no se identificó por heurística, devolver el botón central si hay 3
if (!$toggle.length) {
var $candidatos = $buttons.find('button, a');
if ($candidatos.length === 3) {
$toggle = $($candidatos.get(1)); // el central
}
}
return $toggle;
}
// Intentar abrir las miniaturas de UN slideshow
function openThumbnails($gallery) {
// Evitar reentradas
if ($gallery.data('thumbs-opened')) return;
var $toggle = findToggleButton($gallery);
if ($toggle && $toggle.length) {
// Simular clic solo si aún no está abierto.
// Muchos skins añaden un estado "activo" al botón; si no, el propio
// componente evita duplicados.
$toggle.trigger('click');
$gallery.data('thumbs-opened', true);
}
}
// Aplicar a todos los slideshows presentes en un contenedor
function applyToContainer($container) {
$container.find('.mw-gallery-slideshow').each(function () {
openThumbnails($(this));
});
}
// Verificar whitelist (si se configuró)
function isWhitelisted() {
if (!PAGES_WHITELIST.length) return true;
var title = mw.config.get('wgPageName') || '';
// Comparar con títulos como se ven en la URL (espacios = _)
return PAGES_WHITELIST.some(function (t) {
return t.replace(/ /g, '_') === title;
});
}
// Salir si no corresponde
if (!isWhitelisted()) return;
// 1) Ejecutar cuando se cargue el contenido de la página
mw.hook('wikipage.content').add(function ($content) {
applyToContainer($content);
// 2) Observer: por si el DOM del slideshow se inyecta con retardo
var target = $content.get(0);
if (!target) return;
var observer = new MutationObserver(function (mutations) {
var shouldCheck = mutations.some(function (m) {
// Si se agregan nodos que puedan contener el slideshow
return (m.addedNodes && m.addedNodes.length);
});
if (shouldCheck) {
applyToContainer($content);
}
});
observer.observe(target, { childList: true, subtree: true });
// 3) Apagar el observer tras unos segundos para no dejarlo eterno
setTimeout(function () {
observer.disconnect();
}, 7000);
});
})();