Greasy Fork is available in English.

Скрывать прочитанное в preview

Скрипт скрывает ответы которые вы читали с помощью наведения курсора. Скрытие работает когда вы прочитали все ответы на ответ.

// ==UserScript==
// @name         Скрывать прочитанное в preview
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Скрипт скрывает ответы которые вы читали с помощью наведения курсора. Скрытие работает когда вы прочитали все ответы на ответ.
// @author       dimden.dev
// @match        https://2ch.hk/*/res/*
// @match        https://2ch.life/*/res/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=2ch.hk
// @grant        none
// @run-at       document-end
// @license      MIT
// ==/UserScript==

console.log("Running HideReadPreviews");
let getTextFromHtml = (t) =>
t
.split('>')
.map((i) => i.split('<')[0])
.filter((i) => !i.includes('=') && i.trim())
.join('');

let pendingPosts = [];
let readPosts = [];

setInterval(() => {
    let previews = Array.from(document.getElementsByClassName('post_preview')).map(i => POSTS.get(+i.dataset.num)).filter(i => !!i);
    for(let i in previews) {
        let p = previews[i];
        if(p.counter === undefined) {
            p.counter = 0;
            pendingPosts.push(p);
        } else p.counter++;
        if(!p.clearText) p.clearText = getTextFromHtml(p.comment);
        if(!p.isRead) {
            if(p.clearText.length < 100 || (p.clearText.length <= 200 && p.counter === 1) || (p.clearText.length <= 300 && p.counter === 2)) {
                p.isRead = true;
                readPosts.push(p);
                let index = pendingPosts.findIndex(pp => pp.num === p.num);
                pendingPosts.splice(index, 1);
            } else if(p.counter === 3) {
                p.isRead = true;
                readPosts.push(p);
                let index = pendingPosts.findIndex(pp => pp.num === p.num);
                pendingPosts.splice(index, 1);
            }
        }
    }
    for(let i in readPosts) {
        let p = readPosts[i];
        let allRepliesRead = p.refmap.reduce((acc, curr) => acc && readPosts.find(j => j.num === curr), true);
        if(allRepliesRead) {
            p.el.classList.add('post_type_hidden');
            let index = readPosts.findIndex(pp => pp.num === p.num);
            readPosts.splice(index, 1);
        }
    }
}, 1000);