// ==UserScript== // @name nmbb // @namespace fishcan // @description nimingban threads block // @include https://h.nimingban.com/* // @version 1.2 // @grant GM_getValue // @grant GM_setValue // @downloadURL https://update.greasyfork.icu/scripts/24054/nmbb.user.js // @updateURL https://update.greasyfork.icu/scripts/24054/nmbb.meta.js // ==/UserScript== var blist = []; blist = GM_getValue('blist',[]); /************************ *截断超过长度的屏蔽列表 *************************/ if(blist.length>100){ blist=blist.slice(0,100); } var allThreads = document.getElementsByClassName("h-threads-item"); for(var i = 0; i < allThreads.length; i++){ var thisId = allThreads[i].getAttribute("data-threads-id"); var thisNode = allThreads[i]; var node = document.createElement("span"); node.setAttribute("class","h-threads-info-report-btn"); node.innerHTML = "[屏蔽串]"; node.firstElementChild.setAttribute("id",thisId); var now = thisNode.firstElementChild.firstElementChild while(now != null){ if(now.className == "h-threads-info"){ now.appendChild(node); break; }else{now = now.nextElementSibling;} } document.getElementById(thisId).addEventListener('click', addBlock, true); } function removeThreads(){ for(var i = 0; i < allThreads.length; i++){ var thisId = allThreads[i].getAttribute("data-threads-id"); var thisNode = allThreads[i]; var thisIndex = blist.indexOf(thisId) if(thisIndex>-1){ // 移除串内容改为替换为撤销按钮 while(thisNode.hasChildNodes()){ thisNode.removeChild(thisNode.lastChild) } var node = document.createElement("span"); node.setAttribute("class","h-threads-info-reply-btn"); node.innerHTML = "[撤销屏蔽]"; node.firstElementChild.setAttribute("id",thisId); thisNode.appendChild(node) document.getElementById(thisId).addEventListener('click', cancelBlock, true) // 将被使用到的规则移到前面 blist.splice(thisIndex,1); blist.unshift(thisId); } } GM_setValue('blist',blist) } function addBlock(e){ e.stopPropagation(); var thisId=this.getAttribute("id"); blist.push(thisId); GM_setValue('blist',blist) removeThreads(); } function cancelBlock(e){ e.stopPropagation(); var thisId = this.getAttribute("id"); var thisIndex = blist.indexOf(thisId); if(thisIndex>-1){ blist.splice(thisIndex,1) GM_setValue('blist',blist) } location.reload(); } removeThreads()