Revisions for untitled paste

View the changes made to this paste.

unlisted ⁨2⁩ ⁨files⁩ 2024-08-18 15:16:20 UTC

manifest.json

@@ -0,0 +1,12 @@

+{
+  "name": "2ch extension",
+  "version": "0.1",
+  "manifest_version": 2,
+  "permissions": ["<all_urls>"],
+  "content_scripts": [
+    {
+      "matches": ["<all_urls>"],
+      "js": ["content.js"]
+    }
+  ]
+}

content.js

@@ -0,0 +1,81 @@

+"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";
+            }
+          }
+        }
+      });
+    }
+  }