MediaWiki:Common.js: Difference between revisions
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
/* ICE List | /* ICE List – Anon donate banner (safe + scoped) | ||
* - | * - ONLY runs for anonymous users | ||
* - | * - ONLY styles when Anonnotice has content | ||
* - | * - Adds a close (×) button | ||
* - Remembers dismissal | * - Remembers dismissal in localStorage | ||
*/ | */ | ||
(function () { | (function () { | ||
'use strict'; | 'use strict'; | ||
var KEY = ' | var KEY = 'icelist_anon_donate_dismiss_until'; | ||
var DAYS = 14; | var DAYS = 14; | ||
function | // Only for anonymous users | ||
if (!mw.user.isAnon()) return; | |||
// Respect dismissal window | |||
var until = parseInt(localStorage.getItem(KEY) || '0', 10); | |||
if (Date.now() < until) return; | |||
function mount() { | |||
var siteNotice = document.getElementById('siteNotice'); | var siteNotice = document.getElementById('siteNotice'); | ||
if (!siteNotice) return; | if (!siteNotice) return; | ||
var | // If Anonnotice is empty (or only whitespace), do nothing | ||
var txt = (siteNotice.textContent || '').replace(/\s+/g, ' ').trim(); | |||
if (!txt) return; | |||
// | // Add a class so CSS ONLY applies when we explicitly say so | ||
siteNotice.classList.add('icelist-anon-donate'); | |||
// | // Find the Donate link (prefer the span hook) | ||
var | var donateLink = siteNotice.querySelector('.icelist-donate-cta a'); | ||
if ( | if (!donateLink) { | ||
siteNotice. | // fallback: first link that points to the donate page | ||
donateLink = siteNotice.querySelector('a[href*="ICE_List_Wiki:Donate"]'); | |||
} | } | ||
if (donateLink) donateLink.classList.add('icelist-donate-btn'); | |||
// | // Add close button if it doesn't already exist | ||
siteNotice. | if (!siteNotice.querySelector('.icelist-notice-close')) { | ||
var btn = document.createElement('button'); | |||
btn.type = 'button'; | |||
btn.className = 'icelist-notice-close'; | |||
btn.setAttribute('aria-label', 'Close'); | |||
btn.textContent = '×'; | |||
siteNotice.appendChild(btn); | |||
btn.addEventListener('click', function () { | |||
siteNotice.style.display = 'none'; | |||
localStorage.setItem(KEY, String(Date.now() + DAYS * 24 * 60 * 60 * 1000)); | |||
}); | |||
} | } | ||
} | } | ||
if (document.readyState === 'loading') { | if (document.readyState === 'loading') { | ||
document.addEventListener('DOMContentLoaded', | document.addEventListener('DOMContentLoaded', mount); | ||
} else { | } else { | ||
mount(); | |||
} | } | ||
})(); | })(); | ||