Bilibili-Evolved/min/keymap.min.js
2020-12-22 22:54:09 +08:00

1 line
5.0 KiB
JavaScript

(()=>(e,i)=>{const t=["https://www.bilibili.com/bangumi/","https://www.bilibili.com/video/","https://www.bilibili.com/watchlater/","https://www.bilibili.com/medialist/play/"];let n;if(t.some((e=>document.URL.startsWith(e)))){const t=e=>()=>{if(typeof e==="string"){var i;(i=dq(e))===null||i===void 0?void 0:i.click()}else{e.click()}};let a;const o=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(a){clearTimeout(a)}dq(".keymap-playback-tip-container").classList.add("show");a=window.setTimeout((()=>{dq(".keymap-playback-tip-container").classList.remove("show")}),2e3)};const l=e=>async()=>{const t=await i.importAsync("default-video-speed");console.log(t);const{VideoSpeedController:n}=await i.importAsync("default-video-speed");const a=dq(`.${n.classNameMap.speedContainer}`);const l=dq(`.${n.classNameMap.video} video`);if(!a||!l){return}const s=new n(a,l,1);e(s,n.supportedRates);o(s.playbackRate)};const s={fullscreen:t(".bilibili-player-video-btn-fullscreen"),webFullscreen:t(".bilibili-player-video-web-fullscreen"),wideScreen:t(".bilibili-player-video-btn-widescreen"),mute:t(".bilibili-player-video-btn-volume .bilibili-player-iconfont-volume"),pictureInPicture:t(".bilibili-player-video-btn-pip"),coin:t(".video-toolbar .coin,.tool-bar .coin-info, .video-toolbar-module .coin-box, .play-options-ul > li:nth-child(2)"),favorite:t(".video-toolbar .collect, .video-toolbar-module .fav-box, .play-options-ul > li:nth-child(3)"),pause:t(".bilibili-player-video-btn-start"),like:(()=>{let e=true;let i=false;const t=_.once((()=>{Observer.videoChange((()=>{Ajax.getJsonWithCredentials(`https://api.bilibili.com/x/web-interface/archive/has/like?aid=${unsafeWindow.aid}`).then((e=>{i=Boolean(e.data)}))}))}));return({isWatchlater:n,isMediaList:a,event:o})=>{if(n){t();const e={aid:unsafeWindow.aid,like:i?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((()=>{i=!i;if(i){Toast.success(`已点赞`,`快捷键扩展`,1e3)}else{Toast.success(`已取消点赞`,`快捷键扩展`,1e3)}}))}else if(a){const e=dq(".play-options-ul > li:first-child");if(e){e.click()}}else{const i=dq(".video-toolbar .like");o.preventDefault();const t=(e,t)=>{const n=new CustomEvent(e,t);i.dispatchEvent(n)};e=true;setTimeout((()=>e=false),200);t("mousedown",o);document.body.addEventListener("keyup",(i=>{i.preventDefault();t("mouseup",i);if(e){t("click",i)}}),{once:true})}}})(),danmaku:()=>{const e=dq(".bilibili-player-video-danmaku-switch input");if(!e){return}e.checked=!e.checked;raiseEvent(e,"change")},longJumpBackward:()=>{const i=dq(".bilibili-player-video video");i.currentTime-=e.keymapJumpSeconds},longJumpForward:()=>{const i=dq(".bilibili-player-video video");i.currentTime+=e.keymapJumpSeconds},playerMenu:()=>{const e=dq(".bilibili-player-video-wrap");if(!e){return}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-176.65/2,clientY:i.y+i.height/2-194/2}))},watchlater:t(".video-toolbar .ops .watchlater, .more-ops-list .ops-watch-later, .video-toolbar-module .see-later-box"),quickFavorite:t(".quick-favorite"),videoSpeedIncrease:l(((e,i)=>{e.setVideoSpeed(i.find((i=>i>e.playbackRate))||i[i.length-1])})),videoSpeedDecrease:l(((e,i)=>{e.setVideoSpeed([...i].reverse().find((i=>i<e.playbackRate))||i[0])})),videoSpeedReset:l(((e,i)=>{e.reset()}))};const c={fullscreen:"f",webFullscreen:"w",wideScreen:"t",mute:"m",pictureInPicture:"p",coin:"c",favorite:"s",pause:"space",like:"l",playerMenu:"`",longJumpForward:"j",longJumpBackward:"shift j",watchlater:"shift w",quickFavorite:"shift s",danmaku:"d",videoSpeedIncrease:"shift > ArrowUp",videoSpeedDecrease:"shift < ArrowDown",videoSpeedReset:"shift ?"};const r=e=>Object.entries(e).map((([e,i])=>{const t=i.split(" ");return{keys:t,action:s[e]||(()=>{})}}));(async()=>{const{loadKeyBindings:t}=await i.importAsync("key-bindings");n=t(r({...c,...e.customKeyBindings}))})()}return{reload:()=>n&&(n.enable=true),unload:()=>n&&(n.enable=false)}})();