mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
1 line
4.6 KiB
JavaScript
1 line
4.6 KiB
JavaScript
(()=>(e,t)=>{const i=["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;(async()=>{if(!i.some((e=>document.URL.startsWith(e)))){return}const{playerAgent:a}=await t.importAsync("player-agent");const n=e=>async({event:t})=>{const i=new MouseEvent("click",{..._.pick(t,"ctrlKey","shiftKey","altKey","metaKey")});if(typeof e==="string"){var o;(o=dq(e))===null||o===void 0?void 0:o.dispatchEvent(i)}else{const t=await e;t===null||t===void 0?void 0:t.dispatchEvent(i)}};const s=e=>async()=>a.changeTime(e);let r;const l=async(e,t)=>{let i=dq(".keymap-tip");if(!i){const o=await a.query.playerArea();if(!o){return}o.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=dq(".keymap-tip")}i.innerHTML=e;const o=dq(".keymap-tip-container");const n=dq(o,".mdi");n.classList.remove(...n.classList.values());n.classList.add("mdi",t);if(r){clearTimeout(r)}o.classList.add("show");r=window.setTimeout((()=>{o.classList.remove("show")}),2e3)};const c=e=>async()=>{const{VideoSpeedController:i}=await t.importAsync("video-speed-controller");const o=await i.getInstance();e(o,i.supportedRates);l(`${o.playbackRate}x`,"mdi-fast-forward")};const d={fullscreen:()=>a.fullscreen(),webFullscreen:()=>a.webFullscreen(),wideScreen:()=>a.widescreen(),volumeUp:async()=>{const e=await a.changeVolume(10);l(`${e}%`,"mdi-volume-high")},volumeDown:async()=>{const e=await a.changeVolume(-10);if(e===0){l("静音","mdi-volume-off")}else{l(`${e}%`,"mdi-volume-high")}},mute:async()=>{await a.toggleMute();const e=await a.isMute();if(e){l("已静音","mdi-volume-off")}else{l("已取消静音","mdi-volume-high")}},pictureInPicture:()=>a.togglePip(),coin:n(".video-toolbar .coin,.tool-bar .coin-info, .video-toolbar-module .coin-box, .play-options-ul > li:nth-child(2)"),favorite:n(".video-toolbar .collect, .video-toolbar-module .fav-box, .play-options-ul > li:nth-child(3)"),pause:()=>a.togglePlay(),like:(()=>{let e=true;return({event:t})=>{const i=dq(".video-toolbar .like, .tool-bar .like-info");t.preventDefault();const o=(e,t)=>{const o=new CustomEvent(e,t);i.dispatchEvent(o)};e=true;setTimeout((()=>e=false),200);o("mousedown",t);document.body.addEventListener("keyup",(t=>{t.preventDefault();o("mouseup",t);if(e){o("click",t)}}),{once:true})}})(),danmaku:()=>{a.toggleDanmaku()},longJumpBackward:s(-e.keymapJumpSeconds),longJumpForward:s(e.keymapJumpSeconds),jumpBackward:s(-5),jumpForward:s(5),playerMenu:async()=>{const e=await a.query.video.container();if(!e){return}const t=e.getBoundingClientRect();e.dispatchEvent(new MouseEvent("contextmenu",{bubbles:true,cancelable:false,view:unsafeWindow,button:2,buttons:0,clientX:t.x+t.width/2-176.65/2,clientY:t.y+t.height/2-194/2}))},watchlater:n(".video-toolbar .ops .watchlater, .more-ops-list .ops-watch-later, .video-toolbar-module .see-later-box"),quickFavorite:n(".quick-favorite"),videoSpeedIncrease:c(((e,t)=>{e.setVideoSpeed(t.find((t=>t>e.playbackRate))||t[t.length-1])})),videoSpeedDecrease:c(((e,t)=>{e.setVideoSpeed([...t].reverse().find((t=>t<e.playbackRate))||t[0])})),videoSpeedReset:c((e=>{e.toggleVideoSpeed()})),videoSpeedForget:c((e=>{e.reset(true)})),takeScreenshot:n(".video-take-screenshot"),previousFrame:n(".prev-frame"),nextFrame:n(".next-frame"),seekBegin:()=>a.seek(0)};const p={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 u=e=>Object.entries(e).map((([e,t])=>{const i=t.split(" ").filter((e=>e!==""));return{keys:i,action:d[e]||(()=>{})}}));const{loadKeyBindings:m}=await t.importAsync("key-bindings");const{presets:w}=await t.importAsync("key-binding-presets");addSettingsListener("keymapPreset",(()=>{const t=w[e.keymapPreset]||{};const i=u({...p,...t,...e.customKeyBindings});if(o){console.log("load preset",e.keymapPreset);o.bindings=i}else{o=m(i)}}),true);t.applyImportantStyle("keymapStyle")})();return{reload:()=>o&&(o.enable=true),unload:()=>o&&(o.enable=false)}})(); |