|
|
Line 20: |
Line 20: |
| } | | } |
| }); | | }); |
| }
| |
| });
| |
|
| |
| function expandSectionIfCollapsed(headerElement) {
| |
| const sectionHeading = headerElement.closest('.citizen-section-heading');
| |
| const content = sectionHeading?.nextElementSibling;
| |
|
| |
| if (content && content.hidden) {
| |
| content.hidden = false; // Expand the parent section
| |
| }
| |
| }
| |
|
| |
| function prepareAndScrollToTarget(id) {
| |
| const target = document.getElementById(id);
| |
| if (!target) return;
| |
|
| |
| expandSectionIfCollapsed(target);
| |
|
| |
| setTimeout(() => {
| |
| target.scrollIntoView({ behavior: 'smooth', block: 'start' });
| |
| }, 50);
| |
| }
| |
|
| |
| // === Handle TOC (Contents) clicks BEFORE hash changes ===
| |
| document.addEventListener('click', function(e) {
| |
| if (window.innerWidth < 768) return; // Desktop only
| |
|
| |
| const anchor = e.target.closest('a[href^="#"]');
| |
| if (!anchor) return;
| |
|
| |
| const href = anchor.getAttribute('href');
| |
| if (!href || !href.startsWith('#')) return;
| |
|
| |
| const id = href.substring(1);
| |
| if (!id) return;
| |
|
| |
| // Prevent default jump
| |
| e.preventDefault();
| |
|
| |
| // Expand and scroll manually
| |
| prepareAndScrollToTarget(id);
| |
|
| |
| // Update URL manually
| |
| history.pushState(null, '', href);
| |
| });
| |
|
| |
| // === Handle page load with #hash ===
| |
| mw.hook('wikipage.content').add(function() {
| |
| if (window.innerWidth >= 768) {
| |
| const hash = window.location.hash;
| |
| if (hash && hash.length > 1) {
| |
| prepareAndScrollToTarget(hash.substring(1));
| |
| }
| |
| } | | } |
| }); | | }); |