Filter HackerNews By Site Submissions

Inserts a link '[Y]' after each title to block that site from ever showing titles again (the items still remain except for title)

Tính đến 30-09-2021. Xem phiên bản mới nhất.

// ==UserScript==
// @name         Filter HackerNews By Site Submissions
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Inserts a link '[Y]' after each title to block that site from ever showing titles again (the items still remain except for title)
// @author       bigguy4u
// @match        https://news.ycombinator.com/news*
// @match        https://news.ycombinator.com/news
// @match        https://news.ycombinator.com/
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==

(function() {
var fucks = GM_getValue("fuckers",[]); //local storage within userscript space
console.log("fucker site filter on");
//document.getElementsByClassName('pagetop')[1].style="display:none";
var count = 0;
var filtered = 0;
var counter = document.createElement('span');
var subtexts = document.querySelectorAll('.subtext');
var things = document.querySelectorAll('.athing');

console.log(subtexts.length);
console.log(things.length)

for (let j=0;j<subtexts.length;j++) {
    var user = subtexts[j].getElementsByClassName('hnuser')[0];
    if (user!=undefined){
        user = user.innerText;
    } else {
        things[j].getElementsByClassName("storylink")[0].classList.add('promo');
    }
    console.log(user)
}

things.forEach(function(post) {
	if (post.getElementsByClassName('sitestr').length < 1) return;
	var site = post.getElementsByClassName('sitestr')[0].innerText;




	var a = document.createElement('a');
	//a.class = 'togg';
	a.href = 'javascript:void(0)';
    a.style='cursor:pointer;';
	a.innerText = " [Y] ";
    count++;

    //a.onmouseover = function (){a.innerText = " [FILTER] "};
    //a.onmouseout = function (){a.innerText = " [Y] "};
	a.onclick = function test(){ site = post.getElementsByClassName('sitestr')[0].innerText; this.innerText = "[FUCKER]"; fucks.indexOf(site) === -1 ? fucks.push(site) : null; GM_setValue("fuckers", fucks); console.log(fucks); post.getElementsByClassName("title")[1].innerText = "'" + site + "' filtered from now on";} //fucks.join("','")
	post.getElementsByClassName('comhead')[0].prepend(a);
    var titleHolder = post.getElementsByClassName("storylink")[0]
    var oldTitle = titleHolder.innerText;
    console.log(titleHolder.classList);

	if (fucks.includes(site) || titleHolder.classList.contains("promo")){
		console.log(site + ' the fucker, has been blocked');
        var derTitle = post.getElementsByClassName("title")[1]
        console.log(derTitle.innerText)
        filtered++;




        a.innerText = " . ";
        
        a.onmouseout = function (){a.innerText = " . "};
        a.className = 'subtext';

        if (titleHolder.classList.contains("promo")){

            a.onmouseover = function (){a.innerText = oldTitle};
            derTitle.innerHTML = "<span class='push subtext'>[HN-PROMO FILTERED]<\span>";
        }
        else {
            a.onmouseover = function (){a.innerText = " [UNFILTER] "};
            post.getElementsByClassName("votearrow")[0].title = derTitle.innerText
            derTitle.innerHTML = "<span class='push subtext'>["+site.toUpperCase() +" FILTERED]<\span>";
        }

        var b = a.cloneNode();
        b.innerText = " [P] ";
        b.onmouseout = function (){b.innerText = " [P] "};
        b.alt='preview';
        b.onclick = function (){post.getElementsByClassName("title")[1].innerText = oldTitle};
        a.onclick = function test(){ fucks.indexOf(site) >= 0 ? delete fucks[fucks.indexOf(site)] : null;console.log("site index? ",fucks.indexOf(site)); GM_setValue("fuckers", fucks); console.log(fucks);} //fucks.join("','")
        post.getElementsByClassName('title')[1].prepend(a);
	}
});
    counter.innerText=filtered+"/"+count+" submissions filtered!";
    document.getElementsByClassName('pagetop')[0].append(counter);
})();