Diferencia entre revisiones de «MediaWiki:Vector.js»
Ir a la navegación
Ir a la búsqueda
Página creada con «→Todo código JavaScript escrito aquí se cargará para todos los usuarios de la apariencia Vector: →========================================================== TENARIUS RO - BOTON MENU MOVIL SIDEBAR Pegar en MediaWiki:Vector.js ==========================================================: (function () { function ready(fn) { if (document.readyState !== 'loading') { fn(); } else { document.addEventListener('DOMContentLoa…» |
Sin resumen de edición |
||
| Línea 1: | Línea 1: | ||
/* ========================================================== | /* ========================================================== | ||
TENARIUS RO - | TENARIUS RO - MENU MOVIL SIDEBAR CORREGIDO | ||
Pegar en MediaWiki:Vector.js | Pegar en MediaWiki:Vector.js | ||
Este JS: | |||
- Detecta celular/tablet. | |||
- Agrega body.tenarius-mobile-mode. | |||
- Crea botón flotante Menu. | |||
- Abre/cierra el sidebar. | |||
========================================================== */ | ========================================================== */ | ||
(function () { | (function () { | ||
| Línea 11: | Línea 16: | ||
document.addEventListener('DOMContentLoaded', fn); | document.addEventListener('DOMContentLoaded', fn); | ||
} | } | ||
} | |||
function isMobileOrTablet() { | |||
var width = window.innerWidth || document.documentElement.clientWidth || screen.width; | |||
var coarse = false; | |||
try { | |||
coarse = window.matchMedia && | |||
(window.matchMedia('(hover: none) and (pointer: coarse)').matches || | |||
window.matchMedia('(max-device-width: 1024px)').matches); | |||
} catch (e) {} | |||
return width <= 1024 || coarse; | |||
} | } | ||
ready(function () { | ready(function () { | ||
var panel = document.getElementById('mw-panel'); | |||
if (!panel) { | |||
return; | return; | ||
} | } | ||
function updateMode() { | |||
if ( | if (isMobileOrTablet()) { | ||
document.body.classList.add('tenarius-mobile-mode'); | |||
} else { | |||
document.body.classList.remove('tenarius-mobile-mode'); | |||
document.body.classList.remove('tenarius-sidebar-open'); | |||
} | |||
} | |||
updateMode(); | |||
window.addEventListener('resize', updateMode); | |||
if (document.getElementById('tenarius-mobile-sidebar-button')) { | |||
return; | return; | ||
} | } | ||
| Línea 53: | Línea 83: | ||
} | } | ||
button.addEventListener('click', toggleMenu); | button.addEventListener('click', function () { | ||
updateMode(); | |||
toggleMenu(); | |||
}); | |||
overlay.addEventListener('click', closeMenu); | overlay.addEventListener('click', closeMenu); | ||
| Línea 63: | Línea 97: | ||
panel.addEventListener('click', function (event) { | panel.addEventListener('click', function (event) { | ||
var | var node = event.target; | ||
while (node && node !== panel) { | |||
if (node.tagName && node.tagName.toLowerCase() === 'a') { | |||
closeMenu(); | |||
break; | |||
} | |||
node = node.parentNode; | |||
} | } | ||
}); | }); | ||
Revisión actual - 05:34 16 jun 2026
/* ==========================================================
TENARIUS RO - MENU MOVIL SIDEBAR CORREGIDO
Pegar en MediaWiki:Vector.js
Este JS:
- Detecta celular/tablet.
- Agrega body.tenarius-mobile-mode.
- Crea botón flotante Menu.
- Abre/cierra el sidebar.
========================================================== */
(function () {
function ready(fn) {
if (document.readyState !== 'loading') {
fn();
} else {
document.addEventListener('DOMContentLoaded', fn);
}
}
function isMobileOrTablet() {
var width = window.innerWidth || document.documentElement.clientWidth || screen.width;
var coarse = false;
try {
coarse = window.matchMedia &&
(window.matchMedia('(hover: none) and (pointer: coarse)').matches ||
window.matchMedia('(max-device-width: 1024px)').matches);
} catch (e) {}
return width <= 1024 || coarse;
}
ready(function () {
var panel = document.getElementById('mw-panel');
if (!panel) {
return;
}
function updateMode() {
if (isMobileOrTablet()) {
document.body.classList.add('tenarius-mobile-mode');
} else {
document.body.classList.remove('tenarius-mobile-mode');
document.body.classList.remove('tenarius-sidebar-open');
}
}
updateMode();
window.addEventListener('resize', updateMode);
if (document.getElementById('tenarius-mobile-sidebar-button')) {
return;
}
var button = document.createElement('button');
button.id = 'tenarius-mobile-sidebar-button';
button.type = 'button';
button.innerHTML = 'Menu';
button.setAttribute('aria-label', 'Abrir o cerrar menu de navegacion');
button.setAttribute('aria-expanded', 'false');
var overlay = document.createElement('div');
overlay.id = 'tenarius-mobile-sidebar-overlay';
function closeMenu() {
document.body.classList.remove('tenarius-sidebar-open');
button.setAttribute('aria-expanded', 'false');
button.innerHTML = 'Menu';
}
function openMenu() {
document.body.classList.add('tenarius-sidebar-open');
button.setAttribute('aria-expanded', 'true');
button.innerHTML = 'Cerrar';
}
function toggleMenu() {
if (document.body.classList.contains('tenarius-sidebar-open')) {
closeMenu();
} else {
openMenu();
}
}
button.addEventListener('click', function () {
updateMode();
toggleMenu();
});
overlay.addEventListener('click', closeMenu);
document.addEventListener('keydown', function (event) {
if (event.key === 'Escape') {
closeMenu();
}
});
panel.addEventListener('click', function (event) {
var node = event.target;
while (node && node !== panel) {
if (node.tagName && node.tagName.toLowerCase() === 'a') {
closeMenu();
break;
}
node = node.parentNode;
}
});
document.body.appendChild(overlay);
document.body.appendChild(button);
});
})();