Bilibili-Evolved/registry/dist/components/video/subtitle/download.js
2022-09-18 22:38:17 +08:00

12 lines
14 KiB
JavaScript

!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["video/subtitle/download"]=t():e["video/subtitle/download"]=t()}(self,(function(){return function(){var e,t,n={833:function(e,t,n){"use strict";n.d(t,{mE:function(){return c}});var o=coreApis.ajax,i=n(391),r=n(674);const a=async()=>{const{SubtitleConverter:e,SubtitleSize:t,SubtitleLocation:o}=await Promise.resolve().then(n.bind(n,551)),{playerAgent:i}=await Promise.resolve().then(n.t.bind(n,225,23)),a=localStorage.getItem("bilibili_player_settings");if(!a)return[e.defaultConfig,""];const s=JSON.parse(a).subtitle,c=s.lan,l=(0,r.getFriendlyTitle)(!0),u={.6:t.VerySmall,.8:t.Small,1:t.Medium,1.3:t.Large,1.6:t.VeryLarge}[s.fontsize],d=s.color.toString(16),f=s.backgroundopacity,p={bc:o.BottomCenter,bl:o.BottomLeft,br:o.BottomRight,tc:o.TopCenter,tl:o.TopLeft,tr:o.TopRight}[s.position],g=i.query.video.element.sync();return[{title:l,height:g.videoHeight,width:g.videoWidth,color:d,location:p,opacity:f,size:u,boxPadding:1,boxMargin:32},c]},s=async(e,t)=>{const{VideoInfo:o}=await Promise.resolve().then(n.t.bind(n,77,23)),i=new o(e);return i.cid="string"==typeof t?parseInt(t):t,await i.fetchInfo(),i.subtitles},c=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{...lodash.pick(unsafeWindow,"aid","cid"),title:(0,r.getFriendlyTitle)(!0)};const{aid:c,cid:l}=t;if(!c||!l)throw new Error("未找到视频AID和CID");const u=await s(c,l);if(0===u.length)return i.Toast.info("当前视频没有字幕.","下载字幕",3e3),null;const[d,f]=await a(),p=u.find((e=>e.language===f))||u[0],g=await(0,o.getJson)(p.url),v=g.body;if("ass"===e){const{SubtitleConverter:e}=await Promise.resolve().then(n.bind(n,551)),o=new e({...d,title:t.title}),i=await o.convertToAss(v);return new Blob([i],{type:"text/ass"})}return new Blob([JSON.stringify(v)],{type:"text/json"})}},551:function(e,t,n){"use strict";function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.r(t),n.d(t,{SubtitleConverter:function(){return a},SubtitleLocation:function(){return i},SubtitleSize:function(){return r}});const i={TopLeft:7,TopCenter:8,TopRight:9,BottomLeft:1,BottomCenter:2,BottomRight:3};let r;!function(e){e[e.VerySmall=1]="VerySmall",e[e.Small=2]="Small",e[e.Medium=3]="Medium",e[e.Large=4]="Large",e[e.VeryLarge=5]="VeryLarge"}(r||(r={}));class a{constructor(e){o(this,"config",void 0),this.config=Object.assign(a.defaultConfig,e)}async getAssMeta(){const{convertHexColorForStyle:e}=await Promise.resolve().then(n.t.bind(n,726,23)),t=e(this.config.color),o=e("#000000",this.config.opacity),r=[],a=(10*(this.config.size-3)+48)*this.config.height/720;console.log(a);for(const[e,n]of Object.entries(i))r.push(`Style: ${e},微软雅黑,${a},${t},${t},${o},${o},0,0,0,0,100,100,0,0,3,${this.config.boxPadding},0,${n},${this.config.boxMargin},${this.config.boxMargin},${this.config.boxMargin},0`);return`\n[Script Info]\n; Script generated by Bilibili Evolved Danmaku Converter\n; https://github.com/the1812/Bilibili-Evolved/\nTitle: ${this.config.title}\nScriptType: v4.00+\nPlayResX: ${this.config.width}\nPlayResY: ${this.config.height}\nTimer: 10.0000\nWrapStyle: 0\nScaledBorderAndShadow: no\n\n[V4+ Styles]\nFormat: Name, Fontname, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding\n${r.join("\n")}\n\n[Events]\nFormat: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text`.trim()}async convertToAss(e){const{convertTimeByEndTime:t,normalizeContent:o}=await Promise.resolve().then(n.t.bind(n,726,23));return`${await this.getAssMeta()}\n${e.map((e=>{const[n,r]=t(e.from,e.to);var a;return`Dialogue: 0,${n},${r},${a=this.config.location,Object.entries(i).filter((e=>{let[,t]=e;return t===a})).map((e=>{let[t]=e;return t})).shift()},,0,0,0,,${o(e.content)}`})).join("\n")}`}}o(a,"defaultConfig",void 0),a.defaultConfig={title:"",color:"#ffffff",width:1920,height:1080,size:r.Medium,opacity:.5,location:i.BottomCenter,boxPadding:1,boxMargin:32}},240:function(e,t,n){var o=n(645)((function(e){return e[1]}));o.push([e.id,".download-subtitle-config.download-video-config-section .be-dropdown {\n text-transform: uppercase;\n}",""]),e.exports=o},645:function(e){"use strict";
// eslint-disable-next-line func-names
e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},
// eslint-disable-next-line func-names
t.i=function(e,n,o){"string"==typeof e&&(
// eslint-disable-next-line no-param-reassign
e=[[null,e,""]]);var i={};if(o)for(var r=0;r<this.length;r++){
// eslint-disable-next-line prefer-destructuring
var a=this[r][0];null!=a&&(i[a]=!0)}for(var s=0;s<e.length;s++){var c=[].concat(e[s]);o&&i[c[0]]||(n&&(c[2]?c[2]="".concat(n," and ").concat(c[2]):c[2]=n),t.push(c))}},t}},379:function(e,t,n){"use strict";var o,i=function(){return void 0===o&&(
// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
// @see https://github.com/webpack-contrib/style-loader/issues/177
o=Boolean(window&&document&&document.all&&!window.atob)),o},r=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),a=[];function s(e){for(var t=-1,n=0;n<a.length;n++)if(a[n].identifier===e){t=n;break}return t}function c(e,t){for(var n={},o=[],i=0;i<e.length;i++){var r=e[i],c=t.base?r[0]+t.base:r[0],l=n[c]||0,u="".concat(c," ").concat(l);n[c]=l+1;var d=s(u),f={css:r[1],media:r[2],sourceMap:r[3]};-1!==d?(a[d].references++,a[d].updater(f)):a.push({identifier:u,updater:m(f,t),references:1}),o.push(u)}return o}function l(e){var t=document.createElement("style"),o=e.attributes||{};if(void 0===o.nonce){var i=n.nc;i&&(o.nonce=i)}if(Object.keys(o).forEach((function(e){t.setAttribute(e,o[e])})),"function"==typeof e.insert)e.insert(t);else{var a=r(e.insert||"head");if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(t)}return t}var u,d=(u=[],function(e,t){return u[e]=t,u.filter(Boolean).join("\n")});function f(e,t,n,o){var i=n?"":o.media?"@media ".concat(o.media," {").concat(o.css,"}"):o.css;if(e.styleSheet)e.styleSheet.cssText=d(t,i);else{var r=document.createTextNode(i),a=e.childNodes;a[t]&&e.removeChild(a[t]),a.length?e.insertBefore(r,a[t]):e.appendChild(r)}}function p(e,t,n){var o=n.css,i=n.media,r=n.sourceMap;if(i?e.setAttribute("media",i):e.removeAttribute("media"),r&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),e.styleSheet)e.styleSheet.cssText=o;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(o))}}var g=null,v=0;function m(e,t){var n,o,i;if(t.singleton){var r=v++;n=g||(g=l(t)),o=f.bind(null,n,r,!1),i=f.bind(null,n,r,!0)}else n=l(t),o=p.bind(null,n,t),i=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)};return o(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;o(e=t)}else i()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=i());var n=c(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var o=0;o<n.length;o++){var i=s(n[o]);a[i].references--}for(var r=c(e,t),l=0;l<n.length;l++){var u=s(n[l]);0===a[u].references&&(a[u].updater(),a.splice(u,1))}n=r}}}},273:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return f}});var o=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"multiple-widgets"},[n("DefaultWidget",{attrs:{disabled:e.disabled,name:"下载字幕 (JSON)",icon:"subtitle"},on:{click:function(t){return e.download("json")}}}),e._v(" "),n("DefaultWidget",{attrs:{disabled:e.disabled,name:"下载字幕 (ASS)",icon:"subtitle"},on:{click:function(t){return e.download("ass")}}})],1)};o._withStripped=!0;var i=coreApis.pluginApis.data,r=n(648),a=coreApis.utils.log,s=n(674),c=coreApis.download,l=n(833);(0,i.addData)("ui.icons",(e=>{e.subtitle='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22"><path d="M4 4h14a2 2 0 012 2v10a2 2 0 01-2 2H4a2 2 0 01-2-2V6a2 2 0 012-2zm5 5.5a1 1 0 100-2H6a2 2 0 00-2 2v3a2 2 0 002 2h3a1 1 0 000-2H7a1 1 0 01-1-1v-1a1 1 0 011-1h2zm8 0a1 1 0 000-2h-3a2 2 0 00-2 2v3a2 2 0 002 2h3a1 1 0 000-2h-2a1 1 0 01-1-1v-1a1 1 0 011-1h2z" fill-rule="evenodd"/></svg>'}));var u=Vue.extend({components:{DefaultWidget:r.DefaultWidget},data:()=>({disabled:!1}),methods:{async download(e){try{this.disabled=!0;const t=await(0,l.mE)(e);c.DownloadPackage.single(`${(0,s.getFriendlyTitle)(!0)}.${e}`,t)}catch(e){(0,a.logError)(e)}finally{this.disabled=!1}}}}),d=(0,n(900).Z)(u,o,[],!1,null,null,null);d.options.__file="registry/lib/components/video/subtitle/download/DownloadSubtitle.vue";var f=d.exports},620:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return g}});var o=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"download-subtitle-config download-video-config-section"},[n("div",{staticClass:"download-video-config-item"},[n("div",{staticClass:"download-video-config-title"},[e._v("\n 字幕:\n ")]),e._v(" "),n("VDropdown",{attrs:{items:e.items},scopedSlots:e._u([{key:"item",fn:function(t){var n=t.item;return[e._v("\n "+e._s(n)+"\n ")]}}]),model:{value:e.type,callback:function(t){e.type=t},expression:"type"}})],1)])};o._withStripped=!0;var i=coreApis.settings,r=n(648);const a=(0,i.getComponentSettings)("downloadVideo").options;var s=Vue.extend({components:{VDropdown:r.VDropdown},data:()=>({type:a.subtitleType??"无",items:["无","ass","json"]}),computed:{enabled(){return"无"!==this.type}},watch:{type(e){a.subtitleType=e}}}),c=n(379),l=n.n(c),u=n(240),d=n.n(u),f={insert:"head",singleton:!1},p=(l()(d(),f),d().locals,(0,n(900).Z)(s,o,[],!1,null,null,null));p.options.__file="registry/lib/components/video/subtitle/download/Plugin.vue";var g=p.exports},900:function(e,t,n){"use strict";function o(e,t,n,o,i,r,a,s){var c,l="function"==typeof e?e.options:e;if(t&&(l.render=t,l.staticRenderFns=n,l._compiled=!0),o&&(l.functional=!0),r&&(l._scopeId="data-v-"+r),a?(c=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},l._ssrRegister=c):i&&(c=s?function(){i.call(this,(l.functional?this.parent:this).$root.$options.shadowRoot)}:i),c)if(l.functional){l._injectStyles=c;var u=l.render;l.render=function(e,t){return c.call(t),u(e,t)}}else{var d=l.beforeCreate;l.beforeCreate=d?[].concat(d,c):[c]}return{exports:e,options:l}}n.d(t,{Z:function(){return o}})},726:function(e){"use strict";e.exports=coreApis.componentApis.video.assUtils},225:function(e){"use strict";e.exports=coreApis.componentApis.video.playerAgent},77:function(e){"use strict";e.exports=coreApis.componentApis.video.videoInfo},391:function(e){"use strict";e.exports=coreApis.toast},648:function(e){"use strict";e.exports=coreApis.ui},674:function(e){"use strict";e.exports=coreApis.utils.title}},o={};function i(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={id:e,exports:{}};return n[e](r,r.exports,i),r.exports}i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,{a:t}),t},t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},i.t=function(n,o){if(1&o&&(n=this(n)),8&o)return n;if("object"==typeof n&&n){if(4&o&&n.__esModule)return n;if(16&o&&"function"==typeof n.then)return n}var r=Object.create(null);i.r(r);var a={};e=e||[null,t({}),t([]),t(t)];for(var s=2&o&&n;"object"==typeof s&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach((function(e){a[e]=function(){return n[e]}}));return a.default=function(){return n},i.d(r,a),r},i.d=function(e,t){for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return function(){"use strict";i.d(r,{component:function(){return s}});var e=coreApis.componentApis.define,t=coreApis.spinQuery,n=i(391),o=coreApis.utils.urls,a=i(833);const s=(0,e.defineComponentMetadata)({name:"downloadSubtitle",displayName:"下载字幕",description:{"zh-CN":"启用下载字幕支持, 在视频页面中可从功能面板里下载字幕."},tags:[componentsTags.video],entry:none,urlInclude:o.videoUrls,widget:{condition:t.hasVideo,component:()=>Promise.resolve().then(i.bind(i,273)).then((e=>e.default))},plugin:{displayName:"下载视频 - 下载字幕支持",setup:e=>{let{addData:t}=e;t("downloadVideo.assets",(async e=>{e.push({name:"downloadSubtitles",displayName:"下载字幕",getAssets:async(e,t)=>{const{type:o,enabled:i}=t;if(!i)return[];const r=n.Toast.info("获取字幕中...","下载字幕");let s=0;const c=await Promise.allSettled(e.map((async t=>{const n=await(0,a.mE)(o,t.input);return s++,r.message=`获取字幕中... (${s}/${e.length})`,{name:`${t.input.title}.${o}`,data:n}}))),l=c.filter((e=>"fulfilled"===e.status)),u=c.filter((e=>"rejected"===e.status));return r.message=`获取完成. 成功 ${l.length} 个, 失败 ${u.length} 个.`,l.map((e=>e.value))},component:()=>Promise.resolve().then(i.bind(i,620)).then((e=>e.default))})}))}},commitHash:"45e1d6c6a44e57d6fec1a584f971e8e263f43c96",coreVersion:"2.4.1"})}(),r=r.component}()}));