From 7a84c262da93a387f90c9240d52125733465fa25 Mon Sep 17 00:00:00 2001 From: Harvey Date: Thu, 14 Nov 2019 10:11:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E5=8F=96=E5=85=B1=E7=94=A8=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/artplayer.js | 2 +- packages/artplayer/dist/artplayer.js | 2 +- packages/artplayer/src/config/index.js | 4 -- packages/artplayer/src/config/mimeCodec.js | 5 -- packages/artplayer/src/config/mse.js | 33 ---------- packages/artplayer/src/config/video.js | 8 ++- .../artplayer/src/contextmenu/aspectRatio.js | 17 +++-- packages/artplayer/src/contextmenu/close.js | 4 +- packages/artplayer/src/contextmenu/index.js | 66 +++++++++++-------- packages/artplayer/src/contextmenu/info.js | 4 +- .../artplayer/src/contextmenu/playbackRate.js | 13 ++-- packages/artplayer/src/contextmenu/version.js | 4 +- packages/artplayer/src/controls/fullscreen.js | 4 +- .../artplayer/src/controls/fullscreenWeb.js | 6 +- packages/artplayer/src/controls/index.js | 10 +-- packages/artplayer/src/controls/pip.js | 4 +- .../artplayer/src/controls/playAndPause.js | 4 +- packages/artplayer/src/controls/progress.js | 22 +++---- packages/artplayer/src/controls/quality.js | 16 ++--- packages/artplayer/src/controls/screenshot.js | 6 +- packages/artplayer/src/controls/setting.js | 6 +- packages/artplayer/src/controls/subtitle.js | 6 +- packages/artplayer/src/controls/thumbnails.js | 11 ++-- packages/artplayer/src/controls/time.js | 4 +- packages/artplayer/src/controls/volume.js | 6 +- packages/artplayer/src/events/hoverInit.js | 6 +- .../artplayer/src/events/mousemoveInit.js | 8 +-- packages/artplayer/src/info.js | 8 +-- packages/artplayer/src/layers.js | 5 +- packages/artplayer/src/loading.js | 6 +- packages/artplayer/src/mask.js | 6 +- packages/artplayer/src/notice.js | 6 +- .../artplayer/src/player/fullscreenMix.js | 5 +- .../artplayer/src/player/fullscreenWebMix.js | 8 ++- packages/artplayer/src/player/pipMix.js | 10 +-- packages/artplayer/src/player/switchMix.js | 4 +- .../artplayer/src/plugins/subtitleOffset.js | 6 +- packages/artplayer/src/setting/aspectRatio.js | 14 ++-- packages/artplayer/src/setting/flip.js | 14 ++-- packages/artplayer/src/setting/index.js | 5 +- .../artplayer/src/setting/playbackRate.js | 10 +-- packages/artplayer/src/subtitle.js | 6 +- packages/artplayer/src/template.js | 60 +++++++++-------- packages/artplayer/src/utils/analysis.js | 21 ------ packages/artplayer/src/utils/index.js | 24 ++++++- 45 files changed, 242 insertions(+), 257 deletions(-) delete mode 100644 packages/artplayer/src/config/mimeCodec.js delete mode 100644 packages/artplayer/src/config/mse.js delete mode 100644 packages/artplayer/src/utils/analysis.js diff --git a/dist/artplayer.js b/dist/artplayer.js index ffd1af2e7..820c03217 100644 --- a/dist/artplayer.js +++ b/dist/artplayer.js @@ -5,4 +5,4 @@ * Released under the MIT License. */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Artplayer=e()}(this,function(){"use strict";var a=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")};function r(t,e){for(var n=0;n").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").concat("\r\n\r\n"))}function z(t){return URL.createObjectURL(new Blob([t],{type:"text/vtt"}))}function W(t,e){var n=document.createElement("a");R(n,"display","none"),n.href=t,n.download=e,document.body.appendChild(n),n.click(),document.body.removeChild(n)}function B(t){for(var e=arguments.length,n=new Array(1\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
[x]
\n
\n
\n
\n
×
\n
\n
\n \n '),this.$player=this.$container.querySelector(".artplayer-video-player"),this.$video=this.$container.querySelector(".artplayer-video"),this.$subtitle=this.$container.querySelector(".artplayer-subtitle"),this.$danmuku=this.$container.querySelector(".artplayer-danmuku"),this.$bottom=this.$container.querySelector(".artplayer-bottom"),this.$progress=this.$container.querySelector(".artplayer-progress"),this.$controls=this.$container.querySelector(".artplayer-controls"),this.$controlsLeft=this.$container.querySelector(".artplayer-controls-left"),this.$controlsRight=this.$container.querySelector(".artplayer-controls-right"),this.$layers=this.$container.querySelector(".artplayer-layers"),this.$loading=this.$container.querySelector(".artplayer-loading"),this.$notice=this.$container.querySelector(".artplayer-notice"),this.$noticeInner=this.$container.querySelector(".artplayer-notice-inner"),this.$mask=this.$container.querySelector(".artplayer-mask"),this.$setting=this.$container.querySelector(".artplayer-setting"),this.$settingInner=this.$container.querySelector(".artplayer-setting-inner"),this.$settingBody=this.$container.querySelector(".artplayer-setting-body"),this.$info=this.$container.querySelector(".artplayer-info"),this.$infoPanel=this.$container.querySelector(".artplayer-info-panel"),this.$infoClose=this.$container.querySelector(".artplayer-info-close"),this.$pipHeader=this.$container.querySelector(".artplayer-pip-header"),this.$pipTitle=this.$container.querySelector(".artplayer-pip-title"),this.$pipClose=this.$container.querySelector(".artplayer-pip-close"),this.$contextmenu=this.$container.querySelector(".artplayer-contextmenu")}},{key:"initMobile",value:function(){this.$container.innerHTML='\n
\n \n
\n ',this.$player=this.$container.querySelector(".artplayer-video-player"),this.$video=this.$container.querySelector(".artplayer-video")}},{key:"destroy",value:function(t){t?this.$container.innerHTML="":this.$player.classList.add("artplayer-destroy")}}]),n}(),_={"About author":"关于作者","Video info":"视频统计信息",Close:"关闭","Video load failed":"视频加载失败",Volume:"音量",Play:"播放",Pause:"暂停",Rate:"速度",Mute:"静音",Flip:"视频翻转",Horizontal:"水平",Vertical:"垂直",Reconnect:"重新连接","Hide subtitle":"隐藏字幕","Show subtitle":"显示字幕","Hide danmu":"隐藏弹幕","Show danmu":"显示弹幕","Show setting":"显示设置","Hide setting":"隐藏设置",Screenshot:"截图","Play speed":"播放速度","Aspect ratio":"画面比例",Default:"默认",Normal:"正常","Switch video":"切换","Switch subtitle":"切换字幕",Fullscreen:"全屏","Exit fullscreen":"退出全屏","Web fullscreen":"网页全屏","Exit web fullscreen":"退出网页全屏","Mini player":"迷你播放器","This does not seem to support full screen functionality":"似乎不支持全屏功能"},X={"About author":"關於作者","Video info":"影片統計訊息",Close:"關閉","Video load failed":"影片載入失敗",Volume:"音量",Play:"播放",Pause:"暫停",Rate:"速度",Mute:"靜音",Flip:"影片翻轉",Horizontal:"水平",Vertical:"垂直",Reconnect:"重新連接","Hide subtitle":"隱藏字幕","Show subtitle":"顯示字幕","Show setting":"顯示设置","Hide setting":"隱藏设置","Hide danmu":"隱藏彈幕","Show danmu":"顯示彈幕",Screenshot:"截圖","Play speed":"播放速度","Aspect ratio":"畫面比例",Default:"默認",Normal:"正常","Switch video":"切換","Switch subtitle":"切換字幕",Fullscreen:"全屏","Exit fullscreen":"退出全屏","Web fullscreen":"網頁全屏","Exit web fullscreen":"退出網頁全屏","Mini player":"迷你播放器","This does not seem to support full screen functionality":"似乎不支持全屏功能"},Y=function(){function e(t){a(this,e),this.art=t,this.languages={"zh-cn":_,"zh-tw":X},this.init()}return i(e,[{key:"init",value:function(){var t=this.art.option.lang.toLowerCase();this.language=this.languages[t]||{}}},{key:"get",value:function(t){return this.language[t]||t}},{key:"update",value:function(t){this.languages=E(this.languages,t),this.init()}}]),e}();var Z=t(function(t){var o,e,i,r,n;o="undefined"!=typeof window&&void 0!==window.document?window.document:{},e=t.exports,i=function(){for(var t,e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],n=0,r=e.length,i={};n ").concat(s));var l=document.createElement("div");l.classList.value="art-".concat(o," art-").concat(o,"-").concat(s),a.html&&$(l,a.html),a.style&&T(l,a.style);var u=Array.from(t.children);l.dataset.index=a.index||c;var f=u.find(function(t){return Number(t.dataset.index)>=Number(l.dataset.index)});return f?f.insertAdjacentElement("beforebegin",l):$(t,l),a.click&&e.events.proxy(l,"click",function(t){t.preventDefault(),a.click.call(e,n,t),e.emit("".concat(o,":click"),l)}),a.mounted&&a.mounted(l,n,e),i&&i(l,n,e),Object.defineProperty(n,s,{value:{get id(){return c},get $ref(){return l},set show(t){t?(R(l,"display","block"),e.emit("".concat(o,":show"),l)):(R(l,"display","none"),e.emit("".concat(o,":hide"),l))},set remove(t){t&&(L(l),e.emit("".concat(o,":remove"),l))}}}),e.emit("".concat(o,":add"),a),n[s]}var K=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t};function tt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function et(t){return function(a){return function(e){for(var t=1;t\n
\n
\n
\n
\n
\n \n '),mounted:function(o){var i=!1,n=o.querySelector(".art-progress-loaded"),r=o.querySelector(".art-progress-played"),a=o.querySelector(".art-progress-highlight"),c=o.querySelector(".art-progress-indicator"),s=o.querySelector(".art-progress-tip");function l(t,e){"loaded"===t&&R(n,"width","".concat(100*e,"%")),"played"===t&&(R(r,"width","".concat(100*e,"%")),R(c,"left","calc(".concat(100*e,"% - ").concat(D(c,"width")/2,"px)")))}e.forEach(function(t){var e=O(t.time,0,p.duration)/p.duration*100;$(a,''))}),l("loaded",p.loaded),u.on("video:progress",function(){l("loaded",p.loaded)}),u.on("video:timeupdate",function(){l("played",p.played)}),u.on("video:ended",function(){l("played",1)}),f(o,"mousemove",function(t){R(s,"display","block"),-1o.clientWidth-r/2?R(s,"left","".concat(o.clientWidth-r,"px")):R(s,"left","".concat(e-r/2,"px"))}(t):function(t){var e=lt(u,t),n=e.width,r=e.time;s.innerHTML=r;var i=s.clientWidth;n<=i/2?R(s,"left",0):n>o.clientWidth-i/2?R(s,"left","".concat(o.clientWidth-i,"px")):R(s,"left","".concat(n-i/2,"px"))}(t)}),f(o,"mouseout",function(){R(s,"display","none")}),f(o,"click",function(t){if(t.target!==c){var e=lt(u,t),n=e.second;l("played",e.percentage),p.seek=n}}),f(c,"mousedown",function(){i=!0}),f(document,"mousemove",function(t){if(i){var e=lt(u,t),n=e.second,r=e.percentage;c.classList.add("art-show-indicator"),l("played",r),p.seek=n}}),f(document,"mouseup",function(){i&&(i=!1,c.classList.remove("art-show-indicator"))})}})}}function ft(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function pt(t){return function(a){return function(e){for(var t=1;t'),l=$(s,'
');function u(t){var e=s.getBoundingClientRect(),n=e.left,r=e.width,i=l.getBoundingClientRect().width;return O(t.pageX-n-i/2,0,r-i/2)/(r-i)}function f(t){var e=0d.clientWidth-o/2?R(p,"left","".concat(d.clientWidth-o,"px")):R(p,"left","".concat(e-o/2,"px"))}(t))}),e(d,"mouseout",function(){R(p,"display","none")})}})}}function Ot(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Pt(t){return function(a){return function(e){for(var t=1;t'.concat(i.name,"")),l=o.quality.map(function(t,e){return'
').concat(t.name,"
")}).join(""),u=$(t,'
'.concat(l,"
"));r(t,function(){u.style.left="-".concat(D(u,"width")/2-t.clientWidth/2,"px")}),n(u,"click",function(t){var e=Number(t.target.dataset.index),n=o.quality[e],r=n.url,i=n.name;r&&i&&c!==e&&(a.switchQuality(r,i),s.innerHTML=i,c=e)})}})}}var xt=function(){function n(t){var e=this;a(this,n),this.id=0,this.art=t,this.art.on("ready",function(){e.init()})}return i(n,[{key:"init",value:function(){var e=this,t=this.art.option;this.add(ut({name:"progress",disable:t.isLive,position:"top",index:10})),this.add(wt({name:"thumbnails",disable:!t.thumbnails.url||t.isLive,position:"top",index:20})),this.add(ct({name:"playAndPause",disable:!1,position:"left",index:10})),this.add(vt({name:"volume",disable:!1,position:"left",index:20})),this.add(ht({name:"time",disable:t.isLive,position:"left",index:30})),this.add(kt({name:"quality",disable:0===t.quality.length,position:"right",index:10})),this.add(Pt({name:"screenshot",disable:!t.screenshot,position:"right",index:20})),this.add(pt({name:"subtitle",disable:!t.subtitle.url,position:"right",index:30})),this.add(gt({name:"setting",disable:!t.setting,position:"right",index:40})),this.add(ot({name:"pip",disable:!t.pip,position:"right",index:50})),this.add(rt({name:"fullscreenWeb",disable:!t.fullscreenWeb,position:"right",index:60})),this.add(et({name:"fullscreen",disable:!t.fullscreen,position:"right",index:70})),t.controls.forEach(function(t){e.add(t)})}},{key:"add",value:function(t,e){var n,r="function"==typeof t?t(this.art):t,i=this.art.template,o=i.$progress,a=i.$controlsLeft,c=i.$controlsRight;switch(r.position){case"top":n=o;break;case"left":n=a;break;case"right":n=c}b(n,"Controls option.position can not be empty"),this.id+=1;var s=Q(this.art,this,n,r,e,"control");return r.disable||"top"===r.position||s.$ref.firstElementChild&&"I"===s.$ref.firstElementChild.tagName||s.$ref.classList.add("art-control-onlyText"),s}},{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template.$player;t?(this.state=!0,e.classList.add("artplayer-controls-show"),this.art.emit("controls:show")):(this.state=!1,e.classList.remove("artplayer-controls-show"),this.art.emit("controls:hide"))}}]),n}();function St(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Et(n){return function(t){var e=t.i18n,r=t.player;return function(e){for(var t=1;t0.5\n 0.75\n ').concat(e.get("Normal"),'\n 1.25\n 1.5\n 2.0\n '),click:function(t,e){var n=e.target.dataset.rate;n&&(r.playbackRate=Number(n),t.show=!1)},mounted:function(n){t.on("playbackRateChange",function(e){var t=Array.from(n.querySelectorAll("span")).find(function(t){return Number(t.dataset.rate)===e});t&&A(t,"current")})}})}}function $t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Lt(n){return function(e){var t=e.i18n,r=e.player;return function(e){for(var t=1;t').concat(t.get("Default"),'\n 4:3\n 16:9\n '),click:function(t,e){var n=e.target.dataset.ratio;n&&(r.aspectRatio=n,t.show=!1)},mounted:function(t){e.on("aspectRatioChange",function(e){A(Array.from(t.querySelectorAll("span")).find(function(t){return t.dataset.ratio===e}),"current")})}})}}function Rt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Tt(t){return function(e){return function(e){for(var t=1;tArtPlayer 3.1.18'})}function At(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Mt(e){return function(t){return function(e){for(var t=1;t\n
Player version:
\n
3.1.18
\n \n '),t.push('\n
\n
Video url:
\n
'.concat(this.art.option.url,"
\n
\n ")),t.push('\n
\n
Video volume:
\n
\n
\n '),t.push('\n
\n
Video time:
\n
\n
\n '),t.push('\n
\n
Video duration:
\n
\n
\n '),t.push('\n
\n
Video resolution:
\n
\n x \n
\n
\n '),t.join("")}},{key:"readInfo",value:function(){var t=this.art.template,e=t.$infoPanel,n=t.$video;Array.from(e.querySelectorAll("[data-video]")).forEach(function(t){var e=n[t.dataset.video];t.innerHTML=void 0!==e?"number"==typeof e?e.toFixed(2):e:"unknown"})}},{key:"loop",value:function(){var t=this;this.readInfo(),this.timer=setTimeout(function(){t.readInfo(),t.loop()},1e3)}},{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template,n=e.$player,r=e.$infoPanel;t?(this.state=!0,n.classList.add("artplayer-info-show"),r.innerHTML||$(r,this.creatInfo()),clearTimeout(this.timer),this.loop(),this.art.emit("info:show")):(this.state=!1,n.classList.remove("artplayer-info-show"),clearTimeout(this.timer),this.art.emit("info:hide"))}}]),e}();var Wt=function(t){if(Array.isArray(t))return t};var Bt=function(t,e){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=t[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}};var Ft=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")};var Ht=function(t,e){return Wt(t)||Bt(t,e)||Ft()};var It=function(){function n(t){a(this,n),this.art=t,this.state=!0,this.isInit=!1;var e=this.art.option.subtitle.url;e&&this.init(e)}return i(n,[{key:"switch",value:function(t){var e=this.art,n=e.i18n,r=e.notice;return this.init(t).then(function(t){return r.show(n.get("Switch subtitle")),t})}},{key:"init",value:function(l){var u=this;return new Promise(function(o){var t=u.art,a=t.events.proxy,e=t.option.subtitle,n=t.template,c=n.$video,s=n.$subtitle,r=n.$track;if(T(s,e.style||{}),!r){var i=document.createElement("track");i.default=!0,i.kind="metadata",c.appendChild(i),u.art.template.$track=i}u.load(l).then(function(t){s.innerHTML="";var e=u.art.template.$track,n=e.src;if(n!==t){if(URL.revokeObjectURL(n),e.src=t,c.textTracks&&c.textTracks[0]){var r=function(){var t=Ht(i.activeCues,1)[0];s.innerHTML="",t&&(s.innerHTML=t.text.split(/\r?\n/).map(function(t){return"

".concat(t,"

")}).join("")),this.art.emit("subtitle:update",s)},i=Ht(c.textTracks,1)[0];u.isInit||(u.isInit=!0,a(i,"cuechange",r.bind(u))),u.art.on("artplayerPluginSubtitleOffset",r.bind(u))}o(t)}})})}},{key:"load",value:function(e){var n=this.art.notice;return fetch(e).then(function(t){return t.text()}).then(function(t){switch(P(e)){case"srt":return z(q(t));case"ass":return z(function(t){var n=new RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function r(t){return(0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n',state:'\n \n',play:'\n \n',pause:'\n \n',volume:'\n \n \n',volumeClose:'\n \n \n',subtitle:'\n \n \n',screenshot:'\n\t\n\n',setting:'\n \n \n',fullscreen:'\n\t\n\t\n\t\n\t\n',fullscreenWeb:'\n\t\n',pip:'\n \n',prev:'\n \n',next:'\n \n'},t.option.icons);Object.keys(r).forEach(function(t){var e=document.createElement("i");e.classList.add("art-icon"),e.classList.add("art-icon-".concat(t)),$(e,r[t]),n[t]=e})}var Nt=function(){function n(t){var e=this;a(this,n),this.destroyEvents=[],this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),this.loadImg=this.loadImg.bind(this),t.whitelist.state&&t.once("video:canplay",function(){!function(e,t){var n=e.template.$player;t.proxy(document,["click","contextmenu"],function(t){-1'),t.icons.state)}return i(e,[{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template.$player;t?(this.state=!0,e.classList.add("artplayer-mask-show"),this.art.emit("mask:show")):(this.state=!1,e.classList.remove("artplayer-mask-show"),this.art.emit("mask:hide"))}}]),e}();function Jt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Gt(n){return function(e){var t=e.i18n,r=e.player;return function(e){for(var t=1;t'.concat(t.get("Flip"),'\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n "),click:function(t,e){var n=e.target.dataset.value;n&&(r.flip=n)},mounted:function(t){e.on("flipChange",function(e){A(Array.from(t.querySelectorAll("button")).find(function(t){return t.dataset.value===e}).parentElement,"current")})}})}}function Qt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Kt(n){return function(e){var t=e.i18n,r=e.player;return function(e){for(var t=1;t'.concat(t.get("Aspect ratio"),'\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n '),click:function(t,e){var n=e.target.dataset.value;n&&(r.aspectRatio=n)},mounted:function(t){e.on("aspectRatioChange",function(e){A(Array.from(t.querySelectorAll("button")).find(function(t){return t.dataset.value===e}).parentElement,"current")})}})}}function te(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ee(e){return function(r){var t=r.i18n,i=r.player,o=r.events.proxy;return function(e){for(var t=1;t\n '.concat(t.get("Play speed"),': 1.0x\n \n
\n \n
\n '),mounted:function(t){var e=t.querySelector(".art-setting-range input"),n=t.querySelector(".art-subtitle-value");o(e,"change",function(){var t=e.value;n.innerText=t,i.playbackRate=Number(t)}),r.on("playbackRateChange",function(t){e.value!==t&&(e.value=t,n.innerText=t)})}})}}var ne=function(){function n(t){var e=this;a(this,n),this.id=0,this.art=t,this.state=!1,t.option.setting&&(this.art.on("ready",function(){e.init()}),this.art.on("blur",function(){e.show=!1}))}return i(n,[{key:"init",value:function(){var e=this,t=this.art,n=t.option,r=t.template.$setting;(0,t.events.proxy)(r,"click",function(t){t.target===r&&(e.show=!1)}),this.add(Gt({disable:!n.flip,name:"flip"})),this.add(Kt({disable:!n.aspectRatio,name:"aspectRatio"})),this.add(ee({disable:!n.playbackRate,name:"playbackRate"}))}},{key:"add",value:function(t,e){this.id+=1;var n=this.art.template.$settingBody;return Q(this.art,this,n,t,e,"setting")}},{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template.$player;t?(this.state=!0,e.classList.add("artplayer-setting-show"),this.art.emit("setting:show")):(this.state=!1,e.classList.remove("artplayer-setting-show"),this.art.emit("setting:hide"))}}]),n}(),re=function(){function e(t){a(this,e),this.art=t,this.name="artplayer_settings",this.init()}return i(e,[{key:"init",value:function(){var t=this.art.option,e=this.get("volume");e&&(t.volume=e)}},{key:"get",value:function(t){var e=JSON.parse(window.localStorage.getItem(this.name))||{};return t?e[t]:{}}},{key:"set",value:function(t,e){var n=Object.assign({},this.get(),K({},t,e));window.localStorage.setItem(this.name,JSON.stringify(n))}},{key:"del",value:function(t){var e=this.get();delete e[t],window.localStorage.setItem(this.name,JSON.stringify(e))}},{key:"clean",value:function(){window.localStorage.removeItem(this.name)}}]),e}();function ie(r){var t=r.i18n,i=r.events.proxy;return{title:"Subtitle",name:"subtitle",index:20,html:'\n
\n '.concat(t.get("Subtitle offset time"),': 0s\n
\n
\n \n
\n '),mounted:function(t){var e=t.querySelector(".art-setting-range input"),n=t.querySelector(".art-subtitle-value");i(e,"change",function(){var t=e.value;n.innerText=t,r.plugins.subtitleOffset.offset(Number(t))}),r.on("subtitle:switch",function(){e.value=0,n.innerText=0}),r.on("artplayerPluginSubtitleOffset",function(t){e.value!==t&&(e.value=t,n.innerText=t)})}}}function oe(r){var i=r.constructor.utils.clamp,t=r.setting,o=r.notice,a=r.template,c=r.i18n,s=r.player;c.update({"zh-cn":{"Subtitle offset time":"字幕偏移时间","No subtitles found":"未发现字幕"},"zh-tw":{"Subtitle offset time":"字幕偏移時間","No subtitles found":"未發現字幕"}}),t.add(ie);var l=[];return r.on("subtitle:switch",function(){l=[]}),{name:"subtitleOffset",offset:function(t){if(a.$track&&a.$track.track){var e=Array.from(a.$track.track.cues),n=i(t,-5,5);e.forEach(function(t,e){l[e]||(l[e]={startTime:t.startTime,endTime:t.endTime}),t.startTime=i(l[e].startTime+n,0,s.duration),t.endTime=i(l[e].endTime+n,0,s.duration)}),o.show("".concat(c.get("Subtitle offset time"),": ").concat(t,"s")),r.emit("artplayerPluginSubtitleOffset",t)}else o.show("".concat(c.get("No subtitles found"))),r.emit("artplayerPluginSubtitleOffset",0)}}}function ae(i){var t=i.constructor.utils,n=t.append,r=t.setStyle,o=t.setStyles,a=t.sleep,c=t.errorHandle,s=i.events.proxy,l=i.option,u=i.notice,f=i.i18n,p=i.template,d=i.player;function h(t){if(t){var e=p.$video.canPlayType(t.type);if("maybe"===e||"probably"===e){var n=URL.createObjectURL(t);d.playbackRate=!1,d.aspectRatio=!1,p.$video.src=n,a(1e3).then(function(){d.currentTime=0}),l.url=n,i.emit("switch",n),u.show(f.get("Load local video successfully"))}else{var r="".concat(f.get("Playback of this file format is not supported"),": ").concat(t.type);u.show(r,!0,3e3),c(!1,r)}}}return f.update({"zh-cn":{"Playback of this file format is not supported":"不支持播放该文件格式","Load local video successfully":"加载本地视频成功"},"zh-tw":{"Playback of this file format is not supported":"不支持播放該文件格式","Load local video successfully":"加載本地視頻成功"}}),s(p.$player,"dragover",function(t){t.preventDefault(),u.show(f.get("Load local video successfully"))}),s(p.$player,"drop",function(t){t.preventDefault(),h(t.dataTransfer.files[0])}),{name:"localPreview",attach:function(t){var e=n(t,'');r(t,"position","relative"),o(e,{position:"absolute",width:"100%",height:"100%",left:"0",top:"0",opacity:"0"}),s(e,"change",function(){h(e.files[0])})}}}function ce(e){var t=e.layers,n=e.player,r=e.option.theme;return t.add({name:"miniProgressBar",style:{display:"none",position:"absolute",left:0,right:0,bottom:0,height:"2px",background:r},mounted:function(t){e.on("controls:show",function(){t.style.display="none"}),e.on("destroy",function(){t.style.display="none"}),e.on("controls:hide",function(){t.style.display="block"}),e.on("video:timeupdate",function(){t.style.width="".concat(100*n.played,"%")})}}),{name:"miniProgressBar"}}function se(r){var i=1e4,o=0,a=0,c=0,t=null;function e(){c=a=o=0,cancelAnimationFrame(t),t=null}function n(){t||!function n(){r.isDestroy||(t=requestAnimationFrame(function(){var t=Date.now();if(c){var e=t-c;a+=e,r.player.playing||(o+=e)}c=t,r.emit("networkMonitor",o/a),i<=a&&(a=o=0),n()}))}()}return r.on("play",n),r.on("pause",e),{name:"networkMonitor",reset:e,start:n,sample:function(t){i=t}}}function le(e){var t=e.events,n=e.player,r=e.template,i=x(function(){var t=r.$player.getBoundingClientRect();t.top+t.height<=0&&!n.pip?(n.pip=!0,e.emit("artplayerPluginAutoPip",!0)):n.pip&&(n.pip=!1,e.emit("artplayerPluginAutoPip",!1))},300);return t.proxy(window,"scroll",i),{name:"autoPip"}}function ue(e){a(this,ue);var n=e.option,r=e.events.proxy,i=e.template.$video;N.video.events.forEach(function(t){r(i,t,function(t){e.emit("video:".concat(t.type),t)})}),Object.keys(n.moreVideoAttr).forEach(function(t){i[t]=n.moreVideoAttr[t]}),n.muted&&(i.muted=n.muted),n.volume&&(i.volume=O(n.volume,0,1)),n.poster&&(i.poster=n.poster),n.autoplay&&(i.autoplay=n.autoplay),i.controls=!0;var t=n.type||P(n.url),o=n.customType[t];t&&o?(e.emit("beforeCustomType",t),o(i,n.url,e),e.emit("afterCustomType",t)):(e.emit("beforeAttachUrl",n.url),i.src=n.url,e.emit("afterAttachUrl",i.src))}var fe=function(){function r(t){var e=this;a(this,r),this.art=t,this.id=0;var n=t.option;n.subtitle.url&&n.subtitleOffset&&this.add(oe),!n.isLive&&n.miniProgressBar&&this.add(ce),n.localPreview&&this.add(ae),n.networkMonitor&&this.add(se),n.autoPip&&this.add(le),t.option.plugins.forEach(function(t){e.add(t)})}return i(r,[{key:"add",value:function(t){this.id+=1;var e=t.call(this,this.art),n="";return b(!w(this,n=e&&e.name?e.name:t.name?t.name:"plugin".concat(this.id)),"Cannot add a plugin that already has the same name: ".concat(n)),Object.defineProperty(this,n,{value:e}),this.art.emit("plugin:add",t),this}}]),r}(),pe=0,de=function(){function n(t){var e;return a(this,n),(e=s(this,l(n).call(this))).option=f(E(n.option,t),V),e.isFocus=!1,e.isDestroy=!1,e.whitelist=new I(o(e)),e.template=new U(o(e)),e.events=new Nt(o(e)),e.whitelist.state?(e.storage=new re(o(e)),e.icons=new Vt(o(e)),e.i18n=new Y(o(e)),e.notice=new Yt(o(e)),e.player=new G(o(e)),e.layers=new _t(o(e)),e.controls=new xt(o(e)),e.contextmenu=new qt(o(e)),e.subtitle=new It(o(e)),e.info=new zt(o(e)),e.loading=new Xt(o(e)),e.hotkey=new Ut(o(e)),e.mask=new Zt(o(e)),e.setting=new ne(o(e)),e.plugins=new fe(o(e))):e.mobile=new ue(o(e)),pe+=1,e.id=pe,n.instances.push(o(e)),console.log("%c ArtPlayer %c 3.1.18 %c https://artplayer.org","color: #fff; background: #5f5f5f","color: #fff; background: #4bc729",""),e}return e(n,p),i(n,[{key:"destroy",value:function(t){var e=0").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").concat("\r\n\r\n"))}function B(t){return URL.createObjectURL(new Blob([t],{type:"text/vtt"}))}function V(t,e){var n=document.createElement("a");M(n,"display","none"),n.href=t,n.download=e,document.body.appendChild(n),n.click(),document.body.removeChild(n)}function N(t){for(var e=arguments.length,n=new Array(1\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
[x]
\n
\n
\n
\n
×
\n
\n
\n \n '),this.$player=this.query(".artplayer-video-player"),this.$video=this.query(".artplayer-video"),this.$subtitle=this.query(".artplayer-subtitle"),this.$danmuku=this.query(".artplayer-danmuku"),this.$bottom=this.query(".artplayer-bottom"),this.$progress=this.query(".artplayer-progress"),this.$controls=this.query(".artplayer-controls"),this.$controlsLeft=this.query(".artplayer-controls-left"),this.$controlsRight=this.query(".artplayer-controls-right"),this.$layers=this.query(".artplayer-layers"),this.$loading=this.query(".artplayer-loading"),this.$notice=this.query(".artplayer-notice"),this.$noticeInner=this.query(".artplayer-notice-inner"),this.$mask=this.query(".artplayer-mask"),this.$setting=this.query(".artplayer-setting"),this.$settingInner=this.query(".artplayer-setting-inner"),this.$settingBody=this.query(".artplayer-setting-body"),this.$info=this.query(".artplayer-info"),this.$infoPanel=this.query(".artplayer-info-panel"),this.$infoClose=this.query(".artplayer-info-close"),this.$pipHeader=this.query(".artplayer-pip-header"),this.$pipTitle=this.query(".artplayer-pip-title"),this.$pipClose=this.query(".artplayer-pip-close"),this.$contextmenu=this.query(".artplayer-contextmenu")}},{key:"initMobile",value:function(){this.$container.innerHTML='\n
\n \n
\n ',this.$player=this.query(".artplayer-video-player"),this.$video=this.query(".artplayer-video")}},{key:"destroy",value:function(t){t?this.$container.innerHTML="":j(this.$player,"artplayer-destroy")}}]),n}(),G={"About author":"关于作者","Video info":"视频统计信息",Close:"关闭","Video load failed":"视频加载失败",Volume:"音量",Play:"播放",Pause:"暂停",Rate:"速度",Mute:"静音",Flip:"视频翻转",Horizontal:"水平",Vertical:"垂直",Reconnect:"重新连接","Hide subtitle":"隐藏字幕","Show subtitle":"显示字幕","Hide danmu":"隐藏弹幕","Show danmu":"显示弹幕","Show setting":"显示设置","Hide setting":"隐藏设置",Screenshot:"截图","Play speed":"播放速度","Aspect ratio":"画面比例",Default:"默认",Normal:"正常","Switch video":"切换","Switch subtitle":"切换字幕",Fullscreen:"全屏","Exit fullscreen":"退出全屏","Web fullscreen":"网页全屏","Exit web fullscreen":"退出网页全屏","Mini player":"迷你播放器","This does not seem to support full screen functionality":"似乎不支持全屏功能"},Q={"About author":"關於作者","Video info":"影片統計訊息",Close:"關閉","Video load failed":"影片載入失敗",Volume:"音量",Play:"播放",Pause:"暫停",Rate:"速度",Mute:"靜音",Flip:"影片翻轉",Horizontal:"水平",Vertical:"垂直",Reconnect:"重新連接","Hide subtitle":"隱藏字幕","Show subtitle":"顯示字幕","Show setting":"顯示设置","Hide setting":"隱藏设置","Hide danmu":"隱藏彈幕","Show danmu":"顯示彈幕",Screenshot:"截圖","Play speed":"播放速度","Aspect ratio":"畫面比例",Default:"默認",Normal:"正常","Switch video":"切換","Switch subtitle":"切換字幕",Fullscreen:"全屏","Exit fullscreen":"退出全屏","Web fullscreen":"網頁全屏","Exit web fullscreen":"退出網頁全屏","Mini player":"迷你播放器","This does not seem to support full screen functionality":"似乎不支持全屏功能"},K=function(){function e(t){a(this,e),this.art=t,this.languages={"zh-cn":G,"zh-tw":Q},this.init()}return i(e,[{key:"init",value:function(){var t=this.art.option.lang.toLowerCase();this.language=this.languages[t]||{}}},{key:"get",value:function(t){return this.language[t]||t}},{key:"update",value:function(t){this.languages=C(this.languages,t),this.init()}}]),e}();var tt=t(function(t){var o,e,i,r,n;o="undefined"!=typeof window&&void 0!==window.document?window.document:{},e=t.exports,i=function(){for(var t,e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],n=0,r=e.length,i={};n ").concat(s));var u=document.createElement("div");u.classList.value="art-".concat(o," art-").concat(o,"-").concat(s),a.html&&L(u,a.html),a.style&&z(u,a.style);var l=Array.from(t.children);u.dataset.index=a.index||c;var f=l.find(function(t){return Number(t.dataset.index)>=Number(u.dataset.index)});return f?f.insertAdjacentElement("beforebegin",u):L(t,u),a.click&&e.events.proxy(u,"click",function(t){t.preventDefault(),a.click.call(e,n,t),e.emit("".concat(o,":click"),u)}),a.mounted&&a.mounted(u,n,e),i&&i(u,n,e),Object.defineProperty(n,s,{value:{get id(){return c},get $ref(){return u},set show(t){t?(M(u,"display","block"),e.emit("".concat(o,":show"),u)):(M(u,"display","none"),e.emit("".concat(o,":hide"),u))},set remove(t){t&&(A(u),e.emit("".concat(o,":remove"),u))}}}),e.emit("".concat(o,":add"),a),n[s]}var it=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t};function ot(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function at(t){return function(a){return function(e){for(var t=1;t\n
\n
\n
\n
\n
\n \n '),mounted:function(o){var i=!1,n=O(".art-progress-loaded",o),r=O(".art-progress-played",o),a=O(".art-progress-highlight",o),c=O(".art-progress-indicator",o),s=O(".art-progress-tip",o);function u(t,e){"loaded"===t&&M(n,"width","".concat(100*e,"%")),"played"===t&&(M(r,"width","".concat(100*e,"%")),M(c,"left","calc(".concat(100*e,"% - ").concat(q(c,"width")/2,"px)")))}e.forEach(function(t){var e=E(t.time,0,p.duration)/p.duration*100;L(a,''))}),u("loaded",p.loaded),l.on("video:progress",function(){u("loaded",p.loaded)}),l.on("video:timeupdate",function(){u("played",p.played)}),l.on("video:ended",function(){u("played",1)}),f(o,"mousemove",function(t){M(s,"display","block"),-1o.clientWidth-r/2?M(s,"left","".concat(o.clientWidth-r,"px")):M(s,"left","".concat(e-r/2,"px"))}(t):function(t){var e=ht(l,t),n=e.width,r=e.time;s.innerHTML=r;var i=s.clientWidth;n<=i/2?M(s,"left",0):n>o.clientWidth-i/2?M(s,"left","".concat(o.clientWidth-i,"px")):M(s,"left","".concat(n-i/2,"px"))}(t)}),f(o,"mouseout",function(){M(s,"display","none")}),f(o,"click",function(t){if(t.target!==c){var e=ht(l,t),n=e.second;u("played",e.percentage),p.seek=n}}),f(c,"mousedown",function(){i=!0}),f(document,"mousemove",function(t){if(i){var e=ht(l,t),n=e.second,r=e.percentage;j(c,"art-show-indicator"),u("played",r),p.seek=n}}),f(document,"mouseup",function(){i&&(i=!1,k(c,"art-show-indicator"))})}})}}function vt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function mt(t){return function(a){return function(e){for(var t=1;t'),u=L(s,'
');function l(t){var e=s.getBoundingClientRect(),n=e.left,r=e.width,i=u.getBoundingClientRect().width;return E(t.pageX-n-i/2,0,r-i/2)/(r-i)}function f(t){var e=0d.clientWidth-i/2?M(f,"left","".concat(d.clientWidth-i,"px")):M(f,"left","".concat(e-i/2,"px"))}(t))}),e(d,"mouseout",function(){M(f,"display","none")})}})}}function Et(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function St(t){return function(a){return function(e){for(var t=1;t'.concat(i.name,"")),u=o.map(function(t,e){return'
').concat(t.name,"
")}).join(""),l=L(t,'
'.concat(u,"
"));r(t,function(){l.style.left="-".concat(q(l,"width")/2-t.clientWidth/2,"px")}),n(l,"click",function(t){var e=Number(t.target.dataset.index),n=o[e],r=n.url,i=n.name;r&&i&&c!==e&&(a.switchQuality(r,i),s.innerHTML=i,c=e)})}})}}var Tt=function(){function n(t){var e=this;a(this,n),this.id=0,this.art=t,this.art.on("ready",function(){e.init()})}return i(n,[{key:"init",value:function(){var e=this,t=this.art.option;this.add(yt({name:"progress",disable:t.isLive,position:"top",index:10})),this.add(xt({name:"thumbnails",disable:!t.thumbnails.url||t.isLive,position:"top",index:20})),this.add(pt({name:"playAndPause",disable:!1,position:"left",index:10})),this.add(Ot({name:"volume",disable:!1,position:"left",index:20})),this.add(bt({name:"time",disable:t.isLive,position:"left",index:30})),this.add(Rt({name:"quality",disable:0===t.quality.length,position:"right",index:10})),this.add(St({name:"screenshot",disable:!t.screenshot,position:"right",index:20})),this.add(mt({name:"subtitle",disable:!t.subtitle.url,position:"right",index:30})),this.add(jt({name:"setting",disable:!t.setting,position:"right",index:40})),this.add(lt({name:"pip",disable:!t.pip,position:"right",index:50})),this.add(st({name:"fullscreenWeb",disable:!t.fullscreenWeb,position:"right",index:60})),this.add(at({name:"fullscreen",disable:!t.fullscreen,position:"right",index:70})),t.controls.forEach(function(t){e.add(t)})}},{key:"add",value:function(t,e){var n,r="function"==typeof t?t(this.art):t,i=this.art.template,o=i.$progress,a=i.$controlsLeft,c=i.$controlsRight;switch(r.position){case"top":n=o;break;case"left":n=a;break;case"right":n=c}this.id+=1,b(r.position,"Controls option.position can not be empty");var s=rt(this.art,this,n,r,e,"control");return r.disable||"top"===r.position||s.$ref.firstElementChild&&"I"===s.$ref.firstElementChild.tagName||j(s.$ref,"art-control-onlyText"),s}},{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template.$player;t?(this.state=!0,j(e,"artplayer-controls-show"),this.art.emit("controls:show")):(this.state=!1,k(e,"artplayer-controls-show"),this.art.emit("controls:hide"))}}]),n}();function Dt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ct(n){return function(t){var e=t.i18n,r=t.player;return function(e){for(var t=1;t0.5\n 0.75\n ').concat(e.get("Normal"),'\n 1.25\n 1.5\n 2.0\n '),click:function(t,e){var n=e.target.dataset.rate;n&&(r.playbackRate=Number(n),t.show=!1)},mounted:function(n){t.on("playbackRateChange",function(e){var t=P("span",n).find(function(t){return Number(t.dataset.rate)===e});t&&F(t,"current")})}})}}function Lt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function At(n){return function(t){var e=t.i18n,r=t.player;return function(e){for(var t=1;t').concat(e.get("Default"),'\n 4:3\n 16:9\n '),click:function(t,e){var n=e.target.dataset.ratio;n&&(r.aspectRatio=n,t.show=!1)},mounted:function(n){t.on("aspectRatioChange",function(e){var t=P("span",n).find(function(t){return t.dataset.ratio===e});t&&F(t,"current")})}})}}function Mt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function zt(t){return function(e){return function(e){for(var t=1;tArtPlayer 3.1.18'})}function Ft(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ht(e){return function(t){return function(e){for(var t=1;t\n
Player version:
\n
3.1.18
\n \n '),t.push('\n
\n
Video url:
\n
'.concat(this.art.option.url,"
\n
\n ")),t.push('\n
\n
Video volume:
\n
\n
\n '),t.push('\n
\n
Video time:
\n
\n
\n '),t.push('\n
\n
Video duration:
\n
\n
\n '),t.push('\n
\n
Video resolution:
\n
\n x \n
\n
\n '),t.join("")}},{key:"readInfo",value:function(){var t=this.art.template,e=t.$infoPanel,n=t.$video;P("[data-video]",e).forEach(function(t){var e=n[t.dataset.video];t.innerHTML=void 0!==e?"number"==typeof e?e.toFixed(2):e:"unknown"})}},{key:"loop",value:function(){var t=this;this.readInfo(),this.timer=setTimeout(function(){t.readInfo(),t.loop()},1e3)}},{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template,n=e.$player,r=e.$infoPanel;t?(this.state=!0,j(n,"artplayer-info-show"),r.innerHTML||L(r,this.creatInfo()),clearTimeout(this.timer),this.loop(),this.art.emit("info:show")):(this.state=!1,k(n,"artplayer-info-show"),clearTimeout(this.timer),this.art.emit("info:hide"))}}]),e}();var Vt=function(t){if(Array.isArray(t))return t};var Nt=function(t,e){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=t[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}};var Ut=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")};var _t=function(t,e){return Vt(t)||Nt(t,e)||Ut()};var Xt=function(){function n(t){a(this,n),this.art=t,this.state=!0,this.isInit=!1;var e=this.art.option.subtitle.url;e&&this.init(e)}return i(n,[{key:"switch",value:function(t){var e=this.art,n=e.i18n,r=e.notice;return this.init(t).then(function(t){return r.show(n.get("Switch subtitle")),t})}},{key:"init",value:function(u){var l=this;return new Promise(function(o){var t=l.art,a=t.events.proxy,e=t.option.subtitle,n=t.template,c=n.$video,s=n.$subtitle,r=n.$track;if(z(s,e.style||{}),!r){var i=document.createElement("track");i.default=!0,i.kind="metadata",c.appendChild(i),l.art.template.$track=i}l.load(u).then(function(t){s.innerHTML="";var e=l.art.template.$track,n=e.src;if(n!==t){if(URL.revokeObjectURL(n),e.src=t,c.textTracks&&c.textTracks[0]){var r=function(){var t=_t(i.activeCues,1)[0];s.innerHTML="",t&&(s.innerHTML=t.text.split(/\r?\n/).map(function(t){return"

".concat(t,"

")}).join("")),this.art.emit("subtitle:update",s)},i=_t(c.textTracks,1)[0];l.isInit||(l.isInit=!0,a(i,"cuechange",r.bind(l))),l.art.on("artplayerPluginSubtitleOffset",r.bind(l))}o(t)}})})}},{key:"load",value:function(e){var n=this.art.notice;return fetch(e).then(function(t){return t.text()}).then(function(t){switch(S(e)){case"srt":return B(I(t));case"ass":return B(function(t){var n=new RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function r(t){return(0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n',state:'\n \n',play:'\n \n',pause:'\n \n',volume:'\n \n \n',volumeClose:'\n \n \n',subtitle:'\n \n \n',screenshot:'\n\t\n\n',setting:'\n \n \n',fullscreen:'\n\t\n\t\n\t\n\t\n',fullscreenWeb:'\n\t\n',pip:'\n \n',prev:'\n \n',next:'\n \n'},t.option.icons);Object.keys(r).forEach(function(t){var e=document.createElement("i");e.classList.add("art-icon"),e.classList.add("art-icon-".concat(t)),L(e,r[t]),n[t]=e})}var Zt=function(){function n(t){var e=this;a(this,n),this.destroyEvents=[],this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),this.loadImg=this.loadImg.bind(this),t.whitelist.state&&t.once("video:canplay",function(){!function(e,t){var n=e.template.$player;t.proxy(document,["click","contextmenu"],function(t){-1'),t.icons.state)}return i(e,[{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template.$player;t?(this.state=!0,j(e,"artplayer-mask-show"),this.art.emit("mask:show")):(this.state=!1,k(e,"artplayer-mask-show"),this.art.emit("mask:hide"))}}]),e}();function ee(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ne(n){return function(t){var e=t.i18n,r=t.player;return function(e){for(var t=1;t'.concat(e.get("Flip"),'\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n "),click:function(t,e){var n=e.target.dataset.value;n&&(r.flip=n)},mounted:function(n){t.on("flipChange",function(e){var t=P("button",n).find(function(t){return t.dataset.value===e});t&&F(t.parentElement,"current")})}})}}function re(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ie(n){return function(t){var e=t.i18n,r=t.player;return function(e){for(var t=1;t'.concat(e.get("Aspect ratio"),'\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n '),click:function(t,e){var n=e.target.dataset.value;n&&(r.aspectRatio=n)},mounted:function(n){t.on("aspectRatioChange",function(e){var t=P("button",n).find(function(t){return t.dataset.value===e});t&&F(t.parentElement,"current")})}})}}function oe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ae(e){return function(r){var t=r.i18n,i=r.player,o=r.events.proxy;return function(e){for(var t=1;t\n '.concat(t.get("Play speed"),': 1.0x\n \n
\n \n
\n '),mounted:function(t){var e=O(".art-setting-range input",t),n=O(".art-subtitle-value",t);o(e,"change",function(){var t=e.value;n.innerText=t,i.playbackRate=Number(t)}),r.on("playbackRateChange",function(t){e.value!==t&&(e.value=t,n.innerText=t)})}})}}var ce=function(){function n(t){var e=this;a(this,n),this.id=0,this.art=t,this.state=!1,t.option.setting&&(this.art.on("ready",function(){e.init()}),this.art.on("blur",function(){e.show=!1}))}return i(n,[{key:"init",value:function(){var e=this,t=this.art,n=t.option,r=t.template.$setting;(0,t.events.proxy)(r,"click",function(t){t.target===r&&(e.show=!1)}),this.add(ne({disable:!n.flip,name:"flip"})),this.add(ie({disable:!n.aspectRatio,name:"aspectRatio"})),this.add(ae({disable:!n.playbackRate,name:"playbackRate"}))}},{key:"add",value:function(t,e){this.id+=1;var n=this.art.template.$settingBody;return rt(this.art,this,n,t,e,"setting")}},{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template.$player;t?(this.state=!0,j(e,"artplayer-setting-show"),this.art.emit("setting:show")):(this.state=!1,k(e,"artplayer-setting-show"),this.art.emit("setting:hide"))}}]),n}(),se=function(){function e(t){a(this,e),this.art=t,this.name="artplayer_settings",this.init()}return i(e,[{key:"init",value:function(){var t=this.art.option,e=this.get("volume");e&&(t.volume=e)}},{key:"get",value:function(t){var e=JSON.parse(window.localStorage.getItem(this.name))||{};return t?e[t]:{}}},{key:"set",value:function(t,e){var n=Object.assign({},this.get(),it({},t,e));window.localStorage.setItem(this.name,JSON.stringify(n))}},{key:"del",value:function(t){var e=this.get();delete e[t],window.localStorage.setItem(this.name,JSON.stringify(e))}},{key:"clean",value:function(){window.localStorage.removeItem(this.name)}}]),e}();function ue(r){var t=r.i18n,i=r.events.proxy;return{title:"Subtitle",name:"subtitle",index:20,html:'\n
\n '.concat(t.get("Subtitle offset time"),': 0s\n
\n
\n \n
\n '),mounted:function(t){var e=O(".art-setting-range input",t),n=O(".art-subtitle-value",t);i(e,"change",function(){var t=e.value;n.innerText=t,r.plugins.subtitleOffset.offset(Number(t))}),r.on("subtitle:switch",function(){e.value=0,n.innerText=0}),r.on("artplayerPluginSubtitleOffset",function(t){e.value!==t&&(e.value=t,n.innerText=t)})}}}function le(r){var i=r.constructor.utils.clamp,t=r.setting,o=r.notice,a=r.template,c=r.i18n,s=r.player;c.update({"zh-cn":{"Subtitle offset time":"字幕偏移时间","No subtitles found":"未发现字幕"},"zh-tw":{"Subtitle offset time":"字幕偏移時間","No subtitles found":"未發現字幕"}}),t.add(ue);var u=[];return r.on("subtitle:switch",function(){u=[]}),{name:"subtitleOffset",offset:function(t){if(a.$track&&a.$track.track){var e=Array.from(a.$track.track.cues),n=i(t,-5,5);e.forEach(function(t,e){u[e]||(u[e]={startTime:t.startTime,endTime:t.endTime}),t.startTime=i(u[e].startTime+n,0,s.duration),t.endTime=i(u[e].endTime+n,0,s.duration)}),o.show("".concat(c.get("Subtitle offset time"),": ").concat(t,"s")),r.emit("artplayerPluginSubtitleOffset",t)}else o.show("".concat(c.get("No subtitles found"))),r.emit("artplayerPluginSubtitleOffset",0)}}}function fe(i){var t=i.constructor.utils,n=t.append,r=t.setStyle,o=t.setStyles,a=t.sleep,c=t.errorHandle,s=i.events.proxy,u=i.option,l=i.notice,f=i.i18n,p=i.template,d=i.player;function h(t){if(t){var e=p.$video.canPlayType(t.type);if("maybe"===e||"probably"===e){var n=URL.createObjectURL(t);d.playbackRate=!1,d.aspectRatio=!1,p.$video.src=n,a(1e3).then(function(){d.currentTime=0}),u.url=n,i.emit("switch",n),l.show(f.get("Load local video successfully"))}else{var r="".concat(f.get("Playback of this file format is not supported"),": ").concat(t.type);l.show(r,!0,3e3),c(!1,r)}}}return f.update({"zh-cn":{"Playback of this file format is not supported":"不支持播放该文件格式","Load local video successfully":"加载本地视频成功"},"zh-tw":{"Playback of this file format is not supported":"不支持播放該文件格式","Load local video successfully":"加載本地視頻成功"}}),s(p.$player,"dragover",function(t){t.preventDefault(),l.show(f.get("Load local video successfully"))}),s(p.$player,"drop",function(t){t.preventDefault(),h(t.dataTransfer.files[0])}),{name:"localPreview",attach:function(t){var e=n(t,'');r(t,"position","relative"),o(e,{position:"absolute",width:"100%",height:"100%",left:"0",top:"0",opacity:"0"}),s(e,"change",function(){h(e.files[0])})}}}function pe(e){var t=e.layers,n=e.player,r=e.option.theme;return t.add({name:"miniProgressBar",style:{display:"none",position:"absolute",left:0,right:0,bottom:0,height:"2px",background:r},mounted:function(t){e.on("controls:show",function(){t.style.display="none"}),e.on("destroy",function(){t.style.display="none"}),e.on("controls:hide",function(){t.style.display="block"}),e.on("video:timeupdate",function(){t.style.width="".concat(100*n.played,"%")})}}),{name:"miniProgressBar"}}function de(r){var i=1e4,o=0,a=0,c=0,t=null;function e(){c=a=o=0,cancelAnimationFrame(t),t=null}function n(){t||!function n(){r.isDestroy||(t=requestAnimationFrame(function(){var t=Date.now();if(c){var e=t-c;a+=e,r.player.playing||(o+=e)}c=t,r.emit("networkMonitor",o/a),i<=a&&(a=o=0),n()}))}()}return r.on("play",n),r.on("pause",e),{name:"networkMonitor",reset:e,start:n,sample:function(t){i=t}}}function he(e){var t=e.events,n=e.player,r=e.template,i=T(function(){var t=r.$player.getBoundingClientRect();t.top+t.height<=0&&!n.pip?(n.pip=!0,e.emit("artplayerPluginAutoPip",!0)):n.pip&&(n.pip=!1,e.emit("artplayerPluginAutoPip",!1))},300);return t.proxy(window,"scroll",i),{name:"autoPip"}}function ye(e){a(this,ye);var n=e.option,r=e.events.proxy,i=e.template.$video;Z.video.events.forEach(function(t){r(i,t,function(t){e.emit("video:".concat(t.type),t)})}),Object.keys(n.moreVideoAttr).forEach(function(t){i[t]=n.moreVideoAttr[t]}),n.muted&&(i.muted=n.muted),n.volume&&(i.volume=E(n.volume,0,1)),n.poster&&(i.poster=n.poster),n.autoplay&&(i.autoplay=n.autoplay),i.controls=!0;var t=n.type||S(n.url),o=n.customType[t];t&&o?(e.emit("beforeCustomType",t),o(i,n.url,e),e.emit("afterCustomType",t)):(e.emit("beforeAttachUrl",n.url),i.src=n.url,e.emit("afterAttachUrl",i.src))}var ve=function(){function r(t){var e=this;a(this,r),this.art=t,this.id=0;var n=t.option;n.subtitle.url&&n.subtitleOffset&&this.add(le),!n.isLive&&n.miniProgressBar&&this.add(pe),n.localPreview&&this.add(fe),n.networkMonitor&&this.add(de),n.autoPip&&this.add(he),t.option.plugins.forEach(function(t){e.add(t)})}return i(r,[{key:"add",value:function(t){this.id+=1;var e=t.call(this,this.art),n="";return b(!w(this,n=e&&e.name?e.name:t.name?t.name:"plugin".concat(this.id)),"Cannot add a plugin that already has the same name: ".concat(n)),Object.defineProperty(this,n,{value:e}),this.art.emit("plugin:add",t),this}}]),r}(),me=0,ge=function(){function n(t){var e;return a(this,n),(e=s(this,u(n).call(this))).option=f(C(n.option,t),Y),e.isFocus=!1,e.isDestroy=!1,e.whitelist=new X(o(e)),e.template=new J(o(e)),e.events=new Zt(o(e)),e.whitelist.state?(e.storage=new se(o(e)),e.icons=new Yt(o(e)),e.i18n=new K(o(e)),e.notice=new Kt(o(e)),e.player=new nt(o(e)),e.layers=new Gt(o(e)),e.controls=new Tt(o(e)),e.contextmenu=new It(o(e)),e.subtitle=new Xt(o(e)),e.info=new Bt(o(e)),e.loading=new Qt(o(e)),e.hotkey=new Jt(o(e)),e.mask=new te(o(e)),e.setting=new ce(o(e)),e.plugins=new ve(o(e))):e.mobile=new ye(o(e)),me+=1,e.id=me,n.instances.push(o(e)),console.log("%c ArtPlayer %c 3.1.18 %c https://artplayer.org","color: #fff; background: #5f5f5f","color: #fff; background: #4bc729",""),e}return e(n,p),i(n,[{key:"destroy",value:function(t){var e=0").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").concat("\r\n\r\n"))}function z(t){return URL.createObjectURL(new Blob([t],{type:"text/vtt"}))}function W(t,e){var n=document.createElement("a");R(n,"display","none"),n.href=t,n.download=e,document.body.appendChild(n),n.click(),document.body.removeChild(n)}function B(t){for(var e=arguments.length,n=new Array(1\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
[x]
\n
\n
\n
\n
×
\n
\n
\n \n '),this.$player=this.$container.querySelector(".artplayer-video-player"),this.$video=this.$container.querySelector(".artplayer-video"),this.$subtitle=this.$container.querySelector(".artplayer-subtitle"),this.$danmuku=this.$container.querySelector(".artplayer-danmuku"),this.$bottom=this.$container.querySelector(".artplayer-bottom"),this.$progress=this.$container.querySelector(".artplayer-progress"),this.$controls=this.$container.querySelector(".artplayer-controls"),this.$controlsLeft=this.$container.querySelector(".artplayer-controls-left"),this.$controlsRight=this.$container.querySelector(".artplayer-controls-right"),this.$layers=this.$container.querySelector(".artplayer-layers"),this.$loading=this.$container.querySelector(".artplayer-loading"),this.$notice=this.$container.querySelector(".artplayer-notice"),this.$noticeInner=this.$container.querySelector(".artplayer-notice-inner"),this.$mask=this.$container.querySelector(".artplayer-mask"),this.$setting=this.$container.querySelector(".artplayer-setting"),this.$settingInner=this.$container.querySelector(".artplayer-setting-inner"),this.$settingBody=this.$container.querySelector(".artplayer-setting-body"),this.$info=this.$container.querySelector(".artplayer-info"),this.$infoPanel=this.$container.querySelector(".artplayer-info-panel"),this.$infoClose=this.$container.querySelector(".artplayer-info-close"),this.$pipHeader=this.$container.querySelector(".artplayer-pip-header"),this.$pipTitle=this.$container.querySelector(".artplayer-pip-title"),this.$pipClose=this.$container.querySelector(".artplayer-pip-close"),this.$contextmenu=this.$container.querySelector(".artplayer-contextmenu")}},{key:"initMobile",value:function(){this.$container.innerHTML='\n
\n \n
\n ',this.$player=this.$container.querySelector(".artplayer-video-player"),this.$video=this.$container.querySelector(".artplayer-video")}},{key:"destroy",value:function(t){t?this.$container.innerHTML="":this.$player.classList.add("artplayer-destroy")}}]),n}(),_={"About author":"关于作者","Video info":"视频统计信息",Close:"关闭","Video load failed":"视频加载失败",Volume:"音量",Play:"播放",Pause:"暂停",Rate:"速度",Mute:"静音",Flip:"视频翻转",Horizontal:"水平",Vertical:"垂直",Reconnect:"重新连接","Hide subtitle":"隐藏字幕","Show subtitle":"显示字幕","Hide danmu":"隐藏弹幕","Show danmu":"显示弹幕","Show setting":"显示设置","Hide setting":"隐藏设置",Screenshot:"截图","Play speed":"播放速度","Aspect ratio":"画面比例",Default:"默认",Normal:"正常","Switch video":"切换","Switch subtitle":"切换字幕",Fullscreen:"全屏","Exit fullscreen":"退出全屏","Web fullscreen":"网页全屏","Exit web fullscreen":"退出网页全屏","Mini player":"迷你播放器","This does not seem to support full screen functionality":"似乎不支持全屏功能"},X={"About author":"關於作者","Video info":"影片統計訊息",Close:"關閉","Video load failed":"影片載入失敗",Volume:"音量",Play:"播放",Pause:"暫停",Rate:"速度",Mute:"靜音",Flip:"影片翻轉",Horizontal:"水平",Vertical:"垂直",Reconnect:"重新連接","Hide subtitle":"隱藏字幕","Show subtitle":"顯示字幕","Show setting":"顯示设置","Hide setting":"隱藏设置","Hide danmu":"隱藏彈幕","Show danmu":"顯示彈幕",Screenshot:"截圖","Play speed":"播放速度","Aspect ratio":"畫面比例",Default:"默認",Normal:"正常","Switch video":"切換","Switch subtitle":"切換字幕",Fullscreen:"全屏","Exit fullscreen":"退出全屏","Web fullscreen":"網頁全屏","Exit web fullscreen":"退出網頁全屏","Mini player":"迷你播放器","This does not seem to support full screen functionality":"似乎不支持全屏功能"},Y=function(){function e(t){a(this,e),this.art=t,this.languages={"zh-cn":_,"zh-tw":X},this.init()}return i(e,[{key:"init",value:function(){var t=this.art.option.lang.toLowerCase();this.language=this.languages[t]||{}}},{key:"get",value:function(t){return this.language[t]||t}},{key:"update",value:function(t){this.languages=E(this.languages,t),this.init()}}]),e}();var Z=t(function(t){var o,e,i,r,n;o="undefined"!=typeof window&&void 0!==window.document?window.document:{},e=t.exports,i=function(){for(var t,e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],n=0,r=e.length,i={};n ").concat(s));var l=document.createElement("div");l.classList.value="art-".concat(o," art-").concat(o,"-").concat(s),a.html&&$(l,a.html),a.style&&T(l,a.style);var u=Array.from(t.children);l.dataset.index=a.index||c;var f=u.find(function(t){return Number(t.dataset.index)>=Number(l.dataset.index)});return f?f.insertAdjacentElement("beforebegin",l):$(t,l),a.click&&e.events.proxy(l,"click",function(t){t.preventDefault(),a.click.call(e,n,t),e.emit("".concat(o,":click"),l)}),a.mounted&&a.mounted(l,n,e),i&&i(l,n,e),Object.defineProperty(n,s,{value:{get id(){return c},get $ref(){return l},set show(t){t?(R(l,"display","block"),e.emit("".concat(o,":show"),l)):(R(l,"display","none"),e.emit("".concat(o,":hide"),l))},set remove(t){t&&(L(l),e.emit("".concat(o,":remove"),l))}}}),e.emit("".concat(o,":add"),a),n[s]}var K=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t};function tt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function et(t){return function(a){return function(e){for(var t=1;t\n
\n
\n
\n
\n
\n \n '),mounted:function(o){var i=!1,n=o.querySelector(".art-progress-loaded"),r=o.querySelector(".art-progress-played"),a=o.querySelector(".art-progress-highlight"),c=o.querySelector(".art-progress-indicator"),s=o.querySelector(".art-progress-tip");function l(t,e){"loaded"===t&&R(n,"width","".concat(100*e,"%")),"played"===t&&(R(r,"width","".concat(100*e,"%")),R(c,"left","calc(".concat(100*e,"% - ").concat(D(c,"width")/2,"px)")))}e.forEach(function(t){var e=O(t.time,0,p.duration)/p.duration*100;$(a,''))}),l("loaded",p.loaded),u.on("video:progress",function(){l("loaded",p.loaded)}),u.on("video:timeupdate",function(){l("played",p.played)}),u.on("video:ended",function(){l("played",1)}),f(o,"mousemove",function(t){R(s,"display","block"),-1o.clientWidth-r/2?R(s,"left","".concat(o.clientWidth-r,"px")):R(s,"left","".concat(e-r/2,"px"))}(t):function(t){var e=lt(u,t),n=e.width,r=e.time;s.innerHTML=r;var i=s.clientWidth;n<=i/2?R(s,"left",0):n>o.clientWidth-i/2?R(s,"left","".concat(o.clientWidth-i,"px")):R(s,"left","".concat(n-i/2,"px"))}(t)}),f(o,"mouseout",function(){R(s,"display","none")}),f(o,"click",function(t){if(t.target!==c){var e=lt(u,t),n=e.second;l("played",e.percentage),p.seek=n}}),f(c,"mousedown",function(){i=!0}),f(document,"mousemove",function(t){if(i){var e=lt(u,t),n=e.second,r=e.percentage;c.classList.add("art-show-indicator"),l("played",r),p.seek=n}}),f(document,"mouseup",function(){i&&(i=!1,c.classList.remove("art-show-indicator"))})}})}}function ft(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function pt(t){return function(a){return function(e){for(var t=1;t'),l=$(s,'
');function u(t){var e=s.getBoundingClientRect(),n=e.left,r=e.width,i=l.getBoundingClientRect().width;return O(t.pageX-n-i/2,0,r-i/2)/(r-i)}function f(t){var e=0d.clientWidth-o/2?R(p,"left","".concat(d.clientWidth-o,"px")):R(p,"left","".concat(e-o/2,"px"))}(t))}),e(d,"mouseout",function(){R(p,"display","none")})}})}}function Ot(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Pt(t){return function(a){return function(e){for(var t=1;t'.concat(i.name,"")),l=o.quality.map(function(t,e){return'
').concat(t.name,"
")}).join(""),u=$(t,'
'.concat(l,"
"));r(t,function(){u.style.left="-".concat(D(u,"width")/2-t.clientWidth/2,"px")}),n(u,"click",function(t){var e=Number(t.target.dataset.index),n=o.quality[e],r=n.url,i=n.name;r&&i&&c!==e&&(a.switchQuality(r,i),s.innerHTML=i,c=e)})}})}}var xt=function(){function n(t){var e=this;a(this,n),this.id=0,this.art=t,this.art.on("ready",function(){e.init()})}return i(n,[{key:"init",value:function(){var e=this,t=this.art.option;this.add(ut({name:"progress",disable:t.isLive,position:"top",index:10})),this.add(wt({name:"thumbnails",disable:!t.thumbnails.url||t.isLive,position:"top",index:20})),this.add(ct({name:"playAndPause",disable:!1,position:"left",index:10})),this.add(vt({name:"volume",disable:!1,position:"left",index:20})),this.add(ht({name:"time",disable:t.isLive,position:"left",index:30})),this.add(kt({name:"quality",disable:0===t.quality.length,position:"right",index:10})),this.add(Pt({name:"screenshot",disable:!t.screenshot,position:"right",index:20})),this.add(pt({name:"subtitle",disable:!t.subtitle.url,position:"right",index:30})),this.add(gt({name:"setting",disable:!t.setting,position:"right",index:40})),this.add(ot({name:"pip",disable:!t.pip,position:"right",index:50})),this.add(rt({name:"fullscreenWeb",disable:!t.fullscreenWeb,position:"right",index:60})),this.add(et({name:"fullscreen",disable:!t.fullscreen,position:"right",index:70})),t.controls.forEach(function(t){e.add(t)})}},{key:"add",value:function(t,e){var n,r="function"==typeof t?t(this.art):t,i=this.art.template,o=i.$progress,a=i.$controlsLeft,c=i.$controlsRight;switch(r.position){case"top":n=o;break;case"left":n=a;break;case"right":n=c}b(n,"Controls option.position can not be empty"),this.id+=1;var s=Q(this.art,this,n,r,e,"control");return r.disable||"top"===r.position||s.$ref.firstElementChild&&"I"===s.$ref.firstElementChild.tagName||s.$ref.classList.add("art-control-onlyText"),s}},{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template.$player;t?(this.state=!0,e.classList.add("artplayer-controls-show"),this.art.emit("controls:show")):(this.state=!1,e.classList.remove("artplayer-controls-show"),this.art.emit("controls:hide"))}}]),n}();function St(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Et(n){return function(t){var e=t.i18n,r=t.player;return function(e){for(var t=1;t0.5\n 0.75\n ').concat(e.get("Normal"),'\n 1.25\n 1.5\n 2.0\n '),click:function(t,e){var n=e.target.dataset.rate;n&&(r.playbackRate=Number(n),t.show=!1)},mounted:function(n){t.on("playbackRateChange",function(e){var t=Array.from(n.querySelectorAll("span")).find(function(t){return Number(t.dataset.rate)===e});t&&A(t,"current")})}})}}function $t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Lt(n){return function(e){var t=e.i18n,r=e.player;return function(e){for(var t=1;t').concat(t.get("Default"),'\n 4:3\n 16:9\n '),click:function(t,e){var n=e.target.dataset.ratio;n&&(r.aspectRatio=n,t.show=!1)},mounted:function(t){e.on("aspectRatioChange",function(e){A(Array.from(t.querySelectorAll("span")).find(function(t){return t.dataset.ratio===e}),"current")})}})}}function Rt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Tt(t){return function(e){return function(e){for(var t=1;tArtPlayer 3.1.18'})}function At(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Mt(e){return function(t){return function(e){for(var t=1;t\n
Player version:
\n
3.1.18
\n \n '),t.push('\n
\n
Video url:
\n
'.concat(this.art.option.url,"
\n
\n ")),t.push('\n
\n
Video volume:
\n
\n
\n '),t.push('\n
\n
Video time:
\n
\n
\n '),t.push('\n
\n
Video duration:
\n
\n
\n '),t.push('\n
\n
Video resolution:
\n
\n x \n
\n
\n '),t.join("")}},{key:"readInfo",value:function(){var t=this.art.template,e=t.$infoPanel,n=t.$video;Array.from(e.querySelectorAll("[data-video]")).forEach(function(t){var e=n[t.dataset.video];t.innerHTML=void 0!==e?"number"==typeof e?e.toFixed(2):e:"unknown"})}},{key:"loop",value:function(){var t=this;this.readInfo(),this.timer=setTimeout(function(){t.readInfo(),t.loop()},1e3)}},{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template,n=e.$player,r=e.$infoPanel;t?(this.state=!0,n.classList.add("artplayer-info-show"),r.innerHTML||$(r,this.creatInfo()),clearTimeout(this.timer),this.loop(),this.art.emit("info:show")):(this.state=!1,n.classList.remove("artplayer-info-show"),clearTimeout(this.timer),this.art.emit("info:hide"))}}]),e}();var Wt=function(t){if(Array.isArray(t))return t};var Bt=function(t,e){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=t[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}};var Ft=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")};var Ht=function(t,e){return Wt(t)||Bt(t,e)||Ft()};var It=function(){function n(t){a(this,n),this.art=t,this.state=!0,this.isInit=!1;var e=this.art.option.subtitle.url;e&&this.init(e)}return i(n,[{key:"switch",value:function(t){var e=this.art,n=e.i18n,r=e.notice;return this.init(t).then(function(t){return r.show(n.get("Switch subtitle")),t})}},{key:"init",value:function(l){var u=this;return new Promise(function(o){var t=u.art,a=t.events.proxy,e=t.option.subtitle,n=t.template,c=n.$video,s=n.$subtitle,r=n.$track;if(T(s,e.style||{}),!r){var i=document.createElement("track");i.default=!0,i.kind="metadata",c.appendChild(i),u.art.template.$track=i}u.load(l).then(function(t){s.innerHTML="";var e=u.art.template.$track,n=e.src;if(n!==t){if(URL.revokeObjectURL(n),e.src=t,c.textTracks&&c.textTracks[0]){var r=function(){var t=Ht(i.activeCues,1)[0];s.innerHTML="",t&&(s.innerHTML=t.text.split(/\r?\n/).map(function(t){return"

".concat(t,"

")}).join("")),this.art.emit("subtitle:update",s)},i=Ht(c.textTracks,1)[0];u.isInit||(u.isInit=!0,a(i,"cuechange",r.bind(u))),u.art.on("artplayerPluginSubtitleOffset",r.bind(u))}o(t)}})})}},{key:"load",value:function(e){var n=this.art.notice;return fetch(e).then(function(t){return t.text()}).then(function(t){switch(P(e)){case"srt":return z(q(t));case"ass":return z(function(t){var n=new RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function r(t){return(0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n',state:'\n \n',play:'\n \n',pause:'\n \n',volume:'\n \n \n',volumeClose:'\n \n \n',subtitle:'\n \n \n',screenshot:'\n\t\n\n',setting:'\n \n \n',fullscreen:'\n\t\n\t\n\t\n\t\n',fullscreenWeb:'\n\t\n',pip:'\n \n',prev:'\n \n',next:'\n \n'},t.option.icons);Object.keys(r).forEach(function(t){var e=document.createElement("i");e.classList.add("art-icon"),e.classList.add("art-icon-".concat(t)),$(e,r[t]),n[t]=e})}var Nt=function(){function n(t){var e=this;a(this,n),this.destroyEvents=[],this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),this.loadImg=this.loadImg.bind(this),t.whitelist.state&&t.once("video:canplay",function(){!function(e,t){var n=e.template.$player;t.proxy(document,["click","contextmenu"],function(t){-1'),t.icons.state)}return i(e,[{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template.$player;t?(this.state=!0,e.classList.add("artplayer-mask-show"),this.art.emit("mask:show")):(this.state=!1,e.classList.remove("artplayer-mask-show"),this.art.emit("mask:hide"))}}]),e}();function Jt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Gt(n){return function(e){var t=e.i18n,r=e.player;return function(e){for(var t=1;t'.concat(t.get("Flip"),'\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n "),click:function(t,e){var n=e.target.dataset.value;n&&(r.flip=n)},mounted:function(t){e.on("flipChange",function(e){A(Array.from(t.querySelectorAll("button")).find(function(t){return t.dataset.value===e}).parentElement,"current")})}})}}function Qt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Kt(n){return function(e){var t=e.i18n,r=e.player;return function(e){for(var t=1;t'.concat(t.get("Aspect ratio"),'\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n '),click:function(t,e){var n=e.target.dataset.value;n&&(r.aspectRatio=n)},mounted:function(t){e.on("aspectRatioChange",function(e){A(Array.from(t.querySelectorAll("button")).find(function(t){return t.dataset.value===e}).parentElement,"current")})}})}}function te(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ee(e){return function(r){var t=r.i18n,i=r.player,o=r.events.proxy;return function(e){for(var t=1;t\n '.concat(t.get("Play speed"),': 1.0x\n \n
\n \n
\n '),mounted:function(t){var e=t.querySelector(".art-setting-range input"),n=t.querySelector(".art-subtitle-value");o(e,"change",function(){var t=e.value;n.innerText=t,i.playbackRate=Number(t)}),r.on("playbackRateChange",function(t){e.value!==t&&(e.value=t,n.innerText=t)})}})}}var ne=function(){function n(t){var e=this;a(this,n),this.id=0,this.art=t,this.state=!1,t.option.setting&&(this.art.on("ready",function(){e.init()}),this.art.on("blur",function(){e.show=!1}))}return i(n,[{key:"init",value:function(){var e=this,t=this.art,n=t.option,r=t.template.$setting;(0,t.events.proxy)(r,"click",function(t){t.target===r&&(e.show=!1)}),this.add(Gt({disable:!n.flip,name:"flip"})),this.add(Kt({disable:!n.aspectRatio,name:"aspectRatio"})),this.add(ee({disable:!n.playbackRate,name:"playbackRate"}))}},{key:"add",value:function(t,e){this.id+=1;var n=this.art.template.$settingBody;return Q(this.art,this,n,t,e,"setting")}},{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template.$player;t?(this.state=!0,e.classList.add("artplayer-setting-show"),this.art.emit("setting:show")):(this.state=!1,e.classList.remove("artplayer-setting-show"),this.art.emit("setting:hide"))}}]),n}(),re=function(){function e(t){a(this,e),this.art=t,this.name="artplayer_settings",this.init()}return i(e,[{key:"init",value:function(){var t=this.art.option,e=this.get("volume");e&&(t.volume=e)}},{key:"get",value:function(t){var e=JSON.parse(window.localStorage.getItem(this.name))||{};return t?e[t]:{}}},{key:"set",value:function(t,e){var n=Object.assign({},this.get(),K({},t,e));window.localStorage.setItem(this.name,JSON.stringify(n))}},{key:"del",value:function(t){var e=this.get();delete e[t],window.localStorage.setItem(this.name,JSON.stringify(e))}},{key:"clean",value:function(){window.localStorage.removeItem(this.name)}}]),e}();function ie(r){var t=r.i18n,i=r.events.proxy;return{title:"Subtitle",name:"subtitle",index:20,html:'\n
\n '.concat(t.get("Subtitle offset time"),': 0s\n
\n
\n \n
\n '),mounted:function(t){var e=t.querySelector(".art-setting-range input"),n=t.querySelector(".art-subtitle-value");i(e,"change",function(){var t=e.value;n.innerText=t,r.plugins.subtitleOffset.offset(Number(t))}),r.on("subtitle:switch",function(){e.value=0,n.innerText=0}),r.on("artplayerPluginSubtitleOffset",function(t){e.value!==t&&(e.value=t,n.innerText=t)})}}}function oe(r){var i=r.constructor.utils.clamp,t=r.setting,o=r.notice,a=r.template,c=r.i18n,s=r.player;c.update({"zh-cn":{"Subtitle offset time":"字幕偏移时间","No subtitles found":"未发现字幕"},"zh-tw":{"Subtitle offset time":"字幕偏移時間","No subtitles found":"未發現字幕"}}),t.add(ie);var l=[];return r.on("subtitle:switch",function(){l=[]}),{name:"subtitleOffset",offset:function(t){if(a.$track&&a.$track.track){var e=Array.from(a.$track.track.cues),n=i(t,-5,5);e.forEach(function(t,e){l[e]||(l[e]={startTime:t.startTime,endTime:t.endTime}),t.startTime=i(l[e].startTime+n,0,s.duration),t.endTime=i(l[e].endTime+n,0,s.duration)}),o.show("".concat(c.get("Subtitle offset time"),": ").concat(t,"s")),r.emit("artplayerPluginSubtitleOffset",t)}else o.show("".concat(c.get("No subtitles found"))),r.emit("artplayerPluginSubtitleOffset",0)}}}function ae(i){var t=i.constructor.utils,n=t.append,r=t.setStyle,o=t.setStyles,a=t.sleep,c=t.errorHandle,s=i.events.proxy,l=i.option,u=i.notice,f=i.i18n,p=i.template,d=i.player;function h(t){if(t){var e=p.$video.canPlayType(t.type);if("maybe"===e||"probably"===e){var n=URL.createObjectURL(t);d.playbackRate=!1,d.aspectRatio=!1,p.$video.src=n,a(1e3).then(function(){d.currentTime=0}),l.url=n,i.emit("switch",n),u.show(f.get("Load local video successfully"))}else{var r="".concat(f.get("Playback of this file format is not supported"),": ").concat(t.type);u.show(r,!0,3e3),c(!1,r)}}}return f.update({"zh-cn":{"Playback of this file format is not supported":"不支持播放该文件格式","Load local video successfully":"加载本地视频成功"},"zh-tw":{"Playback of this file format is not supported":"不支持播放該文件格式","Load local video successfully":"加載本地視頻成功"}}),s(p.$player,"dragover",function(t){t.preventDefault(),u.show(f.get("Load local video successfully"))}),s(p.$player,"drop",function(t){t.preventDefault(),h(t.dataTransfer.files[0])}),{name:"localPreview",attach:function(t){var e=n(t,'');r(t,"position","relative"),o(e,{position:"absolute",width:"100%",height:"100%",left:"0",top:"0",opacity:"0"}),s(e,"change",function(){h(e.files[0])})}}}function ce(e){var t=e.layers,n=e.player,r=e.option.theme;return t.add({name:"miniProgressBar",style:{display:"none",position:"absolute",left:0,right:0,bottom:0,height:"2px",background:r},mounted:function(t){e.on("controls:show",function(){t.style.display="none"}),e.on("destroy",function(){t.style.display="none"}),e.on("controls:hide",function(){t.style.display="block"}),e.on("video:timeupdate",function(){t.style.width="".concat(100*n.played,"%")})}}),{name:"miniProgressBar"}}function se(r){var i=1e4,o=0,a=0,c=0,t=null;function e(){c=a=o=0,cancelAnimationFrame(t),t=null}function n(){t||!function n(){r.isDestroy||(t=requestAnimationFrame(function(){var t=Date.now();if(c){var e=t-c;a+=e,r.player.playing||(o+=e)}c=t,r.emit("networkMonitor",o/a),i<=a&&(a=o=0),n()}))}()}return r.on("play",n),r.on("pause",e),{name:"networkMonitor",reset:e,start:n,sample:function(t){i=t}}}function le(e){var t=e.events,n=e.player,r=e.template,i=x(function(){var t=r.$player.getBoundingClientRect();t.top+t.height<=0&&!n.pip?(n.pip=!0,e.emit("artplayerPluginAutoPip",!0)):n.pip&&(n.pip=!1,e.emit("artplayerPluginAutoPip",!1))},300);return t.proxy(window,"scroll",i),{name:"autoPip"}}function ue(e){a(this,ue);var n=e.option,r=e.events.proxy,i=e.template.$video;N.video.events.forEach(function(t){r(i,t,function(t){e.emit("video:".concat(t.type),t)})}),Object.keys(n.moreVideoAttr).forEach(function(t){i[t]=n.moreVideoAttr[t]}),n.muted&&(i.muted=n.muted),n.volume&&(i.volume=O(n.volume,0,1)),n.poster&&(i.poster=n.poster),n.autoplay&&(i.autoplay=n.autoplay),i.controls=!0;var t=n.type||P(n.url),o=n.customType[t];t&&o?(e.emit("beforeCustomType",t),o(i,n.url,e),e.emit("afterCustomType",t)):(e.emit("beforeAttachUrl",n.url),i.src=n.url,e.emit("afterAttachUrl",i.src))}var fe=function(){function r(t){var e=this;a(this,r),this.art=t,this.id=0;var n=t.option;n.subtitle.url&&n.subtitleOffset&&this.add(oe),!n.isLive&&n.miniProgressBar&&this.add(ce),n.localPreview&&this.add(ae),n.networkMonitor&&this.add(se),n.autoPip&&this.add(le),t.option.plugins.forEach(function(t){e.add(t)})}return i(r,[{key:"add",value:function(t){this.id+=1;var e=t.call(this,this.art),n="";return b(!w(this,n=e&&e.name?e.name:t.name?t.name:"plugin".concat(this.id)),"Cannot add a plugin that already has the same name: ".concat(n)),Object.defineProperty(this,n,{value:e}),this.art.emit("plugin:add",t),this}}]),r}(),pe=0,de=function(){function n(t){var e;return a(this,n),(e=s(this,l(n).call(this))).option=f(E(n.option,t),V),e.isFocus=!1,e.isDestroy=!1,e.whitelist=new I(o(e)),e.template=new U(o(e)),e.events=new Nt(o(e)),e.whitelist.state?(e.storage=new re(o(e)),e.icons=new Vt(o(e)),e.i18n=new Y(o(e)),e.notice=new Yt(o(e)),e.player=new G(o(e)),e.layers=new _t(o(e)),e.controls=new xt(o(e)),e.contextmenu=new qt(o(e)),e.subtitle=new It(o(e)),e.info=new zt(o(e)),e.loading=new Xt(o(e)),e.hotkey=new Ut(o(e)),e.mask=new Zt(o(e)),e.setting=new ne(o(e)),e.plugins=new fe(o(e))):e.mobile=new ue(o(e)),pe+=1,e.id=pe,n.instances.push(o(e)),console.log("%c ArtPlayer %c 3.1.18 %c https://artplayer.org","color: #fff; background: #5f5f5f","color: #fff; background: #4bc729",""),e}return e(n,p),i(n,[{key:"destroy",value:function(t){var e=0").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").concat("\r\n\r\n"))}function B(t){return URL.createObjectURL(new Blob([t],{type:"text/vtt"}))}function V(t,e){var n=document.createElement("a");M(n,"display","none"),n.href=t,n.download=e,document.body.appendChild(n),n.click(),document.body.removeChild(n)}function N(t){for(var e=arguments.length,n=new Array(1\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
[x]
\n
\n
\n
\n
×
\n
\n
\n \n '),this.$player=this.query(".artplayer-video-player"),this.$video=this.query(".artplayer-video"),this.$subtitle=this.query(".artplayer-subtitle"),this.$danmuku=this.query(".artplayer-danmuku"),this.$bottom=this.query(".artplayer-bottom"),this.$progress=this.query(".artplayer-progress"),this.$controls=this.query(".artplayer-controls"),this.$controlsLeft=this.query(".artplayer-controls-left"),this.$controlsRight=this.query(".artplayer-controls-right"),this.$layers=this.query(".artplayer-layers"),this.$loading=this.query(".artplayer-loading"),this.$notice=this.query(".artplayer-notice"),this.$noticeInner=this.query(".artplayer-notice-inner"),this.$mask=this.query(".artplayer-mask"),this.$setting=this.query(".artplayer-setting"),this.$settingInner=this.query(".artplayer-setting-inner"),this.$settingBody=this.query(".artplayer-setting-body"),this.$info=this.query(".artplayer-info"),this.$infoPanel=this.query(".artplayer-info-panel"),this.$infoClose=this.query(".artplayer-info-close"),this.$pipHeader=this.query(".artplayer-pip-header"),this.$pipTitle=this.query(".artplayer-pip-title"),this.$pipClose=this.query(".artplayer-pip-close"),this.$contextmenu=this.query(".artplayer-contextmenu")}},{key:"initMobile",value:function(){this.$container.innerHTML='\n
\n \n
\n ',this.$player=this.query(".artplayer-video-player"),this.$video=this.query(".artplayer-video")}},{key:"destroy",value:function(t){t?this.$container.innerHTML="":j(this.$player,"artplayer-destroy")}}]),n}(),G={"About author":"关于作者","Video info":"视频统计信息",Close:"关闭","Video load failed":"视频加载失败",Volume:"音量",Play:"播放",Pause:"暂停",Rate:"速度",Mute:"静音",Flip:"视频翻转",Horizontal:"水平",Vertical:"垂直",Reconnect:"重新连接","Hide subtitle":"隐藏字幕","Show subtitle":"显示字幕","Hide danmu":"隐藏弹幕","Show danmu":"显示弹幕","Show setting":"显示设置","Hide setting":"隐藏设置",Screenshot:"截图","Play speed":"播放速度","Aspect ratio":"画面比例",Default:"默认",Normal:"正常","Switch video":"切换","Switch subtitle":"切换字幕",Fullscreen:"全屏","Exit fullscreen":"退出全屏","Web fullscreen":"网页全屏","Exit web fullscreen":"退出网页全屏","Mini player":"迷你播放器","This does not seem to support full screen functionality":"似乎不支持全屏功能"},Q={"About author":"關於作者","Video info":"影片統計訊息",Close:"關閉","Video load failed":"影片載入失敗",Volume:"音量",Play:"播放",Pause:"暫停",Rate:"速度",Mute:"靜音",Flip:"影片翻轉",Horizontal:"水平",Vertical:"垂直",Reconnect:"重新連接","Hide subtitle":"隱藏字幕","Show subtitle":"顯示字幕","Show setting":"顯示设置","Hide setting":"隱藏设置","Hide danmu":"隱藏彈幕","Show danmu":"顯示彈幕",Screenshot:"截圖","Play speed":"播放速度","Aspect ratio":"畫面比例",Default:"默認",Normal:"正常","Switch video":"切換","Switch subtitle":"切換字幕",Fullscreen:"全屏","Exit fullscreen":"退出全屏","Web fullscreen":"網頁全屏","Exit web fullscreen":"退出網頁全屏","Mini player":"迷你播放器","This does not seem to support full screen functionality":"似乎不支持全屏功能"},K=function(){function e(t){a(this,e),this.art=t,this.languages={"zh-cn":G,"zh-tw":Q},this.init()}return i(e,[{key:"init",value:function(){var t=this.art.option.lang.toLowerCase();this.language=this.languages[t]||{}}},{key:"get",value:function(t){return this.language[t]||t}},{key:"update",value:function(t){this.languages=C(this.languages,t),this.init()}}]),e}();var tt=t(function(t){var o,e,i,r,n;o="undefined"!=typeof window&&void 0!==window.document?window.document:{},e=t.exports,i=function(){for(var t,e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],n=0,r=e.length,i={};n ").concat(s));var u=document.createElement("div");u.classList.value="art-".concat(o," art-").concat(o,"-").concat(s),a.html&&L(u,a.html),a.style&&z(u,a.style);var l=Array.from(t.children);u.dataset.index=a.index||c;var f=l.find(function(t){return Number(t.dataset.index)>=Number(u.dataset.index)});return f?f.insertAdjacentElement("beforebegin",u):L(t,u),a.click&&e.events.proxy(u,"click",function(t){t.preventDefault(),a.click.call(e,n,t),e.emit("".concat(o,":click"),u)}),a.mounted&&a.mounted(u,n,e),i&&i(u,n,e),Object.defineProperty(n,s,{value:{get id(){return c},get $ref(){return u},set show(t){t?(M(u,"display","block"),e.emit("".concat(o,":show"),u)):(M(u,"display","none"),e.emit("".concat(o,":hide"),u))},set remove(t){t&&(A(u),e.emit("".concat(o,":remove"),u))}}}),e.emit("".concat(o,":add"),a),n[s]}var it=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t};function ot(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function at(t){return function(a){return function(e){for(var t=1;t\n
\n
\n
\n
\n
\n \n '),mounted:function(o){var i=!1,n=O(".art-progress-loaded",o),r=O(".art-progress-played",o),a=O(".art-progress-highlight",o),c=O(".art-progress-indicator",o),s=O(".art-progress-tip",o);function u(t,e){"loaded"===t&&M(n,"width","".concat(100*e,"%")),"played"===t&&(M(r,"width","".concat(100*e,"%")),M(c,"left","calc(".concat(100*e,"% - ").concat(q(c,"width")/2,"px)")))}e.forEach(function(t){var e=E(t.time,0,p.duration)/p.duration*100;L(a,''))}),u("loaded",p.loaded),l.on("video:progress",function(){u("loaded",p.loaded)}),l.on("video:timeupdate",function(){u("played",p.played)}),l.on("video:ended",function(){u("played",1)}),f(o,"mousemove",function(t){M(s,"display","block"),-1o.clientWidth-r/2?M(s,"left","".concat(o.clientWidth-r,"px")):M(s,"left","".concat(e-r/2,"px"))}(t):function(t){var e=ht(l,t),n=e.width,r=e.time;s.innerHTML=r;var i=s.clientWidth;n<=i/2?M(s,"left",0):n>o.clientWidth-i/2?M(s,"left","".concat(o.clientWidth-i,"px")):M(s,"left","".concat(n-i/2,"px"))}(t)}),f(o,"mouseout",function(){M(s,"display","none")}),f(o,"click",function(t){if(t.target!==c){var e=ht(l,t),n=e.second;u("played",e.percentage),p.seek=n}}),f(c,"mousedown",function(){i=!0}),f(document,"mousemove",function(t){if(i){var e=ht(l,t),n=e.second,r=e.percentage;j(c,"art-show-indicator"),u("played",r),p.seek=n}}),f(document,"mouseup",function(){i&&(i=!1,k(c,"art-show-indicator"))})}})}}function vt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function mt(t){return function(a){return function(e){for(var t=1;t'),u=L(s,'
');function l(t){var e=s.getBoundingClientRect(),n=e.left,r=e.width,i=u.getBoundingClientRect().width;return E(t.pageX-n-i/2,0,r-i/2)/(r-i)}function f(t){var e=0d.clientWidth-i/2?M(f,"left","".concat(d.clientWidth-i,"px")):M(f,"left","".concat(e-i/2,"px"))}(t))}),e(d,"mouseout",function(){M(f,"display","none")})}})}}function Et(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function St(t){return function(a){return function(e){for(var t=1;t'.concat(i.name,"")),u=o.map(function(t,e){return'
').concat(t.name,"
")}).join(""),l=L(t,'
'.concat(u,"
"));r(t,function(){l.style.left="-".concat(q(l,"width")/2-t.clientWidth/2,"px")}),n(l,"click",function(t){var e=Number(t.target.dataset.index),n=o[e],r=n.url,i=n.name;r&&i&&c!==e&&(a.switchQuality(r,i),s.innerHTML=i,c=e)})}})}}var Tt=function(){function n(t){var e=this;a(this,n),this.id=0,this.art=t,this.art.on("ready",function(){e.init()})}return i(n,[{key:"init",value:function(){var e=this,t=this.art.option;this.add(yt({name:"progress",disable:t.isLive,position:"top",index:10})),this.add(xt({name:"thumbnails",disable:!t.thumbnails.url||t.isLive,position:"top",index:20})),this.add(pt({name:"playAndPause",disable:!1,position:"left",index:10})),this.add(Ot({name:"volume",disable:!1,position:"left",index:20})),this.add(bt({name:"time",disable:t.isLive,position:"left",index:30})),this.add(Rt({name:"quality",disable:0===t.quality.length,position:"right",index:10})),this.add(St({name:"screenshot",disable:!t.screenshot,position:"right",index:20})),this.add(mt({name:"subtitle",disable:!t.subtitle.url,position:"right",index:30})),this.add(jt({name:"setting",disable:!t.setting,position:"right",index:40})),this.add(lt({name:"pip",disable:!t.pip,position:"right",index:50})),this.add(st({name:"fullscreenWeb",disable:!t.fullscreenWeb,position:"right",index:60})),this.add(at({name:"fullscreen",disable:!t.fullscreen,position:"right",index:70})),t.controls.forEach(function(t){e.add(t)})}},{key:"add",value:function(t,e){var n,r="function"==typeof t?t(this.art):t,i=this.art.template,o=i.$progress,a=i.$controlsLeft,c=i.$controlsRight;switch(r.position){case"top":n=o;break;case"left":n=a;break;case"right":n=c}this.id+=1,b(r.position,"Controls option.position can not be empty");var s=rt(this.art,this,n,r,e,"control");return r.disable||"top"===r.position||s.$ref.firstElementChild&&"I"===s.$ref.firstElementChild.tagName||j(s.$ref,"art-control-onlyText"),s}},{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template.$player;t?(this.state=!0,j(e,"artplayer-controls-show"),this.art.emit("controls:show")):(this.state=!1,k(e,"artplayer-controls-show"),this.art.emit("controls:hide"))}}]),n}();function Dt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ct(n){return function(t){var e=t.i18n,r=t.player;return function(e){for(var t=1;t0.5\n 0.75\n ').concat(e.get("Normal"),'\n 1.25\n 1.5\n 2.0\n '),click:function(t,e){var n=e.target.dataset.rate;n&&(r.playbackRate=Number(n),t.show=!1)},mounted:function(n){t.on("playbackRateChange",function(e){var t=P("span",n).find(function(t){return Number(t.dataset.rate)===e});t&&F(t,"current")})}})}}function Lt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function At(n){return function(t){var e=t.i18n,r=t.player;return function(e){for(var t=1;t').concat(e.get("Default"),'\n 4:3\n 16:9\n '),click:function(t,e){var n=e.target.dataset.ratio;n&&(r.aspectRatio=n,t.show=!1)},mounted:function(n){t.on("aspectRatioChange",function(e){var t=P("span",n).find(function(t){return t.dataset.ratio===e});t&&F(t,"current")})}})}}function Mt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function zt(t){return function(e){return function(e){for(var t=1;tArtPlayer 3.1.18'})}function Ft(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ht(e){return function(t){return function(e){for(var t=1;t\n
Player version:
\n
3.1.18
\n \n '),t.push('\n
\n
Video url:
\n
'.concat(this.art.option.url,"
\n
\n ")),t.push('\n
\n
Video volume:
\n
\n
\n '),t.push('\n
\n
Video time:
\n
\n
\n '),t.push('\n
\n
Video duration:
\n
\n
\n '),t.push('\n
\n
Video resolution:
\n
\n x \n
\n
\n '),t.join("")}},{key:"readInfo",value:function(){var t=this.art.template,e=t.$infoPanel,n=t.$video;P("[data-video]",e).forEach(function(t){var e=n[t.dataset.video];t.innerHTML=void 0!==e?"number"==typeof e?e.toFixed(2):e:"unknown"})}},{key:"loop",value:function(){var t=this;this.readInfo(),this.timer=setTimeout(function(){t.readInfo(),t.loop()},1e3)}},{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template,n=e.$player,r=e.$infoPanel;t?(this.state=!0,j(n,"artplayer-info-show"),r.innerHTML||L(r,this.creatInfo()),clearTimeout(this.timer),this.loop(),this.art.emit("info:show")):(this.state=!1,k(n,"artplayer-info-show"),clearTimeout(this.timer),this.art.emit("info:hide"))}}]),e}();var Vt=function(t){if(Array.isArray(t))return t};var Nt=function(t,e){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=t[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}};var Ut=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")};var _t=function(t,e){return Vt(t)||Nt(t,e)||Ut()};var Xt=function(){function n(t){a(this,n),this.art=t,this.state=!0,this.isInit=!1;var e=this.art.option.subtitle.url;e&&this.init(e)}return i(n,[{key:"switch",value:function(t){var e=this.art,n=e.i18n,r=e.notice;return this.init(t).then(function(t){return r.show(n.get("Switch subtitle")),t})}},{key:"init",value:function(u){var l=this;return new Promise(function(o){var t=l.art,a=t.events.proxy,e=t.option.subtitle,n=t.template,c=n.$video,s=n.$subtitle,r=n.$track;if(z(s,e.style||{}),!r){var i=document.createElement("track");i.default=!0,i.kind="metadata",c.appendChild(i),l.art.template.$track=i}l.load(u).then(function(t){s.innerHTML="";var e=l.art.template.$track,n=e.src;if(n!==t){if(URL.revokeObjectURL(n),e.src=t,c.textTracks&&c.textTracks[0]){var r=function(){var t=_t(i.activeCues,1)[0];s.innerHTML="",t&&(s.innerHTML=t.text.split(/\r?\n/).map(function(t){return"

".concat(t,"

")}).join("")),this.art.emit("subtitle:update",s)},i=_t(c.textTracks,1)[0];l.isInit||(l.isInit=!0,a(i,"cuechange",r.bind(l))),l.art.on("artplayerPluginSubtitleOffset",r.bind(l))}o(t)}})})}},{key:"load",value:function(e){var n=this.art.notice;return fetch(e).then(function(t){return t.text()}).then(function(t){switch(S(e)){case"srt":return B(I(t));case"ass":return B(function(t){var n=new RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$","i");function r(t){return(0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n',state:'\n \n',play:'\n \n',pause:'\n \n',volume:'\n \n \n',volumeClose:'\n \n \n',subtitle:'\n \n \n',screenshot:'\n\t\n\n',setting:'\n \n \n',fullscreen:'\n\t\n\t\n\t\n\t\n',fullscreenWeb:'\n\t\n',pip:'\n \n',prev:'\n \n',next:'\n \n'},t.option.icons);Object.keys(r).forEach(function(t){var e=document.createElement("i");e.classList.add("art-icon"),e.classList.add("art-icon-".concat(t)),L(e,r[t]),n[t]=e})}var Zt=function(){function n(t){var e=this;a(this,n),this.destroyEvents=[],this.proxy=this.proxy.bind(this),this.hover=this.hover.bind(this),this.loadImg=this.loadImg.bind(this),t.whitelist.state&&t.once("video:canplay",function(){!function(e,t){var n=e.template.$player;t.proxy(document,["click","contextmenu"],function(t){-1'),t.icons.state)}return i(e,[{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template.$player;t?(this.state=!0,j(e,"artplayer-mask-show"),this.art.emit("mask:show")):(this.state=!1,k(e,"artplayer-mask-show"),this.art.emit("mask:hide"))}}]),e}();function ee(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ne(n){return function(t){var e=t.i18n,r=t.player;return function(e){for(var t=1;t'.concat(e.get("Flip"),'\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n "),click:function(t,e){var n=e.target.dataset.value;n&&(r.flip=n)},mounted:function(n){t.on("flipChange",function(e){var t=P("button",n).find(function(t){return t.dataset.value===e});t&&F(t.parentElement,"current")})}})}}function re(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ie(n){return function(t){var e=t.i18n,r=t.player;return function(e){for(var t=1;t'.concat(e.get("Aspect ratio"),'\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n '),click:function(t,e){var n=e.target.dataset.value;n&&(r.aspectRatio=n)},mounted:function(n){t.on("aspectRatioChange",function(e){var t=P("button",n).find(function(t){return t.dataset.value===e});t&&F(t.parentElement,"current")})}})}}function oe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ae(e){return function(r){var t=r.i18n,i=r.player,o=r.events.proxy;return function(e){for(var t=1;t\n '.concat(t.get("Play speed"),': 1.0x\n \n
\n \n
\n '),mounted:function(t){var e=O(".art-setting-range input",t),n=O(".art-subtitle-value",t);o(e,"change",function(){var t=e.value;n.innerText=t,i.playbackRate=Number(t)}),r.on("playbackRateChange",function(t){e.value!==t&&(e.value=t,n.innerText=t)})}})}}var ce=function(){function n(t){var e=this;a(this,n),this.id=0,this.art=t,this.state=!1,t.option.setting&&(this.art.on("ready",function(){e.init()}),this.art.on("blur",function(){e.show=!1}))}return i(n,[{key:"init",value:function(){var e=this,t=this.art,n=t.option,r=t.template.$setting;(0,t.events.proxy)(r,"click",function(t){t.target===r&&(e.show=!1)}),this.add(ne({disable:!n.flip,name:"flip"})),this.add(ie({disable:!n.aspectRatio,name:"aspectRatio"})),this.add(ae({disable:!n.playbackRate,name:"playbackRate"}))}},{key:"add",value:function(t,e){this.id+=1;var n=this.art.template.$settingBody;return rt(this.art,this,n,t,e,"setting")}},{key:"toggle",value:function(){this.show=!this.state}},{key:"show",set:function(t){var e=this.art.template.$player;t?(this.state=!0,j(e,"artplayer-setting-show"),this.art.emit("setting:show")):(this.state=!1,k(e,"artplayer-setting-show"),this.art.emit("setting:hide"))}}]),n}(),se=function(){function e(t){a(this,e),this.art=t,this.name="artplayer_settings",this.init()}return i(e,[{key:"init",value:function(){var t=this.art.option,e=this.get("volume");e&&(t.volume=e)}},{key:"get",value:function(t){var e=JSON.parse(window.localStorage.getItem(this.name))||{};return t?e[t]:{}}},{key:"set",value:function(t,e){var n=Object.assign({},this.get(),it({},t,e));window.localStorage.setItem(this.name,JSON.stringify(n))}},{key:"del",value:function(t){var e=this.get();delete e[t],window.localStorage.setItem(this.name,JSON.stringify(e))}},{key:"clean",value:function(){window.localStorage.removeItem(this.name)}}]),e}();function ue(r){var t=r.i18n,i=r.events.proxy;return{title:"Subtitle",name:"subtitle",index:20,html:'\n
\n '.concat(t.get("Subtitle offset time"),': 0s\n
\n
\n \n
\n '),mounted:function(t){var e=O(".art-setting-range input",t),n=O(".art-subtitle-value",t);i(e,"change",function(){var t=e.value;n.innerText=t,r.plugins.subtitleOffset.offset(Number(t))}),r.on("subtitle:switch",function(){e.value=0,n.innerText=0}),r.on("artplayerPluginSubtitleOffset",function(t){e.value!==t&&(e.value=t,n.innerText=t)})}}}function le(r){var i=r.constructor.utils.clamp,t=r.setting,o=r.notice,a=r.template,c=r.i18n,s=r.player;c.update({"zh-cn":{"Subtitle offset time":"字幕偏移时间","No subtitles found":"未发现字幕"},"zh-tw":{"Subtitle offset time":"字幕偏移時間","No subtitles found":"未發現字幕"}}),t.add(ue);var u=[];return r.on("subtitle:switch",function(){u=[]}),{name:"subtitleOffset",offset:function(t){if(a.$track&&a.$track.track){var e=Array.from(a.$track.track.cues),n=i(t,-5,5);e.forEach(function(t,e){u[e]||(u[e]={startTime:t.startTime,endTime:t.endTime}),t.startTime=i(u[e].startTime+n,0,s.duration),t.endTime=i(u[e].endTime+n,0,s.duration)}),o.show("".concat(c.get("Subtitle offset time"),": ").concat(t,"s")),r.emit("artplayerPluginSubtitleOffset",t)}else o.show("".concat(c.get("No subtitles found"))),r.emit("artplayerPluginSubtitleOffset",0)}}}function fe(i){var t=i.constructor.utils,n=t.append,r=t.setStyle,o=t.setStyles,a=t.sleep,c=t.errorHandle,s=i.events.proxy,u=i.option,l=i.notice,f=i.i18n,p=i.template,d=i.player;function h(t){if(t){var e=p.$video.canPlayType(t.type);if("maybe"===e||"probably"===e){var n=URL.createObjectURL(t);d.playbackRate=!1,d.aspectRatio=!1,p.$video.src=n,a(1e3).then(function(){d.currentTime=0}),u.url=n,i.emit("switch",n),l.show(f.get("Load local video successfully"))}else{var r="".concat(f.get("Playback of this file format is not supported"),": ").concat(t.type);l.show(r,!0,3e3),c(!1,r)}}}return f.update({"zh-cn":{"Playback of this file format is not supported":"不支持播放该文件格式","Load local video successfully":"加载本地视频成功"},"zh-tw":{"Playback of this file format is not supported":"不支持播放該文件格式","Load local video successfully":"加載本地視頻成功"}}),s(p.$player,"dragover",function(t){t.preventDefault(),l.show(f.get("Load local video successfully"))}),s(p.$player,"drop",function(t){t.preventDefault(),h(t.dataTransfer.files[0])}),{name:"localPreview",attach:function(t){var e=n(t,'');r(t,"position","relative"),o(e,{position:"absolute",width:"100%",height:"100%",left:"0",top:"0",opacity:"0"}),s(e,"change",function(){h(e.files[0])})}}}function pe(e){var t=e.layers,n=e.player,r=e.option.theme;return t.add({name:"miniProgressBar",style:{display:"none",position:"absolute",left:0,right:0,bottom:0,height:"2px",background:r},mounted:function(t){e.on("controls:show",function(){t.style.display="none"}),e.on("destroy",function(){t.style.display="none"}),e.on("controls:hide",function(){t.style.display="block"}),e.on("video:timeupdate",function(){t.style.width="".concat(100*n.played,"%")})}}),{name:"miniProgressBar"}}function de(r){var i=1e4,o=0,a=0,c=0,t=null;function e(){c=a=o=0,cancelAnimationFrame(t),t=null}function n(){t||!function n(){r.isDestroy||(t=requestAnimationFrame(function(){var t=Date.now();if(c){var e=t-c;a+=e,r.player.playing||(o+=e)}c=t,r.emit("networkMonitor",o/a),i<=a&&(a=o=0),n()}))}()}return r.on("play",n),r.on("pause",e),{name:"networkMonitor",reset:e,start:n,sample:function(t){i=t}}}function he(e){var t=e.events,n=e.player,r=e.template,i=T(function(){var t=r.$player.getBoundingClientRect();t.top+t.height<=0&&!n.pip?(n.pip=!0,e.emit("artplayerPluginAutoPip",!0)):n.pip&&(n.pip=!1,e.emit("artplayerPluginAutoPip",!1))},300);return t.proxy(window,"scroll",i),{name:"autoPip"}}function ye(e){a(this,ye);var n=e.option,r=e.events.proxy,i=e.template.$video;Z.video.events.forEach(function(t){r(i,t,function(t){e.emit("video:".concat(t.type),t)})}),Object.keys(n.moreVideoAttr).forEach(function(t){i[t]=n.moreVideoAttr[t]}),n.muted&&(i.muted=n.muted),n.volume&&(i.volume=E(n.volume,0,1)),n.poster&&(i.poster=n.poster),n.autoplay&&(i.autoplay=n.autoplay),i.controls=!0;var t=n.type||S(n.url),o=n.customType[t];t&&o?(e.emit("beforeCustomType",t),o(i,n.url,e),e.emit("afterCustomType",t)):(e.emit("beforeAttachUrl",n.url),i.src=n.url,e.emit("afterAttachUrl",i.src))}var ve=function(){function r(t){var e=this;a(this,r),this.art=t,this.id=0;var n=t.option;n.subtitle.url&&n.subtitleOffset&&this.add(le),!n.isLive&&n.miniProgressBar&&this.add(pe),n.localPreview&&this.add(fe),n.networkMonitor&&this.add(de),n.autoPip&&this.add(he),t.option.plugins.forEach(function(t){e.add(t)})}return i(r,[{key:"add",value:function(t){this.id+=1;var e=t.call(this,this.art),n="";return b(!w(this,n=e&&e.name?e.name:t.name?t.name:"plugin".concat(this.id)),"Cannot add a plugin that already has the same name: ".concat(n)),Object.defineProperty(this,n,{value:e}),this.art.emit("plugin:add",t),this}}]),r}(),me=0,ge=function(){function n(t){var e;return a(this,n),(e=s(this,u(n).call(this))).option=f(C(n.option,t),Y),e.isFocus=!1,e.isDestroy=!1,e.whitelist=new X(o(e)),e.template=new J(o(e)),e.events=new Zt(o(e)),e.whitelist.state?(e.storage=new se(o(e)),e.icons=new Yt(o(e)),e.i18n=new K(o(e)),e.notice=new Kt(o(e)),e.player=new nt(o(e)),e.layers=new Gt(o(e)),e.controls=new Tt(o(e)),e.contextmenu=new It(o(e)),e.subtitle=new Xt(o(e)),e.info=new Bt(o(e)),e.loading=new Qt(o(e)),e.hotkey=new Jt(o(e)),e.mask=new te(o(e)),e.setting=new ce(o(e)),e.plugins=new ve(o(e))):e.mobile=new ye(o(e)),me+=1,e.id=me,n.instances.push(o(e)),console.log("%c ArtPlayer %c 3.1.18 %c https://artplayer.org","color: #fff; background: #5f5f5f","color: #fff; background: #4bc729",""),e}return e(n,p),i(n,[{key:"destroy",value:function(t){var e=0 { const { i18n, player } = art; return { - ...menuOption, + ...option, html: ` ${i18n.get('Aspect ratio')}: ${i18n.get('Default')} @@ -12,8 +12,7 @@ export default function aspectRatio(menuOption) { 16:9 `, click: (contextmenu, event) => { - const { target } = event; - const { ratio } = target.dataset; + const { ratio } = event.target.dataset; if (ratio) { player.aspectRatio = ratio; contextmenu.show = false; @@ -21,10 +20,10 @@ export default function aspectRatio(menuOption) { }, mounted: $menu => { art.on('aspectRatioChange', ratio => { - const $current = Array.from($menu.querySelectorAll('span')).find( - item => item.dataset.ratio === ratio, - ); - inverseClass($current, 'current'); + const $current = queryAll('span', $menu).find(item => item.dataset.ratio === ratio); + if ($current) { + inverseClass($current, 'current'); + } }); }, }; diff --git a/packages/artplayer/src/contextmenu/close.js b/packages/artplayer/src/contextmenu/close.js index ec86448ca..141cde2c7 100644 --- a/packages/artplayer/src/contextmenu/close.js +++ b/packages/artplayer/src/contextmenu/close.js @@ -1,6 +1,6 @@ -export default function close(menuOption) { +export default function close(option) { return art => ({ - ...menuOption, + ...option, html: art.i18n.get('Close'), click: contextmenu => { contextmenu.show = false; diff --git a/packages/artplayer/src/contextmenu/index.js b/packages/artplayer/src/contextmenu/index.js index 1764bdabb..615980cbe 100644 --- a/packages/artplayer/src/contextmenu/index.js +++ b/packages/artplayer/src/contextmenu/index.js @@ -1,4 +1,4 @@ -import { setStyle } from '../utils'; +import { setStyle, addClass, removeClass } from '../utils'; import component from '../utils/component'; import playbackRate from './playbackRate'; import aspectRatio from './aspectRatio'; @@ -26,35 +26,45 @@ export default class Contextmenu { events: { proxy }, } = this.art; - this.add(playbackRate({ - disable: !option.playbackRate, - name: 'playbackRate', - index: 10, - })); + this.add( + playbackRate({ + disable: !option.playbackRate, + name: 'playbackRate', + index: 10, + }), + ); - this.add(aspectRatio({ - disable: !option.aspectRatio, - name: 'aspectRatio', - index: 20, - })); + this.add( + aspectRatio({ + disable: !option.aspectRatio, + name: 'aspectRatio', + index: 20, + }), + ); - this.add(info({ - disable: false, - name: 'info', - index: 30, - })); + this.add( + info({ + disable: false, + name: 'info', + index: 30, + }), + ); - this.add(version({ - disable: false, - name: 'version', - index: 40, - })); + this.add( + version({ + disable: false, + name: 'version', + index: 40, + }), + ); - this.add(close({ - disable: false, - name: 'close', - index: 50, - })); + this.add( + close({ + disable: false, + name: 'close', + index: 50, + }), + ); option.contextmenu.forEach(item => { this.add(item); @@ -104,11 +114,11 @@ export default class Contextmenu { const { $player } = this.art.template; if (value) { this.state = true; - $player.classList.add('artplayer-contextmenu-show'); + addClass($player, 'artplayer-contextmenu-show'); this.art.emit('contextmenu:show'); } else { this.state = false; - $player.classList.remove('artplayer-contextmenu-show'); + removeClass($player, 'artplayer-contextmenu-show'); this.art.emit('contextmenu:hide'); } } diff --git a/packages/artplayer/src/contextmenu/info.js b/packages/artplayer/src/contextmenu/info.js index 8b88a78e2..e3e1a7b4e 100644 --- a/packages/artplayer/src/contextmenu/info.js +++ b/packages/artplayer/src/contextmenu/info.js @@ -1,6 +1,6 @@ -export default function info(menuOption) { +export default function info(option) { return art => ({ - ...menuOption, + ...option, html: art.i18n.get('Video info'), click: contextmenu => { art.info.show = true; diff --git a/packages/artplayer/src/contextmenu/playbackRate.js b/packages/artplayer/src/contextmenu/playbackRate.js index 2ae75d8c3..f03030107 100644 --- a/packages/artplayer/src/contextmenu/playbackRate.js +++ b/packages/artplayer/src/contextmenu/playbackRate.js @@ -1,10 +1,10 @@ -import { inverseClass } from '../utils'; +import { inverseClass, queryAll } from '../utils'; -export default function playbackRate(menuOption) { +export default function playbackRate(option) { return art => { const { i18n, player } = art; return { - ...menuOption, + ...option, html: ` ${i18n.get('Play speed')}: 0.5 @@ -15,8 +15,7 @@ export default function playbackRate(menuOption) { 2.0 `, click: (contextmenu, event) => { - const { target } = event; - const { rate } = target.dataset; + const { rate } = event.target.dataset; if (rate) { player.playbackRate = Number(rate); contextmenu.show = false; @@ -24,9 +23,7 @@ export default function playbackRate(menuOption) { }, mounted: $menu => { art.on('playbackRateChange', rate => { - const $current = Array.from($menu.querySelectorAll('span')).find( - item => Number(item.dataset.rate) === rate, - ); + const $current = queryAll('span', $menu).find(item => Number(item.dataset.rate) === rate); if ($current) { inverseClass($current, 'current'); } diff --git a/packages/artplayer/src/contextmenu/version.js b/packages/artplayer/src/contextmenu/version.js index c00ec0c9b..0a63eb513 100644 --- a/packages/artplayer/src/contextmenu/version.js +++ b/packages/artplayer/src/contextmenu/version.js @@ -1,6 +1,6 @@ -export default function version(menuOption) { +export default function version(option) { return { - ...menuOption, + ...option, html: 'ArtPlayer __VERSION__', }; } diff --git a/packages/artplayer/src/controls/fullscreen.js b/packages/artplayer/src/controls/fullscreen.js index 797a5a5cc..fb1fc610a 100644 --- a/packages/artplayer/src/controls/fullscreen.js +++ b/packages/artplayer/src/controls/fullscreen.js @@ -1,8 +1,8 @@ import { append, tooltip, setStyle } from '../utils'; -export default function fullscreen(controlOption) { +export default function fullscreen(option) { return art => ({ - ...controlOption, + ...option, mounted: $control => { const { events: { proxy }, diff --git a/packages/artplayer/src/controls/fullscreenWeb.js b/packages/artplayer/src/controls/fullscreenWeb.js index 2c7b34a34..76d828266 100644 --- a/packages/artplayer/src/controls/fullscreenWeb.js +++ b/packages/artplayer/src/controls/fullscreenWeb.js @@ -1,8 +1,8 @@ import { append, tooltip, setStyle } from '../utils'; -export default function fullscreenWeb(controlOption) { +export default function fullscreenWeb(option) { return art => ({ - ...controlOption, + ...option, mounted: $control => { const { events: { proxy }, @@ -10,7 +10,7 @@ export default function fullscreenWeb(controlOption) { i18n, player, } = art; - + const $fullscreenWeb = append($control, icons.fullscreenWeb); tooltip($fullscreenWeb, i18n.get('Web fullscreen')); diff --git a/packages/artplayer/src/controls/index.js b/packages/artplayer/src/controls/index.js index 7575762d0..1558f067c 100644 --- a/packages/artplayer/src/controls/index.js +++ b/packages/artplayer/src/controls/index.js @@ -1,4 +1,4 @@ -import { errorHandle } from '../utils'; +import { errorHandle, addClass, removeClass } from '../utils'; import component from '../utils/component'; import fullscreen from './fullscreen'; import fullscreenWeb from './fullscreenWeb'; @@ -156,15 +156,15 @@ export default class Controls { break; } - errorHandle(parent, 'Controls option.position can not be empty'); this.id += 1; + errorHandle(option.position, 'Controls option.position can not be empty'); const control = component(this.art, this, parent, option, callback, 'control'); if ( !option.disable && option.position !== 'top' && !(control.$ref.firstElementChild && control.$ref.firstElementChild.tagName === 'I') ) { - control.$ref.classList.add('art-control-onlyText'); + addClass(control.$ref, 'art-control-onlyText'); } return control; } @@ -173,11 +173,11 @@ export default class Controls { const { $player } = this.art.template; if (value) { this.state = true; - $player.classList.add('artplayer-controls-show'); + addClass($player, 'artplayer-controls-show'); this.art.emit('controls:show'); } else { this.state = false; - $player.classList.remove('artplayer-controls-show'); + removeClass($player, 'artplayer-controls-show'); this.art.emit('controls:hide'); } } diff --git a/packages/artplayer/src/controls/pip.js b/packages/artplayer/src/controls/pip.js index 9e8e3f49d..f5b35b43f 100644 --- a/packages/artplayer/src/controls/pip.js +++ b/packages/artplayer/src/controls/pip.js @@ -1,8 +1,8 @@ import { append, tooltip } from '../utils'; -export default function pip(controlOption) { +export default function pip(option) { return art => ({ - ...controlOption, + ...option, mounted: $control => { const { events: { proxy }, diff --git a/packages/artplayer/src/controls/playAndPause.js b/packages/artplayer/src/controls/playAndPause.js index b6472068e..0397ebef4 100644 --- a/packages/artplayer/src/controls/playAndPause.js +++ b/packages/artplayer/src/controls/playAndPause.js @@ -1,8 +1,8 @@ import { append, tooltip, setStyle } from '../utils'; -export default function playAndPause(controlOption) { +export default function playAndPause(option) { return art => ({ - ...controlOption, + ...option, mounted: $control => { const { events: { proxy }, diff --git a/packages/artplayer/src/controls/progress.js b/packages/artplayer/src/controls/progress.js index 7e79c7cc4..c6546f3d2 100644 --- a/packages/artplayer/src/controls/progress.js +++ b/packages/artplayer/src/controls/progress.js @@ -1,11 +1,11 @@ -import { append, clamp, secondToTime, setStyle, getStyle } from '../utils'; +import { append, clamp, secondToTime, setStyle, getStyle, query, addClass, removeClass } from '../utils'; export function getPosFromEvent(art, event) { const { template: { $progress }, player, } = art; - + const { left } = $progress.getBoundingClientRect(); const width = clamp(event.pageX - left, 0, $progress.clientWidth); const second = (width / $progress.clientWidth) * player.duration; @@ -14,7 +14,7 @@ export function getPosFromEvent(art, event) { return { second, time, width, percentage }; } -export default function progress(controlOption) { +export default function progress(option) { return art => { const { option: { highlight, theme }, @@ -22,7 +22,7 @@ export default function progress(controlOption) { player, } = art; return { - ...controlOption, + ...option, html: `
@@ -34,11 +34,11 @@ export default function progress(controlOption) { `, mounted: $control => { let isDroging = false; - const $loaded = $control.querySelector('.art-progress-loaded'); - const $played = $control.querySelector('.art-progress-played'); - const $highlight = $control.querySelector('.art-progress-highlight'); - const $indicator = $control.querySelector('.art-progress-indicator'); - const $tip = $control.querySelector('.art-progress-tip'); + const $loaded = query('.art-progress-loaded', $control); + const $played = query('.art-progress-played', $control); + const $highlight = query('.art-progress-highlight', $control); + const $indicator = query('.art-progress-indicator', $control); + const $tip = query('.art-progress-tip', $control); function showHighlight(event) { const { width } = getPosFromEvent(art, event); @@ -132,7 +132,7 @@ export default function progress(controlOption) { proxy(document, 'mousemove', event => { if (isDroging) { const { second, percentage } = getPosFromEvent(art, event); - $indicator.classList.add('art-show-indicator'); + addClass($indicator, 'art-show-indicator'); setBar('played', percentage); player.seek = second; } @@ -141,7 +141,7 @@ export default function progress(controlOption) { proxy(document, 'mouseup', () => { if (isDroging) { isDroging = false; - $indicator.classList.remove('art-show-indicator'); + removeClass($indicator, 'art-show-indicator'); } }); }, diff --git a/packages/artplayer/src/controls/quality.js b/packages/artplayer/src/controls/quality.js index db4ee8e8c..0af040956 100644 --- a/packages/artplayer/src/controls/quality.js +++ b/packages/artplayer/src/controls/quality.js @@ -1,20 +1,20 @@ import { append, getStyle } from '../utils'; -export default function quality(controlOption) { +export default function quality(option) { return art => ({ - ...controlOption, + ...option, mounted: $control => { const { - option, + option: { quality }, events: { proxy, hover }, player, } = art; - + let playIndex = -1; - const defaultQuality = option.quality.find(item => item.default) || option.quality[0]; - playIndex = option.quality.indexOf(defaultQuality); + const defaultQuality = quality.find(item => item.default) || quality[0]; + playIndex = quality.indexOf(defaultQuality); const $qualityName = append($control, `
${defaultQuality.name}
`); - const qualityList = option.quality + const qualityList = quality .map((item, index) => `
${item.name}
`) .join(''); const $qualitys = append($control, `
${qualityList}
`); @@ -25,7 +25,7 @@ export default function quality(controlOption) { proxy($qualitys, 'click', event => { const index = Number(event.target.dataset.index); - const { url, name } = option.quality[index]; + const { url, name } = quality[index]; if (url && name && playIndex !== index) { player.switchQuality(url, name); $qualityName.innerHTML = name; diff --git a/packages/artplayer/src/controls/screenshot.js b/packages/artplayer/src/controls/screenshot.js index ff7cc0281..002b9fde8 100644 --- a/packages/artplayer/src/controls/screenshot.js +++ b/packages/artplayer/src/controls/screenshot.js @@ -1,8 +1,8 @@ import { append, tooltip } from '../utils'; -export default function screenshot(controlOption) { +export default function screenshot(option) { return art => ({ - ...controlOption, + ...option, mounted: $control => { const { events: { proxy }, @@ -10,7 +10,7 @@ export default function screenshot(controlOption) { i18n, player, } = art; - + const $screenshot = append($control, icons.screenshot); tooltip($screenshot, i18n.get('Screenshot')); proxy($screenshot, 'click', () => { diff --git a/packages/artplayer/src/controls/setting.js b/packages/artplayer/src/controls/setting.js index 72e466768..5eb1786b4 100644 --- a/packages/artplayer/src/controls/setting.js +++ b/packages/artplayer/src/controls/setting.js @@ -1,8 +1,8 @@ import { append, tooltip, setStyle } from '../utils'; -export default function setting(controlOption) { +export default function setting(option) { return art => ({ - ...controlOption, + ...option, mounted: $control => { const { events: { proxy }, @@ -10,7 +10,7 @@ export default function setting(controlOption) { i18n, setting, } = art; - + const $setting = append($control, icons.setting); tooltip($setting, i18n.get('Show setting')); diff --git a/packages/artplayer/src/controls/subtitle.js b/packages/artplayer/src/controls/subtitle.js index f6a5512e7..f9a452a4c 100644 --- a/packages/artplayer/src/controls/subtitle.js +++ b/packages/artplayer/src/controls/subtitle.js @@ -1,8 +1,8 @@ import { append, tooltip, setStyle } from '../utils'; -export default function subtitle(controlOption) { +export default function subtitle(option) { return art => ({ - ...controlOption, + ...option, mounted: $control => { const { events: { proxy }, @@ -10,7 +10,7 @@ export default function subtitle(controlOption) { i18n, subtitle, } = art; - + const $subtitle = append($control, icons.subtitle); tooltip($subtitle, i18n.get('Hide subtitle')); diff --git a/packages/artplayer/src/controls/thumbnails.js b/packages/artplayer/src/controls/thumbnails.js index 338cf0d9b..3a4d29f13 100644 --- a/packages/artplayer/src/controls/thumbnails.js +++ b/packages/artplayer/src/controls/thumbnails.js @@ -1,21 +1,22 @@ import { setStyle } from '../utils'; import { getPosFromEvent } from './progress'; -export default function thumbnails(controlOption) { +export default function thumbnails(option) { return art => ({ - ...controlOption, + ...option, mounted: $control => { const { + option: { thumbnails }, template: { $progress }, events: { proxy, loadImg }, } = art; - + let loading = false; let isLoad = false; function showThumbnails(event) { const { width: posWidth } = getPosFromEvent(art, event); - const { url, height, width, number, column } = art.option.thumbnails; + const { url, height, width, number, column } = thumbnails; const perWidth = $progress.clientWidth / number; const perIndex = Math.floor(posWidth / perWidth); const yIndex = Math.ceil(perIndex / column) - 1; @@ -36,7 +37,7 @@ export default function thumbnails(controlOption) { proxy($progress, 'mousemove', event => { if (!loading) { loading = true; - loadImg(art.option.thumbnails.url).then(() => { + loadImg(thumbnails.url).then(() => { isLoad = true; }); } diff --git a/packages/artplayer/src/controls/time.js b/packages/artplayer/src/controls/time.js index ea289a228..8d96aab97 100644 --- a/packages/artplayer/src/controls/time.js +++ b/packages/artplayer/src/controls/time.js @@ -1,8 +1,8 @@ import { secondToTime } from '../utils'; -export default function time(controlOption) { +export default function time(option) { return art => ({ - ...controlOption, + ...option, mounted: $control => { function getTime() { const newTime = `${secondToTime(art.player.currentTime)} / ${secondToTime(art.player.duration)}`; diff --git a/packages/artplayer/src/controls/volume.js b/packages/artplayer/src/controls/volume.js index 4d18aae09..edae225df 100644 --- a/packages/artplayer/src/controls/volume.js +++ b/packages/artplayer/src/controls/volume.js @@ -1,8 +1,8 @@ import { append, clamp, tooltip, setStyle, getStyle } from '../utils'; -export default function volume(controlOption) { +export default function volume(option) { return art => ({ - ...controlOption, + ...option, mounted: $control => { const { events: { proxy }, @@ -10,7 +10,7 @@ export default function volume(controlOption) { player, i18n, } = art; - + let isDroging = false; const $volume = append($control, icons.volume); const $volumeClose = append($control, icons.volumeClose); diff --git a/packages/artplayer/src/events/hoverInit.js b/packages/artplayer/src/events/hoverInit.js index 4a86565f3..570e85089 100644 --- a/packages/artplayer/src/events/hoverInit.js +++ b/packages/artplayer/src/events/hoverInit.js @@ -1,3 +1,5 @@ +import { addClass, removeClass } from '../utils'; + export default function hoverInit(art, events) { const { template: { $player }, @@ -5,11 +7,11 @@ export default function hoverInit(art, events) { events.hover( $player, () => { - $player.classList.add('artplayer-hover'); + addClass($player, 'artplayer-hover'); art.emit('hoverenter'); }, () => { - $player.classList.remove('artplayer-hover'); + removeClass($player, 'artplayer-hover'); art.emit('hoverleave'); }, ); diff --git a/packages/artplayer/src/events/mousemoveInit.js b/packages/artplayer/src/events/mousemoveInit.js index 6a801407b..667adc832 100644 --- a/packages/artplayer/src/events/mousemoveInit.js +++ b/packages/artplayer/src/events/mousemoveInit.js @@ -1,4 +1,4 @@ -import { debounce } from '../utils'; +import { debounce, addClass, removeClass } from '../utils'; export default function mousemoveInitInit(art, events) { const { @@ -7,8 +7,8 @@ export default function mousemoveInitInit(art, events) { } = art; const autoHide = debounce(() => { - $player.classList.add('artplayer-hide-cursor'); - $player.classList.remove('artplayer-hover'); + addClass($player, 'artplayer-hide-cursor'); + removeClass($player, 'artplayer-hover'); art.controls.show = false; }, 3000); @@ -20,7 +20,7 @@ export default function mousemoveInitInit(art, events) { events.proxy($player, 'mousemove', event => { autoHide.clearTimeout(); - $player.classList.remove('artplayer-hide-cursor'); + removeClass($player, 'artplayer-hide-cursor'); art.controls.show = true; if (!art.player.pip && player.playing && event.target === $video) { autoHide(); diff --git a/packages/artplayer/src/info.js b/packages/artplayer/src/info.js index 3caf6d576..c57f7b19b 100644 --- a/packages/artplayer/src/info.js +++ b/packages/artplayer/src/info.js @@ -1,4 +1,4 @@ -import { append } from './utils'; +import { append, addClass, removeClass, queryAll } from './utils'; export default class Info { constructor(art) { @@ -73,7 +73,7 @@ export default class Info { readInfo() { const { $infoPanel, $video } = this.art.template; - const types = Array.from($infoPanel.querySelectorAll('[data-video]')); + const types = queryAll('[data-video]', $infoPanel); types.forEach(item => { const value = $video[item.dataset.video]; if (value !== undefined) { @@ -96,7 +96,7 @@ export default class Info { const { $player, $infoPanel } = this.art.template; if (value) { this.state = true; - $player.classList.add('artplayer-info-show'); + addClass($player, 'artplayer-info-show'); if (!$infoPanel.innerHTML) { append($infoPanel, this.creatInfo()); } @@ -105,7 +105,7 @@ export default class Info { this.art.emit('info:show'); } else { this.state = false; - $player.classList.remove('artplayer-info-show'); + removeClass($player, 'artplayer-info-show'); clearTimeout(this.timer); this.art.emit('info:hide'); } diff --git a/packages/artplayer/src/layers.js b/packages/artplayer/src/layers.js index 32bb0184e..2acc32b04 100644 --- a/packages/artplayer/src/layers.js +++ b/packages/artplayer/src/layers.js @@ -1,3 +1,4 @@ +import { addClass, removeClass } from './utils'; import component from './utils/component'; export default class Layers { @@ -22,11 +23,11 @@ export default class Layers { const { $player } = this.art.template; if (value) { this.state = true; - $player.classList.remove('artplayer-layers-hide'); + removeClass($player, 'artplayer-layers-hide'); this.art.emit('layers:show'); } else { this.state = false; - $player.classList.add('artplayer-layers-hide'); + addClass($player, 'artplayer-layers-hide'); this.art.emit('layers:hide'); } } diff --git a/packages/artplayer/src/loading.js b/packages/artplayer/src/loading.js index dd38013a0..86eab144c 100644 --- a/packages/artplayer/src/loading.js +++ b/packages/artplayer/src/loading.js @@ -1,4 +1,4 @@ -import { append } from './utils'; +import { append, addClass, removeClass } from './utils'; export default class Loading { constructor(art) { @@ -11,11 +11,11 @@ export default class Loading { const { $player } = this.art.template; if (value) { this.state = true; - $player.classList.add('artplayer-loading-show'); + addClass($player, 'artplayer-loading-show'); this.art.emit('loading:show'); } else { this.state = false; - $player.classList.remove('artplayer-loading-show'); + removeClass($player, 'artplayer-loading-show'); this.art.emit('loading:hide'); } } diff --git a/packages/artplayer/src/mask.js b/packages/artplayer/src/mask.js index 1e56510f5..9a58d0d4d 100644 --- a/packages/artplayer/src/mask.js +++ b/packages/artplayer/src/mask.js @@ -1,4 +1,4 @@ -import { append } from './utils'; +import { append, addClass, removeClass } from './utils'; export default class Mask { constructor(art) { @@ -12,11 +12,11 @@ export default class Mask { const { $player } = this.art.template; if (value) { this.state = true; - $player.classList.add('artplayer-mask-show'); + addClass($player, 'artplayer-mask-show'); this.art.emit('mask:show'); } else { this.state = false; - $player.classList.remove('artplayer-mask-show'); + removeClass($player, 'artplayer-mask-show'); this.art.emit('mask:hide'); } } diff --git a/packages/artplayer/src/notice.js b/packages/artplayer/src/notice.js index 149437eb3..bc1668f14 100644 --- a/packages/artplayer/src/notice.js +++ b/packages/artplayer/src/notice.js @@ -1,3 +1,5 @@ +import { addClass, removeClass } from './utils'; + export default class Notice { constructor(art) { this.art = art; @@ -7,7 +9,7 @@ export default class Notice { show(msg, autoHide = true, time = 1000) { const { $player, $noticeInner } = this.art.template; this.state = true; - $player.classList.add('artplayer-notice-show'); + addClass($player, 'artplayer-notice-show'); $noticeInner.innerHTML = msg instanceof Error ? msg.message.trim() : msg; clearTimeout(this.timer); if (autoHide) { @@ -21,7 +23,7 @@ export default class Notice { hide() { const { $player } = this.art.template; this.state = false; - $player.classList.remove('artplayer-notice-show'); + removeClass($player, 'artplayer-notice-show'); this.art.emit('notice:hide'); } } diff --git a/packages/artplayer/src/player/fullscreenMix.js b/packages/artplayer/src/player/fullscreenMix.js index 5dda681bb..cf585dadb 100644 --- a/packages/artplayer/src/player/fullscreenMix.js +++ b/packages/artplayer/src/player/fullscreenMix.js @@ -1,4 +1,5 @@ import screenfull from 'screenfull'; +import { addClass, removeClass } from '../utils'; export default function fullscreenMix(art, player) { const { @@ -41,7 +42,7 @@ export default function fullscreenMix(art, player) { } screenfull.request($player).then(() => { - $player.classList.add('artplayer-fullscreen'); + addClass($player, 'artplayer-fullscreen'); player.aspectRatioReset = true; art.emit('fullscreen:enabled'); }); @@ -51,7 +52,7 @@ export default function fullscreenMix(art, player) { } screenfull.exit().then(() => { - $player.classList.remove('artplayer-fullscreen'); + removeClass($player, 'artplayer-fullscreen'); player.aspectRatioReset = true; art.emit('fullscreen:exit'); }); diff --git a/packages/artplayer/src/player/fullscreenWebMix.js b/packages/artplayer/src/player/fullscreenWebMix.js index 56dfc8e43..83a0d07a3 100644 --- a/packages/artplayer/src/player/fullscreenWebMix.js +++ b/packages/artplayer/src/player/fullscreenWebMix.js @@ -1,3 +1,5 @@ +import { addClass, removeClass, hasClass } from '../utils'; + export default function fullscreenWebMix(art, player) { const { template: { $player }, @@ -5,21 +7,21 @@ export default function fullscreenWebMix(art, player) { Object.defineProperty(player, 'fullscreenWeb', { get() { - return $player.classList.contains('artplayer-web-fullscreen'); + return hasClass($player, 'artplayer-web-fullscreen'); }, set(value) { if (value) { if (player.fullscreen) { player.fullscreen = false; } - $player.classList.add('artplayer-web-fullscreen'); + addClass($player, 'artplayer-web-fullscreen'); player.aspectRatioReset = true; art.emit('fullscreenWeb:enabled'); } else { if (player.fullscreen) { player.fullscreen = false; } - $player.classList.remove('artplayer-web-fullscreen'); + removeClass($player, 'artplayer-web-fullscreen'); player.aspectRatioReset = true; art.emit('fullscreenWeb:exit'); } diff --git a/packages/artplayer/src/player/pipMix.js b/packages/artplayer/src/player/pipMix.js index 563c2a8cc..ea885e9f0 100644 --- a/packages/artplayer/src/player/pipMix.js +++ b/packages/artplayer/src/player/pipMix.js @@ -1,4 +1,4 @@ -import { append, setStyle } from '../utils'; +import { append, setStyle, addClass, removeClass, hasClass } from '../utils'; function nativePip(art, player) { const { @@ -89,7 +89,7 @@ function customPip(art, player) { proxy($pipHeader, 'mousemove', event => { if (isDroging) { - $player.classList.add('is-dragging'); + addClass($player, 'is-dragging'); setStyle($player, 'left', `${lastPlayerLeft + event.pageX - lastPageX}px`); setStyle($player, 'top', `${lastPlayerTop + event.pageY - lastPageY}px`); } @@ -97,20 +97,20 @@ function customPip(art, player) { proxy(document, 'mouseup', () => { isDroging = false; - $player.classList.remove('is-dragging'); + removeClass($player, 'is-dragging'); }); proxy($pipClose, 'click', () => { player.pip = false; isDroging = false; - $player.classList.remove('is-dragging'); + removeClass($player, 'is-dragging'); }); append($pipTitle, option.title || i18n.get('Mini player')); const property = { get() { - return $player.classList.contains('artplayer-pip'); + return hasClass($player, 'artplayer-pip'); }, set(value) { if (value) { diff --git a/packages/artplayer/src/player/switchMix.js b/packages/artplayer/src/player/switchMix.js index aeacb24a1..326cee04d 100644 --- a/packages/artplayer/src/player/switchMix.js +++ b/packages/artplayer/src/player/switchMix.js @@ -9,7 +9,7 @@ export default function switchMix(art, player) { option.url = url; player.playbackRate = false; player.aspectRatio = false; - art.once('video:canplay', () => { + art.on('ready', () => { player.currentTime = currentTime; }); if (playing) { @@ -31,7 +31,7 @@ export default function switchMix(art, player) { option.url = url; player.playbackRate = false; player.aspectRatio = false; - art.once('video:canplay', () => { + art.on('ready', () => { player.currentTime = 0; }); if (playing) { diff --git a/packages/artplayer/src/plugins/subtitleOffset.js b/packages/artplayer/src/plugins/subtitleOffset.js index d0b34d593..8e6d436a3 100644 --- a/packages/artplayer/src/plugins/subtitleOffset.js +++ b/packages/artplayer/src/plugins/subtitleOffset.js @@ -1,3 +1,5 @@ +import { query } from '../utils'; + function settingMix(art) { const { i18n, @@ -17,8 +19,8 @@ function settingMix(art) {
`, mounted: $setting => { - const $range = $setting.querySelector('.art-setting-range input'); - const $value = $setting.querySelector('.art-subtitle-value'); + const $range = query('.art-setting-range input', $setting); + const $value = query('.art-subtitle-value', $setting); proxy($range, 'change', () => { const { value } = $range; $value.innerText = value; diff --git a/packages/artplayer/src/setting/aspectRatio.js b/packages/artplayer/src/setting/aspectRatio.js index 1db40c78e..51420c8ab 100644 --- a/packages/artplayer/src/setting/aspectRatio.js +++ b/packages/artplayer/src/setting/aspectRatio.js @@ -1,10 +1,10 @@ -import { inverseClass } from '../utils'; +import { inverseClass, queryAll } from '../utils'; -export default function aspectRatio(settingOption) { +export default function aspectRatio(option) { return art => { const { i18n, player } = art; return { - ...settingOption, + ...option, html: `
${i18n.get('Aspect ratio')}
@@ -27,10 +27,10 @@ export default function aspectRatio(settingOption) { }, mounted: $setting => { art.on('aspectRatioChange', ratio => { - const $current = Array.from($setting.querySelectorAll('button')).find( - item => item.dataset.value === ratio, - ); - inverseClass($current.parentElement, 'current'); + const $current = queryAll('button', $setting).find(item => item.dataset.value === ratio); + if ($current) { + inverseClass($current.parentElement, 'current'); + } }); }, }; diff --git a/packages/artplayer/src/setting/flip.js b/packages/artplayer/src/setting/flip.js index 2c9dc7e28..386532029 100644 --- a/packages/artplayer/src/setting/flip.js +++ b/packages/artplayer/src/setting/flip.js @@ -1,10 +1,10 @@ -import { inverseClass } from '../utils'; +import { inverseClass, queryAll } from '../utils'; -export default function flip(settingOption) { +export default function flip(option) { return art => { const { i18n, player } = art; return { - ...settingOption, + ...option, html: `
${i18n.get('Flip')}
@@ -27,10 +27,10 @@ export default function flip(settingOption) { }, mounted: $setting => { art.on('flipChange', flip => { - const $current = Array.from($setting.querySelectorAll('button')).find( - item => item.dataset.value === flip, - ); - inverseClass($current.parentElement, 'current'); + const $current = queryAll('button', $setting).find(item => item.dataset.value === flip); + if ($current) { + inverseClass($current.parentElement, 'current'); + } }); }, }; diff --git a/packages/artplayer/src/setting/index.js b/packages/artplayer/src/setting/index.js index 5833497f1..f979eb8fa 100644 --- a/packages/artplayer/src/setting/index.js +++ b/packages/artplayer/src/setting/index.js @@ -1,3 +1,4 @@ +import { addClass, removeClass } from '../utils'; import component from '../utils/component'; import flip from './flip'; import aspectRatio from './aspectRatio'; @@ -64,11 +65,11 @@ export default class Setting { const { $player } = this.art.template; if (value) { this.state = true; - $player.classList.add('artplayer-setting-show'); + addClass($player, 'artplayer-setting-show'); this.art.emit('setting:show'); } else { this.state = false; - $player.classList.remove('artplayer-setting-show'); + removeClass($player, 'artplayer-setting-show'); this.art.emit('setting:hide'); } } diff --git a/packages/artplayer/src/setting/playbackRate.js b/packages/artplayer/src/setting/playbackRate.js index 017a964ff..9231632a8 100644 --- a/packages/artplayer/src/setting/playbackRate.js +++ b/packages/artplayer/src/setting/playbackRate.js @@ -1,4 +1,6 @@ -export default function playbackRate(settingOption) { +import { query } from '../utils'; + +export default function playbackRate(option) { return art => { const { i18n, @@ -6,7 +8,7 @@ export default function playbackRate(settingOption) { events: { proxy }, } = art; return { - ...settingOption, + ...option, html: `
${i18n.get('Play speed')}: 1.0x @@ -16,8 +18,8 @@ export default function playbackRate(settingOption) {
`, mounted: $setting => { - const $range = $setting.querySelector('.art-setting-range input'); - const $value = $setting.querySelector('.art-subtitle-value'); + const $range = query('.art-setting-range input', $setting); + const $value = query('.art-subtitle-value', $setting); proxy($range, 'change', () => { const { value } = $range; $value.innerText = value; diff --git a/packages/artplayer/src/subtitle.js b/packages/artplayer/src/subtitle.js index 3e1e2ff42..0d97b2260 100644 --- a/packages/artplayer/src/subtitle.js +++ b/packages/artplayer/src/subtitle.js @@ -1,4 +1,4 @@ -import { setStyles, srtToVtt, vttToBlob, getExt } from './utils'; +import { setStyles, srtToVtt, vttToBlob, getExt, addClass, removeClass } from './utils'; import assToVtt from './utils/assToVtt'; export default class Subtitle { @@ -110,11 +110,11 @@ export default class Subtitle { const { $player } = this.art.template; if (value) { this.state = true; - $player.classList.remove('artplayer-subtitle-hide'); + removeClass($player, 'artplayer-subtitle-hide'); this.art.emit('subtitle:show'); } else { this.state = false; - $player.classList.add('artplayer-subtitle-hide'); + addClass($player, 'artplayer-subtitle-hide'); this.art.emit('subtitle:hide'); } } diff --git a/packages/artplayer/src/template.js b/packages/artplayer/src/template.js index 6b81e77f3..f44a666a9 100644 --- a/packages/artplayer/src/template.js +++ b/packages/artplayer/src/template.js @@ -1,4 +1,4 @@ -import { errorHandle } from './utils'; +import { errorHandle, query, addClass } from './utils'; export default class Template { constructor(art) { @@ -6,7 +6,7 @@ export default class Template { if (art.option.container instanceof Element) { this.$container = art.option.container; } else { - this.$container = document.querySelector(art.option.container); + this.$container = query(art.option.container); errorHandle(this.$container, `No container element found by ${art.option.container}`); } @@ -25,6 +25,8 @@ export default class Template { } else { this.initMobile(); } + + this.query = className => query(className, this.$container); } initDesktop() { @@ -62,30 +64,30 @@ export default class Template {
`; - this.$player = this.$container.querySelector('.artplayer-video-player'); - this.$video = this.$container.querySelector('.artplayer-video'); - this.$subtitle = this.$container.querySelector('.artplayer-subtitle'); - this.$danmuku = this.$container.querySelector('.artplayer-danmuku'); - this.$bottom = this.$container.querySelector('.artplayer-bottom'); - this.$progress = this.$container.querySelector('.artplayer-progress'); - this.$controls = this.$container.querySelector('.artplayer-controls'); - this.$controlsLeft = this.$container.querySelector('.artplayer-controls-left'); - this.$controlsRight = this.$container.querySelector('.artplayer-controls-right'); - this.$layers = this.$container.querySelector('.artplayer-layers'); - this.$loading = this.$container.querySelector('.artplayer-loading'); - this.$notice = this.$container.querySelector('.artplayer-notice'); - this.$noticeInner = this.$container.querySelector('.artplayer-notice-inner'); - this.$mask = this.$container.querySelector('.artplayer-mask'); - this.$setting = this.$container.querySelector('.artplayer-setting'); - this.$settingInner = this.$container.querySelector('.artplayer-setting-inner'); - this.$settingBody = this.$container.querySelector('.artplayer-setting-body'); - this.$info = this.$container.querySelector('.artplayer-info'); - this.$infoPanel = this.$container.querySelector('.artplayer-info-panel'); - this.$infoClose = this.$container.querySelector('.artplayer-info-close'); - this.$pipHeader = this.$container.querySelector('.artplayer-pip-header'); - this.$pipTitle = this.$container.querySelector('.artplayer-pip-title'); - this.$pipClose = this.$container.querySelector('.artplayer-pip-close'); - this.$contextmenu = this.$container.querySelector('.artplayer-contextmenu'); + this.$player = this.query('.artplayer-video-player'); + this.$video = this.query('.artplayer-video'); + this.$subtitle = this.query('.artplayer-subtitle'); + this.$danmuku = this.query('.artplayer-danmuku'); + this.$bottom = this.query('.artplayer-bottom'); + this.$progress = this.query('.artplayer-progress'); + this.$controls = this.query('.artplayer-controls'); + this.$controlsLeft = this.query('.artplayer-controls-left'); + this.$controlsRight = this.query('.artplayer-controls-right'); + this.$layers = this.query('.artplayer-layers'); + this.$loading = this.query('.artplayer-loading'); + this.$notice = this.query('.artplayer-notice'); + this.$noticeInner = this.query('.artplayer-notice-inner'); + this.$mask = this.query('.artplayer-mask'); + this.$setting = this.query('.artplayer-setting'); + this.$settingInner = this.query('.artplayer-setting-inner'); + this.$settingBody = this.query('.artplayer-setting-body'); + this.$info = this.query('.artplayer-info'); + this.$infoPanel = this.query('.artplayer-info-panel'); + this.$infoClose = this.query('.artplayer-info-close'); + this.$pipHeader = this.query('.artplayer-pip-header'); + this.$pipTitle = this.query('.artplayer-pip-title'); + this.$pipClose = this.query('.artplayer-pip-close'); + this.$contextmenu = this.query('.artplayer-contextmenu'); } initMobile() { @@ -94,15 +96,15 @@ export default class Template {
`; - this.$player = this.$container.querySelector('.artplayer-video-player'); - this.$video = this.$container.querySelector('.artplayer-video'); + this.$player = this.query('.artplayer-video-player'); + this.$video = this.query('.artplayer-video'); } destroy(removeHtml) { if (removeHtml) { this.$container.innerHTML = ''; } else { - this.$player.classList.add('artplayer-destroy'); + addClass(this.$player, 'artplayer-destroy'); } } } diff --git a/packages/artplayer/src/utils/analysis.js b/packages/artplayer/src/utils/analysis.js deleted file mode 100644 index c1d85c348..000000000 --- a/packages/artplayer/src/utils/analysis.js +++ /dev/null @@ -1,21 +0,0 @@ -export default function analysis() { - const w = window; - const n = w.navigator; - const d = w.document; - - if (!w || w.HELP_IMPROVE_ARTPLAYER === false) return; - if (n && n.doNotTrack && n.doNotTrack === '1') return; - if (n && n.msDoNotTrack && n.msDoNotTrack === '1') return; - if (w.doNotTrack && w.doNotTrack === '1') return; - if (Math.random() > 0.1) return; - - const url = new URL('https://hm.baidu.com/hm.gif'); - url.searchParams.append('v', '1.2.61'); - url.searchParams.append('tt', d.title); - url.searchParams.append('su', d.referrer); - url.searchParams.append('rnd', String(Date.now()).slice(-10)); - url.searchParams.append('si', 'b6c9b8bafbf5fe7225160101dafbbc7d'); - url.searchParams.append('ds', `${w.screen.availWidth}x${w.screen.availHeight}`); - url.searchParams.append('ln', (n.language || n.userLanguage || '').toLowerCase()); - new Image().src = url.href; -} diff --git a/packages/artplayer/src/utils/index.js b/packages/artplayer/src/utils/index.js index 6b63558dc..e667be127 100644 --- a/packages/artplayer/src/utils/index.js +++ b/packages/artplayer/src/utils/index.js @@ -11,6 +11,26 @@ export function hasOwnProperty(obj, name) { return Object.prototype.hasOwnProperty.call(obj, name); } +export function query(selector, parent = document) { + return parent.querySelector(selector); +} + +export function queryAll(selector, parent = document) { + return Array.from(parent.querySelectorAll(selector)); +} + +export function addClass(target, className) { + return target.classList.add(className); +} + +export function removeClass(target, className) { + return target.classList.remove(className); +} + +export function hasClass(target, className) { + return target.classList.contains(className); +} + export function clamp(num, a, b) { return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b)); } @@ -139,8 +159,8 @@ export function sublings(target) { } export function inverseClass(target, className) { - sublings(target).forEach(item => item.classList.remove(className)); - target.classList.add(className); + sublings(target).forEach(item => removeClass(item, className)); + addClass(target, className); } export function tooltip(target, msg, pos = 'up') {