mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
Add restore floors
This commit is contained in:
parent
9702d56eb2
commit
8e4df2b51f
1
@types/global/index.d.ts
vendored
1
@types/global/index.d.ts
vendored
@ -474,6 +474,7 @@ declare global {
|
||||
extendFeedsLive: boolean,
|
||||
userImages: UserImage[],
|
||||
playerOnTop: boolean,
|
||||
restoreFloors: boolean,
|
||||
latestVersionLink: string,
|
||||
currentVersion: string,
|
||||
}
|
||||
|
||||
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
@ -25,7 +25,7 @@
|
||||
"collapse-live-side-bar.min.css": "22348786547D2D8DB659A306AF2E9C1F2050D66488778C71545AAEF785FD57E6",
|
||||
"collapse-live-side-bar.min.js": "BB1B1CF157099A70F1AEA3F154C84D9CA1A84A29B5F6E42357CA9F51FFC4965C",
|
||||
"combo-like.min.js": "368DA34768E947628099D258ED23BC5FFFCFFD25A47346E086C7975C8A52F997",
|
||||
"comment.min.css": "2F358407BA8CCBE0489077260CC8ADDB8E3020E38794CEA3A65428B27FD9D28C",
|
||||
"comment.min.css": "992AC8DD1DE7D99D35979E97A66E619820D1A28611275712B6CCBFDE4D99980C",
|
||||
"comment.min.js": "64F7B6951861C25799C48BB1ABCF2A73F79BCBBFC1E9D3BD45EC1F16F94F6451",
|
||||
"comment-dark.min.css": "E980508E86203743C36FEE4F7149BFF53961ECBC4EC140E8C162D18D395B940A",
|
||||
"compact-layout.min.css": "CAC8B0DBA8E90B38D31F0811B7B469709052204AC36D5D3F20FE5D0899FDDCCB",
|
||||
@ -54,12 +54,11 @@
|
||||
"custom-navbar-watchlater-list.min.js": "57EA2C62F7442750BB177B9898CF07BA61C45F0FD99737516ED609051699B054",
|
||||
"danmaku-converter.min.js": "6C844406F060DCF2483F9CC4C7329911ED77BC77097F2BC5B925B6F12C990820",
|
||||
"dark.min.css": "4D77F3F4DDE158F6A3720D1A022F4B414434D883F742A561008DAF2DA41BAB95",
|
||||
"dark.user.css": "BA65A754127DD385948507F571FDAE1BE4DB36044404159EB8A1B0C12545CBBE",
|
||||
"dark.user.css": "C929577C0F19B6543EB7A7267A53BBD485ECDA96DB073A4713A59F2E4D535292",
|
||||
"dark-color-scheme.min.js": "6D353AC738180317ACF9D2E046BFFBA0ACC0FA7A8D22B8E16C51127CDE4FE96B",
|
||||
"dark-important.min.css": "9381B563726BCA701DD77C7AD572793538A45CB839F56008A55EE46821EA1B05",
|
||||
"dark-navbar.min.css": "7FAD547E326B768904B3739C978DF86FFDDD5E5064FB8F490710D197CCC3018B",
|
||||
"dark-schedule.min.js": "853C446547603F4F0425F19F09F73335C9EC451A790C1C07E5E5B88A09E9B453",
|
||||
"dark-slice-9.min.css": "2A352B72A29CEF390AAF28DA20A72030D307BA530B388AED972D61C7FDDF2BB4",
|
||||
"dark-styles.min.js": "74E6D655F88E50A27D60F189554F6656CCD2A6EA2686FD9946CA9A89EABF7719",
|
||||
"debounce.min.js": "54D33E1273C1F3FE19550BF1844339C3D54D6B01DF8A39C3162D95B93B079CFA",
|
||||
"default-danmaku-settings.min.css": "D9942B184FEDA7B08CFA0C34920E97D7A83B81762DCBF757642EBB60F95FF25D",
|
||||
@ -172,6 +171,7 @@
|
||||
"remove-top-mask.min.js": "A15C1EC10D2E1A61845B1ADAE51860553F96427059E10443B1E53FAF48F45304",
|
||||
"remove-watermark.min.js": "5A63C694BB9E68EA9FDA394D61D227FA31A504E31783C62BF42AACC3FC78C8C4",
|
||||
"reorder.min.js": "C52DEC9C8962AEC9E824913788BDACFCAB1E43356056658F884EE707508629D2",
|
||||
"restore-floors.min.js": "1C3BC2FBE17EBFA3D13001D250FC134E765DA894A24E2F69B0C8848B1E14F7AD",
|
||||
"screenshot.min.css": "6310BD2E77013EAAB38675DCD00761C2B7132C79A529B4FE25C8E86EC7E2F967",
|
||||
"screenshot.min.js": "7EE9BF54C2297BDF1496A890677EB85AD972A05C566436D41F3DB51C8CCA1C71",
|
||||
"scrollbar.min.css": "E17BDD4F223F7992A1AF279D7EBA58D9FBB51217F45964C79E30DC2ACBC15B46",
|
||||
|
||||
BIN
min/bundle.zip
BIN
min/bundle.zip
Binary file not shown.
2
min/comment.min.css
vendored
2
min/comment.min.css
vendored
File diff suppressed because one or more lines are too long
1
min/restore-floors.min.js
vendored
Normal file
1
min/restore-floors.min.js
vendored
Normal file
@ -0,0 +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;const s=parseInt(dq(e,".paging-box .current").textContent);const a=await r(t,n,s);if(a.code!==0){console.error("Comment API failed: ",a.message);return}const l=_.flatMap(_.get(a,"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(l);const c=dqa(e,".reply-wrap[data-id]");const d=c.map(e=>dq(e,".reply-wrap > .con > .info, .reply-wrap > .info"));c.forEach((e,t)=>{const o=e.getAttribute("data-id");const r=l.find(e=>e.id===o);if(r!==undefined){const e=d[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)}})}})();
|
||||
@ -879,5 +879,11 @@ Resource.manifest = {
|
||||
darkColorScheme: '夜间模式跟随系统',
|
||||
},
|
||||
},
|
||||
restoreFloors: {
|
||||
path: 'restore-floors.min.js',
|
||||
displayNames: {
|
||||
restoreFloors: '评论楼层显示',
|
||||
},
|
||||
},
|
||||
}
|
||||
export const resourceManifest = Resource.manifest
|
||||
|
||||
@ -225,6 +225,7 @@ export const settings = {
|
||||
extendFeedsLive: true,
|
||||
userImages: [],
|
||||
playerOnTop: false,
|
||||
restoreFloors: false,
|
||||
cache: {},
|
||||
}
|
||||
const fixedSettings = {
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
@mixin orders {
|
||||
display: flex;
|
||||
.floor {
|
||||
opacity: 0.7;
|
||||
order: 1;
|
||||
}
|
||||
.reply {
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
<checkbox indent="0" key="seedsToCoins" dependencies=""></checkbox>
|
||||
<checkbox indent="0" key="selectableColumnText" dependencies=""></checkbox>
|
||||
<checkbox indent="0" key="urlParamsClean" dependencies=""></checkbox>
|
||||
<!-- <checkbox indent="0" key="restoreFloors" dependencies=""></checkbox> -->
|
||||
<category icon="touch">触摸</category>
|
||||
<checkbox indent="0" key="touchNavBar" dependencies=""></checkbox>
|
||||
<checkbox indent="0" key="comboLike" dependencies=""></checkbox>
|
||||
|
||||
89
src/utils/restore-floors.ts
Normal file
89
src/utils/restore-floors.ts
Normal file
@ -0,0 +1,89 @@
|
||||
enum CommentSortOrder {
|
||||
Default = 1,
|
||||
ByTime,
|
||||
ByLikes,
|
||||
}
|
||||
const getComments = (oid: number | string, mode: CommentSortOrder, page = 1) => {
|
||||
if (mode === CommentSortOrder.ByTime) {
|
||||
return Ajax.getJson(`https://api.bilibili.com/x/v2/reply/main?oid=${oid}&type=1&mode=${mode}`)
|
||||
}
|
||||
return Ajax.getJson(`https://api.bilibili.com/x/v2/reply/main?oid=${oid}&type=1&mode=${mode}&next=${page}`)
|
||||
}
|
||||
const getOid = async (commentContainer: HTMLElement) => {
|
||||
if (document.URL.match(/\/\/www\.bilibili\.com\/(video|bangumi)/)) {
|
||||
return await SpinQuery.select(() => unsafeWindow.aid)
|
||||
}
|
||||
console.error('No oid extract method for current context.', commentContainer)
|
||||
}
|
||||
const restore = async (commentContainer: HTMLElement) => {
|
||||
const oid = await getOid(commentContainer)
|
||||
if (oid === undefined) {
|
||||
return
|
||||
}
|
||||
const mode = dq(commentContainer, '.hot-sort.on') !== null ? CommentSortOrder.ByLikes : CommentSortOrder.ByTime
|
||||
const page = parseInt((dq(commentContainer, '.paging-box .current') as HTMLElement).textContent!)
|
||||
const json = await getComments(oid, mode, page)
|
||||
if (json.code !== 0) {
|
||||
console.error('Comment API failed: ', json.message)
|
||||
return
|
||||
}
|
||||
const replies: { id: string; floor: number }[] = _.flatMap(_.get(json, 'data.replies', []), item => {
|
||||
const result = [{
|
||||
id: item.rpid_str,
|
||||
floor: item.floor,
|
||||
}]
|
||||
if (item.replies !== null) {
|
||||
result.push(...item.replies.map((it: any) => {
|
||||
return {
|
||||
id: it.rpid_str,
|
||||
floor: it.floor,
|
||||
}
|
||||
}))
|
||||
}
|
||||
return result
|
||||
})
|
||||
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) => {
|
||||
const id = item.getAttribute('data-id') as string
|
||||
const reply = replies.find(r => r.id === id)
|
||||
if (reply !== undefined) {
|
||||
const info = commentInfos[index]
|
||||
if (info.getAttribute('data-restore-floor') === null) {
|
||||
info.insertAdjacentHTML('afterbegin', /*html*/`<span class="floor">#${reply.floor}</span>`)
|
||||
info.setAttribute('data-restore-floor', reply.floor.toString())
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
const prepareRestore = (commentContainer: HTMLElement) => {
|
||||
const commentLoading = 'comment-loading'
|
||||
if (Array.prototype.some.call(commentContainer.children, (it: HTMLElement) => it.classList.contains(commentLoading))) {
|
||||
const observer = Observer.childList(commentContainer, records => {
|
||||
if (records.some(r => {
|
||||
Array.prototype.some.call(r.removedNodes, (node: Node) => {
|
||||
return node.nodeType === Node.ELEMENT_NODE && (node as HTMLElement).classList.contains(commentLoading)
|
||||
})
|
||||
})) {
|
||||
observer.stop()
|
||||
prepareRestore(commentContainer)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
if (commentContainer.getAttribute('data-restore-floor') === null) {
|
||||
commentContainer.setAttribute('data-restore-floor', 'true')
|
||||
const list = dq(commentContainer, '.comment-list') as HTMLElement
|
||||
Observer.childList(list, _.debounce(records => {
|
||||
console.log(records)
|
||||
restore(commentContainer)
|
||||
}, 100))
|
||||
}
|
||||
}
|
||||
}
|
||||
fullyLoaded(() => {
|
||||
if (document.URL.match(/\/\/www\.bilibili\.com\/(video|bangumi)/)) {
|
||||
const callback = _.debounce(() => dqa('.bb-comment').forEach(it => prepareRestore(it as HTMLElement)), 200)
|
||||
Observer.childListSubtree(document.body, callback)
|
||||
}
|
||||
})
|
||||
Loading…
Reference in New Issue
Block a user