Diferencia entre revisiones de «MediaWiki:Common.js»
De Documentación UNED
Página creada con «→Cualquier código JavaScript escrito aquí se cargará para todos los usuarios en cada carga de página: // MediaWiki:Common.js mw.hook('wikipage.content').add(function ($content) { $content.find('.mw-gallery-slideshow').each(function () { var $buttons = $(this).find('.mw-gallery-slideshow-buttons'); if (!$buttons.length) return; // Busca un botón que abra el carrusel de miniaturas. // Según la versión/skin, el botón puede tener distintos…» |
Sin resumen de edición |
||
| Línea 1: | Línea 1: | ||
/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios en cada carga de página */ | /* 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) { | |||
// por | 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 $toggle = $buttons.find('button, a').filter(function () { | ||
var $el = $(this); | var $el = $(this); | ||
var aria = ($el.attr('aria-label') || '').toLowerCase(); | var aria = ($el.attr('aria-label') || '').toLowerCase(); | ||
var title = ($el.attr('title') || '').toLowerCase(); | var title = ($el.attr('title') || '').toLowerCase(); | ||
var cls = $el.attr('class') || ''; | var cls = ($el.attr('class') || '').toLowerCase(); | ||
return aria.includes('miniaturas') || aria.includes('thumbnails') || | |||
return ( | |||
aria.includes('miniaturas') || aria.includes('thumbnails') || | |||
title.includes('miniaturas') || title.includes('thumbnails') || | |||
cls.includes('toggle') || cls.includes('thumb') | |||
); | |||
}).first(); | }).first(); | ||
if ($toggle.length) { | // 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'); | $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); | |||
}); | }); | ||
}); | })(); | ||
Revisión actual - 10:41 4 mar 2026
/* 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);
});
})();