Add old watchlater support

- dark styles
- keymap
This commit is contained in:
the1812 2020-05-16 14:27:40 +08:00
parent bd153b69b7
commit c16d14201e
11 changed files with 83 additions and 49 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

@ -54,13 +54,12 @@
"custom-navbar-video-list.min.js": "08D6713144E910C1303CB610A5890A5663B92BE82630BDA3C8E6299FB4A429E2",
"custom-navbar-watchlater-list.min.js": "57EA2C62F7442750BB177B9898CF07BA61C45F0FD99737516ED609051699B054",
"danmaku-converter.min.js": "6C844406F060DCF2483F9CC4C7329911ED77BC77097F2BC5B925B6F12C990820",
"dark.min.css": "9B13589C9A72DFEEF33E6170F65C8420330D4C53B97D43AC8FE50F304609D390",
"dark.user.css": "7854B0AFA31668D11291DECC820214B53108439286871645852C6D0AE0900316",
"dark.min.css": "46D137FB18CF84CCEE83511308C6CB0B59EA0EEB4628180205EDFB5B2294CF81",
"dark.user.css": "71B7B1A60059149D1F96FB92F7F4ADAB120999DA9348B46CDA089BC2882E83F4",
"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": "0ECA7B7E317F42005F64EB10C47EA57A092DA3970F6B88439114FBDA2F4F6712",
"dark-styles.min.js": "74E6D655F88E50A27D60F189554F6656CCD2A6EA2686FD9946CA9A89EABF7719",
"debounce.min.js": "54D33E1273C1F3FE19550BF1844339C3D54D6B01DF8A39C3162D95B93B079CFA",
"default-danmaku-settings.min.css": "D9942B184FEDA7B08CFA0C34920E97D7A83B81762DCBF757642EBB60F95FF25D",
@ -136,7 +135,7 @@
"image-viewer.min.css": "0CF849C6546AEBD2E7EB42F42368BC87B95536840F8A364413DB9A6E37AF5EA8",
"image-viewer.min.html": "763742E79923A7918F281AEBB3CEE76FE2A0AE94CACE325AE4BEE1AED451DAEA",
"index.min.html": "94B83D9EBB9005C1286A7E0759A7683932F8DADA20D07E5E9D8FF867B04D4B95",
"keymap.min.js": "7645CAC3AD71EB78349619C3513FCC70CDDCD6C389D7F91FD4E5B3D9C925366A",
"keymap.min.js": "94C4B883AA71185E9D13FD815C9DFC637D59FD95422E61CF0A57AA2F303F6936",
"live-pip.min.js": "04169E2F2E7462846D82EA119D740B18A59A3BF009DA5A4BAB70293AEF9C0E26",
"live-socket.min.js": "8C59B0458D14FBA9233847F18D82F3DAA558A0DA432B63409050C1A27D871C51",
"magic-grid.min.js": "30BA27115FAC84B018A5A8C64031939DF1E324AE199F2F3675925ECF427CBFFC",

Binary file not shown.

2
min/dark.min.css vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
min/keymap.min.js vendored
View File

