MediaWiki:Common.js: различия между версиями
Страница интерфейса MediaWiki
Дополнительные действия
Admin (обсуждение | вклад) Нет описания правки |
Admin (обсуждение | вклад) Нет описания правки |
||
| Строка 93: | Строка 93: | ||
if (pageName == "Заглавная_страница") { | if (pageName == "Заглавная_страница") { | ||
document.querySelector('.pashalka-jopa-trigger').addEventListener('click', () => { | document.querySelector('.pashalka-jopa-trigger').addEventListener('click', () => { | ||
let | function getVisibleTextNodes(root) { | ||
let | let nodes = []; | ||
function walk(node) { | |||
if (node.nodeType === Node.TEXT_NODE) { | |||
if (node.nodeValue.trim() !== "" && node.parentNode.offsetParent !== null) { | |||
nodes.push(node); | |||
} | |||
} else if (node.nodeType === Node.ELEMENT_NODE && node.tagName !== "SCRIPT" && node.tagName !== "STYLE") { | |||
for (let child of node.childNodes) { | |||
walk(child); | |||
} | |||
} | |||
} | |||
walk(root); | |||
return nodes; | |||
} | |||
let textNodes = getVisibleTextNodes(document.body); | |||
let available = []; | let available = []; | ||
for (let | for (let node of textNodes) { | ||
for (let i = 0; i < node.nodeValue.length; i++) { | |||
if (!/[\s]/.test(node.nodeValue[i])) { | |||
available.push({ node, index: i }); | |||
} | |||
} | } | ||
} | } | ||
| Строка 104: | Строка 121: | ||
if (available.length === 0) return; | if (available.length === 0) return; | ||
let randIndex = Math.floor(Math.random() * available.length); | let randIndex = Math.floor(Math.random() * available.length); | ||
let | let { node, index } = available.splice(randIndex, 1)[0]; | ||
chars[ | let chars = node.nodeValue.split(""); | ||
chars[index] = "Ѿ"; | |||
node.nodeValue = chars.join(""); | |||
setTimeout(replaceNext, 1); | setTimeout(replaceNext, 1); | ||
} | } | ||