MediaWiki:Common.js: Difference between revisions

No edit summary
No edit summary
Line 2: Line 2:
  * - ONLY runs for anonymous users
  * - ONLY runs for anonymous users
  * - ONLY styles when Anonnotice has content
  * - ONLY styles when Anonnotice has content
  * - Adds a close (×) button (guaranteed visible)
  * - Adds a close (×) button
  * - Remembers dismissal in localStorage
  * - Remembers dismissal in localStorage
  */
  */
Line 11: Line 11:
   var DAYS = 14;
   var DAYS = 14;


  // Only for anonymous users
   if (!mw.user.isAnon()) return;
   if (!mw.user.isAnon()) return;


  // Respect dismissal window
   var until = parseInt(localStorage.getItem(KEY) || '0', 10);
   var until = parseInt(localStorage.getItem(KEY) || '0', 10);
   if (Date.now() < until) return;
   if (Date.now() < until) return;
Line 22: Line 20:
     if (!siteNotice) return;
     if (!siteNotice) return;


    // If Anonnotice is empty (or only whitespace), do nothing
     var txt = (siteNotice.textContent || '').replace(/\s+/g, ' ').trim();
     var txt = (siteNotice.textContent || '').replace(/\s+/g, ' ').trim();
     if (!txt) return;
     if (!txt) return;


    // Mark for scoped CSS
     siteNotice.classList.add('icelist-anon-donate');
     siteNotice.classList.add('icelist-anon-donate');


     // Ensure positioning context for absolute close button (CSS can override, but this helps)
     // Donate link hook (optional) + fallback
    if (!siteNotice.style.position) siteNotice.style.position = 'relative';
     var donateLink = siteNotice.querySelector('.icelist-donate-cta a')
 
       || siteNotice.querySelector('a[href*="ICE_List_Wiki:Donate"]');
    // Find the Donate link (prefer a hook if present)
     var donateLink = siteNotice.querySelector('.icelist-donate-cta a');
    if (!donateLink) {
       donateLink = siteNotice.querySelector('a[href*="ICE_List_Wiki:Donate"]');
    }
     if (donateLink) donateLink.classList.add('icelist-donate-btn');
     if (donateLink) donateLink.classList.add('icelist-donate-btn');


     // Add close button if it doesn't already exist
     // Add close button once
     if (!siteNotice.querySelector('.icelist-notice-close')) {
     if (!siteNotice.querySelector('.icelist-notice-close')) {
       var btn = document.createElement('button');
       var btn = document.createElement('button');
Line 47: Line 38:
       btn.textContent = '×';
       btn.textContent = '×';


       // Insert FIRST so it can't get pushed off-screen by table/flex layout
       // put it at the top so it can't get shoved off-screen by table layout
       siteNotice.insertBefore(btn, siteNotice.firstChild);
       siteNotice.insertBefore(btn, siteNotice.firstChild);


Line 59: Line 50:
   }
   }


   // Run after MediaWiki has built the DOM (safer than raw DOMContentLoaded)
   // run when page content is ready (MW-safe)
   if (typeof mw !== 'undefined' && mw.hook) {
   mw.hook('wikipage.content').add(mount);
    mw.hook('wikipage.content').add(function () {
      mount();
    });
  } else if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', mount);
  } else {
    mount();
  }
})();
})();