Greasy Fork is available in English.

Trollfilter-tanzmitmir.net

Verstecke Beiträge ausgewählter Nutzer im tanzmitmir.net-Forum. Benutzung: [X] vor Benutzernamen zum Ignorieren des Benutzers. [+] nach Benutzernamen zum Einblenden des Beitrags oder Zitats.

// ==UserScript==
// @name        Trollfilter-tanzmitmir.net
// @name:en     Trollfilter-tanzmitmir.net
// @namespace   trollfilter.tanzmitmir.net
// @version     2.3
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_deleteValue
// @include      *.tanzmitmir.net/*/viewtopic.php*
// @exclude
// @description    Verstecke Beiträge ausgewählter Nutzer im tanzmitmir.net-Forum. Benutzung: [X] vor Benutzernamen zum Ignorieren des Benutzers. [+] nach Benutzernamen zum Einblenden des Beitrags oder Zitats.
// @description:en Hide posts of selected users in tanzmitmir.net forum. Usage: [X] before every username to ignore the selected user. [+] after the username to unhide hidden post or quotation.
// ==/UserScript==
//
//   Based on phpBB User Hide (Firefox 3 compatible) http://userscripts.org/scripts/show/50036 http://userscripts-mirror.org/scripts/show/50036
//

(function() {
	// Greasemonkey persistent storage for hidden users
	var settingName = "tmmUserHide";

	// Get stored hidden users from cookie
	var users = [];
	var cookieName = "phpUserHide";
	for (var i = 0; i < document.cookie.split('; ').length; i++) {
		var oneCookie = document.cookie.split('; ')[i].split('=');
		if (oneCookie[0] == cookieName) {
			users = oneCookie[1].split(', ');
			GM_setValue(settingName, users.join(', ')); 
			break;
		}
	}

	// remove cookie
	if (users.length > 0) {
		document.cookie = cookieName + '=;expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/';
	}
	
	// Get list of hidden users from Greasemonkey persistent storage. 
	users = GM_getValue(settingName,"").split(', ');

	// Cursor functions
	var curPointer = function(event) {
		event.target.style.cursor = 'pointer';
		event.preventDefault();
	};
	var curDefault = function(event) {
		event.target.style.cursor = 'default';
		event.preventDefault();
	};

	// Add or remove a user from Greasemonkey persistent storage.
	var addRemoveUser = function(event) {
		var userNode = event.target.nextSibling;
		var userInnerTags = userNode.getElementsByTagName('A');
		if(userInnerTags.length > 0)
			userNode = userInnerTags[0];
		var user = escape(userNode.innerHTML);

		notFound = true;
		for (var j = 0; j < users.length; j++) {
			if (users[j] == user) {
				users.splice(j, 1);
				notFound = false;
			}
		}
		if (notFound)
			users.push(user);
		if (users.length > 0) {
			GM_setValue(settingName, users.join(', ')); 
		} else {
			GM_deleteValue(settingName);
		}
		location.reload(); 
		event.preventDefault();
	};
	// Toggle display of user's post
	var 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;
		}
		var nextRow = containingRow.nextSibling.nextSibling;
		nextRow.style.display = displayState;

		event.preventDefault();
	};
	// Toggle display of user's quote
	var 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 page
	var 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);

	// Loop through every user post on the page
	for (var i in resultNodes) {
		var containingRow = resultNodes[i].parentNode.parentNode.parentNode;
		// Format whitespace
		var userNode = resultNodes[i];
		var userInnerTags = userNode.getElementsByTagName('A');
		if(userInnerTags.length > 0)
			userNode = userInnerTags[0];
		var user = escape(userNode.innerHTML);
		// Flag whether the user is in our hide list
		var notFound = true;
		for (var j = 0; j < users.length; j++) {
			if (users[j] == user) {
				notFound = false;
			}
		}

		// Add relevant event handlers to user's name and a toggler node
		var toggler = document.createElement('span');
		toggler.setAttribute('title', "Benutzer zur Ignorierliste hinzufügen oder davon entfernen");
		toggler.appendChild(document.createTextNode('[X] '));
		toggler.style.fontSize = "7pt";
		toggler.addEventListener('mouseover', curPointer, true);
		toggler.addEventListener('mouseout', curDefault, true);
		toggler.addEventListener('click', addRemoveUser, true);

		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.setAttribute('title', "Ein-/Ausblenden dieses Beitrags");
		span.appendChild(document.createTextNode(' [+]'));
		span.style.fontSize = "7pt";
		span.setAttribute('displaystate', 'none');
		span.addEventListener('mouseover', curPointer, true);
		span.addEventListener('mouseout', curDefault, true);
		span.addEventListener('click', togglePost, true);

		// Insert the span after the username and before the <br>
		elem.insertBefore(span, elem.firstChild.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';
		}
		var nextRow = containingRow.nextSibling.nextSibling;
		nextRow.style.display = 'none';
	}

	// Find all the usernames quoted in the page
	var 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 page
	for (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)
			usermatch = resultNodes[i].innerHTML.match(/(.*) hat folgendes geschrieben:$/);
		if (usermatch)
			var user = escape(usermatch[1]);
		else
			continue;

		// Flag whether the user is in our hide list
		var notFound = true;
		for (var j = 0; j < users.length; j++) {
			if (users[j] == user) {
				notFound = false;
			}
		}

		// 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.setAttribute('title', "Ein-/Ausblenden dieses Zitats");
		span.appendChild(document.createTextNode(' [+]'));
		span.style.fontSize = "7pt";
		span.setAttribute('displaystate', 'none');
		span.addEventListener('mouseover', curPointer, true);
		span.addEventListener('mouseout', curDefault, true);
		span.addEventListener('click', toggleQuote, true);

		// Insert span
		resultNodes[i].appendChild(span);
		
		// Hide the quote
		containingRow.style.display = 'none';
	}

})();