@ -1 +1 @@
(()=>{return(e,i)=>{const t=["https://www.bilibili.com/bangumi/","https://www.bilibili.com/video/"];let n=true;if(t.some(e=>document.URL.startsWith(e))){const t={f:".bilibili-player-video-fullscreen",w:".bilibili-player-video-web-fullscreen",t:".bilibili-player-video-btn-widescreen",r:".bilibili-player-video-btn-repeat",m:".bilibili-player-video-btn-volume .bilibili-player-iconfont-volume",p:".bilibili-player-video-btn-pip",c:".video-toolbar .coin,.tool-bar .coin-info",s:".video-toolbar .collect"," ":".bilibili-player-video-btn-start"};let a=true;let o;const l=e=>{let t=dq(".keymap-playback-tip");if(!t){const e=dq(".bilibili-player-video-wrap");if(!e){return}e.insertAdjacentHTML("afterbegin",`\n<div class="keymap-playback-tip-container">\n<i class="mdi mdi-fast-forward"></i>\n<div class="keymap-playback-tip"></div>x\n</div>\n`);i.applyStyleFromText(`\n .keymap-playback-tip-container {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n padding: 8px 16px;\n background-color: #000A;\n color: white;\n pointer-events: none;\n opacity: 0;\n z-index: 100;\n display: flex;\n align-items: center;\n font-size: 14pt;\n border-radius: 4px;\n transition: .2s ease-out;\n }\n .keymap-playback-tip-container.show {\n opacity: 1;\n }\n .keymap-playback-tip-container i {\n line-height: 1;\n margin-right: 8px;\n font-size: 18pt;\n }\n`,"keymapStyle");t=dq(".keymap-playback-tip")}t.innerHTML=e.toString();if(o){clearTimeout(o)}dq(".keymap-playback-tip-container").classList.add("show");o=setTimeout(()=>{dq(".keymap-playback-tip-container").classList.remove("show")},2e3)};document.body.addEventListener("keydown",i=>{if(!n){return}if(document.activeElement&&["input","textarea"].includes(document.activeElement.nodeName.toLowerCase())){return}const o=i.key.toLowerCase();const r=!i.shiftKey&&!i.altKey&&!i.ctrlKey&&!i.metaKey;if(o in t&&r){const e=dq(t[o]);if(!e){return}i.stopPropagation();i.preventDefault();e.click()}else if(o==="d"&&r){const e=dq(".bilibili-player-video-danmaku-switch input");if(!e){return}i.stopPropagation();i.preventDefault();e.checked=!e.checked;raiseEvent(e,"change")}else if(o==="j"&&r){const t=dq(".bilibili-player-video video");t.currentTime+=e.keymapJumpSeconds;i.stopPropagation();i.preventDefault()}else if(o==="l"&&r){const e=dq(".video-toolbar .like");i.preventDefault();const t=(i,t)=>{const n=new CustomEvent(i,t);e.dispatchEvent(n)};a=true;setTimeout(()=>a=false,200);t("mousedown",i);document.body.addEventListener("keyup",e=>{e.preventDefault();t("mouseup",e);if(a){t("click",e)}},{once:true})}else if(o==="`"&&r){const e=dq(".bilibili-player-video-wrap");const i=e.getBoundingClientRect();e.dispatchEvent(new MouseEvent("contextmenu",{bubbles:true,cancelable:false,view:unsafeWindow,button:2,buttons:0,clientX:i.x+i.width/2-386.6/2,clientY:i.y+i.height/2-311/2}))}else if(i.shiftKey){const t=dq(".bilibili-player-video video");if(t===null){return}const n=[.5,.75,1,1.25,1.5,2,2.5,3];let a=true;if(o===">"||o==="ArrowUp".toLowerCase()){t.playbackRate=n.find(e=>e>t.playbackRate)||n[n.length-1];l(t.playbackRate)}else if(o==="<"||o==="ArrowDown".toLowerCase()){t.playbackRate=[...n].reverse().find(e=>e<t.playbackRate)||n[0];l(t.playbackRate)}else if(o==="?"){t.playbackRate=1;l(t.playbackRate)}else if(o==="w"){const e=dq(".video-toolbar .ops .watchlater,.more-ops-list .ops-watch-later");if(e!==null){e.click()}}else if(o==="j"){t.currentTime-=e.keymapJumpSeconds}else{a=false}if(a){i.stopPropagation();i.preventDefault()}}})}return{reload:()=>n=true,unload:()=>n=false}}})();
(()=>{return(e,i)=>{const t=["https://www.bilibili.com/bangumi/","https://www.bilibili.com/video/","https://www.bilibili.com/watchlater/"];let a=true;if(t.some(e=>document.URL.startsWith(e))){console.log("keymap");const t={f:".bilibili-player-video-fullscreen",w:".bilibili-player-video-web-fullscreen",t:".bilibili-player-video-btn-widescreen",r:".bilibili-player-video-btn-repeat",m:".bilibili-player-video-btn-volume .bilibili-player-iconfont-volume",p:".bilibili-player-video-btn-pip",c:".video-toolbar .coin,.tool-bar .coin-info, .video-toolbar-module .coin-box",s:".video-toolbar .collect, .video-toolbar-module .fav-box"," ":".bilibili-player-video-btn-start"};let n=true;let o=false;const l=document.URL.startsWith("https://www.bilibili.com/watchlater/");if(l){Observer.videoChange(()=>{Ajax.getJsonWithCredentials(`https://api.bilibili.com/x/web-interface/archive/has/like?aid=${unsafeWindow.aid}`).then(e=>{o=Boolean(e.data)})})}let s;const r=e=>{let t=dq(".keymap-playback-tip");if(!t){const e=dq(".bilibili-player-video-wrap");if(!e){return}e.insertAdjacentHTML("afterbegin",`\n<div class="keymap-playback-tip-container">\n<i class="mdi mdi-fast-forward"></i>\n<div class="keymap-playback-tip"></div>x\n</div>\n`);i.applyStyleFromText(`\n .keymap-playback-tip-container {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n padding: 8px 16px;\n background-color: #000A;\n color: white;\n pointer-events: none;\n opacity: 0;\n z-index: 100;\n display: flex;\n align-items: center;\n font-size: 14pt;\n border-radius: 4px;\n transition: .2s ease-out;\n }\n .keymap-playback-tip-container.show {\n opacity: 1;\n }\n .keymap-playback-tip-container i {\n line-height: 1;\n margin-right: 8px;\n font-size: 18pt;\n }\n`,"keymapStyle");t=dq(".keymap-playback-tip")}t.innerHTML=e.toString();if(s){clearTimeout(s)}dq(".keymap-playback-tip-container").classList.add("show");s=setTimeout(()=>{dq(".keymap-playback-tip-container").classList.remove("show")},2e3)};document.body.addEventListener("keydown",i=>{if(!a){return}if(l&&document.URL.endsWith("list")){return}if(document.activeElement&&["input","textarea"].includes(document.activeElement.nodeName.toLowerCase())){return}const s=i.key.toLowerCase();const c=!i.shiftKey&&!i.altKey&&!i.ctrlKey&&!i.metaKey;if(s in t&&c){const e=dq(t[s]);if(!e){return}i.stopPropagation();i.preventDefault();e.click()}else if(s==="d"&&c){const e=dq(".bilibili-player-video-danmaku-switch input");if(!e){return}i.stopPropagation();i.preventDefault();e.checked=!e.checked;raiseEvent(e,"change")}else if(s==="j"&&c){const t=dq(".bilibili-player-video video");t.currentTime+=e.keymapJumpSeconds;i.stopPropagation();i.preventDefault()}else if(s==="l"&&c){if(l){const e={aid:unsafeWindow.aid,like:o?2:1,csrf:getCsrf()};Ajax.postTextWithCredentials(`https://api.bilibili.com/x/web-interface/archive/like`,Object.entries(e).map(([e,i])=>`${e}=${i}`).join("&")).then(()=>{o=!o;if(o){Toast.success(`已点赞`,`快捷键扩展`,1e3)}else{Toast.success(`已取消点赞`,`快捷键扩展`,1e3)}})}else{const e=dq(".video-toolbar .like");i.preventDefault();const t=(i,t)=>{const a=new CustomEvent(i,t);e.dispatchEvent(a)};n=true;setTimeout(()=>n=false,200);t("mousedown",i);document.body.addEventListener("keyup",e=>{e.preventDefault();t("mouseup",e);if(n){t("click",e)}},{once:true})}}else if(s==="`"&&c){const e=dq(".bilibili-player-video-wrap");const i=e.getBoundingClientRect();e.dispatchEvent(new MouseEvent("contextmenu",{bubbles:true,cancelable:false,view:unsafeWindow,button:2,buttons:0,clientX:i.x+i.width/2-386.6/2,clientY:i.y+i.height/2-311/2}))}else if(i.shiftKey){const t=dq(".bilibili-player-video video");if(t===null){return}const a=[.5,.75,1,1.25,1.5,2,2.5,3];let n=true;if(s===">"||s==="ArrowUp".toLowerCase()){t.playbackRate=a.find(e=>e>t.playbackRate)||a[a.length-1];r(t.playbackRate)}else if(s==="<"||s==="ArrowDown".toLowerCase()){t.playbackRate=[...a].reverse().find(e=>e<t.playbackRate)||a[0];r(t.playbackRate)}else if(s==="?"){t.playbackRate=1;r(t.playbackRate)}else if(s==="w"){const e=dq(".video-toolbar .ops .watchlater, .more-ops-list .ops-watch-later, .video-toolbar-module .see-later-box");if(e!==null){e.click()}}else if(s==="j"){t.currentTime-=e.keymapJumpSeconds}else{n=false}if(n){i.stopPropagation();i.preventDefault()}}})}return{reload:()=>a=true,unload:()=>a=false}}})();

