User:Ilikecomputers/common.js: Difference between revisions
Content added Content deleted
(Created page with "//A very hackey way to fix a niche styling issue: //Example markup: // * This is a bullet point // ** {{quote|this is a quote}} // ** This is a bullet point after a quote <-- this will have double bullet points document.querySelectorAll('table').forEach(function (e) { if (e.nextElementSibling && e.nextElementSibling.nodeName === 'UL') { var sibling = e.nextElementSibling; var curSibling = sibling.childNodes[0]; while (curSibling.childNodes....") |
No edit summary |
||
Line 13: | Line 13: | ||
} |
} |
||
} |
} |
||
}) |
}); |
||
document.styleSheets[0].insertRule(".nodoublebullet::marker {content: ''}"); |
document.styleSheets[0].insertRule(".nodoublebullet::marker {content: ''}"); |
||
Line 19: | Line 19: | ||
//hover over spoilers to reveal them, they'll disappear after the cursor leaves the box |
//hover over spoilers to reveal them, they'll disappear after the cursor leaves the box |
||
//click on spoilers to permanently reveal them, then click on them again to hide them |
//click on spoilers to permanently reveal them, then click on them again to hide them |
||
//also adds a custom "Show all spoilers" button (only tested on vector 2022) |
|||
//also fixes hyperlinks in spoilers visible by default in the cosmos skin |
//also fixes hyperlinks in spoilers visible by default in the cosmos skin |
||
document.querySelectorAll('a').forEach(function (e) { if (e.parentNode.classList.contains('spoiler')) e.style.color = 'white' |
document.querySelectorAll('a').forEach(function (e) { if (e.parentNode.classList.contains('spoiler')) e.style.color = 'white';}); |
||
function changeLinksColor(showLink, element) { |
function changeLinksColor(showLink, element) { |
||
element.childNodes.forEach(function (f) { |
element.childNodes.forEach(function (f) { |
||
Line 27: | Line 28: | ||
} |
} |
||
}); |
}); |
||
} |
|||
var spoilersRevealed = false; |
|||
function toggleAllSpoilers() { |
|||
spoilersRevealed = !spoilersRevealed; |
|||
document.querySelectorAll('.spoiler').forEach(function (e) { |
|||
if (spoilersRevealed) { |
|||
e.classList.add('spoilerRevealed'); |
|||
} else { |
|||
e.classList.remove('spoilerRevealed'); |
|||
} |
|||
changeLinksColor(spoilersRevealed, e); |
|||
}); |
|||
toggleSpoilers.textContent = spoilersRevealed ? "Hide all spoilers" : "Show all spoilers"; |
|||
} |
|||
var toggleSpoilers = document.createElement('a'); |
|||
toggleSpoilers.textContent = "Show all spoilers"; |
|||
toggleSpoilers.addEventListener('click', toggleAllSpoilers); |
|||
var toggleSpoilersLi = document.createElement('li'); |
|||
toggleSpoilersLi.classList.add('mw-list-item'); |
|||
toggleSpoilersLi.appendChild(toggleSpoilers); |
|||
try { |
|||
document.querySelector('#p-navigation').childNodes[3].childNodes[1].appendChild(toggleSpoilersLi); |
|||
} catch (e){ |
|||
console.log("Oops! It looks like the toggle spoiler button cannot find a place!"); |
|||
} |
} |
||
document.querySelectorAll('.spoiler').forEach(function (e) { |
document.querySelectorAll('.spoiler').forEach(function (e) { |
||
Line 40: | Line 67: | ||
changeLinksColor(false, e); |
changeLinksColor(false, e); |
||
} |
} |
||
}) |
}); |
||
e.addEventListener('click', function () { |
e.addEventListener('click', function () { |
||
if (e.classList.contains('spoilerRevealed')) { |
if (e.classList.contains('spoilerRevealed')) { |
||
Line 47: | Line 74: | ||
e.classList.add('spoilerRevealed'); |
e.classList.add('spoilerRevealed'); |
||
} |
} |
||
}) |
}); |
||
}) |
}); |
||
document.styleSheets[0].insertRule(".spoilerRevealed {color: black !important}"); |
document.styleSheets[0].insertRule(".spoilerRevealed {color: black !important}"); |
||
document.styleSheets[0].insertRule(".spoiler {cursor: pointer}"); |
document.styleSheets[0].insertRule(".spoiler {cursor: pointer}"); |
Revision as of 06:41, 29 January 2023
//A very hackey way to fix a niche styling issue:
//Example markup:
// * This is a bullet point
// ** {{quote|this is a quote}}
// ** This is a bullet point after a quote <-- this will have double bullet points
document.querySelectorAll('table').forEach(function (e) {
if (e.nextElementSibling && e.nextElementSibling.nodeName === 'UL') {
var sibling = e.nextElementSibling;
var curSibling = sibling.childNodes[0];
while (curSibling.childNodes.length > 0 && curSibling.childNodes[0].nodeName === 'UL') {
curSibling.classList.add('nodoublebullet');
curSibling = curSibling.childNodes[0].childNodes[0];
}
}
});
document.styleSheets[0].insertRule(".nodoublebullet::marker {content: ''}");
//combines the function of the toggle spoiler and spoiler hover gadgets
//hover over spoilers to reveal them, they'll disappear after the cursor leaves the box
//click on spoilers to permanently reveal them, then click on them again to hide them
//also adds a custom "Show all spoilers" button (only tested on vector 2022)
//also fixes hyperlinks in spoilers visible by default in the cosmos skin
document.querySelectorAll('a').forEach(function (e) { if (e.parentNode.classList.contains('spoiler')) e.style.color = 'white';});
function changeLinksColor(showLink, element) {
element.childNodes.forEach(function (f) {
if (f.nodeName === 'A') {
f.style.color = showLink ? 'rgb(6, 69, 173)' : 'white';
}
});
}
var spoilersRevealed = false;
function toggleAllSpoilers() {
spoilersRevealed = !spoilersRevealed;
document.querySelectorAll('.spoiler').forEach(function (e) {
if (spoilersRevealed) {
e.classList.add('spoilerRevealed');
} else {
e.classList.remove('spoilerRevealed');
}
changeLinksColor(spoilersRevealed, e);
});
toggleSpoilers.textContent = spoilersRevealed ? "Hide all spoilers" : "Show all spoilers";
}
var toggleSpoilers = document.createElement('a');
toggleSpoilers.textContent = "Show all spoilers";
toggleSpoilers.addEventListener('click', toggleAllSpoilers);
var toggleSpoilersLi = document.createElement('li');
toggleSpoilersLi.classList.add('mw-list-item');
toggleSpoilersLi.appendChild(toggleSpoilers);
try {
document.querySelector('#p-navigation').childNodes[3].childNodes[1].appendChild(toggleSpoilersLi);
} catch (e){
console.log("Oops! It looks like the toggle spoiler button cannot find a place!");
}
document.querySelectorAll('.spoiler').forEach(function (e) {
e.classList.remove('spoilerhidden'); //this fidgety hack removes the !important colour rule added by the spoilerhidden class
e.style.color = 'white';
e.addEventListener('mouseover', function () {
changeLinksColor(true, e);
e.style.color = 'black';
});
e.addEventListener('mouseout', function () {
e.style.color = 'white';
if (!e.classList.contains('spoilerRevealed')) {
changeLinksColor(false, e);
}
});
e.addEventListener('click', function () {
if (e.classList.contains('spoilerRevealed')) {
e.classList.remove('spoilerRevealed');
} else {
e.classList.add('spoilerRevealed');
}
});
});
document.styleSheets[0].insertRule(".spoilerRevealed {color: black !important}");
document.styleSheets[0].insertRule(".spoiler {cursor: pointer}");