rendered paste body// ==UserScript==// @name phpBB ignore users// @description Ignore posts by users you don't like on phpBB boards// @include */viewtopic.php?*// ==/UserScript==// Note: the seimages are made from the subSilver SDK, which is// Copyright 2001 phpBB Group and is for non-commercial use only.ignorebutton = "data:image/png;base64,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"unignorebutton ="data:image/png;base64,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"viewbutton ="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADsAAAASCAYAAADlhqZNAAAA" +"BmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gkIDhI4mn" +"/6SwAABvpJREFUWMPVl3tQlNcZxn/nu+yVZZd1ucpFRBDRgAUt2Jo4Gkx0mjoZO2NaqzFt" +"mkmN1n/S1KljjUlnTMemqbEmqdZYc9HG2DrT2IqVGsWoCTpcFC8VkSBSXVgQWC4L7H7n6x" +"9ECo1NSSbpxHfmmzPzve875zzned7zniMYZvs2fNMLbDOlLJKRAZeiWTShKCbwT+BPwPML" +"1+y/yR1qYgRQ0/zlQKjrkZvXLykDvUEQAnuUF1W34knMNBVVqwSWAPUL1+wfuCPB/vHZ++" +"NCXW1/Cwau5vX3dopIeADNEUtXdw8KEWw66JpGwoTppm6L8gtF2QBsu9MAiw0LbR4tJvmk" +"6KifJEwTRbehxk2lx5ZMUI2hpyeILXAGb/gKFiGJ8iahJuWz7loB/rDjSw8wf1xcR1FGwv" +"oty+a+qN30fOUP3rbySRbFxOGJZ2zeA8RPmU/21JnYnS5MadLVGeDdPS/QcHQzoa42kpUQ" +"J39URGruHIRQ/i+LNk1zxHi7f8PHiJQ03ezmpcNnPL87em7Typ2lqPnJ4dc9Srew2JxkFn" +"2L3LmPkTX1HhxR0aiajqbrOKI8eOLSOFu2B40wzpgkIgMhErMK0XTbFw7udmBu9w2PEYDb" +"bqE4J4X2nj5OXrlRpLgirYoiICYxi+TJs0hIm4ymWz42uW61EdE9SNNECEFPu59QsPVzBT" +"fxJztY8drfkVJimuaI8XbfJ8UM9z16dw7VjQGPZlMNFFUFU+KMSUCz2m+7GCkNbgZasHkU" +"FFVH1a1oVsfnKss3H5+Hz2VHSvmppftJvrEeJwBKfwSkYSBlhI4bdRiRyG2ASprqzmBE+t" +"B1K4qqMSYlB6s9+lOBK/7FXizf+zXX27uGdr5w/W7iV/6W7NW/p+jZt3js1dIhdt764BJT" +"f/Ymrh++TNbqnfyqpALDMFiw6R28K7bS2duHaZqcb2pl6rrdGIaBlJJzTa1EP7GV5w9WIq" +"VEVwc7rNIYcjFgQDDQyI3L5fhrywn392Kag7sbiYRpbqqj/PBeXDaBanWAqpE4Yfp/VcHw" +"uhouqx/PL8CQJq+W1SCl5Ng/rlF5tYUVxXm8tHT2YN5HubtOXuSR7YcYH+tm67LZ3Dc5lb" +"X73mfToWoe/lo2/RGDP1fWI6XklSM11LV0UlJzFSkluz6oRRGCb391wtD8ANqFqCLcXWUk" +"iy78teU4PQm0Np3Hl5KDLWoMNRXHOH7gDbraW4hL/zqaNwF7bBrOMeNGnMSjkdW9OSnkpv" +"jYUXaep+YV8JvSaqKsOstn34XbbrmVhJSSjQcqiHFY2fLdWWiqYG5OCsdqr7Ot7BwV6xbh" +"dVrZc/oy86ek8PbpOjRFsOXwWeZMTGLv6TqKc5KJd9lHHF7ahZhZLM22UHvqAIKLhPt7iI" +"5NQ9UsRAZCtDReQAmFSchehPBNIazpyNhkqi/UMd0Zg91uH1UruGVP3p/Psu2H2HrkLPur" +"P2TV3Dyibfq/Yz8qm/pAkIiUjF/92gjFOCwauqrw0PQJbC27wMaDVZimyYvfmcmKXe+xqf" +"QMLV0hlhRmDjF6y7SwaufRtTvZ/vNl1FWW0hdppCNwDavVRqivj+4+E5vLR79wYJEmEcPA" +"H2hnjFQ4fvw4hYWFOJ1OhBCjYvfB/HTSxrh46u3j6KrCyjm5/7GoQWbjou1YNZXNi2feIh" +"wAq6YgpWRJURavHD3Py0fO8YO7J7FoWgZb3q3huZIq4lw27s1OGsEqgALg8vh4fP0u5i7+" +"KX2OTK516txoC1HXYnK9E/xBaOsM0dDQQCQSIRgM0tzcTCgU4sSJE/j9fsLh8KhagSIEq4" +"rzMKTJkhkTiXXZRtSVaQ5uzMMzJvJha5A9p+rwd/RSH+jkvdrrFKTFIqUkK95NfqoPVREs" +"n5WDlJKVs6cAsGhaBopgxPwAGkCgK4Qvys03lq1hxrylNF6u5sbVi3R3tuHyxJI2sQBfSj" +"Z/LSmltraWxMREent7aWtrw+fzUVVVRUZGBunp6Qgh/qesFxdmsrGkglXFuR9rM7eYffK+" +"PBQBr79/id3ll4m269yTmURoIIxVUzFNk8WFE0j3uRjrcSClZEFuKs+VOHlo2vgRrF4JBA" +"cvGtPXvdE+Py/d8/SDM4achmEQ7g8hpYEQCprFhqIo9PX1sW/fPhoaGnC73Qgh8Hq9uN1u" +"VFWlqKgIh8PxmXrhZ/WNJmbtOxVUNbZ2qAu/vyL0wsGK+c2dvUwZ68VlGzwVB6+KFhRVG6" +"pHVVXJysrCbrdTU1OD1Wqlv7+fcDiMzWYjPj4eq9U6qiveZ/WNNh/gckuQZ/5SyZ6Keh64" +"K3W1AHhiZ+mqU1f8z1RcbfaM7l1oMl4EmWFtY1y8j4hhcKlbcCDopl+KL9WrJ3est6Mg1f" +"f0juULNv8Ly1Vc7Np1eKAAAAAASUVORK5CYII="ignoreListStr = GM_getValue(location.hostname, "").split(':');ignoreList = new Array();for (i = 0; i < ignoreList.length; i++){ a = parseInt(ignoreListStr[i], 10); if (!isNaN(a)) ignoreList.push(a);}posts = new Array();profileLinksXPath = document.evaluate("//a[contains(@href,'profile.php?mode=viewprofile')]", document, null, XPathResult.ANY_TYPE, null);// manipulating the DOM invalidates the XPath, so iterate through it firstprofileLinks = new Array();while (i = profileLinksXPath.iterateNext()) profileLinks.push(i);for (i = 0; i < profileLinks.length; i++){ matches = profileLinks[i].href.match(/u=(\d+)/); if (!matches) continue; post = new Object; post.uid = parseInt(matches[1], 10); post.tr2 = profileLinks[i]; // the link is wrapped in its own table, so find that, then find the row of the main table it's in // (yay for using tables for layouts...) while (post.tr2 && post.tr2.nodeName.toLowerCase() != "table") post.tr2 = post.tr2.parentNode; while (post.tr2 && post.tr2.nodeName.toLowerCase() != "tr") post.tr2 = post.tr2.parentNode; if (!post.tr2) continue; post.tr1 = post.tr2.previousSibling; while (post.tr1 && post.tr1.nodeName.toLowerCase() != "tr") post.tr1 = post.tr1.previousSibling; if (!post.tr1) continue; // get the post number -- avoid counting a post twice postlink = document.evaluate(".//a[contains(@href,'viewtopic.php?p=')]", post.tr1, null, XPathResult.ANY_TYPE, null).iterateNext(); if (!postlink) continue; matches = postlink.href.match(/p=(\d+)/); if (!matches) continue; post.pid = parseInt(matches[1], 10); if (posts[post.pid]) continue; posts[post.pid] = post; // get the user's name username = document.evaluate(".//span[@class='name']//b//child::text()", post.tr1, null, XPathResult.ANY_TYPE, null).iterateNext(); if (!username) continue; post.username = username.nodeValue; profileLinks[i].parentNode.appendChild(document.createTextNode(' ')); post.ignorelink = document.createElement('img'); post.ignorelink.style.cursor = "pointer"; profileLinks[i].parentNode.appendChild(post.ignorelink); // this hideous construction will make a closure to call toggleBaleet with the appropriate uid post.ignorelink.addEventListener('click', (function (uid){return function(){toggleBaleet(uid)}})(post.uid), false); post.ignored = (ignoreList.indexOf(post.uid) >= 0); if (post.ignored) { post.ignorelink.src = unignorebutton; post.ignorelink.alt = post.ignorelink.title = "Stop hiding posts from " + post.username hidePost(post); } else { post.ignorelink.src = ignorebutton; post.ignorelink.alt = post.ignorelink.title = "Hide posts from " + post.username }}function hidePost(post){ if (!post.placeholder) { post.placeholder = document.createElement('tr'); post.placeholder.id = post.pid; td = document.createElement('td'); post.placeholder.appendChild(td); td.colSpan = 2; td.className = post.tr1.getElementsByTagName('td')[0].className; td.style.padding = "0.2em 1em"; td.style.font = "italic 12px sans-serif"; td.appendChild(document.createTextNode("A post by " + post.username + " ")); img = document.createElement('img'); img.src = viewbutton; img.alt = img.title = "Show this post"; img.style.marginLeft = "10px"; img.style.cursor = "pointer"; td.appendChild(img); img.addEventListener('click', function(){showPost(post)}, false); post.tr1.parentNode.insertBefore(post.placeholder, post.tr1); } post.tr1.style.display = "none"; post.tr2.style.display = "none"; post.placeholder.style.display = "";}function showPost(post){ post.tr1.style.display = ""; post.tr2.style.display = ""; if (post.placeholder) post.placeholder.style.display = "none";}function ignoreUser(uid){ i = ignoreList.indexOf(uid); if (i >= 0) return; ignoreList.push(uid); GM_setValue(location.hostname, ignoreList.join(':')); for (i in posts) { if (posts[i].uid == uid) { hidePost(posts[i]); posts[i].ignorelink.src = unignorebutton; posts[i].ignorelink.alt = posts[i].ignorelink.title = "Stop hiding posts from " + posts[i].username } }}function unignoreUser(uid){ i = ignoreList.indexOf(uid); if (i < 0) return; ignoreList.splice(i, 1); GM_setValue(location.hostname, ignoreList.join(':')); for (i in posts) { if (posts[i].uid == uid) { showPost(posts[i]); posts[i].ignorelink.src = ignorebutton; posts[i].ignorelink.alt = posts[i].ignorelink.title = "Hide posts from " + posts[i].username } }}function toggleBaleet(uid){ i = ignoreList.indexOf(uid); if (i < 0) ignoreUser(uid); else unignoreUser(uid);}