Bilibili-Evolved/min/keymap.min.js
2020-07-04 10:38:24 +08:00

1 line
4.9 KiB
JavaScript

(()=>{return(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=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",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, .play-options-ul > li:nth-child(2)",s:".video-toolbar .collect, .video-toolbar-module .fav-box, .play-options-ul > li:nth-child(3)"," ":".bilibili-player-video-btn-start"};let a=true;let l=false;const o=document.URL.startsWith("https://www.bilibili.com/watchlater/");const s=document.URL.startsWith("https://www.bilibili.com/medialist/play/");if(o){Observer.videoChange(()=>{Ajax.getJsonWithCredentials(`https://api.bilibili.com/x/web-interface/archive/has/like?aid=${unsafeWindow.aid}`).then(e=>{l=Boolean(e.data)})})}let c;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(c){clearTimeout(c)}dq(".keymap-playback-tip-container").classList.add("show");c=setTimeout(()=>{dq(".keymap-playback-tip-container").classList.remove("show")},2e3)};document.body.addEventListener("keydown",i=>{if(!n){return}if(o&&document.URL.endsWith("list")){return}if(document.activeElement&&["input","textarea"].includes(document.activeElement.nodeName.toLowerCase())){return}const c=i.key.toLowerCase();const p=dq(".bilibili-player-sphere-control");if(p!==null&&p.style.display!=="none"&&["w","a","s","d"].includes(c)){return}const d=!i.shiftKey&&!i.altKey&&!i.ctrlKey&&!i.metaKey;if(c in t&&d){const e=dq(t[c]);if(!e){return}i.stopPropagation();i.preventDefault();e.click()}else if(c==="d"&&d){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(c==="j"&&d){const t=dq(".bilibili-player-video video");t.currentTime+=e.keymapJumpSeconds;i.stopPropagation();i.preventDefault()}else if(c==="l"&&d){if(o){const e={aid:unsafeWindow.aid,like:l?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(()=>{l=!l;if(l){Toast.success(`已点赞`,`快捷键扩展`,1e3)}else{Toast.success(`已取消点赞`,`快捷键扩展`,1e3)}})}else if(s){const e=dq(".play-options-ul > li:first-child");if(e){e.click()}}else{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(c==="`"&&d){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-176.65/2,clientY:i.y+i.height/2-194/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(c===">"||c==="ArrowUp".toLowerCase()){t.playbackRate=n.find(e=>e>t.playbackRate)||n[n.length-1];r(t.playbackRate)}else if(c==="<"||c==="ArrowDown".toLowerCase()){t.playbackRate=[...n].reverse().find(e=>e<t.playbackRate)||n[0];r(t.playbackRate)}else if(c==="?"){t.playbackRate=1;r(t.playbackRate)}else if(c==="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(c==="j"){t.currentTime-=e.keymapJumpSeconds}else if(c==="s"){const e=dq(".quick-favorite");if(e){e.click()}}else{a=false}if(a){i.stopPropagation();i.preventDefault()}}})}return{reload:()=>n=true,unload:()=>n=false}}})();