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
No edit summary
Line 45: Line 45:
}
}


// Helper: Smooth scroll to heading after expansion with smart delay
// Helper: Proper scroll to real heading element, ignoring ghost anchors
function smoothScrollToHeading(heading) {
function smoothScrollToHeading(heading) {
   if (!heading) return;
   if (!heading) return;
  // If the heading has no visible size (hidden anchor), find the first real heading
  if (heading.offsetHeight === 0) {
    const nextHeading = heading.parentElement.querySelector('h1, h2, h3, h4, h5, h6');
    if (nextHeading) {
      heading = nextHeading;
    }
  }


   setTimeout(() => {
   setTimeout(() => {
Line 53: Line 61:


     setTimeout(() => {
     setTimeout(() => {
       const offset = 60; // How much we want to adjust upward
       const offset = 60; // Adjust this offset if needed
       const maxScrollableUp = window.scrollY; // How much room we have to scroll upward
       const maxScrollableUp = window.scrollY;


       if (maxScrollableUp > offset) {
       if (maxScrollableUp > offset) {
         window.scrollBy(0, -offset); // Only scroll up if possible
         window.scrollBy(0, -offset);
       } else {
       } else {
         window.scrollTo({ top: 0, behavior: 'smooth' }); // Scroll to top if near top
         window.scrollTo({ top: 0, behavior: 'smooth' });
       }
       }
     }, 300); // Wait for smooth scroll to finish before offset
     }, 300);
   }, 300); // Wait for DOM reflow after expansion
   }, 100); // Minor wait to ensure layout stabilizes
}
}