MediaWiki:Vector.js

De Tenarius RO Wiki
Revisión del 05:34 16 jun 2026 de Akalianx (discusión | contribs.)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

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
/* ==========================================================
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);
    });
})();