From 26735abd6617f0a97e404c9e25a2281739fd1c96 Mon Sep 17 00:00:00 2001 From: the1812 Date: Tue, 21 Jan 2020 17:44:59 +0800 Subject: [PATCH] Fix not work after video change --- bilibili-evolved.offline.user.js | 4 +-- bilibili-evolved.preview-offline.user.js | 4 +-- bilibili-evolved.preview.user.js | 4 +-- bilibili-evolved.user.js | 4 +-- min/bundle.json | 4 +-- min/bundle.zip | Bin 1618871 -> 1618920 bytes min/default-video-speed.min.js | 2 +- min/double-click-fullscreen.min.js | 2 +- src/video/default-video-speed.ts | 7 ++-- src/video/double-click-fullscreen.ts | 44 ++++++++++++----------- 10 files changed, 37 insertions(+), 38 deletions(-) diff --git a/bilibili-evolved.offline.user.js b/bilibili-evolved.offline.user.js index 80ee4aa32..edf6e3d3c 100644 --- a/bilibili-evolved.offline.user.js +++ b/bilibili-evolved.offline.user.js @@ -1179,8 +1179,8 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-player-layout.min.js"] = (()=>{return(e,o)=>{class t{setCookie(e,o){document.cookie=`${e}=${o};path=/;domain=.bilibili.com;max-age=31536000`}clearCookie(e){document.cookie=`${e}=;path=/;domain=.bilibili.com;max-age=0`}getValue(e){return document.cookie.replace(new RegExp(`(?:(?:^|.*;\\s*)${e}\\s*\\=\\s*([^;]*).*$)|^.*$`),"$1")}checkSettings(){return e.useDefaultPlayerLayout}checkCookies(){}useNewLayout(){}useOldLayout(){}setLayout(e){if(e){this.useNewLayout()}else{this.useOldLayout()}}}class s extends t{checkCookies(){super.checkCookies();const o=this.getValue(this.cookieKey);if(o===""||parseInt(o)<0&&e.defaultPlayerLayout!=="旧版"){console.log(`default/old -> new`);this.useNewLayout()}else if(e.defaultPlayerLayout!=="新版"){console.log(`new -> old`);this.useOldLayout()}}constructor(){super();this.cookieKey="stardustvideo";this.checkCookies()}useNewLayout(){super.useNewLayout();this.setCookie(this.cookieKey,1)}useOldLayout(){super.useOldLayout();this.setCookie(this.cookieKey,-1)}}class u extends t{checkCookies(){super.checkCookies();const o=this.getValue(this.cookieKey);if(o===""||parseInt(o)<=0&&e.defaultBangumiLayout!=="旧版"){console.log(`default/old -> new`);this.useNewLayout()}else if(e.defaultBangumiLayout!=="新版"){console.log(`new -> old`);this.useOldLayout()}}constructor(){super();this.cookieKey="stardustpgcv";this.checkCookies()}useNewLayout(){super.useNewLayout();this.setCookie(this.cookieKey,"0606")}useOldLayout(){super.useOldLayout();this.setCookie(this.cookieKey,0)}}const i=new s;addSettingsListener("defaultPlayerLayout",e=>{i.setLayout(e==="新版")});const a=new u;addSettingsListener("defaultBangumiLayout",e=>{a.setLayout(e==="新版")})}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-player-mode.min.js"] = (()=>{return(e,i)=>{if(typeof isEmbeddedPlayer!=="undefined"&&isEmbeddedPlayer()){return}const n=[{name:"常规",action:()=>{}},{name:"宽屏",action:()=>{document.querySelector(".bilibili-player-video-btn-widescreen").click()}},{name:"网页全屏",action:()=>{document.querySelector(".bilibili-player-video-web-fullscreen").click()}},{name:"全屏",action:async()=>{const e=await SpinQuery.condition(()=>document.querySelector(".bilibili-player-video video"),e=>{return e!==null&&e.readyState===4&&document.readyState==="complete"&&document.hasFocus()});if(e===null){console.warn("[默认播放器模式] 未能应用全屏模式, 等待超时.");return}document.querySelector(".bilibili-player-video-btn-fullscreen").click()}}];let t=()=>{};let a=()=>{};async function l(){if(e.autoLightOff){await SpinQuery.unsafeJquery();const e=await SpinQuery.any(()=>unsafeWindow.$(".bilibili-player-video-btn-setting"));if(!e){return}e.mouseover().mouseout();const i=async e=>{const i=await SpinQuery.select(()=>document.querySelector(".bilibili-player-video-btn-setting-panel-others-content-lightoff .bui-checkbox-input"));i.checked=e;raiseEvent(i,"change")};t=(()=>i(true));a=(()=>i(false))}}async function o(){await l();await SpinQuery.condition(()=>$(".bilibili-player-video,.bilibili-player-video-btn-start,.bilibili-player-area"),e=>e.length===3&&$("video").length>0&&$("video").prop("duration"));const i=document.querySelector("video");if(!i){return}const o=n.find(i=>i.name===e.defaultPlayerMode);{const n=()=>{if(o&&$("#bilibiliPlayer[class*=mode-]").length===0){o.action()}};if(e.applyPlayerModeOnPlay&&!e.autoPlay){i.addEventListener("play",n,{once:true})}else{n()}if(!e.autoPlay){i.addEventListener("play",t,{once:true})}else{t()}i.addEventListener("ended",a,{once:true})}}Observer.videoChange(o)}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-video-quality.min.js"] = (()=>{return(e,a)=>{const t=[{name:"1080P60",value:116},{name:"1080P+",value:112},{name:"1080P",value:80},{name:"720P60",value:74},{name:"720P",value:64},{name:"480P",value:32},{name:"360P",value:15},{name:"自动",value:0}];async function i(){const a=await SpinQuery.any(()=>$(".bilibili-player-video-quality-menu .bui-select-list>li.bui-select-item"));if(!a){return}const i=(e,a)=>a-e;const[n]=a.toArray().map(e=>parseInt(e.getAttribute("data-value"))).sort(i);const[l]=t.filter(a=>a.name===e.defaultVideoQuality).map(e=>e.value).sort(i);const[r]=t.map(e=>e.value).filter(e=>e<=Math.min(l,n)).sort(i);const u=await SpinQuery.select(()=>document.querySelector("video"));function s(){a.each((e,a)=>{if(parseInt(a.getAttribute("data-value"))===r){a.click()}});this.removeEventListener("play",s)}u.addEventListener("play",s)}if(Observer.videoChange){Observer.videoChange(i)}else{Observer.childList("#bofqi",()=>i())}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-video-speed.min.js"] = (()=>{return(e,a)=>{const i=a=>{const i=parseFloat(e.defaultVideoSpeed);a.playbackRate=i;SpinQuery.condition(()=>a,()=>a.playbackRate!==i,()=>a.playbackRate=i)};Observer.videoChange(()=>{const e=dq(".bilibili-player-video video");if(!e){return}i(e)})}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/double-click-fullscreen.min.js"] = (()=>{return(i,e)=>{(async()=>{const e=["https://www.bilibili.com/bangumi/","https://www.bilibili.com/video/"];if(!e.some(i=>document.URL.startsWith(i))){return}if(i.touchVideoPlayer&&i.touchVideoPlayerDoubleTapControl){Toast.info("在开启了播放器触摸支持-启用双击控制后, 双击全屏功能将无效.","提示");i.doubleClickFullscreen=false;return}await SpinQuery.unsafeJquery();const l=await SpinQuery.condition(()=>dq(".bilibili-player-area"),i=>i!==null&&unsafeWindow.$(".bilibili-player-video").data("events"));if(l===null){return}const n="double-click-fullscreen";if(!l.classList.contains(n)){l.classList.add(n);const e=unsafeWindow.$(".bilibili-player-video");const t=i.doubleClickFullscreenPreventSingleClick?e.data("events").click[0].handler:()=>{};const c=new DoubleClickEvent(()=>dq(".bilibili-player-video-btn-fullscreen").click(),i=>t(i));if(i.doubleClickFullscreenPreventSingleClick){e.unbind("click")}c.bind(e[0])}})()}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-video-speed.min.js"] = (()=>{return(e,a)=>{const i=a=>{const i=parseFloat(e.defaultVideoSpeed);a.playbackRate=i;SpinQuery.condition(()=>a,()=>a.playbackRate!==i,()=>a.playbackRate=i)};Observer.videoChange(async()=>{const e=await SpinQuery.select(".bilibili-player-video video");i(e)})}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/double-click-fullscreen.min.js"] = (()=>{const i=["https://www.bilibili.com/bangumi/","https://www.bilibili.com/video/"];if(!i.some(i=>document.URL.startsWith(i))){return}if(settings.touchVideoPlayer&&settings.touchVideoPlayerDoubleTapControl){Toast.info("在开启了播放器触摸支持-启用双击控制后, 双击全屏功能将无效.","提示");settings.doubleClickFullscreen=false;return}Observer.videoChange(async()=>{await SpinQuery.unsafeJquery();const i=await SpinQuery.condition(()=>dq(".bilibili-player-area"),i=>i!==null&&unsafeWindow.$(".bilibili-player-video").data("events"));if(i===null){return}const e="double-click-fullscreen";if(!i.classList.contains(e)){i.classList.add(e);const l=unsafeWindow.$(".bilibili-player-video");const n=settings.doubleClickFullscreenPreventSingleClick?l.data("events").click[0].handler:()=>{};const s=new DoubleClickEvent(()=>dq(".bilibili-player-video-btn-fullscreen").click(),i=>n(i));if(settings.doubleClickFullscreenPreventSingleClick){l.unbind("click")}s.bind(l[0])}})})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-audio.min.js"] = (()=>{return(e,t)=>{class n{constructor(){this.sid=null;this.progress=null}async getDownloadUrl(){const e=`https://www.bilibili.com/audio/music-service-c/web/url?sid=${this.sid}&privilege=2&quality=2`;const t=await Ajax.getJsonWithCredentials(e);if(t.code===0){return t.data.cdns.shift()}else{logError("获取下载链接失败, 请确保当前账号有下载权限.","下载音频",1e4);return null}}async download(){const e=await this.getDownloadUrl();return new Promise((t,n)=>{const s=new XMLHttpRequest;s.open("GET",e);s.responseType="blob";s.addEventListener("load",()=>t(s.response));s.addEventListener("error",()=>n(s.status));s.addEventListener("progress",e=>this.progress&&this.progress(100*e.loaded/e.total));s.send()})}}const s="下载音频";return{export:n,widget:{content:`\n\n\n${s}\n\n`,condition:()=>document.URL.includes("bilibili.com/audio"),success:async()=>{await SpinQuery.select(()=>document.querySelector("#app"));const e=document.querySelector("#download-audio");const t=e.querySelector("span");const o=new n;o.progress=(e=>{t.innerHTML=`${Math.round(e)}%`});const i=document.querySelector("#download-audio-link");e.addEventListener("click",async e=>{if(o.sid===null||e.target===i){return}const n=await o.download();t.innerHTML=s;const r=i.getAttribute("href");if(r){URL.revokeObjectURL(r)}i.setAttribute("href",URL.createObjectURL(n));const d=(()=>{const e=document.querySelector(".song-title");if(e){return e.getAttribute("title")}else{return"神秘音频"}})();i.setAttribute("download",d+".m4a");i.click()});Observer.childList("#app",()=>{const t=document.URL.match(/bilibili\.com\/audio\/au([\d]+)/);if(t&&t[1]){e.disabled=false;o.sid=t[1]}else{e.disabled=true}})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-danmaku.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:n}=e.import("title");const{DanmakuInfo:i}=e.import("video-info");const{DanmakuConverter:a}=e.import("danmaku-converter");async function o(t){const e=n();let i={title:e};try{await loadDanmakuSettingsPanel();const t=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));return e*4/188};const e=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[e];return n};i.font=dq(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;i.alpha=parseFloat(dq(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));i.duration=(()=>{const e=18-3*t(".bilibili-player-setting-speedplus .bui-thumb");return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();i.blockTypes=(()=>{let t=[];const e={".bilibili-player-block-filter-type[ftype=scroll]":[1,2,3],".bilibili-player-block-filter-type[ftype=top]":[5],".bilibili-player-block-filter-type[ftype=bottom]":[4],".bilibili-player-block-filter-type[ftype=color]":["color"]};for(const[n,i]of Object.entries(e)){if(dq(n).classList.contains("disabled")){t=t.concat(i)}}return t.concat(7,8)})();const n=1.4-.2*t(".bilibili-player-setting-fontsize .bui-thumb");i.resolution={x:1920*n,y:1080*n};i.bottomMarginPercent=[.75,.5,.25,0,0][e(".bilibili-player-setting-area .bui-thumb")];if(i.bottomMarginPercent===0&&dq(".bilibili-player-video-danmaku-setting-left-preventshade input").checked){i.bottomMarginPercent=.15}i.bold=dq(".bilibili-player-video-danmaku-setting-right-font-bold input").checked}catch(t){i={font:"微软雅黑",alpha:.6,duration:t=>{switch(t.type){case 4:case 5:return 4;default:return 6}},blockTypes:[7,8],resolution:{x:1920,y:1080},bottomMarginPercent:.15,bold:false}}const o=new a(i);const l=o.convertToAssDocument(t);return l.generateAss()}async function l(t){const e=n();const a=new i((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(t===true){return new Blob([await o(a.rawXML)],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const s=dq("#danmaku-link");const c=s.getAttribute("href");if(c){URL.revokeObjectURL(c)}s.setAttribute("download",`${e}.${t?"ass":"xml"}`);s.setAttribute("href",r);s.click()}return{export:{downloadDanmaku:l,convertToAss:o},widget:{content:`\n\n\n下载弹幕\n\n`,condition:async()=>{let t=await SpinQuery.select(()=>(unsafeWindow||window).cid);return Boolean(t)},success:()=>{const t=dq("#danmaku-link");const e=dq("#download-danmaku");e.addEventListener("click",n=>{if(n.target!==t){try{e.disabled=true;l(n.shiftKey)}catch(t){logError(t)}finally{e.disabled=false}}})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-subtitle.min.js"] = (()=>{return(t,e)=>{let i;const o=(t,e)=>{const o=document.createElement("a");const n=URL.createObjectURL(new Blob([t]));if(i){URL.revokeObjectURL(i)}i=n;o.setAttribute("href",n);o.setAttribute("download",escapeFilename(e));document.body.appendChild(o);o.click();o.remove()};return{widget:{content:`\n`,condition:videoCondition,success:()=>{const t=dq("#download-subtitle");t.addEventListener("click",async i=>{try{t.disabled=true;const{aid:n,cid:s}=unsafeWindow;if(!n||!s){logError("未找到视频AID和CID");return}const{VideoInfo:l}=await e.importAsync("video-info");const{getFriendlyTitle:c}=await e.importAsync("title");const r=new l(n);r.cid=parseInt(s);await r.fetchInfo();const a=r.subtitles;if(a.length===0){Toast.info("当前视频没有字幕.","下载字幕",3e3);return}const d=await loadSubtitleSettingsPanel();if(!d){logError("未找到字幕设置");return}const u=d.querySelector(".bilibili-player-video-subtitle-setting-lan .bui-select-result").innerHTML;const b=a.find(t=>t.language===u)||a[0];const f=await Ajax.getJson(b.url);const p=f.body;const y=c(true);if(i.shiftKey){const{SubtitleConverter:t,SubtitleSize:i,SubtitleLocation:n}=await e.importAsync("subtitle-converter");const s=d.querySelector(".bilibili-player-video-subtitle-setting-fontsize .bui-thumb");const l=parseFloat(s.style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const c={214:i.VeryLarge,163.5:i.Large,107:i.Medium,50.5:i.Small,0:i.VerySmall};const r=c[l];const a=d.querySelector(".bilibili-player-video-subtitle-setting-color .bui-select-result span:first-child");const u=a.getAttribute("style").match(/background:[ ]*(.+);/)[1];const b=d.querySelector(".bilibili-player-video-subtitle-setting-opacity .bui-bar");const f=parseFloat(b.style.transform.replace(/scaleX\(([\d\.]+)/,"$1"));const g=dq(".subtitle-position");const m={bc:n.BottomCenter,bl:n.BottomLeft,br:n.BottomRight,tc:n.TopCenter,tl:n.TopLeft,tr:n.TopRight};const h=Object.entries(m).filter(([t])=>{return g.classList.contains(`subtitle-position-${t}`)}).map(([,t])=>t).shift();const w=dq("video");const v={title:y,height:w.videoHeight,width:w.videoWidth,color:u,location:h,opacity:f,size:r};const S=new t(v);const L=await S.convertToAss(p);o(L,y+".ass")}else{o(JSON.stringify(p),y+".json")}}catch(t){logError(t)}finally{t.disabled=false}})}}}}})(); diff --git a/bilibili-evolved.preview-offline.user.js b/bilibili-evolved.preview-offline.user.js index 415d74962..0eab5beed 100644 --- a/bilibili-evolved.preview-offline.user.js +++ b/bilibili-evolved.preview-offline.user.js @@ -1179,8 +1179,8 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-player-layout.min.js"] = (()=>{return(e,o)=>{class t{setCookie(e,o){document.cookie=`${e}=${o};path=/;domain=.bilibili.com;max-age=31536000`}clearCookie(e){document.cookie=`${e}=;path=/;domain=.bilibili.com;max-age=0`}getValue(e){return document.cookie.replace(new RegExp(`(?:(?:^|.*;\\s*)${e}\\s*\\=\\s*([^;]*).*$)|^.*$`),"$1")}checkSettings(){return e.useDefaultPlayerLayout}checkCookies(){}useNewLayout(){}useOldLayout(){}setLayout(e){if(e){this.useNewLayout()}else{this.useOldLayout()}}}class s extends t{checkCookies(){super.checkCookies();const o=this.getValue(this.cookieKey);if(o===""||parseInt(o)<0&&e.defaultPlayerLayout!=="旧版"){console.log(`default/old -> new`);this.useNewLayout()}else if(e.defaultPlayerLayout!=="新版"){console.log(`new -> old`);this.useOldLayout()}}constructor(){super();this.cookieKey="stardustvideo";this.checkCookies()}useNewLayout(){super.useNewLayout();this.setCookie(this.cookieKey,1)}useOldLayout(){super.useOldLayout();this.setCookie(this.cookieKey,-1)}}class u extends t{checkCookies(){super.checkCookies();const o=this.getValue(this.cookieKey);if(o===""||parseInt(o)<=0&&e.defaultBangumiLayout!=="旧版"){console.log(`default/old -> new`);this.useNewLayout()}else if(e.defaultBangumiLayout!=="新版"){console.log(`new -> old`);this.useOldLayout()}}constructor(){super();this.cookieKey="stardustpgcv";this.checkCookies()}useNewLayout(){super.useNewLayout();this.setCookie(this.cookieKey,"0606")}useOldLayout(){super.useOldLayout();this.setCookie(this.cookieKey,0)}}const i=new s;addSettingsListener("defaultPlayerLayout",e=>{i.setLayout(e==="新版")});const a=new u;addSettingsListener("defaultBangumiLayout",e=>{a.setLayout(e==="新版")})}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-player-mode.min.js"] = (()=>{return(e,i)=>{if(typeof isEmbeddedPlayer!=="undefined"&&isEmbeddedPlayer()){return}const n=[{name:"常规",action:()=>{}},{name:"宽屏",action:()=>{document.querySelector(".bilibili-player-video-btn-widescreen").click()}},{name:"网页全屏",action:()=>{document.querySelector(".bilibili-player-video-web-fullscreen").click()}},{name:"全屏",action:async()=>{const e=await SpinQuery.condition(()=>document.querySelector(".bilibili-player-video video"),e=>{return e!==null&&e.readyState===4&&document.readyState==="complete"&&document.hasFocus()});if(e===null){console.warn("[默认播放器模式] 未能应用全屏模式, 等待超时.");return}document.querySelector(".bilibili-player-video-btn-fullscreen").click()}}];let t=()=>{};let a=()=>{};async function l(){if(e.autoLightOff){await SpinQuery.unsafeJquery();const e=await SpinQuery.any(()=>unsafeWindow.$(".bilibili-player-video-btn-setting"));if(!e){return}e.mouseover().mouseout();const i=async e=>{const i=await SpinQuery.select(()=>document.querySelector(".bilibili-player-video-btn-setting-panel-others-content-lightoff .bui-checkbox-input"));i.checked=e;raiseEvent(i,"change")};t=(()=>i(true));a=(()=>i(false))}}async function o(){await l();await SpinQuery.condition(()=>$(".bilibili-player-video,.bilibili-player-video-btn-start,.bilibili-player-area"),e=>e.length===3&&$("video").length>0&&$("video").prop("duration"));const i=document.querySelector("video");if(!i){return}const o=n.find(i=>i.name===e.defaultPlayerMode);{const n=()=>{if(o&&$("#bilibiliPlayer[class*=mode-]").length===0){o.action()}};if(e.applyPlayerModeOnPlay&&!e.autoPlay){i.addEventListener("play",n,{once:true})}else{n()}if(!e.autoPlay){i.addEventListener("play",t,{once:true})}else{t()}i.addEventListener("ended",a,{once:true})}}Observer.videoChange(o)}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-video-quality.min.js"] = (()=>{return(e,a)=>{const t=[{name:"1080P60",value:116},{name:"1080P+",value:112},{name:"1080P",value:80},{name:"720P60",value:74},{name:"720P",value:64},{name:"480P",value:32},{name:"360P",value:15},{name:"自动",value:0}];async function i(){const a=await SpinQuery.any(()=>$(".bilibili-player-video-quality-menu .bui-select-list>li.bui-select-item"));if(!a){return}const i=(e,a)=>a-e;const[n]=a.toArray().map(e=>parseInt(e.getAttribute("data-value"))).sort(i);const[l]=t.filter(a=>a.name===e.defaultVideoQuality).map(e=>e.value).sort(i);const[r]=t.map(e=>e.value).filter(e=>e<=Math.min(l,n)).sort(i);const u=await SpinQuery.select(()=>document.querySelector("video"));function s(){a.each((e,a)=>{if(parseInt(a.getAttribute("data-value"))===r){a.click()}});this.removeEventListener("play",s)}u.addEventListener("play",s)}if(Observer.videoChange){Observer.videoChange(i)}else{Observer.childList("#bofqi",()=>i())}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-video-speed.min.js"] = (()=>{return(e,a)=>{const i=a=>{const i=parseFloat(e.defaultVideoSpeed);a.playbackRate=i;SpinQuery.condition(()=>a,()=>a.playbackRate!==i,()=>a.playbackRate=i)};Observer.videoChange(()=>{const e=dq(".bilibili-player-video video");if(!e){return}i(e)})}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/double-click-fullscreen.min.js"] = (()=>{return(i,e)=>{(async()=>{const e=["https://www.bilibili.com/bangumi/","https://www.bilibili.com/video/"];if(!e.some(i=>document.URL.startsWith(i))){return}if(i.touchVideoPlayer&&i.touchVideoPlayerDoubleTapControl){Toast.info("在开启了播放器触摸支持-启用双击控制后, 双击全屏功能将无效.","提示");i.doubleClickFullscreen=false;return}await SpinQuery.unsafeJquery();const l=await SpinQuery.condition(()=>dq(".bilibili-player-area"),i=>i!==null&&unsafeWindow.$(".bilibili-player-video").data("events"));if(l===null){return}const n="double-click-fullscreen";if(!l.classList.contains(n)){l.classList.add(n);const e=unsafeWindow.$(".bilibili-player-video");const t=i.doubleClickFullscreenPreventSingleClick?e.data("events").click[0].handler:()=>{};const c=new DoubleClickEvent(()=>dq(".bilibili-player-video-btn-fullscreen").click(),i=>t(i));if(i.doubleClickFullscreenPreventSingleClick){e.unbind("click")}c.bind(e[0])}})()}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-video-speed.min.js"] = (()=>{return(e,a)=>{const i=a=>{const i=parseFloat(e.defaultVideoSpeed);a.playbackRate=i;SpinQuery.condition(()=>a,()=>a.playbackRate!==i,()=>a.playbackRate=i)};Observer.videoChange(async()=>{const e=await SpinQuery.select(".bilibili-player-video video");i(e)})}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/double-click-fullscreen.min.js"] = (()=>{const i=["https://www.bilibili.com/bangumi/","https://www.bilibili.com/video/"];if(!i.some(i=>document.URL.startsWith(i))){return}if(settings.touchVideoPlayer&&settings.touchVideoPlayerDoubleTapControl){Toast.info("在开启了播放器触摸支持-启用双击控制后, 双击全屏功能将无效.","提示");settings.doubleClickFullscreen=false;return}Observer.videoChange(async()=>{await SpinQuery.unsafeJquery();const i=await SpinQuery.condition(()=>dq(".bilibili-player-area"),i=>i!==null&&unsafeWindow.$(".bilibili-player-video").data("events"));if(i===null){return}const e="double-click-fullscreen";if(!i.classList.contains(e)){i.classList.add(e);const l=unsafeWindow.$(".bilibili-player-video");const n=settings.doubleClickFullscreenPreventSingleClick?l.data("events").click[0].handler:()=>{};const s=new DoubleClickEvent(()=>dq(".bilibili-player-video-btn-fullscreen").click(),i=>n(i));if(settings.doubleClickFullscreenPreventSingleClick){l.unbind("click")}s.bind(l[0])}})})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-audio.min.js"] = (()=>{return(e,t)=>{class n{constructor(){this.sid=null;this.progress=null}async getDownloadUrl(){const e=`https://www.bilibili.com/audio/music-service-c/web/url?sid=${this.sid}&privilege=2&quality=2`;const t=await Ajax.getJsonWithCredentials(e);if(t.code===0){return t.data.cdns.shift()}else{logError("获取下载链接失败, 请确保当前账号有下载权限.","下载音频",1e4);return null}}async download(){const e=await this.getDownloadUrl();return new Promise((t,n)=>{const s=new XMLHttpRequest;s.open("GET",e);s.responseType="blob";s.addEventListener("load",()=>t(s.response));s.addEventListener("error",()=>n(s.status));s.addEventListener("progress",e=>this.progress&&this.progress(100*e.loaded/e.total));s.send()})}}const s="下载音频";return{export:n,widget:{content:`\n\n\n${s}\n\n`,condition:()=>document.URL.includes("bilibili.com/audio"),success:async()=>{await SpinQuery.select(()=>document.querySelector("#app"));const e=document.querySelector("#download-audio");const t=e.querySelector("span");const o=new n;o.progress=(e=>{t.innerHTML=`${Math.round(e)}%`});const i=document.querySelector("#download-audio-link");e.addEventListener("click",async e=>{if(o.sid===null||e.target===i){return}const n=await o.download();t.innerHTML=s;const r=i.getAttribute("href");if(r){URL.revokeObjectURL(r)}i.setAttribute("href",URL.createObjectURL(n));const d=(()=>{const e=document.querySelector(".song-title");if(e){return e.getAttribute("title")}else{return"神秘音频"}})();i.setAttribute("download",d+".m4a");i.click()});Observer.childList("#app",()=>{const t=document.URL.match(/bilibili\.com\/audio\/au([\d]+)/);if(t&&t[1]){e.disabled=false;o.sid=t[1]}else{e.disabled=true}})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-danmaku.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:n}=e.import("title");const{DanmakuInfo:i}=e.import("video-info");const{DanmakuConverter:a}=e.import("danmaku-converter");async function o(t){const e=n();let i={title:e};try{await loadDanmakuSettingsPanel();const t=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));return e*4/188};const e=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[e];return n};i.font=dq(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;i.alpha=parseFloat(dq(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));i.duration=(()=>{const e=18-3*t(".bilibili-player-setting-speedplus .bui-thumb");return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();i.blockTypes=(()=>{let t=[];const e={".bilibili-player-block-filter-type[ftype=scroll]":[1,2,3],".bilibili-player-block-filter-type[ftype=top]":[5],".bilibili-player-block-filter-type[ftype=bottom]":[4],".bilibili-player-block-filter-type[ftype=color]":["color"]};for(const[n,i]of Object.entries(e)){if(dq(n).classList.contains("disabled")){t=t.concat(i)}}return t.concat(7,8)})();const n=1.4-.2*t(".bilibili-player-setting-fontsize .bui-thumb");i.resolution={x:1920*n,y:1080*n};i.bottomMarginPercent=[.75,.5,.25,0,0][e(".bilibili-player-setting-area .bui-thumb")];if(i.bottomMarginPercent===0&&dq(".bilibili-player-video-danmaku-setting-left-preventshade input").checked){i.bottomMarginPercent=.15}i.bold=dq(".bilibili-player-video-danmaku-setting-right-font-bold input").checked}catch(t){i={font:"微软雅黑",alpha:.6,duration:t=>{switch(t.type){case 4:case 5:return 4;default:return 6}},blockTypes:[7,8],resolution:{x:1920,y:1080},bottomMarginPercent:.15,bold:false}}const o=new a(i);const l=o.convertToAssDocument(t);return l.generateAss()}async function l(t){const e=n();const a=new i((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(t===true){return new Blob([await o(a.rawXML)],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const s=dq("#danmaku-link");const c=s.getAttribute("href");if(c){URL.revokeObjectURL(c)}s.setAttribute("download",`${e}.${t?"ass":"xml"}`);s.setAttribute("href",r);s.click()}return{export:{downloadDanmaku:l,convertToAss:o},widget:{content:`\n\n\n下载弹幕\n\n`,condition:async()=>{let t=await SpinQuery.select(()=>(unsafeWindow||window).cid);return Boolean(t)},success:()=>{const t=dq("#danmaku-link");const e=dq("#download-danmaku");e.addEventListener("click",n=>{if(n.target!==t){try{e.disabled=true;l(n.shiftKey)}catch(t){logError(t)}finally{e.disabled=false}}})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-subtitle.min.js"] = (()=>{return(t,e)=>{let i;const o=(t,e)=>{const o=document.createElement("a");const n=URL.createObjectURL(new Blob([t]));if(i){URL.revokeObjectURL(i)}i=n;o.setAttribute("href",n);o.setAttribute("download",escapeFilename(e));document.body.appendChild(o);o.click();o.remove()};return{widget:{content:`\n`,condition:videoCondition,success:()=>{const t=dq("#download-subtitle");t.addEventListener("click",async i=>{try{t.disabled=true;const{aid:n,cid:s}=unsafeWindow;if(!n||!s){logError("未找到视频AID和CID");return}const{VideoInfo:l}=await e.importAsync("video-info");const{getFriendlyTitle:c}=await e.importAsync("title");const r=new l(n);r.cid=parseInt(s);await r.fetchInfo();const a=r.subtitles;if(a.length===0){Toast.info("当前视频没有字幕.","下载字幕",3e3);return}const d=await loadSubtitleSettingsPanel();if(!d){logError("未找到字幕设置");return}const u=d.querySelector(".bilibili-player-video-subtitle-setting-lan .bui-select-result").innerHTML;const b=a.find(t=>t.language===u)||a[0];const f=await Ajax.getJson(b.url);const p=f.body;const y=c(true);if(i.shiftKey){const{SubtitleConverter:t,SubtitleSize:i,SubtitleLocation:n}=await e.importAsync("subtitle-converter");const s=d.querySelector(".bilibili-player-video-subtitle-setting-fontsize .bui-thumb");const l=parseFloat(s.style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const c={214:i.VeryLarge,163.5:i.Large,107:i.Medium,50.5:i.Small,0:i.VerySmall};const r=c[l];const a=d.querySelector(".bilibili-player-video-subtitle-setting-color .bui-select-result span:first-child");const u=a.getAttribute("style").match(/background:[ ]*(.+);/)[1];const b=d.querySelector(".bilibili-player-video-subtitle-setting-opacity .bui-bar");const f=parseFloat(b.style.transform.replace(/scaleX\(([\d\.]+)/,"$1"));const g=dq(".subtitle-position");const m={bc:n.BottomCenter,bl:n.BottomLeft,br:n.BottomRight,tc:n.TopCenter,tl:n.TopLeft,tr:n.TopRight};const h=Object.entries(m).filter(([t])=>{return g.classList.contains(`subtitle-position-${t}`)}).map(([,t])=>t).shift();const w=dq("video");const v={title:y,height:w.videoHeight,width:w.videoWidth,color:u,location:h,opacity:f,size:r};const S=new t(v);const L=await S.convertToAss(p);o(L,y+".ass")}else{o(JSON.stringify(p),y+".json")}}catch(t){logError(t)}finally{t.disabled=false}})}}}}})(); diff --git a/bilibili-evolved.preview.user.js b/bilibili-evolved.preview.user.js index 8dc9f32cb..fd9be9e41 100644 --- a/bilibili-evolved.preview.user.js +++ b/bilibili-evolved.preview.user.js @@ -1178,8 +1178,8 @@ onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/m onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/default-player-layout.min.js"] = (()=>{return(e,o)=>{class t{setCookie(e,o){document.cookie=`${e}=${o};path=/;domain=.bilibili.com;max-age=31536000`}clearCookie(e){document.cookie=`${e}=;path=/;domain=.bilibili.com;max-age=0`}getValue(e){return document.cookie.replace(new RegExp(`(?:(?:^|.*;\\s*)${e}\\s*\\=\\s*([^;]*).*$)|^.*$`),"$1")}checkSettings(){return e.useDefaultPlayerLayout}checkCookies(){}useNewLayout(){}useOldLayout(){}setLayout(e){if(e){this.useNewLayout()}else{this.useOldLayout()}}}class s extends t{checkCookies(){super.checkCookies();const o=this.getValue(this.cookieKey);if(o===""||parseInt(o)<0&&e.defaultPlayerLayout!=="旧版"){console.log(`default/old -> new`);this.useNewLayout()}else if(e.defaultPlayerLayout!=="新版"){console.log(`new -> old`);this.useOldLayout()}}constructor(){super();this.cookieKey="stardustvideo";this.checkCookies()}useNewLayout(){super.useNewLayout();this.setCookie(this.cookieKey,1)}useOldLayout(){super.useOldLayout();this.setCookie(this.cookieKey,-1)}}class u extends t{checkCookies(){super.checkCookies();const o=this.getValue(this.cookieKey);if(o===""||parseInt(o)<=0&&e.defaultBangumiLayout!=="旧版"){console.log(`default/old -> new`);this.useNewLayout()}else if(e.defaultBangumiLayout!=="新版"){console.log(`new -> old`);this.useOldLayout()}}constructor(){super();this.cookieKey="stardustpgcv";this.checkCookies()}useNewLayout(){super.useNewLayout();this.setCookie(this.cookieKey,"0606")}useOldLayout(){super.useOldLayout();this.setCookie(this.cookieKey,0)}}const i=new s;addSettingsListener("defaultPlayerLayout",e=>{i.setLayout(e==="新版")});const a=new u;addSettingsListener("defaultBangumiLayout",e=>{a.setLayout(e==="新版")})}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/default-player-mode.min.js"] = (()=>{return(e,i)=>{if(typeof isEmbeddedPlayer!=="undefined"&&isEmbeddedPlayer()){return}const n=[{name:"常规",action:()=>{}},{name:"宽屏",action:()=>{document.querySelector(".bilibili-player-video-btn-widescreen").click()}},{name:"网页全屏",action:()=>{document.querySelector(".bilibili-player-video-web-fullscreen").click()}},{name:"全屏",action:async()=>{const e=await SpinQuery.condition(()=>document.querySelector(".bilibili-player-video video"),e=>{return e!==null&&e.readyState===4&&document.readyState==="complete"&&document.hasFocus()});if(e===null){console.warn("[默认播放器模式] 未能应用全屏模式, 等待超时.");return}document.querySelector(".bilibili-player-video-btn-fullscreen").click()}}];let t=()=>{};let a=()=>{};async function l(){if(e.autoLightOff){await SpinQuery.unsafeJquery();const e=await SpinQuery.any(()=>unsafeWindow.$(".bilibili-player-video-btn-setting"));if(!e){return}e.mouseover().mouseout();const i=async e=>{const i=await SpinQuery.select(()=>document.querySelector(".bilibili-player-video-btn-setting-panel-others-content-lightoff .bui-checkbox-input"));i.checked=e;raiseEvent(i,"change")};t=(()=>i(true));a=(()=>i(false))}}async function o(){await l();await SpinQuery.condition(()=>$(".bilibili-player-video,.bilibili-player-video-btn-start,.bilibili-player-area"),e=>e.length===3&&$("video").length>0&&$("video").prop("duration"));const i=document.querySelector("video");if(!i){return}const o=n.find(i=>i.name===e.defaultPlayerMode);{const n=()=>{if(o&&$("#bilibiliPlayer[class*=mode-]").length===0){o.action()}};if(e.applyPlayerModeOnPlay&&!e.autoPlay){i.addEventListener("play",n,{once:true})}else{n()}if(!e.autoPlay){i.addEventListener("play",t,{once:true})}else{t()}i.addEventListener("ended",a,{once:true})}}Observer.videoChange(o)}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/default-video-quality.min.js"] = (()=>{return(e,a)=>{const t=[{name:"1080P60",value:116},{name:"1080P+",value:112},{name:"1080P",value:80},{name:"720P60",value:74},{name:"720P",value:64},{name:"480P",value:32},{name:"360P",value:15},{name:"自动",value:0}];async function i(){const a=await SpinQuery.any(()=>$(".bilibili-player-video-quality-menu .bui-select-list>li.bui-select-item"));if(!a){return}const i=(e,a)=>a-e;const[n]=a.toArray().map(e=>parseInt(e.getAttribute("data-value"))).sort(i);const[l]=t.filter(a=>a.name===e.defaultVideoQuality).map(e=>e.value).sort(i);const[r]=t.map(e=>e.value).filter(e=>e<=Math.min(l,n)).sort(i);const u=await SpinQuery.select(()=>document.querySelector("video"));function s(){a.each((e,a)=>{if(parseInt(a.getAttribute("data-value"))===r){a.click()}});this.removeEventListener("play",s)}u.addEventListener("play",s)}if(Observer.videoChange){Observer.videoChange(i)}else{Observer.childList("#bofqi",()=>i())}}})(); -onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/default-video-speed.min.js"] = (()=>{return(e,a)=>{const i=a=>{const i=parseFloat(e.defaultVideoSpeed);a.playbackRate=i;SpinQuery.condition(()=>a,()=>a.playbackRate!==i,()=>a.playbackRate=i)};Observer.videoChange(()=>{const e=dq(".bilibili-player-video video");if(!e){return}i(e)})}})(); -onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/double-click-fullscreen.min.js"] = (()=>{return(i,e)=>{(async()=>{const e=["https://www.bilibili.com/bangumi/","https://www.bilibili.com/video/"];if(!e.some(i=>document.URL.startsWith(i))){return}if(i.touchVideoPlayer&&i.touchVideoPlayerDoubleTapControl){Toast.info("在开启了播放器触摸支持-启用双击控制后, 双击全屏功能将无效.","提示");i.doubleClickFullscreen=false;return}await SpinQuery.unsafeJquery();const l=await SpinQuery.condition(()=>dq(".bilibili-player-area"),i=>i!==null&&unsafeWindow.$(".bilibili-player-video").data("events"));if(l===null){return}const n="double-click-fullscreen";if(!l.classList.contains(n)){l.classList.add(n);const e=unsafeWindow.$(".bilibili-player-video");const t=i.doubleClickFullscreenPreventSingleClick?e.data("events").click[0].handler:()=>{};const c=new DoubleClickEvent(()=>dq(".bilibili-player-video-btn-fullscreen").click(),i=>t(i));if(i.doubleClickFullscreenPreventSingleClick){e.unbind("click")}c.bind(e[0])}})()}})(); +onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/default-video-speed.min.js"] = (()=>{return(e,a)=>{const i=a=>{const i=parseFloat(e.defaultVideoSpeed);a.playbackRate=i;SpinQuery.condition(()=>a,()=>a.playbackRate!==i,()=>a.playbackRate=i)};Observer.videoChange(async()=>{const e=await SpinQuery.select(".bilibili-player-video video");i(e)})}})(); +onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/double-click-fullscreen.min.js"] = (()=>{const i=["https://www.bilibili.com/bangumi/","https://www.bilibili.com/video/"];if(!i.some(i=>document.URL.startsWith(i))){return}if(settings.touchVideoPlayer&&settings.touchVideoPlayerDoubleTapControl){Toast.info("在开启了播放器触摸支持-启用双击控制后, 双击全屏功能将无效.","提示");settings.doubleClickFullscreen=false;return}Observer.videoChange(async()=>{await SpinQuery.unsafeJquery();const i=await SpinQuery.condition(()=>dq(".bilibili-player-area"),i=>i!==null&&unsafeWindow.$(".bilibili-player-video").data("events"));if(i===null){return}const e="double-click-fullscreen";if(!i.classList.contains(e)){i.classList.add(e);const l=unsafeWindow.$(".bilibili-player-video");const n=settings.doubleClickFullscreenPreventSingleClick?l.data("events").click[0].handler:()=>{};const s=new DoubleClickEvent(()=>dq(".bilibili-player-video-btn-fullscreen").click(),i=>n(i));if(settings.doubleClickFullscreenPreventSingleClick){l.unbind("click")}s.bind(l[0])}})})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/download-audio.min.js"] = (()=>{return(e,t)=>{class n{constructor(){this.sid=null;this.progress=null}async getDownloadUrl(){const e=`https://www.bilibili.com/audio/music-service-c/web/url?sid=${this.sid}&privilege=2&quality=2`;const t=await Ajax.getJsonWithCredentials(e);if(t.code===0){return t.data.cdns.shift()}else{logError("获取下载链接失败, 请确保当前账号有下载权限.","下载音频",1e4);return null}}async download(){const e=await this.getDownloadUrl();return new Promise((t,n)=>{const s=new XMLHttpRequest;s.open("GET",e);s.responseType="blob";s.addEventListener("load",()=>t(s.response));s.addEventListener("error",()=>n(s.status));s.addEventListener("progress",e=>this.progress&&this.progress(100*e.loaded/e.total));s.send()})}}const s="下载音频";return{export:n,widget:{content:`\n\n\n${s}\n\n`,condition:()=>document.URL.includes("bilibili.com/audio"),success:async()=>{await SpinQuery.select(()=>document.querySelector("#app"));const e=document.querySelector("#download-audio");const t=e.querySelector("span");const o=new n;o.progress=(e=>{t.innerHTML=`${Math.round(e)}%`});const i=document.querySelector("#download-audio-link");e.addEventListener("click",async e=>{if(o.sid===null||e.target===i){return}const n=await o.download();t.innerHTML=s;const r=i.getAttribute("href");if(r){URL.revokeObjectURL(r)}i.setAttribute("href",URL.createObjectURL(n));const d=(()=>{const e=document.querySelector(".song-title");if(e){return e.getAttribute("title")}else{return"神秘音频"}})();i.setAttribute("download",d+".m4a");i.click()});Observer.childList("#app",()=>{const t=document.URL.match(/bilibili\.com\/audio\/au([\d]+)/);if(t&&t[1]){e.disabled=false;o.sid=t[1]}else{e.disabled=true}})}}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/download-danmaku.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:n}=e.import("title");const{DanmakuInfo:i}=e.import("video-info");const{DanmakuConverter:a}=e.import("danmaku-converter");async function o(t){const e=n();let i={title:e};try{await loadDanmakuSettingsPanel();const t=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));return e*4/188};const e=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[e];return n};i.font=dq(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;i.alpha=parseFloat(dq(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));i.duration=(()=>{const e=18-3*t(".bilibili-player-setting-speedplus .bui-thumb");return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();i.blockTypes=(()=>{let t=[];const e={".bilibili-player-block-filter-type[ftype=scroll]":[1,2,3],".bilibili-player-block-filter-type[ftype=top]":[5],".bilibili-player-block-filter-type[ftype=bottom]":[4],".bilibili-player-block-filter-type[ftype=color]":["color"]};for(const[n,i]of Object.entries(e)){if(dq(n).classList.contains("disabled")){t=t.concat(i)}}return t.concat(7,8)})();const n=1.4-.2*t(".bilibili-player-setting-fontsize .bui-thumb");i.resolution={x:1920*n,y:1080*n};i.bottomMarginPercent=[.75,.5,.25,0,0][e(".bilibili-player-setting-area .bui-thumb")];if(i.bottomMarginPercent===0&&dq(".bilibili-player-video-danmaku-setting-left-preventshade input").checked){i.bottomMarginPercent=.15}i.bold=dq(".bilibili-player-video-danmaku-setting-right-font-bold input").checked}catch(t){i={font:"微软雅黑",alpha:.6,duration:t=>{switch(t.type){case 4:case 5:return 4;default:return 6}},blockTypes:[7,8],resolution:{x:1920,y:1080},bottomMarginPercent:.15,bold:false}}const o=new a(i);const l=o.convertToAssDocument(t);return l.generateAss()}async function l(t){const e=n();const a=new i((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(t===true){return new Blob([await o(a.rawXML)],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const s=dq("#danmaku-link");const c=s.getAttribute("href");if(c){URL.revokeObjectURL(c)}s.setAttribute("download",`${e}.${t?"ass":"xml"}`);s.setAttribute("href",r);s.click()}return{export:{downloadDanmaku:l,convertToAss:o},widget:{content:`\n\n\n下载弹幕\n\n`,condition:async()=>{let t=await SpinQuery.select(()=>(unsafeWindow||window).cid);return Boolean(t)},success:()=>{const t=dq("#danmaku-link");const e=dq("#download-danmaku");e.addEventListener("click",n=>{if(n.target!==t){try{e.disabled=true;l(n.shiftKey)}catch(t){logError(t)}finally{e.disabled=false}}})}}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/preview/min/download-subtitle.min.js"] = (()=>{return(t,e)=>{let i;const o=(t,e)=>{const o=document.createElement("a");const n=URL.createObjectURL(new Blob([t]));if(i){URL.revokeObjectURL(i)}i=n;o.setAttribute("href",n);o.setAttribute("download",escapeFilename(e));document.body.appendChild(o);o.click();o.remove()};return{widget:{content:`\n`,condition:videoCondition,success:()=>{const t=dq("#download-subtitle");t.addEventListener("click",async i=>{try{t.disabled=true;const{aid:n,cid:s}=unsafeWindow;if(!n||!s){logError("未找到视频AID和CID");return}const{VideoInfo:l}=await e.importAsync("video-info");const{getFriendlyTitle:c}=await e.importAsync("title");const r=new l(n);r.cid=parseInt(s);await r.fetchInfo();const a=r.subtitles;if(a.length===0){Toast.info("当前视频没有字幕.","下载字幕",3e3);return}const d=await loadSubtitleSettingsPanel();if(!d){logError("未找到字幕设置");return}const u=d.querySelector(".bilibili-player-video-subtitle-setting-lan .bui-select-result").innerHTML;const b=a.find(t=>t.language===u)||a[0];const f=await Ajax.getJson(b.url);const p=f.body;const y=c(true);if(i.shiftKey){const{SubtitleConverter:t,SubtitleSize:i,SubtitleLocation:n}=await e.importAsync("subtitle-converter");const s=d.querySelector(".bilibili-player-video-subtitle-setting-fontsize .bui-thumb");const l=parseFloat(s.style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const c={214:i.VeryLarge,163.5:i.Large,107:i.Medium,50.5:i.Small,0:i.VerySmall};const r=c[l];const a=d.querySelector(".bilibili-player-video-subtitle-setting-color .bui-select-result span:first-child");const u=a.getAttribute("style").match(/background:[ ]*(.+);/)[1];const b=d.querySelector(".bilibili-player-video-subtitle-setting-opacity .bui-bar");const f=parseFloat(b.style.transform.replace(/scaleX\(([\d\.]+)/,"$1"));const g=dq(".subtitle-position");const m={bc:n.BottomCenter,bl:n.BottomLeft,br:n.BottomRight,tc:n.TopCenter,tl:n.TopLeft,tr:n.TopRight};const h=Object.entries(m).filter(([t])=>{return g.classList.contains(`subtitle-position-${t}`)}).map(([,t])=>t).shift();const w=dq("video");const v={title:y,height:w.videoHeight,width:w.videoWidth,color:u,location:h,opacity:f,size:r};const S=new t(v);const L=await S.convertToAss(p);o(L,y+".ass")}else{o(JSON.stringify(p),y+".json")}}catch(t){logError(t)}finally{t.disabled=false}})}}}}})(); diff --git a/bilibili-evolved.user.js b/bilibili-evolved.user.js index e8b0c7a01..a406b9322 100644 --- a/bilibili-evolved.user.js +++ b/bilibili-evolved.user.js @@ -1178,8 +1178,8 @@ onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/mi onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-player-layout.min.js"] = (()=>{return(e,o)=>{class t{setCookie(e,o){document.cookie=`${e}=${o};path=/;domain=.bilibili.com;max-age=31536000`}clearCookie(e){document.cookie=`${e}=;path=/;domain=.bilibili.com;max-age=0`}getValue(e){return document.cookie.replace(new RegExp(`(?:(?:^|.*;\\s*)${e}\\s*\\=\\s*([^;]*).*$)|^.*$`),"$1")}checkSettings(){return e.useDefaultPlayerLayout}checkCookies(){}useNewLayout(){}useOldLayout(){}setLayout(e){if(e){this.useNewLayout()}else{this.useOldLayout()}}}class s extends t{checkCookies(){super.checkCookies();const o=this.getValue(this.cookieKey);if(o===""||parseInt(o)<0&&e.defaultPlayerLayout!=="旧版"){console.log(`default/old -> new`);this.useNewLayout()}else if(e.defaultPlayerLayout!=="新版"){console.log(`new -> old`);this.useOldLayout()}}constructor(){super();this.cookieKey="stardustvideo";this.checkCookies()}useNewLayout(){super.useNewLayout();this.setCookie(this.cookieKey,1)}useOldLayout(){super.useOldLayout();this.setCookie(this.cookieKey,-1)}}class u extends t{checkCookies(){super.checkCookies();const o=this.getValue(this.cookieKey);if(o===""||parseInt(o)<=0&&e.defaultBangumiLayout!=="旧版"){console.log(`default/old -> new`);this.useNewLayout()}else if(e.defaultBangumiLayout!=="新版"){console.log(`new -> old`);this.useOldLayout()}}constructor(){super();this.cookieKey="stardustpgcv";this.checkCookies()}useNewLayout(){super.useNewLayout();this.setCookie(this.cookieKey,"0606")}useOldLayout(){super.useOldLayout();this.setCookie(this.cookieKey,0)}}const i=new s;addSettingsListener("defaultPlayerLayout",e=>{i.setLayout(e==="新版")});const a=new u;addSettingsListener("defaultBangumiLayout",e=>{a.setLayout(e==="新版")})}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-player-mode.min.js"] = (()=>{return(e,i)=>{if(typeof isEmbeddedPlayer!=="undefined"&&isEmbeddedPlayer()){return}const n=[{name:"常规",action:()=>{}},{name:"宽屏",action:()=>{document.querySelector(".bilibili-player-video-btn-widescreen").click()}},{name:"网页全屏",action:()=>{document.querySelector(".bilibili-player-video-web-fullscreen").click()}},{name:"全屏",action:async()=>{const e=await SpinQuery.condition(()=>document.querySelector(".bilibili-player-video video"),e=>{return e!==null&&e.readyState===4&&document.readyState==="complete"&&document.hasFocus()});if(e===null){console.warn("[默认播放器模式] 未能应用全屏模式, 等待超时.");return}document.querySelector(".bilibili-player-video-btn-fullscreen").click()}}];let t=()=>{};let a=()=>{};async function l(){if(e.autoLightOff){await SpinQuery.unsafeJquery();const e=await SpinQuery.any(()=>unsafeWindow.$(".bilibili-player-video-btn-setting"));if(!e){return}e.mouseover().mouseout();const i=async e=>{const i=await SpinQuery.select(()=>document.querySelector(".bilibili-player-video-btn-setting-panel-others-content-lightoff .bui-checkbox-input"));i.checked=e;raiseEvent(i,"change")};t=(()=>i(true));a=(()=>i(false))}}async function o(){await l();await SpinQuery.condition(()=>$(".bilibili-player-video,.bilibili-player-video-btn-start,.bilibili-player-area"),e=>e.length===3&&$("video").length>0&&$("video").prop("duration"));const i=document.querySelector("video");if(!i){return}const o=n.find(i=>i.name===e.defaultPlayerMode);{const n=()=>{if(o&&$("#bilibiliPlayer[class*=mode-]").length===0){o.action()}};if(e.applyPlayerModeOnPlay&&!e.autoPlay){i.addEventListener("play",n,{once:true})}else{n()}if(!e.autoPlay){i.addEventListener("play",t,{once:true})}else{t()}i.addEventListener("ended",a,{once:true})}}Observer.videoChange(o)}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-video-quality.min.js"] = (()=>{return(e,a)=>{const t=[{name:"1080P60",value:116},{name:"1080P+",value:112},{name:"1080P",value:80},{name:"720P60",value:74},{name:"720P",value:64},{name:"480P",value:32},{name:"360P",value:15},{name:"自动",value:0}];async function i(){const a=await SpinQuery.any(()=>$(".bilibili-player-video-quality-menu .bui-select-list>li.bui-select-item"));if(!a){return}const i=(e,a)=>a-e;const[n]=a.toArray().map(e=>parseInt(e.getAttribute("data-value"))).sort(i);const[l]=t.filter(a=>a.name===e.defaultVideoQuality).map(e=>e.value).sort(i);const[r]=t.map(e=>e.value).filter(e=>e<=Math.min(l,n)).sort(i);const u=await SpinQuery.select(()=>document.querySelector("video"));function s(){a.each((e,a)=>{if(parseInt(a.getAttribute("data-value"))===r){a.click()}});this.removeEventListener("play",s)}u.addEventListener("play",s)}if(Observer.videoChange){Observer.videoChange(i)}else{Observer.childList("#bofqi",()=>i())}}})(); -onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-video-speed.min.js"] = (()=>{return(e,a)=>{const i=a=>{const i=parseFloat(e.defaultVideoSpeed);a.playbackRate=i;SpinQuery.condition(()=>a,()=>a.playbackRate!==i,()=>a.playbackRate=i)};Observer.videoChange(()=>{const e=dq(".bilibili-player-video video");if(!e){return}i(e)})}})(); -onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/double-click-fullscreen.min.js"] = (()=>{return(i,e)=>{(async()=>{const e=["https://www.bilibili.com/bangumi/","https://www.bilibili.com/video/"];if(!e.some(i=>document.URL.startsWith(i))){return}if(i.touchVideoPlayer&&i.touchVideoPlayerDoubleTapControl){Toast.info("在开启了播放器触摸支持-启用双击控制后, 双击全屏功能将无效.","提示");i.doubleClickFullscreen=false;return}await SpinQuery.unsafeJquery();const l=await SpinQuery.condition(()=>dq(".bilibili-player-area"),i=>i!==null&&unsafeWindow.$(".bilibili-player-video").data("events"));if(l===null){return}const n="double-click-fullscreen";if(!l.classList.contains(n)){l.classList.add(n);const e=unsafeWindow.$(".bilibili-player-video");const t=i.doubleClickFullscreenPreventSingleClick?e.data("events").click[0].handler:()=>{};const c=new DoubleClickEvent(()=>dq(".bilibili-player-video-btn-fullscreen").click(),i=>t(i));if(i.doubleClickFullscreenPreventSingleClick){e.unbind("click")}c.bind(e[0])}})()}})(); +onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-video-speed.min.js"] = (()=>{return(e,a)=>{const i=a=>{const i=parseFloat(e.defaultVideoSpeed);a.playbackRate=i;SpinQuery.condition(()=>a,()=>a.playbackRate!==i,()=>a.playbackRate=i)};Observer.videoChange(async()=>{const e=await SpinQuery.select(".bilibili-player-video video");i(e)})}})(); +onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/double-click-fullscreen.min.js"] = (()=>{const i=["https://www.bilibili.com/bangumi/","https://www.bilibili.com/video/"];if(!i.some(i=>document.URL.startsWith(i))){return}if(settings.touchVideoPlayer&&settings.touchVideoPlayerDoubleTapControl){Toast.info("在开启了播放器触摸支持-启用双击控制后, 双击全屏功能将无效.","提示");settings.doubleClickFullscreen=false;return}Observer.videoChange(async()=>{await SpinQuery.unsafeJquery();const i=await SpinQuery.condition(()=>dq(".bilibili-player-area"),i=>i!==null&&unsafeWindow.$(".bilibili-player-video").data("events"));if(i===null){return}const e="double-click-fullscreen";if(!i.classList.contains(e)){i.classList.add(e);const l=unsafeWindow.$(".bilibili-player-video");const n=settings.doubleClickFullscreenPreventSingleClick?l.data("events").click[0].handler:()=>{};const s=new DoubleClickEvent(()=>dq(".bilibili-player-video-btn-fullscreen").click(),i=>n(i));if(settings.doubleClickFullscreenPreventSingleClick){l.unbind("click")}s.bind(l[0])}})})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-audio.min.js"] = (()=>{return(e,t)=>{class n{constructor(){this.sid=null;this.progress=null}async getDownloadUrl(){const e=`https://www.bilibili.com/audio/music-service-c/web/url?sid=${this.sid}&privilege=2&quality=2`;const t=await Ajax.getJsonWithCredentials(e);if(t.code===0){return t.data.cdns.shift()}else{logError("获取下载链接失败, 请确保当前账号有下载权限.","下载音频",1e4);return null}}async download(){const e=await this.getDownloadUrl();return new Promise((t,n)=>{const s=new XMLHttpRequest;s.open("GET",e);s.responseType="blob";s.addEventListener("load",()=>t(s.response));s.addEventListener("error",()=>n(s.status));s.addEventListener("progress",e=>this.progress&&this.progress(100*e.loaded/e.total));s.send()})}}const s="下载音频";return{export:n,widget:{content:`\n\n\n${s}\n\n`,condition:()=>document.URL.includes("bilibili.com/audio"),success:async()=>{await SpinQuery.select(()=>document.querySelector("#app"));const e=document.querySelector("#download-audio");const t=e.querySelector("span");const o=new n;o.progress=(e=>{t.innerHTML=`${Math.round(e)}%`});const i=document.querySelector("#download-audio-link");e.addEventListener("click",async e=>{if(o.sid===null||e.target===i){return}const n=await o.download();t.innerHTML=s;const r=i.getAttribute("href");if(r){URL.revokeObjectURL(r)}i.setAttribute("href",URL.createObjectURL(n));const d=(()=>{const e=document.querySelector(".song-title");if(e){return e.getAttribute("title")}else{return"神秘音频"}})();i.setAttribute("download",d+".m4a");i.click()});Observer.childList("#app",()=>{const t=document.URL.match(/bilibili\.com\/audio\/au([\d]+)/);if(t&&t[1]){e.disabled=false;o.sid=t[1]}else{e.disabled=true}})}}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-danmaku.min.js"] = (()=>{return(t,e)=>{const{getFriendlyTitle:n}=e.import("title");const{DanmakuInfo:i}=e.import("video-info");const{DanmakuConverter:a}=e.import("danmaku-converter");async function o(t){const e=n();let i={title:e};try{await loadDanmakuSettingsPanel();const t=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));return e*4/188};const e=t=>{const e=parseFloat(dq(t).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[e];return n};i.font=dq(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;i.alpha=parseFloat(dq(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));i.duration=(()=>{const e=18-3*t(".bilibili-player-setting-speedplus .bui-thumb");return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();i.blockTypes=(()=>{let t=[];const e={".bilibili-player-block-filter-type[ftype=scroll]":[1,2,3],".bilibili-player-block-filter-type[ftype=top]":[5],".bilibili-player-block-filter-type[ftype=bottom]":[4],".bilibili-player-block-filter-type[ftype=color]":["color"]};for(const[n,i]of Object.entries(e)){if(dq(n).classList.contains("disabled")){t=t.concat(i)}}return t.concat(7,8)})();const n=1.4-.2*t(".bilibili-player-setting-fontsize .bui-thumb");i.resolution={x:1920*n,y:1080*n};i.bottomMarginPercent=[.75,.5,.25,0,0][e(".bilibili-player-setting-area .bui-thumb")];if(i.bottomMarginPercent===0&&dq(".bilibili-player-video-danmaku-setting-left-preventshade input").checked){i.bottomMarginPercent=.15}i.bold=dq(".bilibili-player-video-danmaku-setting-right-font-bold input").checked}catch(t){i={font:"微软雅黑",alpha:.6,duration:t=>{switch(t.type){case 4:case 5:return 4;default:return 6}},blockTypes:[7,8],resolution:{x:1920,y:1080},bottomMarginPercent:.15,bold:false}}const o=new a(i);const l=o.convertToAssDocument(t);return l.generateAss()}async function l(t){const e=n();const a=new i((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(t===true){return new Blob([await o(a.rawXML)],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const s=dq("#danmaku-link");const c=s.getAttribute("href");if(c){URL.revokeObjectURL(c)}s.setAttribute("download",`${e}.${t?"ass":"xml"}`);s.setAttribute("href",r);s.click()}return{export:{downloadDanmaku:l,convertToAss:o},widget:{content:`\n\n\n下载弹幕\n\n`,condition:async()=>{let t=await SpinQuery.select(()=>(unsafeWindow||window).cid);return Boolean(t)},success:()=>{const t=dq("#danmaku-link");const e=dq("#download-danmaku");e.addEventListener("click",n=>{if(n.target!==t){try{e.disabled=true;l(n.shiftKey)}catch(t){logError(t)}finally{e.disabled=false}}})}}}}})(); onlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-subtitle.min.js"] = (()=>{return(t,e)=>{let i;const o=(t,e)=>{const o=document.createElement("a");const n=URL.createObjectURL(new Blob([t]));if(i){URL.revokeObjectURL(i)}i=n;o.setAttribute("href",n);o.setAttribute("download",escapeFilename(e));document.body.appendChild(o);o.click();o.remove()};return{widget:{content:`\n`,condition:videoCondition,success:()=>{const t=dq("#download-subtitle");t.addEventListener("click",async i=>{try{t.disabled=true;const{aid:n,cid:s}=unsafeWindow;if(!n||!s){logError("未找到视频AID和CID");return}const{VideoInfo:l}=await e.importAsync("video-info");const{getFriendlyTitle:c}=await e.importAsync("title");const r=new l(n);r.cid=parseInt(s);await r.fetchInfo();const a=r.subtitles;if(a.length===0){Toast.info("当前视频没有字幕.","下载字幕",3e3);return}const d=await loadSubtitleSettingsPanel();if(!d){logError("未找到字幕设置");return}const u=d.querySelector(".bilibili-player-video-subtitle-setting-lan .bui-select-result").innerHTML;const b=a.find(t=>t.language===u)||a[0];const f=await Ajax.getJson(b.url);const p=f.body;const y=c(true);if(i.shiftKey){const{SubtitleConverter:t,SubtitleSize:i,SubtitleLocation:n}=await e.importAsync("subtitle-converter");const s=d.querySelector(".bilibili-player-video-subtitle-setting-fontsize .bui-thumb");const l=parseFloat(s.style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const c={214:i.VeryLarge,163.5:i.Large,107:i.Medium,50.5:i.Small,0:i.VerySmall};const r=c[l];const a=d.querySelector(".bilibili-player-video-subtitle-setting-color .bui-select-result span:first-child");const u=a.getAttribute("style").match(/background:[ ]*(.+);/)[1];const b=d.querySelector(".bilibili-player-video-subtitle-setting-opacity .bui-bar");const f=parseFloat(b.style.transform.replace(/scaleX\(([\d\.]+)/,"$1"));const g=dq(".subtitle-position");const m={bc:n.BottomCenter,bl:n.BottomLeft,br:n.BottomRight,tc:n.TopCenter,tl:n.TopLeft,tr:n.TopRight};const h=Object.entries(m).filter(([t])=>{return g.classList.contains(`subtitle-position-${t}`)}).map(([,t])=>t).shift();const w=dq("video");const v={title:y,height:w.videoHeight,width:w.videoWidth,color:u,location:h,opacity:f,size:r};const S=new t(v);const L=await S.convertToAss(p);o(L,y+".ass")}else{o(JSON.stringify(p),y+".json")}}catch(t){logError(t)}finally{t.disabled=false}})}}}}})(); diff --git a/min/bundle.json b/min/bundle.json index 38bb69dea..25fea583c 100644 --- a/min/bundle.json +++ b/min/bundle.json @@ -60,8 +60,8 @@ "default-player-layout.min.js": "C6CE64216569A006566ADD7FC69451897612F46CC9641B8B15E0A13D5B1F2455", "default-player-mode.min.js": "244264CF975A8266ABB239C24E5CFEE0E3C918340267571244EE2CDC893D7167", "default-video-quality.min.js": "D423D80B3151ACA49D8F769054E0F839DA2367E7F7C0590EFD60F71B4A6BEADB", - "default-video-speed.min.js": "34E3D2BC8BD5BBC2534EDE6D7B02DE6D5F4A01879641A9E128B4C24124759D77", - "double-click-fullscreen.min.js": "09C035FC7E281ABB042A4200F69757AB093079DBCC9939BE8C53C23EE2EDE41C", + "default-video-speed.min.js": "EBBF43D8013E32AC13C3E9396480574DDC549BA8BC7CCF15FE4EEF2DFEF64F33", + "double-click-fullscreen.min.js": "70CC8EDBA88DFC6BBD0508614EB6910CCF68C00254231F519CCC739368E7C4A6", "download-audio.min.js": "1F4536DE4FF302BFD026CA17E028AF8EB037FB6D0CB355692549DECAEAE0E8C9", "download-danmaku.min.js": "87BC2B39D99E029BB602AB2F59A387FC960D5779791524F8C26FBC0278CD8F8E", "download-subtitle.min.js": "4B99A00FEEA40C6D577AC8BD8DFFD34D91B75E150C7848B965D58B0096DF762C", diff --git a/min/bundle.zip b/min/bundle.zip index 28ad3252609416a6beed072c17f8f7a0d65f798e..4e517b10fb39842ccfd534e3cc3ad32f523db7ef 100644 GIT binary patch delta 2235 zcmZ8i3s6+&72bO<3EaCZVwSyoKwS_FvIqq0Fe(fns6aGnP1AN-9VbC{OSUeHWfw_; zB-*alpn$yg6XmfiAo5L*9wUan)$HXQ9q60w@?Iao7k;WdtG_=f|x%~fm zednC-{QK7Ao=+$D9CQnA(Ji?H+>f~*cL%zIelC|z={~7S*>V2jua9U2jYf-~Ov%?U z_JTpdgHf3 z3oF~i2n4UDAhfK}#fd9z^^uh-GJ?aj>uhGTxxB>cDlKtT*nSx2w7Oh2N1-#xRa{!| z()Vl@Yw-?y{wvm!*x3K7kQJpy;rwm+ji9gYFnC8+@q=kO1X(sREWl0uOb$iav~0i^ zI_U|tPRmZghOux-m8|K}c>9)Y42(|Wq>SfkRG7)iNNh<3_I#)F8Jp9Uly9-bS5EgE1v_*>6or4@kwXM00%zpsmOA3Nrn#_-E#qR$<@Tgf#~z!*5*J-y zw-xM-Hdi>4=Fj$B$-B)J73QD$XJi(IMavS*qGJhRS;7*^vXtcs7ClQCi-ARb%Rghh z*7AR2YdB76k^eIlo{UMe_-_z1$7#DTfz&F>7JR6vqAk+%qJm6O3CBlO6faUR;6h{#WeVTK3pJE24OJ`rk3zUmLy3~J zX8sg0Z;eYeN|^R*9JjFc1my_7#mgrsL;BpOV9ck4;m;>1UiwCt0#lc=0$=(WNlY!7 zq|YuX7`>#Z*jY>Q!hIaBW#?vGsikc~4vckNNj7%YQI=4L<~rIW6yT#eM!w<$MA!2- z`8o>gDNBqWM{hmlNk=|WuMtt1B2`>&&06w^(gf4oGc{y9w{-fg5!qP7!D zJ(Mf`zEg|gPVEZFKDKas$P`r9rPaK|%tuHYEyIa+#_*1ZB7|Ao^l*mOufb-Lr=0M4^N%sWWIhas{6IeU>{%H0BB-hT z(N&h4!eBbZQCD0*#wl7a3YSrKioNt#*n}5pA?{z;M85m}!j%*AZXu^RS3MF>)0U8g zD4oVulwUXp##)AZUQ*G>dg+TNbr^qAr{cvVk$$eM z0KB?hw|HnRa5Phf@H-4N(|W0XSdZ6-^#;r~a~KC!w=ijP@S_%HOAh*4Xp685_gZMX z_}xkTqlIU>vy~F0jwwBArt~V>TG{Oq{@BVPCn2{nZ9DF=?yjCN(8is0v~e*_sA^+Q z&fxtvW@s@Yy|jT5eBaAnZvtM*6*4jErLE%C_b}$=ey6unf;jp&_}jVQ`(9cyH++-u zHip`nxG|&nyqz+|@NuO0Xj9PBH^MX}`HsEF8esx7`MB-fW={umGRMuXV|*dp#6ur# z6~2Y79kf~Utuvr{oq@hu+5pHYhS1=zS1}<4?{-kCup3GzGwm3*b@J$w9jNT2bm1f} z^O0`@yC^##!)egK>olk+=%TffSZctG%V5M{7w>IUxdFlDhH(7L!_UJRMlylOGqg>L z_8So5H<(a)hRw1xYGa}rxnSkxv0WF{#bf(7gl>jEgWPU@nYOG_k-SPZp}(8^KZ$GI z^fWhgHhY88#kOwR4ui zp1GvQdw997qq~RSIeG`Tdw4x#|AfR|=D`M(^z!uVIN!@aj^ZJI#O1d=eLSw+eN2ks zX%#Kg9P>^E5B^*q?*r+L8mHa1K*#wE_xd=)7_|MADp`t**imGRm@gWk#~46msc~`D z1E}h!JTY%S?7cyExO!0ZWJ9psI<@8Jwqg%-cc$MO6SZ5BQRhA3A| z=AYCdN)?j{%l&-)ZM^8`N8?u}((F&Ploao?6qh|(?mzf>QGKz5>R4tmzuWP`t1u6< z(`6J5Gk-3lf0&*Xqw?@zm?0g)#t~k>RvZ{%%Ka4=M%c!J2mBFZT}V5}K$SAQc8=CP Kt{fmH>wf?if)7pr delta 2169 zcmZuydr(x@8Q*&^iMw}M9%1j@4-^o}&|Lx)gH;Pz1TTTkO{M%0#%6RKUS^9m2@^4fpCDsWr(Kh1-(e23S;~uTC8foM6?U`DQemm6u$V20 znNLYxMmDC=cx-PQ4XF84(r7#gVcTJq6pDQx%Lc(-=WCK|)-4EY6@y^?DQWS^qXx4W zW~&c3R!h6K*=N&B4bV$%EuGSjY^@#Ql1~1o1g7)JZ*QB#Aa{b zZZ5?2CG-oa#A?UYIh_SoErt0ecycbUNX#uNbd)U5#mZZ{EV;yNw^%&cFG!jrE#k?N%-JxN(}u!wOy$B;!h_+E9oiWUF@o)RACQ>DrvnGF3Q*~%7O5y zq9}1%kAx~p6=y6sP(|y+Ppvp#MJdt`hh?NYSdItmf8aj}k)g~#AiPwS-F%Q6oBiJj!tQ>-+9<=$?vo}$I?Cvml&HcHQbDWm-> zHj>!D89e*d!p^jqbyWkK{0M^$v_X9FYYa6I!O%$2f)5fJDMfH&eS6BEFT*w$MR_%J=`|?o)+^|6(F$#Lw_cOS{KeW<9<6`67R)Q)dRE|hP^xxw z?>&J_uhKG{0SjEj=X@i5>((Q=Pp>Z4_L+YDgS9o`<##Ae+B2ZX_<(*Xnuoa{2aj>j zRuAj_yze*R-$S_b4u`D6$|hdcV{a2BiC4!k)=_gtq1EE0KcM#rYkm0lF&{BoiX! zqxBdi3H7*kj8;oIBLO%u5}+WanHgfm=4Mt`aI~3wq2RC0v|flpSPSz%0tGFUE)~xN z;M`1ric2l5P=~uMY-|(>t<1;b+kAIBfN-sqOV`@U-tus^mC5!VbZtz%BxJVH8utB0 z8*9Ca3vHCfJn(C$C&ac(@Nehb3)`7kLw~`PC#h){hy6i2k4z0F+nJ5uUNa*3y3vS) z4xYOkli1P0krIw~P>NV)!HQ0%*EfgBmj{F0pF&(GJt2gktdo`Z#48w&S7@>QJdPpa z-IcB`N)V!v*u?~T3FTef%J~AE=_0GJ6W{ZePuFx)s+Yl`XfWYWR5Wzc3TdK5L1?LB z!u4(*zT3Z5U@cby5$KuP6+P_xU1au9x_D<8Sv{P^a1X7L{4{FgRy7n+V5udN`XK*4 z#$(4h*7xw6h;CeV^RqR50n7R* zS^Vyg*xJV(UxLm)?p7lH-p2vGfVh5MZh96%RX;^b2WM4$GRyWB;`q9sIX?Y}N#n@3 z-(yWZz#*;=tc)?9Rh#TZ~%pE}HAUE_7 zYI)Hfsx)az>?Qfga`WKKv4oHY?;%Rij<@qoQMLnj>iK3>pULQRe?afLO&aWPpQq3!KBWPUy#lVM-I{jqpD~3F5p7 zn@;d?7-~=Oki3aM^CInuB#cKgRr%G85}w3MBP;^6j4*M4FGgsScsmWzC&?;hW)NC3 wSoCZMH=ybyhgN{WlgztL%$;QUctoFK`hDj>{wb#Ol`;&UqWFieloRLnUtOW~y#N3J diff --git a/min/default-video-speed.min.js b/min/default-video-speed.min.js index 1852cb985..2bb06d374 100644 --- a/min/default-video-speed.min.js +++ b/min/default-video-speed.min.js @@ -1 +1 @@ -(()=>{return(e,a)=>{const i=a=>{const i=parseFloat(e.defaultVideoSpeed);a.playbackRate=i;SpinQuery.condition(()=>a,()=>a.playbackRate!==i,()=>a.playbackRate=i)};Observer.videoChange(()=>{const e=dq(".bilibili-player-video video");if(!e){return}i(e)})}})(); \ No newline at end of file +(()=>{return(e,a)=>{const i=a=>{const i=parseFloat(e.defaultVideoSpeed);a.playbackRate=i;SpinQuery.condition(()=>a,()=>a.playbackRate!==i,()=>a.playbackRate=i)};Observer.videoChange(async()=>{const e=await SpinQuery.select(".bilibili-player-video video");i(e)})}})(); \ No newline at end of file diff --git a/min/double-click-fullscreen.min.js b/min/double-click-fullscreen.min.js index 711d548e6..3da7ea95a 100644 --- a/min/double-click-fullscreen.min.js +++ b/min/double-click-fullscreen.min.js @@ -1 +1 @@ -(()=>{return(i,e)=>{(async()=>{const e=["https://www.bilibili.com/bangumi/","https://www.bilibili.com/video/"];if(!e.some(i=>document.URL.startsWith(i))){return}if(i.touchVideoPlayer&&i.touchVideoPlayerDoubleTapControl){Toast.info("在开启了播放器触摸支持-启用双击控制后, 双击全屏功能将无效.","提示");i.doubleClickFullscreen=false;return}await SpinQuery.unsafeJquery();const l=await SpinQuery.condition(()=>dq(".bilibili-player-area"),i=>i!==null&&unsafeWindow.$(".bilibili-player-video").data("events"));if(l===null){return}const n="double-click-fullscreen";if(!l.classList.contains(n)){l.classList.add(n);const e=unsafeWindow.$(".bilibili-player-video");const t=i.doubleClickFullscreenPreventSingleClick?e.data("events").click[0].handler:()=>{};const c=new DoubleClickEvent(()=>dq(".bilibili-player-video-btn-fullscreen").click(),i=>t(i));if(i.doubleClickFullscreenPreventSingleClick){e.unbind("click")}c.bind(e[0])}})()}})(); \ No newline at end of file +(()=>{const i=["https://www.bilibili.com/bangumi/","https://www.bilibili.com/video/"];if(!i.some(i=>document.URL.startsWith(i))){return}if(settings.touchVideoPlayer&&settings.touchVideoPlayerDoubleTapControl){Toast.info("在开启了播放器触摸支持-启用双击控制后, 双击全屏功能将无效.","提示");settings.doubleClickFullscreen=false;return}Observer.videoChange(async()=>{await SpinQuery.unsafeJquery();const i=await SpinQuery.condition(()=>dq(".bilibili-player-area"),i=>i!==null&&unsafeWindow.$(".bilibili-player-video").data("events"));if(i===null){return}const e="double-click-fullscreen";if(!i.classList.contains(e)){i.classList.add(e);const l=unsafeWindow.$(".bilibili-player-video");const n=settings.doubleClickFullscreenPreventSingleClick?l.data("events").click[0].handler:()=>{};const s=new DoubleClickEvent(()=>dq(".bilibili-player-video-btn-fullscreen").click(),i=>n(i));if(settings.doubleClickFullscreenPreventSingleClick){l.unbind("click")}s.bind(l[0])}})})(); \ No newline at end of file diff --git a/src/video/default-video-speed.ts b/src/video/default-video-speed.ts index 55350622b..4aedec078 100644 --- a/src/video/default-video-speed.ts +++ b/src/video/default-video-speed.ts @@ -7,10 +7,7 @@ const setPlaybackRate = (video: HTMLVideoElement) => { () => video.playbackRate = speed ) } -Observer.videoChange(() => { - const video = dq('.bilibili-player-video video') as HTMLVideoElement - if (!video) { - return - } +Observer.videoChange(async () => { + const video = await SpinQuery.select('.bilibili-player-video video') as HTMLVideoElement setPlaybackRate(video) }) \ No newline at end of file diff --git a/src/video/double-click-fullscreen.ts b/src/video/double-click-fullscreen.ts index 07a00eb0f..bbd6745ed 100644 --- a/src/video/double-click-fullscreen.ts +++ b/src/video/double-click-fullscreen.ts @@ -1,4 +1,4 @@ -(async () => { +(() => { const supportedUrls = [ 'https://www.bilibili.com/bangumi/', 'https://www.bilibili.com/video/', @@ -11,26 +11,28 @@ settings.doubleClickFullscreen = false return } - await SpinQuery.unsafeJquery() - const playerArea = await SpinQuery.condition( - () => dq('.bilibili-player-area'), - it => it !== null && unsafeWindow.$('.bilibili-player-video').data('events') - ) - if (playerArea === null) { - return - } - const className = 'double-click-fullscreen' - if (!playerArea.classList.contains(className)) { - playerArea.classList.add(className) - const video = unsafeWindow.$('.bilibili-player-video') - const originalClickHandler = settings.doubleClickFullscreenPreventSingleClick ? video.data('events').click[0].handler : () => {} - const doubleClick = new DoubleClickEvent( - () => (dq('.bilibili-player-video-btn-fullscreen') as HTMLDivElement).click(), - e => originalClickHandler(e), + Observer.videoChange(async () => { + await SpinQuery.unsafeJquery() + const playerArea = await SpinQuery.condition( + () => dq('.bilibili-player-area'), + it => it !== null && unsafeWindow.$('.bilibili-player-video').data('events') ) - if (settings.doubleClickFullscreenPreventSingleClick) { - video.unbind('click') + if (playerArea === null) { + return } - doubleClick.bind(video[0]) - } + const className = 'double-click-fullscreen' + if (!playerArea.classList.contains(className)) { + playerArea.classList.add(className) + const video = unsafeWindow.$('.bilibili-player-video') + const originalClickHandler = settings.doubleClickFullscreenPreventSingleClick ? video.data('events').click[0].handler : () => { } + const doubleClick = new DoubleClickEvent( + () => (dq('.bilibili-player-video-btn-fullscreen') as HTMLDivElement).click(), + e => originalClickHandler(e), + ) + if (settings.doubleClickFullscreenPreventSingleClick) { + video.unbind('click') + } + doubleClick.bind(video[0]) + } + }) })() \ No newline at end of file