您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds links to 'Who posted in' lists and posts that generate all posts by that user in the thread.
// ==UserScript== // @name IP.Board - Isolate Posts by User // @namespace Makaze // @include * // @grant none // @version 1.0.9 // @description Adds links to 'Who posted in' lists and posts that generate all posts by that user in the thread. // ==/UserScript== var thisViews, thisLink, thisThreadInList, threadNameInList, thisThreadInThread, threadNameInThread, authorInThread, listOnPage, thisThreadOnPage, threadNameOnPage, usersOnPage, authorOnPage, thisUser, usersPosts, posts, threads, newLink, i = 0; // Classes constructor function ClassHandler() { var self = this; this.classList = function(elem) { return elem.className.trim().split(/[\b\s]/); }; this.hasClass = function(elem, className) { var classes = self.classList(elem), has = false, i = 0; for (i = 0; i < classes.length; i++) { if (classes[i] === className) { has = true; break; } } return (has); }; this.addClass = function(elem, className) { var classes; if (!self.hasClass(elem, className)) { classes = self.classList(elem); classes.push(className); elem.className = classes.join(' ').trim(); } return self; }; this.removeClass = function(elem, className) { var classes = self.classList(elem), i = 0; for (i = 0; i < classes.length; i++) { if (classes[i] === className) { classes.splice(i, 1); } } elem.className = classes.join(' ').trim(); return self; }; this.toggleClass = function(elem, className) { var classes; if (self.hasClass(elem, className)) { self.removeClass(elem, className); } else { classes = self.classList(elem); classes.push(className); elem.className = classes.join(' ').trim(); } return self; }; } // Initialize var Classes = new ClassHandler(); // End Classes constructor function empty(listOnPage) { while (listOnPage.hasChildNodes()) { listOnPage.removeChild(listOnPage.lastChild); } } function createElement(type, callback) { var element = document.createElement(type); callback(element); return element; } function createIsoOnPost(author, threadName, thread) { return createElement('span', function(span) { span.className = 'right ipsType_small desc blend_links'; span.style.marginRight = '7px'; span.appendChild(createElement('a', function(link) { link.title = 'View all posts by ' + author + ' in ' + threadName; link.href = window.location.protocol + '//' + window.location.hostname + window.location.pathname + '?app=core&module=search&do=search&cType=topic&cId=' + thread + '&search_author=' + author; link.appendChild(document.createTextNode('All')); })); }); } function createIsoOnWho(author, threadName, thread, postsElem) { return createElement('a', function(link) { link.title = 'View all posts by ' + author + ' in ' + threadName; link.href = window.location.protocol + '//' + window.location.hostname + window.location.pathname + '?app=core&module=search&do=search&cType=topic&cId=' + thread + '&search_author=' + author; link.appendChild(document.createTextNode(postsElem.textContent + ' (View)')); }); } var generateLinks = function(event) { var listOnPage = event.target, users, author, thisUser, usersPosts, i = 0; if (!listOnPage.className || !Classes.hasClass(listOnPage, 'fixed_inner')) { return false; } threadNameInList = listOnPage.parentNode.getElementsByTagName('h3')[0].textContent.split('Who posted in: ')[1]; users = listOnPage.getElementsByTagName('tr'); for (i = 0; i < users.length; i++) { thisUser = users[i]; if (!Classes.hasClass(users[i], 'header')) { author = thisUser.getElementsByTagName('td')[0].textContent.trim(); usersPosts = thisUser.getElementsByTagName('td')[1]; usersPosts.className = 'blend_links'; newLink = createIsoOnWho(author, threadNameInList, thisThreadInList, usersPosts); empty(usersPosts); usersPosts.appendChild(newLink); } } document.removeEventListener('DOMNodeInserted', generateLinks, false); }; var generateLinksInit = function(event) { thisThreadInList = event.target.href.match(/t=(\d+)/)[1]; document.addEventListener('DOMNodeInserted', generateLinks, false); }; if (document.body.id === 'ipboard_body') { if (document.getElementsByClassName('__topic')[0] != null) { for (i = 0, threads = document.getElementsByClassName('__topic'); i < threads.length; i++) { thisViews = threads[i].getElementsByClassName('col_f_views')[0]; thisLink = thisViews.getElementsByTagName('a')[0]; if (thisLink != null) { thisLink.addEventListener('click', generateLinksInit, false); } } } if (document.getElementsByClassName('post_id')[0] != null) { for (i = 0, posts = document.getElementsByClassName('post_id'); i < posts.length; i++) { if (posts[i].getElementsByTagName('a')[0].href.match(/\/topic\//)) { thisThreadInThread = posts[i].getElementsByTagName('a')[0].href.match(/\/topic\/(\d+)/)[1]; } else { thisThreadInThread = posts[i].getElementsByTagName('a')[0].href.match(/showtopic=(\d+)/)[1]; } threadNameInThread = posts[i].getElementsByTagName('a')[0].title.split(': post #')[0]; authorInThread = posts[i].parentNode.parentNode.getElementsByClassName('author')[0].textContent.trim(); posts[i].parentNode.appendChild(createIsoOnPost(authorInThread, threadNameInThread, thisThreadInThread)); } } if (window.location.href.match('do=who')) { listOnPage = document.getElementsByClassName('fixed_inner')[0]; thisThreadOnPage = window.location.href.match(/t=(\d+)/)[1]; threadNameOnPage = listOnPage.parentNode.getElementsByTagName('h3')[0].textContent.split('Who posted in: ')[1]; usersOnPage = listOnPage.getElementsByTagName('tr'); for (i = 0; i < usersOnPage.length; i++) { thisUser = usersOnPage[i]; if (!Classes.hasClass(thisUser, 'header')) { authorOnPage = thisUser.getElementsByTagName('td')[0].textContent.trim(); usersPosts = thisUser.getElementsByTagName('td')[1]; usersPosts.className = 'blend_links'; newLink = createIsoOnWho(authorOnPage, threadNameOnPage, thisThreadOnPage, usersPosts); empty(usersPosts); usersPosts.appendChild(newLink); } } } }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址