您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
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'; } })();