MediaWiki:Common.js

From EstoriaRO Wiki
Revision as of 02:42, 19 December 2025 by Admin (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
mw.loader.using('mediawiki.util').then(() => {
    function forceSidebarOpen() {
        document.querySelectorAll('.vector-menu-checkbox').forEach(cb => {
            cb.checked = true;
        });
    }

    forceSidebarOpen();
    setTimeout(forceSidebarOpen, 300);
    setTimeout(forceSidebarOpen, 800);
});


document.querySelectorAll('#mw-panel .portal h3').forEach(h => {
    h.style.cursor = 'pointer';
    h.addEventListener('click', () => {
        const content = h.nextElementSibling;
        content.style.display =
            content.style.display === 'none' ? 'block' : 'none';
    });
});

(function () {
    const current = location.pathname.replace('/wiki/', '');

    document.querySelectorAll('#mw-panel a').forEach(link => {
        const href = link.getAttribute('href');
        if (!href || !href.includes('/wiki/')) return;

        if (href.endsWith(current)) {
            link.classList.add('active-page');

            // auto open parent section
            const portal = link.closest('.portal');
            if (portal) {
                const body = portal.querySelector('.body');
                if (body) body.style.display = 'block';
            }
        }
    });
})();


(function () {
    const h1 = document.querySelector('#firstHeading');
    if (!h1) return;

    const crumb = document.createElement('div');
    crumb.className = 'gitbook-breadcrumb';
    crumb.innerHTML = `<a href="/wiki/Main_Page">Home</a> / ${h1.textContent}`;

    document.querySelector('#content').prepend(crumb);
})();


(function () {
    const links = Array.from(document.querySelectorAll('#mw-panel a[href*="/wiki/"]'));
    const current = location.pathname.replace('/wiki/', '');
    const index = links.findIndex(a => a.href.endsWith(current));

    if (index === -1) return;

    const nav = document.createElement('div');
    nav.className = 'gitbook-prevnext';

    if (links[index - 1]) {
        nav.innerHTML += `<a class="prev" href="${links[index - 1].href}">← ${links[index - 1].textContent}</a>`;
    }
    if (links[index + 1]) {
        nav.innerHTML += `<a class="next" href="${links[index + 1].href}">${links[index + 1].textContent} →</a>`;
    }

    document.querySelector('#content').appendChild(nav);
})();

(function () {
    // Detect Main Page
    const isHome =
        document.body.classList.contains('mw-mainpage') ||
        document.body.classList.contains('page-Main_Page');

    // Stop auto-scroll on Home
    if (isHome) return;

    // Target scroll position (after breadcrumb / hero)
    const content = document.getElementById('content');
    if (!content) return;

    // Small delay to wait layout ready
    setTimeout(() => {
        const y = content.getBoundingClientRect().top + window.scrollY - 20;
        window.scrollTo({
            top: y,
            behavior: 'smooth'
        });
    }, 150);
})();