MediaWiki:Common.js: Difference between revisions
mNo edit summary Tag: Manual revert |
mNo edit summary |
||
| Line 35: | Line 35: | ||
}); | }); | ||
}); | }); | ||
}); | |||
mw.loader.using('mediawiki.user', function () { | |||
if (mw.user.isAnon()) { | |||
$('.user-only-dismiss').hide(); | |||
return; | |||
} | |||
// Track how many of each hash have been seen | |||
const hashCounts = {}; | |||
$('.maybe-dismissible').each(function (index) { | |||
const notice = $(this); | |||
// Use trimmed text content as base hash | |||
const text = notice.text().trim(); | |||
const hash = generateHash(text); | |||
// Count instances of the same hash | |||
if (!hashCounts[hash]) { | |||
hashCounts[hash] = 0; | |||
} else { | |||
hashCounts[hash]++; | |||
} | |||
// Create a unique key per page load (same content, multiple instances) | |||
const instanceKey = `${hash}-${hashCounts[hash]}`; | |||
const storageKey = 'dismissed-notice-' + instanceKey; | |||
if (localStorage.getItem(storageKey) === 'true') { | |||
notice.hide(); | |||
} | |||
notice.find('.dismiss-button').on('click', function () { | |||
notice.hide(); | |||
localStorage.setItem(storageKey, 'true'); | |||
}); | |||
}); | |||
// Simple string hash function | |||
function generateHash(str) { | |||
let hash = 0; | |||
for (let i = 0; i < str.length; i++) { | |||
hash = ((hash << 5) - hash) + str.charCodeAt(i); | |||
hash |= 0; // 32-bit int | |||
} | |||
return hash; | |||
} | |||
}); | }); | ||
Revision as of 22:40, 14 April 2025
/* Any JavaScript here will be loaded for all users on every page load. */
mw.loader.load( 'ext.cite.styles' );
/* Allows Template:Notice to be dismissable. */
mw.loader.using('mediawiki.user', function () {
if (mw.user.isAnon()) {
// Hide the dismiss button for anonymous users
$('.user-only-dismiss').hide();
return;
}
// Enable dismissal for logged-in users if allowed
$('.maybe-dismissible').addClass('dismissible-notice');
$('.dismissible-notice .dismiss-button').click(function () {
$(this).closest('.dismissible-notice').hide();
});
});
/* Allows bullet points in to-do list in Template:User to toggle on and off. */
$(function() {
const bullets = document.querySelectorAll('.toggle-bullet');
const bulletChars = ['<span style="color: green">●</span>', '◦'];
const localStorageKey = 'userInfoboxBulletState';
bullets.forEach((bullet, index) => {
let currentIndex = localStorage.getItem(localStorageKey + index) === '0' ? 0 : 1; // Default to black if no stored state
bullet.innerHTML = bulletChars[currentIndex];
bullet.addEventListener('click', function() {
currentIndex = (currentIndex + 1) % bulletChars.length;
this.innerHTML = bulletChars[currentIndex];
localStorage.setItem(localStorageKey + index, currentIndex.toString());
});
});
});
mw.loader.using('mediawiki.user', function () {
if (mw.user.isAnon()) {
$('.user-only-dismiss').hide();
return;
}
// Track how many of each hash have been seen
const hashCounts = {};
$('.maybe-dismissible').each(function (index) {
const notice = $(this);
// Use trimmed text content as base hash
const text = notice.text().trim();
const hash = generateHash(text);
// Count instances of the same hash
if (!hashCounts[hash]) {
hashCounts[hash] = 0;
} else {
hashCounts[hash]++;
}
// Create a unique key per page load (same content, multiple instances)
const instanceKey = `${hash}-${hashCounts[hash]}`;
const storageKey = 'dismissed-notice-' + instanceKey;
if (localStorage.getItem(storageKey) === 'true') {
notice.hide();
}
notice.find('.dismiss-button').on('click', function () {
notice.hide();
localStorage.setItem(storageKey, 'true');
});
});
// Simple string hash function
function generateHash(str) {
let hash = 0;
for (let i = 0; i < str.length; i++) {
hash = ((hash << 5) - hash) + str.charCodeAt(i);
hash |= 0; // 32-bit int
}
return hash;
}
});