mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
Fix reused danmakus
This commit is contained in:
parent
ecb48c5b4d
commit
c863713a77
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
2
min/airborne.min.js
vendored
2
min/airborne.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>{return(e,t)=>{(async()=>{if(!document.URL.match(/\/\/www\.bilibili\.com\/video\//)){return}const{forEachVideoDanmaku:e}=await t.importAsync("video-danmaku");t.applyStyle("airborneStyle");const n=e=>{if(!e){return NaN}const t=e.match(/(\d+)[::.](\d+)([::](\d+))?/);if(!t){return NaN}if(t[3]){const[,e,n,,a]=t.map(e=>parseInt(e));if([e,n,a].some(e=>Number.isNaN(e))){return NaN}return e*3600+n*60+a}const[,n,a]=t.map(e=>parseInt(e));if([n,a].some(e=>Number.isNaN(e))){return NaN}return n*60+a};const a=e=>{const t=e.target;if(!t.classList.contains("b-danmaku")){return}const a=n(t.textContent);if(!Number.isNaN(a)){const e=dq("video");e.currentTime=a;e.play()}};const r=e=>{const t=!Number.isNaN(n(e.text));e.element.classList.toggle("airborne",t)};e({added:r});Observer.videoChange(()=>{const e=dq(".bilibili-player-video-wrap");if(e.classList.contains("airborne-enabled")){return}e.classList.add("airborne-enabled");e.addEventListener("click",a)})})()}})();
|
(()=>{return(e,t)=>{(async()=>{if(!document.URL.match(/\/\/www\.bilibili\.com\/video\//)){return}const{forEachVideoDanmaku:e}=await t.importAsync("video-danmaku");t.applyStyle("airborneStyle");const n=e=>{if(!e){return NaN}const t=e.match(/(\d+)[ ]*[::.][ ]*(\d+)([ ]*[::][ ]*(\d+))?/);if(!t){return NaN}if(t[3]){const[,e,n,,a]=t.map(e=>parseInt(e));if([e,n,a].some(e=>Number.isNaN(e))){return NaN}return e*3600+n*60+a}const[,n,a]=t.map(e=>parseInt(e));if([n,a].some(e=>Number.isNaN(e))){return NaN}return n*60+a};const a=e=>{const t=e.target;if(!t.classList.contains("b-danmaku")){return}const a=n(t.textContent);if(!Number.isNaN(a)){const e=dq("video");e.currentTime=a;e.play()}};const r=e=>{const t=!Number.isNaN(n(e.text));e.element.classList.toggle("airborne",t)};e({added:r});Observer.videoChange(()=>{const e=dq(".bilibili-player-video-wrap");if(e.classList.contains("airborne-enabled")){return}e.classList.add("airborne-enabled");e.addEventListener("click",a)})})()}})();
|
||||||
@ -5,7 +5,7 @@
|
|||||||
"activity-apis.min.js": "459D26DB0BB447FEFE6F1842541A119E67C63573A800E56AD7FEC71D20087CEF",
|
"activity-apis.min.js": "459D26DB0BB447FEFE6F1842541A119E67C63573A800E56AD7FEC71D20087CEF",
|
||||||
"activity-image-saver.min.js": "4117EDC0D59C15461083B2EB56F5061DCABAA5EA9699C438DD0E221FEAAFA8B3",
|
"activity-image-saver.min.js": "4117EDC0D59C15461083B2EB56F5061DCABAA5EA9699C438DD0E221FEAAFA8B3",
|
||||||
"airborne.min.css": "2224FDD07845BD008E193B5E575B14243B27F3E151B46DF3D5D66270154E8278",
|
"airborne.min.css": "2224FDD07845BD008E193B5E575B14243B27F3E151B46DF3D5D66270154E8278",
|
||||||
"airborne.min.js": "A3BD8E5118C84685482320D81EBD707AE3A6DC4A66E676414E1C1F9DB7252604",
|
"airborne.min.js": "B5DB1737CB278F2556A99A25D47B4D85F6E48B1D600772658C68C436FCEB50FE",
|
||||||
"aria2-rpc-profile-item.vue.min.js": "61DCAD1D440E036B89C22E00C51C8357DBB529612CB428D55C3804410D2AD059",
|
"aria2-rpc-profile-item.vue.min.js": "61DCAD1D440E036B89C22E00C51C8357DBB529612CB428D55C3804410D2AD059",
|
||||||
"aria2-rpc-profiles.vue.min.js": "CBF3D159566A694BC543EAB5B9E743A13B571743EBDDB8C558AE036483E3AF5A",
|
"aria2-rpc-profiles.vue.min.js": "CBF3D159566A694BC543EAB5B9E743A13B571743EBDDB8C558AE036483E3AF5A",
|
||||||
"aria2-rpc.min.js": "133AE00F1BD5C68E52385D170FA2983A7A82F0326D8C42C4E3CDA14ED4F3626F",
|
"aria2-rpc.min.js": "133AE00F1BD5C68E52385D170FA2983A7A82F0326D8C42C4E3CDA14ED4F3626F",
|
||||||
@ -244,7 +244,7 @@
|
|||||||
"v-dropdown.vue.min.js": "BA1142E2D44CC9593DA803CAA76FA2B814CBD65D4D4210ABF00E811C361D8A37",
|
"v-dropdown.vue.min.js": "BA1142E2D44CC9593DA803CAA76FA2B814CBD65D4D4210ABF00E811C361D8A37",
|
||||||
"video-card-info.min.js": "13B755C0EE0CA018AE65251E168BAF3395FEA2EB4FAD6949AADD752F61B8819B",
|
"video-card-info.min.js": "13B755C0EE0CA018AE65251E168BAF3395FEA2EB4FAD6949AADD752F61B8819B",
|
||||||
"video-card.vue.min.js": "E67A429519E70AB872B0EF8DB9B5A6992F0C474E98AAEC12468F41C982ABD9C5",
|
"video-card.vue.min.js": "E67A429519E70AB872B0EF8DB9B5A6992F0C474E98AAEC12468F41C982ABD9C5",
|
||||||
"video-danmaku.min.js": "EDCFEBA816E1F6AE0BC5719FC716F47790107F0AC7C405740154F7EB4419F90D",
|
"video-danmaku.min.js": "0187BB3692752434D5C9C204D74744DD08884CA3A42C564A85084A60D899C3B7",
|
||||||
"video-dash.min.js": "DD85855581048237B51B2BD6BFEAFB993172DA7DF8E2B0CFEBCF449FDB82F6A6",
|
"video-dash.min.js": "DD85855581048237B51B2BD6BFEAFB993172DA7DF8E2B0CFEBCF449FDB82F6A6",
|
||||||
"video-downloader-fragment.min.js": "13B755C0EE0CA018AE65251E168BAF3395FEA2EB4FAD6949AADD752F61B8819B",
|
"video-downloader-fragment.min.js": "13B755C0EE0CA018AE65251E168BAF3395FEA2EB4FAD6949AADD752F61B8819B",
|
||||||
"video-info.min.js": "99E06DD08BE4B3BA649B8E5C4F81078F83F852E1F43A16199CE67F65BC769AEE",
|
"video-info.min.js": "99E06DD08BE4B3BA649B8E5C4F81078F83F852E1F43A16199CE67F65BC769AEE",
|
||||||
|
|||||||
BIN
min/bundle.zip
BIN
min/bundle.zip
Binary file not shown.
2
min/video-danmaku.min.js
vendored
2
min/video-danmaku.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>{return(e,t)=>{let n;const r=[];const a=e=>{return{element:e,reuse:false,text:e.textContent||""}};const o=(e,t)=>{if(n){n.stop()}n=Observer.observe(e,e=>{e.forEach(e=>{if(e.type==="childList"){e.addedNodes.forEach(e=>{if(!(e instanceof HTMLElement)){return}const n=a(e);r.push(n);t.added&&t.added(n)});e.removedNodes.forEach(e=>{if(!(e instanceof HTMLElement)){return}const n=r.findIndex(t=>t.element===e);if(n!==-1){const[e]=r.splice(n,1);t.removed&&t.removed(e)}})}else if(e.type==="characterData"){const n=e.target;const a=r.find(e=>e.element===n);if(!a){return}a.text=n.textContent||"";a.reuse=true;t.added&&t.added(a)}})},{childList:true,characterData:true,subtree:true})};const d=async e=>{const t=await videoCondition();if(!t){return}Observer.videoChange(async()=>{const t=await SpinQuery.select(".bilibili-player-video-danmaku");if(!t){return}o(t,e)})};return{export:{forEachVideoDanmaku:d}}}})();
|
(()=>{return(e,t)=>{let n;const r=[];const o=e=>{return{element:e,reuse:false,text:e.textContent||""}};const d=(e,t)=>{if(n){n.stop()}n=Observer.observe(e,e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{if(e.nodeType===Node.TEXT_NODE){const n=e.parentElement;const o=r.find(e=>e.element===n);if(!o){return}o.text=e.textContent||"";o.reuse=true;t.added&&t.added(o);return}if(!(e instanceof HTMLElement)){return}const n=o(e);r.push(n);t.added&&t.added(n)});e.removedNodes.forEach(e=>{if(!(e instanceof HTMLElement)){return}const n=r.findIndex(t=>t.element===e);if(n!==-1){const[e]=r.splice(n,1);t.removed&&t.removed(e)}})})},{childList:true,subtree:true})};const s=async e=>{const t=await videoCondition();if(!t){return}Observer.videoChange(async()=>{const t=await SpinQuery.select(".bilibili-player-video-danmaku");if(!t){return}d(t,e)})};return{export:{forEachVideoDanmaku:s}}}})();
|
||||||
@ -10,7 +10,7 @@ import { DanmakuRecord } from '../video-danmaku'
|
|||||||
if (!text) {
|
if (!text) {
|
||||||
return NaN
|
return NaN
|
||||||
}
|
}
|
||||||
const airborneMatch = text.match(/(\d+)[::.](\d+)([::](\d+))?/)
|
const airborneMatch = text.match(/(\d+)[ ]*[::.][ ]*(\d+)([ ]*[::][ ]*(\d+))?/)
|
||||||
if (!airborneMatch) {
|
if (!airborneMatch) {
|
||||||
return NaN
|
return NaN
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,8 +22,18 @@ const startRecording = (container: HTMLElement, callback: DanmakuRecordCallback)
|
|||||||
}
|
}
|
||||||
danmakuContainerObserver = Observer.observe(container, records => {
|
danmakuContainerObserver = Observer.observe(container, records => {
|
||||||
records.forEach(record => {
|
records.forEach(record => {
|
||||||
if (record.type === 'childList') {
|
|
||||||
record.addedNodes.forEach(node => {
|
record.addedNodes.forEach(node => {
|
||||||
|
if (node.nodeType === Node.TEXT_NODE) {
|
||||||
|
const element = node.parentElement as HTMLElement
|
||||||
|
const danmaku = recordedDanmakus.find(d => d.element === element)
|
||||||
|
if (!danmaku) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
danmaku.text = node.textContent || ''
|
||||||
|
danmaku.reuse = true
|
||||||
|
callback.added && callback.added(danmaku)
|
||||||
|
return
|
||||||
|
}
|
||||||
if (!(node instanceof HTMLElement)) {
|
if (!(node instanceof HTMLElement)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -41,18 +51,8 @@ const startRecording = (container: HTMLElement, callback: DanmakuRecordCallback)
|
|||||||
callback.removed && callback.removed(danmaku)
|
callback.removed && callback.removed(danmaku)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else if (record.type === 'characterData') {
|
|
||||||
const element = record.target as HTMLElement
|
|
||||||
const danmaku = recordedDanmakus.find(d => d.element === element)
|
|
||||||
if (!danmaku) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
danmaku.text = element.textContent || ''
|
|
||||||
danmaku.reuse = true
|
|
||||||
callback.added && callback.added(danmaku)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}, { childList: true, characterData: true, subtree: true })
|
}, { childList: true, subtree: true })
|
||||||
}
|
}
|
||||||
export const forEachVideoDanmaku = async (callback: DanmakuRecordCallback) => {
|
export const forEachVideoDanmaku = async (callback: DanmakuRecordCallback) => {
|
||||||
const hasVideo = await videoCondition()
|
const hasVideo = await videoCondition()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user