MediaWiki:Test.js: различия между версиями

Страница интерфейса MediaWiki
Нет описания правки
Метка: отменено
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 1: Строка 1:
// Словарь слов и их цветов
(function(){
var wordColors = {
if(typeof mw==='undefined') return;
    "Клише": "#FF0000", // красный
 
    "властью": "#00FF00", // зелёный
var map={
    "ответственность": "#0000FF", // синий
"Клише":"#ff4d4d",
    "Стандартные Рабочие Процедуры": "#FFA500", // оранжевый
"властью":"#4dff4d",
    "ядреный диск": "#800080", // фиолетовый
"ответственность":"#4d4dff",
    "станции": "#008080", // бирюзовый
"Стандартные Рабочие Процедуры":"#ff4dff",
    "ГСБ": "#FFC0CB", // розовый
"ядерный":"#ffa500",
    "диск": "#A52A2A", // коричневый
"станции":"#4dffff",
    "СРП/КЗ": "#FFFF00", // жёлтый
"ГСБ":"#b84dff",
    "банановая кожурка": "#00FFFF" // голубой
"диск":"#4dff88",
"СРП/КЗ":"#ffb6c1",
"банановая кожурка":"#ffff4d"
};
};


function colorWords() {
function esc(s){return s.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');}
    // Получаем все текстовые узлы в body
    function walk(node) {
        var child, next;
        switch (node.nodeType) {
            case 1: // Element
            case 9: // Document
            case 11: // Document fragment
                child = node.firstChild;
                while (child) {
                    next = child.nextSibling;
                    walk(child);
                    child = next;
                }
                break;
            case 3: // Text node
                replaceText(node);
                break;
        }
    }


    function replaceText(textNode) {
function walk(node){
        var parent = textNode.parentNode;
if(node.nodeType===3){
        var text = textNode.nodeValue;
var t=node.nodeValue, r=t;
for(var k in map){
r=r.replace(new RegExp(esc(k),'g'),'<span style="color:'+map[k]+'">'+k+'</span>');
}
if(r!==t){
var s=document.createElement('span');
s.innerHTML=r;
node.parentNode.replaceChild(s,node);
}
}
}


        Object.keys(wordColors).forEach(function(word) {
var nodes=document.querySelectorAll('.mw-parser-output p, .mw-parser-output li');
            // Экранируем специальные символы для регулярки
for(var i=0;i<nodes.length;i++){
            var escapedWord = word.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
var cn=nodes[i].childNodes;
            var regex = new RegExp(escapedWord, 'g');
for(var j=0;j<cn.length;j++) walk(cn[j]);
 
            if (regex.test(text)) {
                var span = document.createElement('span');
                span.innerHTML = text.replace(regex, function(match) {
                    return '<span style="color:' + wordColors[word] + '">' + match + '</span>';
                });
 
                parent.replaceChild(span, textNode);
            }
        });
    }
 
    walk(document.body);
}
}
 
})();
// Запускаем после полной загрузки страницы
window.addEventListener('load', colorWords);

Текущая версия от 11:16, 17 января 2026

(function(){
if(typeof mw==='undefined') return;

var map={
"Клише":"#ff4d4d",
"властью":"#4dff4d",
"ответственность":"#4d4dff",
"Стандартные Рабочие Процедуры":"#ff4dff",
"ядерный":"#ffa500",
"станции":"#4dffff",
"ГСБ":"#b84dff",
"диск":"#4dff88",
"СРП/КЗ":"#ffb6c1",
"банановая кожурка":"#ffff4d"
};

function esc(s){return s.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');}

function walk(node){
if(node.nodeType===3){
var t=node.nodeValue, r=t;
for(var k in map){
r=r.replace(new RegExp(esc(k),'g'),'<span style="color:'+map[k]+'">'+k+'</span>');
}
if(r!==t){
var s=document.createElement('span');
s.innerHTML=r;
node.parentNode.replaceChild(s,node);
}
}
}

var nodes=document.querySelectorAll('.mw-parser-output p, .mw-parser-output li');
for(var i=0;i<nodes.length;i++){
var cn=nodes[i].childNodes;
for(var j=0;j<cn.length;j++) walk(cn[j]);
}
})();