Bilibili-Evolved/min/restore-floors.min.js
2021-10-26 13:22:15 +08:00

1 line
2.2 KiB
JavaScript

(()=>(t,e)=>{var o;(function(t){t[t["Default"]=1]="Default";t[t["ByTime"]=2]="ByTime";t[t["ByLikes"]=3]="ByLikes"})(o||(o={}));const i=(t,e,i=1)=>{if(e===o.ByTime){return Ajax.getJson(`https://api.bilibili.com/x/v2/reply/main?oid=${t}&type=1&mode=${e}`)}return Ajax.getJson(`https://api.bilibili.com/x/v2/reply/main?oid=${t}&type=1&mode=${e}&next=${i}`)};const r=async t=>{if(document.URL.match(/\/\/www\.bilibili\.com\/(video|bangumi)/)){return await SpinQuery.select((()=>unsafeWindow.aid))}console.error("No oid extract method for current context.",t)};const n=async t=>{const e=await r(t);if(!e){return}const n=dq(t,".hot-sort.on")!==null?o.ByLikes:o.ByTime;let s=1;const a=dq(t,".paging-box .current");if(a!==null){s=parseInt(a.textContent)}const l=await i(e,n,s);if(l.code!==0){console.error("Comment API failed: ",l.message);return}const c=t=>{const e=[{id:t.rpid_str,floor:t.floor}];if(t.replies!==null){e.push(...t.replies.map((t=>({id:t.rpid_str,floor:t.floor}))))}return e};const d=_.flatMap(_.get(l,"data.replies",[]),c);const f=_.get(l,"data.top.upper");if(f){d.push(...c(f))}const p=dqa(t,".reply-wrap[data-id]");const u=p.map((t=>dq(t,".reply-wrap > .con > .info, .reply-wrap > .info")));p.forEach(((t,e)=>{const o=t.getAttribute("data-id");const i=d.find((t=>t.id===o));if(i!==undefined){const t=u[e];if(t.getAttribute("data-restore-floor")===null){t.insertAdjacentHTML("afterbegin",`<span class="floor">#${i.floor}</span>`);t.setAttribute("data-restore-floor",i.floor.toString())}}}))};const s=t=>{const e="comment-loading";if(Array.prototype.some.call(t.children,(t=>t.classList.contains(e)))){const o=Observer.childList(t,(i=>{if(i.some((t=>{Array.prototype.some.call(t.removedNodes,(t=>t.nodeType===Node.ELEMENT_NODE&&t.classList.contains(e)))}))){o.stop();s(t)}}))}else{if(t.getAttribute("data-restore-floor")===null){t.setAttribute("data-restore-floor","true");const e=dq(t,".comment-list");Observer.childList(e,_.debounce((e=>{console.log(e);n(t)}),100))}}};const a=["//www.bilibili.com/video","//www.bilibili.com/bangumi"];if(a.some((t=>document.URL.includes(t)))){fullyLoaded((()=>{const t=_.debounce((()=>dqa(".bb-comment").forEach((t=>s(t)))),200);Observer.childListSubtree(document.body,t)}))}})();