Bilibili-Evolved/min/keymap.min.js
2021-08-15 10:28:05 +08:00

1 line
5.5 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/","https://www.bilibili.com/festival/2021bnj"];let o=undefined;if(t.some((e=>document.URL.startsWith(e)))){const t=e=>({event:i})=>{const t=new MouseEvent("click",{..._.pick(i,"ctrlKey","shiftKey","altKey","metaKey")});if(typeof e==="string"){var o;(o=dq(e))===null||o===void 0?void 0:o.dispatchEvent(t)}else{e.dispatchEvent(t)}};const n=e=>()=>{const i=dq(".bilibili-player-video video");console.log(`[keymap] requested video time change, delta = ${e}`);if(!i){console.log("[keymap] video element not found");return}if(!unsafeWindow.player){console.log("[keymap] fallback");i.currentTime+=e;return}console.log("[keymap] player API seek");unsafeWindow.player.seek(i.currentTime+e,i.paused)};let a;const l=(e,i)=>{let t=dq(".keymap-tip");if(!t){const o=dq(".bilibili-player-video-wrap");if(!o){return}o.insertAdjacentHTML("afterbegin",`\n<div class="keymap-tip-container">\n<i class="keymap-tip-icon mdi ${i}"></i>\n<div class="keymap-tip">${e}</div>\n</div>\n`);t=dq(".keymap-tip")}t.innerHTML=e;const o=dq(".keymap-tip-container");const n=dq(o,".mdi");n.classList.remove(...n.classList.values());n.classList.add("mdi",i);if(a){clearTimeout(a)}o.classList.add("show");a=window.setTimeout((()=>{o.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:e=>{t(".bilibili-player-video-btn-volume .bilibili-player-iconfont-volume")(e);const i=unsafeWindow.player.isMute();if(i){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({event:i})=>{const t=dq(".video-toolbar .like, .tool-bar .like-info");i.preventDefault();const o=(e,i)=>{const o=new CustomEvent(e,i);t.dispatchEvent(o)};e=true;setTimeout((()=>e=false),200);o("mousedown",i);document.body.addEventListener("keyup",(i=>{i.preventDefault();o("mouseup",i);if(e){o("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 [shift] alt c",previousFrame:"shift arrowLeft",nextFrame:"shift arrowRight",seekBegin:"0"};const c=e=>Object.entries(e).map((([e,i])=>{const t=i.split(" ").filter((e=>e!==""));return{keys:t,action:r[e]||(()=>{})}}));(async()=>{const{loadKeyBindings:t}=await i.importAsync("key-bindings");const{presets:n}=await i.importAsync("key-binding-presets");addSettingsListener("keymapPreset",(()=>{const i=n[e.keymapPreset]||{};const a=c({...d,...i,...e.customKeyBindings});if(o){console.log("load preset",e.keymapPreset);o.bindings=a}else{o=t(a)}}),true);i.applyImportantStyle("keymapStyle")})()}return{reload:()=>o&&(o.enable=true),unload:()=>o&&(o.enable=false)}})();