Add top comment support

This commit is contained in:
the1812 2020-05-23 14:30:13 +08:00
parent ebf9c64e68
commit f31b6456cb
8 changed files with 29 additions and 19 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -176,7 +176,7 @@
"remove-top-mask.min.js": "A15C1EC10D2E1A61845B1ADAE51860553F96427059E10443B1E53FAF48F45304",
"remove-watermark.min.js": "5A63C694BB9E68EA9FDA394D61D227FA31A504E31783C62BF42AACC3FC78C8C4",
"reorder.min.js": "C52DEC9C8962AEC9E824913788BDACFCAB1E43356056658F884EE707508629D2",
"restore-floors.min.js": "D08ADEE88A8BDC82029D7F7425B7333109B4CAD5F5E6D0F73D1871B272E1DCFB",
"restore-floors.min.js": "0277EE2C11AD2EE48990B551016652EBD3D36A36D30BDB25BB6B40957DAF1C12",
"screenshot.min.css": "6310BD2E77013EAAB38675DCD00761C2B7132C79A529B4FE25C8E86EC7E2F967",
"screenshot.min.js": "7EE9BF54C2297BDF1496A890677EB85AD972A05C566436D41F3DB51C8CCA1C71",
"scrollbar.min.css": "E17BDD4F223F7992A1AF279D7EBA58D9FBB51217F45964C79E30DC2ACBC15B46",

Binary file not shown.

View File

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

View File

@ -31,22 +31,27 @@ const restore = async (commentContainer: HTMLElement) => {
console.error('Comment API failed: ', json.message)
return
}
const replies: { id: string; floor: number }[] = _.flatMap(_.get(json, 'data.replies', []), item => {
const getFloorInfo = (item: any) => {
const result = [{
id: item.rpid_str,
floor: item.floor,
id: item.rpid_str as string,
floor: item.floor as number,
}]
if (item.replies !== null) {
result.push(...item.replies.map((it: any) => {
return {
id: it.rpid_str,
floor: it.floor,
id: it.rpid_str as string,
floor: it.floor as number,
}
}))
}
return result
})
console.log(replies)
}
const replies = _.flatMap(_.get(json, 'data.replies', []), getFloorInfo)
const top = _.get(json, 'data.top.upper')
if (top) {
replies.push(...getFloorInfo(top))
}
// console.log(replies)
const commentItems = dqa(commentContainer, '.reply-wrap[data-id]')
const commentInfos = commentItems.map(item => dq(item, '.reply-wrap > .con > .info, .reply-wrap > .info') as HTMLElement)
commentItems.forEach((item, index) => {
@ -85,9 +90,14 @@ const prepareRestore = (commentContainer: HTMLElement) => {
}
}
}
fullyLoaded(() => {
if (document.URL.match(/\/\/www\.bilibili\.com\/(video|bangumi)/)) {
const supportedUrls = [
'//www.bilibili.com/video',
'//www.bilibili.com/bangumi',
// '//t.bilibili.com/',
]
if (supportedUrls.some(it => document.URL.includes(it))) {
fullyLoaded(() => {
const callback = _.debounce(() => dqa('.bb-comment').forEach(it => prepareRestore(it as HTMLElement)), 200)
Observer.childListSubtree(document.body, callback)
}
})
})
}