MediaWiki:Common.js
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.
/* Debugging: Collapsible sidebar for Vector & Vector 2022 */ var COLLAPSIBLE_SECTIONS = ['book1', 'book2']; var DEFAULT_OPEN = false; mw.loader.using(['mediawiki.util']).then(function () { function initCollapsiblePortlet(name) { var portal = document.getElementById('p-' + name); if (!portal) { console.warn('CollapsibleSidebar: Portal not found for', name); return; } // Try multiple selectors for compatibility var heading = portal.querySelector('.vector-menu-heading, h3'); var content = portal.querySelector('.vector-menu-content, .body'); if (!heading) { console.warn('CollapsibleSidebar: Heading not found in portal', name, portal); return; } if (!content) { console.warn('CollapsibleSidebar: Content not found in portal', name, portal); return; } console.log('CollapsibleSidebar: Initializing portal', name); portal.classList.add('mw-custom-collapsible'); // Get saved state var storageKey = 'mwSidebar:' + name; var stored = null; try { stored = localStorage.getItem(storageKey); } catch (e) {} var isOpen = stored === null ? DEFAULT_OPEN : stored === '1'; function setState(open) { console.log('CollapsibleSidebar: Setting state', name, open); portal.classList.toggle('is-open', open); heading.setAttribute('aria-expanded', open ? 'true' : 'false'); content.style.display = open ? '' : 'none'; try { localStorage.setItem(storageKey, open ? '1' : '0'); } catch (e) {} } // Accessibility & click events heading.setAttribute('role', 'button'); heading.setAttribute('tabindex', '0'); heading.addEventListener('click', function () { setState(!portal.classList.contains('is-open')); }); heading.addEventListener('keydown', function (e) { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); setState(!portal.classList.contains('is-open')); } }); setState(isOpen); } function bootCollapsibleSidebars() { console.log('CollapsibleSidebar: Booting for sections', COLLAPSIBLE_SECTIONS); COLLAPSIBLE_SECTIONS.forEach(initCollapsiblePortlet); } $(bootCollapsibleSidebars); mw.hook('wikipage.content').add(bootCollapsibleSidebars); });