"use strict"; function $$(selector){ return document.querySelectorAll(selector); } function observe$$(selector, f){ const observer = new MutationObserver(() => $$(selector).forEach(f)); // Почему-то document.body вместо document вызывает ошибку на http://aeroexpress.wi-fi.ru/ observer.observe(document, { childList: true, subtree: true }); } const host = document.location.host; const hostpath = document.location.host + document.location.pathname; if(/^2ch\.(hk|pm|life)\/[^/?#]*\/res\/[0-9]*\.html$/.exec(hostpath)){ // Фича { // Эта структура данных по-настоящему качественная, в отличие от всего остального скрипта // Массив - это список разрешённых значений для имени, указанного в посте // Если в посте указано имя, которого нет в массиве, то будет отображено то, которое указано в массиве первым // Массив не должен быть пустым // Элементы массива не должны быть пустыми строками и строками "Аноним" // Указан месяц, на который трип является свежим // Добавляю только информацию, в которой достаточно уверен. Если у разных трипов указаны разные имена, значит, я достаточно уверен, что это разные люди // Иногда люди набирают некоторые буквы не в той раскладке, и приходится добавлять несколько вариантов const tripCodes = { "!RFAsmTbreo": ["Страшно-кун"], // 2019-10 "!K8VeUX39u6": ["Алкаш", "Алкaш", "Алkаш", "Алкащ"], // 2019-10 "!SHIRRRSnEo": ["Шир"], // 2019-10 "!PSEV/.UmnY": ["Псевдопонос"], // 2019-10 "!!JSbovedxYg": ["Эстр"], // 2019-10. Ж-кун "!wOL8/VuJEE": ["Затыкан"], // 2019-10. Руслан, Русик "!8bty8qVkeU": ["Настик"], // 2019-10 "!gwqonSTONE": ["Каста"], // 2019-10 "!qCaTKKrzss": ["BAD (использовался Светой и, возможно, Затыканом)"], "!m9C5HL32TI": ["arien"], // 2019-10 "!cLogAndGUQ": ["Логан"], // 2019-10. Бачок "!DquxP3teBo": ["Джиуб-кун", "Джиуб"], // 2019-10 "!!FFWpc95Flo": ["Ира"], // 2019-10 "!zWee040DmE": ["Света"], // 2019-10 "!sxMkM3Rbnc": ["ДЦП-кун"], // 2019-10 "!Poo/zwEta2": ["Света"], // 2019-10 "!03BA8gvmdc": ["Кретин с сигарой"], // 2019-10 "!E.jMev6iao": ["Нед", "ned", "pwned"], // 2019-10 "!!p3UXx4oCp2": ["Ира"], // 2019-11. Трип подтверждён: https://2ch.hk/soc/res/5300851.html#5301448 "!fRogMBPvaE": ["блонд"], // 2019-06 "!qDkIknBZVU": ["Бро"], // 2019-11 "!eokDynaTv6": ["Эстонка"], // 2020-01 "!Mzu56eO.w.": ["Затыкан"], // 2020-02 "!l45lkIoNGE": ["Затыкан"], // 2020-02 "!KASTAUnLLc": ["Каста"], // 2020-03 "!WtMWcLhPyw": ["Юлиус"], // 2020-09, скорее всего, именно он - главный мой травитель 2020-09 "!!1MEjUKozOs": ["Настик"], // 2022-05 "!jG14jPoLic": ["Тома"], // 2023-05. Тома II "!5.qkqkj0c6": ["Ира"], // 2023-06 "!WWUKxYcCrQ": ["Затыкан"], // 2024-08 }; observe$$(".post__trip", trip => { if(trip.innerText in tripCodes){ const name = trip.parentElement.querySelector(".post__anon"); if(name !== null){ // Почему-то на практике name иногда равен null const trimmed = name.innerText.trim(); if(trimmed === "" || trimmed === "Аноним"){ trip.innerText = trip.innerText + " [[" + tripCodes[trip.innerText][0] + "]]"; trip.style["color"] = "#00aa00"; name.style["color"] = "#00aa00"; }else if(tripCodes[trip.innerText].includes(trimmed)){ trip.style["color"] = "#00aa00"; name.style["color"] = "#00aa00"; }else{ trip.innerText = trip.innerText + " [[" + tripCodes[trip.innerText][0] + "]]"; trip.style["color"] = "red"; name.style["color"] = "red"; } } } }); } }