From 3770fc034624312d887c56d41ac1ba14fe99ebd1 Mon Sep 17 00:00:00 2001 From: the1812 Date: Sat, 26 Jan 2019 15:56:47 +0800 Subject: [PATCH] Refactor SpinQuery --- bilibili-evolved.offline.user.js | 18 +++++++-------- bilibili-evolved.preview-offline.user.js | 18 +++++++-------- bilibili-evolved.preview.user.js | 2 +- bilibili-evolved.user.js | 2 +- min/combo-like.min.js | 2 +- min/default-danmaku-settings.min.js | 2 +- min/default-player-mode.min.js | 2 +- min/default-video-quality.min.js | 2 +- min/download-danmaku.min.js | 2 +- min/download-video.min.js | 2 +- min/view-cover.min.js | 2 +- touch/combo-like.js | 4 ++++ video/default-danmaku-settings.js | 10 +++++++- video/default-player-mode.js | 6 ++++- video/default-video-quality.js | 6 ++++- video/download-danmaku.js | 5 +--- video/download-video/download-video.js | 23 +------------------ .../expand-description/expand-description.js | 12 ---------- video/view-cover/view-cover.js | 11 ++++----- 19 files changed, 56 insertions(+), 75 deletions(-) diff --git a/bilibili-evolved.offline.user.js b/bilibili-evolved.offline.user.js index 7bfedaf1b..e0b6e6ac1 100644 --- a/bilibili-evolved.offline.user.js +++ b/bilibili-evolved.offline.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name Bilibili Evolved (Offline) -// @version 194.00 +// @version 194.01 // @description Bilibili Evolved 的离线版, 所有功能都已内置于脚本中. // @author Grant Howard, Coulomb-G // @copyright 2019, Grant Howrad (https://github.com/the1812) & Coulomb-G (https://github.com/Coulomb-G) @@ -777,7 +777,7 @@ const panel = unsafeWindow.$(selector); if (panel.length === 0) { - throw new Error(`Panel not found:${selector}`); + throw new Error(`Panel not found: ${selector}`); } panel.mouseover().mouseout(); } @@ -1216,15 +1216,15 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/haruna-scale.min.js"] = (()=>{return(n,t)=>{const a="bilibili-haruna-scale";if($(a).length===0){t.applyStyleFromText(`\n \n `)}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/remove-watermark.min.js"] = (()=>{return(i,l)=>{const n="bilibili-live-watermark";if($(`#${n}`).length===0){l.applyStyleFromText(`\n \n `)}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/full-tweets-title.min.js"] = (()=>{return(e,l)=>{l.applyStyle("fullTweetsTitleStyle")}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/view-cover.min.js"] = (()=>{return(e,n)=>{const t=n.attributes.videoInfo.export.VideoInfo;class i{constructor(e){this.url=e;if($(".image-viewer").length===0){this.createDom()}this.viewer=$(".image-viewer-container");this.downloadImage()}createDom(){$("body").append(n.data.imageViewerDom.text);$(".image-viewer-container .close").on("click",()=>this.hide());n.applyStyle("imageViewerStyle")}downloadImage(){const e=new XMLHttpRequest;e.open("GET",this.url.replace("http:","https:"),true);e.responseType="blob";e.onload=(()=>{const n=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const t=URL.createObjectURL(e.response);this.imageData=t;this.viewer.find(".download").attr("href",t).attr("download",n);this.viewer.find(".image").prop("src",t)});e.send()}show(){this.viewer.addClass("opened")}hide(){this.viewer.removeClass("opened")}}if($("meta[itemprop='image'],meta[property='og:image']").length>0){return{widget:{content:`\n \n \n 查看封面\n `,condition:async()=>{const e=await SpinQuery.condition(()=>(unsafeWindow||window).aid,e=>e!==undefined);return e!=="undefined"},success:async()=>{async function e(){const e=(unsafeWindow||window).aid;const n=new t(e);await n.fetchInfo();return n.coverUrl}let n=new i(await e());$("#view-cover").on("click",()=>{n.show()});Observer.childList("#bofqi",async()=>{n=new i(await e())})}}}}else{return{widget:{content:`\n \n \n 查看封面\n `,condition:async()=>{const e=await SpinQuery.any(()=>$(".header-info-ctnr .room-cover"));return typeof e!=="undefined"},success:async()=>{const e=$(".header-info-ctnr .room-cover");const n=e.attr("href").match(/space\.bilibili\.com\/([\d]+)/);if(n&&n[1]){const e=n[1];const t=`https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid=${e}`;const o=await downloadText(t);const a=JSON.parse(o).data.cover;const s=new i(a);$("#view-cover").on("click",()=>{s.show()})}}}}}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/view-cover.min.js"] = (()=>{return(e,t)=>{const n=t.attributes.videoInfo.export.VideoInfo;class i{constructor(e){this.url=e;if($(".image-viewer").length===0){this.createDom()}this.viewer=$(".image-viewer-container");this.downloadImage()}createDom(){$("body").append(t.data.imageViewerDom.text);$(".image-viewer-container .close").on("click",()=>this.hide());t.applyStyle("imageViewerStyle")}downloadImage(){const e=new XMLHttpRequest;e.open("GET",this.url.replace("http:","https:"),true);e.responseType="blob";e.onload=(()=>{const t=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const n=URL.createObjectURL(e.response);this.imageData=n;this.viewer.find(".download").attr("href",n).attr("download",t);this.viewer.find(".image").prop("src",n)});e.send()}show(){this.viewer.addClass("opened")}hide(){this.viewer.removeClass("opened")}}if($("meta[itemprop='image'],meta[property='og:image']").length>0){return{widget:{content:`\n \n \n 查看封面\n `,condition:async()=>{const e=await SpinQuery.select(()=>(unsafeWindow||window).aid);return Boolean(e)},success:async()=>{async function e(){const e=(unsafeWindow||window).aid;const t=new n(e);await t.fetchInfo();return t.coverUrl}let t=new i(await e());$("#view-cover").on("click",()=>{t.show()});Observer.childList("#bofqi",async()=>{t=new i(await e())})}}}}else{return{widget:{content:`\n \n \n 查看封面\n `,condition:async()=>{const e=await SpinQuery.select(()=>document.querySelector(".header-info-ctnr .room-cover"));return Boolean(e)},success:async()=>{const e=$(".header-info-ctnr .room-cover");const t=e.attr("href").match(/space\.bilibili\.com\/([\d]+)/);if(t&&t[1]){const e=t[1];const n=`https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid=${e}`;const o=await downloadText(n);const s=JSON.parse(o).data.cover;const a=new i(s);$("#view-cover").on("click",()=>{a.show()})}}}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/notify-new-version.min.js"] = (()=>{return(e,n)=>{const t={less:-1,equal:0,greater:1,incomparable:NaN};class s{constructor(e){this.parts=e.split(".").map(e=>parseInt(e));this.versionString=e}compareTo(e){for(let n=0;ne.parts[n]){return t.greater}return t.less}if(this.parts.length!==e.parts.length){return t.less}return t.equal}greaterThan(e){return this.compareTo(e)===t.greater}lessThan(e){return this.compareTo(e)===t.less}equals(e){return this.compareTo(e)===t.equal}}const r=new s(n.data.latestVersion.text);const i=new s(e.currentVersion);if(r.greaterThan(i)){const n=`新版本${r.versionString}已发布. 安装查看`;const t=Toast.info(n,"检查更新");$("#new-version-link").on("click",()=>t&&t.dismiss());return{widget:{content:`\n \n \n \n 安装更新\n \n \n \n \n 查看更新\n \n `,success:()=>{$("#new-version-update").on("click",()=>document.querySelector("#new-version-update a").click());$("#new-version-info").on("click",()=>document.querySelector("#new-version-info a").click())}}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/toast.min.js"] = (()=>{return(t,s)=>{class e{constructor(t="",s="",e="default"){this.type=e;this.message=t;this.title=s;this.duration=3e3;this.element=$(this.cardHtml)[0];this.$element=$(this.element);$(".toast-card-container").append(this.$element)}show(){this.element.classList.add("visible");this.$element.find(".toast-card-dismiss").on("click",()=>this.dismiss());if(this.duration){setTimeout(()=>this.dismiss(),this.duration)}}dismiss(){if(this.element.classList.contains("visible")){this.$element.on("transitionend",()=>this.$element.remove());this.element.classList.remove("visible")}}get cardHtml(){return`\n
\n
\n

${this.title}

