All pastes #607675 Raw Edit

Phpbb User Stuff

public javascript v1 · immutable
#607675 ·published 2007-07-07 20:34 UTC
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]);