MediaWiki:Scramble.js: Difference between revisions
Appearance
No edit summary |
No edit summary |
||
| Line 10: | Line 10: | ||
shadowContainer.removeAttribute(scrambleAttrib); | shadowContainer.removeAttribute(scrambleAttrib); | ||
container.appendChild(shadowContainer); | container.appendChild(shadowContainer); | ||
scrambleTree(container); | scrambleTree(container); | ||
| Line 63: | Line 61: | ||
function setLooper(t) { | function setLooper(t) { | ||
t.setAttribute(scrambleCounterName, " | t.setAttribute(scrambleCounterName, "0"); | ||
t._itv = setInterval((s) => { | t._itv = setInterval((s) => { | ||
Revision as of 20:04, 24 August 2025
const alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!";
const shadowContainerName = 'shadow-container';
const scrambleCounterName = 'scramble-counter';
const scrambleAttrib = 'data-scramble';
function createShadowCopy(container) {
let shadowContainer = container.cloneNode(true);
shadowContainer.style.display = 'none';
shadowContainer.setAttribute(shadowContainerName, 'true');
shadowContainer.removeAttribute(scrambleAttrib);
container.appendChild(shadowContainer);
scrambleTree(container);
}
function scrambleTree(container) {
scrambleNodes(container.childNodes);
}
function scrambleNodes(nodes) {
nodes.forEach((node) => {
if (node.nodeType == Node.TEXT_NODE) {
let newTextArray = [];
let oldValue = [...node.nodeValue];
oldValue.forEach((char) => {
if (/\S/.test(char)) {
newTextArray.push(alpha[Math.floor(Math.random() * alpha.length)]);
}
else {
newTextArray.push(char);
}
});
node.nodeValue = newTextArray.join("");
}
else if(node.getAttribute(shadowContainerName) === "true") {
// If we find the shadow copy, we totally just stop.
return;
}
else if(node.nodeType == Node.ELEMENT_NODE) {
scrambleNodes(node.childNodes);
}
})
}
function unscramble(container) {
children = Array.from(container.childNodes)
let shadowCopy = children.find((node) => node.getAttribute && node.getAttribute(shadowContainerName));
console.log(shadowCopy);
if (shadowCopy) {
while (container.firstChild) {
container.removeChild(container.firstChild);
}
container.appendChild(shadowCopy);
shadowCopy.style.display = '';
}
}
function setLooper(t) {
t.setAttribute(scrambleCounterName, "0");
t._itv = setInterval((s) => {
let iter = parseInt(s.getAttribute(scrambleCounterName));
if(iter > 5) {
unscramble(s);
clearInterval(s._itv);
} else {
console.log("Iter: " + iter);
scrambleNodes(s.childNodes);
iter = iter + 1;
s.setAttribute(scrambleCounterName, iter.toString());
}
}, 1000, t);
}
$('[' + scrambleAttrib + ']').each(function () { createShadowCopy(this); });
$('[' + scrambleAttrib + '="true"]').each(function () { setLooper(this); });