rendered paste body// phpBB User Stuff// version 0.1// 2006-02-26// Copyright (c) 2006, xamm// Released under the GPL license// http://www.gnu.org/copyleft/gpl.html//// --------------------------------------------------------------------//// This is a Greasemonkey user script. To install it, you need// Greasemonkey 0.3 or later: http://greasemonkey.mozdev.org/// Then restart Firefox and revisit this script.// Under Tools, there will be a new menu item to "Install User Script".// Accept the default configuration and install.//// To uninstall, go to Tools/Manage User Scripts,// select "phpBB User Stuff", and click Uninstall.//// --------------------------------------------------------------------//// ChangeLog// 2006-02-26 - 0.2 - Fixed issue if you cancelled changing a users name// 2006-02-26 - 0.1 - Initial release//// --------------------------------------------------------------------//// ==UserScript==// @name phpBB User Stuff// @description Allows you to hides users' posts, edit users' names and store a small amount of information about each user.// @namespace http://www.otsegolectric.com/greasemonkey/// @include */viewtopic.php*// ==/UserScript==// Get stored hidden users from cookievar hiddenUsers = [];var userNotes = [];var usersNew = [];var usersOld = [];var cookieNameNew = "phpBBUserNew";var cookieNameOld = "phpBBUserOld";var hideCookieName = "phpBBUserHide";var userName;var userNote;var hiddenUser;for (var i = 0; i < document.cookie.split('; ').length; i++) { var oneCookie = document.cookie.split('; ')[i].split('='); if (oneCookie[0] == hideCookieName) { hiddenUsers = oneCookie[1].split(', '); break; }}for (var i = 0; i < document.cookie.split('; ').length; i++) { var oneCookie = document.cookie.split('; ')[i].split('='); if(oneCookie[0] == cookieNameNew) usersNew = oneCookie[1].split(', '); else if(oneCookie[0] == cookieNameOld) usersOld = oneCookie[1].split(', ');}/*for(var i = 0; i < usersOld.length; i++){ while(document.body.innerHTML.indexOf(usersOld[i]) != -1) document.body.innerHTML = document.body.innerHTML.replace(usersOld[i], usersNew[i]);}*/var editNotes = function(event) { var userNote = event.target.previousSibling.innerHTML.replace(/ /g, ''); GM_setValue(userNote, prompt( "Edit user note for [" + userNote + "]:", userNotes[userNote] ) ); window.location.reload(false);};// Add or remove a user from the cookievar addRemoveUserRename = function(event) { // Parse current cookie for (var i = 0; i < document.cookie.split('; ').length; i++) { var oneCookie = document.cookie.split('; ')[i].split('='); if(oneCookie[0] == cookieNameNew) usersNew = oneCookie[1].split(', '); else if(oneCookie[0] == cookieNameOld) usersOld = oneCookie[1].split(', '); } userName = escape(event.target.innerHTML); notFound = true; for (var j = 0; j < usersNew.length; j++) { if (usersNew[j] == userName) { usersOld.splice(j, 1); usersNew.splice(j, 1); notFound = false; } } if (notFound){ var userNew = escape(prompt('Enter the new name for ' + unescape(userName), unescape(userName))); if(userNew != "null"){ usersNew.push(userNew); usersOld.push(userName); } } if (usersOld.length > 0) { var date = new Date(); date.setTime(date.getTime() + 31536000000); var expires = '; expires=' + date.toGMTString(); var valueOld = usersOld.join(', '); var valueNew = usersNew.join(', '); document.cookie = cookieNameOld + '=' + valueOld + expires + '; path=/'; document.cookie = cookieNameNew + '=' + valueNew + expires + '; path=/'; } else { document.cookie = cookieNameOld + '=;expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/'; document.cookie = cookieNameNew + '=;expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/'; } window.location.reload(false); event.preventDefault();};// Add or remove a user from the cookievar addRemoveUserHide = function(event) { // Parse current cookie for(j = 0; j < document.cookie.split('; ').length; j++ ) { var oneCookie = document.cookie.split('; ')[j].split('='); if (oneCookie[0] == hideCookieName) { hiddenUsers = oneCookie[1].split(', '); break; } } var hiddenUser = escape(event.target.nextSibling.innerHTML) notFound = true; for (var j = 0; j < hiddenUsers.length; j++) { if (hiddenUsers[j] == hiddenUser) { hiddenUsers.splice(j, 1); notFound = false; } } if (notFound) hiddenUsers.push(hiddenUser); if (hiddenUsers.length > 0) { var date = new Date(); date.setTime(date.getTime() + 31536000000); var expires = '; expires=' + date.toGMTString(); var value = hiddenUsers.join(', '); document.cookie = hideCookieName + '=' + value + expires + '; path=/'; } else { document.cookie = hideCookieName + '=;expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/'; } window.location.reload(false); event.preventDefault();};// Toggle display of user's postvar togglePost = function(event) { var displayState = event.target.getAttribute('displaystate'); if (displayState == 'none') displayState = ''; else displayState = 'none'; event.target.setAttribute('displaystate', displayState); containingRow = event.target.parentNode.parentNode; var innerTags = containingRow.getElementsByTagName('*'); for (var i = 0; i < innerTags.length; i++) { var tagClass = innerTags[i].getAttribute('class'); if (tagClass == 'postbody' || tagClass == 'postsig' || tagClass == 'postdetails' || innerTags[i].tagName == 'TABLE') innerTags[i].style.display = displayState; } event.preventDefault();};// Toggle display of user's quotevar toggleQuote = function(event) { var displayState = event.target.getAttribute('displaystate'); if (displayState == 'none') displayState = 'table-row'; else displayState = 'none'; event.target.setAttribute('displaystate', displayState); // Jump to parent row var containingRow = event.target.parentNode.parentNode.parentNode.parentNode.nextSibling; // Find containing row while (containingRow.nodeType != 1) containingRow = containingRow.nextSibling; containingRow.style.display = displayState; event.preventDefault();};// Find all the usernames in the pagevar results = document.evaluate("//span[@class='name']/b|//span[@class='name']/strong", document, null, XPathResult.ANY_TYPE, null);var resultNodes = [];var aResult;while (aResult = results.iterateNext()) { resultNodes.push(aResult); resultUser = aResult.innerHTML.replace(/ /g, ''); userNotes[resultUser] = ( GM_getValue( resultUser, '' ) ); // JW}// Loop through every user post on the pagefor (var i in resultNodes) { var containingRow = resultNodes[i].parentNode.parentNode.parentNode; // Format whitespace hiddenUser = escape(resultNodes[i].innerHTML); userNote = resultNodes[i].innerHTML.replace(/ /g, ''); // Flag whether the user is in our hide list var notFound = true; for (var j = 0; j < hiddenUsers.length; j++) { if (hiddenUsers[j] == hiddenUser) { notFound = false; } } var renameFound = false; var newName; for (var j = 0; j < usersOld.length; j++) { if (usersOld[j] == hiddenUser) { renameFound = true; newName = unescape(usersNew[j]); } } // Add relevant event handlers to user's name and a toggler node var toggler = document.createElement('span'); toggler.setAttribute('title', "click to add or remove this user from your hide list"); toggler.appendChild(document.createTextNode('[X] ')); toggler.style.fontSize = "7pt"; toggler.style.cursor = 'pointer'; toggler.addEventListener('click', addRemoveUserHide, true); var noteEdit = document.createElement('span'); noteEdit.title = userNotes[userNote]; noteEdit.appendChild(document.createTextNode(' [?]')); noteEdit.style.fontSize = "7pt"; noteEdit.style.cursor = 'pointer'; noteEdit.addEventListener('click', editNotes, true); resultNodes[i].title = 'click to rename this user'; resultNodes[i].style.cursor = 'pointer'; if(renameFound) resultNodes[i].innerHTML = newName resultNodes[i].addEventListener('click', addRemoveUserRename, true); resultNodes[i].parentNode.insertBefore(noteEdit, resultNodes[i].nextSibling); resultNodes[i].parentNode.insertBefore(toggler, resultNodes[i]); // If this user isn't in our hide list, skip to the next user if (notFound) continue; // Find the first element node (td) in the containing row var elem = containingRow.firstChild; while (elem.nodeType != 1) elem = elem.nextSibling; // Create a span to control toggling var span = document.createElement('span'); span.appendChild(document.createTextNode('Toggle Display')); span.appendChild(document.createElement('br')); span.className = 'name'; span.setAttribute('displaystate', 'none'); span.style.cursor = 'pointer'; span.addEventListener('click', togglePost, true); // Insert the span after the username and before the <br> elem.insertBefore(span, elem.firstChild.nextSibling.nextSibling); // Insert a <br> after the username and before the span elem.insertBefore(document.createElement('br'), elem.firstChild.nextSibling.nextSibling); var innerTags = containingRow.getElementsByTagName('*'); for (var i = 0; i < innerTags.length; i++) { var tagClass = innerTags[i].getAttribute('class'); if (tagClass == 'postbody' || tagClass == 'postsig' || tagClass == 'postdetails' || innerTags[i].tagName == 'TABLE') innerTags[i].style.display = 'none'; }}// Find all the usernames quoted in the pagevar results = document.evaluate("//td[@class='quote']/parent::*/preceding-sibling::*/td/span/b|//td[@class='quote']/parent::*/preceding-sibling::*/td/span/strong", document, null, XPathResult.ANY_TYPE, null);var resultNodes = [];var aResult;while (aResult = results.iterateNext()) resultNodes.push(aResult);// Loop through every user quote on the pagefor (var i in resultNodes) { var containingRow = resultNodes[i].parentNode.parentNode.parentNode.nextSibling; while (containingRow.nodeType != 1) containingRow = containingRow.nextSibling; // Find username var usermatch = resultNodes[i].innerHTML.match(/(.*) wrote:$/); if (usermatch) var hiddenUser = escape(usermatch[1]); else continue; // Flag whether the user is in our hide list var notFound = true; for (var j = 0; j < hiddenUsers.length; j++) { if (hiddenUsers[j] == hiddenUser) { notFound = false; } } for (var j = 0; j < usersOld.length; j++) { if (usersOld[j] == hiddenUser) { resultNodes[i].innerHTML = unescape(usersNew[j]) + " wrote:"; } } // If this user isn't in our hide list, skip to the next user if (notFound) continue; // Create a span to control toggling var span = document.createElement('span'); span.appendChild(document.createElement('br')); span.appendChild(document.createTextNode('Toggle Display')); span.className = 'gensmallbold'; span.setAttribute('displaystate', 'none'); span.style.cursor = 'pointer'; span.setAttribute('onClick', 'toggleQuote(this)'); resultNodes[i].appendChild(span); // Hide the quote containingRow.style.display = 'none';}var theScript = '';theScript += 'function toggleQuote(event){';theScript += ' var displayState = event.getAttribute(\'displaystate\');';theScript += ' if (displayState == \'none\')';theScript += ' displayState = \'table-row\';';theScript += ' else';theScript += ' displayState = \'none\';';theScript += ' event.setAttribute(\'displaystate\', displayState);';theScript += ' var containingRow = event.parentNode.parentNode.parentNode.parentNode.nextSibling;';theScript += ' while (containingRow.nodeType != 1)';theScript += ' containingRow = containingRow.nextSibling;';theScript += ' containingRow.style.display = displayState;';theScript += '}';var theScriptObj=document.createElement('script');theScriptObj.setAttribute('language','javascript');theScriptObj.setAttribute('type','text/javascript');theScriptObj.innerHTML = theScript;document.getElementsByTagName('head')[0].appendChild(theScriptObj, document.getElementsByTagName('head')[0]);