Bilibili-Evolved/min/download-danmaku.min.js
2019-01-26 18:27:22 +08:00

1 line
3.0 KiB
JavaScript

(()=>{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 <button\n class="gui-settings-flat-button"\n id="download-danmaku">\n <i class="icon-danmaku"></i>\n <span>下载弹幕</span>\n <a id="danmaku-link" style="display:none"></a>\n </button>`,condition:async()=>{let e=await SpinQuery.select(()=>(unsafeWindow||window).cid);return Boolean(e)},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)}})}}}}})();