MediaWiki:Common.js
From AnarchyMU Wiki
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* Any JavaScript here will be loaded for all users on every page load. */
// Ensures class card images use the intended foreground image if data-src is present.
(function () {
function applyDataSrc() {
var images = document.querySelectorAll('.mw-card-image img[data-src]');
for (var i = 0; i < images.length; i++) {
var img = images[i];
var dataSrc = img.getAttribute('data-src');
if (dataSrc && img.getAttribute('src') !== dataSrc) {
img.setAttribute('src', dataSrc);
}
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', applyDataSrc);
} else {
applyDataSrc();
}
})();
/* Update 041: make Stage 1-4 nested dropdown groups inside Stages System menu */
(function () {
function txt(el) {
return (el && el.textContent ? el.textContent : '').trim();
}
function normalize(s) {
return s.replace(/\s+/g, ' ').trim().toLowerCase();
}
function findStagesSystemList() {
var links = Array.prototype.slice.call(document.querySelectorAll('a'));
for (var i = 0; i < links.length; i++) {
var label = normalize(txt(links[i]));
if (label === 'stages system') {
var li = links[i].closest('li');
if (!li) continue;
var ul = li.querySelector(':scope > ul, :scope > .submenu');
if (ul) return ul;
}
}
return null;
}
function isStageLabel(label) {
return /^stage\s+[1-4]$/i.test(label);
}
function isMiniLabel(label) {
return /^mini\s+stage\s+\d+$/i.test(label);
}
function applyNestedStages() {
var ul = findStagesSystemList();
if (!ul || ul.dataset.stagesNestedApplied === '1') return;
var items = Array.prototype.slice.call(ul.children).filter(function (n) {
return n.tagName && n.tagName.toLowerCase() === 'li';
});
if (!items.length) return;
var rebuilt = [];
var currentStageLi = null;
var currentMiniUl = null;
items.forEach(function (li) {
var a = li.querySelector(':scope > a');
var label = txt(a);
if (isStageLabel(label)) {
currentStageLi = li.cloneNode(true);
currentStageLi.classList.add('stages-inner-parent');
currentMiniUl = document.createElement('ul');
currentMiniUl.className = 'stages-inner-submenu';
var toggle = document.createElement('button');
toggle.type = 'button';
toggle.className = 'stages-inner-toggle';
toggle.setAttribute('aria-expanded', 'false');
toggle.textContent = '▸';
toggle.addEventListener('click', function (ev) {
ev.preventDefault();
ev.stopPropagation();
var open = currentStageLi.classList.toggle('open');
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
toggle.textContent = open ? '▾' : '▸';
});
currentStageLi.appendChild(toggle);
currentStageLi.appendChild(currentMiniUl);
rebuilt.push(currentStageLi);
return;
}
if (isMiniLabel(label) && currentMiniUl) {
currentMiniUl.appendChild(li.cloneNode(true));
return;
}
currentStageLi = null;
currentMiniUl = null;
rebuilt.push(li.cloneNode(true));
});
ul.innerHTML = '';
rebuilt.forEach(function (n) { ul.appendChild(n); });
ul.dataset.stagesNestedApplied = '1';
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', applyNestedStages);
} else {
applyNestedStages();
}
})();