mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
1 line
3.3 KiB
JavaScript
1 line
3.3 KiB
JavaScript
(()=>(e,t)=>{function i(e,t,i){if(t in e){Object.defineProperty(e,t,{value:i,enumerable:true,configurable:true,writable:true})}else{e[t]=i}return e}const{VideoInfo:n}=t.import("video-info");const{getFriendlyTitle:o}=t.import("title");class s{constructor(e){this.url=e;i(this,"viewer",void 0);i(this,"imageData",void 0);if(dq(".image-viewer")===null){this.createContainer()}this.viewer=dq(".image-viewer-container");this.downloadImage();addSettingsListener("filenameFormat",(()=>{this.downloadButton.setAttribute("download",this.filename)}))}createContainer(){var e,i;document.body.insertAdjacentHTML("beforeend",t.import("imageViewerHtml"));const n=dq(".image-viewer-container");const o=dq(".image-viewer");(e=dq(n,".close"))===null||e===void 0?void 0:e.addEventListener("click",(()=>this.hide()));(i=dq(".image-viewer-container"))===null||i===void 0?void 0:i.addEventListener("click",(e=>{if(e.target===n||e.target===o){this.hide()}}));t.applyStyle("imageViewerStyle")}async downloadImage(){const e=dq("#view-cover");e.style.display=this.url?"flex":"none";if(this.url===""){return}const t=URL.createObjectURL(await Ajax.getBlob(this.url.replace("http:","https:")));if(this.imageData){URL.revokeObjectURL(this.imageData)}this.imageData=t;this.downloadButton.href=t;this.downloadButton.download=this.filename;this.copyLinkButton.addEventListener("click",(()=>{if(this.copyLinkButton.classList.contains("success")){return}GM.setClipboard(this.url);this.copyLinkButton.classList.add("success");setTimeout((()=>this.copyLinkButton.classList.remove("success")),1500)}));this.newTabButton.href=this.url;this.imageElement.src=t}show(){this.viewer.classList.add("opened")}hide(){this.viewer.classList.remove("opened")}get downloadButton(){return dq(this.viewer,".download")}get copyLinkButton(){return dq(this.viewer,".copy-link")}get newTabButton(){return dq(this.viewer,".new-tab")}get imageElement(){return dq(this.viewer,".image")}get filename(){return o(document.URL.includes("/www.bilibili.com/bangumi/"))+this.url.substring(this.url.lastIndexOf("."))}}return(()=>{if(!document.URL.includes("live.bilibili.com")){return{widget:{content:`\n<button\n class='gui-settings-flat-button'\n id='view-cover'>\n<i class='icon-view'></i>\n<span>查看封面</span>\n</button>`,condition:async()=>{const e=await SpinQuery.select((()=>unsafeWindow.aid));return Boolean(e)},success:async()=>{async function e(){const e=unsafeWindow.aid;const t=new n(e);try{await t.fetchInfo()}catch(e){return""}return t.coverUrl}let t=new s(await e());const i=dq("#view-cover");i.addEventListener("click",(()=>{t.show()}));const o=async()=>{t=new s(await e())};Observer.videoChange(o)}}}}else{const e=".header-info-ctnr .room-cover, .header-info-ctnr .avatar";return{widget:{content:`\n<button\n class='gui-settings-flat-button'\n id='view-cover'>\n<i class='icon-view'></i>\n<span>查看封面</span>\n</button>`,condition:async()=>{const t=await SpinQuery.select((()=>document.querySelector(e)));return Boolean(t)},success:async()=>{const t=document.querySelector(e);const i=t.href.match(/space\.bilibili\.com\/([\d]+)/);if(i&&i[1]){const e=i[1];const t=`https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid=${e}`;const n=await Ajax.getJson(t);const o=n.data.cover;const a=new s(o);const r=dq("#view-cover");r.addEventListener("click",(()=>{a.show()}))}}}}}})()})(); |