// ==UserScript== // @name NGA Auto Pager V2 // @version 2.40 // @description NGA自动翻页插件 // @match *://bbs.nga.cn/read.php* // @match *://bbs.nga.cn/thread.php* // @match *://bbs.nga.cn/wow* // @match *://bbs.nga.cn/it* // @match *://bbs.nga.cn/auto* // @match *://bbs.nga.cn/ink* // @match *://bbs.nga.cn/ng2* // @match *://bbs.nga.cn/play* // @match *://bbs.nga.cn/tvgame* // @match *://bbs.nga.cn/wa2* // @match *://bbs.nga.cn/ccq* // @match *://bbs.nga.cn/gw2* // @match *://bbs.nga.cn/bns* // @match *://bbs.nga.cn/heroes* // @match *://bbs.nga.cn/lol* // @match *://bbs.nga.cn/hs* // @match *://bbs.nga.cn/wot* // @match *://bbs.nga.cn/jx3* // @match *://bbs.nga.cn/coc* // @match *://bbs.nga.cn/pad* // @match *://bbs.nga.cn/d3* // @match *://bbs.nga.cn/dota* // @match *://bbs.nga.cn/wt* // @match *://bbs.nga.cn/ff14* // @match *://bbs.nga.cn/poi* // @match *://bbs.nga.cn/gta* // @match *://bbs.nga.cn/sc* // @match *://bbs.nga.cn/fn* // @match *://bbs.nga.cn/ow* // @match *://bbs.nga.cn/cr* // @match *://bbs.nga.cn/king* // @match *://nga.178.com/read.php* // @match *://nga.178.com/thread.php* // @match *://nga.178.com/wow* // @match *://nga.178.com/it* // @match *://nga.178.com/auto* // @match *://nga.178.com/ink* // @match *://nga.178.com/ng2* // @match *://nga.178.com/play* // @match *://nga.178.com/tvgame* // @match *://nga.178.com/wa2* // @match *://nga.178.com/ccq* // @match *://nga.178.com/gw2* // @match *://nga.178.com/bns* // @match *://nga.178.com/heroes* // @match *://nga.178.com/lol* // @match *://nga.178.com/hs* // @match *://nga.178.com/wot* // @match *://nga.178.com/jx3* // @match *://nga.178.com/coc* // @match *://nga.178.com/pad* // @match *://nga.178.com/d3* // @match *://nga.178.com/dota* // @match *://nga.178.com/wt* // @match *://nga.178.com/ff14* // @match *://nga.178.com/poi* // @match *://nga.178.com/gta* // @match *://nga.178.com/sc* // @match *://nga.178.com/fn* // @match *://nga.178.com/ow* // @match *://nga.178.com/cr* // @match *://nga.178.com/king* // @match *://ngabbs.com/read.php* // @match *://ngabbs.com/thread.php* // @match *://ngabbs.com/wow* // @match *://ngabbs.com/it* // @match *://ngabbs.com/auto* // @match *://ngabbs.com/ink* // @match *://ngabbs.com/ng2* // @match *://ngabbs.com/play* // @match *://ngabbs.com/tvgame* // @match *://ngabbs.com/wa2* // @match *://ngabbs.com/ccq* // @match *://ngabbs.com/gw2* // @match *://ngabbs.com/bns* // @match *://ngabbs.com/heroes* // @match *://ngabbs.com/lol* // @match *://ngabbs.com/hs* // @match *://ngabbs.com/wot* // @match *://ngabbs.com/jx3* // @match *://ngabbs.com/coc* // @match *://ngabbs.com/pad* // @match *://ngabbs.com/d3* // @match *://ngabbs.com/dota* // @match *://ngabbs.com/wt* // @match *://ngabbs.com/ff14* // @match *://ngabbs.com/poi* // @match *://ngabbs.com/gta* // @match *://ngabbs.com/sc* // @match *://ngabbs.com/fn* // @match *://ngabbs.com/ow* // @match *://ngabbs.com/cr* // @match *://ngabbs.com/king* // @match *://bbs.ngacn.cc/read.php* // @match *://bbs.ngacn.cc/thread.php* // @match *://bbs.ngacn.cc/wow* // @match *://bbs.ngacn.cc/it* // @match *://bbs.ngacn.cc/auto* // @match *://bbs.ngacn.cc/ink* // @match *://bbs.ngacn.cc/ng2* // @match *://bbs.ngacn.cc/play* // @match *://bbs.ngacn.cc/tvgame* // @match *://bbs.ngacn.cc/wa2* // @match *://bbs.ngacn.cc/ccq* // @match *://bbs.ngacn.cc/gw2* // @match *://bbs.ngacn.cc/bns* // @match *://bbs.ngacn.cc/heroes* // @match *://bbs.ngacn.cc/lol* // @match *://bbs.ngacn.cc/hs* // @match *://bbs.ngacn.cc/wot* // @match *://bbs.ngacn.cc/jx3* // @match *://bbs.ngacn.cc/coc* // @match *://bbs.ngacn.cc/pad* // @match *://bbs.ngacn.cc/d3* // @match *://bbs.ngacn.cc/dota* // @match *://bbs.ngacn.cc/wt* // @match *://bbs.ngacn.cc/ff14* // @match *://bbs.ngacn.cc/poi* // @match *://bbs.ngacn.cc/gta* // @match *://bbs.ngacn.cc/sc* // @match *://bbs.ngacn.cc/fn* // @match *://bbs.ngacn.cc/ow* // @match *://bbs.ngacn.cc/cr* // @match *://bbs.ngacn.cc/king* // @author Sunness // @namespace https://greasyfork.org/users/63731 // @license GPL-3.0-or-later // @downloadURL https://update.greasyfork.icu/scripts/23009/NGA%20Auto%20Pager%20V2.user.js // @updateURL https://update.greasyfork.icu/scripts/23009/NGA%20Auto%20Pager%20V2.meta.js // ==/UserScript== const snackbar_css=document.createElement("style");snackbar_css.innerHTML="#snackbar{visibility:hidden;padding:12px;right:50px;bottom:30px;background-color:#333;color:#fff;text-align:center;border-radius:6px;position:fixed}#snackbar.show{visibility:visible;-webkit-animation:fadein .5s,fadeout .5s 2.5s;animation:fadein .5s,fadeout .5s 2.5s}@-webkit-keyframes fadein{from{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@keyframes fadein{from{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@-webkit-keyframes fadeout{from{bottom:30px;opacity:1}to{bottom:0;opacity:0}}@keyframes fadeout{from{bottom:30px;opacity:1}to{bottom:0;opacity:0}}";const snackbar=document.createElement("div");snackbar.setAttribute("id","snackbar"),document.body.appendChild(snackbar_css),document.body.appendChild(snackbar);const backToTop=document.createElement("a");backToTop.setAttribute("id","btt"),backToTop.setAttribute("href","#");const reply=document.createElement("a");reply.setAttribute("id","quick_reply"),reply.setAttribute("href","#"),reply.innerText="回";const next=document.createElement("a");next.setAttribute("id","next_post"),next.setAttribute("href","#");const bar=document.createElement("div");bar.setAttribute("id","pager_bar");const bar_css=document.createElement("style");bar_css.innerHTML="#pager_bar{display:flex;position:fixed;right:32px;bottom:72px;justify-content:space-evenly}#pager_bar a{margin-left:1px;visibility:hidden;background-color:#333;color:#fff;text-align:center;border-radius:6px;padding:8px;width:16px;height:16px;text-decoration:none;user-select:none}#pager_bar a:hover{color:#FFF;opacity:0.8}#pager_bar .show{visibility:visible}#btt{background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAOVBMVEUAAAD///////////////////////////////////////////////////////////////////////8KOjVvAAAAEnRSTlMACLXDHg3y7rc5MeTc2jP2zT4cRXegAAAAVklEQVQY052NSxKAIAxDA4h8FNTc/7CWjnZ0qdl03mszxe84792byadxmZJsJgbyMnbPbeFo2X4u0yojRGPgNn7wAYjRFnpiqoCaxtSB2pTV7EW/4FtO+dIEDwMelUIAAAAASUVORK5CYII=') center 50% no-repeat #333}#next_post{background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAs0lEQVQ4jc3Ru2oCURSF4cH7c9hF3yFFMq15RS9DOiEREh9HsEmElOKg1ZfCC5PNDGoKcZVr//8+sE+S3E3QvoKtxeIZP3i6QH7AAumxSLGxz+Y0KJd7+D6wOdIEn/5mjccSuYtlYD8StDELgy0GBbmPVWBmaB2BFt4DsMNLhfx2kguvdDAPYI6v0M3RqTpSE1PVeUX93DfVkZXI2Vk5LJkU5PHFclgywvBqubCk8W/5ZvkFc4xr+hcT/FsAAAAASUVORK5CYII=') center 50% no-repeat #333}.fast_reply{position:fixed;left:33vw;top:25vh;background:#fff0cd;box-shadow:0 0 16px #403c33;border-radius:6px}",bar.appendChild(next),bar.appendChild(reply),bar.appendChild(backToTop),document.body.appendChild(bar_css),document.body.appendChild(bar);const toast=t=>{snackbar.innerHTML=t,snackbar.className="show",setTimeout(()=>{snackbar.className=""},3e3)},fast_post=$("fast_post_c"),old_post_btn=document.querySelector("#fast_post_c a.uitxt1"),subject=document.querySelector("#fast_post_c .row1 .c2 input"),content=document.querySelector("#fast_post_c .row1 .c2 textarea");if(null!=old_post_btn){const t=old_post_btn.cloneNode(!0);reply.addEventListener("click",e=>{e.preventDefault(),0===fast_post.className.length?(fast_post.className="fast_reply",old_post_btn.parentNode.replaceChild(t,old_post_btn)):(t.parentNode.replaceChild(old_post_btn,t),fast_post.className="")}),t.addEventListener("click",e=>{e.preventDefault(),commonui.newPost(t,postfunc.__REPLY_BLANK,window.__CURRENT_F_BIT,window.__CURRENT_FID,window.__CURRENT_TID,0,null,subject.value,content.value),reply.click(),toast("正在回复")})}else document.querySelector("a.rep.uitxt1")&&reply.setAttribute("href",document.querySelector("a.rep.uitxt1").href);const threshold=3e3,topPosition=Math.round(($("topicrows")||$("m_posts")).getBoundingClientRect().top+window.scrollY);let exist=!1,running=!1,opt=2,post=0,posts=document.querySelectorAll(".postbox"),ip=1,backing=!1,thread=!1,lastScrollTop=window.pageYOffset|window.document.scrollTop;for(const t of posts)document.documentElement.scrollTop>t.getBoundingClientRect().top+window.scrollY&&post++;"undefined"!=typeof __PAGE&&(ip=__PAGE[2],opt=0===__PAGE[0].indexOf("/read")?2:1026,exist=null!==document.querySelector("a.uitxt1[title=加载下一页]")),2===opt&&(thread=!0,next.className="show"),backToTop.addEventListener("click",t=>{t.preventDefault(),window.scrollTo({top:topPosition,left:0,behavior:"smooth"}),backing=!0}),next.addEventListener("click",t=>{t.preventDefault(),window.scrollTo({top:posts[post].getBoundingClientRect().top+window.scrollY,left:0,behavior:"smooth"}),posts.length>post+1&&post++});const fr=new FileReader,load=()=>{const data=pr(fr.result,opt),c=data[1].match(/\s*{(1024&opt&&"TBODY"==t.nodeName||"forumbox postbox"==t.className)&&iPc.insertBefore(t,null)}),data[2].forEach(d=>eval(d)),__PAGE[2]++,commonui.pageBtn(pb[0],{0:__PAGE[0],1:__PAGE[1],2:ip,3:__PAGE[3]},20),commonui.pageBtn(pb[1],{0:__PAGE[0],1:__PAGE[1],2:__PAGE[2],3:__PAGE[3]},10),running=!1,posts=document.querySelectorAll(".postbox")};fr.addEventListener("loadend",load);const asyncFunc=t=>()=>{try{t()}catch(t){console.error("NGA Autopager V2",t)}},scroll=async()=>{const t=window.pageYOffset||window.document.scrollTop;if(thread&&(t>lastScrollTop?t>posts[post].getBoundingClientRect().top+window.scrollY&&posts.length>post+1&&post++:post>0&&t1&&post--,lastScrollTop=t),backing&&Math.abs(t-topPosition)<2&&(post=1,backing=!1),t<1e3?(backToTop.className="",thread&&(reply.className="",0!==fast_post.className.length&&reply.click())):(backToTop.className="show",thread&&(reply.className="show")),navigator.onLine&&exist&&!running&&document.documentElement.scrollHeight-t