Bilibili-Evolved/min/keymap.min.js
2021-02-01 14:44:58 +08:00

1 line
5.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(()=>(e,i)=>{const t=["https://www.bilibili.com/bangumi/","https://www.bilibili.com/video/","https://www.bilibili.com/cheese/","https://www.bilibili.com/watchlater/","https://www.bilibili.com/medialist/play/"];let o;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()}};const n=e=>()=>{const i=dq(".bilibili-player-video video");if(!i){return}i.currentTime+=e};let a;const l=(e,t)=>{let o=dq(".keymap-tip");if(!o){const n=dq(".bilibili-player-video-wrap");if(!n){return}n.insertAdjacentHTML("afterbegin",`\n<div class="keymap-tip-container">\n<i class="keymap-tip-icon mdi ${t}"></i>\n<div class="keymap-tip">${e}</div>\n</div>\n`);i.applyStyleFromText(`\n .keymap-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-tip-container.show {\n opacity: 1;\n }\n .keymap-tip-container i {\n line-height: 1;\n margin-right: 8px;\n font-size: 18pt;\n }\n`,"keymapStyle");o=dq(".keymap-tip")}o.innerHTML=e;const n=dq(".keymap-tip-container");const l=dq(n,".mdi");l.classList.remove(...l.classList.values());l.classList.add("mdi",t);if(a){clearTimeout(a)}n.classList.add("show");a=window.setTimeout((()=>{n.classList.remove("show")}),2e3)};const s=e=>async()=>{const{VideoSpeedController:t}=await i.importAsync("video-speed-controller");const o=await t.getInstance();e(o,t.supportedRates);l(`${o.playbackRate}x`,"mdi-fast-forward")};const r={fullscreen:t(".bilibili-player-video-btn-fullscreen"),webFullscreen:t(".bilibili-player-video-web-fullscreen"),wideScreen:t(".bilibili-player-video-btn-widescreen"),volumeUp:()=>{const e=unsafeWindow.player.volume();unsafeWindow.player.volume(e+.1);l(`${Math.round(unsafeWindow.player.volume()*100)}%`,"mdi-volume-high")},volumeDown:()=>{const e=unsafeWindow.player.volume();unsafeWindow.player.volume(e-.1);const i=Math.round(unsafeWindow.player.volume()*100);if(i===0){l("静音","mdi-volume-off")}else{l(`${i}%`,"mdi-volume-high")}},mute:()=>{t(".bilibili-player-video-btn-volume .bilibili-player-iconfont-volume")();const e=unsafeWindow.player.isMute();if(e){l("已静音","mdi-volume-off")}else{l("已取消静音","mdi-volume-high")}},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;return({isWatchlater:i,isMediaList:t,event:o})=>{if(t||i){const e=dq(".play-options-ul > li:first-child");if(e){e.click()}}else{const i=dq(".video-toolbar .like, .tool-bar .like-info");o.preventDefault();const t=(e,t)=>{const o=new CustomEvent(e,t);i.dispatchEvent(o)};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:n(-e.keymapJumpSeconds),longJumpForward:n(e.keymapJumpSeconds),jumpBackward:n(-5),jumpForward:n(5),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:s(((e,i)=>{e.setVideoSpeed(i.find((i=>i>e.playbackRate))||i[i.length-1])})),videoSpeedDecrease:s(((e,i)=>{e.setVideoSpeed([...i].reverse().find((i=>i<e.playbackRate))||i[0])})),videoSpeedReset:s((e=>{e.toggleVideoSpeed()})),videoSpeedForget:s((e=>{e.reset(true)})),takeScreenshot:t(".video-take-screenshot"),previousFrame:t(".prev-frame"),nextFrame:t(".next-frame"),seekBegin:()=>{if(!unsafeWindow.player){return}unsafeWindow.player.play();setTimeout((()=>{unsafeWindow.player.seek(0);const e=dq(".bilibili-player-video-toast-bottom .bilibili-player-video-toast-item:first-child .bilibili-player-video-toast-item-text span:nth-child(2)");if(e){e.textContent=" 00:00"}}))}};const d={fullscreen:"f",webFullscreen:"w",wideScreen:"t",volumeUp:"arrowUp",volumeDown:"arrowDown",mute:"m",pictureInPicture:"p",coin:"c",favorite:"s",pause:"space",like:"l",playerMenu:"`",longJumpForward:"j",longJumpBackward:"shift j",jumpBackward:"arrowLeft",jumpForward:"arrowRight",watchlater:"shift w",quickFavorite:"shift s",danmaku:"d",videoSpeedIncrease:"shift > 》 arrowUp",videoSpeedDecrease:"shift < 《 arrowDown",videoSpeedReset:"shift ? ",videoSpeedForget:"shift :",takeScreenshot:"ctrl alt c",previousFrame:"shift arrowLeft",nextFrame:"shift arrowRight",seekBegin:"0"};const c=e=>Object.entries(e).map((([e,i])=>{const t=i.split(" ");return{keys:t,action:r[e]||(()=>{})}}));(async()=>{const{loadKeyBindings:t}=await i.importAsync("key-bindings");o=t(c({...d,...e.customKeyBindings}))})()}return{reload:()=>o&&(o.enable=true),unload:()=>o&&(o.enable=false)}})();