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.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==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';
	}

})();