mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-08 19:06:15 -08:00
修改字幕插件
This commit is contained in:
1 parent
729c734b56
commit
c162d8493b
10 files changed
+140
-100
No files matched your search
@@ -1,68 +1,74 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
||||
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
||||
(factory((global['artplayer-plugin-subtitle'] = {})));
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
||||
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
||||
(factory((global['artplayer-plugin-subtitle'] = {})));
|
||||
}(this, (function (exports) { 'use strict';
|
||||
|
||||
function createCommonjsModule(fn, module) {
|
||||
return module = { exports: {} }, fn(module, module.exports), module.exports;
|
||||
}
|
||||
function i18nMix(i18n) {
|
||||
i18n.update({
|
||||
'zh-cn': {
|
||||
'Subtitle offset time': '字幕偏移时间'
|
||||
},
|
||||
'zh-tw': {
|
||||
'Subtitle offset time': '字幕偏移時間'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var _typeof_1 = createCommonjsModule(function (module) {
|
||||
function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); }
|
||||
function settingMix(art) {
|
||||
var i18n = art.i18n,
|
||||
proxy = art.events.proxy;
|
||||
return {
|
||||
title: 'Subtitle',
|
||||
name: 'subtitle',
|
||||
index: 20,
|
||||
html: "\n <div>\n <div class=\"art-setting-header\">\n ".concat(i18n.get('Subtitle offset time'), ": <span class=\"art-subtitle-value\">0</span>s\n </div>\n <div class=\"art-setting-body\">\n <input style=\"width: 100%;\" class=\"art-subtitle-range\" type=\"range\" min=\"-5\" max=\"5\" step=\"1\">\n </div>\n </div>\n "),
|
||||
mounted: function mounted($setting) {
|
||||
var $range = $setting.querySelector('.art-subtitle-range');
|
||||
var $value = $setting.querySelector('.art-subtitle-value');
|
||||
proxy($range, 'change', function () {
|
||||
var value = $range.value;
|
||||
$value.innerText = value;
|
||||
art.plugins.artplayerPluginSubtitle.set(Number(value));
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function _typeof(obj) {
|
||||
if (typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol") {
|
||||
module.exports = _typeof = function _typeof(obj) {
|
||||
return _typeof2(obj);
|
||||
};
|
||||
} else {
|
||||
module.exports = _typeof = function _typeof(obj) {
|
||||
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj);
|
||||
};
|
||||
}
|
||||
function artplayerPluginSubtitle(art) {
|
||||
var setting = art.setting,
|
||||
notice = art.notice,
|
||||
refs = art.refs,
|
||||
i18n = art.i18n;
|
||||
var cuesCache = [];
|
||||
i18nMix(i18n);
|
||||
setting.add(settingMix);
|
||||
var clamp = art.constructor.utils.clamp;
|
||||
return {
|
||||
set: function set(value) {
|
||||
var cues = Array.from(refs.$track.track.cues);
|
||||
var time = clamp(value, -5, 5);
|
||||
cues.forEach(function (cue, index) {
|
||||
if (!cuesCache[index]) {
|
||||
cuesCache[index] = {
|
||||
startTime: cue.startTime,
|
||||
endTime: cue.endTime
|
||||
};
|
||||
}
|
||||
|
||||
return _typeof(obj);
|
||||
}
|
||||
cue.startTime = cuesCache[index].startTime + time;
|
||||
cue.endTime = cuesCache[index].endTime + time;
|
||||
});
|
||||
notice.show("".concat(i18n.get('Subtitle offset time'), ": ").concat(value, "s"));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = _typeof;
|
||||
});
|
||||
window.artplayerPluginSubtitle = artplayerPluginSubtitle;
|
||||
|
||||
function artplayerPluginSubtitle(option) {
|
||||
return function (art) {
|
||||
var _art$constructor$util = art.constructor.utils,
|
||||
errorHandle = _art$constructor$util.errorHandle,
|
||||
clamp = _art$constructor$util.clamp,
|
||||
sleep = _art$constructor$util.sleep;
|
||||
errorHandle(option && typeof option.time === 'number', "The plugin 'artplayerPluginSubtitle': 'option.time' require 'number' type, but got '".concat(_typeof_1(option.time), "'"));
|
||||
var retry = 0;
|
||||
var maxRetry = 10;
|
||||
var time = clamp(option.time, -10, 10);
|
||||
exports.default = artplayerPluginSubtitle;
|
||||
|
||||
function adjust() {
|
||||
errorHandle(retry < maxRetry, 'It seems that something wrong for reading subtitle');
|
||||
retry += 1;
|
||||
var cues = Array.from(art.refs.$track.track.cues);
|
||||
|
||||
if (cues.length === 0) {
|
||||
sleep(100).then(adjust);
|
||||
} else {
|
||||
cues.forEach(function (cue) {
|
||||
cue.startTime += time;
|
||||
cue.endTime += time;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
art.on('subtitle:load', adjust);
|
||||
};
|
||||
}
|
||||
|
||||
window.artplayerPluginSubtitle = artplayerPluginSubtitle;
|
||||
|
||||
exports.default = artplayerPluginSubtitle;
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
})));
|
||||
//# sourceMappingURL=artplayer-plugin-subtitle.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"artplayer-plugin-subtitle.js","sources":["../../../packages/artplayer-plugin-subtitle/node_modules/@babel/runtime/helpers/typeof.js","../../../packages/artplayer-plugin-subtitle/src/index.js"],"sourcesContent":["function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","function artplayerPluginSubtitle(option) {\n return art => {\n const { errorHandle, clamp, sleep } = art.constructor.utils;\n\n errorHandle(\n option && typeof option.time === 'number',\n `The plugin 'artplayerPluginSubtitle': 'option.time' require 'number' type, but got '${typeof option.time}'`,\n );\n\n let retry = 0;\n const maxRetry = 10;\n const time = clamp(option.time, -10, 10);\n\n function adjust() {\n errorHandle(retry < maxRetry, 'It seems that something wrong for reading subtitle');\n retry += 1;\n const cues = Array.from(art.refs.$track.track.cues);\n if (cues.length === 0) {\n sleep(100).then(adjust);\n } else {\n cues.forEach(cue => {\n cue.startTime += time;\n cue.endTime += time;\n });\n }\n }\n\n art.on('subtitle:load', adjust);\n };\n}\n\nwindow.artplayerPluginSubtitle = artplayerPluginSubtitle;\nexport default artplayerPluginSubtitle;\n"],"names":["artplayerPluginSubtitle","option","art","constructor","utils","errorHandle","clamp","sleep","time","retry","maxRetry","adjust","cues","Array","from","refs","$track","track","length","then","forEach","cue","startTime","endTime","on","window"],"mappings":";;;;;;;;;;;CAAA,SAAS,QAAQ,CAAC,GAAG,EAAE,EAAE,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,EAAE,QAAQ,GAAG,SAAS,QAAQ,CAAC,GAAG,EAAE,EAAE,OAAO,OAAO,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAG,SAAS,QAAQ,CAAC,GAAG,EAAE,EAAE,OAAO,GAAG,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;;CAErW,SAAS,OAAO,CAAC,GAAG,EAAE;GACpB,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;KAC1E,cAAc,GAAG,OAAO,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE;OAC/C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;MACtB,CAAC;IACH,MAAM;KACL,cAAc,GAAG,OAAO,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE;OAC/C,OAAO,GAAG,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;MACjI,CAAC;IACH;;GAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;EACrB;;CAED,cAAc,GAAG,OAAO;;;CChBxB,SAASA,uBAAT,CAAiCC,MAAjC,EAAyC;CACrC,SAAO,UAAAC,GAAG,EAAI;CAAA,gCAC4BA,GAAG,CAACC,WAAJ,CAAgBC,KAD5C;CAAA,QACFC,WADE,yBACFA,WADE;CAAA,QACWC,KADX,yBACWA,KADX;CAAA,QACkBC,KADlB,yBACkBA,KADlB;CAGVF,IAAAA,WAAW,CACPJ,MAAM,IAAI,OAAOA,MAAM,CAACO,IAAd,KAAuB,QAD1B,0GAEuFP,MAAM,CAACO,IAF9F,QAAX;CAKA,QAAIC,KAAK,GAAG,CAAZ;CACA,QAAMC,QAAQ,GAAG,EAAjB;CACA,QAAMF,IAAI,GAAGF,KAAK,CAACL,MAAM,CAACO,IAAR,EAAc,CAAC,EAAf,EAAmB,EAAnB,CAAlB;;CAEA,aAASG,MAAT,GAAkB;CACdN,MAAAA,WAAW,CAACI,KAAK,GAAGC,QAAT,EAAmB,oDAAnB,CAAX;CACAD,MAAAA,KAAK,IAAI,CAAT;CACA,UAAMG,IAAI,GAAGC,KAAK,CAACC,IAAN,CAAWZ,GAAG,CAACa,IAAJ,CAASC,MAAT,CAAgBC,KAAhB,CAAsBL,IAAjC,CAAb;;CACA,UAAIA,IAAI,CAACM,MAAL,KAAgB,CAApB,EAAuB;CACnBX,QAAAA,KAAK,CAAC,GAAD,CAAL,CAAWY,IAAX,CAAgBR,MAAhB;CACH,OAFD,MAEO;CACHC,QAAAA,IAAI,CAACQ,OAAL,CAAa,UAAAC,GAAG,EAAI;CAChBA,UAAAA,GAAG,CAACC,SAAJ,IAAiBd,IAAjB;CACAa,UAAAA,GAAG,CAACE,OAAJ,IAAef,IAAf;CACH,SAHD;CAIH;CACJ;;CAEDN,IAAAA,GAAG,CAACsB,EAAJ,CAAO,eAAP,EAAwBb,MAAxB;CACH,GA3BD;CA4BH;;CAEDc,MAAM,CAACzB,uBAAP,GAAiCA,uBAAjC;;;;;;;;;;;;"}
|
||||
{"version":3,"file":"artplayer-plugin-subtitle.js","sources":["../../../packages/artplayer-plugin-subtitle/src/index.js"],"sourcesContent":["function i18nMix(i18n) {\n i18n.update({\n 'zh-cn': {\n 'Subtitle offset time': '字幕偏移时间',\n },\n 'zh-tw': {\n 'Subtitle offset time': '字幕偏移時間',\n },\n });\n}\n\nfunction settingMix(art) {\n const {\n i18n,\n events: { proxy },\n } = art;\n return {\n title: 'Subtitle',\n name: 'subtitle',\n index: 20,\n html: `\n <div>\n <div class=\"art-setting-header\">\n ${i18n.get('Subtitle offset time')}: <span class=\"art-subtitle-value\">0</span>s\n </div>\n <div class=\"art-setting-body\">\n <input style=\"width: 100%;\" class=\"art-subtitle-range\" type=\"range\" min=\"-5\" max=\"5\" step=\"1\">\n </div>\n </div>\n `,\n mounted: $setting => {\n const $range = $setting.querySelector('.art-subtitle-range');\n const $value = $setting.querySelector('.art-subtitle-value');\n proxy($range, 'change', () => {\n const { value } = $range;\n $value.innerText = value;\n art.plugins.artplayerPluginSubtitle.set(Number(value));\n });\n },\n };\n}\n\nfunction artplayerPluginSubtitle(art) {\n const { setting, notice, refs, i18n } = art;\n const cuesCache = [];\n i18nMix(i18n);\n setting.add(settingMix);\n const { clamp } = art.constructor.utils;\n return {\n set(value) {\n const cues = Array.from(refs.$track.track.cues);\n const time = clamp(value, -5, 5);\n cues.forEach((cue, index) => {\n if (!cuesCache[index]) {\n cuesCache[index] = {\n startTime: cue.startTime,\n endTime: cue.endTime,\n };\n }\n cue.startTime = cuesCache[index].startTime + time;\n cue.endTime = cuesCache[index].endTime + time;\n });\n notice.show(`${i18n.get('Subtitle offset time')}: ${value}s`);\n },\n };\n}\n\nwindow.artplayerPluginSubtitle = artplayerPluginSubtitle;\nexport default artplayerPluginSubtitle;\n"],"names":["i18nMix","i18n","update","settingMix","art","proxy","events","title","name","index","html","get","mounted","$setting","$range","querySelector","$value","value","innerText","plugins","artplayerPluginSubtitle","set","Number","setting","notice","refs","cuesCache","add","clamp","constructor","utils","cues","Array","from","$track","track","time","forEach","cue","startTime","endTime","show","window"],"mappings":";;;;;;IAAA,SAASA,OAAT,CAAiBC,IAAjB,EAAuB;IACnBA,EAAAA,IAAI,CAACC,MAAL,CAAY;IACR,aAAS;IACL,8BAAwB;IADnB,KADD;IAIR,aAAS;IACL,8BAAwB;IADnB;IAJD,GAAZ;IAQH;;IAED,SAASC,UAAT,CAAoBC,GAApB,EAAyB;IAAA,MAEjBH,IAFiB,GAIjBG,GAJiB,CAEjBH,IAFiB;IAAA,MAGPI,KAHO,GAIjBD,GAJiB,CAGjBE,MAHiB,CAGPD,KAHO;IAKrB,SAAO;IACHE,IAAAA,KAAK,EAAE,UADJ;IAEHC,IAAAA,IAAI,EAAE,UAFH;IAGHC,IAAAA,KAAK,EAAE,EAHJ;IAIHC,IAAAA,IAAI,yGAGUT,IAAI,CAACU,GAAL,CAAS,sBAAT,CAHV,mTAJD;IAcHC,IAAAA,OAAO,EAAE,iBAAAC,QAAQ,EAAI;IACjB,UAAMC,MAAM,GAAGD,QAAQ,CAACE,aAAT,CAAuB,qBAAvB,CAAf;IACA,UAAMC,MAAM,GAAGH,QAAQ,CAACE,aAAT,CAAuB,qBAAvB,CAAf;IACAV,MAAAA,KAAK,CAACS,MAAD,EAAS,QAAT,EAAmB,YAAM;IAAA,YAClBG,KADkB,GACRH,MADQ,CAClBG,KADkB;IAE1BD,QAAAA,MAAM,CAACE,SAAP,GAAmBD,KAAnB;IACAb,QAAAA,GAAG,CAACe,OAAJ,CAAYC,uBAAZ,CAAoCC,GAApC,CAAwCC,MAAM,CAACL,KAAD,CAA9C;IACH,OAJI,CAAL;IAKH;IAtBE,GAAP;IAwBH;;IAED,SAASG,uBAAT,CAAiChB,GAAjC,EAAsC;IAAA,MAC1BmB,OAD0B,GACMnB,GADN,CAC1BmB,OAD0B;IAAA,MACjBC,MADiB,GACMpB,GADN,CACjBoB,MADiB;IAAA,MACTC,IADS,GACMrB,GADN,CACTqB,IADS;IAAA,MACHxB,IADG,GACMG,GADN,CACHH,IADG;IAElC,MAAMyB,SAAS,GAAG,EAAlB;IACA1B,EAAAA,OAAO,CAACC,IAAD,CAAP;IACAsB,EAAAA,OAAO,CAACI,GAAR,CAAYxB,UAAZ;IAJkC,MAK1ByB,KAL0B,GAKhBxB,GAAG,CAACyB,WAAJ,CAAgBC,KALA,CAK1BF,KAL0B;IAMlC,SAAO;IACHP,IAAAA,GADG,eACCJ,KADD,EACQ;IACP,UAAMc,IAAI,GAAGC,KAAK,CAACC,IAAN,CAAWR,IAAI,CAACS,MAAL,CAAYC,KAAZ,CAAkBJ,IAA7B,CAAb;IACA,UAAMK,IAAI,GAAGR,KAAK,CAACX,KAAD,EAAQ,CAAC,CAAT,EAAY,CAAZ,CAAlB;IACAc,MAAAA,IAAI,CAACM,OAAL,CAAa,UAACC,GAAD,EAAM7B,KAAN,EAAgB;IACzB,YAAI,CAACiB,SAAS,CAACjB,KAAD,CAAd,EAAuB;IACnBiB,UAAAA,SAAS,CAACjB,KAAD,CAAT,GAAmB;IACf8B,YAAAA,SAAS,EAAED,GAAG,CAACC,SADA;IAEfC,YAAAA,OAAO,EAAEF,GAAG,CAACE;IAFE,WAAnB;IAIH;;IACDF,QAAAA,GAAG,CAACC,SAAJ,GAAgBb,SAAS,CAACjB,KAAD,CAAT,CAAiB8B,SAAjB,GAA6BH,IAA7C;IACAE,QAAAA,GAAG,CAACE,OAAJ,GAAcd,SAAS,CAACjB,KAAD,CAAT,CAAiB+B,OAAjB,GAA2BJ,IAAzC;IACH,OATD;IAUAZ,MAAAA,MAAM,CAACiB,IAAP,WAAexC,IAAI,CAACU,GAAL,CAAS,sBAAT,CAAf,eAAoDM,KAApD;IACH;IAfE,GAAP;IAiBH;;IAEDyB,MAAM,CAACtB,uBAAP,GAAiCA,uBAAjC;;;;;;;;;;;;"}
|
||||
@@ -828,8 +828,8 @@
|
||||
}
|
||||
}, {
|
||||
key: "update",
|
||||
value: function update(callback) {
|
||||
i18nMap = callback(i18nMap);
|
||||
value: function update(value) {
|
||||
i18nMap = deepmerge_1(i18nMap, value);
|
||||
this.init();
|
||||
}
|
||||
}]);
|
||||
@@ -5040,7 +5040,7 @@
|
||||
var i18n = art.i18n,
|
||||
player = art.player;
|
||||
return objectSpread({}, settingOption, {
|
||||
html: "\n <div class=\"art-setting-header\">".concat(i18n.get(settingOption.title), "</div>\n <div class=\"art-setting-body\">\n <div class=\"art-setting-btns\">\n <div class=\"art-setting-btn current\">\n <span data-flip=\"normal\">").concat(i18n.get('Normal'), "</span>\n </div>\n <div class=\"art-setting-btn\">\n <span data-flip=\"horizontal\">").concat(i18n.get('Horizontal'), "</span>\n </div>\n <div class=\"art-setting-btn\">\n <span data-flip=\"vertical\">").concat(i18n.get('Vertical'), "</span>\n </div>\n </div>\n </div>\n "),
|
||||
html: "\n <div class=\"art-setting-header\">".concat(i18n.get('Flip'), "</div>\n <div class=\"art-setting-body\">\n <div class=\"art-setting-btns\">\n <div class=\"art-setting-btn current\">\n <span data-flip=\"normal\">").concat(i18n.get('Normal'), "</span>\n </div>\n <div class=\"art-setting-btn\">\n <span data-flip=\"horizontal\">").concat(i18n.get('Horizontal'), "</span>\n </div>\n <div class=\"art-setting-btn\">\n <span data-flip=\"vertical\">").concat(i18n.get('Vertical'), "</span>\n </div>\n </div>\n </div>\n "),
|
||||
click: function click(event) {
|
||||
var target = event.target;
|
||||
var flip = target.dataset.flip;
|
||||
@@ -5093,7 +5093,6 @@
|
||||
});
|
||||
this.add(flip({
|
||||
disable: false,
|
||||
title: 'Flip',
|
||||
name: 'flip',
|
||||
index: 10
|
||||
}));
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"artplayer.js","sources":["../../../packages/artplayer/node_modules/@babel/runtime/helpers/classCallCheck.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/createClass.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/typeof.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/getPrototypeOf.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/inherits.js","../../../packages/artplayer/node_modules/tiny-emitter/index.js","../../../packages/artplayer/node_modules/option-validator/dist/option-validator.js","../../../packages/artplayer/node_modules/deepmerge/dist/es.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/isNativeFunction.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/construct.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/wrapNativeSuper.js","../../../packages/artplayer/src/utils/error.js","../../../packages/artplayer/src/utils/dom.js","../../../packages/artplayer/src/utils/subtitle.js","../../../packages/artplayer/src/utils/index.js","../../../packages/artplayer/src/scheme/validElement.js","../../../packages/artplayer/src/scheme/validStringEmpty.js","../../../packages/artplayer/src/scheme/index.js","../../../packages/artplayer/src/config/mimeCodec.js","../../../packages/artplayer/src/config/mse.js","../../../packages/artplayer/src/config/video.js","../../../packages/artplayer/src/config/index.js","../../../packages/artplayer/src/template.js","../../../packages/artplayer/src/i18n.js","../../../packages/artplayer/src/player/mountUrlMix.js","../../../packages/artplayer/src/player/attrInit.js","../../../packages/artplayer/src/player/eventInit.js","../../../packages/artplayer/src/player/playMix.js","../../../packages/artplayer/src/player/pauseMin.js","../../../packages/artplayer/src/player/toggleMix.js","../../../packages/artplayer/src/player/seekMix.js","../../../packages/artplayer/src/player/volumeMix.js","../../../packages/artplayer/src/player/currentTimeMix.js","../../../packages/artplayer/src/player/durationMix.js","../../../packages/artplayer/src/player/switchQualityMix.js","../../../packages/artplayer/src/player/playbackRateMix.js","../../../packages/artplayer/src/player/aspectRatioMix.js","../../../packages/artplayer/src/player/screenshotMix.js","../../../packages/artplayer/node_modules/screenfull/dist/screenfull.js","../../../packages/artplayer/src/player/fullscreenMix.js","../../../packages/artplayer/src/player/fullscreenWebMix.js","../../../packages/artplayer/node_modules/get-size/get-size.js","../../../packages/artplayer/node_modules/ev-emitter/ev-emitter.js","../../../packages/artplayer/node_modules/unipointer/unipointer.js","../../../packages/artplayer/node_modules/unidragger/unidragger.js","../../../packages/artplayer/node_modules/draggabilly/draggabilly.js","../../../packages/artplayer/src/player/pipMix.js","../../../packages/artplayer/src/player/loadedMix.js","../../../packages/artplayer/src/player/playedMix.js","../../../packages/artplayer/src/player/autoSizeMix.js","../../../packages/artplayer/src/player/flipMix.js","../../../packages/artplayer/src/player/index.js","../../../packages/artplayer/src/utils/component.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/defineProperty.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/objectSpread.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/arrayWithHoles.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/nonIterableRest.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/slicedToArray.js","../../../packages/artplayer/src/icons/index.js","../../../packages/artplayer/src/controls/fullscreen.js","../../../packages/artplayer/src/controls/fullscreenWeb.js","../../../packages/artplayer/src/controls/pip.js","../../../packages/artplayer/src/controls/playAndPause.js","../../../packages/artplayer/src/controls/progress.js","../../../packages/artplayer/src/controls/subtitle.js","../../../packages/artplayer/src/controls/time.js","../../../packages/artplayer/src/controls/volume.js","../../../packages/artplayer/src/controls/setting.js","../../../packages/artplayer/src/controls/thumbnails.js","../../../packages/artplayer/src/controls/screenshot.js","../../../packages/artplayer/src/controls/quality.js","../../../packages/artplayer/src/controls/index.js","../../../packages/artplayer/src/contextmenu/playbackRate.js","../../../packages/artplayer/src/contextmenu/aspectRatio.js","../../../packages/artplayer/src/contextmenu/info.js","../../../packages/artplayer/srcLine truncated
|
||||
{"version":3,"file":"artplayer.js","sources":["../../../packages/artplayer/node_modules/@babel/runtime/helpers/classCallCheck.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/createClass.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/typeof.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/getPrototypeOf.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/inherits.js","../../../packages/artplayer/node_modules/tiny-emitter/index.js","../../../packages/artplayer/node_modules/option-validator/dist/option-validator.js","../../../packages/artplayer/node_modules/deepmerge/dist/es.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/isNativeFunction.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/construct.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/wrapNativeSuper.js","../../../packages/artplayer/src/utils/error.js","../../../packages/artplayer/src/utils/dom.js","../../../packages/artplayer/src/utils/subtitle.js","../../../packages/artplayer/src/utils/index.js","../../../packages/artplayer/src/scheme/validElement.js","../../../packages/artplayer/src/scheme/validStringEmpty.js","../../../packages/artplayer/src/scheme/index.js","../../../packages/artplayer/src/config/mimeCodec.js","../../../packages/artplayer/src/config/mse.js","../../../packages/artplayer/src/config/video.js","../../../packages/artplayer/src/config/index.js","../../../packages/artplayer/src/template.js","../../../packages/artplayer/src/i18n.js","../../../packages/artplayer/src/player/mountUrlMix.js","../../../packages/artplayer/src/player/attrInit.js","../../../packages/artplayer/src/player/eventInit.js","../../../packages/artplayer/src/player/playMix.js","../../../packages/artplayer/src/player/pauseMin.js","../../../packages/artplayer/src/player/toggleMix.js","../../../packages/artplayer/src/player/seekMix.js","../../../packages/artplayer/src/player/volumeMix.js","../../../packages/artplayer/src/player/currentTimeMix.js","../../../packages/artplayer/src/player/durationMix.js","../../../packages/artplayer/src/player/switchQualityMix.js","../../../packages/artplayer/src/player/playbackRateMix.js","../../../packages/artplayer/src/player/aspectRatioMix.js","../../../packages/artplayer/src/player/screenshotMix.js","../../../packages/artplayer/node_modules/screenfull/dist/screenfull.js","../../../packages/artplayer/src/player/fullscreenMix.js","../../../packages/artplayer/src/player/fullscreenWebMix.js","../../../packages/artplayer/node_modules/get-size/get-size.js","../../../packages/artplayer/node_modules/ev-emitter/ev-emitter.js","../../../packages/artplayer/node_modules/unipointer/unipointer.js","../../../packages/artplayer/node_modules/unidragger/unidragger.js","../../../packages/artplayer/node_modules/draggabilly/draggabilly.js","../../../packages/artplayer/src/player/pipMix.js","../../../packages/artplayer/src/player/loadedMix.js","../../../packages/artplayer/src/player/playedMix.js","../../../packages/artplayer/src/player/autoSizeMix.js","../../../packages/artplayer/src/player/flipMix.js","../../../packages/artplayer/src/player/index.js","../../../packages/artplayer/src/utils/component.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/defineProperty.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/objectSpread.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/arrayWithHoles.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/nonIterableRest.js","../../../packages/artplayer/node_modules/@babel/runtime/helpers/slicedToArray.js","../../../packages/artplayer/src/icons/index.js","../../../packages/artplayer/src/controls/fullscreen.js","../../../packages/artplayer/src/controls/fullscreenWeb.js","../../../packages/artplayer/src/controls/pip.js","../../../packages/artplayer/src/controls/playAndPause.js","../../../packages/artplayer/src/controls/progress.js","../../../packages/artplayer/src/controls/subtitle.js","../../../packages/artplayer/src/controls/time.js","../../../packages/artplayer/src/controls/volume.js","../../../packages/artplayer/src/controls/setting.js","../../../packages/artplayer/src/controls/thumbnails.js","../../../packages/artplayer/src/controls/screenshot.js","../../../packages/artplayer/src/controls/quality.js","../../../packages/artplayer/src/controls/index.js","../../../packages/artplayer/src/contextmenu/playbackRate.js","../../../packages/artplayer/src/contextmenu/aspectRatio.js","../../../packages/artplayer/src/contextmenu/info.js","../../../packages/artplayer/srcLine truncated
|
||||
@@ -106,11 +106,7 @@ var art = new Artplayer({
|
||||
},
|
||||
},
|
||||
],
|
||||
plugins: [
|
||||
artplayerPluginSubtitle({
|
||||
time: 4
|
||||
})
|
||||
]
|
||||
plugins: [artplayerPluginSubtitle]
|
||||
});
|
||||
|
||||
art.on('firstCanplay', () => {
|
||||
|
||||
@@ -39,11 +39,13 @@ var art = new Artplayer({
|
||||
container: '.artplayer-app',
|
||||
url: 'path/to/video.mp4',
|
||||
plugins: [
|
||||
artplayerPluginSubtitle({
|
||||
time: -1, // Subtitle delay time, ranging from -10 to 10
|
||||
}),
|
||||
artplayerPluginSubtitle,
|
||||
],
|
||||
});
|
||||
|
||||
// There will be a slider in the settings panel.
|
||||
// Or, you can set subtitle offset time by yourself, range from -5 to 5.
|
||||
art.artplayerPluginSubtitle.set(-1);
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
@@ -1,31 +1,67 @@
|
||||
function artplayerPluginSubtitle(option) {
|
||||
return art => {
|
||||
const { errorHandle, clamp, sleep } = art.constructor.utils;
|
||||
function i18nMix(i18n) {
|
||||
i18n.update({
|
||||
'zh-cn': {
|
||||
'Subtitle offset time': '字幕偏移时间',
|
||||
},
|
||||
'zh-tw': {
|
||||
'Subtitle offset time': '字幕偏移時間',
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
errorHandle(
|
||||
option && typeof option.time === 'number',
|
||||
`The plugin 'artplayerPluginSubtitle': 'option.time' require 'number' type, but got '${typeof option.time}'`,
|
||||
);
|
||||
function settingMix(art) {
|
||||
const {
|
||||
i18n,
|
||||
events: { proxy },
|
||||
} = art;
|
||||
return {
|
||||
title: 'Subtitle',
|
||||
name: 'subtitle',
|
||||
index: 20,
|
||||
html: `
|
||||
<div>
|
||||
<div class="art-setting-header">
|
||||
${i18n.get('Subtitle offset time')}: <span class="art-subtitle-value">0</span>s
|
||||
</div>
|
||||
<div class="art-setting-body">
|
||||
<input style="width: 100%;" class="art-subtitle-range" type="range" min="-5" max="5" step="1">
|
||||
</div>
|
||||
</div>
|
||||
`,
|
||||
mounted: $setting => {
|
||||
const $range = $setting.querySelector('.art-subtitle-range');
|
||||
const $value = $setting.querySelector('.art-subtitle-value');
|
||||
proxy($range, 'change', () => {
|
||||
const { value } = $range;
|
||||
$value.innerText = value;
|
||||
art.plugins.artplayerPluginSubtitle.set(Number(value));
|
||||
});
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
let retry = 0;
|
||||
const maxRetry = 10;
|
||||
const time = clamp(option.time, -10, 10);
|
||||
|
||||
function adjust() {
|
||||
errorHandle(retry < maxRetry, 'It seems that something wrong for reading subtitle');
|
||||
retry += 1;
|
||||
const cues = Array.from(art.refs.$track.track.cues);
|
||||
if (cues.length === 0) {
|
||||
sleep(100).then(adjust);
|
||||
} else {
|
||||
cues.forEach(cue => {
|
||||
cue.startTime += time;
|
||||
cue.endTime += time;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
art.on('subtitle:load', adjust);
|
||||
function artplayerPluginSubtitle(art) {
|
||||
const { setting, notice, refs, i18n } = art;
|
||||
const cuesCache = [];
|
||||
i18nMix(i18n);
|
||||
setting.add(settingMix);
|
||||
const { clamp } = art.constructor.utils;
|
||||
return {
|
||||
set(value) {
|
||||
const cues = Array.from(refs.$track.track.cues);
|
||||
const time = clamp(value, -5, 5);
|
||||
cues.forEach((cue, index) => {
|
||||
if (!cuesCache[index]) {
|
||||
cuesCache[index] = {
|
||||
startTime: cue.startTime,
|
||||
endTime: cue.endTime,
|
||||
};
|
||||
}
|
||||
cue.startTime = cuesCache[index].startTime + time;
|
||||
cue.endTime = cuesCache[index].endTime + time;
|
||||
});
|
||||
notice.show(`${i18n.get('Subtitle offset time')}: ${value}s`);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import merge from 'deepmerge';
|
||||
|
||||
let i18nMap = {
|
||||
'zh-cn': {
|
||||
'About author': '关于作者',
|
||||
@@ -81,8 +83,8 @@ export default class I18n {
|
||||
return this.language[key] || key;
|
||||
}
|
||||
|
||||
update(callback) {
|
||||
i18nMap = callback(i18nMap);
|
||||
update(value) {
|
||||
i18nMap = merge(i18nMap, value);
|
||||
this.init();
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ export default function flip(settingOption) {
|
||||
return {
|
||||
...settingOption,
|
||||
html: `
|
||||
<div class="art-setting-header">${i18n.get(settingOption.title)}</div>
|
||||
<div class="art-setting-header">${i18n.get('Flip')}</div>
|
||||
<div class="art-setting-body">
|
||||
<div class="art-setting-btns">
|
||||
<div class="art-setting-btn current">
|
||||
|
||||
@@ -26,7 +26,6 @@ export default class Setting {
|
||||
|
||||
this.add(flip({
|
||||
disable: false,
|
||||
title: 'Flip',
|
||||
name: 'flip',
|
||||
index: 10,
|
||||
}));
|
||||
|
||||
Reference in new issue
Block a user