您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Search for posts by user in current topic
当前为
// ==UserScript== // @name Search posts by user // @name:ru Поиск постов пользователя // @description Search for posts by user in current topic // @description:ru Найти посты пользователя в текущей теме // @version 1.0.1 // @date 13.12.2017 // @author Halibut // @namespace https://gf.qytechs.cn/en/users/145947-halibut // @homepageURL https://gf.qytechs.cn/en/scripts/36319-search-posts-by-user // @supportURL https://gf.qytechs.cn/en/scripts/36319-search-posts-by-user/feedback // @license HUG-WARE // @include http*://forum.ru-board.com/topic.cgi?forum=*&topic=* // @noframes // @grant none // ==/UserScript== /****************************************************************************** * "THE HUG-WARE LICENSE" (Revision 2): As long as you retain this notice you * * can do whatever you want with this stuff. If we meet some day, and you * * think this stuff is worth it, you can give me/us a hug. * ******************************************************************************/ ((body, img, listener) => { 'use strict'; if (listener.isFF) { const context = body.getAttribute("contextmenu"), menu = context ? document.getElementById(context) : body.appendChild(document.createElement("menu")), mitem = menu.appendChild(document.createElement("menuitem")); if (!context) { menu.id = "GM_page-actions"; menu.type = "context"; body.setAttribute("contextmenu", "GM_page-actions"); }; mitem.label = "Найти все собщения пользователя в теме"; mitem.addEventListener("click", listener) }; const button = listener.actnBox.getElementsByTagName("td")[0].appendChild(document.createTextNode(" ")) && listener.actnBox.getElementsByTagName("td")[0].appendChild(document.createElement("a")), imgNode = button.appendChild(document.createElement("img")); imgNode.src = img; button.addEventListener("click", listener) })( document.body , "data:image/gif;base64,R0lGODlhXgAPAJEAAAAAAP///////wAAACH5BAEAAAIALAAAAABeAA8AAAKUhI+py+0PIwq02ouz3rz7HxjgSJamJ57qym5plcAvAMs0dYfuhL/hzPvlgrLLEFfT/ZDMWy5zVCqjzKozWbREt7qrsQpNcsNYr7T3bYq74N6TPF3Dpc4Dxke3ImlmuWYcNwf4hjeIFhiIp+Vn9uTIaERYNjNJ9bZo5WOHaWNTeNkSKgqiOGp6Gomquuom4foKGwtRAAA7" , { get win() { delete this.win; return this.win = window.top } , get actnBox() { delete this.actnBox; return this.actnBox = [...document.getElementsByTagName("table")].find(el => el.querySelector("a[href^='post.cgi?action=new']")) } , get isFF() { delete this.isFF; return this.isFF = this.win.navigator.product == "Gecko" } , get spHd() { delete this.spHd; return this.spHd = this.getSpHd() } , get spBd() { delete this.spBd; return this.spBd = this.getSpBd() } , getPosts(url) { return new Promise((res, rej) => { const xhr = new XMLHttpRequest(); xhr.open("GET", url, true); xhr.onload = re => { if (!(xhr.readyState == 4 && xhr.status == 200)) return rej("error"); const posts = xhr.responseXML.getElementsByClassName('tb'); if (posts && !!posts.length) res([...posts]); }; xhr.onerror = xhr.onabort = xhr.ontimeout = () => rej("error"); xhr.responseType = "document"; xhr.send(); }) } , getUsrName() { const prompt = this.win.prompt('Задайте имя для поиска', "") return prompt && prompt.toLowerCase().replace(/\s/g, '_'); } , getPages() { const paginator = [...document.getElementsByTagName("p")].find(el => el.textContent && el.textContent.startsWith("Страницы: ")); if (paginator) return [...paginator.getElementsByTagName("td")[0].children].map(el => el.href || this.win.location.href); } , getSpHd() { let spoilerHead = document.getElementById("spu-spoiler-head"); if (!spoilerHead) { const dummyNode = this.actnBox.parentNode.insertBefore(document.createElement('div'), this.actnBox.nextElementSibling), show = decodeURIComponent("%E2%96%BA") + ' Показать результаты поиска', hide = decodeURIComponent("%E2%96%BC") + ' Скрыть результаты поиска'; dummyNode.outerHTML = '<table width="95%" cellspacing="1" cellpadding="3" bgcolor="#999999" align="center" border="0"><tbody><tr><td valign="middle" bgcolor="#dddddd" align="left"></td></tr></tbody></table>'; spoilerHead = this.actnBox.nextElementSibling; spoilerHead.id = "spu-spoiler-head"; spoilerHead.hidden = true; const spTitle = spoilerHead.getElementsByTagName('td')[0]; spoilerHead.style.cssText = '-moz-user-select: none !important;-webkit-user-select: none !important; -ms-user-select: none !important; user-select: none !important; cursor: pointer !important'; spTitle.textContent = show; spoilerHead.onclick = e => { if (e.button != 0 || !this.spBd) return; e.preventDefault(); e.stopPropagation(); this.spBd.hidden = !this.spBd.hidden; spTitle.textContent = this.spBd.hidden ? show : hide; } } return spoilerHead; } , getSpBd() { let spoilerDody = document.getElementById("spu-spoiler-body"); if (!spoilerDody) { spoilerDody = this.spHd.parentNode.insertBefore(document.createElement("table"), this.spHd.nextElementSibling); spoilerDody.id = "spu-spoiler-body"; spoilerDody.align = "center"; spoilerDody.width = "95%"; spoilerDody.style.border = "1px solid black"; spoilerDody.style.padding = "1em .5em" spoilerDody.hidden = true; } return spoilerDody; } , endNotify(suc,err) { if (!!suc) this.win.alert("Поиск закончен!\nНайдено: " + suc + (!!err ? "\nОшибок при запросе страниц: " + err : "")); else this.win.alert("Постов не найдено!" + (!!err ? "\nОшибок при запросе страниц: " + err : "")); } , handleEvent(e) { e.preventDefault(); e.stopPropagation(); const usrName = this.getUsrName(); if (!usrName) return; const pageLinks = this.getPages(); if (!(pageLinks && pageLinks.length)) return; const postsByUser = [], errors = []; if (this.spBd.children && !!this.spBd.children.length) for (const node of [...this.spBd.children]) node.remove(); pageLinks.map((link, indx) => { this.getPosts(link).then( re => { const finded = re.filter(post => !post.querySelector('a.tpc[href$="&postno=1"]') && post.querySelector("td.dats > a.m > b").textContent.toLowerCase().replace(/\s/g, '_') == usrName); if (finded && !!finded.length) { this.spHd.hidden = false; for (const post of finded) { postsByUser.push("!"); this.spBd.appendChild(post); } } if (indx == pageLinks.length - 1) return this.endNotify(postsByUser.length,errors.length) && (postsByUser.length = errors.length = 0) } , err => { postsByUser.push("?"); if (indx == pageLinks.length - 1) return this.endNotify(postsByUser.length,errors.length) && (postsByUser.length = errors.length = 0) } ) }) } } );
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址