\n
\n \n
\n
\n
${this.message}
\n
\n `}static get container(){return $(".toast-card-container")}static createToastContainer(){if($(".toast-card-container").length===0){$("body").append(`
`)}}static internalShow(t,s,i,n){const a=new e(t,s,n);a.duration=i;a.show();return a}static show(t,s,e){return this.internalShow(t,s,e,"default")}static info(t,s,e){return this.internalShow(t,s,e,"info")}static success(t,s,e){return this.internalShow(t,s,e,"success")}static error(t,s,e){return this.internalShow(t,s,e,"error")}}s.applyStyle("toastStyle");e.createToastContainer();return{export:e}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/remove-top-mask.min.js"] = (()=>{return(i,n)=>{const l="bilibili-video-top-mask";if($(`#${l}`).length===0){n.applyStyleFromText(`\n \n `)}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/blur-video-control.min.js"] = (()=>{return(r,i)=>{Observer.childList("#bofqi",()=>{SpinQuery.count(()=>$(".bui-slider .bui-track.bui-track-video-progress,.bilibili-player-video-control-bottom"),2,r=>{if(!r.hasClass("video-control-blur-container")){r.addClass("video-control-blur-container");r.prepend(`
`)}})});i.applyStyle("blurVideoControlStyle")}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-schedule.min.js"] = (()=>{return(e,t)=>{class s{constructor(...e){if(e.length===0){const e=new Date;this.hour=e.getHours();this.minute=e.getMinutes()}else if(e.length===1){const[t]=e;[this.hour,this.minute]=t.split(":").slice(0,2).map(e=>this.validatePart(e));this.normalize()}else if(v.length===2){[this.hour,this.minute]=e}}validatePart(e){const t=parseInt(e);if(!isNaN(t)&&0<=t&&t<=59){return t}else{return null}}normalize(){while(this.minute<0){this.minute+=60;this.hour-=1}while(this.minute>=60){this.minute-=60;this.hour+=1}while(this.hour<0){this.hour+=24}while(this.hour>=24){this.hour-=24}}lessThan(e){if(this.houre.hour||this.hour===e.hour&&this.minute>e.minute){return true}return false}equals(e){return this.hour===e.hour&&this.minute===e.minute}isInRange(e,t){if(e.equals(t)){return false}let s=this.greaterThan(e)&&this.lessThan(t);if(e.greaterThan(t)){s=this.greaterThan(e)||this.lessThan(t)}const i=s||this.equals(e);return i}static millisecondsBefore(e){const t=new s;const i=(new Date).getSeconds();const r=1e3*(t.hour*3600+t.minute*60+i);const n=1e3*(e.hour*3600+e.minute*60);let h=n-r;if(t.greaterThan(e)||t.equals(e)&&i!==0){h+=24*3600*1e3}return h}}function i(){if(e.darkSchedule){const t=new s(e.darkScheduleStart);const r=new s(e.darkScheduleEnd);const n=new s;const h=n.isInRange(t,r);if(e.useDarkStyle!==h){e.useDarkStyle=h;saveSettings(e)}let u=0;if(h){u=s.millisecondsBefore(r)}else{u=s.millisecondsBefore(t)}if(u!==0){setTimeout(()=>i(),u)}}}i();return{export:s}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/clear-cache.min.js"] = (()=>{return(n,c)=>{return{widget:{content:`\n \n \n 清除缓存\n `,condition:()=>typeof offlineData==="undefined",success:()=>{$("#clear-cache").on("click",()=>{n.cache={};saveSettings(n);Toast.success("已删除全部缓存.","清除缓存",5e3)})}}}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.js"] = (()=>{return(e,t)=>{const n={entity:null,aid:undefined,cid:undefined};class s{constructor(){this.menuClasses=["quality","action","progress"];this.currentMenuClass="quality"}get menuPanel(){return document.querySelector(".download-video-panel")}addMenuClass(){this.menuPanel.classList.remove(...this.menuClasses);this.menuPanel.classList.add(this.currentMenuClass);return this.currentMenuClass}resetMenuClass(){[this.currentMenuClass]=this.menuClasses;this.addMenuClass()}nextMenuClass(){const e=this.menuClasses.indexOf(this.currentMenuClass)+1;const t=this.menuClasses[e>=this.menuClasses.length?0:e];this.currentMenuClass=t;this.addMenuClass();return t}addError(){this.menuPanel.classList.add("error")}removeError(){this.menuPanel.classList.remove("error");this.resetMenuClass()}async getUrl(e){if(e){return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&qn=${e}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&otype=json`}}}class i extends s{async getUrl(e){if(e){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${n.aid}&cid=${n.cid}&qn=${e}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${n.aid}&cid=${n.cid}&qn=&otype=json`}}}class o{constructor(e,t,n){this.quality=e;this.internalName=t;this.displayName=n}async downloadInfo(){const e=new r(this);await e.fetchVideoInfo();return e}static get availableFormats(){return new Promise((e,t)=>{n.entity.getUrl().then(n=>{const s=new XMLHttpRequest;s.addEventListener("load",()=>{const n=JSON.parse(s.responseText);if(n.code!==0){t("获取清晰度信息失败.")}const i=n.data||n.result||n;const a=i.accept_quality;const r=i.accept_format.split(",");const l=i.accept_description;const c=[];while(a.length>0){const e=new o(a.pop(),r.pop(),l.pop());c.push(e)}e(c)});s.addEventListener("error",()=>t(`获取清晰度信息失败.`));s.withCredentials=true;s.open("GET",n);s.send()})})}}class a{constructor(e,t,n,s){this.length=e;this.size=t;this.url=n;this.backupUrls=s}}class r{constructor(e,t){this.format=e;this.fragments=t||[];this.progress=null;this.loaded=0;this.totalSize=null;this.workingXhr=null;this.fragmentSplitFactor=6*5}fetchVideoInfo(){return new Promise((e,t)=>{n.entity.getUrl(this.format.quality).then(n=>{const s=new XMLHttpRequest;s.addEventListener("load",()=>{const n=JSON.parse(s.responseText.replace(/http:/g,"https:"));const i=n.data||n.result||n;if(i.quality!==this.format.quality){t("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const o=i.durl;this.fragments=o.map(e=>new a(e.length,e.size,e.url,e.backup_url));e(this.fragments)});s.withCredentials=true;s.open("GET",n);s.send()})})}cancelDownload(){if("forEach"in this.workingXhr){this.workingXhr.forEach(e=>e.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(e){const t=[];this.workingXhr=[];const n=Math.round(e.size/this.fragmentSplitFactor);let s=0;while(s{let s=0;const o=new XMLHttpRequest;o.open("GET",e.url);o.responseType="arraybuffer";o.withCredentials=false;o.addEventListener("progress",e=>{this.loaded+=e.loaded-s;s=e.loaded;this.progress&&this.progress(this.loaded/this.totalSize)});o.addEventListener("load",()=>{if((""+o.status)[0]==="2"){t(o.response)}else{n(`请求失败.`)}});o.addEventListener("abort",()=>n("下载已取消."));o.addEventListener("error",()=>n(`下载失败.`));o.setRequestHeader("Range",i);o.send();this.workingXhr.push(o)}));s=Math.round(s+n)+1}return Promise.all(t)}copyUrl(){const e=this.fragments.map(e=>e.url).reduce((e,t)=>e+"\r\n"+t);GM_setClipboard(e,"text")}extension(e){return(e||this.fragments[0]).url.indexOf(".flv")!==-1?".flv":".mp4"}makeBlob(e,t=null){return new Blob(Array.isArray(e)?e:[e],{type:this.extension(t)===".flv"?"video/x-flv":"video/mp4"})}cleanUpOldBlobUrl(){const e=$("a#video-complete").attr("href");if(e&&$(`.link[href=${e}]`).length===0){URL.revokeObjectURL(e)}}downloadSingle(e){const[t]=e;const n=this.makeBlob(t);const s=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","")+this.extension();return[n,s]}async downloadMultiple(e){const t=new JSZip;const n=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");if(e.length>1){e.forEach((e,s)=>{const i=this.fragments[s];t.file(`${n} - ${s+1}${this.extension(i)}`,this.makeBlob(e,i))})}else{const[s]=e;t.file(`${n}${this.extension()}`,this.makeBlob(s))}const s=await t.generateAsync({type:"blob"});const i=n+".zip";return[s,i]}async download(){const e=[];this.loaded=0;this.totalSize=this.fragments.map(e=>e.size).reduce((e,t)=>e+t);for(const t of this.fragments){const n=await this.downloadFragment(t);e.push(n)}if(e.length<1){throw new Error("下载失败.")}let t=null;let n=null;if(e.length===1){[t,n]=this.downloadSingle(e)}else{[t,n]=await this.downloadMultiple(e)}const s=URL.createObjectURL(t);this.cleanUpOldBlobUrl();this.progress&&this.progress(0);return{url:s,filename:n}}}async function l(){const e=await SpinQuery.select(()=>(unsafeWindow||window).aid);const t=await SpinQuery.select(()=>(unsafeWindow||window).cid);n.aid=e;n.cid=t;if(document.URL.indexOf("bangumi")!==-1){n.entity=new i}else{n.entity=new s}return e!==undefined&&t!==undefined}async function c(){let e=await o.availableFormats;let[s]=e;const i=async()=>{await l();e=await o.availableFormats;const t=$("ol.video-quality");t.html("");e.forEach(e=>{$(`
  • ${e.displayName}
  • `).on("click",()=>{s=e;n.entity.nextMenuClass()}).prependTo(t)})};Observer.childList("#bofqi",i);const a=()=>s.downloadInfo().catch(e=>{n.entity.addError();$(".video-error").text(e)});async function r(){if(!s){return}n.entity.nextMenuClass();const e=await a();e.progress=(e=>{$(".download-progress-value").text(`${fixed(e*100)}`);$(".download-progress-foreground").css("transform",`scaleX(${e})`)});document.querySelector(".download-progress-cancel>span").onclick=(()=>e.cancelDownload());const t=await e.download().catch(e=>{n.entity.addError();$(".video-error").text(e)});if(!t){return}const i=document.getElementById("video-complete");i.setAttribute("href",t.url);i.setAttribute("download",t.filename);i.click();const o=`下载完成. 再次保存`;Toast.success(o,"下载视频");n.entity.resetMenuClass()}async function c(){if(!s){return}const e=await a();e.copyUrl();Toast.success("已复制链接到剪贴板.","复制链接",3e3);n.entity.resetMenuClass()}$(".video-action>#video-action-download").on("click",r);$(".video-action>#video-action-copy").on("click",c);t.applyStyle("downloadVideoStyle");const d=document.querySelector(".download-video-panel");const u=()=>$(".download-video-panel").toggleClass("opened");$("#download-video").on("click",e=>{if(!d.contains(e.target)){u()}});$(".video-error").on("click",()=>{$(".video-error").text("");n.entity.removeError()});await SpinQuery.select(()=>document.querySelector(".download-video-panel"));n.entity.addMenuClass()}return{widget:{content:t.data.downloadVideoDom.text,condition:l,success:c}}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-danmaku.min.js"] = (()=>{return(e,t)=>{const{DanmakuInfo:n}=t.import("videoInfo");const{DanmakuConverter:i}=t.import("danmakuConverter");async function o(e,t){const o=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const a=new n((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(t===true){let e={};try{await loadLazyPanel(".bilibili-player-video-danmaku-setting");const t=e=>{const t=parseFloat(document.querySelector(e).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[t];return n};e.font=document.querySelector(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;e.alpha=parseFloat(document.querySelector(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));e.duration=(()=>{const e=[10,8,6,4,2][t(".bilibili-player-setting-speedplus .bui-thumb")];return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();e.blockTypes=(()=>{let e=[];const t={".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"],".bilibili-player-block-filter-type[ftype=special]":[7,8]};for(const[n,i]of Object.entries(t)){if(document.querySelector(n).classList.contains("disabled")){e=e.concat(i)}}return e})();const n=[1.4,1.2,1,.8,.6][t(".bilibili-player-setting-fontsize .bui-thumb")];e.resolution={x:1920*n,y:1080*n};e.bottomMarginPercent=[.75,.5,.25,.15,.15][t(".bilibili-player-setting-area .bui-thumb")];e.bold=document.querySelector(".bilibili-player-video-danmaku-setting-right-font-bold input").checked}catch(t){e={font:"微软雅黑",alpha:.6,duration:e=>{switch(e.type){case 4:case 5:return 4;default:return 6}},blockTypes:[],resolution:{x:1920,y:1080},bottomMarginPercent:.15,bold:false}}const t=new i(e);const n=t.convertToAssDocument(a.rawXML);return new Blob([n.generateAss()],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const c=$("#danmaku-link");const s=c.attr("href");if(s){URL.revokeObjectURL(s)}clearTimeout(e);document.querySelector("#download-danmaku>span").innerHTML="下载弹幕";c.attr("download",`${o}.${t?"ass":"xml"}`).attr("href",r).get(0).click()}return{widget:{content:`\n \n \n 下载弹幕\n \n `,condition:async()=>{let e=await SpinQuery.condition(()=>(unsafeWindow||window).cid,e=>e!==undefined);return e!==undefined},success:()=>{const e=document.querySelector("#danmaku-link");$("#download-danmaku").on("click",t=>{if(t.target!==e){const e=setTimeout(()=>document.querySelector("#download-danmaku>span").innerHTML="请稍侯...",200);o(e,t.shiftKey)}})}}}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.js"] = (()=>{return(e,t)=>{const n={entity:null,aid:undefined,cid:undefined};class s{constructor(){this.menuClasses=["quality","action","progress"];this.currentMenuClass="quality"}get menuPanel(){return document.querySelector(".download-video-panel")}addMenuClass(){this.menuPanel.classList.remove(...this.menuClasses);this.menuPanel.classList.add(this.currentMenuClass);return this.currentMenuClass}resetMenuClass(){[this.currentMenuClass]=this.menuClasses;this.addMenuClass()}nextMenuClass(){const e=this.menuClasses.indexOf(this.currentMenuClass)+1;const t=this.menuClasses[e>=this.menuClasses.length?0:e];this.currentMenuClass=t;this.addMenuClass();return t}addError(){this.menuPanel.classList.add("error")}removeError(){this.menuPanel.classList.remove("error");this.resetMenuClass()}async getUrl(e){if(e){return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&qn=${e}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&otype=json`}}}class i extends s{async getUrl(e){if(e){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${n.aid}&cid=${n.cid}&qn=${e}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${n.aid}&cid=${n.cid}&qn=&otype=json`}}}class o{constructor(e,t,n){this.quality=e;this.internalName=t;this.displayName=n}async downloadInfo(){const e=new r(this);await e.fetchVideoInfo();return e}static get availableFormats(){return new Promise((e,t)=>{n.entity.getUrl().then(n=>{const s=new XMLHttpRequest;s.addEventListener("load",()=>{const n=JSON.parse(s.responseText);if(n.code!==0){t("获取清晰度信息失败.")}const i=n.data||n.result||n;const a=i.accept_quality;const r=i.accept_format.split(",");const l=i.accept_description;const c=[];while(a.length>0){const e=new o(a.pop(),r.pop(),l.pop());c.push(e)}e(c)});s.addEventListener("error",()=>t(`获取清晰度信息失败.`));s.withCredentials=true;s.open("GET",n);s.send()})})}}class a{constructor(e,t,n,s){this.length=e;this.size=t;this.url=n;this.backupUrls=s}}class r{constructor(e,t){this.format=e;this.fragments=t||[];this.progress=null;this.loaded=0;this.totalSize=null;this.workingXhr=null;this.fragmentSplitFactor=6*5}fetchVideoInfo(){return new Promise((e,t)=>{n.entity.getUrl(this.format.quality).then(n=>{const s=new XMLHttpRequest;s.addEventListener("load",()=>{const n=JSON.parse(s.responseText.replace(/http:/g,"https:"));const i=n.data||n.result||n;if(i.quality!==this.format.quality){t("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const o=i.durl;this.fragments=o.map(e=>new a(e.length,e.size,e.url,e.backup_url));e(this.fragments)});s.withCredentials=true;s.open("GET",n);s.send()})})}cancelDownload(){if("forEach"in this.workingXhr){this.workingXhr.forEach(e=>e.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(e){const t=[];this.workingXhr=[];const n=Math.round(e.size/this.fragmentSplitFactor);let s=0;while(s{let s=0;const o=new XMLHttpRequest;o.open("GET",e.url);o.responseType="arraybuffer";o.withCredentials=false;o.addEventListener("progress",e=>{this.loaded+=e.loaded-s;s=e.loaded;this.progress&&this.progress(this.loaded/this.totalSize)});o.addEventListener("load",()=>{if((""+o.status)[0]==="2"){t(o.response)}else{n(`请求失败.`)}});o.addEventListener("abort",()=>n("下载已取消."));o.addEventListener("error",()=>n(`下载失败.`));o.setRequestHeader("Range",i);o.send();this.workingXhr.push(o)}));s=Math.round(s+n)+1}return Promise.all(t)}copyUrl(){const e=this.fragments.map(e=>e.url).reduce((e,t)=>e+"\r\n"+t);GM_setClipboard(e,"text")}extension(e){return(e||this.fragments[0]).url.indexOf(".flv")!==-1?".flv":".mp4"}makeBlob(e,t=null){return new Blob(Array.isArray(e)?e:[e],{type:this.extension(t)===".flv"?"video/x-flv":"video/mp4"})}cleanUpOldBlobUrl(){const e=$("a#video-complete").attr("href");if(e&&$(`.link[href=${e}]`).length===0){URL.revokeObjectURL(e)}}downloadSingle(e){const[t]=e;const n=this.makeBlob(t);const s=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","")+this.extension();return[n,s]}async downloadMultiple(e){const t=new JSZip;const n=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");if(e.length>1){e.forEach((e,s)=>{const i=this.fragments[s];t.file(`${n} - ${s+1}${this.extension(i)}`,this.makeBlob(e,i))})}else{const[s]=e;t.file(`${n}${this.extension()}`,this.makeBlob(s))}const s=await t.generateAsync({type:"blob"});const i=n+".zip";return[s,i]}async download(){const e=[];this.loaded=0;this.totalSize=this.fragments.map(e=>e.size).reduce((e,t)=>e+t);for(const t of this.fragments){const n=await this.downloadFragment(t);e.push(n)}if(e.length<1){throw new Error("下载失败.")}let t=null;let n=null;if(e.length===1){[t,n]=this.downloadSingle(e)}else{[t,n]=await this.downloadMultiple(e)}const s=URL.createObjectURL(t);this.cleanUpOldBlobUrl();this.progress&&this.progress(0);return{url:s,filename:n}}}async function l(){const e=await SpinQuery.select(()=>(unsafeWindow||window).aid);const t=await SpinQuery.select(()=>(unsafeWindow||window).cid);n.aid=e;n.cid=t;if(document.URL.indexOf("bangumi")!==-1){n.entity=new i}else{n.entity=new s}return Boolean(e&&t)}async function c(){let e=await o.availableFormats;let[s]=e;const i=async()=>{await l();e=await o.availableFormats;const t=$("ol.video-quality");t.html("");e.forEach(e=>{$(`
  • ${e.displayName}
  • `).on("click",()=>{s=e;n.entity.nextMenuClass()}).prependTo(t)})};Observer.childList("#bofqi",i);const a=()=>s.downloadInfo().catch(e=>{n.entity.addError();$(".video-error").text(e)});async function r(){if(!s){return}n.entity.nextMenuClass();const e=await a();e.progress=(e=>{$(".download-progress-value").text(`${fixed(e*100)}`);$(".download-progress-foreground").css("transform",`scaleX(${e})`)});document.querySelector(".download-progress-cancel>span").onclick=(()=>e.cancelDownload());const t=await e.download().catch(e=>{n.entity.addError();$(".video-error").text(e)});if(!t){return}const i=document.getElementById("video-complete");i.setAttribute("href",t.url);i.setAttribute("download",t.filename);i.click();const o=`下载完成. 再次保存`;Toast.success(o,"下载视频");n.entity.resetMenuClass()}async function c(){if(!s){return}const e=await a();e.copyUrl();Toast.success("已复制链接到剪贴板.","复制链接",3e3);n.entity.resetMenuClass()}$(".video-action>#video-action-download").on("click",r);$(".video-action>#video-action-copy").on("click",c);t.applyStyle("downloadVideoStyle");const d=document.querySelector(".download-video-panel");const u=()=>$(".download-video-panel").toggleClass("opened");$("#download-video").on("click",e=>{if(!d.contains(e.target)){u()}});$(".video-error").on("click",()=>{$(".video-error").text("");n.entity.removeError()});await SpinQuery.select(()=>document.querySelector(".download-video-panel"));n.entity.addMenuClass()}return{widget:{content:t.data.downloadVideoDom.text,condition:l,success:c}}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-danmaku.min.js"] = (()=>{return(e,t)=>{const{DanmakuInfo:n}=t.import("videoInfo");const{DanmakuConverter:i}=t.import("danmakuConverter");async function o(e,t){const o=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const a=new n((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(t===true){let e={};try{await loadLazyPanel(".bilibili-player-video-danmaku-setting");const t=e=>{const t=parseFloat(document.querySelector(e).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[t];return n};e.font=document.querySelector(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;e.alpha=parseFloat(document.querySelector(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));e.duration=(()=>{const e=[10,8,6,4,2][t(".bilibili-player-setting-speedplus .bui-thumb")];return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();e.blockTypes=(()=>{let e=[];const t={".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"],".bilibili-player-block-filter-type[ftype=special]":[7,8]};for(const[n,i]of Object.entries(t)){if(document.querySelector(n).classList.contains("disabled")){e=e.concat(i)}}return e})();const n=[1.4,1.2,1,.8,.6][t(".bilibili-player-setting-fontsize .bui-thumb")];e.resolution={x:1920*n,y:1080*n};e.bottomMarginPercent=[.75,.5,.25,.15,.15][t(".bilibili-player-setting-area .bui-thumb")];e.bold=document.querySelector(".bilibili-player-video-danmaku-setting-right-font-bold input").checked}catch(t){e={font:"微软雅黑",alpha:.6,duration:e=>{switch(e.type){case 4:case 5:return 4;default:return 6}},blockTypes:[],resolution:{x:1920,y:1080},bottomMarginPercent:.15,bold:false}}const t=new i(e);const n=t.convertToAssDocument(a.rawXML);return new Blob([n.generateAss()],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const c=$("#danmaku-link");const s=c.attr("href");if(s){URL.revokeObjectURL(s)}clearTimeout(e);document.querySelector("#download-danmaku>span").innerHTML="下载弹幕";c.attr("download",`${o}.${t?"ass":"xml"}`).attr("href",r).get(0).click()}return{widget:{content:`\n \n \n 下载弹幕\n \n `,condition:async()=>{let e=await SpinQuery.select(()=>(unsafeWindow||window).cid);return e!==undefined},success:()=>{const e=document.querySelector("#danmaku-link");$("#download-danmaku").on("click",t=>{if(t.target!==e){const e=setTimeout(()=>document.querySelector("#download-danmaku>span").innerHTML="请稍侯...",200);o(e,t.shiftKey)}})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/danmaku-converter.min.js"] = (()=>{return(t,e)=>{class i{constructor(t,e,i,s,n){this.content=t;this.time=e;this.type=parseInt(i);this.fontSize=parseFloat(s);this.color=parseInt(n)}}class s extends i{constructor({content:t,time:e,type:i,fontSize:s,color:n,timeStamp:r,pool:a,userHash:o,rowId:c}){super(t,e,i,s,n);this.timeStamp=parseInt(r);this.pool=parseInt(a);this.userHash=o;this.rowId=parseInt(c);this.time=parseFloat(this.time);this.pDataArray=[e,i,s,n,r,a,o,c]}text(){const t=this.pDataArray.join(",");return`${this.content}`}static parse(t){const e=t.getAttribute("p");const[i,n,r,a,o,c,h,l]=e.split(",");const u=t.innerHTML;return new s({content:u,time:i,type:n,fontSize:r,color:a,timeStamp:o,pool:c,userHash:h,rowId:l})}}class n{constructor(t){this.xml=t;const e=(new DOMParser).parseFromString(t,"application/xml").documentElement;this.danmakus=[...e.querySelectorAll("d[p]")].map(t=>s.parse(t))}}class r extends i{constructor({content:t,time:e,type:i,fontSize:s,color:n,typeTag:r,colorTag:a,endTime:o}){super(t,e,i,s,n);this.typeTag=r;this.colorTag=a;this.endTime=o}text(t){const e=t[this.fontSize].match(/Style:(.*?),/)[1].trim();return`Dialogue: 0,${this.time},${this.endTime},${e},,0,0,0,,{${this.typeTag}${this.colorTag}}${this.content}`}}class a{constructor({danmakus:t,title:e,fontStyles:i,blockTypes:s,resolution:n}){this.danmakus=t;this.title=e;this.fontStyles=i;this.blockTypes=s;this.resolution=n}generateAss(){const t=`\n[Script Info]\n; Script generated by Bilibili Evolved Danmaku Converter\n; https://github.com/the1812/Bilibili-Evolved/\nTitle: ${this.title}\nScriptType: v4.00+\nPlayResX: ${this.resolution.x}\nPlayResY: ${this.resolution.y}\nTimer: 10.0000\nWrapStyle: 2\nScaledBorderAndShadow: no\n\n[V4+ Styles]\nFormat: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding\n${Object.values(this.fontStyles).join("\n")}\n\n[Events]\nFormat: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\n `.trim();return t+"\n"+this.danmakus.map(t=>t.text(this.fontStyles,this.blockTypes)).filter(t=>t!=="").join("\n")}}class o{constructor(t,e,i,s){this.horizontalDanmakus=[];this.horizontalTrack=[];this.verticalDanmakus=[];this.verticalTrack=[];this.resolution=e;this.duration=i;this.canvas=document.createElement("canvas");this.context=this.canvas.getContext("2d");this.fontSizes={25:`52px ${t}`,18:`36px ${t}`};this.danmakuType={1:"normal",2:"normal",3:"normal",4:"bottom",5:"top",6:"reversed",7:"special",8:"special"};this.bottomMarginPercent=s;this.margin=4;this.nextDanmakuDelay=.05;this.generateTracks()}generateTracks(){const t=52;this.danmakuHeight=t;this.trackHeight=this.margin*2+t;this.trackCount=parseInt(fixed(this.resolution.y*(1-this.bottomMarginPercent)/this.trackHeight,0))}getTextSize(t){this.context.font=this.fontSizes[t.fontSize];const e=this.context.measureText(t.content);const i=e.width/2;return[i,this.danmakuHeight/2]}getTags(t,{targetTrack:e,initTrack:i,nextTrack:s,isClosestDanmaku:n,getTrackItem:r,getTag:a}){const[o,c]=this.getTextSize(t);const h=o*2;const l=this.duration(t)*h/(this.resolution.x+h)+this.nextDanmakuDelay;let u=i;let m=null;do{m=e.find(t=>n({it:t,track:u,width:h}));u+=s}while(m&&u<=this.trackCount&&u>=0);if(u>this.trackCount||u<0){return`\\pos(0,-999)`}u-=s;e.push(r({track:u,width:h,visibleTime:l}));return a({track:u,x:o,y:c})}getHorizonalTags(t){return this.getTags(t,{targetTrack:this.horizontalTrack,initTrack:0,nextTrack:1,isClosestDanmaku:({it:e,track:i,width:s})=>{if(e.track!==i){return false}if(e.widtht.time}},getTrackItem:({track:e,width:i,visibleTime:s})=>{return{width:i,start:t.time,visible:t.time+s,end:t.time+this.duration(t),track:e}},getTag:({track:e,x:i,y:s})=>{return`\\move(${this.resolution.x+i},${e*this.trackHeight+this.margin+s},${-i},${e*this.trackHeight+this.margin+s},0,${this.duration(t)*1e3})`}})}getVerticalTags(t){const e=this.danmakuType[t.type]==="top";return this.getTags(t,{targetTrack:this.verticalTrack,initTrack:e?0:this.trackCount-1,nextTrack:e?1:-1,isClosestDanmaku:({it:e,track:i})=>{if(e.track!==i){return false}return e.end>t.time},getTrackItem:({track:e})=>{return{start:t.time,end:t.time+this.duration(t),track:e}},getTag:({track:t,y:i})=>{if(e){return`\\pos(${this.resolution.x/2},${t*this.trackHeight+this.margin+i})`}else{return`\\pos(${this.resolution.x/2},${this.resolution.y-this.margin-i-(this.trackCount-1-t)*this.trackHeight})`}}})}push(t){let e=null;let i=null;switch(this.danmakuType[t.type]){case"normal":case"reversed":{e=this.getHorizonalTags(t);i=this.horizontalDanmakus;break}case"top":case"bottom":{e=this.getVerticalTags(t);i=this.verticalDanmakus;break}case"special":default:{return{tags:`\\pos(0,-999)`}}}const s={tags:e};i.push(s);return s}}class c{constructor({title:t,font:e,alpha:i,duration:s,blockTypes:n,resolution:r,bottomMarginPercent:a,bold:c}){this.title=t;this.font=e;this.alpha=Math.round(i*100);this.duration=s;this.blockTypes=n;this.resolution=r;this.bold=c;this.white=16777215;this.danmakuStack=new o(e,r,s,a)}get fontStyles(){return{25:`Style: Medium,${this.font},52,&H${this.alpha}FFFFFF,&H${this.alpha}FFFFFF,&H${this.alpha}000000,&H${this.alpha}000000,${this.bold?"1":"0"},0,0,0,100,100,0,0,1,1.2,0,5,0,0,0,0`,18:`Style: Small,${this.font},36,&H${this.alpha}FFFFFF,&H${this.alpha}FFFFFF,&H${this.alpha}000000,&H${this.alpha}000000,${this.bold?"1":"0"},0,0,0,100,100,0,0,1,1.2,0,5,0,0,0,0`}}convertToAssDocument(t){const e=new n(t);const i=[];for(const t of e.danmakus.sort((t,e)=>t.time-e.time)){if(this.blockTypes.indexOf(t.type)!==-1||this.blockTypes.indexOf("color")!==-1&&t.color!==this.white){continue}const[e,s]=this.convertTime(t.time,this.duration(t));i.push(new r({content:this.convertText(t.content),time:e,endTime:s,type:t.type,fontSize:t.fontSize,color:t.color,typeTag:this.convertType(t),colorTag:this.convertColor(t.color)}))}return new a({danmakus:i,title:this.title,blockTypes:this.blockTypes,fontStyles:this.fontStyles,resolution:this.resolution})}convertText(t){const e={"{":"{","}":"}","&":"&","<":"<",">":">",""":'"',"'":"'"};for(const[i,s]of Object.entries(e)){t=t.replace(new RegExp(i,"g"),s)}return t}convertType(t){return this.danmakuStack.push(t).tags}convertColor(t){if(t===this.white){return""}const e=t.toString(16);const i=e.substring(0,2);const s=e.substring(2,4);const n=e.substring(4,6);return`\\c&H${n}${s}${i}&`}convertTime(t,e){function i(t){const[e,i="00"]=String(t).split(".");return`${e.padStart(2,"0")}.${i.substr(0,2).padEnd(2,"0")}`}function s(t){let e=0;let s=0;while(t>=60){t-=60;s++}while(s>=60){s-=60;e++}return`${e}:${String(s).padStart(2,"0")}:${i(t)}`}return[s(t),s(t+e)]}}return{export:{AssDanmaku:r,AssDanmakuDocument:a,Danmaku:i,DanmakuConverter:c,DanmakuStack:o,XmlDanmaku:s,XmlDanmakuDocument:n}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/video-info.min.js"] = (()=>{return()=>{class t{constructor(t){this.aid=t}async fetchInfo(){const t=JSON.parse(await downloadText(`https://api.bilibili.com/x/web-interface/view?aid=${this.aid}`));if(t.code!==0){throw new Error(t.message)}const i=t.data;this.cid=i.cid;this.pageCount=i.videos;this.coverUrl=i.pic;this.tagId=i.tid;this.tagName=i.tname;this.title=i.title;this.description=i.desc;this.up={uid:i.owner.mid,name:i.owner.name,faceUrl:i.owner.face};this.pages=i.pages.map(t=>{return{cid:t.cid,title:t.part,pageNumber:t.page}});return this}async fetchDanmaku(){this.danmaku=new e(this.cid);return this.danmaku.fetchInfo()}}class i{constructor(t,i){this.text=t;this.p=i}}class e{constructor(t){this.cid=t}async fetchInfo(){const t=await downloadText(`https://api.bilibili.com/x/v1/dm/list.so?oid=${this.cid}`);this.rawXML=t;const e=(new DOMParser).parseFromString(t,"application/xml").documentElement;this.xml=e;this.danmakus=[].map.call(e.querySelectorAll("d[p]"),t=>{return new i(t.innerHTML,t.getAttribute("p"))})}}class a{constructor(t){this.ep=t;this.videos=[]}async fetchInfo(){const i=await downloadText(`https://www.bilibili.com/bangumi/play/ep${this.ep}/`);const e=JSON.parse(i.match(/window\.__INITIAL_STATE__=(.*);\(function\(\){/)[1]);this.title=e.mediaInfo.title;this.cover=e.mediaInfo.cover;this.squareCover=e.mediaInfo.square_cover;this.aid=e.epInfo.aid;this.cid=e.epInfo.cid;this.videos=e.epList.map(async i=>{return{title:i.index_title,aid:i.aid,cid:i.cid,info:await new t(i.aid).fetchInfo()}});return this}}return{export:{VideoInfo:t,BangumiInfo:a,Danmaku:i,DanmakuInfo:e}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/about.min.html"] = `

    Bilibili Evolved

    开源组件

      `; @@ -1232,13 +1232,13 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/about.min.js"] = (()=>{return(e,i)=>{$("body").append(i.data.aboutDom.text);const n=GM_info.script.name.replace("Bilibili Evolved","").replace(/^[\(\) ]+|[\(\) ]+$/g,"")+" · "+e.currentVersion;$(".bilibili-evolved-version").text(n);const o=[{name:"jQuery",homepage:"https://jquery.com/",license:"MIT",version:"3.2.1"},{name:"JSZip",homepage:"https://stuk.github.io/jszip/",license:"MIT",version:"3.1.5"}];o.forEach(e=>{$(".open-source-components").append(`\n
    • \n \n
      ${e.name}
      \n
      ${e.version} · ${e.license}
      \n
      \n
    • \n `)});function t(){$("#about-close").on("click",()=>{$(".bilibili-evolved-about").toggleClass("opened")});$(".gui-settings").on("click",e=>{if(e.shiftKey===true){$(".bilibili-evolved-about").toggleClass("opened")}})}return{widget:{success:t}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/custom-control-background.min.css"] = `.bilibili-player-video-control-mask{background:0 0!important}.bilibili-player-video-control-bottom,.bui-slider .bui-track.bui-track-video-progress .bui-bar-wrap{background:rgba(0,0,0,var(--custom-control-background-opacity))!important}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/custom-control-background.min.js"] = (()=>{return(o,t)=>{if(o.customControlBackgroundOpacity>0){t.applyStyle("customControlBackgroundStyle");if(!o.touchVideoPlayer){t.applyImportantStyleFromText(`\n\n `)}}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-player-mode.min.js"] = (()=>{return(e,i)=>{const n=[{name:"常规",action:()=>{}},{name:"宽屏",action:()=>{$(".bilibili-player-video-btn-widescreen").click()}},{name:"网页全屏",action:()=>{$(".bilibili-player-video-web-fullscreen").click()}}];let l=()=>{};async function t(){if(e.autoLightOff){await SpinQuery.unsafeJquery();const e=await SpinQuery.any(()=>unsafeWindow.$(".bilibili-player-video-btn-setting"));e.mouseover().mouseout();l=(()=>{SpinQuery.any(()=>$(".bilibili-player-video-btn-setting-panel-others-content-lightoff .bui-checkbox-input"),e=>{const i=e[0];i.checked=true;raiseEvent(i,"change")})})}}async function a(){await t();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.length===0){return}const a=n.find(i=>i.name===e.defaultPlayerMode);if(a.name==="全屏"){const e=await SpinQuery.unsafeJquery();const i=document.querySelector(".bilibili-player-video-btn-start");const n=()=>{const l=e(".bilibili-player-video-btn-fullscreen").data("events");if(l.click&&l.click[0]&&l.click[0].handler){const i=e(".bilibili-player-video-btn-fullscreen").data("events").click[0].handler;console.log(i);i()}i.removeEventListener("click",n)};i.addEventListener("click",n)}else{const n=()=>{if(a&&$("#bilibiliPlayer[class*=mode-]").length===0){a.action()}l();if(e.applyPlayerModeOnPlay){i.removeEventListener("play",n)}};if(e.applyPlayerModeOnPlay){i.addEventListener("play",n)}else{n()}}}Observer.childList("#bofqi",()=>a())}})(); -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"));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[o]=t.map(e=>e.value).filter(e=>e<=Math.min(l,n)).sort(i);console.info(`[Video Quality] availableHighestQualities=${n}`);console.info(`[Video Quality] targetQuality=${l}`);console.info(`[Video Quality] finalQuality=${o}`);const u=await SpinQuery.condition(()=>document.querySelector("video"),e=>e);function s(){a.each((e,a)=>{if(parseInt(a.getAttribute("data-value"))===o){a.click()}});this.removeEventListener("play",s)}u.addEventListener("play",s)}Observer.childList("#bofqi",()=>i())}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/combo-like.min.js"] = (()=>{return(e,t)=>{(async()=>{const e=await SpinQuery.select(()=>document.querySelector(".ops span.like"));e.style.userSelect="none";function t(t,n){const s=new CustomEvent(t,n);e.dispatchEvent(s)}const n=200;let s=true;e.addEventListener("touchstart",e=>{e.preventDefault();s=true;setTimeout(()=>s=false,n);t("mousedown",e)});e.addEventListener("touchend",e=>{e.preventDefault();t("mouseup",e);if(s===true){t("click",e)}})})()}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-player-mode.min.js"] = (()=>{return(e,i)=>{const n=[{name:"常规",action:()=>{}},{name:"宽屏",action:()=>{$(".bilibili-player-video-btn-widescreen").click()}},{name:"网页全屏",action:()=>{$(".bilibili-player-video-web-fullscreen").click()}}];let t=()=>{};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();t=(()=>{SpinQuery.any(()=>$(".bilibili-player-video-btn-setting-panel-others-content-lightoff .bui-checkbox-input"),e=>{const i=e[0];i.checked=true;raiseEvent(i,"change")})})}}async function a(){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 a=n.find(i=>i.name===e.defaultPlayerMode);if(a.name==="全屏"){const e=await SpinQuery.unsafeJquery();const i=document.querySelector(".bilibili-player-video-btn-start");const n=()=>{const t=e(".bilibili-player-video-btn-fullscreen").data("events");if(t.click&&t.click[0]&&t.click[0].handler){const i=e(".bilibili-player-video-btn-fullscreen").data("events").click[0].handler;console.log(i);i()}i.removeEventListener("click",n)};i.addEventListener("click",n)}else{const n=()=>{if(a&&$("#bilibiliPlayer[class*=mode-]").length===0){a.action()}t();if(e.applyPlayerModeOnPlay){i.removeEventListener("play",n)}};if(e.applyPlayerModeOnPlay){i.addEventListener("play",n)}else{n()}}}Observer.childList("#bofqi",()=>a())}})(); +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[l]=a.toArray().map(e=>parseInt(e.getAttribute("data-value"))).sort(i);const[n]=t.filter(a=>a.name===e.defaultVideoQuality).map(e=>e.value).sort(i);const[u]=t.map(e=>e.value).filter(e=>e<=Math.min(n,l)).sort(i);console.info(`[Video Quality] availableHighestQualities=${l}`);console.info(`[Video Quality] targetQuality=${n}`);console.info(`[Video Quality] finalQuality=${u}`);const o=await SpinQuery.select(()=>document.querySelector("video"));function s(){a.each((e,a)=>{if(parseInt(a.getAttribute("data-value"))===u){a.click()}});this.removeEventListener("play",s)}o.addEventListener("play",s)}Observer.childList("#bofqi",()=>i())}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/combo-like.min.js"] = (()=>{return(e,t)=>{(async()=>{const e=await SpinQuery.select(()=>document.querySelector(".ops span.like"));if(!e){return}e.style.userSelect="none";function t(t,n){const u=new CustomEvent(t,n);e.dispatchEvent(u)}const n=200;let u=true;e.addEventListener("touchstart",e=>{e.preventDefault();u=true;setTimeout(()=>u=false,n);t("mousedown",e)});e.addEventListener("touchend",e=>{e.preventDefault();t("mouseup",e);if(u===true){t("click",e)}})})()}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/auto-continue.min.js"] = (()=>{return(i,t)=>{function e(i){const t=/((\d)*:)?(\d)*:(\d)*/g;const e=i.text();const n=e.match(t);if(!n){return}const r=n[0].split(":");const o=(()=>{if(r.length===3){const[i,t,e]=r.map(i=>parseInt(i));return i*60*60+t*60+e}else if(r.length===2){const[i,t]=r.map(i=>parseInt(i));return i*60+t}else{logError(`解析历史时间发生错误: historyTime=${JSON.stringify(r)}`);return NaN}})();const s=i.parent();const l=document.querySelector("video");if(o从头开始`);t.appendTo(s).on("click",()=>l.currentTime=0);i.html(`已跳转到上次历史记录${n[0]}`)}else{s.find(".bilibili-player-video-toast-item-close").get(0).click()}}function n(){SpinQuery.condition(()=>$(".bilibili-player-video-toast-item-text"),i=>i.text().indexOf("上次看到")!==-1,i=>e(i.filter((i,t)=>t.innerText.indexOf("上次看到")!==-1)))}Observer.childList("#bofqi",n)}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/expand-description.min.css"] = `.video-desc .info{height:auto!important}.video-desc .btn{display:none!important}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/expand-description.min.js"] = (()=>{return(e,p)=>{p.applyStyle("expandDescriptionStyle")}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-danmaku-settings.min.js"] = (()=>{return(e,n)=>{async function t(e,n){const t=await SpinQuery.select(()=>document.querySelector(e));if(!t){return}t.checked=n;raiseEvent(t,"change")}const i={enableDanmaku:".bilibili-player-video-danmaku-switch>input",settingsIcon:".bilibili-player-video-danmaku-setting"};if(!e.enableDanmaku){t(i.enableDanmaku,false)}if(e.rememberDanmakuBlock){for(const n in e.danmakuBlockSettings){i[n]=`.bilibili-player-block-filter-type[ftype=${n}]`}async function a(){await SpinQuery.unsafeJquery();const n=await SpinQuery.any(()=>unsafeWindow.$(i.settingsIcon));n.mouseover().mouseout();for(const[n,t]of Object.entries(e.danmakuBlockSettings)){if(t===true){const e=await SpinQuery.select(()=>document.querySelector(i[n]));e.click()}}}async function c(){for(const n in e.danmakuBlockSettings){const t=await SpinQuery.select(()=>document.querySelector(i[n]));t.addEventListener("click",()=>{e.danmakuBlockSettings[n]=t.classList.contains("disabled");saveSettings(e)})}}a();c()}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-danmaku-settings.min.js"] = (()=>{return(e,n)=>{async function t(e,n){const t=await SpinQuery.select(()=>document.querySelector(e));if(!t){return}t.checked=n;raiseEvent(t,"change")}const i={enableDanmaku:".bilibili-player-video-danmaku-switch>input",settingsIcon:".bilibili-player-video-danmaku-setting"};if(!e.enableDanmaku){t(i.enableDanmaku,false)}if(e.rememberDanmakuBlock){for(const n in e.danmakuBlockSettings){i[n]=`.bilibili-player-block-filter-type[ftype=${n}]`}async function a(){await SpinQuery.unsafeJquery();const n=await SpinQuery.any(()=>unsafeWindow.$(i.settingsIcon));if(!n){return}n.mouseover().mouseout();for(const[n,t]of Object.entries(e.danmakuBlockSettings)){if(t===true){const e=await SpinQuery.select(()=>document.querySelector(i[n]));e.click()}}}async function c(){for(const n in e.danmakuBlockSettings){const t=await SpinQuery.select(()=>document.querySelector(i[n]));if(!t){return}t.addEventListener("click",()=>{e.danmakuBlockSettings[n]=t.classList.contains("disabled");saveSettings(e)})}}a();c()}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/skip-charge-list.min.css"] = `.bilibili-player .bilibili-player-area .bilibili-player-electric-panel{display:none!important}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/skip-charge-list.min.js"] = (()=>{return(e,c)=>{function i(){const e=document.querySelector(".bilibili-player-electric-panel-jump");e&&e.click()}SpinQuery.select(()=>document.querySelector("#bofqi")).then(()=>{Observer.childListSubtree("#bofqi",()=>i())})}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-player-layout.min.js"] = (()=>{return(e,t)=>{(async()=>{const t=await SpinQuery.select(()=>document.querySelector(`input[key=defaultPlayerLayout]`));const o=await SpinQuery.select(()=>document.querySelector(`input[key=defaultBangumiLayout]`));if(!t||!o){logError("无法加载播放器布局选项.");return}class s{setCookie(e,t){document.cookie=`${e}=${t};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")}useNewLayout(){}useOldLayout(){}setLayout(e){if(e){this.useNewLayout()}else{this.useOldLayout()}}}class i extends s{checkCookies(){const t=this.getValue(this.cookieKey);if(t===""||parseInt(t)<0){e.defaultPlayerLayout="旧版"}else{e.defaultPlayerLayout="新版"}saveSettings(e)}constructor(){super();this.cookieKey="stardustvideo";this.checkCookies()}useNewLayout(){this.setCookie(this.cookieKey,1)}useOldLayout(){this.setCookie(this.cookieKey,-1)}}class u extends s{checkCookies(){const t=this.getValue(this.cookieKey);if(t===""||parseInt(t)<=0){e.defaultBangumiLayout="旧版"}else{e.defaultBangumiLayout="新版"}saveSettings(e)}constructor(){super();this.cookieKey="stardustpgcv";this.checkCookies()}useNewLayout(){this.setCookie(this.cookieKey,"0606")}useOldLayout(){this.setCookie(this.cookieKey,0)}}const a=new i;$(t).on("input",()=>{a.setLayout(t.value==="新版")});const c=new u;$(o).on("input",()=>{c.setLayout(o.value==="新版")})})()}})(); diff --git a/bilibili-evolved.preview-offline.user.js b/bilibili-evolved.preview-offline.user.js index 61c910ee2..0581faed1 100644 --- a/bilibili-evolved.preview-offline.user.js +++ b/bilibili-evolved.preview-offline.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name Bilibili Evolved (Preview Offline) -// @version 194.00 +// @version 194.01 // @description Bilibili Evolved 的预览离线版, 可以抢先体验新功能, 并且所有功能都已内置于脚本中. // @author Grant Howard, Coulomb-G // @copyright 2019, Grant Howrad (https://github.com/the1812) & Coulomb-G (https://github.com/Coulomb-G) @@ -777,7 +777,7 @@ const panel = unsafeWindow.$(selector); if (panel.length === 0) { - throw new Error(`Panel not found:${selector}`); + throw new Error(`Panel not found: ${selector}`); } panel.mouseover().mouseout(); } @@ -1216,15 +1216,15 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/haruna-scale.min.js"] = (()=>{return(n,t)=>{const a="bilibili-haruna-scale";if($(a).length===0){t.applyStyleFromText(`\n \n `)}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/remove-watermark.min.js"] = (()=>{return(i,l)=>{const n="bilibili-live-watermark";if($(`#${n}`).length===0){l.applyStyleFromText(`\n \n `)}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/full-tweets-title.min.js"] = (()=>{return(e,l)=>{l.applyStyle("fullTweetsTitleStyle")}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/view-cover.min.js"] = (()=>{return(e,n)=>{const t=n.attributes.videoInfo.export.VideoInfo;class i{constructor(e){this.url=e;if($(".image-viewer").length===0){this.createDom()}this.viewer=$(".image-viewer-container");this.downloadImage()}createDom(){$("body").append(n.data.imageViewerDom.text);$(".image-viewer-container .close").on("click",()=>this.hide());n.applyStyle("imageViewerStyle")}downloadImage(){const e=new XMLHttpRequest;e.open("GET",this.url.replace("http:","https:"),true);e.responseType="blob";e.onload=(()=>{const n=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const t=URL.createObjectURL(e.response);this.imageData=t;this.viewer.find(".download").attr("href",t).attr("download",n);this.viewer.find(".image").prop("src",t)});e.send()}show(){this.viewer.addClass("opened")}hide(){this.viewer.removeClass("opened")}}if($("meta[itemprop='image'],meta[property='og:image']").length>0){return{widget:{content:`\n \n \n 查看封面\n `,condition:async()=>{const e=await SpinQuery.condition(()=>(unsafeWindow||window).aid,e=>e!==undefined);return e!=="undefined"},success:async()=>{async function e(){const e=(unsafeWindow||window).aid;const n=new t(e);await n.fetchInfo();return n.coverUrl}let n=new i(await e());$("#view-cover").on("click",()=>{n.show()});Observer.childList("#bofqi",async()=>{n=new i(await e())})}}}}else{return{widget:{content:`\n \n \n 查看封面\n `,condition:async()=>{const e=await SpinQuery.any(()=>$(".header-info-ctnr .room-cover"));return typeof e!=="undefined"},success:async()=>{const e=$(".header-info-ctnr .room-cover");const n=e.attr("href").match(/space\.bilibili\.com\/([\d]+)/);if(n&&n[1]){const e=n[1];const t=`https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid=${e}`;const o=await downloadText(t);const a=JSON.parse(o).data.cover;const s=new i(a);$("#view-cover").on("click",()=>{s.show()})}}}}}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/view-cover.min.js"] = (()=>{return(e,t)=>{const n=t.attributes.videoInfo.export.VideoInfo;class i{constructor(e){this.url=e;if($(".image-viewer").length===0){this.createDom()}this.viewer=$(".image-viewer-container");this.downloadImage()}createDom(){$("body").append(t.data.imageViewerDom.text);$(".image-viewer-container .close").on("click",()=>this.hide());t.applyStyle("imageViewerStyle")}downloadImage(){const e=new XMLHttpRequest;e.open("GET",this.url.replace("http:","https:"),true);e.responseType="blob";e.onload=(()=>{const t=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const n=URL.createObjectURL(e.response);this.imageData=n;this.viewer.find(".download").attr("href",n).attr("download",t);this.viewer.find(".image").prop("src",n)});e.send()}show(){this.viewer.addClass("opened")}hide(){this.viewer.removeClass("opened")}}if($("meta[itemprop='image'],meta[property='og:image']").length>0){return{widget:{content:`\n \n \n 查看封面\n `,condition:async()=>{const e=await SpinQuery.select(()=>(unsafeWindow||window).aid);return Boolean(e)},success:async()=>{async function e(){const e=(unsafeWindow||window).aid;const t=new n(e);await t.fetchInfo();return t.coverUrl}let t=new i(await e());$("#view-cover").on("click",()=>{t.show()});Observer.childList("#bofqi",async()=>{t=new i(await e())})}}}}else{return{widget:{content:`\n \n \n 查看封面\n `,condition:async()=>{const e=await SpinQuery.select(()=>document.querySelector(".header-info-ctnr .room-cover"));return Boolean(e)},success:async()=>{const e=$(".header-info-ctnr .room-cover");const t=e.attr("href").match(/space\.bilibili\.com\/([\d]+)/);if(t&&t[1]){const e=t[1];const n=`https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid=${e}`;const o=await downloadText(n);const s=JSON.parse(o).data.cover;const a=new i(s);$("#view-cover").on("click",()=>{a.show()})}}}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/notify-new-version.min.js"] = (()=>{return(e,n)=>{const t={less:-1,equal:0,greater:1,incomparable:NaN};class s{constructor(e){this.parts=e.split(".").map(e=>parseInt(e));this.versionString=e}compareTo(e){for(let n=0;ne.parts[n]){return t.greater}return t.less}if(this.parts.length!==e.parts.length){return t.less}return t.equal}greaterThan(e){return this.compareTo(e)===t.greater}lessThan(e){return this.compareTo(e)===t.less}equals(e){return this.compareTo(e)===t.equal}}const r=new s(n.data.latestVersion.text);const i=new s(e.currentVersion);if(r.greaterThan(i)){const n=`新版本${r.versionString}已发布. 安装查看`;const t=Toast.info(n,"检查更新");$("#new-version-link").on("click",()=>t&&t.dismiss());return{widget:{content:`\n \n \n \n 安装更新\n \n \n \n \n 查看更新\n \n `,success:()=>{$("#new-version-update").on("click",()=>document.querySelector("#new-version-update a").click());$("#new-version-info").on("click",()=>document.querySelector("#new-version-info a").click())}}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/toast.min.js"] = (()=>{return(t,s)=>{class e{constructor(t="",s="",e="default"){this.type=e;this.message=t;this.title=s;this.duration=3e3;this.element=$(this.cardHtml)[0];this.$element=$(this.element);$(".toast-card-container").append(this.$element)}show(){this.element.classList.add("visible");this.$element.find(".toast-card-dismiss").on("click",()=>this.dismiss());if(this.duration){setTimeout(()=>this.dismiss(),this.duration)}}dismiss(){if(this.element.classList.contains("visible")){this.$element.on("transitionend",()=>this.$element.remove());this.element.classList.remove("visible")}}get cardHtml(){return`\n
      \n
      \n

      ${this.title}

      \n
      \n \n
      \n
      \n
      ${this.message}
      \n
      \n `}static get container(){return $(".toast-card-container")}static createToastContainer(){if($(".toast-card-container").length===0){$("body").append(`
      `)}}static internalShow(t,s,i,n){const a=new e(t,s,n);a.duration=i;a.show();return a}static show(t,s,e){return this.internalShow(t,s,e,"default")}static info(t,s,e){return this.internalShow(t,s,e,"info")}static success(t,s,e){return this.internalShow(t,s,e,"success")}static error(t,s,e){return this.internalShow(t,s,e,"error")}}s.applyStyle("toastStyle");e.createToastContainer();return{export:e}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/remove-top-mask.min.js"] = (()=>{return(i,n)=>{const l="bilibili-video-top-mask";if($(`#${l}`).length===0){n.applyStyleFromText(`\n \n `)}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/blur-video-control.min.js"] = (()=>{return(r,i)=>{Observer.childList("#bofqi",()=>{SpinQuery.count(()=>$(".bui-slider .bui-track.bui-track-video-progress,.bilibili-player-video-control-bottom"),2,r=>{if(!r.hasClass("video-control-blur-container")){r.addClass("video-control-blur-container");r.prepend(`
      `)}})});i.applyStyle("blurVideoControlStyle")}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-schedule.min.js"] = (()=>{return(e,t)=>{class s{constructor(...e){if(e.length===0){const e=new Date;this.hour=e.getHours();this.minute=e.getMinutes()}else if(e.length===1){const[t]=e;[this.hour,this.minute]=t.split(":").slice(0,2).map(e=>this.validatePart(e));this.normalize()}else if(v.length===2){[this.hour,this.minute]=e}}validatePart(e){const t=parseInt(e);if(!isNaN(t)&&0<=t&&t<=59){return t}else{return null}}normalize(){while(this.minute<0){this.minute+=60;this.hour-=1}while(this.minute>=60){this.minute-=60;this.hour+=1}while(this.hour<0){this.hour+=24}while(this.hour>=24){this.hour-=24}}lessThan(e){if(this.houre.hour||this.hour===e.hour&&this.minute>e.minute){return true}return false}equals(e){return this.hour===e.hour&&this.minute===e.minute}isInRange(e,t){if(e.equals(t)){return false}let s=this.greaterThan(e)&&this.lessThan(t);if(e.greaterThan(t)){s=this.greaterThan(e)||this.lessThan(t)}const i=s||this.equals(e);return i}static millisecondsBefore(e){const t=new s;const i=(new Date).getSeconds();const r=1e3*(t.hour*3600+t.minute*60+i);const n=1e3*(e.hour*3600+e.minute*60);let h=n-r;if(t.greaterThan(e)||t.equals(e)&&i!==0){h+=24*3600*1e3}return h}}function i(){if(e.darkSchedule){const t=new s(e.darkScheduleStart);const r=new s(e.darkScheduleEnd);const n=new s;const h=n.isInRange(t,r);if(e.useDarkStyle!==h){e.useDarkStyle=h;saveSettings(e)}let u=0;if(h){u=s.millisecondsBefore(r)}else{u=s.millisecondsBefore(t)}if(u!==0){setTimeout(()=>i(),u)}}}i();return{export:s}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/clear-cache.min.js"] = (()=>{return(n,c)=>{return{widget:{content:`\n \n \n 清除缓存\n `,condition:()=>typeof offlineData==="undefined",success:()=>{$("#clear-cache").on("click",()=>{n.cache={};saveSettings(n);Toast.success("已删除全部缓存.","清除缓存",5e3)})}}}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.js"] = (()=>{return(e,t)=>{const n={entity:null,aid:undefined,cid:undefined};class s{constructor(){this.menuClasses=["quality","action","progress"];this.currentMenuClass="quality"}get menuPanel(){return document.querySelector(".download-video-panel")}addMenuClass(){this.menuPanel.classList.remove(...this.menuClasses);this.menuPanel.classList.add(this.currentMenuClass);return this.currentMenuClass}resetMenuClass(){[this.currentMenuClass]=this.menuClasses;this.addMenuClass()}nextMenuClass(){const e=this.menuClasses.indexOf(this.currentMenuClass)+1;const t=this.menuClasses[e>=this.menuClasses.length?0:e];this.currentMenuClass=t;this.addMenuClass();return t}addError(){this.menuPanel.classList.add("error")}removeError(){this.menuPanel.classList.remove("error");this.resetMenuClass()}async getUrl(e){if(e){return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&qn=${e}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&otype=json`}}}class i extends s{async getUrl(e){if(e){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${n.aid}&cid=${n.cid}&qn=${e}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${n.aid}&cid=${n.cid}&qn=&otype=json`}}}class o{constructor(e,t,n){this.quality=e;this.internalName=t;this.displayName=n}async downloadInfo(){const e=new r(this);await e.fetchVideoInfo();return e}static get availableFormats(){return new Promise((e,t)=>{n.entity.getUrl().then(n=>{const s=new XMLHttpRequest;s.addEventListener("load",()=>{const n=JSON.parse(s.responseText);if(n.code!==0){t("获取清晰度信息失败.")}const i=n.data||n.result||n;const a=i.accept_quality;const r=i.accept_format.split(",");const l=i.accept_description;const c=[];while(a.length>0){const e=new o(a.pop(),r.pop(),l.pop());c.push(e)}e(c)});s.addEventListener("error",()=>t(`获取清晰度信息失败.`));s.withCredentials=true;s.open("GET",n);s.send()})})}}class a{constructor(e,t,n,s){this.length=e;this.size=t;this.url=n;this.backupUrls=s}}class r{constructor(e,t){this.format=e;this.fragments=t||[];this.progress=null;this.loaded=0;this.totalSize=null;this.workingXhr=null;this.fragmentSplitFactor=6*5}fetchVideoInfo(){return new Promise((e,t)=>{n.entity.getUrl(this.format.quality).then(n=>{const s=new XMLHttpRequest;s.addEventListener("load",()=>{const n=JSON.parse(s.responseText.replace(/http:/g,"https:"));const i=n.data||n.result||n;if(i.quality!==this.format.quality){t("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const o=i.durl;this.fragments=o.map(e=>new a(e.length,e.size,e.url,e.backup_url));e(this.fragments)});s.withCredentials=true;s.open("GET",n);s.send()})})}cancelDownload(){if("forEach"in this.workingXhr){this.workingXhr.forEach(e=>e.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(e){const t=[];this.workingXhr=[];const n=Math.round(e.size/this.fragmentSplitFactor);let s=0;while(s{let s=0;const o=new XMLHttpRequest;o.open("GET",e.url);o.responseType="arraybuffer";o.withCredentials=false;o.addEventListener("progress",e=>{this.loaded+=e.loaded-s;s=e.loaded;this.progress&&this.progress(this.loaded/this.totalSize)});o.addEventListener("load",()=>{if((""+o.status)[0]==="2"){t(o.response)}else{n(`请求失败.`)}});o.addEventListener("abort",()=>n("下载已取消."));o.addEventListener("error",()=>n(`下载失败.`));o.setRequestHeader("Range",i);o.send();this.workingXhr.push(o)}));s=Math.round(s+n)+1}return Promise.all(t)}copyUrl(){const e=this.fragments.map(e=>e.url).reduce((e,t)=>e+"\r\n"+t);GM_setClipboard(e,"text")}extension(e){return(e||this.fragments[0]).url.indexOf(".flv")!==-1?".flv":".mp4"}makeBlob(e,t=null){return new Blob(Array.isArray(e)?e:[e],{type:this.extension(t)===".flv"?"video/x-flv":"video/mp4"})}cleanUpOldBlobUrl(){const e=$("a#video-complete").attr("href");if(e&&$(`.link[href=${e}]`).length===0){URL.revokeObjectURL(e)}}downloadSingle(e){const[t]=e;const n=this.makeBlob(t);const s=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","")+this.extension();return[n,s]}async downloadMultiple(e){const t=new JSZip;const n=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");if(e.length>1){e.forEach((e,s)=>{const i=this.fragments[s];t.file(`${n} - ${s+1}${this.extension(i)}`,this.makeBlob(e,i))})}else{const[s]=e;t.file(`${n}${this.extension()}`,this.makeBlob(s))}const s=await t.generateAsync({type:"blob"});const i=n+".zip";return[s,i]}async download(){const e=[];this.loaded=0;this.totalSize=this.fragments.map(e=>e.size).reduce((e,t)=>e+t);for(const t of this.fragments){const n=await this.downloadFragment(t);e.push(n)}if(e.length<1){throw new Error("下载失败.")}let t=null;let n=null;if(e.length===1){[t,n]=this.downloadSingle(e)}else{[t,n]=await this.downloadMultiple(e)}const s=URL.createObjectURL(t);this.cleanUpOldBlobUrl();this.progress&&this.progress(0);return{url:s,filename:n}}}async function l(){const e=await SpinQuery.select(()=>(unsafeWindow||window).aid);const t=await SpinQuery.select(()=>(unsafeWindow||window).cid);n.aid=e;n.cid=t;if(document.URL.indexOf("bangumi")!==-1){n.entity=new i}else{n.entity=new s}return e!==undefined&&t!==undefined}async function c(){let e=await o.availableFormats;let[s]=e;const i=async()=>{await l();e=await o.availableFormats;const t=$("ol.video-quality");t.html("");e.forEach(e=>{$(`
    • ${e.displayName}
    • `).on("click",()=>{s=e;n.entity.nextMenuClass()}).prependTo(t)})};Observer.childList("#bofqi",i);const a=()=>s.downloadInfo().catch(e=>{n.entity.addError();$(".video-error").text(e)});async function r(){if(!s){return}n.entity.nextMenuClass();const e=await a();e.progress=(e=>{$(".download-progress-value").text(`${fixed(e*100)}`);$(".download-progress-foreground").css("transform",`scaleX(${e})`)});document.querySelector(".download-progress-cancel>span").onclick=(()=>e.cancelDownload());const t=await e.download().catch(e=>{n.entity.addError();$(".video-error").text(e)});if(!t){return}const i=document.getElementById("video-complete");i.setAttribute("href",t.url);i.setAttribute("download",t.filename);i.click();const o=`下载完成. 再次保存`;Toast.success(o,"下载视频");n.entity.resetMenuClass()}async function c(){if(!s){return}const e=await a();e.copyUrl();Toast.success("已复制链接到剪贴板.","复制链接",3e3);n.entity.resetMenuClass()}$(".video-action>#video-action-download").on("click",r);$(".video-action>#video-action-copy").on("click",c);t.applyStyle("downloadVideoStyle");const d=document.querySelector(".download-video-panel");const u=()=>$(".download-video-panel").toggleClass("opened");$("#download-video").on("click",e=>{if(!d.contains(e.target)){u()}});$(".video-error").on("click",()=>{$(".video-error").text("");n.entity.removeError()});await SpinQuery.select(()=>document.querySelector(".download-video-panel"));n.entity.addMenuClass()}return{widget:{content:t.data.downloadVideoDom.text,condition:l,success:c}}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-danmaku.min.js"] = (()=>{return(e,t)=>{const{DanmakuInfo:n}=t.import("videoInfo");const{DanmakuConverter:i}=t.import("danmakuConverter");async function o(e,t){const o=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const a=new n((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(t===true){let e={};try{await loadLazyPanel(".bilibili-player-video-danmaku-setting");const t=e=>{const t=parseFloat(document.querySelector(e).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[t];return n};e.font=document.querySelector(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;e.alpha=parseFloat(document.querySelector(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));e.duration=(()=>{const e=[10,8,6,4,2][t(".bilibili-player-setting-speedplus .bui-thumb")];return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();e.blockTypes=(()=>{let e=[];const t={".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"],".bilibili-player-block-filter-type[ftype=special]":[7,8]};for(const[n,i]of Object.entries(t)){if(document.querySelector(n).classList.contains("disabled")){e=e.concat(i)}}return e})();const n=[1.4,1.2,1,.8,.6][t(".bilibili-player-setting-fontsize .bui-thumb")];e.resolution={x:1920*n,y:1080*n};e.bottomMarginPercent=[.75,.5,.25,.15,.15][t(".bilibili-player-setting-area .bui-thumb")];e.bold=document.querySelector(".bilibili-player-video-danmaku-setting-right-font-bold input").checked}catch(t){e={font:"微软雅黑",alpha:.6,duration:e=>{switch(e.type){case 4:case 5:return 4;default:return 6}},blockTypes:[],resolution:{x:1920,y:1080},bottomMarginPercent:.15,bold:false}}const t=new i(e);const n=t.convertToAssDocument(a.rawXML);return new Blob([n.generateAss()],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const c=$("#danmaku-link");const s=c.attr("href");if(s){URL.revokeObjectURL(s)}clearTimeout(e);document.querySelector("#download-danmaku>span").innerHTML="下载弹幕";c.attr("download",`${o}.${t?"ass":"xml"}`).attr("href",r).get(0).click()}return{widget:{content:`\n \n \n 下载弹幕\n \n `,condition:async()=>{let e=await SpinQuery.condition(()=>(unsafeWindow||window).cid,e=>e!==undefined);return e!==undefined},success:()=>{const e=document.querySelector("#danmaku-link");$("#download-danmaku").on("click",t=>{if(t.target!==e){const e=setTimeout(()=>document.querySelector("#download-danmaku>span").innerHTML="请稍侯...",200);o(e,t.shiftKey)}})}}}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.js"] = (()=>{return(e,t)=>{const n={entity:null,aid:undefined,cid:undefined};class s{constructor(){this.menuClasses=["quality","action","progress"];this.currentMenuClass="quality"}get menuPanel(){return document.querySelector(".download-video-panel")}addMenuClass(){this.menuPanel.classList.remove(...this.menuClasses);this.menuPanel.classList.add(this.currentMenuClass);return this.currentMenuClass}resetMenuClass(){[this.currentMenuClass]=this.menuClasses;this.addMenuClass()}nextMenuClass(){const e=this.menuClasses.indexOf(this.currentMenuClass)+1;const t=this.menuClasses[e>=this.menuClasses.length?0:e];this.currentMenuClass=t;this.addMenuClass();return t}addError(){this.menuPanel.classList.add("error")}removeError(){this.menuPanel.classList.remove("error");this.resetMenuClass()}async getUrl(e){if(e){return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&qn=${e}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&otype=json`}}}class i extends s{async getUrl(e){if(e){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${n.aid}&cid=${n.cid}&qn=${e}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${n.aid}&cid=${n.cid}&qn=&otype=json`}}}class o{constructor(e,t,n){this.quality=e;this.internalName=t;this.displayName=n}async downloadInfo(){const e=new r(this);await e.fetchVideoInfo();return e}static get availableFormats(){return new Promise((e,t)=>{n.entity.getUrl().then(n=>{const s=new XMLHttpRequest;s.addEventListener("load",()=>{const n=JSON.parse(s.responseText);if(n.code!==0){t("获取清晰度信息失败.")}const i=n.data||n.result||n;const a=i.accept_quality;const r=i.accept_format.split(",");const l=i.accept_description;const c=[];while(a.length>0){const e=new o(a.pop(),r.pop(),l.pop());c.push(e)}e(c)});s.addEventListener("error",()=>t(`获取清晰度信息失败.`));s.withCredentials=true;s.open("GET",n);s.send()})})}}class a{constructor(e,t,n,s){this.length=e;this.size=t;this.url=n;this.backupUrls=s}}class r{constructor(e,t){this.format=e;this.fragments=t||[];this.progress=null;this.loaded=0;this.totalSize=null;this.workingXhr=null;this.fragmentSplitFactor=6*5}fetchVideoInfo(){return new Promise((e,t)=>{n.entity.getUrl(this.format.quality).then(n=>{const s=new XMLHttpRequest;s.addEventListener("load",()=>{const n=JSON.parse(s.responseText.replace(/http:/g,"https:"));const i=n.data||n.result||n;if(i.quality!==this.format.quality){t("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const o=i.durl;this.fragments=o.map(e=>new a(e.length,e.size,e.url,e.backup_url));e(this.fragments)});s.withCredentials=true;s.open("GET",n);s.send()})})}cancelDownload(){if("forEach"in this.workingXhr){this.workingXhr.forEach(e=>e.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(e){const t=[];this.workingXhr=[];const n=Math.round(e.size/this.fragmentSplitFactor);let s=0;while(s{let s=0;const o=new XMLHttpRequest;o.open("GET",e.url);o.responseType="arraybuffer";o.withCredentials=false;o.addEventListener("progress",e=>{this.loaded+=e.loaded-s;s=e.loaded;this.progress&&this.progress(this.loaded/this.totalSize)});o.addEventListener("load",()=>{if((""+o.status)[0]==="2"){t(o.response)}else{n(`请求失败.`)}});o.addEventListener("abort",()=>n("下载已取消."));o.addEventListener("error",()=>n(`下载失败.`));o.setRequestHeader("Range",i);o.send();this.workingXhr.push(o)}));s=Math.round(s+n)+1}return Promise.all(t)}copyUrl(){const e=this.fragments.map(e=>e.url).reduce((e,t)=>e+"\r\n"+t);GM_setClipboard(e,"text")}extension(e){return(e||this.fragments[0]).url.indexOf(".flv")!==-1?".flv":".mp4"}makeBlob(e,t=null){return new Blob(Array.isArray(e)?e:[e],{type:this.extension(t)===".flv"?"video/x-flv":"video/mp4"})}cleanUpOldBlobUrl(){const e=$("a#video-complete").attr("href");if(e&&$(`.link[href=${e}]`).length===0){URL.revokeObjectURL(e)}}downloadSingle(e){const[t]=e;const n=this.makeBlob(t);const s=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","")+this.extension();return[n,s]}async downloadMultiple(e){const t=new JSZip;const n=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");if(e.length>1){e.forEach((e,s)=>{const i=this.fragments[s];t.file(`${n} - ${s+1}${this.extension(i)}`,this.makeBlob(e,i))})}else{const[s]=e;t.file(`${n}${this.extension()}`,this.makeBlob(s))}const s=await t.generateAsync({type:"blob"});const i=n+".zip";return[s,i]}async download(){const e=[];this.loaded=0;this.totalSize=this.fragments.map(e=>e.size).reduce((e,t)=>e+t);for(const t of this.fragments){const n=await this.downloadFragment(t);e.push(n)}if(e.length<1){throw new Error("下载失败.")}let t=null;let n=null;if(e.length===1){[t,n]=this.downloadSingle(e)}else{[t,n]=await this.downloadMultiple(e)}const s=URL.createObjectURL(t);this.cleanUpOldBlobUrl();this.progress&&this.progress(0);return{url:s,filename:n}}}async function l(){const e=await SpinQuery.select(()=>(unsafeWindow||window).aid);const t=await SpinQuery.select(()=>(unsafeWindow||window).cid);n.aid=e;n.cid=t;if(document.URL.indexOf("bangumi")!==-1){n.entity=new i}else{n.entity=new s}return Boolean(e&&t)}async function c(){let e=await o.availableFormats;let[s]=e;const i=async()=>{await l();e=await o.availableFormats;const t=$("ol.video-quality");t.html("");e.forEach(e=>{$(`
    • ${e.displayName}
    • `).on("click",()=>{s=e;n.entity.nextMenuClass()}).prependTo(t)})};Observer.childList("#bofqi",i);const a=()=>s.downloadInfo().catch(e=>{n.entity.addError();$(".video-error").text(e)});async function r(){if(!s){return}n.entity.nextMenuClass();const e=await a();e.progress=(e=>{$(".download-progress-value").text(`${fixed(e*100)}`);$(".download-progress-foreground").css("transform",`scaleX(${e})`)});document.querySelector(".download-progress-cancel>span").onclick=(()=>e.cancelDownload());const t=await e.download().catch(e=>{n.entity.addError();$(".video-error").text(e)});if(!t){return}const i=document.getElementById("video-complete");i.setAttribute("href",t.url);i.setAttribute("download",t.filename);i.click();const o=`下载完成. 再次保存`;Toast.success(o,"下载视频");n.entity.resetMenuClass()}async function c(){if(!s){return}const e=await a();e.copyUrl();Toast.success("已复制链接到剪贴板.","复制链接",3e3);n.entity.resetMenuClass()}$(".video-action>#video-action-download").on("click",r);$(".video-action>#video-action-copy").on("click",c);t.applyStyle("downloadVideoStyle");const d=document.querySelector(".download-video-panel");const u=()=>$(".download-video-panel").toggleClass("opened");$("#download-video").on("click",e=>{if(!d.contains(e.target)){u()}});$(".video-error").on("click",()=>{$(".video-error").text("");n.entity.removeError()});await SpinQuery.select(()=>document.querySelector(".download-video-panel"));n.entity.addMenuClass()}return{widget:{content:t.data.downloadVideoDom.text,condition:l,success:c}}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-danmaku.min.js"] = (()=>{return(e,t)=>{const{DanmakuInfo:n}=t.import("videoInfo");const{DanmakuConverter:i}=t.import("danmakuConverter");async function o(e,t){const o=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const a=new n((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(t===true){let e={};try{await loadLazyPanel(".bilibili-player-video-danmaku-setting");const t=e=>{const t=parseFloat(document.querySelector(e).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[t];return n};e.font=document.querySelector(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;e.alpha=parseFloat(document.querySelector(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));e.duration=(()=>{const e=[10,8,6,4,2][t(".bilibili-player-setting-speedplus .bui-thumb")];return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();e.blockTypes=(()=>{let e=[];const t={".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"],".bilibili-player-block-filter-type[ftype=special]":[7,8]};for(const[n,i]of Object.entries(t)){if(document.querySelector(n).classList.contains("disabled")){e=e.concat(i)}}return e})();const n=[1.4,1.2,1,.8,.6][t(".bilibili-player-setting-fontsize .bui-thumb")];e.resolution={x:1920*n,y:1080*n};e.bottomMarginPercent=[.75,.5,.25,.15,.15][t(".bilibili-player-setting-area .bui-thumb")];e.bold=document.querySelector(".bilibili-player-video-danmaku-setting-right-font-bold input").checked}catch(t){e={font:"微软雅黑",alpha:.6,duration:e=>{switch(e.type){case 4:case 5:return 4;default:return 6}},blockTypes:[],resolution:{x:1920,y:1080},bottomMarginPercent:.15,bold:false}}const t=new i(e);const n=t.convertToAssDocument(a.rawXML);return new Blob([n.generateAss()],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const c=$("#danmaku-link");const s=c.attr("href");if(s){URL.revokeObjectURL(s)}clearTimeout(e);document.querySelector("#download-danmaku>span").innerHTML="下载弹幕";c.attr("download",`${o}.${t?"ass":"xml"}`).attr("href",r).get(0).click()}return{widget:{content:`\n \n \n 下载弹幕\n \n `,condition:async()=>{let e=await SpinQuery.select(()=>(unsafeWindow||window).cid);return e!==undefined},success:()=>{const e=document.querySelector("#danmaku-link");$("#download-danmaku").on("click",t=>{if(t.target!==e){const e=setTimeout(()=>document.querySelector("#download-danmaku>span").innerHTML="请稍侯...",200);o(e,t.shiftKey)}})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/danmaku-converter.min.js"] = (()=>{return(t,e)=>{class i{constructor(t,e,i,s,n){this.content=t;this.time=e;this.type=parseInt(i);this.fontSize=parseFloat(s);this.color=parseInt(n)}}class s extends i{constructor({content:t,time:e,type:i,fontSize:s,color:n,timeStamp:r,pool:a,userHash:o,rowId:c}){super(t,e,i,s,n);this.timeStamp=parseInt(r);this.pool=parseInt(a);this.userHash=o;this.rowId=parseInt(c);this.time=parseFloat(this.time);this.pDataArray=[e,i,s,n,r,a,o,c]}text(){const t=this.pDataArray.join(",");return`${this.content}`}static parse(t){const e=t.getAttribute("p");const[i,n,r,a,o,c,h,l]=e.split(",");const u=t.innerHTML;return new s({content:u,time:i,type:n,fontSize:r,color:a,timeStamp:o,pool:c,userHash:h,rowId:l})}}class n{constructor(t){this.xml=t;const e=(new DOMParser).parseFromString(t,"application/xml").documentElement;this.danmakus=[...e.querySelectorAll("d[p]")].map(t=>s.parse(t))}}class r extends i{constructor({content:t,time:e,type:i,fontSize:s,color:n,typeTag:r,colorTag:a,endTime:o}){super(t,e,i,s,n);this.typeTag=r;this.colorTag=a;this.endTime=o}text(t){const e=t[this.fontSize].match(/Style:(.*?),/)[1].trim();return`Dialogue: 0,${this.time},${this.endTime},${e},,0,0,0,,{${this.typeTag}${this.colorTag}}${this.content}`}}class a{constructor({danmakus:t,title:e,fontStyles:i,blockTypes:s,resolution:n}){this.danmakus=t;this.title=e;this.fontStyles=i;this.blockTypes=s;this.resolution=n}generateAss(){const t=`\n[Script Info]\n; Script generated by Bilibili Evolved Danmaku Converter\n; https://github.com/the1812/Bilibili-Evolved/\nTitle: ${this.title}\nScriptType: v4.00+\nPlayResX: ${this.resolution.x}\nPlayResY: ${this.resolution.y}\nTimer: 10.0000\nWrapStyle: 2\nScaledBorderAndShadow: no\n\n[V4+ Styles]\nFormat: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding\n${Object.values(this.fontStyles).join("\n")}\n\n[Events]\nFormat: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\n `.trim();return t+"\n"+this.danmakus.map(t=>t.text(this.fontStyles,this.blockTypes)).filter(t=>t!=="").join("\n")}}class o{constructor(t,e,i,s){this.horizontalDanmakus=[];this.horizontalTrack=[];this.verticalDanmakus=[];this.verticalTrack=[];this.resolution=e;this.duration=i;this.canvas=document.createElement("canvas");this.context=this.canvas.getContext("2d");this.fontSizes={25:`52px ${t}`,18:`36px ${t}`};this.danmakuType={1:"normal",2:"normal",3:"normal",4:"bottom",5:"top",6:"reversed",7:"special",8:"special"};this.bottomMarginPercent=s;this.margin=4;this.nextDanmakuDelay=.05;this.generateTracks()}generateTracks(){const t=52;this.danmakuHeight=t;this.trackHeight=this.margin*2+t;this.trackCount=parseInt(fixed(this.resolution.y*(1-this.bottomMarginPercent)/this.trackHeight,0))}getTextSize(t){this.context.font=this.fontSizes[t.fontSize];const e=this.context.measureText(t.content);const i=e.width/2;return[i,this.danmakuHeight/2]}getTags(t,{targetTrack:e,initTrack:i,nextTrack:s,isClosestDanmaku:n,getTrackItem:r,getTag:a}){const[o,c]=this.getTextSize(t);const h=o*2;const l=this.duration(t)*h/(this.resolution.x+h)+this.nextDanmakuDelay;let u=i;let m=null;do{m=e.find(t=>n({it:t,track:u,width:h}));u+=s}while(m&&u<=this.trackCount&&u>=0);if(u>this.trackCount||u<0){return`\\pos(0,-999)`}u-=s;e.push(r({track:u,width:h,visibleTime:l}));return a({track:u,x:o,y:c})}getHorizonalTags(t){return this.getTags(t,{targetTrack:this.horizontalTrack,initTrack:0,nextTrack:1,isClosestDanmaku:({it:e,track:i,width:s})=>{if(e.track!==i){return false}if(e.widtht.time}},getTrackItem:({track:e,width:i,visibleTime:s})=>{return{width:i,start:t.time,visible:t.time+s,end:t.time+this.duration(t),track:e}},getTag:({track:e,x:i,y:s})=>{return`\\move(${this.resolution.x+i},${e*this.trackHeight+this.margin+s},${-i},${e*this.trackHeight+this.margin+s},0,${this.duration(t)*1e3})`}})}getVerticalTags(t){const e=this.danmakuType[t.type]==="top";return this.getTags(t,{targetTrack:this.verticalTrack,initTrack:e?0:this.trackCount-1,nextTrack:e?1:-1,isClosestDanmaku:({it:e,track:i})=>{if(e.track!==i){return false}return e.end>t.time},getTrackItem:({track:e})=>{return{start:t.time,end:t.time+this.duration(t),track:e}},getTag:({track:t,y:i})=>{if(e){return`\\pos(${this.resolution.x/2},${t*this.trackHeight+this.margin+i})`}else{return`\\pos(${this.resolution.x/2},${this.resolution.y-this.margin-i-(this.trackCount-1-t)*this.trackHeight})`}}})}push(t){let e=null;let i=null;switch(this.danmakuType[t.type]){case"normal":case"reversed":{e=this.getHorizonalTags(t);i=this.horizontalDanmakus;break}case"top":case"bottom":{e=this.getVerticalTags(t);i=this.verticalDanmakus;break}case"special":default:{return{tags:`\\pos(0,-999)`}}}const s={tags:e};i.push(s);return s}}class c{constructor({title:t,font:e,alpha:i,duration:s,blockTypes:n,resolution:r,bottomMarginPercent:a,bold:c}){this.title=t;this.font=e;this.alpha=Math.round(i*100);this.duration=s;this.blockTypes=n;this.resolution=r;this.bold=c;this.white=16777215;this.danmakuStack=new o(e,r,s,a)}get fontStyles(){return{25:`Style: Medium,${this.font},52,&H${this.alpha}FFFFFF,&H${this.alpha}FFFFFF,&H${this.alpha}000000,&H${this.alpha}000000,${this.bold?"1":"0"},0,0,0,100,100,0,0,1,1.2,0,5,0,0,0,0`,18:`Style: Small,${this.font},36,&H${this.alpha}FFFFFF,&H${this.alpha}FFFFFF,&H${this.alpha}000000,&H${this.alpha}000000,${this.bold?"1":"0"},0,0,0,100,100,0,0,1,1.2,0,5,0,0,0,0`}}convertToAssDocument(t){const e=new n(t);const i=[];for(const t of e.danmakus.sort((t,e)=>t.time-e.time)){if(this.blockTypes.indexOf(t.type)!==-1||this.blockTypes.indexOf("color")!==-1&&t.color!==this.white){continue}const[e,s]=this.convertTime(t.time,this.duration(t));i.push(new r({content:this.convertText(t.content),time:e,endTime:s,type:t.type,fontSize:t.fontSize,color:t.color,typeTag:this.convertType(t),colorTag:this.convertColor(t.color)}))}return new a({danmakus:i,title:this.title,blockTypes:this.blockTypes,fontStyles:this.fontStyles,resolution:this.resolution})}convertText(t){const e={"{":"{","}":"}","&":"&","<":"<",">":">",""":'"',"'":"'"};for(const[i,s]of Object.entries(e)){t=t.replace(new RegExp(i,"g"),s)}return t}convertType(t){return this.danmakuStack.push(t).tags}convertColor(t){if(t===this.white){return""}const e=t.toString(16);const i=e.substring(0,2);const s=e.substring(2,4);const n=e.substring(4,6);return`\\c&H${n}${s}${i}&`}convertTime(t,e){function i(t){const[e,i="00"]=String(t).split(".");return`${e.padStart(2,"0")}.${i.substr(0,2).padEnd(2,"0")}`}function s(t){let e=0;let s=0;while(t>=60){t-=60;s++}while(s>=60){s-=60;e++}return`${e}:${String(s).padStart(2,"0")}:${i(t)}`}return[s(t),s(t+e)]}}return{export:{AssDanmaku:r,AssDanmakuDocument:a,Danmaku:i,DanmakuConverter:c,DanmakuStack:o,XmlDanmaku:s,XmlDanmakuDocument:n}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/video-info.min.js"] = (()=>{return()=>{class t{constructor(t){this.aid=t}async fetchInfo(){const t=JSON.parse(await downloadText(`https://api.bilibili.com/x/web-interface/view?aid=${this.aid}`));if(t.code!==0){throw new Error(t.message)}const i=t.data;this.cid=i.cid;this.pageCount=i.videos;this.coverUrl=i.pic;this.tagId=i.tid;this.tagName=i.tname;this.title=i.title;this.description=i.desc;this.up={uid:i.owner.mid,name:i.owner.name,faceUrl:i.owner.face};this.pages=i.pages.map(t=>{return{cid:t.cid,title:t.part,pageNumber:t.page}});return this}async fetchDanmaku(){this.danmaku=new e(this.cid);return this.danmaku.fetchInfo()}}class i{constructor(t,i){this.text=t;this.p=i}}class e{constructor(t){this.cid=t}async fetchInfo(){const t=await downloadText(`https://api.bilibili.com/x/v1/dm/list.so?oid=${this.cid}`);this.rawXML=t;const e=(new DOMParser).parseFromString(t,"application/xml").documentElement;this.xml=e;this.danmakus=[].map.call(e.querySelectorAll("d[p]"),t=>{return new i(t.innerHTML,t.getAttribute("p"))})}}class a{constructor(t){this.ep=t;this.videos=[]}async fetchInfo(){const i=await downloadText(`https://www.bilibili.com/bangumi/play/ep${this.ep}/`);const e=JSON.parse(i.match(/window\.__INITIAL_STATE__=(.*);\(function\(\){/)[1]);this.title=e.mediaInfo.title;this.cover=e.mediaInfo.cover;this.squareCover=e.mediaInfo.square_cover;this.aid=e.epInfo.aid;this.cid=e.epInfo.cid;this.videos=e.epList.map(async i=>{return{title:i.index_title,aid:i.aid,cid:i.cid,info:await new t(i.aid).fetchInfo()}});return this}}return{export:{VideoInfo:t,BangumiInfo:a,Danmaku:i,DanmakuInfo:e}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/about.min.html"] = `

      Bilibili Evolved

      开源组件

        `; @@ -1232,13 +1232,13 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/about.min.js"] = (()=>{return(e,i)=>{$("body").append(i.data.aboutDom.text);const n=GM_info.script.name.replace("Bilibili Evolved","").replace(/^[\(\) ]+|[\(\) ]+$/g,"")+" · "+e.currentVersion;$(".bilibili-evolved-version").text(n);const o=[{name:"jQuery",homepage:"https://jquery.com/",license:"MIT",version:"3.2.1"},{name:"JSZip",homepage:"https://stuk.github.io/jszip/",license:"MIT",version:"3.1.5"}];o.forEach(e=>{$(".open-source-components").append(`\n
      • \n \n
        ${e.name}
        \n
        ${e.version} · ${e.license}
        \n
        \n
      • \n `)});function t(){$("#about-close").on("click",()=>{$(".bilibili-evolved-about").toggleClass("opened")});$(".gui-settings").on("click",e=>{if(e.shiftKey===true){$(".bilibili-evolved-about").toggleClass("opened")}})}return{widget:{success:t}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/custom-control-background.min.css"] = `.bilibili-player-video-control-mask{background:0 0!important}.bilibili-player-video-control-bottom,.bui-slider .bui-track.bui-track-video-progress .bui-bar-wrap{background:rgba(0,0,0,var(--custom-control-background-opacity))!important}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/custom-control-background.min.js"] = (()=>{return(o,t)=>{if(o.customControlBackgroundOpacity>0){t.applyStyle("customControlBackgroundStyle");if(!o.touchVideoPlayer){t.applyImportantStyleFromText(`\n\n `)}}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-player-mode.min.js"] = (()=>{return(e,i)=>{const n=[{name:"常规",action:()=>{}},{name:"宽屏",action:()=>{$(".bilibili-player-video-btn-widescreen").click()}},{name:"网页全屏",action:()=>{$(".bilibili-player-video-web-fullscreen").click()}}];let l=()=>{};async function t(){if(e.autoLightOff){await SpinQuery.unsafeJquery();const e=await SpinQuery.any(()=>unsafeWindow.$(".bilibili-player-video-btn-setting"));e.mouseover().mouseout();l=(()=>{SpinQuery.any(()=>$(".bilibili-player-video-btn-setting-panel-others-content-lightoff .bui-checkbox-input"),e=>{const i=e[0];i.checked=true;raiseEvent(i,"change")})})}}async function a(){await t();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.length===0){return}const a=n.find(i=>i.name===e.defaultPlayerMode);if(a.name==="全屏"){const e=await SpinQuery.unsafeJquery();const i=document.querySelector(".bilibili-player-video-btn-start");const n=()=>{const l=e(".bilibili-player-video-btn-fullscreen").data("events");if(l.click&&l.click[0]&&l.click[0].handler){const i=e(".bilibili-player-video-btn-fullscreen").data("events").click[0].handler;console.log(i);i()}i.removeEventListener("click",n)};i.addEventListener("click",n)}else{const n=()=>{if(a&&$("#bilibiliPlayer[class*=mode-]").length===0){a.action()}l();if(e.applyPlayerModeOnPlay){i.removeEventListener("play",n)}};if(e.applyPlayerModeOnPlay){i.addEventListener("play",n)}else{n()}}}Observer.childList("#bofqi",()=>a())}})(); -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"));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[o]=t.map(e=>e.value).filter(e=>e<=Math.min(l,n)).sort(i);console.info(`[Video Quality] availableHighestQualities=${n}`);console.info(`[Video Quality] targetQuality=${l}`);console.info(`[Video Quality] finalQuality=${o}`);const u=await SpinQuery.condition(()=>document.querySelector("video"),e=>e);function s(){a.each((e,a)=>{if(parseInt(a.getAttribute("data-value"))===o){a.click()}});this.removeEventListener("play",s)}u.addEventListener("play",s)}Observer.childList("#bofqi",()=>i())}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/combo-like.min.js"] = (()=>{return(e,t)=>{(async()=>{const e=await SpinQuery.select(()=>document.querySelector(".ops span.like"));e.style.userSelect="none";function t(t,n){const s=new CustomEvent(t,n);e.dispatchEvent(s)}const n=200;let s=true;e.addEventListener("touchstart",e=>{e.preventDefault();s=true;setTimeout(()=>s=false,n);t("mousedown",e)});e.addEventListener("touchend",e=>{e.preventDefault();t("mouseup",e);if(s===true){t("click",e)}})})()}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-player-mode.min.js"] = (()=>{return(e,i)=>{const n=[{name:"常规",action:()=>{}},{name:"宽屏",action:()=>{$(".bilibili-player-video-btn-widescreen").click()}},{name:"网页全屏",action:()=>{$(".bilibili-player-video-web-fullscreen").click()}}];let t=()=>{};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();t=(()=>{SpinQuery.any(()=>$(".bilibili-player-video-btn-setting-panel-others-content-lightoff .bui-checkbox-input"),e=>{const i=e[0];i.checked=true;raiseEvent(i,"change")})})}}async function a(){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 a=n.find(i=>i.name===e.defaultPlayerMode);if(a.name==="全屏"){const e=await SpinQuery.unsafeJquery();const i=document.querySelector(".bilibili-player-video-btn-start");const n=()=>{const t=e(".bilibili-player-video-btn-fullscreen").data("events");if(t.click&&t.click[0]&&t.click[0].handler){const i=e(".bilibili-player-video-btn-fullscreen").data("events").click[0].handler;console.log(i);i()}i.removeEventListener("click",n)};i.addEventListener("click",n)}else{const n=()=>{if(a&&$("#bilibiliPlayer[class*=mode-]").length===0){a.action()}t();if(e.applyPlayerModeOnPlay){i.removeEventListener("play",n)}};if(e.applyPlayerModeOnPlay){i.addEventListener("play",n)}else{n()}}}Observer.childList("#bofqi",()=>a())}})(); +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[l]=a.toArray().map(e=>parseInt(e.getAttribute("data-value"))).sort(i);const[n]=t.filter(a=>a.name===e.defaultVideoQuality).map(e=>e.value).sort(i);const[u]=t.map(e=>e.value).filter(e=>e<=Math.min(n,l)).sort(i);console.info(`[Video Quality] availableHighestQualities=${l}`);console.info(`[Video Quality] targetQuality=${n}`);console.info(`[Video Quality] finalQuality=${u}`);const o=await SpinQuery.select(()=>document.querySelector("video"));function s(){a.each((e,a)=>{if(parseInt(a.getAttribute("data-value"))===u){a.click()}});this.removeEventListener("play",s)}o.addEventListener("play",s)}Observer.childList("#bofqi",()=>i())}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/combo-like.min.js"] = (()=>{return(e,t)=>{(async()=>{const e=await SpinQuery.select(()=>document.querySelector(".ops span.like"));if(!e){return}e.style.userSelect="none";function t(t,n){const u=new CustomEvent(t,n);e.dispatchEvent(u)}const n=200;let u=true;e.addEventListener("touchstart",e=>{e.preventDefault();u=true;setTimeout(()=>u=false,n);t("mousedown",e)});e.addEventListener("touchend",e=>{e.preventDefault();t("mouseup",e);if(u===true){t("click",e)}})})()}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/auto-continue.min.js"] = (()=>{return(i,t)=>{function e(i){const t=/((\d)*:)?(\d)*:(\d)*/g;const e=i.text();const n=e.match(t);if(!n){return}const r=n[0].split(":");const o=(()=>{if(r.length===3){const[i,t,e]=r.map(i=>parseInt(i));return i*60*60+t*60+e}else if(r.length===2){const[i,t]=r.map(i=>parseInt(i));return i*60+t}else{logError(`解析历史时间发生错误: historyTime=${JSON.stringify(r)}`);return NaN}})();const s=i.parent();const l=document.querySelector("video");if(o从头开始`);t.appendTo(s).on("click",()=>l.currentTime=0);i.html(`已跳转到上次历史记录${n[0]}`)}else{s.find(".bilibili-player-video-toast-item-close").get(0).click()}}function n(){SpinQuery.condition(()=>$(".bilibili-player-video-toast-item-text"),i=>i.text().indexOf("上次看到")!==-1,i=>e(i.filter((i,t)=>t.innerText.indexOf("上次看到")!==-1)))}Observer.childList("#bofqi",n)}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/expand-description.min.css"] = `.video-desc .info{height:auto!important}.video-desc .btn{display:none!important}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/expand-description.min.js"] = (()=>{return(e,p)=>{p.applyStyle("expandDescriptionStyle")}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-danmaku-settings.min.js"] = (()=>{return(e,n)=>{async function t(e,n){const t=await SpinQuery.select(()=>document.querySelector(e));if(!t){return}t.checked=n;raiseEvent(t,"change")}const i={enableDanmaku:".bilibili-player-video-danmaku-switch>input",settingsIcon:".bilibili-player-video-danmaku-setting"};if(!e.enableDanmaku){t(i.enableDanmaku,false)}if(e.rememberDanmakuBlock){for(const n in e.danmakuBlockSettings){i[n]=`.bilibili-player-block-filter-type[ftype=${n}]`}async function a(){await SpinQuery.unsafeJquery();const n=await SpinQuery.any(()=>unsafeWindow.$(i.settingsIcon));n.mouseover().mouseout();for(const[n,t]of Object.entries(e.danmakuBlockSettings)){if(t===true){const e=await SpinQuery.select(()=>document.querySelector(i[n]));e.click()}}}async function c(){for(const n in e.danmakuBlockSettings){const t=await SpinQuery.select(()=>document.querySelector(i[n]));t.addEventListener("click",()=>{e.danmakuBlockSettings[n]=t.classList.contains("disabled");saveSettings(e)})}}a();c()}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-danmaku-settings.min.js"] = (()=>{return(e,n)=>{async function t(e,n){const t=await SpinQuery.select(()=>document.querySelector(e));if(!t){return}t.checked=n;raiseEvent(t,"change")}const i={enableDanmaku:".bilibili-player-video-danmaku-switch>input",settingsIcon:".bilibili-player-video-danmaku-setting"};if(!e.enableDanmaku){t(i.enableDanmaku,false)}if(e.rememberDanmakuBlock){for(const n in e.danmakuBlockSettings){i[n]=`.bilibili-player-block-filter-type[ftype=${n}]`}async function a(){await SpinQuery.unsafeJquery();const n=await SpinQuery.any(()=>unsafeWindow.$(i.settingsIcon));if(!n){return}n.mouseover().mouseout();for(const[n,t]of Object.entries(e.danmakuBlockSettings)){if(t===true){const e=await SpinQuery.select(()=>document.querySelector(i[n]));e.click()}}}async function c(){for(const n in e.danmakuBlockSettings){const t=await SpinQuery.select(()=>document.querySelector(i[n]));if(!t){return}t.addEventListener("click",()=>{e.danmakuBlockSettings[n]=t.classList.contains("disabled");saveSettings(e)})}}a();c()}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/skip-charge-list.min.css"] = `.bilibili-player .bilibili-player-area .bilibili-player-electric-panel{display:none!important}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/skip-charge-list.min.js"] = (()=>{return(e,c)=>{function i(){const e=document.querySelector(".bilibili-player-electric-panel-jump");e&&e.click()}SpinQuery.select(()=>document.querySelector("#bofqi")).then(()=>{Observer.childListSubtree("#bofqi",()=>i())})}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/default-player-layout.min.js"] = (()=>{return(e,t)=>{(async()=>{const t=await SpinQuery.select(()=>document.querySelector(`input[key=defaultPlayerLayout]`));const o=await SpinQuery.select(()=>document.querySelector(`input[key=defaultBangumiLayout]`));if(!t||!o){logError("无法加载播放器布局选项.");return}class s{setCookie(e,t){document.cookie=`${e}=${t};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")}useNewLayout(){}useOldLayout(){}setLayout(e){if(e){this.useNewLayout()}else{this.useOldLayout()}}}class i extends s{checkCookies(){const t=this.getValue(this.cookieKey);if(t===""||parseInt(t)<0){e.defaultPlayerLayout="旧版"}else{e.defaultPlayerLayout="新版"}saveSettings(e)}constructor(){super();this.cookieKey="stardustvideo";this.checkCookies()}useNewLayout(){this.setCookie(this.cookieKey,1)}useOldLayout(){this.setCookie(this.cookieKey,-1)}}class u extends s{checkCookies(){const t=this.getValue(this.cookieKey);if(t===""||parseInt(t)<=0){e.defaultBangumiLayout="旧版"}else{e.defaultBangumiLayout="新版"}saveSettings(e)}constructor(){super();this.cookieKey="stardustpgcv";this.checkCookies()}useNewLayout(){this.setCookie(this.cookieKey,"0606")}useOldLayout(){this.setCookie(this.cookieKey,0)}}const a=new i;$(t).on("input",()=>{a.setLayout(t.value==="新版")});const c=new u;$(o).on("input",()=>{c.setLayout(o.value==="新版")})})()}})(); diff --git a/bilibili-evolved.preview.user.js b/bilibili-evolved.preview.user.js index 290521ea3..890aedcf1 100644 --- a/bilibili-evolved.preview.user.js +++ b/bilibili-evolved.preview.user.js @@ -776,7 +776,7 @@ const panel = unsafeWindow.$(selector); if (panel.length === 0) { - throw new Error(`Panel not found:${selector}`); + throw new Error(`Panel not found: ${selector}`); } panel.mouseover().mouseout(); } diff --git a/bilibili-evolved.user.js b/bilibili-evolved.user.js index 40a4a67b3..9414ed733 100644 --- a/bilibili-evolved.user.js +++ b/bilibili-evolved.user.js @@ -776,7 +776,7 @@ const panel = unsafeWindow.$(selector); if (panel.length === 0) { - throw new Error(`Panel not found:${selector}`); + throw new Error(`Panel not found: ${selector}`); } panel.mouseover().mouseout(); } diff --git a/min/combo-like.min.js b/min/combo-like.min.js index 5c0fc24f7..533b067ba 100644 --- a/min/combo-like.min.js +++ b/min/combo-like.min.js @@ -1 +1 @@ -(()=>{return(e,t)=>{(async()=>{const e=await SpinQuery.select(()=>document.querySelector(".ops span.like"));e.style.userSelect="none";function t(t,n){const s=new CustomEvent(t,n);e.dispatchEvent(s)}const n=200;let s=true;e.addEventListener("touchstart",e=>{e.preventDefault();s=true;setTimeout(()=>s=false,n);t("mousedown",e)});e.addEventListener("touchend",e=>{e.preventDefault();t("mouseup",e);if(s===true){t("click",e)}})})()}})(); \ No newline at end of file +(()=>{return(e,t)=>{(async()=>{const e=await SpinQuery.select(()=>document.querySelector(".ops span.like"));if(!e){return}e.style.userSelect="none";function t(t,n){const u=new CustomEvent(t,n);e.dispatchEvent(u)}const n=200;let u=true;e.addEventListener("touchstart",e=>{e.preventDefault();u=true;setTimeout(()=>u=false,n);t("mousedown",e)});e.addEventListener("touchend",e=>{e.preventDefault();t("mouseup",e);if(u===true){t("click",e)}})})()}})(); \ No newline at end of file diff --git a/min/default-danmaku-settings.min.js b/min/default-danmaku-settings.min.js index 62ad53409..4b1757578 100644 --- a/min/default-danmaku-settings.min.js +++ b/min/default-danmaku-settings.min.js @@ -1 +1 @@ -(()=>{return(e,n)=>{async function t(e,n){const t=await SpinQuery.select(()=>document.querySelector(e));if(!t){return}t.checked=n;raiseEvent(t,"change")}const i={enableDanmaku:".bilibili-player-video-danmaku-switch>input",settingsIcon:".bilibili-player-video-danmaku-setting"};if(!e.enableDanmaku){t(i.enableDanmaku,false)}if(e.rememberDanmakuBlock){for(const n in e.danmakuBlockSettings){i[n]=`.bilibili-player-block-filter-type[ftype=${n}]`}async function a(){await SpinQuery.unsafeJquery();const n=await SpinQuery.any(()=>unsafeWindow.$(i.settingsIcon));n.mouseover().mouseout();for(const[n,t]of Object.entries(e.danmakuBlockSettings)){if(t===true){const e=await SpinQuery.select(()=>document.querySelector(i[n]));e.click()}}}async function c(){for(const n in e.danmakuBlockSettings){const t=await SpinQuery.select(()=>document.querySelector(i[n]));t.addEventListener("click",()=>{e.danmakuBlockSettings[n]=t.classList.contains("disabled");saveSettings(e)})}}a();c()}}})(); \ No newline at end of file +(()=>{return(e,n)=>{async function t(e,n){const t=await SpinQuery.select(()=>document.querySelector(e));if(!t){return}t.checked=n;raiseEvent(t,"change")}const i={enableDanmaku:".bilibili-player-video-danmaku-switch>input",settingsIcon:".bilibili-player-video-danmaku-setting"};if(!e.enableDanmaku){t(i.enableDanmaku,false)}if(e.rememberDanmakuBlock){for(const n in e.danmakuBlockSettings){i[n]=`.bilibili-player-block-filter-type[ftype=${n}]`}async function a(){await SpinQuery.unsafeJquery();const n=await SpinQuery.any(()=>unsafeWindow.$(i.settingsIcon));if(!n){return}n.mouseover().mouseout();for(const[n,t]of Object.entries(e.danmakuBlockSettings)){if(t===true){const e=await SpinQuery.select(()=>document.querySelector(i[n]));e.click()}}}async function c(){for(const n in e.danmakuBlockSettings){const t=await SpinQuery.select(()=>document.querySelector(i[n]));if(!t){return}t.addEventListener("click",()=>{e.danmakuBlockSettings[n]=t.classList.contains("disabled");saveSettings(e)})}}a();c()}}})(); \ No newline at end of file diff --git a/min/default-player-mode.min.js b/min/default-player-mode.min.js index cd0950fc9..60b74d76e 100644 --- a/min/default-player-mode.min.js +++ b/min/default-player-mode.min.js @@ -1 +1 @@ -(()=>{return(e,i)=>{const n=[{name:"常规",action:()=>{}},{name:"宽屏",action:()=>{$(".bilibili-player-video-btn-widescreen").click()}},{name:"网页全屏",action:()=>{$(".bilibili-player-video-web-fullscreen").click()}}];let l=()=>{};async function t(){if(e.autoLightOff){await SpinQuery.unsafeJquery();const e=await SpinQuery.any(()=>unsafeWindow.$(".bilibili-player-video-btn-setting"));e.mouseover().mouseout();l=(()=>{SpinQuery.any(()=>$(".bilibili-player-video-btn-setting-panel-others-content-lightoff .bui-checkbox-input"),e=>{const i=e[0];i.checked=true;raiseEvent(i,"change")})})}}async function a(){await t();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.length===0){return}const a=n.find(i=>i.name===e.defaultPlayerMode);if(a.name==="全屏"){const e=await SpinQuery.unsafeJquery();const i=document.querySelector(".bilibili-player-video-btn-start");const n=()=>{const l=e(".bilibili-player-video-btn-fullscreen").data("events");if(l.click&&l.click[0]&&l.click[0].handler){const i=e(".bilibili-player-video-btn-fullscreen").data("events").click[0].handler;console.log(i);i()}i.removeEventListener("click",n)};i.addEventListener("click",n)}else{const n=()=>{if(a&&$("#bilibiliPlayer[class*=mode-]").length===0){a.action()}l();if(e.applyPlayerModeOnPlay){i.removeEventListener("play",n)}};if(e.applyPlayerModeOnPlay){i.addEventListener("play",n)}else{n()}}}Observer.childList("#bofqi",()=>a())}})(); \ No newline at end of file +(()=>{return(e,i)=>{const n=[{name:"常规",action:()=>{}},{name:"宽屏",action:()=>{$(".bilibili-player-video-btn-widescreen").click()}},{name:"网页全屏",action:()=>{$(".bilibili-player-video-web-fullscreen").click()}}];let t=()=>{};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();t=(()=>{SpinQuery.any(()=>$(".bilibili-player-video-btn-setting-panel-others-content-lightoff .bui-checkbox-input"),e=>{const i=e[0];i.checked=true;raiseEvent(i,"change")})})}}async function a(){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 a=n.find(i=>i.name===e.defaultPlayerMode);if(a.name==="全屏"){const e=await SpinQuery.unsafeJquery();const i=document.querySelector(".bilibili-player-video-btn-start");const n=()=>{const t=e(".bilibili-player-video-btn-fullscreen").data("events");if(t.click&&t.click[0]&&t.click[0].handler){const i=e(".bilibili-player-video-btn-fullscreen").data("events").click[0].handler;console.log(i);i()}i.removeEventListener("click",n)};i.addEventListener("click",n)}else{const n=()=>{if(a&&$("#bilibiliPlayer[class*=mode-]").length===0){a.action()}t();if(e.applyPlayerModeOnPlay){i.removeEventListener("play",n)}};if(e.applyPlayerModeOnPlay){i.addEventListener("play",n)}else{n()}}}Observer.childList("#bofqi",()=>a())}})(); \ No newline at end of file diff --git a/min/default-video-quality.min.js b/min/default-video-quality.min.js index 17fcf9742..5f46fce53 100644 --- a/min/default-video-quality.min.js +++ b/min/default-video-quality.min.js @@ -1 +1 @@ -(()=>{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"));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[o]=t.map(e=>e.value).filter(e=>e<=Math.min(l,n)).sort(i);console.info(`[Video Quality] availableHighestQualities=${n}`);console.info(`[Video Quality] targetQuality=${l}`);console.info(`[Video Quality] finalQuality=${o}`);const u=await SpinQuery.condition(()=>document.querySelector("video"),e=>e);function s(){a.each((e,a)=>{if(parseInt(a.getAttribute("data-value"))===o){a.click()}});this.removeEventListener("play",s)}u.addEventListener("play",s)}Observer.childList("#bofqi",()=>i())}})(); \ No newline at end of file +(()=>{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[l]=a.toArray().map(e=>parseInt(e.getAttribute("data-value"))).sort(i);const[n]=t.filter(a=>a.name===e.defaultVideoQuality).map(e=>e.value).sort(i);const[u]=t.map(e=>e.value).filter(e=>e<=Math.min(n,l)).sort(i);console.info(`[Video Quality] availableHighestQualities=${l}`);console.info(`[Video Quality] targetQuality=${n}`);console.info(`[Video Quality] finalQuality=${u}`);const o=await SpinQuery.select(()=>document.querySelector("video"));function s(){a.each((e,a)=>{if(parseInt(a.getAttribute("data-value"))===u){a.click()}});this.removeEventListener("play",s)}o.addEventListener("play",s)}Observer.childList("#bofqi",()=>i())}})(); \ No newline at end of file diff --git a/min/download-danmaku.min.js b/min/download-danmaku.min.js index 3a8dc68fe..ff65a4645 100644 --- a/min/download-danmaku.min.js +++ b/min/download-danmaku.min.js @@ -1 +1 @@ -(()=>{return(e,t)=>{const{DanmakuInfo:n}=t.import("videoInfo");const{DanmakuConverter:i}=t.import("danmakuConverter");async function o(e,t){const o=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const a=new n((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(t===true){let e={};try{await loadLazyPanel(".bilibili-player-video-danmaku-setting");const t=e=>{const t=parseFloat(document.querySelector(e).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[t];return n};e.font=document.querySelector(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;e.alpha=parseFloat(document.querySelector(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));e.duration=(()=>{const e=[10,8,6,4,2][t(".bilibili-player-setting-speedplus .bui-thumb")];return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();e.blockTypes=(()=>{let e=[];const t={".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"],".bilibili-player-block-filter-type[ftype=special]":[7,8]};for(const[n,i]of Object.entries(t)){if(document.querySelector(n).classList.contains("disabled")){e=e.concat(i)}}return e})();const n=[1.4,1.2,1,.8,.6][t(".bilibili-player-setting-fontsize .bui-thumb")];e.resolution={x:1920*n,y:1080*n};e.bottomMarginPercent=[.75,.5,.25,.15,.15][t(".bilibili-player-setting-area .bui-thumb")];e.bold=document.querySelector(".bilibili-player-video-danmaku-setting-right-font-bold input").checked}catch(t){e={font:"微软雅黑",alpha:.6,duration:e=>{switch(e.type){case 4:case 5:return 4;default:return 6}},blockTypes:[],resolution:{x:1920,y:1080},bottomMarginPercent:.15,bold:false}}const t=new i(e);const n=t.convertToAssDocument(a.rawXML);return new Blob([n.generateAss()],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const c=$("#danmaku-link");const s=c.attr("href");if(s){URL.revokeObjectURL(s)}clearTimeout(e);document.querySelector("#download-danmaku>span").innerHTML="下载弹幕";c.attr("download",`${o}.${t?"ass":"xml"}`).attr("href",r).get(0).click()}return{widget:{content:`\n \n \n 下载弹幕\n \n `,condition:async()=>{let e=await SpinQuery.condition(()=>(unsafeWindow||window).cid,e=>e!==undefined);return e!==undefined},success:()=>{const e=document.querySelector("#danmaku-link");$("#download-danmaku").on("click",t=>{if(t.target!==e){const e=setTimeout(()=>document.querySelector("#download-danmaku>span").innerHTML="请稍侯...",200);o(e,t.shiftKey)}})}}}}})(); \ No newline at end of file +(()=>{return(e,t)=>{const{DanmakuInfo:n}=t.import("videoInfo");const{DanmakuConverter:i}=t.import("danmakuConverter");async function o(e,t){const o=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const a=new n((unsafeWindow||window).cid);await a.fetchInfo();const l=await(async()=>{if(t===true){let e={};try{await loadLazyPanel(".bilibili-player-video-danmaku-setting");const t=e=>{const t=parseFloat(document.querySelector(e).style.transform.replace(/translateX\(([\d\.]+)/,"$1"));const n={0:0,44:1,94:2,144:3,188:4}[t];return n};e.font=document.querySelector(".bilibili-player-video-danmaku-setting-right-font .bui-select-result").innerText;e.alpha=parseFloat(document.querySelector(".bilibili-player-setting-opacity .bui-bar").style.transform.replace(/scaleX\(([\d\.]+)\)/,"$1"));e.duration=(()=>{const e=[10,8,6,4,2][t(".bilibili-player-setting-speedplus .bui-thumb")];return t=>{switch(t.type){case 4:case 5:return 4;default:return e}}})();e.blockTypes=(()=>{let e=[];const t={".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"],".bilibili-player-block-filter-type[ftype=special]":[7,8]};for(const[n,i]of Object.entries(t)){if(document.querySelector(n).classList.contains("disabled")){e=e.concat(i)}}return e})();const n=[1.4,1.2,1,.8,.6][t(".bilibili-player-setting-fontsize .bui-thumb")];e.resolution={x:1920*n,y:1080*n};e.bottomMarginPercent=[.75,.5,.25,.15,.15][t(".bilibili-player-setting-area .bui-thumb")];e.bold=document.querySelector(".bilibili-player-video-danmaku-setting-right-font-bold input").checked}catch(t){e={font:"微软雅黑",alpha:.6,duration:e=>{switch(e.type){case 4:case 5:return 4;default:return 6}},blockTypes:[],resolution:{x:1920,y:1080},bottomMarginPercent:.15,bold:false}}const t=new i(e);const n=t.convertToAssDocument(a.rawXML);return new Blob([n.generateAss()],{type:"text/plain"})}else{return new Blob([a.rawXML],{type:"text/plain"})}})();const r=URL.createObjectURL(l);const c=$("#danmaku-link");const s=c.attr("href");if(s){URL.revokeObjectURL(s)}clearTimeout(e);document.querySelector("#download-danmaku>span").innerHTML="下载弹幕";c.attr("download",`${o}.${t?"ass":"xml"}`).attr("href",r).get(0).click()}return{widget:{content:`\n \n \n 下载弹幕\n \n `,condition:async()=>{let e=await SpinQuery.select(()=>(unsafeWindow||window).cid);return e!==undefined},success:()=>{const e=document.querySelector("#danmaku-link");$("#download-danmaku").on("click",t=>{if(t.target!==e){const e=setTimeout(()=>document.querySelector("#download-danmaku>span").innerHTML="请稍侯...",200);o(e,t.shiftKey)}})}}}}})(); \ No newline at end of file diff --git a/min/download-video.min.js b/min/download-video.min.js index 0ea513781..3d2d39f72 100644 --- a/min/download-video.min.js +++ b/min/download-video.min.js @@ -1 +1 @@ -(()=>{return(e,t)=>{const n={entity:null,aid:undefined,cid:undefined};class s{constructor(){this.menuClasses=["quality","action","progress"];this.currentMenuClass="quality"}get menuPanel(){return document.querySelector(".download-video-panel")}addMenuClass(){this.menuPanel.classList.remove(...this.menuClasses);this.menuPanel.classList.add(this.currentMenuClass);return this.currentMenuClass}resetMenuClass(){[this.currentMenuClass]=this.menuClasses;this.addMenuClass()}nextMenuClass(){const e=this.menuClasses.indexOf(this.currentMenuClass)+1;const t=this.menuClasses[e>=this.menuClasses.length?0:e];this.currentMenuClass=t;this.addMenuClass();return t}addError(){this.menuPanel.classList.add("error")}removeError(){this.menuPanel.classList.remove("error");this.resetMenuClass()}async getUrl(e){if(e){return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&qn=${e}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&otype=json`}}}class i extends s{async getUrl(e){if(e){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${n.aid}&cid=${n.cid}&qn=${e}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${n.aid}&cid=${n.cid}&qn=&otype=json`}}}class o{constructor(e,t,n){this.quality=e;this.internalName=t;this.displayName=n}async downloadInfo(){const e=new r(this);await e.fetchVideoInfo();return e}static get availableFormats(){return new Promise((e,t)=>{n.entity.getUrl().then(n=>{const s=new XMLHttpRequest;s.addEventListener("load",()=>{const n=JSON.parse(s.responseText);if(n.code!==0){t("获取清晰度信息失败.")}const i=n.data||n.result||n;const a=i.accept_quality;const r=i.accept_format.split(",");const l=i.accept_description;const c=[];while(a.length>0){const e=new o(a.pop(),r.pop(),l.pop());c.push(e)}e(c)});s.addEventListener("error",()=>t(`获取清晰度信息失败.`));s.withCredentials=true;s.open("GET",n);s.send()})})}}class a{constructor(e,t,n,s){this.length=e;this.size=t;this.url=n;this.backupUrls=s}}class r{constructor(e,t){this.format=e;this.fragments=t||[];this.progress=null;this.loaded=0;this.totalSize=null;this.workingXhr=null;this.fragmentSplitFactor=6*5}fetchVideoInfo(){return new Promise((e,t)=>{n.entity.getUrl(this.format.quality).then(n=>{const s=new XMLHttpRequest;s.addEventListener("load",()=>{const n=JSON.parse(s.responseText.replace(/http:/g,"https:"));const i=n.data||n.result||n;if(i.quality!==this.format.quality){t("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const o=i.durl;this.fragments=o.map(e=>new a(e.length,e.size,e.url,e.backup_url));e(this.fragments)});s.withCredentials=true;s.open("GET",n);s.send()})})}cancelDownload(){if("forEach"in this.workingXhr){this.workingXhr.forEach(e=>e.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(e){const t=[];this.workingXhr=[];const n=Math.round(e.size/this.fragmentSplitFactor);let s=0;while(s{let s=0;const o=new XMLHttpRequest;o.open("GET",e.url);o.responseType="arraybuffer";o.withCredentials=false;o.addEventListener("progress",e=>{this.loaded+=e.loaded-s;s=e.loaded;this.progress&&this.progress(this.loaded/this.totalSize)});o.addEventListener("load",()=>{if((""+o.status)[0]==="2"){t(o.response)}else{n(`请求失败.`)}});o.addEventListener("abort",()=>n("下载已取消."));o.addEventListener("error",()=>n(`下载失败.`));o.setRequestHeader("Range",i);o.send();this.workingXhr.push(o)}));s=Math.round(s+n)+1}return Promise.all(t)}copyUrl(){const e=this.fragments.map(e=>e.url).reduce((e,t)=>e+"\r\n"+t);GM_setClipboard(e,"text")}extension(e){return(e||this.fragments[0]).url.indexOf(".flv")!==-1?".flv":".mp4"}makeBlob(e,t=null){return new Blob(Array.isArray(e)?e:[e],{type:this.extension(t)===".flv"?"video/x-flv":"video/mp4"})}cleanUpOldBlobUrl(){const e=$("a#video-complete").attr("href");if(e&&$(`.link[href=${e}]`).length===0){URL.revokeObjectURL(e)}}downloadSingle(e){const[t]=e;const n=this.makeBlob(t);const s=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","")+this.extension();return[n,s]}async downloadMultiple(e){const t=new JSZip;const n=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");if(e.length>1){e.forEach((e,s)=>{const i=this.fragments[s];t.file(`${n} - ${s+1}${this.extension(i)}`,this.makeBlob(e,i))})}else{const[s]=e;t.file(`${n}${this.extension()}`,this.makeBlob(s))}const s=await t.generateAsync({type:"blob"});const i=n+".zip";return[s,i]}async download(){const e=[];this.loaded=0;this.totalSize=this.fragments.map(e=>e.size).reduce((e,t)=>e+t);for(const t of this.fragments){const n=await this.downloadFragment(t);e.push(n)}if(e.length<1){throw new Error("下载失败.")}let t=null;let n=null;if(e.length===1){[t,n]=this.downloadSingle(e)}else{[t,n]=await this.downloadMultiple(e)}const s=URL.createObjectURL(t);this.cleanUpOldBlobUrl();this.progress&&this.progress(0);return{url:s,filename:n}}}async function l(){const e=await SpinQuery.select(()=>(unsafeWindow||window).aid);const t=await SpinQuery.select(()=>(unsafeWindow||window).cid);n.aid=e;n.cid=t;if(document.URL.indexOf("bangumi")!==-1){n.entity=new i}else{n.entity=new s}return e!==undefined&&t!==undefined}async function c(){let e=await o.availableFormats;let[s]=e;const i=async()=>{await l();e=await o.availableFormats;const t=$("ol.video-quality");t.html("");e.forEach(e=>{$(`
      • ${e.displayName}
      • `).on("click",()=>{s=e;n.entity.nextMenuClass()}).prependTo(t)})};Observer.childList("#bofqi",i);const a=()=>s.downloadInfo().catch(e=>{n.entity.addError();$(".video-error").text(e)});async function r(){if(!s){return}n.entity.nextMenuClass();const e=await a();e.progress=(e=>{$(".download-progress-value").text(`${fixed(e*100)}`);$(".download-progress-foreground").css("transform",`scaleX(${e})`)});document.querySelector(".download-progress-cancel>span").onclick=(()=>e.cancelDownload());const t=await e.download().catch(e=>{n.entity.addError();$(".video-error").text(e)});if(!t){return}const i=document.getElementById("video-complete");i.setAttribute("href",t.url);i.setAttribute("download",t.filename);i.click();const o=`下载完成. 再次保存`;Toast.success(o,"下载视频");n.entity.resetMenuClass()}async function c(){if(!s){return}const e=await a();e.copyUrl();Toast.success("已复制链接到剪贴板.","复制链接",3e3);n.entity.resetMenuClass()}$(".video-action>#video-action-download").on("click",r);$(".video-action>#video-action-copy").on("click",c);t.applyStyle("downloadVideoStyle");const d=document.querySelector(".download-video-panel");const u=()=>$(".download-video-panel").toggleClass("opened");$("#download-video").on("click",e=>{if(!d.contains(e.target)){u()}});$(".video-error").on("click",()=>{$(".video-error").text("");n.entity.removeError()});await SpinQuery.select(()=>document.querySelector(".download-video-panel"));n.entity.addMenuClass()}return{widget:{content:t.data.downloadVideoDom.text,condition:l,success:c}}}})(); \ No newline at end of file +(()=>{return(e,t)=>{const n={entity:null,aid:undefined,cid:undefined};class s{constructor(){this.menuClasses=["quality","action","progress"];this.currentMenuClass="quality"}get menuPanel(){return document.querySelector(".download-video-panel")}addMenuClass(){this.menuPanel.classList.remove(...this.menuClasses);this.menuPanel.classList.add(this.currentMenuClass);return this.currentMenuClass}resetMenuClass(){[this.currentMenuClass]=this.menuClasses;this.addMenuClass()}nextMenuClass(){const e=this.menuClasses.indexOf(this.currentMenuClass)+1;const t=this.menuClasses[e>=this.menuClasses.length?0:e];this.currentMenuClass=t;this.addMenuClass();return t}addError(){this.menuPanel.classList.add("error")}removeError(){this.menuPanel.classList.remove("error");this.resetMenuClass()}async getUrl(e){if(e){return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&qn=${e}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&otype=json`}}}class i extends s{async getUrl(e){if(e){return`https://api.bilibili.com/pgc/player/web/playurl?avid=${n.aid}&cid=${n.cid}&qn=${e}&otype=json`}else{return`https://api.bilibili.com/pgc/player/web/playurl?avid=${n.aid}&cid=${n.cid}&qn=&otype=json`}}}class o{constructor(e,t,n){this.quality=e;this.internalName=t;this.displayName=n}async downloadInfo(){const e=new r(this);await e.fetchVideoInfo();return e}static get availableFormats(){return new Promise((e,t)=>{n.entity.getUrl().then(n=>{const s=new XMLHttpRequest;s.addEventListener("load",()=>{const n=JSON.parse(s.responseText);if(n.code!==0){t("获取清晰度信息失败.")}const i=n.data||n.result||n;const a=i.accept_quality;const r=i.accept_format.split(",");const l=i.accept_description;const c=[];while(a.length>0){const e=new o(a.pop(),r.pop(),l.pop());c.push(e)}e(c)});s.addEventListener("error",()=>t(`获取清晰度信息失败.`));s.withCredentials=true;s.open("GET",n);s.send()})})}}class a{constructor(e,t,n,s){this.length=e;this.size=t;this.url=n;this.backupUrls=s}}class r{constructor(e,t){this.format=e;this.fragments=t||[];this.progress=null;this.loaded=0;this.totalSize=null;this.workingXhr=null;this.fragmentSplitFactor=6*5}fetchVideoInfo(){return new Promise((e,t)=>{n.entity.getUrl(this.format.quality).then(n=>{const s=new XMLHttpRequest;s.addEventListener("load",()=>{const n=JSON.parse(s.responseText.replace(/http:/g,"https:"));const i=n.data||n.result||n;if(i.quality!==this.format.quality){t("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const o=i.durl;this.fragments=o.map(e=>new a(e.length,e.size,e.url,e.backup_url));e(this.fragments)});s.withCredentials=true;s.open("GET",n);s.send()})})}cancelDownload(){if("forEach"in this.workingXhr){this.workingXhr.forEach(e=>e.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(e){const t=[];this.workingXhr=[];const n=Math.round(e.size/this.fragmentSplitFactor);let s=0;while(s{let s=0;const o=new XMLHttpRequest;o.open("GET",e.url);o.responseType="arraybuffer";o.withCredentials=false;o.addEventListener("progress",e=>{this.loaded+=e.loaded-s;s=e.loaded;this.progress&&this.progress(this.loaded/this.totalSize)});o.addEventListener("load",()=>{if((""+o.status)[0]==="2"){t(o.response)}else{n(`请求失败.`)}});o.addEventListener("abort",()=>n("下载已取消."));o.addEventListener("error",()=>n(`下载失败.`));o.setRequestHeader("Range",i);o.send();this.workingXhr.push(o)}));s=Math.round(s+n)+1}return Promise.all(t)}copyUrl(){const e=this.fragments.map(e=>e.url).reduce((e,t)=>e+"\r\n"+t);GM_setClipboard(e,"text")}extension(e){return(e||this.fragments[0]).url.indexOf(".flv")!==-1?".flv":".mp4"}makeBlob(e,t=null){return new Blob(Array.isArray(e)?e:[e],{type:this.extension(t)===".flv"?"video/x-flv":"video/mp4"})}cleanUpOldBlobUrl(){const e=$("a#video-complete").attr("href");if(e&&$(`.link[href=${e}]`).length===0){URL.revokeObjectURL(e)}}downloadSingle(e){const[t]=e;const n=this.makeBlob(t);const s=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","")+this.extension();return[n,s]}async downloadMultiple(e){const t=new JSZip;const n=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");if(e.length>1){e.forEach((e,s)=>{const i=this.fragments[s];t.file(`${n} - ${s+1}${this.extension(i)}`,this.makeBlob(e,i))})}else{const[s]=e;t.file(`${n}${this.extension()}`,this.makeBlob(s))}const s=await t.generateAsync({type:"blob"});const i=n+".zip";return[s,i]}async download(){const e=[];this.loaded=0;this.totalSize=this.fragments.map(e=>e.size).reduce((e,t)=>e+t);for(const t of this.fragments){const n=await this.downloadFragment(t);e.push(n)}if(e.length<1){throw new Error("下载失败.")}let t=null;let n=null;if(e.length===1){[t,n]=this.downloadSingle(e)}else{[t,n]=await this.downloadMultiple(e)}const s=URL.createObjectURL(t);this.cleanUpOldBlobUrl();this.progress&&this.progress(0);return{url:s,filename:n}}}async function l(){const e=await SpinQuery.select(()=>(unsafeWindow||window).aid);const t=await SpinQuery.select(()=>(unsafeWindow||window).cid);n.aid=e;n.cid=t;if(document.URL.indexOf("bangumi")!==-1){n.entity=new i}else{n.entity=new s}return Boolean(e&&t)}async function c(){let e=await o.availableFormats;let[s]=e;const i=async()=>{await l();e=await o.availableFormats;const t=$("ol.video-quality");t.html("");e.forEach(e=>{$(`
      • ${e.displayName}
      • `).on("click",()=>{s=e;n.entity.nextMenuClass()}).prependTo(t)})};Observer.childList("#bofqi",i);const a=()=>s.downloadInfo().catch(e=>{n.entity.addError();$(".video-error").text(e)});async function r(){if(!s){return}n.entity.nextMenuClass();const e=await a();e.progress=(e=>{$(".download-progress-value").text(`${fixed(e*100)}`);$(".download-progress-foreground").css("transform",`scaleX(${e})`)});document.querySelector(".download-progress-cancel>span").onclick=(()=>e.cancelDownload());const t=await e.download().catch(e=>{n.entity.addError();$(".video-error").text(e)});if(!t){return}const i=document.getElementById("video-complete");i.setAttribute("href",t.url);i.setAttribute("download",t.filename);i.click();const o=`下载完成. 再次保存`;Toast.success(o,"下载视频");n.entity.resetMenuClass()}async function c(){if(!s){return}const e=await a();e.copyUrl();Toast.success("已复制链接到剪贴板.","复制链接",3e3);n.entity.resetMenuClass()}$(".video-action>#video-action-download").on("click",r);$(".video-action>#video-action-copy").on("click",c);t.applyStyle("downloadVideoStyle");const d=document.querySelector(".download-video-panel");const u=()=>$(".download-video-panel").toggleClass("opened");$("#download-video").on("click",e=>{if(!d.contains(e.target)){u()}});$(".video-error").on("click",()=>{$(".video-error").text("");n.entity.removeError()});await SpinQuery.select(()=>document.querySelector(".download-video-panel"));n.entity.addMenuClass()}return{widget:{content:t.data.downloadVideoDom.text,condition:l,success:c}}}})(); \ No newline at end of file diff --git a/min/view-cover.min.js b/min/view-cover.min.js index 2987e6af1..2d998b0ca 100644 --- a/min/view-cover.min.js +++ b/min/view-cover.min.js @@ -1 +1 @@ -(()=>{return(e,n)=>{const t=n.attributes.videoInfo.export.VideoInfo;class i{constructor(e){this.url=e;if($(".image-viewer").length===0){this.createDom()}this.viewer=$(".image-viewer-container");this.downloadImage()}createDom(){$("body").append(n.data.imageViewerDom.text);$(".image-viewer-container .close").on("click",()=>this.hide());n.applyStyle("imageViewerStyle")}downloadImage(){const e=new XMLHttpRequest;e.open("GET",this.url.replace("http:","https:"),true);e.responseType="blob";e.onload=(()=>{const n=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const t=URL.createObjectURL(e.response);this.imageData=t;this.viewer.find(".download").attr("href",t).attr("download",n);this.viewer.find(".image").prop("src",t)});e.send()}show(){this.viewer.addClass("opened")}hide(){this.viewer.removeClass("opened")}}if($("meta[itemprop='image'],meta[property='og:image']").length>0){return{widget:{content:`\n \n \n 查看封面\n `,condition:async()=>{const e=await SpinQuery.condition(()=>(unsafeWindow||window).aid,e=>e!==undefined);return e!=="undefined"},success:async()=>{async function e(){const e=(unsafeWindow||window).aid;const n=new t(e);await n.fetchInfo();return n.coverUrl}let n=new i(await e());$("#view-cover").on("click",()=>{n.show()});Observer.childList("#bofqi",async()=>{n=new i(await e())})}}}}else{return{widget:{content:`\n \n \n 查看封面\n `,condition:async()=>{const e=await SpinQuery.any(()=>$(".header-info-ctnr .room-cover"));return typeof e!=="undefined"},success:async()=>{const e=$(".header-info-ctnr .room-cover");const n=e.attr("href").match(/space\.bilibili\.com\/([\d]+)/);if(n&&n[1]){const e=n[1];const t=`https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid=${e}`;const o=await downloadText(t);const a=JSON.parse(o).data.cover;const s=new i(a);$("#view-cover").on("click",()=>{s.show()})}}}}}}})(); \ No newline at end of file +(()=>{return(e,t)=>{const n=t.attributes.videoInfo.export.VideoInfo;class i{constructor(e){this.url=e;if($(".image-viewer").length===0){this.createDom()}this.viewer=$(".image-viewer-container");this.downloadImage()}createDom(){$("body").append(t.data.imageViewerDom.text);$(".image-viewer-container .close").on("click",()=>this.hide());t.applyStyle("imageViewerStyle")}downloadImage(){const e=new XMLHttpRequest;e.open("GET",this.url.replace("http:","https:"),true);e.responseType="blob";e.onload=(()=>{const t=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const n=URL.createObjectURL(e.response);this.imageData=n;this.viewer.find(".download").attr("href",n).attr("download",t);this.viewer.find(".image").prop("src",n)});e.send()}show(){this.viewer.addClass("opened")}hide(){this.viewer.removeClass("opened")}}if($("meta[itemprop='image'],meta[property='og:image']").length>0){return{widget:{content:`\n \n \n 查看封面\n `,condition:async()=>{const e=await SpinQuery.select(()=>(unsafeWindow||window).aid);return Boolean(e)},success:async()=>{async function e(){const e=(unsafeWindow||window).aid;const t=new n(e);await t.fetchInfo();return t.coverUrl}let t=new i(await e());$("#view-cover").on("click",()=>{t.show()});Observer.childList("#bofqi",async()=>{t=new i(await e())})}}}}else{return{widget:{content:`\n \n \n 查看封面\n `,condition:async()=>{const e=await SpinQuery.select(()=>document.querySelector(".header-info-ctnr .room-cover"));return Boolean(e)},success:async()=>{const e=$(".header-info-ctnr .room-cover");const t=e.attr("href").match(/space\.bilibili\.com\/([\d]+)/);if(t&&t[1]){const e=t[1];const n=`https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid=${e}`;const o=await downloadText(n);const s=JSON.parse(o).data.cover;const a=new i(s);$("#view-cover").on("click",()=>{a.show()})}}}}}}})(); \ No newline at end of file diff --git a/touch/combo-like.js b/touch/combo-like.js index be50e8e41..d63f4a7ed 100644 --- a/touch/combo-like.js +++ b/touch/combo-like.js @@ -5,6 +5,10 @@ (async () => { const likeButton = await SpinQuery.select(() => document.querySelector(".ops span.like")); + if (!likeButton) + { + return; + } likeButton.style.userSelect = "none"; function mountEvent(name, args) { diff --git a/video/default-danmaku-settings.js b/video/default-danmaku-settings.js index 37eb6a2d0..2dbf7f53b 100644 --- a/video/default-danmaku-settings.js +++ b/video/default-danmaku-settings.js @@ -30,6 +30,10 @@ { await SpinQuery.unsafeJquery(); const settingsIcon = await SpinQuery.any(() => unsafeWindow.$(selectors.settingsIcon)); + if (!settingsIcon) + { + return; + } settingsIcon.mouseover().mouseout(); for (const [type, value] of Object.entries(settings.danmakuBlockSettings)) @@ -45,7 +49,11 @@ { for (const type in settings.danmakuBlockSettings) { - const element = await SpinQuery.select(() =>document.querySelector(selectors[type])); + const element = await SpinQuery.select(() => document.querySelector(selectors[type])); + if (!element) + { + return; + } element.addEventListener("click", () => { settings.danmakuBlockSettings[type] = element.classList.contains("disabled"); diff --git a/video/default-player-mode.js b/video/default-player-mode.js index e095cfd2c..6312407f4 100644 --- a/video/default-player-mode.js +++ b/video/default-player-mode.js @@ -32,6 +32,10 @@ { await SpinQuery.unsafeJquery(); const settingsButton = await SpinQuery.any(() => unsafeWindow.$(".bilibili-player-video-btn-setting")); + if (!settingsButton) + { + return; + } settingsButton.mouseover().mouseout(); lightOff = () => { @@ -55,7 +59,7 @@ it => it.length === 3 && $("video").length > 0 && $("video").prop("duration")); const video = document.querySelector("video"); - if (video.length === 0) + if (!video) { return; } diff --git a/video/default-video-quality.js b/video/default-video-quality.js index 1d9f47b15..a41daf50d 100644 --- a/video/default-video-quality.js +++ b/video/default-video-quality.js @@ -41,6 +41,10 @@ const qualityItems = await SpinQuery.any( () => $(".bilibili-player-video-quality-menu .bui-select-list>li.bui-select-item"), ); + if (!qualityItems) + { + return; + } const descendingOrder = (a, b) => b - a; const [availableHighestQualities] = qualityItems.toArray() .map(it => parseInt(it.getAttribute("data-value"))) @@ -57,7 +61,7 @@ console.info(`[Video Quality] availableHighestQualities=${availableHighestQualities}`); console.info(`[Video Quality] targetQuality=${targetQuality}`); console.info(`[Video Quality] finalQuality=${finalQuality}`); - const video = await SpinQuery.condition(() => document.querySelector("video"), it => it); + const video = await SpinQuery.select(() => document.querySelector("video")); function onplay() { qualityItems.each((_, it) => diff --git a/video/download-danmaku.js b/video/download-danmaku.js index b69273202..333349907 100644 --- a/video/download-danmaku.js +++ b/video/download-danmaku.js @@ -137,10 +137,7 @@ `, condition: async () => { - let cid = await SpinQuery.condition( - () => (unsafeWindow || window).cid, - it => it !== undefined, - ); + let cid = await SpinQuery.select(() => (unsafeWindow || window).cid); return cid !== undefined; }, success: () => diff --git a/video/download-video/download-video.js b/video/download-video/download-video.js index 355fc0f80..ddaea43b2 100644 --- a/video/download-video/download-video.js +++ b/video/download-video/download-video.js @@ -2,17 +2,11 @@ { return (_, resources) => { - // const VideoInfo = resources.attributes.videoInfo.export.VideoInfo; - // const BangumiInfo = resources.attributes.videoInfo.export.BangumiInfo; const pageData = { entity: null, aid: undefined, cid: undefined, }; - - // const bangumiUrls = []; - // let ajaxHooked = false; - class Video { constructor() @@ -64,21 +58,6 @@ } } } - // class Bangumi extends Video - // { - // constructor() - // { - // super(); - // this.menuClasses = ["action", "progress"]; - // this.currentMenuClass = "action"; - // } - // async getUrl() - // { - // const url = await SpinQuery.select(() => bangumiUrls[0]) - // .catch(() => logError("获取番剧下载链接失败.")); - // return url; - // } - // } class Bangumi extends Video { async getUrl(quality) @@ -357,7 +336,7 @@ { pageData.entity = new Video(); } - return aid !== undefined && cid !== undefined; + return Boolean(aid && cid); } async function loadWidget() { diff --git a/video/expand-description/expand-description.js b/video/expand-description/expand-description.js index 548a5b10c..e3c8a07d5 100644 --- a/video/expand-description/expand-description.js +++ b/video/expand-description/expand-description.js @@ -2,18 +2,6 @@ { return (settings, resources) => { - // (async () => - // { - // const expandButton = await SpinQuery.condition( - // () => document.querySelector(".video-desc .btn"), - // it => it.innerText.indexOf("展开更多") !== -1, - // ); - // if (!expandButton) - // { - // return; - // } - // expandButton.click(); - // })(); resources.applyStyle("expandDescriptionStyle"); }; })(); \ No newline at end of file diff --git a/video/view-cover/view-cover.js b/video/view-cover/view-cover.js index ac0e59e95..41a414691 100644 --- a/video/view-cover/view-cover.js +++ b/video/view-cover/view-cover.js @@ -66,11 +66,8 @@ `, condition: async () => { - const aid = await SpinQuery.condition( - () => (unsafeWindow || window).aid, - it => it !== undefined, - ); - return aid !== "undefined"; + const aid = await SpinQuery.select(() => (unsafeWindow || window).aid); + return Boolean(aid); }, success: async () => { @@ -107,8 +104,8 @@ `, condition: async () => { - const coverLink = await SpinQuery.any(() => $(".header-info-ctnr .room-cover")); - return typeof coverLink !== "undefined"; + const coverLink = await SpinQuery.select(() => document.querySelector(".header-info-ctnr .room-cover")); + return Boolean(coverLink); }, success: async () => {