View File

@ -273,7 +273,8 @@
.comment-bilibili-fold .comment-list .list-item .blacklist-font-color,
.list-item .publish-time,
.share-content .video-card .up-info .tip,
.live-panel .title .count {
.live-panel .title .count,
.video-desc .reprint {
@include color("a");
}
#biliAppHomeSetting {

View File

@ -1,9 +1,11 @@
const supportedUrls = [
'https://www.bilibili.com/bangumi/',
'https://www.bilibili.com/video/',
'https://www.bilibili.com/watchlater/',
]
let enabled = true
if (supportedUrls.some(url => document.URL.startsWith(url))) {
console.log('keymap')
const clickableKeymap = {
f: '.bilibili-player-video-fullscreen', // 全屏
w: '.bilibili-player-video-web-fullscreen', // 网页全屏
@ -12,12 +14,28 @@ if (supportedUrls.some(url => document.URL.startsWith(url))) {
m: '.bilibili-player-video-btn-volume .bilibili-player-iconfont-volume', // 切换静音
p: '.bilibili-player-video-btn-pip', // 画中画
// l: '.video-toolbar .like', // 点赞
c: '.video-toolbar .coin,.tool-bar .coin-info', // 投币
s: '.video-toolbar .collect', // 收藏
c: '.video-toolbar .coin,.tool-bar .coin-info, .video-toolbar-module .coin-box', // 投币
s: '.video-toolbar .collect, .video-toolbar-module .fav-box', // 收藏
' ': '.bilibili-player-video-btn-start', // 砸瓦撸多
} as { [key: string]: string }
/** 长按`L`三连使用的记忆变量 */
let likeClick = true
/** 在稍后再看页面里, 记录当前视频是否赞过 */
let liked = false
const isWatchlater = document.URL.startsWith('https://www.bilibili.com/watchlater/')
if (isWatchlater) {
Observer.videoChange(() => {
Ajax.getJsonWithCredentials(`https://api.bilibili.com/x/web-interface/archive/has/like?aid=${unsafeWindow.aid}`).then(json => {
liked = Boolean(json.data)
})
})
}
/** 播放速度提示框用的`setTimeout`句柄 */
let showPlaybackTipOldTimeout: number
/**
*
* @param speed
*/
const showPlaybackTip = (speed: number) => {
let tip = dq('.keymap-playback-tip') as HTMLDivElement
if (!tip) {
@ -73,6 +91,9 @@ if (supportedUrls.some(url => document.URL.startsWith(url))) {
if (!enabled) {
return
}
if (isWatchlater && document.URL.endsWith('list')) {
return
}
if (document.activeElement && ["input", "textarea"].includes(document.activeElement.nodeName.toLowerCase())) {
return
}
@ -101,22 +122,39 @@ if (supportedUrls.some(url => document.URL.startsWith(url))) {
e.stopPropagation()
e.preventDefault()
} else if (key === 'l' && noModifyKeys) {
const likeButton = dq('.video-toolbar .like') as HTMLSpanElement
e.preventDefault()
const fireEvent = (name: string, args: Event) => {
const event = new CustomEvent(name, args)
likeButton.dispatchEvent(event)
}
likeClick = true
setTimeout(() => likeClick = false, 200)
fireEvent('mousedown', e)
document.body.addEventListener('keyup', e => {
e.preventDefault()
fireEvent('mouseup', e)
if (likeClick) {
fireEvent('click', e)
if (isWatchlater) {
const formData = {
aid: unsafeWindow.aid,
/** `1`点赞; `2`取消赞 */
like: liked ? 2 : 1,
csrf: getCsrf(),
}
}, { once: true })
Ajax.postTextWithCredentials(`https://api.bilibili.com/x/web-interface/archive/like`, Object.entries(formData).map(([k, v]) => `${k}=${v}`).join('&')).then(() => {
liked = !liked
if (liked) {
Toast.success(`已点赞`, `快捷键扩展`, 1000)
} else {
Toast.success(`已取消点赞`, `快捷键扩展`, 1000)
}
})
} else {
const likeButton = dq('.video-toolbar .like') as HTMLSpanElement
e.preventDefault()
const fireEvent = (name: string, args: Event) => {
const event = new CustomEvent(name, args)
likeButton.dispatchEvent(event)
}
likeClick = true
setTimeout(() => likeClick = false, 200)
fireEvent('mousedown', e)
document.body.addEventListener('keyup', e => {
e.preventDefault()
fireEvent('mouseup', e)
if (likeClick) {
fireEvent('click', e)
}
}, { once: true })
}
} else if (key === '`' && noModifyKeys) {
// menu size: 386.6 x 311 (2020-03-29)
const player = dq('.bilibili-player-video-wrap') as HTMLElement
@ -147,7 +185,7 @@ if (supportedUrls.some(url => document.URL.startsWith(url))) {
video.playbackRate = 1
showPlaybackTip(video.playbackRate)
} else if (key === 'w') { // 稍后再看
const watchlater = dq('.video-toolbar .ops .watchlater,.more-ops-list .ops-watch-later') as HTMLSpanElement
const watchlater = dq('.video-toolbar .ops .watchlater, .more-ops-list .ops-watch-later, .video-toolbar-module .see-later-box') as HTMLElement
if (watchlater !== null) {
watchlater.click()
}