Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:Citizen.js: Difference between revisions

MediaWiki interface page
No edit summary
Tag: Manual revert
No edit summary
Line 31: Line 31:


   while (current) {
   while (current) {
     // If we find a collapsed citizen-section content block, expand it
     // Expand if we find a collapsed citizen-section
     if (current.classList && current.classList.contains('citizen-section') && current.hidden) {
     if (current.classList && current.classList.contains('citizen-section') && current.hidden) {
       current.hidden = false;
       current.hidden = false;
     }
     }


     // If we reach a section heading, stop
     // Stop walking if we hit a section heading
     if (current.classList && current.classList.contains('citizen-section-heading')) {
     if (current.classList && current.classList.contains('citizen-section-heading')) {
       break;
       break;
Line 45: Line 45:
}
}


// Helper: Smooth scroll to heading with slight upward offset
function smoothScrollToHeading(heading) {
  if (!heading) return;
  heading.scrollIntoView({ behavior: 'smooth', block: 'start' });
  setTimeout(() => {
    window.scrollBy(0, -60); // Offset upward by 60px
  }, 300); // Delay to wait for smooth scroll to finish
}


// === Handle direct URL loads with a hash (on page load) ===
// === Handle direct URL loads with a hash (on page load) ===
Line 58: Line 68:


           setTimeout(() => {
           setTimeout(() => {
             heading.scrollIntoView({ behavior: 'smooth', block: 'start' });
             smoothScrollToHeading(heading);
           }, 50);
           }, 50);
         }
         }
Line 80: Line 90:


           setTimeout(() => {
           setTimeout(() => {
             heading.scrollIntoView({ behavior: 'smooth', block: 'start' });
             smoothScrollToHeading(heading);
           }, 50);
           }, 50);
         }
         }
Line 95: Line 105:
mw.hook('wikipage.content').add(function() {
mw.hook('wikipage.content').add(function() {
   if (window.innerWidth >= 768) {
   if (window.innerWidth >= 768) {
     setTimeout(() => { // Small delay to let TOC fully render
     setTimeout(() => {
       document.querySelectorAll('#mw-panel-toc a[href^="#"]').forEach(function(anchor) {
       document.querySelectorAll('#mw-panel-toc a[href^="#"]').forEach(function(anchor) {
         anchor.addEventListener('click', function(e) {
         anchor.addEventListener('click', function(e) {
Line 102: Line 112:


           if (heading) {
           if (heading) {
             e.preventDefault(); // Prevent default browser jump
             e.preventDefault(); // Prevent native jump
             expandCitizenSectionFromHeading(heading);
             expandCitizenSectionFromHeading(heading);


             setTimeout(() => {
             setTimeout(() => {
               heading.scrollIntoView({ behavior: 'smooth', block: 'start' });
               smoothScrollToHeading(heading);
             }, 50);
             }, 50);
           }
           }