SA Quoteblocker 2

By sethaurus Last update Sep 21, 2008 — Installed 22,724 times.
// ==UserScript==
// @name           SA Quoteblocker 2
// @description    Show/hide quoted text from ignored users on Something Awful forums
// @include        http://*somethingawful.com/showthread.php?*
// ==/UserScript==

var ignoreURL = 'http://forums.somethingawful.com/member2.php?action=viewlist&userlist=ignore';
var ignoredUsernameStart = 'name="listbits[]" value="';
var css = {
	userQuote: ['div.bbc-block.', '>h4:not(:hover)+blockquote:not(:hover)'],
	hideUnhovered: ['div.bbc-block>h4 {cursor:default}', '{display:hidden}']
};

function userToClassName (username) {
    return 'quoteby-' + btoa(username).replace(/=/g, '');
};

function unescapeHTML(html) {
	unescapeHTML.span.innerHTML = html;
	return unescapeHTML.span.firstChild.data;
};

unescapeHTML.span = document.createElement('span');

function ignoreQuotes(ignored) {
    var style = document.createElement('style');

    style.innerHTML = css.hideUnhovered.join(ignored.map(function (user)
        css.userQuote.join(userToClassName(user))
    ).join(', '));

    document.documentElement.firstChild.appendChild(style);

    Array.forEach(document.getElementsByTagName('blockquote'), function (el) {
        try { 
            var author = el.previousSibling.firstChild.data.match(/(.+) posted:$/)[1];
            el.parentNode.className += ' ' + userToClassName(author);
        } catch(ex) {}
    });
};

GM_xmlhttpRequest({
	method: "GET",
	url: ignoreURL,
	onload:function(responseDetails) {
		var ignoredUsers = responseDetails.responseText
			.split(ignoredUsernameStart)
			.slice(1)
			.map(function(x) unescapeHTML(x.split('"')[0]));
		ignoreQuotes(ignoredUsers);

	}
});