From 7a2a40e8a9192d5749380c79ba1a19dba1e91a4f Mon Sep 17 00:00:00 2001 From: DIYgod Date: Mon, 25 Dec 2017 17:13:57 +0800 Subject: [PATCH] Module: controller, comment, setting --- dist/DPlayer.min.js | 2 +- dist/DPlayer.min.js.map | 2 +- src/DPlayer.js | 286 +++------------------------------------- src/comment.js | 93 +++++++++++++ src/controller.js | 56 ++++++++ src/setting.js | 133 +++++++++++++++++++ src/template.js | 2 +- 7 files changed, 304 insertions(+), 270 deletions(-) create mode 100644 src/comment.js create mode 100644 src/controller.js create mode 100644 src/setting.js diff --git a/dist/DPlayer.min.js b/dist/DPlayer.min.js index 02936c9..8ce2493 100644 --- a/dist/DPlayer.min.js +++ b/dist/DPlayer.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("DPlayer",[],t):"object"==typeof exports?exports.DPlayer=t():e.DPlayer=t()}("undefined"!=typeof self?self:this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var a=n[i]={i:i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="/",t(t.s=1)}([function(e,t,n){"use strict";e.exports={secondToTime:function(e){var t=function(e){return e<10?"0"+e:""+e},n=parseInt(e/60),i=parseInt(e-60*n);return t(n)+":"+t(i)},getElementViewLeft:function(e){var t=e.offsetLeft,n=e.offsetParent,i=document.body.scrollLeft+document.documentElement.scrollLeft;if(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement)for(;null!==n&&n!==e;)t+=n.offsetLeft,n=n.offsetParent;else for(;null!==n;)t+=n.offsetLeft,n=n.offsetParent;return t-i},getScrollPosition:function(){return{left:window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0,top:window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0}},setScrollPosition:function(e){var t=e.left,n=void 0===t?0:t,i=e.top,a=void 0===i?0:i;this.isFirefox?(document.documentElement.scrollLeft=n,document.documentElement.scrollTop=a):window.scrollTo(n,a)},isMobile:/mobile/i.test(window.navigator.userAgent),isFirefox:/firefox/i.test(window.navigator.userAgent),isChrome:/chrome/i.test(window.navigator.userAgent),storage:{set:function(e,t){localStorage.setItem(e,t)},get:function(e){return localStorage.getItem(e)}}}},function(e,t,n){"use strict";console.log("\n %c DPlayer 1.17.2 49535a9 %c http://dplayer.js.org \n\n","color: #fadfa3; background: #030307; padding:5px 0;","background: #fadfa3; padding:5px 0;"),e.exports=n(2)},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var s=function(){function e(e,t){for(var n=0;n=.95?n.template.volumeIcon.innerHTML=n.icons.get("volume-up"):n.volume()>0?n.template.volumeIcon.innerHTML=n.icons.get("volume-down"):n.template.volumeIcon.innerHTML=n.icons.get("volume-off")};var p=function(e){var t=e||window.event,i=(t.clientX-l.default.getElementViewLeft(n.template.volumeBarWrap)-5.5)/35;n.volume(i)},m=function e(){document.removeEventListener("mouseup",e),document.removeEventListener("mousemove",p),n.template.volumeButton.classList.remove("dplayer-volume-active")};this.template.volumeBarWrapWrap.addEventListener("click",function(e){var t=e||window.event,i=(t.clientX-l.default.getElementViewLeft(n.template.volumeBarWrap)-5.5)/35;n.volume(i)}),this.template.volumeBarWrapWrap.addEventListener("mousedown",function(){document.addEventListener("mousemove",p),document.addEventListener("mouseup",m),n.template.volumeButton.classList.add("dplayer-volume-active")}),this.template.volumeIcon.addEventListener("click",function(){n.video.muted?(n.video.muted=!1,n.switchVolumeIcon(),n.bar.set("volume",n.volume(),"width")):(n.video.muted=!0,n.template.volumeIcon.innerHTML=n.icons.get("volume-off"),n.bar.set("volume",0,"width"))}),this.hideTime=0;var v=function(){n.container.classList.remove("dplayer-hide-controller"),clearTimeout(n.hideTime),n.hideTime=setTimeout(function(){n.video.played.length&&!n.disableHideController&&(n.container.classList.add("dplayer-hide-controller"),g(),z())},2e3)};o.isMobile||(this.container.addEventListener("mousemove",v),this.container.addEventListener("click",v));var g=function(){n.template.settingBox.classList.contains("dplayer-setting-box-open")&&(n.template.settingBox.classList.remove("dplayer-setting-box-open"),n.template.mask.classList.remove("dplayer-mask-show"),setTimeout(function(){n.template.settingBox.classList.remove("dplayer-setting-box-narrow"),n.template.settingBox.classList.remove("dplayer-setting-box-speed")},300)),n.disableHideController=!1},b=function(){n.disableHideController=!0,n.template.settingBox.classList.add("dplayer-setting-box-open"),n.template.mask.classList.add("dplayer-mask-show")};this.template.mask.addEventListener("click",function(){g()}),this.template.settingButton.addEventListener("click",function(){b()}),this.loop=this.options.loop;var k=this.user.get("danmaku");k||this.danmaku&&this.danmaku.hide();var x=this.user.get("unlimited");if(this.template.loopToggle.checked=this.loop,this.template.loop.addEventListener("click",function(){n.template.loopToggle.checked=!n.template.loopToggle.checked,n.template.loopToggle.checked?n.loop=!0:n.loop=!1,g()}),this.template.showDanmakuToggle.checked=k,this.template.showDanmaku.addEventListener("click",function(){n.template.showDanmakuToggle.checked=!n.template.showDanmakuToggle.checked,n.template.showDanmakuToggle.checked?(k=!0,n.paused||n.danmaku.show()):(k=!1,n.danmaku.hide()),n.user.set("danmaku",k?1:0),g()}),this.template.unlimitDanmakuToggle.checked=x,this.template.unlimitDanmaku.addEventListener("click",function(){n.template.unlimitDanmakuToggle.checked=!n.template.unlimitDanmakuToggle.checked,n.template.unlimitDanmakuToggle.checked?(x=!0,n.danmaku.unlimit(!0)):(x=!1,n.danmaku.unlimit(!1)),n.user.set("unlimited",x?1:0),g()}),this.template.speed.addEventListener("click",function(){n.template.settingBox.classList.add("dplayer-setting-box-narrow"),n.template.settingBox.classList.add("dplayer-setting-box-speed");for(var e=0;e=i.width?(n.template.menu.style.right=i.width-a+"px",n.template.menu.style.left="initial"):(n.template.menu.style.left=t.clientX-n.container.getBoundingClientRect().left+"px",n.template.menu.style.right="initial"),s+n.template.menu.offsetHeight>=i.height?(n.template.menu.style.bottom=i.height-s+"px",n.template.menu.style.top="initial"):(n.template.menu.style.top=t.clientY-n.container.getBoundingClientRect().top+"px",n.template.menu.style.bottom="initial"),n.template.mask.classList.add("dplayer-mask-show"),n.events.trigger("contextmenu_show"),n.template.mask.addEventListener("click",function(){n.template.mask.classList.remove("dplayer-mask-show"),n.template.menu.classList.remove("dplayer-menu-show"),n.events.trigger("contextmenu_hide")})}),this.options.video.quality&&this.template.qualityList.addEventListener("click",function(e){e.target.classList.contains("dplayer-quality-item")&&n.switchQuality(e.target.dataset.index)}),this.options.screenshot&&this.template.camareButton.addEventListener("click",function(){var e=document.createElement("canvas");e.width=n.video.videoWidth,e.height=n.video.videoHeight,e.getContext("2d").drawImage(n.video,0,0,e.width,e.height);var t=e.toDataURL();n.template.camareButton.href=t,n.template.camareButton.download="DPlayer.png",n.events.trigger("screenshot",t)}),this.options.subtitle&&(this.events.on("subtitle_show",function(){n.template.subtitleButton.dataset.balloon=n.tran("Hide subtitle"),n.template.subtitleButtonInner.style.opacity="",n.user.set("subtitle",1)}),this.events.on("subtitle_hide",function(){n.template.subtitleButton.dataset.balloon=n.tran("Show subtitle"),n.template.subtitleButtonInner.style.opacity="0.4",n.user.set("subtitle",0)}),this.template.subtitleButton.addEventListener("click",function(){n.subtitle.toggle()})),this.initVideo(this.video,this.quality&&this.quality.type||this.options.video.type),P++,D.push(this)}return s(e,[{key:"seek",value:function(e){e=Math.max(e,0),this.video.duration&&(e=Math.min(e,this.video.duration)),this.video.currentTimee&&this.notice(this.tran("REW")+" "+(this.video.currentTime-e).toFixed(0)+" "+this.tran("s")),this.video.currentTime=e,this.danmaku&&this.danmaku.seek(),this.bar.set("played",e/this.video.duration,"width")}},{key:"play",value:function(){if(this.paused=!1,this.video.paused&&this.bezel.switch(this.icons.get("play")),this.template.playButton.innerHTML=this.icons.get("pause"),this.video.play(),this.time.enable(),this.container.classList.add("dplayer-playing"),this.danmaku&&this.danmaku.play(),this.options.mutex)for(var e=0;ee.offsetWidth)){var c=n.video.duration*(r/e.offsetWidth);switch(t.style.left=r-20+"px",a.type){case"mouseenter":n.thumbnails&&n.thumbnails.show();break;case"mousemove":n.thumbnails&&n.thumbnails.move(r),t.innerText=l.default.secondToTime(c),n.timeTipsDisplay(!0,t);break;case"mouseleave":n.thumbnails&&n.thumbnails.hide(),n.timeTipsDisplay(!1,t)}}}}}},{key:"timeTipsDisplay",value:function(e,t){if(e){if(this.isTimeTipsShow)return;t.classList.remove("hidden"),this.isTimeTipsShow=!0}else{if(!this.isTimeTipsShow)return;t.classList.add("hidden"),this.isTimeTipsShow=!1}}},{key:"initThumbnails",value:function(){var e=this;this.thumbnails=new b.default(this.template.barPreview,this.template.barWrap.offsetWidth,this.options.video.thumbnails,this.events),this.on("loadedmetadata",function(){e.thumbnails.resize(160,90)})}},{key:"notice",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2e3,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.8;this.template.notice.innerHTML=e,this.template.notice.style.opacity=i,this.noticeTime&&clearTimeout(this.noticeTime),this.events.trigger("notice_show",e),this.noticeTime=setTimeout(function(){t.template.notice.style.opacity=0,t.events.trigger("notice_hide")},n)}},{key:"resize",value:function(){this.danmaku&&this.danmaku.resize(),this.events.trigger("resize")}},{key:"destroy",value:function(){D.splice(D.indexOf(this),1),this.pause(),clearTimeout(this.hideTime),this.time.destroy(),this.video.src="",this.container.innerHTML="",this.events.trigger("destroy");for(var e in this)this.hasOwnProperty(e)&&"paused"!==e&&delete this[e]}}]),e}();e.exports=I},function(e,t){},function(e,t,n){"use strict";var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=n(5);e.exports=function(e){/mobile/i.test(window.navigator.userAgent)&&(e.autoplay=!1);var t={container:e.element||document.getElementsByClassName("dplayer")[0],live:!1,autoplay:!1,theme:"#b7daff",loop:!1,lang:(navigator.language||navigator.browserLanguage).toLowerCase(),screenshot:!1,hotkey:!0,preload:"auto",volume:.7,apiBackend:a,video:{},icons:{play:["0 0 16 32","M15.552 15.168q0.448 0.32 0.448 0.832 0 0.448-0.448 0.768l-13.696 8.512q-0.768 0.512-1.312 0.192t-0.544-1.28v-16.448q0-0.96 0.544-1.28t1.312 0.192z"],pause:["0 0 17 32","M14.080 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048zM2.88 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048z"],"volume-up":["0 0 21 32","M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528zM25.152 16q0 2.72-1.536 5.056t-4 3.36q-0.256 0.096-0.448 0.096-0.48 0-0.832-0.352t-0.32-0.8q0-0.704 0.672-1.056 1.024-0.512 1.376-0.8 1.312-0.96 2.048-2.4t0.736-3.104-0.736-3.104-2.048-2.4q-0.352-0.288-1.376-0.8-0.672-0.352-0.672-1.056 0-0.448 0.32-0.8t0.8-0.352q0.224 0 0.48 0.096 2.496 1.056 4 3.36t1.536 5.056z"],"volume-down":["0 0 21 32","M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528z"],"volume-off":["0 0 21 32","M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8z"],loop:["0 0 32 32","M1.882 16.941c0 4.152 3.221 7.529 7.177 7.529v1.882c-4.996 0-9.060-4.222-9.060-9.412s4.064-9.412 9.060-9.412h7.96l-3.098-3.098 1.331-1.331 5.372 5.37-5.37 5.372-1.333-1.333 3.1-3.098h-7.962c-3.957 0-7.177 3.377-7.177 7.529zM22.94 7.529v1.882c3.957 0 7.177 3.377 7.177 7.529s-3.221 7.529-7.177 7.529h-7.962l3.098-3.098-1.331-1.331-5.37 5.37 5.372 5.372 1.331-1.331-3.1-3.1h7.96c4.998 0 9.062-4.222 9.062-9.412s-4.064-9.412-9.060-9.412z"],full:["0 0 32 33","M6.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v4h4c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333zM30.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h4v-4c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM30.667 12c-0.8 0-1.333-0.533-1.333-1.333v-4h-4c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM1.333 12c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333h-4v4c0 0.8-0.533 1.333-1.333 1.333z"],"full-in":["0 0 32 33","M24.965 24.38h-18.132c-1.366 0-2.478-1.113-2.478-2.478v-11.806c0-1.364 1.111-2.478 2.478-2.478h18.132c1.366 0 2.478 1.113 2.478 2.478v11.806c0 1.364-1.11 2.478-2.478 2.478zM6.833 10.097v11.806h18.134l-0.002-11.806h-18.132zM2.478 28.928h5.952c0.684 0 1.238-0.554 1.238-1.239 0-0.684-0.554-1.238-1.238-1.238h-5.952v-5.802c0-0.684-0.554-1.239-1.238-1.239s-1.239 0.556-1.239 1.239v5.802c0 1.365 1.111 2.478 2.478 2.478zM30.761 19.412c-0.684 0-1.238 0.554-1.238 1.238v5.801h-5.951c-0.686 0-1.239 0.554-1.239 1.238 0 0.686 0.554 1.239 1.239 1.239h5.951c1.366 0 2.478-1.111 2.478-2.478v-5.801c0-0.683-0.554-1.238-1.239-1.238zM0 5.55v5.802c0 0.683 0.554 1.238 1.238 1.238s1.238-0.555 1.238-1.238v-5.802h5.952c0.684 0 1.238-0.554 1.238-1.238s-0.554-1.238-1.238-1.238h-5.951c-1.366-0.001-2.478 1.111-2.478 2.476zM32 11.35v-5.801c0-1.365-1.11-2.478-2.478-2.478h-5.951c-0.686 0-1.239 0.554-1.239 1.238s0.554 1.238 1.239 1.238h5.951v5.801c0 0.683 0.554 1.237 1.238 1.237 0.686 0.002 1.239-0.553 1.239-1.236z"],setting:["0 0 32 28","M28.633 17.104c0.035 0.21 0.026 0.463-0.026 0.76s-0.14 0.598-0.262 0.904c-0.122 0.306-0.271 0.581-0.445 0.825s-0.367 0.419-0.576 0.524c-0.209 0.105-0.393 0.157-0.55 0.157s-0.332-0.035-0.524-0.105c-0.175-0.052-0.393-0.1-0.655-0.144s-0.528-0.052-0.799-0.026c-0.271 0.026-0.541 0.083-0.812 0.17s-0.502 0.236-0.694 0.445c-0.419 0.437-0.664 0.934-0.734 1.493s0.009 1.092 0.236 1.598c0.175 0.349 0.148 0.699-0.079 1.048-0.105 0.14-0.271 0.284-0.498 0.432s-0.476 0.284-0.747 0.406-0.555 0.218-0.851 0.288c-0.297 0.070-0.559 0.105-0.786 0.105-0.157 0-0.306-0.061-0.445-0.183s-0.236-0.253-0.288-0.393h-0.026c-0.192-0.541-0.52-1.009-0.982-1.402s-1-0.589-1.611-0.589c-0.594 0-1.131 0.197-1.611 0.589s-0.816 0.851-1.009 1.375c-0.087 0.21-0.218 0.362-0.393 0.458s-0.367 0.144-0.576 0.144c-0.244 0-0.52-0.044-0.825-0.131s-0.611-0.197-0.917-0.327c-0.306-0.131-0.581-0.284-0.825-0.458s-0.428-0.349-0.55-0.524c-0.087-0.122-0.135-0.266-0.144-0.432s0.057-0.397 0.197-0.694c0.192-0.402 0.266-0.86 0.223-1.375s-0.266-0.991-0.668-1.428c-0.244-0.262-0.541-0.432-0.891-0.511s-0.681-0.109-0.995-0.092c-0.367 0.017-0.742 0.087-1.127 0.21-0.244 0.070-0.489 0.052-0.734-0.052-0.192-0.070-0.371-0.231-0.537-0.485s-0.314-0.533-0.445-0.838c-0.131-0.306-0.231-0.62-0.301-0.943s-0.087-0.59-0.052-0.799c0.052-0.384 0.227-0.629 0.524-0.734 0.524-0.21 0.995-0.555 1.415-1.035s0.629-1.017 0.629-1.611c0-0.611-0.21-1.144-0.629-1.598s-0.891-0.786-1.415-0.996c-0.157-0.052-0.288-0.179-0.393-0.38s-0.157-0.406-0.157-0.616c0-0.227 0.035-0.48 0.105-0.76s0.162-0.55 0.275-0.812 0.244-0.502 0.393-0.72c0.148-0.218 0.31-0.38 0.485-0.485 0.14-0.087 0.275-0.122 0.406-0.105s0.275 0.052 0.432 0.105c0.524 0.21 1.070 0.275 1.637 0.197s1.070-0.327 1.506-0.747c0.21-0.209 0.362-0.467 0.458-0.773s0.157-0.607 0.183-0.904c0.026-0.297 0.026-0.568 0-0.812s-0.048-0.419-0.065-0.524c-0.035-0.105-0.066-0.227-0.092-0.367s-0.013-0.262 0.039-0.367c0.105-0.244 0.293-0.458 0.563-0.642s0.563-0.336 0.878-0.458c0.314-0.122 0.62-0.214 0.917-0.275s0.533-0.092 0.707-0.092c0.227 0 0.406 0.074 0.537 0.223s0.223 0.301 0.275 0.458c0.192 0.471 0.507 0.886 0.943 1.244s0.952 0.537 1.546 0.537c0.611 0 1.153-0.17 1.624-0.511s0.803-0.773 0.996-1.297c0.070-0.14 0.179-0.284 0.327-0.432s0.301-0.223 0.458-0.223c0.244 0 0.511 0.035 0.799 0.105s0.572 0.166 0.851 0.288c0.279 0.122 0.537 0.279 0.773 0.472s0.423 0.402 0.563 0.629c0.087 0.14 0.113 0.293 0.079 0.458s-0.070 0.284-0.105 0.354c-0.227 0.506-0.297 1.039-0.21 1.598s0.341 1.048 0.76 1.467c0.419 0.419 0.934 0.651 1.546 0.694s1.179-0.057 1.703-0.301c0.14-0.087 0.31-0.122 0.511-0.105s0.371 0.096 0.511 0.236c0.262 0.244 0.493 0.616 0.694 1.113s0.336 1 0.406 1.506c0.035 0.297-0.013 0.528-0.144 0.694s-0.266 0.275-0.406 0.327c-0.542 0.192-1.004 0.528-1.388 1.009s-0.576 1.026-0.576 1.637c0 0.594 0.162 1.113 0.485 1.559s0.747 0.764 1.27 0.956c0.122 0.070 0.227 0.14 0.314 0.21 0.192 0.157 0.323 0.358 0.393 0.602v0zM16.451 19.462c0.786 0 1.528-0.149 2.227-0.445s1.305-0.707 1.821-1.231c0.515-0.524 0.921-1.131 1.218-1.821s0.445-1.428 0.445-2.214c0-0.786-0.148-1.524-0.445-2.214s-0.703-1.292-1.218-1.808c-0.515-0.515-1.122-0.921-1.821-1.218s-1.441-0.445-2.227-0.445c-0.786 0-1.524 0.148-2.214 0.445s-1.292 0.703-1.808 1.218c-0.515 0.515-0.921 1.118-1.218 1.808s-0.445 1.428-0.445 2.214c0 0.786 0.149 1.524 0.445 2.214s0.703 1.297 1.218 1.821c0.515 0.524 1.118 0.934 1.808 1.231s1.428 0.445 2.214 0.445v0z"],right:["0 0 32 32","M22 16l-10.105-10.6-1.895 1.987 8.211 8.613-8.211 8.612 1.895 1.988 8.211-8.613z"],comment:["0 0 32 32","M27.128 0.38h-22.553c-2.336 0-4.229 1.825-4.229 4.076v16.273c0 2.251 1.893 4.076 4.229 4.076h4.229v-2.685h8.403l-8.784 8.072 1.566 1.44 7.429-6.827h9.71c2.335 0 4.229-1.825 4.229-4.076v-16.273c0-2.252-1.894-4.076-4.229-4.076zM28.538 19.403c0 1.5-1.262 2.717-2.819 2.717h-8.36l-0.076-0.070-0.076 0.070h-11.223c-1.557 0-2.819-1.217-2.819-2.717v-13.589c0-1.501 1.262-2.718 2.819-2.718h19.734c1.557 0 2.819-0.141 2.819 1.359v14.947zM9.206 10.557c-1.222 0-2.215 0.911-2.215 2.036s0.992 2.035 2.215 2.035c1.224 0 2.216-0.911 2.216-2.035s-0.992-2.036-2.216-2.036zM22.496 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.224 0 2.215-0.911 2.215-2.035s-0.991-2.036-2.215-2.036zM15.852 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.222 0 2.215-0.911 2.215-2.035s-0.992-2.036-2.215-2.036z"],"comment-off":["0 0 32 32","M27.090 0.131h-22.731c-2.354 0-4.262 1.839-4.262 4.109v16.401c0 2.269 1.908 4.109 4.262 4.109h4.262v-2.706h8.469l-8.853 8.135 1.579 1.451 7.487-6.88h9.787c2.353 0 4.262-1.84 4.262-4.109v-16.401c0-2.27-1.909-4.109-4.262-4.109v0zM28.511 19.304c0 1.512-1.272 2.738-2.841 2.738h-8.425l-0.076-0.070-0.076 0.070h-11.311c-1.569 0-2.841-1.226-2.841-2.738v-13.696c0-1.513 1.272-2.739 2.841-2.739h19.889c1.569 0 2.841-0.142 2.841 1.37v15.064z"],send:["0 0 32 32","M13.725 30l3.9-5.325-3.9-1.125v6.45zM0 17.5l11.050 3.35 13.6-11.55-10.55 12.425 11.8 3.65 6.1-23.375-32 15.5z"],pallette:["0 0 32 32","M19.357 2.88c1.749 0 3.366 0.316 4.851 0.946 1.485 0.632 2.768 1.474 3.845 2.533s1.922 2.279 2.532 3.661c0.611 1.383 0.915 2.829 0.915 4.334 0 1.425-0.304 2.847-0.915 4.271-0.611 1.425-1.587 2.767-2.928 4.028-0.855 0.813-1.811 1.607-2.869 2.38s-2.136 1.465-3.233 2.075c-1.099 0.61-2.198 1.098-3.296 1.465-1.098 0.366-2.115 0.549-3.051 0.549-1.343 0-2.441-0.438-3.296-1.311-0.854-0.876-1.281-2.41-1.281-4.608 0-0.366 0.020-0.773 0.060-1.221s0.062-0.895 0.062-1.343c0-0.773-0.183-1.353-0.55-1.738-0.366-0.387-0.793-0.58-1.281-0.58-0.652 0-1.21 0.295-1.678 0.886s-0.926 1.23-1.373 1.921c-0.447 0.693-0.905 1.334-1.372 1.923s-1.028 0.886-1.679 0.886c-0.529 0-1.048-0.427-1.556-1.282s-0.763-2.259-0.763-4.212c0-2.197 0.529-4.241 1.587-6.133s2.462-3.529 4.21-4.912c1.75-1.383 3.762-2.471 6.041-3.264 2.277-0.796 4.617-1.212 7.018-1.253zM7.334 15.817c0.569 0 1.047-0.204 1.434-0.611s0.579-0.875 0.579-1.404c0-0.569-0.193-1.047-0.579-1.434s-0.864-0.579-1.434-0.579c-0.529 0-0.987 0.193-1.373 0.579s-0.58 0.864-0.58 1.434c0 0.53 0.194 0.998 0.58 1.404 0.388 0.407 0.845 0.611 1.373 0.611zM12.216 11.79c0.691 0 1.292-0.254 1.8-0.763s0.762-1.107 0.762-1.8c0-0.732-0.255-1.343-0.762-1.831-0.509-0.489-1.109-0.732-1.8-0.732-0.732 0-1.342 0.244-1.831 0.732-0.488 0.488-0.732 1.098-0.732 1.831 0 0.693 0.244 1.292 0.732 1.8s1.099 0.763 1.831 0.763zM16.366 25.947c0.692 0 1.282-0.214 1.77-0.64s0.732-0.987 0.732-1.678-0.244-1.261-0.732-1.709c-0.489-0.448-1.078-0.671-1.77-0.671-0.65 0-1.21 0.223-1.678 0.671s-0.702 1.018-0.702 1.709c0 0.692 0.234 1.25 0.702 1.678s1.027 0.64 1.678 0.64zM19.113 9.592c0.651 0 1.129-0.203 1.433-0.611 0.305-0.406 0.459-0.874 0.459-1.404 0-0.488-0.154-0.947-0.459-1.373-0.304-0.427-0.782-0.641-1.433-0.641-0.529 0-1.008 0.193-1.434 0.58s-0.64 0.865-0.64 1.434c0 0.571 0.213 1.049 0.64 1.434 0.427 0.389 0.905 0.581 1.434 0.581zM24.848 12.826c0.57 0 1.067-0.213 1.495-0.64 0.427-0.427 0.64-0.947 0.64-1.556 0-0.57-0.214-1.068-0.64-1.495-0.428-0.427-0.927-0.64-1.495-0.64-0.611 0-1.129 0.213-1.555 0.64-0.428 0.427-0.642 0.926-0.642 1.495 0 0.611 0.213 1.129 0.642 1.556s0.947 0.64 1.555 0.64z"],camera:["0 0 32 32","M16 23c-3.309 0-6-2.691-6-6s2.691-6 6-6 6 2.691 6 6-2.691 6-6 6zM16 13c-2.206 0-4 1.794-4 4s1.794 4 4 4c2.206 0 4-1.794 4-4s-1.794-4-4-4zM27 28h-22c-1.654 0-3-1.346-3-3v-16c0-1.654 1.346-3 3-3h3c0.552 0 1 0.448 1 1s-0.448 1-1 1h-3c-0.551 0-1 0.449-1 1v16c0 0.552 0.449 1 1 1h22c0.552 0 1-0.448 1-1v-16c0-0.551-0.448-1-1-1h-11c-0.552 0-1-0.448-1-1s0.448-1 1-1h11c1.654 0 3 1.346 3 3v16c0 1.654-1.346 3-3 3zM24 10.5c0 0.828 0.672 1.5 1.5 1.5s1.5-0.672 1.5-1.5c0-0.828-0.672-1.5-1.5-1.5s-1.5 0.672-1.5 1.5zM15 4c0 0.552-0.448 1-1 1h-4c-0.552 0-1-0.448-1-1v0c0-0.552 0.448-1 1-1h4c0.552 0 1 0.448 1 1v0z"],subtitle:["0 0 32 32","M26.667 5.333h-21.333c-0 0-0.001 0-0.001 0-1.472 0-2.666 1.194-2.666 2.666 0 0 0 0.001 0 0.001v-0 16c0 0 0 0.001 0 0.001 0 1.472 1.194 2.666 2.666 2.666 0 0 0.001 0 0.001 0h21.333c0 0 0.001 0 0.001 0 1.472 0 2.666-1.194 2.666-2.666 0-0 0-0.001 0-0.001v0-16c0-0 0-0.001 0-0.001 0-1.472-1.194-2.666-2.666-2.666-0 0-0.001 0-0.001 0h0zM5.333 16h5.333v2.667h-5.333v-2.667zM18.667 24h-13.333v-2.667h13.333v2.667zM26.667 24h-5.333v-2.667h5.333v2.667zM26.667 18.667h-13.333v-2.667h13.333v2.667z"]},iconsColor:"#ffffff",contextmenu:[],mutex:!0};for(var n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n]);return e.video&&!e.video.type&&(e.video.type="auto"),"object"===i(e.danmaku)&&e.danmaku&&!e.danmaku.user&&(e.danmaku.user="DIYgod"),e.subtitle&&(!e.subtitle.type&&(e.subtitle.type="webvtt"),!e.subtitle.fontSize&&(e.subtitle.fontSize="20px"),!e.subtitle.bottom&&(e.subtitle.bottom="40px"),!e.subtitle.color&&(e.subtitle.color="#fff")),e.video.quality&&(e.video.url=[e.video.quality[e.video.defaultQuality].url]),e.lang&&(e.lang=e.lang.toLowerCase()),e.icons&&(e.icons=Object.assign({},t.icons,e.icons)),e.contextmenu=e.contextmenu.concat([{text:"About author",link:"https://diygod.me"},{text:"About DPlayer",link:"https://github.com/MoePlayer/DPlayer"},{text:"DPlayer feedback",link:"https://github.com/DIYgod/DPlayer/issues"},{text:"DPlayer 1.17.2 49535a9",link:"https://github.com/MoePlayer/DPlayer/releases"}]),e}},function(e,t,n){"use strict";var i=function(e,t,n,i,a){var s=new XMLHttpRequest;s.onreadystatechange=function(){if(4===s.readyState){if(s.status>=200&&s.status<300||304===s.status){var e=JSON.parse(s.responseText);return 1!==e.code?i(s,e):n(s,e)}a(s)}},s.open(null!==t?"POST":"GET",e,!0),s.send(null!==t?JSON.stringify(t):null)};e.exports={send:function(e,t,n){i(e,t,function(e,t){console.log("Post danmaku: ",t),n&&n()},function(e,t){alert(t.msg)},function(e){console.log("Request was unsuccessful: "+e.status)})},read:function(e,t){i(e,null,function(e,n){t(null,n.danmaku)},function(e,n){t({status:e.status,response:n})},function(e){t({status:e.status,response:null})})}}},function(e,t,n){"use strict";e.exports=function(e){var t=this;this.lang=e,this.tran=function(e){return i[t.lang]&&i[t.lang][e]?i[t.lang][e]:e}};var i={"zh-cn":{"Danmaku is loading":"\u5f39\u5e55\u52a0\u8f7d\u4e2d",Top:"\u9876\u90e8",Bottom:"\u5e95\u90e8",Rolling:"\u6eda\u52a8","Input danmaku, hit Enter":"\u8f93\u5165\u5f39\u5e55\uff0c\u56de\u8f66\u53d1\u9001","About author":"\u5173\u4e8e\u4f5c\u8005","DPlayer feedback":"\u64ad\u653e\u5668\u610f\u89c1\u53cd\u9988","About DPlayer":"\u5173\u4e8e DPlayer \u64ad\u653e\u5668",Loop:"\u6d17\u8111\u5faa\u73af",Speed:"\u901f\u5ea6","Opacity for danmaku":"\u5f39\u5e55\u900f\u660e\u5ea6",Normal:"\u6b63\u5e38","Please input danmaku content!":"\u8981\u8f93\u5165\u5f39\u5e55\u5185\u5bb9\u554a\u5582\uff01","Set danmaku color":"\u8bbe\u7f6e\u5f39\u5e55\u989c\u8272","Set danmaku type":"\u8bbe\u7f6e\u5f39\u5e55\u7c7b\u578b","Show danmaku":"\u663e\u793a\u5f39\u5e55","This video fails to load":"\u89c6\u9891\u52a0\u8f7d\u5931\u8d25","Switching to":"\u6b63\u5728\u5207\u6362\u81f3","Switched to":"\u5df2\u7ecf\u5207\u6362\u81f3",quality:"\u753b\u8d28",FF:"\u5feb\u8fdb",REW:"\u5feb\u9000","Unlimited danmaku":"\u6d77\u91cf\u5f39\u5e55","Send danmaku":"\u53d1\u9001\u5f39\u5e55",Setting:"\u8bbe\u7f6e","Full screen":"\u5168\u5c4f","Web full screen":"\u9875\u9762\u5168\u5c4f",Send:"\u53d1\u9001",Screenshot:"\u622a\u56fe",s:"\u79d2","Show subtitle":"\u663e\u793a\u5b57\u5e55","Hide subtitle":"\u9690\u85cf\u5b57\u5e55",Volume:"\u97f3\u91cf",Live:"\u76f4\u64ad"},"zh-tw":{"Danmaku is loading":"\u5f48\u5e55\u52a0\u8f09\u4e2d",Top:"\u9802\u90e8",Bottom:"\u5e95\u90e8",Rolling:"\u6efe\u52d5","Input danmaku, hit Enter":"\u8f38\u5165\u5f48\u5e55\uff0cEnter \u767c\u9001","About author":"\u95dc\u65bc\u4f5c\u8005","DPlayer feedback":"\u64ad\u653e\u5668\u610f\u898b\u53cd\u994b","About DPlayer":"\u95dc\u65bc DPlayer \u64ad\u653e\u5668",Loop:"\u5faa\u74b0\u64ad\u653e",Speed:"\u901f\u5ea6","Opacity for danmaku":"\u5f48\u5e55\u900f\u660e\u5ea6",Normal:"\u6b63\u5e38","Please input danmaku content!":"\u8acb\u8f38\u5165\u5f48\u5e55\u5185\u5bb9\u554a\uff01","Set danmaku color":"\u8a2d\u7f6e\u5f48\u5e55\u984f\u8272","Set danmaku type":"\u8a2d\u7f6e\u5f48\u5e55\u985e\u578b","Show danmaku":"\u986f\u793a\u5f48\u5e55","This video fails to load":"\u8996\u983b\u52a0\u8f09\u5931\u6557","Switching to":"\u6b63\u5728\u5207\u63db\u81f3","Switched to":"\u5df2\u7d93\u5207\u63db\u81f3",quality:"\u756b\u8cea",FF:"\u5feb\u9032",REW:"\u5feb\u9000","Unlimited danmaku":"\u6d77\u91cf\u5f48\u5e55","Send danmaku":"\u767c\u9001\u5f48\u5e55",Setting:"\u8a2d\u7f6e","Full screen":"\u5168\u5c4f","Web full screen":"\u9801\u9762\u5168\u5c4f",Send:"\u767c\u9001",Screenshot:"\u622a\u5716",s:"\u79d2","Show subtitle":"\u986f\u793a\u5b57\u5e55","Hide subtitle":"\u96b1\u85cf\u5b57\u5e55",Volume:"\u97f3\u91cf",Live:"\u76f4\u64ad"}}},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function(){function e(e,t){for(var n=0;n
'+this.tplVideo(!0,e.video.pic,e.screenshot,e.preload,e.video.url,e.subtitle)+(e.logo?'':"")+'
'+(e.danmaku?''+n("Danmaku is loading")+"":"")+'
'+n("Set danmaku color")+'
'+n("Set danmaku type")+'
0:00 / 0:00'+(e.live?''+n("Live")+"":"")+'
'+(e.video.quality?'
'+this.tplQualityList(e.video.quality)+"
":"")+(e.screenshot?''+i.get("camera")+"":"")+'
"+(e.subtitle?'
":"")+'
'+n("Speed")+'
'+i.get("right")+'
'+n("Loop")+'
'+n("Show danmaku")+'
'+n("Unlimited danmaku")+'
'+n("Opacity for danmaku")+'
0.5
0.75
'+n("Normal")+'
1.25
1.5
2
'+this.tplContextmenuList(e.contextmenu,n)+'
'}},{key:"tplDanmakumargin",value:function(e){var t="";if(e)for(var n in e)t+=n+":"+e[n]+";";return t}},{key:"tplContextmenuList",value:function(e,t){for(var n='";return n+=""}},{key:"tplQualityList",value:function(e){for(var t='
',n=0;n'+e[n].name+"
";return t+=""}},{key:"tplVideo",value:function(e,t,n,i,a,s){var o=s&&"webvtt"===s.type;return'"}}]),e}();e.exports=s},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function(){function e(e,t){for(var n=0;n'}}]),e}();e.exports=s},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s=function(){function e(e,t){for(var n=0;nparseFloat(t.time);)n.push(t),t=this.dan[++this.danIndex];this.draw(n)}window.requestAnimationFrame(function(){e.frame()})}},{key:"opacity",value:function(e){if(void 0!==e){for(var t=this.container.getElementsByClassName("dplayer-danmaku-item"),n=0;n'+e[a].text+"":s.innerHTML=e[a].text,s.style.opacity=t._opacity,s.style.color=e[a].color,s.addEventListener("animationend",function(){t.container.removeChild(s)});var o=t._measure(e[a].text),l=void 0;switch(e[a].type){case"right":l=c(s,e[a].type,o),l>=0&&(s.style.width=o+1+"px",s.style.top=n*l+"px",s.style.transform="translateX(-"+i+"px)");break;case"top":l=c(s,e[a].type),l>=0&&(s.style.top=n*l+"px");break;case"bottom":l=c(s,e[a].type),l>=0&&(s.style.bottom=n*l+"px");break;default:console.error("Can't handled danmaku type: "+e[a].type)}l>=0&&(s.classList.add("dplayer-danmaku-move"),d.appendChild(s))}(u);return this.container.appendChild(d),d}}},{key:"play",value:function(){this.paused=!1}},{key:"pause",value:function(){this.paused=!0}},{key:"_measure",value:function(e){if(!this.context){var t=getComputedStyle(this.container.getElementsByClassName("dplayer-danmaku-item")[0],null);this.context=document.createElement("canvas").getContext("2d"),this.context.font=t.getPropertyValue("font")}return this.context.measureText(e).width}},{key:"seek",value:function(){this.clear();for(var e=0;e=this.options.time()){this.danIndex=e;break}this.danIndex=this.dan.length}}},{key:"clear",value:function(){this.danTunnel={right:{},top:{},bottom:{}},this.danIndex=0,this.options.container.innerHTML="",this.events&&this.events.trigger("danmaku_clear")}},{key:"htmlEncode",value:function(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")}},{key:"resize",value:function(){for(var e=this.container.offsetWidth,t=this.container.getElementsByClassName("dplayer-danmaku-item"),n=0;n0&&void 0!==arguments[0]?arguments[0]:"browser"){case"browser":return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement;case"web":return this.player.container.classList.contains("dplayer-fulled")}}},{key:"request",value:function(){switch(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"browser"){case"browser":this.player.container.requestFullscreen?this.player.container.requestFullscreen():this.player.container.mozRequestFullScreen?this.player.container.mozRequestFullScreen():this.player.container.webkitRequestFullscreen?this.player.container.webkitRequestFullscreen():this.player.video.webkitEnterFullscreen&&this.player.video.webkitEnterFullscreen();break;case"web":this.player.container.classList.add("dplayer-fulled"),this.lastScrollPosition=o.default.getScrollPosition(),document.body.classList.add("dplayer-web-fullscreen-fix"),this.player.events.trigger("webfullscreen")}}},{key:"cancel",value:function(){switch(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"browser"){case"browser":document.cancelFullScreen?document.cancelFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen&&document.webkitCancelFullScreen();break;case"web":this.player.container.classList.remove("dplayer-fulled"),document.body.classList.remove("dplayer-web-fullscreen-fix"),o.default.setScrollPosition(this.lastScrollPosition),this.player.events.trigger("webfullscreen_cancel")}}},{key:"toggle",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"browser";if(this.isFullScreen(e))this.cancel(e);else{this.request(e);var t="browser"===e?"web":"browser";this.isFullScreen(t)&&this.cancel(t)}}}]),e}();e.exports=l},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function(){function e(e,t){for(var n=0;nt&&!e.player.video.paused&&(e.player.container.classList.remove("dplayer-loading"),i=!1),t=n)},100)}},{key:"initprogressChecker",value:function(){var e=this;this.progressChecker=setInterval(function(){if(e.enableprogressChecker){e.player.bar.set("played",e.player.video.currentTime/e.player.video.duration,"width");var t=o.default.secondToTime(e.player.video.currentTime);e.player.template.ptime.innerHTML!==t&&(e.player.template.ptime.innerHTML=o.default.secondToTime(e.player.video.currentTime))}},100)}},{key:"enable",value:function(e){if(e)this["enable"+e+"Checker"]=!0;else for(var t=0;t=.95?n.template.volumeIcon.innerHTML=n.icons.get("volume-up"):n.volume()>0?n.template.volumeIcon.innerHTML=n.icons.get("volume-down"):n.template.volumeIcon.innerHTML=n.icons.get("volume-off")};var u=function(e){var t=e||window.event,i=(t.clientX-l.default.getElementViewLeft(n.template.volumeBarWrap)-5.5)/35;n.volume(i)},p=function e(){document.removeEventListener("mouseup",e),document.removeEventListener("mousemove",u),n.template.volumeButton.classList.remove("dplayer-volume-active")};this.template.volumeBarWrapWrap.addEventListener("click",function(e){var t=e||window.event,i=(t.clientX-l.default.getElementViewLeft(n.template.volumeBarWrap)-5.5)/35;n.volume(i)}),this.template.volumeBarWrapWrap.addEventListener("mousedown",function(){document.addEventListener("mousemove",u),document.addEventListener("mouseup",p),n.template.volumeButton.classList.add("dplayer-volume-active")}),this.template.volumeIcon.addEventListener("click",function(){n.video.muted?(n.video.muted=!1,n.switchVolumeIcon(),n.bar.set("volume",n.volume(),"width")):(n.video.muted=!0,n.template.volumeIcon.innerHTML=n.icons.get("volume-off"),n.bar.set("volume",0,"width"))}),1!==this.video.duration&&(this.template.dtime.innerHTML=this.video.duration?l.default.secondToTime(this.video.duration):"00:00"),this.danmaku||(this.options.autoplay&&!o.isMobile?this.play():o.isMobile&&this.pause()),this.fullScreen=new S.default(this),this.template.browserFullButton.addEventListener("click",function(){n.fullScreen.toggle("browser")}),this.template.webFullButton.addEventListener("click",function(){n.fullScreen.toggle("web")});var m=function(e){if(n.focus){var t=document.activeElement.tagName.toUpperCase(),i=document.activeElement.getAttribute("contenteditable");if("INPUT"!==t&&"TEXTAREA"!==t&&""!==i&&"true"!==i){var a=e||window.event,s=void 0;switch(a.keyCode){case 32:a.preventDefault(),n.toggle();break;case 37:a.preventDefault(),n.seek(n.video.currentTime-5),n.controller.setAutoHide();break;case 39:a.preventDefault(),n.seek(n.video.currentTime+5),n.controller.setAutoHide();break;case 38:a.preventDefault(),s=n.volume()+.1,n.volume(s);break;case 40:a.preventDefault(),s=n.volume()-.1,n.volume(s)}}}};this.options.hotkey&&document.addEventListener("keydown",m),document.addEventListener("keydown",function(e){switch((e||window.event).keyCode){case 27:n.fullScreen.isFullScreen("web")&&n.fullScreen.cancel("web")}}),this.container.addEventListener("contextmenu",function(e){var t=e||window.event;t.preventDefault(),n.template.menu.classList.add("dplayer-menu-show");var i=n.container.getBoundingClientRect(),a=t.clientX-i.left,s=t.clientY-i.top;a+n.template.menu.offsetWidth>=i.width?(n.template.menu.style.right=i.width-a+"px",n.template.menu.style.left="initial"):(n.template.menu.style.left=t.clientX-n.container.getBoundingClientRect().left+"px",n.template.menu.style.right="initial"),s+n.template.menu.offsetHeight>=i.height?(n.template.menu.style.bottom=i.height-s+"px",n.template.menu.style.top="initial"):(n.template.menu.style.top=t.clientY-n.container.getBoundingClientRect().top+"px",n.template.menu.style.bottom="initial"),n.template.mask.classList.add("dplayer-mask-show"),n.events.trigger("contextmenu_show"),n.template.mask.addEventListener("click",function(){n.template.mask.classList.remove("dplayer-mask-show"),n.template.menu.classList.remove("dplayer-menu-show"),n.events.trigger("contextmenu_hide")})}),this.options.video.quality&&this.template.qualityList.addEventListener("click",function(e){e.target.classList.contains("dplayer-quality-item")&&n.switchQuality(e.target.dataset.index)}),this.options.screenshot&&this.template.camareButton.addEventListener("click",function(){var e=document.createElement("canvas");e.width=n.video.videoWidth,e.height=n.video.videoHeight,e.getContext("2d").drawImage(n.video,0,0,e.width,e.height);var t=e.toDataURL();n.template.camareButton.href=t,n.template.camareButton.download="DPlayer.png",n.events.trigger("screenshot",t)}),this.options.subtitle&&(this.events.on("subtitle_show",function(){n.template.subtitleButton.dataset.balloon=n.tran("Hide subtitle"),n.template.subtitleButtonInner.style.opacity="",n.user.set("subtitle",1)}),this.events.on("subtitle_hide",function(){n.template.subtitleButton.dataset.balloon=n.tran("Show subtitle"),n.template.subtitleButtonInner.style.opacity="0.4",n.user.set("subtitle",0)}),this.template.subtitleButton.addEventListener("click",function(){n.subtitle.toggle()})),this.initVideo(this.video,this.quality&&this.quality.type||this.options.video.type),A++,j.push(this)}return s(e,[{key:"seek",value:function(e){e=Math.max(e,0),this.video.duration&&(e=Math.min(e,this.video.duration)),this.video.currentTimee&&this.notice(this.tran("REW")+" "+(this.video.currentTime-e).toFixed(0)+" "+this.tran("s")),this.video.currentTime=e,this.danmaku&&this.danmaku.seek(),this.bar.set("played",e/this.video.duration,"width")}},{key:"play",value:function(){if(this.paused=!1,this.video.paused&&this.bezel.switch(this.icons.get("play")),this.template.playButton.innerHTML=this.icons.get("pause"),this.video.play(),this.time.enable(),this.container.classList.add("dplayer-playing"),this.danmaku&&this.danmaku.play(),this.options.mutex)for(var e=0;ee.offsetWidth)){var c=n.video.duration*(r/e.offsetWidth);switch(t.style.left=r-20+"px",a.type){case"mouseenter":n.thumbnails&&n.thumbnails.show();break;case"mousemove":n.thumbnails&&n.thumbnails.move(r),t.innerText=l.default.secondToTime(c),n.timeTipsDisplay(!0,t);break;case"mouseleave":n.thumbnails&&n.thumbnails.hide(),n.timeTipsDisplay(!1,t)}}}}}},{key:"timeTipsDisplay",value:function(e,t){if(e){if(this.isTimeTipsShow)return;t.classList.remove("hidden"),this.isTimeTipsShow=!0}else{if(!this.isTimeTipsShow)return;t.classList.add("hidden"),this.isTimeTipsShow=!1}}},{key:"initThumbnails",value:function(){var e=this;this.thumbnails=new b.default(this.template.barPreview,this.template.barWrap.offsetWidth,this.options.video.thumbnails,this.events),this.on("loadedmetadata",function(){e.thumbnails.resize(160,90)})}},{key:"notice",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2e3,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.8;this.template.notice.innerHTML=e,this.template.notice.style.opacity=i,this.noticeTime&&clearTimeout(this.noticeTime),this.events.trigger("notice_show",e),this.noticeTime=setTimeout(function(){t.template.notice.style.opacity=0,t.events.trigger("notice_hide")},n)}},{key:"resize",value:function(){this.danmaku&&this.danmaku.resize(),this.events.trigger("resize")}},{key:"destroy",value:function(){j.splice(j.indexOf(this),1),this.pause(),this.controller.destroy(),this.time.destroy(),this.video.src="",this.container.innerHTML="",this.events.trigger("destroy");for(var e in this)this.hasOwnProperty(e)&&"paused"!==e&&delete this[e]}}]),e}();e.exports=V},function(e,t){},function(e,t,n){"use strict";var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=n(5);e.exports=function(e){/mobile/i.test(window.navigator.userAgent)&&(e.autoplay=!1);var t={container:e.element||document.getElementsByClassName("dplayer")[0],live:!1,autoplay:!1,theme:"#b7daff",loop:!1,lang:(navigator.language||navigator.browserLanguage).toLowerCase(),screenshot:!1,hotkey:!0,preload:"auto",volume:.7,apiBackend:a,video:{},icons:{play:["0 0 16 32","M15.552 15.168q0.448 0.32 0.448 0.832 0 0.448-0.448 0.768l-13.696 8.512q-0.768 0.512-1.312 0.192t-0.544-1.28v-16.448q0-0.96 0.544-1.28t1.312 0.192z"],pause:["0 0 17 32","M14.080 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048zM2.88 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048z"],"volume-up":["0 0 21 32","M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528zM25.152 16q0 2.72-1.536 5.056t-4 3.36q-0.256 0.096-0.448 0.096-0.48 0-0.832-0.352t-0.32-0.8q0-0.704 0.672-1.056 1.024-0.512 1.376-0.8 1.312-0.96 2.048-2.4t0.736-3.104-0.736-3.104-2.048-2.4q-0.352-0.288-1.376-0.8-0.672-0.352-0.672-1.056 0-0.448 0.32-0.8t0.8-0.352q0.224 0 0.48 0.096 2.496 1.056 4 3.36t1.536 5.056z"],"volume-down":["0 0 21 32","M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528z"],"volume-off":["0 0 21 32","M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8z"],loop:["0 0 32 32","M1.882 16.941c0 4.152 3.221 7.529 7.177 7.529v1.882c-4.996 0-9.060-4.222-9.060-9.412s4.064-9.412 9.060-9.412h7.96l-3.098-3.098 1.331-1.331 5.372 5.37-5.37 5.372-1.333-1.333 3.1-3.098h-7.962c-3.957 0-7.177 3.377-7.177 7.529zM22.94 7.529v1.882c3.957 0 7.177 3.377 7.177 7.529s-3.221 7.529-7.177 7.529h-7.962l3.098-3.098-1.331-1.331-5.37 5.37 5.372 5.372 1.331-1.331-3.1-3.1h7.96c4.998 0 9.062-4.222 9.062-9.412s-4.064-9.412-9.060-9.412z"],full:["0 0 32 33","M6.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v4h4c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333zM30.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h4v-4c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM30.667 12c-0.8 0-1.333-0.533-1.333-1.333v-4h-4c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM1.333 12c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333h-4v4c0 0.8-0.533 1.333-1.333 1.333z"],"full-in":["0 0 32 33","M24.965 24.38h-18.132c-1.366 0-2.478-1.113-2.478-2.478v-11.806c0-1.364 1.111-2.478 2.478-2.478h18.132c1.366 0 2.478 1.113 2.478 2.478v11.806c0 1.364-1.11 2.478-2.478 2.478zM6.833 10.097v11.806h18.134l-0.002-11.806h-18.132zM2.478 28.928h5.952c0.684 0 1.238-0.554 1.238-1.239 0-0.684-0.554-1.238-1.238-1.238h-5.952v-5.802c0-0.684-0.554-1.239-1.238-1.239s-1.239 0.556-1.239 1.239v5.802c0 1.365 1.111 2.478 2.478 2.478zM30.761 19.412c-0.684 0-1.238 0.554-1.238 1.238v5.801h-5.951c-0.686 0-1.239 0.554-1.239 1.238 0 0.686 0.554 1.239 1.239 1.239h5.951c1.366 0 2.478-1.111 2.478-2.478v-5.801c0-0.683-0.554-1.238-1.239-1.238zM0 5.55v5.802c0 0.683 0.554 1.238 1.238 1.238s1.238-0.555 1.238-1.238v-5.802h5.952c0.684 0 1.238-0.554 1.238-1.238s-0.554-1.238-1.238-1.238h-5.951c-1.366-0.001-2.478 1.111-2.478 2.476zM32 11.35v-5.801c0-1.365-1.11-2.478-2.478-2.478h-5.951c-0.686 0-1.239 0.554-1.239 1.238s0.554 1.238 1.239 1.238h5.951v5.801c0 0.683 0.554 1.237 1.238 1.237 0.686 0.002 1.239-0.553 1.239-1.236z"],setting:["0 0 32 28","M28.633 17.104c0.035 0.21 0.026 0.463-0.026 0.76s-0.14 0.598-0.262 0.904c-0.122 0.306-0.271 0.581-0.445 0.825s-0.367 0.419-0.576 0.524c-0.209 0.105-0.393 0.157-0.55 0.157s-0.332-0.035-0.524-0.105c-0.175-0.052-0.393-0.1-0.655-0.144s-0.528-0.052-0.799-0.026c-0.271 0.026-0.541 0.083-0.812 0.17s-0.502 0.236-0.694 0.445c-0.419 0.437-0.664 0.934-0.734 1.493s0.009 1.092 0.236 1.598c0.175 0.349 0.148 0.699-0.079 1.048-0.105 0.14-0.271 0.284-0.498 0.432s-0.476 0.284-0.747 0.406-0.555 0.218-0.851 0.288c-0.297 0.070-0.559 0.105-0.786 0.105-0.157 0-0.306-0.061-0.445-0.183s-0.236-0.253-0.288-0.393h-0.026c-0.192-0.541-0.52-1.009-0.982-1.402s-1-0.589-1.611-0.589c-0.594 0-1.131 0.197-1.611 0.589s-0.816 0.851-1.009 1.375c-0.087 0.21-0.218 0.362-0.393 0.458s-0.367 0.144-0.576 0.144c-0.244 0-0.52-0.044-0.825-0.131s-0.611-0.197-0.917-0.327c-0.306-0.131-0.581-0.284-0.825-0.458s-0.428-0.349-0.55-0.524c-0.087-0.122-0.135-0.266-0.144-0.432s0.057-0.397 0.197-0.694c0.192-0.402 0.266-0.86 0.223-1.375s-0.266-0.991-0.668-1.428c-0.244-0.262-0.541-0.432-0.891-0.511s-0.681-0.109-0.995-0.092c-0.367 0.017-0.742 0.087-1.127 0.21-0.244 0.070-0.489 0.052-0.734-0.052-0.192-0.070-0.371-0.231-0.537-0.485s-0.314-0.533-0.445-0.838c-0.131-0.306-0.231-0.62-0.301-0.943s-0.087-0.59-0.052-0.799c0.052-0.384 0.227-0.629 0.524-0.734 0.524-0.21 0.995-0.555 1.415-1.035s0.629-1.017 0.629-1.611c0-0.611-0.21-1.144-0.629-1.598s-0.891-0.786-1.415-0.996c-0.157-0.052-0.288-0.179-0.393-0.38s-0.157-0.406-0.157-0.616c0-0.227 0.035-0.48 0.105-0.76s0.162-0.55 0.275-0.812 0.244-0.502 0.393-0.72c0.148-0.218 0.31-0.38 0.485-0.485 0.14-0.087 0.275-0.122 0.406-0.105s0.275 0.052 0.432 0.105c0.524 0.21 1.070 0.275 1.637 0.197s1.070-0.327 1.506-0.747c0.21-0.209 0.362-0.467 0.458-0.773s0.157-0.607 0.183-0.904c0.026-0.297 0.026-0.568 0-0.812s-0.048-0.419-0.065-0.524c-0.035-0.105-0.066-0.227-0.092-0.367s-0.013-0.262 0.039-0.367c0.105-0.244 0.293-0.458 0.563-0.642s0.563-0.336 0.878-0.458c0.314-0.122 0.62-0.214 0.917-0.275s0.533-0.092 0.707-0.092c0.227 0 0.406 0.074 0.537 0.223s0.223 0.301 0.275 0.458c0.192 0.471 0.507 0.886 0.943 1.244s0.952 0.537 1.546 0.537c0.611 0 1.153-0.17 1.624-0.511s0.803-0.773 0.996-1.297c0.070-0.14 0.179-0.284 0.327-0.432s0.301-0.223 0.458-0.223c0.244 0 0.511 0.035 0.799 0.105s0.572 0.166 0.851 0.288c0.279 0.122 0.537 0.279 0.773 0.472s0.423 0.402 0.563 0.629c0.087 0.14 0.113 0.293 0.079 0.458s-0.070 0.284-0.105 0.354c-0.227 0.506-0.297 1.039-0.21 1.598s0.341 1.048 0.76 1.467c0.419 0.419 0.934 0.651 1.546 0.694s1.179-0.057 1.703-0.301c0.14-0.087 0.31-0.122 0.511-0.105s0.371 0.096 0.511 0.236c0.262 0.244 0.493 0.616 0.694 1.113s0.336 1 0.406 1.506c0.035 0.297-0.013 0.528-0.144 0.694s-0.266 0.275-0.406 0.327c-0.542 0.192-1.004 0.528-1.388 1.009s-0.576 1.026-0.576 1.637c0 0.594 0.162 1.113 0.485 1.559s0.747 0.764 1.27 0.956c0.122 0.070 0.227 0.14 0.314 0.21 0.192 0.157 0.323 0.358 0.393 0.602v0zM16.451 19.462c0.786 0 1.528-0.149 2.227-0.445s1.305-0.707 1.821-1.231c0.515-0.524 0.921-1.131 1.218-1.821s0.445-1.428 0.445-2.214c0-0.786-0.148-1.524-0.445-2.214s-0.703-1.292-1.218-1.808c-0.515-0.515-1.122-0.921-1.821-1.218s-1.441-0.445-2.227-0.445c-0.786 0-1.524 0.148-2.214 0.445s-1.292 0.703-1.808 1.218c-0.515 0.515-0.921 1.118-1.218 1.808s-0.445 1.428-0.445 2.214c0 0.786 0.149 1.524 0.445 2.214s0.703 1.297 1.218 1.821c0.515 0.524 1.118 0.934 1.808 1.231s1.428 0.445 2.214 0.445v0z"],right:["0 0 32 32","M22 16l-10.105-10.6-1.895 1.987 8.211 8.613-8.211 8.612 1.895 1.988 8.211-8.613z"],comment:["0 0 32 32","M27.128 0.38h-22.553c-2.336 0-4.229 1.825-4.229 4.076v16.273c0 2.251 1.893 4.076 4.229 4.076h4.229v-2.685h8.403l-8.784 8.072 1.566 1.44 7.429-6.827h9.71c2.335 0 4.229-1.825 4.229-4.076v-16.273c0-2.252-1.894-4.076-4.229-4.076zM28.538 19.403c0 1.5-1.262 2.717-2.819 2.717h-8.36l-0.076-0.070-0.076 0.070h-11.223c-1.557 0-2.819-1.217-2.819-2.717v-13.589c0-1.501 1.262-2.718 2.819-2.718h19.734c1.557 0 2.819-0.141 2.819 1.359v14.947zM9.206 10.557c-1.222 0-2.215 0.911-2.215 2.036s0.992 2.035 2.215 2.035c1.224 0 2.216-0.911 2.216-2.035s-0.992-2.036-2.216-2.036zM22.496 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.224 0 2.215-0.911 2.215-2.035s-0.991-2.036-2.215-2.036zM15.852 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.222 0 2.215-0.911 2.215-2.035s-0.992-2.036-2.215-2.036z"],"comment-off":["0 0 32 32","M27.090 0.131h-22.731c-2.354 0-4.262 1.839-4.262 4.109v16.401c0 2.269 1.908 4.109 4.262 4.109h4.262v-2.706h8.469l-8.853 8.135 1.579 1.451 7.487-6.88h9.787c2.353 0 4.262-1.84 4.262-4.109v-16.401c0-2.27-1.909-4.109-4.262-4.109v0zM28.511 19.304c0 1.512-1.272 2.738-2.841 2.738h-8.425l-0.076-0.070-0.076 0.070h-11.311c-1.569 0-2.841-1.226-2.841-2.738v-13.696c0-1.513 1.272-2.739 2.841-2.739h19.889c1.569 0 2.841-0.142 2.841 1.37v15.064z"],send:["0 0 32 32","M13.725 30l3.9-5.325-3.9-1.125v6.45zM0 17.5l11.050 3.35 13.6-11.55-10.55 12.425 11.8 3.65 6.1-23.375-32 15.5z"],pallette:["0 0 32 32","M19.357 2.88c1.749 0 3.366 0.316 4.851 0.946 1.485 0.632 2.768 1.474 3.845 2.533s1.922 2.279 2.532 3.661c0.611 1.383 0.915 2.829 0.915 4.334 0 1.425-0.304 2.847-0.915 4.271-0.611 1.425-1.587 2.767-2.928 4.028-0.855 0.813-1.811 1.607-2.869 2.38s-2.136 1.465-3.233 2.075c-1.099 0.61-2.198 1.098-3.296 1.465-1.098 0.366-2.115 0.549-3.051 0.549-1.343 0-2.441-0.438-3.296-1.311-0.854-0.876-1.281-2.41-1.281-4.608 0-0.366 0.020-0.773 0.060-1.221s0.062-0.895 0.062-1.343c0-0.773-0.183-1.353-0.55-1.738-0.366-0.387-0.793-0.58-1.281-0.58-0.652 0-1.21 0.295-1.678 0.886s-0.926 1.23-1.373 1.921c-0.447 0.693-0.905 1.334-1.372 1.923s-1.028 0.886-1.679 0.886c-0.529 0-1.048-0.427-1.556-1.282s-0.763-2.259-0.763-4.212c0-2.197 0.529-4.241 1.587-6.133s2.462-3.529 4.21-4.912c1.75-1.383 3.762-2.471 6.041-3.264 2.277-0.796 4.617-1.212 7.018-1.253zM7.334 15.817c0.569 0 1.047-0.204 1.434-0.611s0.579-0.875 0.579-1.404c0-0.569-0.193-1.047-0.579-1.434s-0.864-0.579-1.434-0.579c-0.529 0-0.987 0.193-1.373 0.579s-0.58 0.864-0.58 1.434c0 0.53 0.194 0.998 0.58 1.404 0.388 0.407 0.845 0.611 1.373 0.611zM12.216 11.79c0.691 0 1.292-0.254 1.8-0.763s0.762-1.107 0.762-1.8c0-0.732-0.255-1.343-0.762-1.831-0.509-0.489-1.109-0.732-1.8-0.732-0.732 0-1.342 0.244-1.831 0.732-0.488 0.488-0.732 1.098-0.732 1.831 0 0.693 0.244 1.292 0.732 1.8s1.099 0.763 1.831 0.763zM16.366 25.947c0.692 0 1.282-0.214 1.77-0.64s0.732-0.987 0.732-1.678-0.244-1.261-0.732-1.709c-0.489-0.448-1.078-0.671-1.77-0.671-0.65 0-1.21 0.223-1.678 0.671s-0.702 1.018-0.702 1.709c0 0.692 0.234 1.25 0.702 1.678s1.027 0.64 1.678 0.64zM19.113 9.592c0.651 0 1.129-0.203 1.433-0.611 0.305-0.406 0.459-0.874 0.459-1.404 0-0.488-0.154-0.947-0.459-1.373-0.304-0.427-0.782-0.641-1.433-0.641-0.529 0-1.008 0.193-1.434 0.58s-0.64 0.865-0.64 1.434c0 0.571 0.213 1.049 0.64 1.434 0.427 0.389 0.905 0.581 1.434 0.581zM24.848 12.826c0.57 0 1.067-0.213 1.495-0.64 0.427-0.427 0.64-0.947 0.64-1.556 0-0.57-0.214-1.068-0.64-1.495-0.428-0.427-0.927-0.64-1.495-0.64-0.611 0-1.129 0.213-1.555 0.64-0.428 0.427-0.642 0.926-0.642 1.495 0 0.611 0.213 1.129 0.642 1.556s0.947 0.64 1.555 0.64z"],camera:["0 0 32 32","M16 23c-3.309 0-6-2.691-6-6s2.691-6 6-6 6 2.691 6 6-2.691 6-6 6zM16 13c-2.206 0-4 1.794-4 4s1.794 4 4 4c2.206 0 4-1.794 4-4s-1.794-4-4-4zM27 28h-22c-1.654 0-3-1.346-3-3v-16c0-1.654 1.346-3 3-3h3c0.552 0 1 0.448 1 1s-0.448 1-1 1h-3c-0.551 0-1 0.449-1 1v16c0 0.552 0.449 1 1 1h22c0.552 0 1-0.448 1-1v-16c0-0.551-0.448-1-1-1h-11c-0.552 0-1-0.448-1-1s0.448-1 1-1h11c1.654 0 3 1.346 3 3v16c0 1.654-1.346 3-3 3zM24 10.5c0 0.828 0.672 1.5 1.5 1.5s1.5-0.672 1.5-1.5c0-0.828-0.672-1.5-1.5-1.5s-1.5 0.672-1.5 1.5zM15 4c0 0.552-0.448 1-1 1h-4c-0.552 0-1-0.448-1-1v0c0-0.552 0.448-1 1-1h4c0.552 0 1 0.448 1 1v0z"],subtitle:["0 0 32 32","M26.667 5.333h-21.333c-0 0-0.001 0-0.001 0-1.472 0-2.666 1.194-2.666 2.666 0 0 0 0.001 0 0.001v-0 16c0 0 0 0.001 0 0.001 0 1.472 1.194 2.666 2.666 2.666 0 0 0.001 0 0.001 0h21.333c0 0 0.001 0 0.001 0 1.472 0 2.666-1.194 2.666-2.666 0-0 0-0.001 0-0.001v0-16c0-0 0-0.001 0-0.001 0-1.472-1.194-2.666-2.666-2.666-0 0-0.001 0-0.001 0h0zM5.333 16h5.333v2.667h-5.333v-2.667zM18.667 24h-13.333v-2.667h13.333v2.667zM26.667 24h-5.333v-2.667h5.333v2.667zM26.667 18.667h-13.333v-2.667h13.333v2.667z"]},iconsColor:"#ffffff",contextmenu:[],mutex:!0};for(var n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n]);return e.video&&!e.video.type&&(e.video.type="auto"),"object"===i(e.danmaku)&&e.danmaku&&!e.danmaku.user&&(e.danmaku.user="DIYgod"),e.subtitle&&(!e.subtitle.type&&(e.subtitle.type="webvtt"),!e.subtitle.fontSize&&(e.subtitle.fontSize="20px"),!e.subtitle.bottom&&(e.subtitle.bottom="40px"),!e.subtitle.color&&(e.subtitle.color="#fff")),e.video.quality&&(e.video.url=[e.video.quality[e.video.defaultQuality].url]),e.lang&&(e.lang=e.lang.toLowerCase()),e.icons&&(e.icons=Object.assign({},t.icons,e.icons)),e.contextmenu=e.contextmenu.concat([{text:"About author",link:"https://diygod.me"},{text:"About DPlayer",link:"https://github.com/MoePlayer/DPlayer"},{text:"DPlayer feedback",link:"https://github.com/DIYgod/DPlayer/issues"},{text:"DPlayer 1.17.2 0cae80b",link:"https://github.com/MoePlayer/DPlayer/releases"}]),e}},function(e,t,n){"use strict";var i=function(e,t,n,i,a){var s=new XMLHttpRequest;s.onreadystatechange=function(){if(4===s.readyState){if(s.status>=200&&s.status<300||304===s.status){var e=JSON.parse(s.responseText);return 1!==e.code?i(s,e):n(s,e)}a(s)}},s.open(null!==t?"POST":"GET",e,!0),s.send(null!==t?JSON.stringify(t):null)};e.exports={send:function(e,t,n){i(e,t,function(e,t){console.log("Post danmaku: ",t),n&&n()},function(e,t){alert(t.msg)},function(e){console.log("Request was unsuccessful: "+e.status)})},read:function(e,t){i(e,null,function(e,n){t(null,n.danmaku)},function(e,n){t({status:e.status,response:n})},function(e){t({status:e.status,response:null})})}}},function(e,t,n){"use strict";e.exports=function(e){var t=this;this.lang=e,this.tran=function(e){return i[t.lang]&&i[t.lang][e]?i[t.lang][e]:e}};var i={"zh-cn":{"Danmaku is loading":"\u5f39\u5e55\u52a0\u8f7d\u4e2d",Top:"\u9876\u90e8",Bottom:"\u5e95\u90e8",Rolling:"\u6eda\u52a8","Input danmaku, hit Enter":"\u8f93\u5165\u5f39\u5e55\uff0c\u56de\u8f66\u53d1\u9001","About author":"\u5173\u4e8e\u4f5c\u8005","DPlayer feedback":"\u64ad\u653e\u5668\u610f\u89c1\u53cd\u9988","About DPlayer":"\u5173\u4e8e DPlayer \u64ad\u653e\u5668",Loop:"\u6d17\u8111\u5faa\u73af",Speed:"\u901f\u5ea6","Opacity for danmaku":"\u5f39\u5e55\u900f\u660e\u5ea6",Normal:"\u6b63\u5e38","Please input danmaku content!":"\u8981\u8f93\u5165\u5f39\u5e55\u5185\u5bb9\u554a\u5582\uff01","Set danmaku color":"\u8bbe\u7f6e\u5f39\u5e55\u989c\u8272","Set danmaku type":"\u8bbe\u7f6e\u5f39\u5e55\u7c7b\u578b","Show danmaku":"\u663e\u793a\u5f39\u5e55","This video fails to load":"\u89c6\u9891\u52a0\u8f7d\u5931\u8d25","Switching to":"\u6b63\u5728\u5207\u6362\u81f3","Switched to":"\u5df2\u7ecf\u5207\u6362\u81f3",quality:"\u753b\u8d28",FF:"\u5feb\u8fdb",REW:"\u5feb\u9000","Unlimited danmaku":"\u6d77\u91cf\u5f39\u5e55","Send danmaku":"\u53d1\u9001\u5f39\u5e55",Setting:"\u8bbe\u7f6e","Full screen":"\u5168\u5c4f","Web full screen":"\u9875\u9762\u5168\u5c4f",Send:"\u53d1\u9001",Screenshot:"\u622a\u56fe",s:"\u79d2","Show subtitle":"\u663e\u793a\u5b57\u5e55","Hide subtitle":"\u9690\u85cf\u5b57\u5e55",Volume:"\u97f3\u91cf",Live:"\u76f4\u64ad"},"zh-tw":{"Danmaku is loading":"\u5f48\u5e55\u52a0\u8f09\u4e2d",Top:"\u9802\u90e8",Bottom:"\u5e95\u90e8",Rolling:"\u6efe\u52d5","Input danmaku, hit Enter":"\u8f38\u5165\u5f48\u5e55\uff0cEnter \u767c\u9001","About author":"\u95dc\u65bc\u4f5c\u8005","DPlayer feedback":"\u64ad\u653e\u5668\u610f\u898b\u53cd\u994b","About DPlayer":"\u95dc\u65bc DPlayer \u64ad\u653e\u5668",Loop:"\u5faa\u74b0\u64ad\u653e",Speed:"\u901f\u5ea6","Opacity for danmaku":"\u5f48\u5e55\u900f\u660e\u5ea6",Normal:"\u6b63\u5e38","Please input danmaku content!":"\u8acb\u8f38\u5165\u5f48\u5e55\u5185\u5bb9\u554a\uff01","Set danmaku color":"\u8a2d\u7f6e\u5f48\u5e55\u984f\u8272","Set danmaku type":"\u8a2d\u7f6e\u5f48\u5e55\u985e\u578b","Show danmaku":"\u986f\u793a\u5f48\u5e55","This video fails to load":"\u8996\u983b\u52a0\u8f09\u5931\u6557","Switching to":"\u6b63\u5728\u5207\u63db\u81f3","Switched to":"\u5df2\u7d93\u5207\u63db\u81f3",quality:"\u756b\u8cea",FF:"\u5feb\u9032",REW:"\u5feb\u9000","Unlimited danmaku":"\u6d77\u91cf\u5f48\u5e55","Send danmaku":"\u767c\u9001\u5f48\u5e55",Setting:"\u8a2d\u7f6e","Full screen":"\u5168\u5c4f","Web full screen":"\u9801\u9762\u5168\u5c4f",Send:"\u767c\u9001",Screenshot:"\u622a\u5716",s:"\u79d2","Show subtitle":"\u986f\u793a\u5b57\u5e55","Hide subtitle":"\u96b1\u85cf\u5b57\u5e55",Volume:"\u97f3\u91cf",Live:"\u76f4\u64ad"}}},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function(){function e(e,t){for(var n=0;n
'+this.tplVideo(!0,e.video.pic,e.screenshot,e.preload,e.video.url,e.subtitle)+(e.logo?'':"")+'
'+(e.danmaku?''+n("Danmaku is loading")+"":"")+'
'+n("Set danmaku color")+'
'+n("Set danmaku type")+'
0:00 / 0:00'+(e.live?''+n("Live")+"":"")+'
'+(e.video.quality?'
'+this.tplQualityList(e.video.quality)+"
":"")+(e.screenshot?''+i.get("camera")+"":"")+'
"+(e.subtitle?'
":"")+'
'+n("Speed")+'
'+i.get("right")+'
'+n("Loop")+'
'+n("Show danmaku")+'
'+n("Unlimited danmaku")+'
'+n("Opacity for danmaku")+'
0.5
0.75
'+n("Normal")+'
1.25
1.5
2
'+this.tplContextmenuList(e.contextmenu,n)+'
'}},{key:"tplDanmakumargin",value:function(e){var t="";if(e)for(var n in e)t+=n+":"+e[n]+";";return t}},{key:"tplContextmenuList",value:function(e,t){for(var n='";return n+=""}},{key:"tplQualityList",value:function(e){for(var t='
',n=0;n'+e[n].name+"
";return t+=""}},{key:"tplVideo",value:function(e,t,n,i,a,s){var o=s&&"webvtt"===s.type;return'"}}]),e}();e.exports=s},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function(){function e(e,t){for(var n=0;n'}}]),e}();e.exports=s},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s=function(){function e(e,t){for(var n=0;nparseFloat(t.time);)n.push(t),t=this.dan[++this.danIndex];this.draw(n)}window.requestAnimationFrame(function(){e.frame()})}},{key:"opacity",value:function(e){if(void 0!==e){for(var t=this.container.getElementsByClassName("dplayer-danmaku-item"),n=0;n'+e[a].text+"":s.innerHTML=e[a].text,s.style.opacity=t._opacity,s.style.color=e[a].color,s.addEventListener("animationend",function(){t.container.removeChild(s)});var o=t._measure(e[a].text),l=void 0;switch(e[a].type){case"right":l=c(s,e[a].type,o),l>=0&&(s.style.width=o+1+"px",s.style.top=n*l+"px",s.style.transform="translateX(-"+i+"px)");break;case"top":l=c(s,e[a].type),l>=0&&(s.style.top=n*l+"px");break;case"bottom":l=c(s,e[a].type),l>=0&&(s.style.bottom=n*l+"px");break;default:console.error("Can't handled danmaku type: "+e[a].type)}l>=0&&(s.classList.add("dplayer-danmaku-move"),u.appendChild(s))}(d);return this.container.appendChild(u),u}}},{key:"play",value:function(){this.paused=!1}},{key:"pause",value:function(){this.paused=!0}},{key:"_measure",value:function(e){if(!this.context){var t=getComputedStyle(this.container.getElementsByClassName("dplayer-danmaku-item")[0],null);this.context=document.createElement("canvas").getContext("2d"),this.context.font=t.getPropertyValue("font")}return this.context.measureText(e).width}},{key:"seek",value:function(){this.clear();for(var e=0;e=this.options.time()){this.danIndex=e;break}this.danIndex=this.dan.length}}},{key:"clear",value:function(){this.danTunnel={right:{},top:{},bottom:{}},this.danIndex=0,this.options.container.innerHTML="",this.events&&this.events.trigger("danmaku_clear")}},{key:"htmlEncode",value:function(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")}},{key:"resize",value:function(){for(var e=this.container.offsetWidth,t=this.container.getElementsByClassName("dplayer-danmaku-item"),n=0;n0&&void 0!==arguments[0]?arguments[0]:"browser"){case"browser":return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement;case"web":return this.player.container.classList.contains("dplayer-fulled")}}},{key:"request",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"browser",t="browser"===e?"web":"browser",n=this.isFullScreen(t);switch(n||(this.lastScrollPosition=o.default.getScrollPosition()),e){case"browser":this.player.container.requestFullscreen?this.player.container.requestFullscreen():this.player.container.mozRequestFullScreen?this.player.container.mozRequestFullScreen():this.player.container.webkitRequestFullscreen?this.player.container.webkitRequestFullscreen():this.player.video.webkitEnterFullscreen&&this.player.video.webkitEnterFullscreen();break;case"web":this.player.container.classList.add("dplayer-fulled"),document.body.classList.add("dplayer-web-fullscreen-fix"),this.player.events.trigger("webfullscreen")}n&&this.cancel(t)}},{key:"cancel",value:function(){switch(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"browser"){case"browser":document.cancelFullScreen?document.cancelFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen&&document.webkitCancelFullScreen();break;case"web":this.player.container.classList.remove("dplayer-fulled"),document.body.classList.remove("dplayer-web-fullscreen-fix"),this.player.events.trigger("webfullscreen_cancel")}}},{key:"toggle",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"browser";this.isFullScreen(e)?this.cancel(e):this.request(e)}}]),e}();e.exports=l},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function(){function e(e,t){for(var n=0;nt&&!e.player.video.paused&&(e.player.container.classList.remove("dplayer-loading"),i=!1),t=n)},100)}},{key:"initprogressChecker",value:function(){var e=this;this.progressChecker=setInterval(function(){if(e.enableprogressChecker){e.player.bar.set("played",e.player.video.currentTime/e.player.video.duration,"width");var t=o.default.secondToTime(e.player.video.currentTime);e.player.template.ptime.innerHTML!==t&&(e.player.template.ptime.innerHTML=o.default.secondToTime(e.player.video.currentTime))}},100)}},{key:"enable",value:function(e){if(e)this["enable"+e+"Checker"]=!0;else for(var t=0;t= 0.95) {\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-up');\n } else if (_this.volume() > 0) {\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-down');\n } else {\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-off');\n }\n };\n var volumeMove = function volumeMove(event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.volumeBarWrap) - 5.5) / vWidth;\n _this.volume(percentage);\n };\n var volumeUp = function volumeUp() {\n document.removeEventListener('mouseup', volumeUp);\n document.removeEventListener('mousemove', volumeMove);\n _this.template.volumeButton.classList.remove('dplayer-volume-active');\n };\n this.template.volumeBarWrapWrap.addEventListener('click', function (event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.volumeBarWrap) - 5.5) / vWidth;\n _this.volume(percentage);\n });\n this.template.volumeBarWrapWrap.addEventListener('mousedown', function () {\n document.addEventListener('mousemove', volumeMove);\n document.addEventListener('mouseup', volumeUp);\n _this.template.volumeButton.classList.add('dplayer-volume-active');\n });\n this.template.volumeIcon.addEventListener('click', function () {\n if (_this.video.muted) {\n _this.video.muted = false;\n _this.switchVolumeIcon();\n _this.bar.set('volume', _this.volume(), 'width');\n } else {\n _this.video.muted = true;\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-off');\n _this.bar.set('volume', 0, 'width');\n }\n });\n this.hideTime = 0;\n var hideController = function hideController() {\n _this.container.classList.remove('dplayer-hide-controller');\n clearTimeout(_this.hideTime);\n _this.hideTime = setTimeout(function () {\n if (_this.video.played.length && !_this.disableHideController) {\n _this.container.classList.add('dplayer-hide-controller');\n closeSetting();\n closeComment();\n }\n }, 2000);\n };\n if (!_utils.isMobile) {\n this.container.addEventListener('mousemove', hideController);\n this.container.addEventListener('click', hideController);\n }\n var closeSetting = function closeSetting() {\n if (_this.template.settingBox.classList.contains('dplayer-setting-box-open')) {\n _this.template.settingBox.classList.remove('dplayer-setting-box-open');\n _this.template.mask.classList.remove('dplayer-mask-show');\n setTimeout(function () {\n _this.template.settingBox.classList.remove('dplayer-setting-box-narrow');\n _this.template.settingBox.classList.remove('dplayer-setting-box-speed');\n }, 300);\n }\n _this.disableHideController = false;\n };\n var openSetting = function openSetting() {\n _this.disableHideController = true;\n _this.template.settingBox.classList.add('dplayer-setting-box-open');\n _this.template.mask.classList.add('dplayer-mask-show');\n };\n this.template.mask.addEventListener('click', function () {\n closeSetting();\n });\n this.template.settingButton.addEventListener('click', function () {\n openSetting();\n });\n this.loop = this.options.loop;\n var showdan = this.user.get('danmaku');\n if (!showdan) {\n this.danmaku && this.danmaku.hide();\n }\n var unlimitDan = this.user.get('unlimited');\n this.template.loopToggle.checked = this.loop;\n this.template.loop.addEventListener('click', function () {\n _this.template.loopToggle.checked = !_this.template.loopToggle.checked;\n if (_this.template.loopToggle.checked) {\n _this.loop = true;\n } else {\n _this.loop = false;\n }\n closeSetting();\n });\n this.template.showDanmakuToggle.checked = showdan;\n this.template.showDanmaku.addEventListener('click', function () {\n _this.template.showDanmakuToggle.checked = !_this.template.showDanmakuToggle.checked;\n if (_this.template.showDanmakuToggle.checked) {\n showdan = true;\n if (!_this.paused) {\n _this.danmaku.show();\n }\n } else {\n showdan = false;\n _this.danmaku.hide();\n }\n _this.user.set('danmaku', showdan ? 1 : 0);\n closeSetting();\n });\n this.template.unlimitDanmakuToggle.checked = unlimitDan;\n this.template.unlimitDanmaku.addEventListener('click', function () {\n _this.template.unlimitDanmakuToggle.checked = !_this.template.unlimitDanmakuToggle.checked;\n if (_this.template.unlimitDanmakuToggle.checked) {\n unlimitDan = true;\n _this.danmaku.unlimit(true);\n } else {\n unlimitDan = false;\n _this.danmaku.unlimit(false);\n }\n _this.user.set('unlimited', unlimitDan ? 1 : 0);\n closeSetting();\n });\n this.template.speed.addEventListener('click', function () {\n _this.template.settingBox.classList.add('dplayer-setting-box-narrow');\n _this.template.settingBox.classList.add('dplayer-setting-box-speed');\n var _loop = function _loop(i) {\n _this.template.speedItem[i].addEventListener('click', function () {\n _this.video.playbackRate = _this.template.speedItem[i].dataset.speed;\n closeSetting();\n });\n };\n for (var i = 0; i < _this.template.speedItem.length; i++) {\n _loop(i);\n }\n });\n if (this.danmaku) {\n var dWidth = 130;\n this.on('danmaku_opacity', function (percentage) {\n _this.bar.set('danmaku', percentage, 'width');\n _this.user.set('opacity', percentage);\n });\n this.danmaku.opacity(this.user.get('opacity'));\n var danmakuMove = function danmakuMove(event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.danmakuOpacityBarWrap)) / dWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.danmaku.opacity(percentage);\n };\n var danmakuUp = function danmakuUp() {\n document.removeEventListener('mouseup', danmakuUp);\n document.removeEventListener('mousemove', danmakuMove);\n _this.template.danmakuOpacityBox.classList.remove('dplayer-setting-danmaku-active');\n };\n this.template.danmakuOpacityBarWrapWrap.addEventListener('click', function (event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.danmakuOpacityBarWrap)) / dWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.danmaku.opacity(percentage);\n });\n this.template.danmakuOpacityBarWrapWrap.addEventListener('mousedown', function () {\n document.addEventListener('mousemove', danmakuMove);\n document.addEventListener('mouseup', danmakuUp);\n _this.template.danmakuOpacityBox.classList.add('dplayer-setting-danmaku-active');\n });\n }\n if (this.video.duration !== 1) {\n this.template.dtime.innerHTML = this.video.duration ? _utils2.default.secondToTime(this.video.duration) : '00:00';\n }\n if (!this.danmaku) {\n if (this.options.autoplay && !_utils.isMobile) {\n this.play();\n } else if (_utils.isMobile) {\n this.pause();\n }\n }\n var closeCommentSetting = function closeCommentSetting() {\n if (_this.template.commentSettingBox.classList.contains('dplayer-comment-setting-open')) {\n _this.template.commentSettingBox.classList.remove('dplayer-comment-setting-open');\n }\n };\n var toggleCommentSetting = function toggleCommentSetting() {\n if (_this.template.commentSettingBox.classList.contains('dplayer-comment-setting-open')) {\n _this.template.commentSettingBox.classList.remove('dplayer-comment-setting-open');\n } else {\n _this.template.commentSettingBox.classList.add('dplayer-comment-setting-open');\n }\n };\n var closeComment = function closeComment() {\n if (!_this.template.controller.classList.contains('dplayer-controller-comment')) {\n return;\n }\n _this.template.controller.classList.remove('dplayer-controller-comment');\n _this.template.mask.classList.remove('dplayer-mask-show');\n _this.container.classList.remove('dplayer-show-controller');\n closeCommentSetting();\n _this.disableHideController = false;\n };\n var openComment = function openComment() {\n _this.disableHideController = true;\n if (!_this.template.controller.classList.contains('dplayer-controller-comment')) {\n _this.template.controller.classList.add('dplayer-controller-comment');\n _this.template.mask.classList.add('dplayer-mask-show');\n _this.container.classList.add('dplayer-show-controller');\n _this.template.commentInput.focus();\n }\n };\n this.template.mask.addEventListener('click', function () {\n closeComment();\n });\n this.template.commentButton.addEventListener('click', function () {\n openComment();\n });\n this.template.commentSettingButton.addEventListener('click', function () {\n toggleCommentSetting();\n });\n this.template.commentColorSettingBox.addEventListener('click', function () {\n var sele = _this.template.commentColorSettingBox.querySelector('input:checked+span');\n if (sele) {\n var color = _this.template.commentColorSettingBox.querySelector('input:checked').value;\n _this.template.commentSettingFill.style.fill = color;\n _this.template.commentInput.style.color = color;\n _this.template.commentSendFill.style.fill = color;\n }\n });\n var sendComment = function sendComment() {\n _this.template.commentInput.blur();\n if (!_this.template.commentInput.value.replace(/^\\s+|\\s+$/g, '')) {\n _this.notice(_this.tran('Please input danmaku content!'));\n return;\n }\n _this.danmaku.send({\n text: _this.template.commentInput.value,\n color: _this.container.querySelector('.dplayer-comment-setting-color input:checked').value,\n type: _this.container.querySelector('.dplayer-comment-setting-type input:checked').value\n }, function () {\n _this.template.commentInput.value = '';\n closeComment();\n });\n };\n this.template.commentInput.addEventListener('click', function () {\n closeCommentSetting();\n });\n this.template.commentInput.addEventListener('keydown', function (e) {\n var event = e || window.event;\n if (event.keyCode === 13) {\n sendComment();\n }\n });\n this.template.commentSendButton.addEventListener('click', sendComment);\n this.fullScreen = new _fullscreen2.default(this);\n this.template.browserFullButton.addEventListener('click', function () {\n _this.fullScreen.toggle('browser');\n });\n this.template.webFullButton.addEventListener('click', function () {\n _this.fullScreen.toggle('web');\n });\n var handleKeyDown = function handleKeyDown(e) {\n if (_this.focus) {\n var tag = document.activeElement.tagName.toUpperCase();\n var editable = document.activeElement.getAttribute('contenteditable');\n if (tag !== 'INPUT' && tag !== 'TEXTAREA' && editable !== '' && editable !== 'true') {\n var event = e || window.event;\n var percentage = void 0;\n switch (event.keyCode) {\n case 32:\n event.preventDefault();\n _this.toggle();\n break;\n case 37:\n event.preventDefault();\n _this.seek(_this.video.currentTime - 5);\n hideController();\n break;\n case 39:\n event.preventDefault();\n _this.seek(_this.video.currentTime + 5);\n hideController();\n break;\n case 38:\n event.preventDefault();\n percentage = _this.volume() + 0.1;\n _this.volume(percentage);\n break;\n case 40:\n event.preventDefault();\n percentage = _this.volume() - 0.1;\n _this.volume(percentage);\n break;\n }\n }\n }\n };\n if (this.options.hotkey) {\n document.addEventListener('keydown', handleKeyDown);\n }\n document.addEventListener('keydown', function (e) {\n var event = e || window.event;\n switch (event.keyCode) {\n case 27:\n if (_this.fullScreen.isFullScreen('web')) {\n _this.fullScreen.cancel('web');\n }\n break;\n }\n });\n this.container.addEventListener('contextmenu', function (e) {\n var event = e || window.event;\n event.preventDefault();\n _this.template.menu.classList.add('dplayer-menu-show');\n var clientRect = _this.container.getBoundingClientRect();\n var menuLeft = event.clientX - clientRect.left;\n var menuTop = event.clientY - clientRect.top;\n if (menuLeft + _this.template.menu.offsetWidth >= clientRect.width) {\n _this.template.menu.style.right = clientRect.width - menuLeft + 'px';\n _this.template.menu.style.left = 'initial';\n } else {\n _this.template.menu.style.left = event.clientX - _this.container.getBoundingClientRect().left + 'px';\n _this.template.menu.style.right = 'initial';\n }\n if (menuTop + _this.template.menu.offsetHeight >= clientRect.height) {\n _this.template.menu.style.bottom = clientRect.height - menuTop + 'px';\n _this.template.menu.style.top = 'initial';\n } else {\n _this.template.menu.style.top = event.clientY - _this.container.getBoundingClientRect().top + 'px';\n _this.template.menu.style.bottom = 'initial';\n }\n _this.template.mask.classList.add('dplayer-mask-show');\n _this.events.trigger('contextmenu_show');\n _this.template.mask.addEventListener('click', function () {\n _this.template.mask.classList.remove('dplayer-mask-show');\n _this.template.menu.classList.remove('dplayer-menu-show');\n _this.events.trigger('contextmenu_hide');\n });\n });\n if (this.options.video.quality) {\n this.template.qualityList.addEventListener('click', function (e) {\n if (e.target.classList.contains('dplayer-quality-item')) {\n _this.switchQuality(e.target.dataset.index);\n }\n });\n }\n if (this.options.screenshot) {\n this.template.camareButton.addEventListener('click', function () {\n var canvas = document.createElement('canvas');\n canvas.width = _this.video.videoWidth;\n canvas.height = _this.video.videoHeight;\n canvas.getContext('2d').drawImage(_this.video, 0, 0, canvas.width, canvas.height);\n var dataURL = canvas.toDataURL();\n _this.template.camareButton.href = dataURL;\n _this.template.camareButton.download = 'DPlayer.png';\n _this.events.trigger('screenshot', dataURL);\n });\n }\n if (this.options.subtitle) {\n this.events.on('subtitle_show', function () {\n _this.template.subtitleButton.dataset.balloon = _this.tran('Hide subtitle');\n _this.template.subtitleButtonInner.style.opacity = '';\n _this.user.set('subtitle', 1);\n });\n this.events.on('subtitle_hide', function () {\n _this.template.subtitleButton.dataset.balloon = _this.tran('Show subtitle');\n _this.template.subtitleButtonInner.style.opacity = '0.4';\n _this.user.set('subtitle', 0);\n });\n this.template.subtitleButton.addEventListener('click', function () {\n _this.subtitle.toggle();\n });\n }\n this.initVideo(this.video, this.quality && this.quality.type || this.options.video.type);\n index++;\n instances.push(this);\n }\n _createClass(DPlayer, [\n {\n key: 'seek',\n value: function seek(time) {\n time = Math.max(time, 0);\n if (this.video.duration) {\n time = Math.min(time, this.video.duration);\n }\n if (this.video.currentTime < time) {\n this.notice(this.tran('FF') + ' ' + (time - this.video.currentTime).toFixed(0) + ' ' + this.tran('s'));\n } else if (this.video.currentTime > time) {\n this.notice(this.tran('REW') + ' ' + (this.video.currentTime - time).toFixed(0) + ' ' + this.tran('s'));\n }\n this.video.currentTime = time;\n if (this.danmaku) {\n this.danmaku.seek();\n }\n this.bar.set('played', time / this.video.duration, 'width');\n }\n },\n {\n key: 'play',\n value: function play() {\n this.paused = false;\n if (this.video.paused) {\n this.bezel.switch(this.icons.get('play'));\n }\n this.template.playButton.innerHTML = this.icons.get('pause');\n this.video.play();\n this.time.enable();\n this.container.classList.add('dplayer-playing');\n if (this.danmaku) {\n this.danmaku.play();\n }\n if (this.options.mutex) {\n for (var i = 0; i < instances.length; i++) {\n if (this !== instances[i]) {\n instances[i].pause();\n }\n }\n }\n }\n },\n {\n key: 'pause',\n value: function pause() {\n this.paused = true;\n this.container.classList.remove('dplayer-loading');\n if (!this.video.paused) {\n this.bezel.switch(this.icons.get('pause'));\n }\n this.ended = false;\n this.template.playButton.innerHTML = this.icons.get('play');\n this.video.pause();\n this.time.disable();\n this.container.classList.remove('dplayer-playing');\n if (this.danmaku) {\n this.danmaku.pause();\n }\n }\n },\n {\n key: 'volume',\n value: function volume(percentage, nostorage, nonotice) {\n percentage = parseFloat(percentage);\n if (!isNaN(percentage)) {\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n this.bar.set('volume', percentage, 'width');\n var formatPercentage = (percentage * 100).toFixed(0) + '%';\n this.template.volumeBarWrapWrap.dataset.balloon = formatPercentage;\n if (!nostorage) {\n this.user.set('volume', percentage);\n }\n if (!nonotice) {\n this.notice(this.tran('Volume') + ' ' + (percentage * 100).toFixed(0) + '%');\n }\n this.video.volume = percentage;\n if (this.video.muted) {\n this.video.muted = false;\n }\n this.switchVolumeIcon();\n }\n return this.video.volume;\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.video.paused) {\n this.play();\n } else {\n this.pause();\n }\n }\n },\n {\n key: 'on',\n value: function on(name, callback) {\n this.events.on(name, callback);\n }\n },\n {\n key: 'switchVideo',\n value: function switchVideo(video, danmakuAPI) {\n this.pause();\n this.video.poster = video.pic ? video.pic : '';\n this.video.src = video.url;\n this.initMSE(this.video, video.type || 'auto');\n if (danmakuAPI) {\n this.template.danmakuLoading.style.display = 'block';\n this.bar.set('played', 0, 'width');\n this.bar.set('loaded', 0, 'width');\n this.template.ptime.innerHTML = '00:00';\n this.template.danmaku.innerHTML = '';\n if (this.danmaku) {\n this.danmaku.reload({\n id: danmakuAPI.id,\n address: danmakuAPI.api,\n token: danmakuAPI.token,\n maximum: danmakuAPI.maximum,\n addition: danmakuAPI.addition,\n user: danmakuAPI.user\n });\n }\n }\n }\n },\n {\n key: 'initMSE',\n value: function initMSE(video, type) {\n this.type = type;\n if (this.type === 'auto') {\n if (/m3u8(#|\\?|$)/i.exec(video.src)) {\n this.type = 'hls';\n } else if (/.flv(#|\\?|$)/i.exec(video.src)) {\n this.type = 'flv';\n } else if (/.mpd(#|\\?|$)/i.exec(video.src)) {\n this.type = 'dash';\n } else {\n this.type = 'normal';\n }\n }\n if (this.type === 'hls' && Hls && Hls.isSupported()) {\n var hls = new Hls();\n hls.loadSource(video.src);\n hls.attachMedia(video);\n }\n if (this.type === 'flv' && flvjs && flvjs.isSupported()) {\n var flvPlayer = flvjs.createPlayer({\n type: 'flv',\n url: video.src\n });\n flvPlayer.attachMediaElement(video);\n flvPlayer.load();\n }\n if (this.type === 'dash' && dashjs) {\n dashjs.MediaPlayer().create().initialize(video, video.src, false);\n }\n }\n },\n {\n key: 'initVideo',\n value: function initVideo(video, type) {\n var _this2 = this;\n this.initMSE(video, type);\n this.on('durationchange', function () {\n if (video.duration !== 1) {\n _this2.template.dtime.innerHTML = _utils2.default.secondToTime(video.duration);\n }\n });\n this.on('progress', function () {\n var percentage = video.buffered.length ? video.buffered.end(video.buffered.length - 1) / video.duration : 0;\n _this2.bar.set('loaded', percentage, 'width');\n });\n this.on('error', function () {\n _this2.tran && _this2.notice && _this2.notice(_this2.tran('This video fails to load'), -1);\n });\n this.ended = false;\n this.on('ended', function () {\n _this2.bar.set('played', 1, 'width');\n if (!_this2.loop) {\n _this2.ended = true;\n _this2.pause();\n } else {\n _this2.seek(0);\n video.play();\n }\n if (_this2.danmaku) {\n _this2.danmaku.danIndex = 0;\n }\n });\n this.on('play', function () {\n if (_this2.paused) {\n _this2.play();\n }\n });\n this.on('pause', function () {\n if (!_this2.paused) {\n _this2.pause();\n }\n });\n var _loop2 = function _loop2(i) {\n video.addEventListener(_this2.events.videoEvents[i], function () {\n _this2.events.trigger(_this2.events.videoEvents[i]);\n });\n };\n for (var i = 0; i < this.events.videoEvents.length; i++) {\n _loop2(i);\n }\n this.volume(this.user.get('volume'), true, true);\n if (this.options.subtitle) {\n this.subtitle = new _subtitle2.default(this.template.subtitle, this.video, this.options.subtitle, this.events);\n if (!this.user.get('subtitle')) {\n this.subtitle.hide();\n }\n }\n }\n },\n {\n key: 'switchQuality',\n value: function switchQuality(index) {\n var _this3 = this;\n if (this.qualityIndex === index || this.switchingQuality) {\n return;\n } else {\n this.qualityIndex = index;\n }\n this.switchingQuality = true;\n this.quality = this.options.video.quality[index];\n this.template.qualityButton.innerHTML = this.quality.name;\n var paused = this.video.paused;\n this.video.pause();\n var videoHTML = this.template.tplVideo(false, null, this.options.screenshot, 'auto', this.quality.url, this.options.subtitle);\n var videoEle = new DOMParser().parseFromString(videoHTML, 'text/html').body.firstChild;\n this.template.videoWrap.insertBefore(videoEle, this.template.videoWrap.getElementsByTagName('div')[0]);\n this.prevVideo = this.video;\n this.video = videoEle;\n this.initVideo(this.video, this.quality.type || this.options.video.type);\n this.seek(this.prevVideo.currentTime);\n this.notice(this.tran('Switching to') + ' ' + this.quality.name + ' ' + this.tran('quality'), -1);\n this.events.trigger('quality_start', this.quality);\n this.on('canplay', function () {\n if (_this3.prevVideo) {\n if (_this3.video.currentTime !== _this3.prevVideo.currentTime) {\n _this3.seek(_this3.prevVideo.currentTime);\n return;\n }\n _this3.template.videoWrap.removeChild(_this3.prevVideo);\n _this3.video.classList.add('dplayer-video-current');\n if (!paused) {\n _this3.video.play();\n }\n _this3.prevVideo = null;\n _this3.notice(_this3.tran('Switched to') + ' ' + _this3.quality.name + ' ' + _this3.tran('quality'));\n _this3.switchingQuality = false;\n _this3.events.trigger('quality_end');\n }\n });\n }\n },\n {\n key: 'mouseHandler',\n value: function mouseHandler(pbar, timeTips) {\n var _this4 = this;\n var cumulativeOffset = function cumulativeOffset(element) {\n var top = 0, left = 0;\n do {\n top += element.offsetTop || 0;\n left += element.offsetLeft || 0;\n element = element.offsetParent;\n } while (element);\n return {\n top: top,\n left: left\n };\n };\n return function (e) {\n if (!_this4.video.duration) {\n return;\n }\n var clientX = e.clientX;\n var px = cumulativeOffset(pbar).left;\n var tx = clientX - px;\n if (tx < 0 || tx > pbar.offsetWidth) {\n return;\n }\n var time = _this4.video.duration * (tx / pbar.offsetWidth);\n timeTips.style.left = tx - 20 + 'px';\n switch (e.type) {\n case 'mouseenter':\n _this4.thumbnails && _this4.thumbnails.show();\n break;\n case 'mousemove':\n _this4.thumbnails && _this4.thumbnails.move(tx);\n timeTips.innerText = _utils2.default.secondToTime(time);\n _this4.timeTipsDisplay(true, timeTips);\n break;\n case 'mouseleave':\n _this4.thumbnails && _this4.thumbnails.hide();\n _this4.timeTipsDisplay(false, timeTips);\n break;\n }\n };\n }\n },\n {\n key: 'timeTipsDisplay',\n value: function timeTipsDisplay(show, timeTips) {\n if (show) {\n if (this.isTimeTipsShow) {\n return;\n }\n timeTips.classList.remove('hidden');\n this.isTimeTipsShow = true;\n } else {\n if (!this.isTimeTipsShow) {\n return;\n }\n timeTips.classList.add('hidden');\n this.isTimeTipsShow = false;\n }\n }\n },\n {\n key: 'initThumbnails',\n value: function initThumbnails() {\n var _this5 = this;\n this.thumbnails = new _thumbnails2.default(this.template.barPreview, this.template.barWrap.offsetWidth, this.options.video.thumbnails, this.events);\n this.on('loadedmetadata', function () {\n _this5.thumbnails.resize(160, 90);\n });\n }\n },\n {\n key: 'notice',\n value: function notice(text) {\n var _this6 = this;\n var time = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2000;\n var opacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.8;\n this.template.notice.innerHTML = text;\n this.template.notice.style.opacity = opacity;\n if (this.noticeTime) {\n clearTimeout(this.noticeTime);\n }\n this.events.trigger('notice_show', text);\n this.noticeTime = setTimeout(function () {\n _this6.template.notice.style.opacity = 0;\n _this6.events.trigger('notice_hide');\n }, time);\n }\n },\n {\n key: 'resize',\n value: function resize() {\n if (this.danmaku) {\n this.danmaku.resize();\n }\n this.events.trigger('resize');\n }\n },\n {\n key: 'destroy',\n value: function destroy() {\n instances.splice(instances.indexOf(this), 1);\n this.pause();\n clearTimeout(this.hideTime);\n this.time.destroy();\n this.video.src = '';\n this.container.innerHTML = '';\n this.events.trigger('destroy');\n for (var key in this) {\n if (this.hasOwnProperty(key) && key !== 'paused') {\n delete this[key];\n }\n }\n }\n }\n ]);\n return DPlayer;\n}();\nmodule.exports = DPlayer;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar defaultApiBackend = __webpack_require__(5);\nmodule.exports = function (options) {\n var isMobile = /mobile/i.test(window.navigator.userAgent);\n if (isMobile) {\n options.autoplay = false;\n }\n var defaultOption = {\n container: options.element || document.getElementsByClassName('dplayer')[0],\n live: false,\n autoplay: false,\n theme: '#b7daff',\n loop: false,\n lang: (navigator.language || navigator.browserLanguage).toLowerCase(),\n screenshot: false,\n hotkey: true,\n preload: 'auto',\n volume: 0.7,\n apiBackend: defaultApiBackend,\n video: {},\n icons: {\n play: [\n '0 0 16 32',\n 'M15.552 15.168q0.448 0.32 0.448 0.832 0 0.448-0.448 0.768l-13.696 8.512q-0.768 0.512-1.312 0.192t-0.544-1.28v-16.448q0-0.96 0.544-1.28t1.312 0.192z'\n ],\n pause: [\n '0 0 17 32',\n 'M14.080 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048zM2.88 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048z'\n ],\n 'volume-up': [\n '0 0 21 32',\n 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528zM25.152 16q0 2.72-1.536 5.056t-4 3.36q-0.256 0.096-0.448 0.096-0.48 0-0.832-0.352t-0.32-0.8q0-0.704 0.672-1.056 1.024-0.512 1.376-0.8 1.312-0.96 2.048-2.4t0.736-3.104-0.736-3.104-2.048-2.4q-0.352-0.288-1.376-0.8-0.672-0.352-0.672-1.056 0-0.448 0.32-0.8t0.8-0.352q0.224 0 0.48 0.096 2.496 1.056 4 3.36t1.536 5.056z'\n ],\n 'volume-down': [\n '0 0 21 32',\n 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528z'\n ],\n 'volume-off': [\n '0 0 21 32',\n 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8z'\n ],\n loop: [\n '0 0 32 32',\n 'M1.882 16.941c0 4.152 3.221 7.529 7.177 7.529v1.882c-4.996 0-9.060-4.222-9.060-9.412s4.064-9.412 9.060-9.412h7.96l-3.098-3.098 1.331-1.331 5.372 5.37-5.37 5.372-1.333-1.333 3.1-3.098h-7.962c-3.957 0-7.177 3.377-7.177 7.529zM22.94 7.529v1.882c3.957 0 7.177 3.377 7.177 7.529s-3.221 7.529-7.177 7.529h-7.962l3.098-3.098-1.331-1.331-5.37 5.37 5.372 5.372 1.331-1.331-3.1-3.1h7.96c4.998 0 9.062-4.222 9.062-9.412s-4.064-9.412-9.060-9.412z'\n ],\n full: [\n '0 0 32 33',\n 'M6.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v4h4c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333zM30.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h4v-4c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM30.667 12c-0.8 0-1.333-0.533-1.333-1.333v-4h-4c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM1.333 12c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333h-4v4c0 0.8-0.533 1.333-1.333 1.333z'\n ],\n 'full-in': [\n '0 0 32 33',\n 'M24.965 24.38h-18.132c-1.366 0-2.478-1.113-2.478-2.478v-11.806c0-1.364 1.111-2.478 2.478-2.478h18.132c1.366 0 2.478 1.113 2.478 2.478v11.806c0 1.364-1.11 2.478-2.478 2.478zM6.833 10.097v11.806h18.134l-0.002-11.806h-18.132zM2.478 28.928h5.952c0.684 0 1.238-0.554 1.238-1.239 0-0.684-0.554-1.238-1.238-1.238h-5.952v-5.802c0-0.684-0.554-1.239-1.238-1.239s-1.239 0.556-1.239 1.239v5.802c0 1.365 1.111 2.478 2.478 2.478zM30.761 19.412c-0.684 0-1.238 0.554-1.238 1.238v5.801h-5.951c-0.686 0-1.239 0.554-1.239 1.238 0 0.686 0.554 1.239 1.239 1.239h5.951c1.366 0 2.478-1.111 2.478-2.478v-5.801c0-0.683-0.554-1.238-1.239-1.238zM0 5.55v5.802c0 0.683 0.554 1.238 1.238 1.238s1.238-0.555 1.238-1.238v-5.802h5.952c0.684 0 1.238-0.554 1.238-1.238s-0.554-1.238-1.238-1.238h-5.951c-1.366-0.001-2.478 1.111-2.478 2.476zM32 11.35v-5.801c0-1.365-1.11-2.478-2.478-2.478h-5.951c-0.686 0-1.239 0.554-1.239 1.238s0.554 1.238 1.239 1.238h5.951v5.801c0 0.683 0.554 1.237 1.238 1.237 0.686 0.002 1.239-0.553 1.239-1.236z'\n ],\n setting: [\n '0 0 32 28',\n 'M28.633 17.104c0.035 0.21 0.026 0.463-0.026 0.76s-0.14 0.598-0.262 0.904c-0.122 0.306-0.271 0.581-0.445 0.825s-0.367 0.419-0.576 0.524c-0.209 0.105-0.393 0.157-0.55 0.157s-0.332-0.035-0.524-0.105c-0.175-0.052-0.393-0.1-0.655-0.144s-0.528-0.052-0.799-0.026c-0.271 0.026-0.541 0.083-0.812 0.17s-0.502 0.236-0.694 0.445c-0.419 0.437-0.664 0.934-0.734 1.493s0.009 1.092 0.236 1.598c0.175 0.349 0.148 0.699-0.079 1.048-0.105 0.14-0.271 0.284-0.498 0.432s-0.476 0.284-0.747 0.406-0.555 0.218-0.851 0.288c-0.297 0.070-0.559 0.105-0.786 0.105-0.157 0-0.306-0.061-0.445-0.183s-0.236-0.253-0.288-0.393h-0.026c-0.192-0.541-0.52-1.009-0.982-1.402s-1-0.589-1.611-0.589c-0.594 0-1.131 0.197-1.611 0.589s-0.816 0.851-1.009 1.375c-0.087 0.21-0.218 0.362-0.393 0.458s-0.367 0.144-0.576 0.144c-0.244 0-0.52-0.044-0.825-0.131s-0.611-0.197-0.917-0.327c-0.306-0.131-0.581-0.284-0.825-0.458s-0.428-0.349-0.55-0.524c-0.087-0.122-0.135-0.266-0.144-0.432s0.057-0.397 0.197-0.694c0.192-0.402 0.266-0.86 0.223-1.375s-0.266-0.991-0.668-1.428c-0.244-0.262-0.541-0.432-0.891-0.511s-0.681-0.109-0.995-0.092c-0.367 0.017-0.742 0.087-1.127 0.21-0.244 0.070-0.489 0.052-0.734-0.052-0.192-0.070-0.371-0.231-0.537-0.485s-0.314-0.533-0.445-0.838c-0.131-0.306-0.231-0.62-0.301-0.943s-0.087-0.59-0.052-0.799c0.052-0.384 0.227-0.629 0.524-0.734 0.524-0.21 0.995-0.555 1.415-1.035s0.629-1.017 0.629-1.611c0-0.611-0.21-1.144-0.629-1.598s-0.891-0.786-1.415-0.996c-0.157-0.052-0.288-0.179-0.393-0.38s-0.157-0.406-0.157-0.616c0-0.227 0.035-0.48 0.105-0.76s0.162-0.55 0.275-0.812 0.244-0.502 0.393-0.72c0.148-0.218 0.31-0.38 0.485-0.485 0.14-0.087 0.275-0.122 0.406-0.105s0.275 0.052 0.432 0.105c0.524 0.21 1.070 0.275 1.637 0.197s1.070-0.327 1.506-0.747c0.21-0.209 0.362-0.467 0.458-0.773s0.157-0.607 0.183-0.904c0.026-0.297 0.026-0.568 0-0.812s-0.048-0.419-0.065-0.524c-0.035-0.105-0.066-0.227-0.092-0.367s-0.013-0.262 0.039-0.367c0.105-0.244 0.293-0.458 0.563-0.642s0.563-0.336 0.878-0.458c0.314-0.122 0.62-0.214 0.917-0.275s0.533-0.092 0.707-0.092c0.227 0 0.406 0.074 0.537 0.223s0.223 0.301 0.275 0.458c0.192 0.471 0.507 0.886 0.943 1.244s0.952 0.537 1.546 0.537c0.611 0 1.153-0.17 1.624-0.511s0.803-0.773 0.996-1.297c0.070-0.14 0.179-0.284 0.327-0.432s0.301-0.223 0.458-0.223c0.244 0 0.511 0.035 0.799 0.105s0.572 0.166 0.851 0.288c0.279 0.122 0.537 0.279 0.773 0.472s0.423 0.402 0.563 0.629c0.087 0.14 0.113 0.293 0.079 0.458s-0.070 0.284-0.105 0.354c-0.227 0.506-0.297 1.039-0.21 1.598s0.341 1.048 0.76 1.467c0.419 0.419 0.934 0.651 1.546 0.694s1.179-0.057 1.703-0.301c0.14-0.087 0.31-0.122 0.511-0.105s0.371 0.096 0.511 0.236c0.262 0.244 0.493 0.616 0.694 1.113s0.336 1 0.406 1.506c0.035 0.297-0.013 0.528-0.144 0.694s-0.266 0.275-0.406 0.327c-0.542 0.192-1.004 0.528-1.388 1.009s-0.576 1.026-0.576 1.637c0 0.594 0.162 1.113 0.485 1.559s0.747 0.764 1.27 0.956c0.122 0.070 0.227 0.14 0.314 0.21 0.192 0.157 0.323 0.358 0.393 0.602v0zM16.451 19.462c0.786 0 1.528-0.149 2.227-0.445s1.305-0.707 1.821-1.231c0.515-0.524 0.921-1.131 1.218-1.821s0.445-1.428 0.445-2.214c0-0.786-0.148-1.524-0.445-2.214s-0.703-1.292-1.218-1.808c-0.515-0.515-1.122-0.921-1.821-1.218s-1.441-0.445-2.227-0.445c-0.786 0-1.524 0.148-2.214 0.445s-1.292 0.703-1.808 1.218c-0.515 0.515-0.921 1.118-1.218 1.808s-0.445 1.428-0.445 2.214c0 0.786 0.149 1.524 0.445 2.214s0.703 1.297 1.218 1.821c0.515 0.524 1.118 0.934 1.808 1.231s1.428 0.445 2.214 0.445v0z'\n ],\n right: [\n '0 0 32 32',\n 'M22 16l-10.105-10.6-1.895 1.987 8.211 8.613-8.211 8.612 1.895 1.988 8.211-8.613z'\n ],\n comment: [\n '0 0 32 32',\n 'M27.128 0.38h-22.553c-2.336 0-4.229 1.825-4.229 4.076v16.273c0 2.251 1.893 4.076 4.229 4.076h4.229v-2.685h8.403l-8.784 8.072 1.566 1.44 7.429-6.827h9.71c2.335 0 4.229-1.825 4.229-4.076v-16.273c0-2.252-1.894-4.076-4.229-4.076zM28.538 19.403c0 1.5-1.262 2.717-2.819 2.717h-8.36l-0.076-0.070-0.076 0.070h-11.223c-1.557 0-2.819-1.217-2.819-2.717v-13.589c0-1.501 1.262-2.718 2.819-2.718h19.734c1.557 0 2.819-0.141 2.819 1.359v14.947zM9.206 10.557c-1.222 0-2.215 0.911-2.215 2.036s0.992 2.035 2.215 2.035c1.224 0 2.216-0.911 2.216-2.035s-0.992-2.036-2.216-2.036zM22.496 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.224 0 2.215-0.911 2.215-2.035s-0.991-2.036-2.215-2.036zM15.852 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.222 0 2.215-0.911 2.215-2.035s-0.992-2.036-2.215-2.036z'\n ],\n 'comment-off': [\n '0 0 32 32',\n 'M27.090 0.131h-22.731c-2.354 0-4.262 1.839-4.262 4.109v16.401c0 2.269 1.908 4.109 4.262 4.109h4.262v-2.706h8.469l-8.853 8.135 1.579 1.451 7.487-6.88h9.787c2.353 0 4.262-1.84 4.262-4.109v-16.401c0-2.27-1.909-4.109-4.262-4.109v0zM28.511 19.304c0 1.512-1.272 2.738-2.841 2.738h-8.425l-0.076-0.070-0.076 0.070h-11.311c-1.569 0-2.841-1.226-2.841-2.738v-13.696c0-1.513 1.272-2.739 2.841-2.739h19.889c1.569 0 2.841-0.142 2.841 1.37v15.064z'\n ],\n send: [\n '0 0 32 32',\n 'M13.725 30l3.9-5.325-3.9-1.125v6.45zM0 17.5l11.050 3.35 13.6-11.55-10.55 12.425 11.8 3.65 6.1-23.375-32 15.5z'\n ],\n pallette: [\n '0 0 32 32',\n 'M19.357 2.88c1.749 0 3.366 0.316 4.851 0.946 1.485 0.632 2.768 1.474 3.845 2.533s1.922 2.279 2.532 3.661c0.611 1.383 0.915 2.829 0.915 4.334 0 1.425-0.304 2.847-0.915 4.271-0.611 1.425-1.587 2.767-2.928 4.028-0.855 0.813-1.811 1.607-2.869 2.38s-2.136 1.465-3.233 2.075c-1.099 0.61-2.198 1.098-3.296 1.465-1.098 0.366-2.115 0.549-3.051 0.549-1.343 0-2.441-0.438-3.296-1.311-0.854-0.876-1.281-2.41-1.281-4.608 0-0.366 0.020-0.773 0.060-1.221s0.062-0.895 0.062-1.343c0-0.773-0.183-1.353-0.55-1.738-0.366-0.387-0.793-0.58-1.281-0.58-0.652 0-1.21 0.295-1.678 0.886s-0.926 1.23-1.373 1.921c-0.447 0.693-0.905 1.334-1.372 1.923s-1.028 0.886-1.679 0.886c-0.529 0-1.048-0.427-1.556-1.282s-0.763-2.259-0.763-4.212c0-2.197 0.529-4.241 1.587-6.133s2.462-3.529 4.21-4.912c1.75-1.383 3.762-2.471 6.041-3.264 2.277-0.796 4.617-1.212 7.018-1.253zM7.334 15.817c0.569 0 1.047-0.204 1.434-0.611s0.579-0.875 0.579-1.404c0-0.569-0.193-1.047-0.579-1.434s-0.864-0.579-1.434-0.579c-0.529 0-0.987 0.193-1.373 0.579s-0.58 0.864-0.58 1.434c0 0.53 0.194 0.998 0.58 1.404 0.388 0.407 0.845 0.611 1.373 0.611zM12.216 11.79c0.691 0 1.292-0.254 1.8-0.763s0.762-1.107 0.762-1.8c0-0.732-0.255-1.343-0.762-1.831-0.509-0.489-1.109-0.732-1.8-0.732-0.732 0-1.342 0.244-1.831 0.732-0.488 0.488-0.732 1.098-0.732 1.831 0 0.693 0.244 1.292 0.732 1.8s1.099 0.763 1.831 0.763zM16.366 25.947c0.692 0 1.282-0.214 1.77-0.64s0.732-0.987 0.732-1.678-0.244-1.261-0.732-1.709c-0.489-0.448-1.078-0.671-1.77-0.671-0.65 0-1.21 0.223-1.678 0.671s-0.702 1.018-0.702 1.709c0 0.692 0.234 1.25 0.702 1.678s1.027 0.64 1.678 0.64zM19.113 9.592c0.651 0 1.129-0.203 1.433-0.611 0.305-0.406 0.459-0.874 0.459-1.404 0-0.488-0.154-0.947-0.459-1.373-0.304-0.427-0.782-0.641-1.433-0.641-0.529 0-1.008 0.193-1.434 0.58s-0.64 0.865-0.64 1.434c0 0.571 0.213 1.049 0.64 1.434 0.427 0.389 0.905 0.581 1.434 0.581zM24.848 12.826c0.57 0 1.067-0.213 1.495-0.64 0.427-0.427 0.64-0.947 0.64-1.556 0-0.57-0.214-1.068-0.64-1.495-0.428-0.427-0.927-0.64-1.495-0.64-0.611 0-1.129 0.213-1.555 0.64-0.428 0.427-0.642 0.926-0.642 1.495 0 0.611 0.213 1.129 0.642 1.556s0.947 0.64 1.555 0.64z'\n ],\n camera: [\n '0 0 32 32',\n 'M16 23c-3.309 0-6-2.691-6-6s2.691-6 6-6 6 2.691 6 6-2.691 6-6 6zM16 13c-2.206 0-4 1.794-4 4s1.794 4 4 4c2.206 0 4-1.794 4-4s-1.794-4-4-4zM27 28h-22c-1.654 0-3-1.346-3-3v-16c0-1.654 1.346-3 3-3h3c0.552 0 1 0.448 1 1s-0.448 1-1 1h-3c-0.551 0-1 0.449-1 1v16c0 0.552 0.449 1 1 1h22c0.552 0 1-0.448 1-1v-16c0-0.551-0.448-1-1-1h-11c-0.552 0-1-0.448-1-1s0.448-1 1-1h11c1.654 0 3 1.346 3 3v16c0 1.654-1.346 3-3 3zM24 10.5c0 0.828 0.672 1.5 1.5 1.5s1.5-0.672 1.5-1.5c0-0.828-0.672-1.5-1.5-1.5s-1.5 0.672-1.5 1.5zM15 4c0 0.552-0.448 1-1 1h-4c-0.552 0-1-0.448-1-1v0c0-0.552 0.448-1 1-1h4c0.552 0 1 0.448 1 1v0z'\n ],\n subtitle: [\n '0 0 32 32',\n 'M26.667 5.333h-21.333c-0 0-0.001 0-0.001 0-1.472 0-2.666 1.194-2.666 2.666 0 0 0 0.001 0 0.001v-0 16c0 0 0 0.001 0 0.001 0 1.472 1.194 2.666 2.666 2.666 0 0 0.001 0 0.001 0h21.333c0 0 0.001 0 0.001 0 1.472 0 2.666-1.194 2.666-2.666 0-0 0-0.001 0-0.001v0-16c0-0 0-0.001 0-0.001 0-1.472-1.194-2.666-2.666-2.666-0 0-0.001 0-0.001 0h0zM5.333 16h5.333v2.667h-5.333v-2.667zM18.667 24h-13.333v-2.667h13.333v2.667zM26.667 24h-5.333v-2.667h5.333v2.667zM26.667 18.667h-13.333v-2.667h13.333v2.667z'\n ]\n },\n iconsColor: '#ffffff',\n contextmenu: [],\n mutex: true\n };\n for (var defaultKey in defaultOption) {\n if (defaultOption.hasOwnProperty(defaultKey) && !options.hasOwnProperty(defaultKey)) {\n options[defaultKey] = defaultOption[defaultKey];\n }\n }\n if (options.video) {\n !options.video.type && (options.video.type = 'auto');\n }\n if (_typeof(options.danmaku) === 'object' && options.danmaku) {\n !options.danmaku.user && (options.danmaku.user = 'DIYgod');\n }\n if (options.subtitle) {\n !options.subtitle.type && (options.subtitle.type = 'webvtt');\n !options.subtitle.fontSize && (options.subtitle.fontSize = '20px');\n !options.subtitle.bottom && (options.subtitle.bottom = '40px');\n !options.subtitle.color && (options.subtitle.color = '#fff');\n }\n if (options.video.quality) {\n options.video.url = [options.video.quality[options.video.defaultQuality].url];\n }\n if (options.lang) {\n options.lang = options.lang.toLowerCase();\n }\n if (options.icons) {\n options.icons = Object.assign({}, defaultOption.icons, options.icons);\n }\n options.contextmenu = options.contextmenu.concat([\n {\n text: 'About author',\n link: 'https://diygod.me'\n },\n {\n text: 'About DPlayer',\n link: 'https://github.com/MoePlayer/DPlayer'\n },\n {\n text: 'DPlayer feedback',\n link: 'https://github.com/DIYgod/DPlayer/issues'\n },\n {\n text: 'DPlayer ' + \"1.17.2\" + ' ' + \"49535a9\",\n link: 'https://github.com/MoePlayer/DPlayer/releases'\n }\n ]);\n return options;\n};\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar SendXMLHttpRequest = function SendXMLHttpRequest(url, data, success, error, fail) {\n var xhr = new XMLHttpRequest();\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {\n var response = JSON.parse(xhr.responseText);\n if (response.code !== 1) {\n return error(xhr, response);\n }\n return success(xhr, response);\n }\n fail(xhr);\n }\n };\n xhr.open(data !== null ? 'POST' : 'GET', url, true);\n xhr.send(data !== null ? JSON.stringify(data) : null);\n};\nmodule.exports = {\n send: function send(endpoint, danmakuData, callback) {\n SendXMLHttpRequest(endpoint, danmakuData, function (xhr, response) {\n console.log('Post danmaku: ', response);\n if (callback) {\n callback();\n }\n }, function (xhr, response) {\n alert(response.msg);\n }, function (xhr) {\n console.log('Request was unsuccessful: ' + xhr.status);\n });\n },\n read: function read(endpoint, callback) {\n SendXMLHttpRequest(endpoint, null, function (xhr, response) {\n callback(null, response.danmaku);\n }, function (xhr, response) {\n callback({\n status: xhr.status,\n response: response\n });\n }, function (xhr) {\n callback({\n status: xhr.status,\n response: null\n });\n });\n }\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nmodule.exports = function (lang) {\n var _this = this;\n this.lang = lang;\n this.tran = function (text) {\n if (tranTxt[_this.lang] && tranTxt[_this.lang][text]) {\n return tranTxt[_this.lang][text];\n } else {\n return text;\n }\n };\n};\nvar tranTxt = {\n 'zh-cn': {\n 'Danmaku is loading': '弹幕加载中',\n 'Top': '顶部',\n 'Bottom': '底部',\n 'Rolling': '滚动',\n 'Input danmaku, hit Enter': '输入弹幕\\uFF0C回车发送',\n 'About author': '关于作者',\n 'DPlayer feedback': '播放器意见反馈',\n 'About DPlayer': '关于 DPlayer 播放器',\n 'Loop': '洗脑循环',\n 'Speed': '速度',\n 'Opacity for danmaku': '弹幕透明度',\n 'Normal': '正常',\n 'Please input danmaku content!': '要输入弹幕内容啊喂\\uFF01',\n 'Set danmaku color': '设置弹幕颜色',\n 'Set danmaku type': '设置弹幕类型',\n 'Show danmaku': '显示弹幕',\n 'This video fails to load': '视频加载失败',\n 'Switching to': '正在切换至',\n 'Switched to': '已经切换至',\n 'quality': '画质',\n 'FF': '快进',\n 'REW': '快退',\n 'Unlimited danmaku': '海量弹幕',\n 'Send danmaku': '发送弹幕',\n 'Setting': '设置',\n 'Full screen': '全屏',\n 'Web full screen': '页面全屏',\n 'Send': '发送',\n 'Screenshot': '截图',\n 's': '秒',\n 'Show subtitle': '显示字幕',\n 'Hide subtitle': '隐藏字幕',\n 'Volume': '音量',\n 'Live': '直播'\n },\n 'zh-tw': {\n 'Danmaku is loading': '彈幕加載中',\n 'Top': '頂部',\n 'Bottom': '底部',\n 'Rolling': '滾動',\n 'Input danmaku, hit Enter': '輸入彈幕\\uFF0CEnter 發送',\n 'About author': '關於作者',\n 'DPlayer feedback': '播放器意見反饋',\n 'About DPlayer': '關於 DPlayer 播放器',\n 'Loop': '循環播放',\n 'Speed': '速度',\n 'Opacity for danmaku': '彈幕透明度',\n 'Normal': '正常',\n 'Please input danmaku content!': '請輸入彈幕内容啊\\uFF01',\n 'Set danmaku color': '設置彈幕顏色',\n 'Set danmaku type': '設置彈幕類型',\n 'Show danmaku': '顯示彈幕',\n 'This video fails to load': '視頻加載失敗',\n 'Switching to': '正在切換至',\n 'Switched to': '已經切換至',\n 'quality': '畫質',\n 'FF': '快進',\n 'REW': '快退',\n 'Unlimited danmaku': '海量彈幕',\n 'Send danmaku': '發送彈幕',\n 'Setting': '設置',\n 'Full screen': '全屏',\n 'Web full screen': '頁面全屏',\n 'Send': '發送',\n 'Screenshot': '截圖',\n 's': '秒',\n 'Show subtitle': '顯示字幕',\n 'Hide subtitle': '隱藏字幕',\n 'Volume': '音量',\n 'Live': '直播'\n }\n};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Template = function () {\n function Template(options) {\n _classCallCheck(this, Template);\n this.container = options.container;\n this.options = options.options;\n this.index = options.index;\n this.tran = options.tran;\n this.icons = options.icons;\n this.init();\n }\n _createClass(Template, [\n {\n key: 'init',\n value: function init() {\n this.container.innerHTML = this.tpl(this.options, this.index, this.tran, this.icons);\n this.volumeBar = this.container.querySelector('.dplayer-volume-bar-inner');\n this.volumeBarWrap = this.container.querySelector('.dplayer-volume-bar');\n this.volumeBarWrapWrap = this.container.querySelector('.dplayer-volume-bar-wrap');\n this.volumeButton = this.container.querySelector('.dplayer-volume');\n this.volumeIcon = this.container.querySelector('.dplayer-volume-icon .dplayer-icon-content');\n this.playedBar = this.container.querySelector('.dplayer-played');\n this.loadedBar = this.container.querySelector('.dplayer-loaded');\n this.playedBarWrap = this.container.querySelector('.dplayer-bar-wrap');\n this.playedBarTime = this.container.querySelector('.dplayer-bar-time');\n this.danmaku = this.container.querySelector('.dplayer-danmaku');\n this.danmakuLoading = this.container.querySelector('.dplayer-danloading');\n this.video = this.container.querySelector('.dplayer-video-current');\n this.bezel = this.container.querySelector('.dplayer-bezel-icon');\n this.playButton = this.container.querySelector('.dplayer-play-icon');\n this.videoWrap = this.container.querySelector('.dplayer-video-wrap');\n this.controllerMask = this.container.querySelector('.dplayer-controller-mask');\n this.ptime = this.container.querySelector('.dplayer-ptime');\n this.settingButton = this.container.querySelector('.dplayer-setting-icon');\n this.settingBox = this.container.querySelector('.dplayer-setting-box');\n this.mask = this.container.querySelector('.dplayer-mask');\n this.loop = this.container.querySelector('.dplayer-setting-loop');\n this.loopToggle = this.container.querySelector('.dplayer-setting-loop .dplayer-toggle-setting-input');\n this.showDanmaku = this.container.querySelector('.dplayer-setting-showdan');\n this.showDanmakuToggle = this.container.querySelector('.dplayer-showdan-setting-input');\n this.unlimitDanmaku = this.container.querySelector('.dplayer-setting-danunlimit');\n this.unlimitDanmakuToggle = this.container.querySelector('.dplayer-danunlimit-setting-input');\n this.speed = this.container.querySelector('.dplayer-setting-speed');\n this.speedItem = this.container.querySelectorAll('dplayer-setting-speed-item');\n this.danmakuOpacityBar = this.container.querySelector('.dplayer-danmaku-bar-inner');\n this.danmakuOpacityBarWrap = this.container.querySelector('.dplayer-danmaku-bar');\n this.danmakuOpacityBarWrapWrap = this.container.querySelector('.dplayer-danmaku-bar-wrap');\n this.danmakuOpacityBox = this.container.querySelector('.dplayer-setting-danmaku');\n this.dtime = this.container.querySelector('.dplayer-dtime');\n this.controller = this.container.querySelector('.dplayer-controller');\n this.commentInput = this.container.querySelector('.dplayer-comment-input');\n this.commentButton = this.container.querySelector('.dplayer-comment-icon');\n this.commentSettingBox = this.container.querySelector('.dplayer-comment-setting-box');\n this.commentSettingButton = this.container.querySelector('.dplayer-comment-setting-icon');\n this.commentSettingFill = this.container.querySelector('.dplayer-comment-setting-icon .dplayer-fill');\n this.commentSendButton = this.container.querySelector('.dplayer-send-icon');\n this.commentSendFill = this.container.querySelector('.dplayer-send-icon .dplayer-fill');\n this.commentColorSettingBox = this.container.querySelector('.dplayer-comment-setting-color');\n this.browserFullButton = this.container.querySelector('.dplayer-full-icon');\n this.webFullButton = this.container.querySelector('.dplayer-full-in-icon');\n this.menu = this.container.querySelector('.dplayer-menu');\n this.qualityList = this.container.querySelector('.dplayer-quality-list');\n this.camareButton = this.container.querySelector('.dplayer-camera-icon');\n this.subtitleButton = this.container.querySelector('.dplayer-subtitle-icon');\n this.subtitleButtonInner = this.container.querySelector('.dplayer-subtitle-icon .dplayer-icon-content');\n this.subtitle = this.container.querySelector('.dplayer-subtitle');\n this.qualityButton = this.container.querySelector('.dplayer-quality-icon');\n this.barPreview = this.container.querySelector('.dplayer-bar-preview');\n this.barWrap = this.container.querySelector('.dplayer-bar-wrap');\n this.notice = this.container.querySelector('.dplayer-notice');\n }\n },\n {\n key: 'tpl',\n value: function tpl(options, index, tran, icons) {\n return '
' + this.tplVideo(true, options.video.pic, options.screenshot, options.preload, options.video.url, options.subtitle) + '' + (options.logo ? '
' : '') + '
' + (options.danmaku ? '' + tran('Danmaku is loading') + '' : '') + '
' + tran('Set danmaku color') + '
' + tran('Set danmaku type') + '
0:00 / 0:00' + (options.live ? '' + tran('Live') + '' : '') + '
' + (options.video.quality ? '
' + this.tplQualityList(options.video.quality) + '
' : '') + '' + (options.screenshot ? '' + icons.get('camera') + '' : '') + '
' + (options.subtitle ? '
' : '') + '
' + tran('Speed') + '
' + icons.get('right') + '
' + tran('Loop') + '
' + tran('Show danmaku') + '
' + tran('Unlimited danmaku') + '
' + tran('Opacity for danmaku') + '
0.5
0.75
' + tran('Normal') + '
1.25
1.5
2
00:00
' + this.tplContextmenuList(options.contextmenu, tran) + '
';\n }\n },\n {\n key: 'tplDanmakumargin',\n value: function tplDanmakumargin(margin) {\n var result = '';\n if (margin) {\n for (var key in margin) {\n result += key + ':' + margin[key] + ';';\n }\n }\n return result;\n }\n },\n {\n key: 'tplContextmenuList',\n value: function tplContextmenuList(contextmenu, tran) {\n var result = '
';\n for (var i = 0; i < contextmenu.length; i++) {\n result += '';\n }\n result += '
';\n return result;\n }\n },\n {\n key: 'tplQualityList',\n value: function tplQualityList(quality) {\n var result = '
';\n for (var i = 0; i < quality.length; i++) {\n result += '
' + quality[i].name + '
';\n }\n result += '
';\n return result;\n }\n },\n {\n key: 'tplVideo',\n value: function tplVideo(current, pic, screenshot, preload, url, subtitle) {\n var enableSubtitle = subtitle && subtitle.type === 'webvtt';\n return '';\n }\n }\n ]);\n return Template;\n}();\nmodule.exports = Template;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar SvgSource = function () {\n function SvgSource(options) {\n _classCallCheck(this, SvgSource);\n this.icons = options.icons;\n this.iconColor = options.iconsColor;\n }\n _createClass(SvgSource, [{\n key: 'get',\n value: function get(type) {\n return '';\n }\n }]);\n return SvgSource;\n}();\nmodule.exports = SvgSource;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Danmaku = function () {\n function Danmaku(options) {\n _classCallCheck(this, Danmaku);\n this.options = options;\n this.container = this.options.container;\n this.danTunnel = {\n right: {},\n top: {},\n bottom: {}\n };\n this.danIndex = 0;\n this.dan = [];\n this.showing = true;\n this._opacity = this.options.opacity;\n this.events = this.options.events;\n this.unlimited = this.options.unlimited;\n this._measure('');\n this.load();\n }\n _createClass(Danmaku, [\n {\n key: 'load',\n value: function load() {\n var _this = this;\n var apiurl = void 0;\n if (this.options.api.maximum) {\n apiurl = this.options.api.address + '?id=' + this.options.api.id + '&max=' + this.options.api.maximum;\n } else {\n apiurl = this.options.api.address + '?id=' + this.options.api.id;\n }\n var endpoints = (this.options.api.addition || []).slice(0);\n endpoints.push(apiurl);\n this.events && this.events.trigger('danmaku_load_start', endpoints);\n this._readAllEndpoints(endpoints, function (results) {\n _this.dan = [].concat.apply([], results).sort(function (a, b) {\n return a.time - b.time;\n });\n window.requestAnimationFrame(function () {\n _this.frame();\n });\n _this.options.callback();\n _this.events && _this.events.trigger('danmaku_load_end');\n });\n }\n },\n {\n key: 'reload',\n value: function reload(newAPI) {\n this.options.api = newAPI;\n this.dan = [];\n this.clear();\n this.load();\n }\n },\n {\n key: '_readAllEndpoints',\n value: function _readAllEndpoints(endpoints, callback) {\n var _this2 = this;\n var results = [];\n var readCount = 0;\n var cbk = function cbk(i) {\n return function (err, data) {\n ++readCount;\n if (err) {\n if (err.response) {\n _this2.options.error(err.response.msg);\n } else {\n _this2.options.error('Request was unsuccessful: ' + err.status);\n }\n results[i] = [];\n } else {\n results[i] = data;\n }\n if (readCount === endpoints.length) {\n return callback(results);\n }\n };\n };\n for (var i = 0; i < endpoints.length; ++i) {\n this.options.apiBackend.read(endpoints[i], cbk(i));\n }\n }\n },\n {\n key: 'send',\n value: function send(dan, callback) {\n var danmakuData = {\n token: this.options.api.token,\n player: this.options.api.id,\n author: this.options.api.user,\n time: this.options.time(),\n text: dan.text,\n color: dan.color,\n type: dan.type\n };\n this.options.apiBackend.send(this.options.api.address, danmakuData, callback);\n this.dan.splice(this.danIndex, 0, danmakuData);\n this.danIndex++;\n var danmaku = {\n text: this.htmlEncode(danmakuData.text),\n color: danmakuData.color,\n type: danmakuData.type,\n border: '2px solid ' + this.options.borderColor\n };\n this.draw(danmaku);\n this.events && this.events.trigger('danmaku_send', danmakuData);\n }\n },\n {\n key: 'frame',\n value: function frame() {\n var _this3 = this;\n if (this.dan.length && !this.paused && this.showing) {\n var item = this.dan[this.danIndex];\n var dan = [];\n while (item && this.options.time() > parseFloat(item.time)) {\n dan.push(item);\n item = this.dan[++this.danIndex];\n }\n this.draw(dan);\n }\n window.requestAnimationFrame(function () {\n _this3.frame();\n });\n }\n },\n {\n key: 'opacity',\n value: function opacity(percentage) {\n if (percentage !== undefined) {\n var items = this.container.getElementsByClassName('dplayer-danmaku-item');\n for (var i = 0; i < items.length; i++) {\n items[i].style.opacity = percentage;\n }\n this._opacity = percentage;\n this.events && this.events.trigger('danmaku_opacity', this._opacity);\n }\n return this._opacity;\n }\n },\n {\n key: 'draw',\n value: function draw(dan) {\n var _this4 = this;\n if (this.showing) {\n var itemHeight = this.options.height;\n var danWidth = this.container.offsetWidth;\n var danHeight = this.container.offsetHeight;\n var itemY = parseInt(danHeight / itemHeight);\n var danItemRight = function danItemRight(ele) {\n var eleWidth = ele.offsetWidth || parseInt(ele.style.width);\n var eleRight = ele.getBoundingClientRect().right || _this4.container.getBoundingClientRect().right + eleWidth;\n return _this4.container.getBoundingClientRect().right - eleRight;\n };\n var danSpeed = function danSpeed(width) {\n return (danWidth + width) / 5;\n };\n var getTunnel = function getTunnel(ele, type, width) {\n var tmp = danWidth / danSpeed(width);\n var _loop = function _loop(i) {\n var item = _this4.danTunnel[type][i + ''];\n if (item && item.length) {\n if (type !== 'right') {\n return 'continue';\n }\n for (var j = 0; j < item.length; j++) {\n var danRight = danItemRight(item[j]) - 10;\n if (danRight <= danWidth - tmp * danSpeed(parseInt(item[j].style.width)) || danRight <= 0) {\n break;\n }\n if (j === item.length - 1) {\n _this4.danTunnel[type][i + ''].push(ele);\n ele.addEventListener('animationend', function () {\n _this4.danTunnel[type][i + ''].splice(0, 1);\n });\n return { v: i % itemY };\n }\n }\n } else {\n _this4.danTunnel[type][i + ''] = [ele];\n ele.addEventListener('animationend', function () {\n _this4.danTunnel[type][i + ''].splice(0, 1);\n });\n return { v: i % itemY };\n }\n };\n for (var i = 0; _this4.unlimited || i < itemY; i++) {\n var _ret = _loop(i);\n switch (_ret) {\n case 'continue':\n continue;\n default:\n if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === 'object')\n return _ret.v;\n }\n }\n return -1;\n };\n if (Object.prototype.toString.call(dan) !== '[object Array]') {\n dan = [dan];\n }\n var docFragment = document.createDocumentFragment();\n var _loop2 = function _loop2(i) {\n if (!dan[i].type) {\n dan[i].type = 'right';\n }\n if (!dan[i].color) {\n dan[i].color = '#fff';\n }\n var item = document.createElement('div');\n item.classList.add('dplayer-danmaku-item');\n item.classList.add('dplayer-danmaku-' + dan[i].type);\n if (dan[i].border) {\n item.innerHTML = '' + dan[i].text + '';\n } else {\n item.innerHTML = dan[i].text;\n }\n item.style.opacity = _this4._opacity;\n item.style.color = dan[i].color;\n item.addEventListener('animationend', function () {\n _this4.container.removeChild(item);\n });\n var itemWidth = _this4._measure(dan[i].text);\n var tunnel = void 0;\n switch (dan[i].type) {\n case 'right':\n tunnel = getTunnel(item, dan[i].type, itemWidth);\n if (tunnel >= 0) {\n item.style.width = itemWidth + 1 + 'px';\n item.style.top = itemHeight * tunnel + 'px';\n item.style.transform = 'translateX(-' + danWidth + 'px)';\n }\n break;\n case 'top':\n tunnel = getTunnel(item, dan[i].type);\n if (tunnel >= 0) {\n item.style.top = itemHeight * tunnel + 'px';\n }\n break;\n case 'bottom':\n tunnel = getTunnel(item, dan[i].type);\n if (tunnel >= 0) {\n item.style.bottom = itemHeight * tunnel + 'px';\n }\n break;\n default:\n console.error('Can\\'t handled danmaku type: ' + dan[i].type);\n }\n if (tunnel >= 0) {\n item.classList.add('dplayer-danmaku-move');\n docFragment.appendChild(item);\n }\n };\n for (var i = 0; i < dan.length; i++) {\n _loop2(i);\n }\n this.container.appendChild(docFragment);\n return docFragment;\n }\n }\n },\n {\n key: 'play',\n value: function play() {\n this.paused = false;\n }\n },\n {\n key: 'pause',\n value: function pause() {\n this.paused = true;\n }\n },\n {\n key: '_measure',\n value: function _measure(text) {\n if (!this.context) {\n var measureStyle = getComputedStyle(this.container.getElementsByClassName('dplayer-danmaku-item')[0], null);\n this.context = document.createElement('canvas').getContext('2d');\n this.context.font = measureStyle.getPropertyValue('font');\n }\n return this.context.measureText(text).width;\n }\n },\n {\n key: 'seek',\n value: function seek() {\n this.clear();\n for (var i = 0; i < this.dan.length; i++) {\n if (this.dan[i].time >= this.options.time()) {\n this.danIndex = i;\n break;\n }\n this.danIndex = this.dan.length;\n }\n }\n },\n {\n key: 'clear',\n value: function clear() {\n this.danTunnel = {\n right: {},\n top: {},\n bottom: {}\n };\n this.danIndex = 0;\n this.options.container.innerHTML = '';\n this.events && this.events.trigger('danmaku_clear');\n }\n },\n {\n key: 'htmlEncode',\n value: function htmlEncode(str) {\n return str.replace(/&/g, '&').replace(//g, '>').replace(/\"/g, '"').replace(/'/g, ''').replace(/\\//g, '/');\n }\n },\n {\n key: 'resize',\n value: function resize() {\n var danWidth = this.container.offsetWidth;\n var items = this.container.getElementsByClassName('dplayer-danmaku-item');\n for (var i = 0; i < items.length; i++) {\n items[i].style.transform = 'translateX(-' + danWidth + 'px)';\n }\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.showing = false;\n this.pause();\n this.clear();\n this.events && this.events.trigger('danmaku_hide');\n }\n },\n {\n key: 'show',\n value: function show() {\n this.seek();\n this.showing = true;\n this.play();\n this.events && this.events.trigger('danmaku_show');\n }\n },\n {\n key: 'unlimit',\n value: function unlimit(boolean) {\n this.unlimited = boolean;\n }\n }\n ]);\n return Danmaku;\n}();\nmodule.exports = Danmaku;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Thumbnails = function () {\n function Thumbnails(container, width, url, events) {\n _classCallCheck(this, Thumbnails);\n this.container = container;\n this.width = width;\n this.container.style.backgroundImage = 'url(\\'' + url + '\\')';\n this.events = events;\n }\n _createClass(Thumbnails, [\n {\n key: 'resize',\n value: function resize(width, height) {\n this.container.style.width = width + 'px';\n this.container.style.height = height + 'px';\n this.container.style.top = -height + 2 + 'px';\n }\n },\n {\n key: 'show',\n value: function show() {\n this.container.style.display = 'block';\n this.events && this.events.trigger('thumbnails_show');\n }\n },\n {\n key: 'move',\n value: function move(position) {\n this.container.style.backgroundPosition = '-' + (Math.ceil(position / this.width * 100) - 1) * 160 + 'px 0';\n this.container.style.left = position - this.container.offsetWidth / 2 + 'px';\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.container.style.display = 'none';\n this.events && this.events.trigger('thumbnails_hide');\n }\n }\n ]);\n return Thumbnails;\n}();\nmodule.exports = Thumbnails;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Events = function () {\n function Events() {\n _classCallCheck(this, Events);\n this.events = {};\n this.videoEvents = [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\n 'mozaudioavailable',\n 'pause',\n 'play',\n 'playing',\n 'progress',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'stalled',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'waiting'\n ];\n this.playerEvents = [\n 'screenshot',\n 'thumbnails_show',\n 'thumbnails_hide',\n 'danmaku_show',\n 'danmaku_hide',\n 'danmaku_clear',\n 'danmaku_loaded',\n 'danmaku_send',\n 'danmaku_opacity',\n 'contextmenu_show',\n 'contextmenu_hide',\n 'notice_show',\n 'notice_hide',\n 'quality_start',\n 'quality_end',\n 'destroy',\n 'resize',\n 'fullscreen',\n 'fullscreen_cancel',\n 'webfullscreen',\n 'webfullscreen_cancel',\n 'subtitle_show',\n 'subtitle_hide',\n 'subtitle_change'\n ];\n }\n _createClass(Events, [\n {\n key: 'on',\n value: function on(name, callback) {\n if (this.type(name) && typeof callback === 'function') {\n if (!this.events[name]) {\n this.events[name] = [];\n }\n this.events[name].push(callback);\n }\n }\n },\n {\n key: 'trigger',\n value: function trigger(name, info) {\n if (this.events[name] && this.events[name].length) {\n for (var i = 0; i < this.events[name].length; i++) {\n this.events[name][i](info);\n }\n }\n }\n },\n {\n key: 'type',\n value: function type(name) {\n if (this.playerEvents.indexOf(name) !== -1) {\n return 'player';\n } else if (this.videoEvents.indexOf(name) !== -1) {\n return 'video';\n }\n console.error('Unknown event name: ' + name);\n return null;\n }\n }\n ]);\n return Events;\n}();\nmodule.exports = Events;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = __webpack_require__(0);\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar FullScreen = function () {\n function FullScreen(player) {\n var _this = this;\n _classCallCheck(this, FullScreen);\n this.player = player;\n this.player.events.on('webfullscreen', function () {\n _this.player.resize();\n });\n this.player.events.on('webfullscreen_cancel', function () {\n _this.player.resize();\n });\n var fullscreenchange = function fullscreenchange() {\n _this.player.resize();\n if (_this.isFullScreen('browser')) {\n _this.player.events.trigger('fullscreen');\n } else {\n _this.player.events.trigger('fullscreen_cancel');\n }\n };\n this.player.container.addEventListener('fullscreenchange', fullscreenchange);\n this.player.container.addEventListener('mozfullscreenchange', fullscreenchange);\n this.player.container.addEventListener('webkitfullscreenchange', fullscreenchange);\n }\n _createClass(FullScreen, [\n {\n key: 'isFullScreen',\n value: function isFullScreen() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n switch (type) {\n case 'browser':\n return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n case 'web':\n return this.player.container.classList.contains('dplayer-fulled');\n }\n }\n },\n {\n key: 'request',\n value: function request() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n switch (type) {\n case 'browser':\n if (this.player.container.requestFullscreen) {\n this.player.container.requestFullscreen();\n } else if (this.player.container.mozRequestFullScreen) {\n this.player.container.mozRequestFullScreen();\n } else if (this.player.container.webkitRequestFullscreen) {\n this.player.container.webkitRequestFullscreen();\n } else if (this.player.video.webkitEnterFullscreen) {\n this.player.video.webkitEnterFullscreen();\n }\n break;\n case 'web':\n this.player.container.classList.add('dplayer-fulled');\n this.lastScrollPosition = _utils2.default.getScrollPosition();\n document.body.classList.add('dplayer-web-fullscreen-fix');\n this.player.events.trigger('webfullscreen');\n break;\n }\n }\n },\n {\n key: 'cancel',\n value: function cancel() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n switch (type) {\n case 'browser':\n if (document.cancelFullScreen) {\n document.cancelFullScreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.webkitCancelFullScreen) {\n document.webkitCancelFullScreen();\n }\n break;\n case 'web':\n this.player.container.classList.remove('dplayer-fulled');\n document.body.classList.remove('dplayer-web-fullscreen-fix');\n _utils2.default.setScrollPosition(this.lastScrollPosition);\n this.player.events.trigger('webfullscreen_cancel');\n break;\n }\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n if (this.isFullScreen(type)) {\n this.cancel(type);\n } else {\n this.request(type);\n var anotherType = type === 'browser' ? 'web' : 'browser';\n if (this.isFullScreen(anotherType)) {\n this.cancel(anotherType);\n }\n }\n }\n }\n ]);\n return FullScreen;\n}();\nmodule.exports = FullScreen;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = __webpack_require__(0);\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar User = function () {\n function User(player) {\n _classCallCheck(this, User);\n this.storageName = {\n opacity: 'dplayer-danmaku-opacity',\n volume: 'dplayer-volume',\n unlimited: 'dplayer-danmaku-unlimited',\n danmaku: 'dplayer-danmaku-show',\n subtitle: 'dplayer-subtitle-show'\n };\n this.default = {\n opacity: 0.7,\n volume: player.options.volume || 0.7,\n unlimited: (player.options.danmaku && player.options.danmaku.unlimited ? 1 : 0) || 0,\n danmaku: 1,\n subtitle: 1\n };\n this.data = {};\n this.init();\n }\n _createClass(User, [\n {\n key: 'init',\n value: function init() {\n for (var item in this.storageName) {\n var name = this.storageName[item];\n this.data[item] = parseFloat(_utils2.default.storage.get(name) || this.default[item]);\n }\n }\n },\n {\n key: 'get',\n value: function get(key) {\n return this.data[key];\n }\n },\n {\n key: 'set',\n value: function set(key, value) {\n this.data[key] = value;\n _utils2.default.storage.set(this.storageName[key], value);\n }\n }\n ]);\n return User;\n}();\nmodule.exports = User;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Subtitle = function () {\n function Subtitle(container, video, options, events) {\n _classCallCheck(this, Subtitle);\n this.container = container;\n this.video = video;\n this.options = options;\n this.events = events;\n this.init();\n }\n _createClass(Subtitle, [\n {\n key: 'init',\n value: function init() {\n var _this = this;\n this.container.style.fontSize = this.options.fontSize;\n this.container.style.bottom = this.options.bottom;\n this.container.style.color = this.options.color;\n if (this.video.textTracks && this.video.textTracks[0]) {\n var track = this.video.textTracks[0];\n track.oncuechange = function () {\n var cue = track.activeCues[0];\n if (cue) {\n _this.container.innerHTML = '';\n var p = document.createElement('p');\n p.appendChild(cue.getCueAsHTML());\n _this.container.appendChild(p);\n } else {\n _this.container.innerHTML = '';\n }\n _this.events.trigger('subtitle_change');\n };\n }\n }\n },\n {\n key: 'show',\n value: function show() {\n this.container.classList.remove('dplayer-subtitle-hide');\n this.events.trigger('subtitle_show');\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.container.classList.add('dplayer-subtitle-hide');\n this.events.trigger('subtitle_hide');\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.container.classList.contains('dplayer-subtitle-hide')) {\n this.show();\n } else {\n this.hide();\n }\n }\n }\n ]);\n return Subtitle;\n}();\nmodule.exports = Subtitle;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Bar = function () {\n function Bar(template) {\n _classCallCheck(this, Bar);\n this.elements = {};\n this.elements.volume = template.volumeBar;\n this.elements.played = template.playedBar;\n this.elements.loaded = template.loadedBar;\n this.elements.danmaku = template.danmakuOpacityBar;\n }\n _createClass(Bar, [\n {\n key: 'set',\n value: function set(type, percentage, direction) {\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n this.elements[type].style[direction] = percentage * 100 + '%';\n }\n },\n {\n key: 'get',\n value: function get(type) {\n return parseFloat(this.elements[type].style.width) / 100;\n }\n }\n ]);\n return Bar;\n}();\nmodule.exports = Bar;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = __webpack_require__(0);\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Time = function () {\n function Time(player) {\n _classCallCheck(this, Time);\n this.player = player;\n window.requestAnimationFrame = function () {\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n window.setTimeout(callback, 1000 / 60);\n };\n }();\n this.types = [\n 'loading',\n 'progress'\n ];\n this.init();\n }\n _createClass(Time, [\n {\n key: 'init',\n value: function init() {\n for (var i = 0; i < this.types.length; i++) {\n var type = this.types[i];\n this['init' + type + 'Checker']();\n }\n }\n },\n {\n key: 'initloadingChecker',\n value: function initloadingChecker() {\n var _this = this;\n var lastPlayPos = 0;\n var currentPlayPos = 0;\n var bufferingDetected = false;\n this.loadingChecker = setInterval(function () {\n if (_this.enableloadingChecker) {\n currentPlayPos = _this.player.video.currentTime;\n if (!bufferingDetected && currentPlayPos === lastPlayPos && !_this.player.video.paused) {\n _this.player.container.classList.add('dplayer-loading');\n bufferingDetected = true;\n }\n if (bufferingDetected && currentPlayPos > lastPlayPos && !_this.player.video.paused) {\n _this.player.container.classList.remove('dplayer-loading');\n bufferingDetected = false;\n }\n lastPlayPos = currentPlayPos;\n }\n }, 100);\n }\n },\n {\n key: 'initprogressChecker',\n value: function initprogressChecker() {\n var _this2 = this;\n this.progressChecker = setInterval(function () {\n if (_this2.enableprogressChecker) {\n _this2.player.bar.set('played', _this2.player.video.currentTime / _this2.player.video.duration, 'width');\n var currentTime = _utils2.default.secondToTime(_this2.player.video.currentTime);\n if (_this2.player.template.ptime.innerHTML !== currentTime) {\n _this2.player.template.ptime.innerHTML = _utils2.default.secondToTime(_this2.player.video.currentTime);\n }\n }\n }, 100);\n }\n },\n {\n key: 'enable',\n value: function enable(type) {\n if (type) {\n this['enable' + type + 'Checker'] = true;\n } else {\n for (var i = 0; i < this.types.length; i++) {\n var _type = this.types[i];\n this['enable' + _type + 'Checker'] = true;\n }\n }\n }\n },\n {\n key: 'disable',\n value: function disable(type) {\n if (type) {\n this['enable' + type + 'Checker'] = false;\n } else {\n for (var i = 0; i < this.types.length; i++) {\n var _type2 = this.types[i];\n this['enable' + _type2 + 'Checker'] = false;\n }\n }\n }\n },\n {\n key: 'distroy',\n value: function distroy(type) {\n if (type) {\n clearInterval(this[type + 'Checker']);\n } else {\n for (var i = 0; i < this.types.length; i++) {\n clearInterval(this[this.types[i] + 'Checker']);\n }\n }\n }\n }\n ]);\n return Time;\n}();\nmodule.exports = Time;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Bezel = function () {\n function Bezel(container) {\n var _this = this;\n _classCallCheck(this, Bezel);\n this.container = container;\n this.container.addEventListener('animationend', function () {\n _this.container.classList.remove('dplayer-bezel-transition');\n });\n }\n _createClass(Bezel, [{\n key: 'switch',\n value: function _switch(icon) {\n this.container.innerHTML = icon;\n this.container.classList.add('dplayer-bezel-transition');\n }\n }]);\n return Bezel;\n}();\nmodule.exports = Bezel;\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// DPlayer.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap dd5c75ee46109edf2f32","'use strict';\nmodule.exports = {\n secondToTime: function secondToTime(second) {\n var add0 = function add0(num) {\n return num < 10 ? '0' + num : '' + num;\n };\n var min = parseInt(second / 60);\n var sec = parseInt(second - min * 60);\n return add0(min) + ':' + add0(sec);\n },\n getElementViewLeft: function getElementViewLeft(element) {\n var actualLeft = element.offsetLeft;\n var current = element.offsetParent;\n var elementScrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;\n if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {\n while (current !== null) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n } else {\n while (current !== null && current !== element) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n }\n return actualLeft - elementScrollLeft;\n },\n getScrollPosition: function getScrollPosition() {\n return {\n left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0,\n top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0\n };\n },\n setScrollPosition: function setScrollPosition(_ref) {\n var _ref$left = _ref.left, left = _ref$left === undefined ? 0 : _ref$left, _ref$top = _ref.top, top = _ref$top === undefined ? 0 : _ref$top;\n if (this.isFirefox) {\n document.documentElement.scrollLeft = left;\n document.documentElement.scrollTop = top;\n } else {\n window.scrollTo(left, top);\n }\n },\n isMobile: /mobile/i.test(window.navigator.userAgent),\n isFirefox: /firefox/i.test(window.navigator.userAgent),\n isChrome: /chrome/i.test(window.navigator.userAgent),\n storage: {\n set: function set(key, value) {\n localStorage.setItem(key, value);\n },\n get: function get(key) {\n return localStorage.getItem(key);\n }\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utils.js\n// module id = 0\n// module chunks = 0","'use strict';\nconsole.log('\\n' + ' %c DPlayer ' + DPLAYER_VERSION + ' ' + GIT_HASH + ' %c http://dplayer.js.org ' + '\\n' + '\\n', 'color: #fadfa3; background: #030307; padding:5px 0;', 'background: #fadfa3; padding:5px 0;');\nmodule.exports = require('./DPlayer');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/index.js\n// module id = 1\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nrequire('./DPlayer.scss');\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nvar _options = require('./options');\nvar _options2 = _interopRequireDefault(_options);\nvar _i18n = require('./i18n');\nvar _i18n2 = _interopRequireDefault(_i18n);\nvar _template = require('./template');\nvar _template2 = _interopRequireDefault(_template);\nvar _svg = require('./svg');\nvar _svg2 = _interopRequireDefault(_svg);\nvar _danmaku = require('./danmaku');\nvar _danmaku2 = _interopRequireDefault(_danmaku);\nvar _thumbnails = require('./thumbnails');\nvar _thumbnails2 = _interopRequireDefault(_thumbnails);\nvar _events = require('./events');\nvar _events2 = _interopRequireDefault(_events);\nvar _fullscreen = require('./fullscreen');\nvar _fullscreen2 = _interopRequireDefault(_fullscreen);\nvar _user = require('./user');\nvar _user2 = _interopRequireDefault(_user);\nvar _subtitle = require('./subtitle');\nvar _subtitle2 = _interopRequireDefault(_subtitle);\nvar _bar = require('./bar');\nvar _bar2 = _interopRequireDefault(_bar);\nvar _time = require('./time');\nvar _time2 = _interopRequireDefault(_time);\nvar _bezel = require('./bezel');\nvar _bezel2 = _interopRequireDefault(_bezel);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar index = 0;\nvar instances = [];\nvar DPlayer = function () {\n function DPlayer(options) {\n var _this = this;\n _classCallCheck(this, DPlayer);\n this.options = (0, _options2.default)(options);\n if (this.options.video.quality) {\n this.qualityIndex = this.options.video.defaultQuality;\n this.quality = this.options.video.quality[this.options.video.defaultQuality];\n }\n this.tran = new _i18n2.default(this.options.lang).tran;\n this.icons = new _svg2.default(this.options);\n this.events = new _events2.default();\n this.user = new _user2.default(this);\n this.container = this.options.container;\n this.container.classList.add('dplayer');\n if (!this.options.danmaku) {\n this.container.classList.add('dplayer-no-danmaku');\n }\n if (this.options.live) {\n this.container.classList.add('dplayer-live');\n }\n if (_utils.isMobile) {\n this.container.classList.add('dplayer-mobile');\n }\n this.arrow = this.container.offsetWidth <= 500;\n if (this.arrow) {\n this.container.classList.add('dplayer-arrow');\n }\n this.template = new _template2.default({\n container: this.container,\n options: this.options,\n index: index,\n tran: this.tran,\n icons: this.icons\n });\n this.video = this.template.video;\n this.bar = new _bar2.default(this.template);\n this.bezel = new _bezel2.default(this.template.bezel);\n if (this.options.danmaku) {\n this.danmaku = new _danmaku2.default({\n container: this.template.danmaku,\n opacity: this.user.get('opacity'),\n callback: function callback() {\n setTimeout(function () {\n _this.template.danmakuLoading.style.display = 'none';\n if (_this.options.autoplay && !_utils.isMobile) {\n _this.play();\n } else if (_utils.isMobile) {\n _this.pause();\n }\n }, 0);\n },\n error: function error(msg) {\n _this.notice(msg);\n },\n apiBackend: this.options.apiBackend,\n borderColor: this.options.theme,\n height: this.arrow ? 24 : 30,\n time: function time() {\n return _this.video.currentTime;\n },\n unlimited: this.user.get('unlimited'),\n api: {\n id: this.options.danmaku.id,\n address: this.options.danmaku.api,\n token: this.options.danmaku.token,\n maximum: this.options.danmaku.maximum,\n addition: this.options.danmaku.addition,\n user: this.options.danmaku.user\n },\n events: this.events\n });\n }\n document.addEventListener('click', function () {\n _this.focus = false;\n }, true);\n this.container.addEventListener('click', function () {\n _this.focus = true;\n }, true);\n this.paused = true;\n this.template.playButton.addEventListener('click', function () {\n _this.toggle();\n });\n if (!_utils.isMobile) {\n this.template.videoWrap.addEventListener('click', function () {\n _this.toggle();\n });\n this.template.controllerMask.addEventListener('click', function () {\n _this.toggle();\n });\n } else {\n var toggleController = function toggleController() {\n if (_this.container.classList.contains('dplayer-hide-controller')) {\n _this.container.classList.remove('dplayer-hide-controller');\n } else {\n _this.container.classList.add('dplayer-hide-controller');\n }\n };\n this.template.videoWrap.addEventListener('click', toggleController);\n this.template.controllerMask.addEventListener('click', toggleController);\n }\n this.time = new _time2.default(this);\n if (this.options.video.thumbnails) {\n this.initThumbnails();\n }\n this.isTimeTipsShow = true;\n this.mouseHandler = this.mouseHandler(this.template.playedBarWrap, this.template.playedBarTime).bind(this);\n this.template.playedBarWrap.addEventListener('mousemove', this.mouseHandler);\n this.template.playedBarWrap.addEventListener('mouseenter', this.mouseHandler);\n this.template.playedBarWrap.addEventListener('mouseleave', this.mouseHandler);\n var barWidth = void 0;\n var thumbMove = function thumbMove(e) {\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.playedBarWrap)) / barWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.bar.set('played', percentage, 'width');\n _this.template.ptime.innerHTML = _utils2.default.secondToTime(percentage * _this.video.duration);\n };\n var thumbUp = function thumbUp(e) {\n document.removeEventListener('mouseup', thumbUp);\n document.removeEventListener('mousemove', thumbMove);\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.playedBarWrap)) / barWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.bar.set('played', percentage, 'width');\n _this.seek(_this.bar.get('played') * _this.video.duration);\n _this.time.enable('progress');\n };\n this.template.playedBarWrap.addEventListener('mousedown', function () {\n barWidth = _this.template.playedBarWrap.clientWidth;\n _this.time.disable('progress');\n document.addEventListener('mousemove', thumbMove);\n document.addEventListener('mouseup', thumbUp);\n });\n var vWidth = 35;\n this.switchVolumeIcon = function () {\n if (_this.volume() >= 0.95) {\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-up');\n } else if (_this.volume() > 0) {\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-down');\n } else {\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-off');\n }\n };\n var volumeMove = function volumeMove(event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.volumeBarWrap) - 5.5) / vWidth;\n _this.volume(percentage);\n };\n var volumeUp = function volumeUp() {\n document.removeEventListener('mouseup', volumeUp);\n document.removeEventListener('mousemove', volumeMove);\n _this.template.volumeButton.classList.remove('dplayer-volume-active');\n };\n this.template.volumeBarWrapWrap.addEventListener('click', function (event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.volumeBarWrap) - 5.5) / vWidth;\n _this.volume(percentage);\n });\n this.template.volumeBarWrapWrap.addEventListener('mousedown', function () {\n document.addEventListener('mousemove', volumeMove);\n document.addEventListener('mouseup', volumeUp);\n _this.template.volumeButton.classList.add('dplayer-volume-active');\n });\n this.template.volumeIcon.addEventListener('click', function () {\n if (_this.video.muted) {\n _this.video.muted = false;\n _this.switchVolumeIcon();\n _this.bar.set('volume', _this.volume(), 'width');\n } else {\n _this.video.muted = true;\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-off');\n _this.bar.set('volume', 0, 'width');\n }\n });\n this.hideTime = 0;\n var hideController = function hideController() {\n _this.container.classList.remove('dplayer-hide-controller');\n clearTimeout(_this.hideTime);\n _this.hideTime = setTimeout(function () {\n if (_this.video.played.length && !_this.disableHideController) {\n _this.container.classList.add('dplayer-hide-controller');\n closeSetting();\n closeComment();\n }\n }, 2000);\n };\n if (!_utils.isMobile) {\n this.container.addEventListener('mousemove', hideController);\n this.container.addEventListener('click', hideController);\n }\n var closeSetting = function closeSetting() {\n if (_this.template.settingBox.classList.contains('dplayer-setting-box-open')) {\n _this.template.settingBox.classList.remove('dplayer-setting-box-open');\n _this.template.mask.classList.remove('dplayer-mask-show');\n setTimeout(function () {\n _this.template.settingBox.classList.remove('dplayer-setting-box-narrow');\n _this.template.settingBox.classList.remove('dplayer-setting-box-speed');\n }, 300);\n }\n _this.disableHideController = false;\n };\n var openSetting = function openSetting() {\n _this.disableHideController = true;\n _this.template.settingBox.classList.add('dplayer-setting-box-open');\n _this.template.mask.classList.add('dplayer-mask-show');\n };\n this.template.mask.addEventListener('click', function () {\n closeSetting();\n });\n this.template.settingButton.addEventListener('click', function () {\n openSetting();\n });\n this.loop = this.options.loop;\n var showdan = this.user.get('danmaku');\n if (!showdan) {\n this.danmaku && this.danmaku.hide();\n }\n var unlimitDan = this.user.get('unlimited');\n this.template.loopToggle.checked = this.loop;\n this.template.loop.addEventListener('click', function () {\n _this.template.loopToggle.checked = !_this.template.loopToggle.checked;\n if (_this.template.loopToggle.checked) {\n _this.loop = true;\n } else {\n _this.loop = false;\n }\n closeSetting();\n });\n this.template.showDanmakuToggle.checked = showdan;\n this.template.showDanmaku.addEventListener('click', function () {\n _this.template.showDanmakuToggle.checked = !_this.template.showDanmakuToggle.checked;\n if (_this.template.showDanmakuToggle.checked) {\n showdan = true;\n if (!_this.paused) {\n _this.danmaku.show();\n }\n } else {\n showdan = false;\n _this.danmaku.hide();\n }\n _this.user.set('danmaku', showdan ? 1 : 0);\n closeSetting();\n });\n this.template.unlimitDanmakuToggle.checked = unlimitDan;\n this.template.unlimitDanmaku.addEventListener('click', function () {\n _this.template.unlimitDanmakuToggle.checked = !_this.template.unlimitDanmakuToggle.checked;\n if (_this.template.unlimitDanmakuToggle.checked) {\n unlimitDan = true;\n _this.danmaku.unlimit(true);\n } else {\n unlimitDan = false;\n _this.danmaku.unlimit(false);\n }\n _this.user.set('unlimited', unlimitDan ? 1 : 0);\n closeSetting();\n });\n this.template.speed.addEventListener('click', function () {\n _this.template.settingBox.classList.add('dplayer-setting-box-narrow');\n _this.template.settingBox.classList.add('dplayer-setting-box-speed');\n var _loop = function _loop(i) {\n _this.template.speedItem[i].addEventListener('click', function () {\n _this.video.playbackRate = _this.template.speedItem[i].dataset.speed;\n closeSetting();\n });\n };\n for (var i = 0; i < _this.template.speedItem.length; i++) {\n _loop(i);\n }\n });\n if (this.danmaku) {\n var dWidth = 130;\n this.on('danmaku_opacity', function (percentage) {\n _this.bar.set('danmaku', percentage, 'width');\n _this.user.set('opacity', percentage);\n });\n this.danmaku.opacity(this.user.get('opacity'));\n var danmakuMove = function danmakuMove(event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.danmakuOpacityBarWrap)) / dWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.danmaku.opacity(percentage);\n };\n var danmakuUp = function danmakuUp() {\n document.removeEventListener('mouseup', danmakuUp);\n document.removeEventListener('mousemove', danmakuMove);\n _this.template.danmakuOpacityBox.classList.remove('dplayer-setting-danmaku-active');\n };\n this.template.danmakuOpacityBarWrapWrap.addEventListener('click', function (event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.danmakuOpacityBarWrap)) / dWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.danmaku.opacity(percentage);\n });\n this.template.danmakuOpacityBarWrapWrap.addEventListener('mousedown', function () {\n document.addEventListener('mousemove', danmakuMove);\n document.addEventListener('mouseup', danmakuUp);\n _this.template.danmakuOpacityBox.classList.add('dplayer-setting-danmaku-active');\n });\n }\n if (this.video.duration !== 1) {\n this.template.dtime.innerHTML = this.video.duration ? _utils2.default.secondToTime(this.video.duration) : '00:00';\n }\n if (!this.danmaku) {\n if (this.options.autoplay && !_utils.isMobile) {\n this.play();\n } else if (_utils.isMobile) {\n this.pause();\n }\n }\n var closeCommentSetting = function closeCommentSetting() {\n if (_this.template.commentSettingBox.classList.contains('dplayer-comment-setting-open')) {\n _this.template.commentSettingBox.classList.remove('dplayer-comment-setting-open');\n }\n };\n var toggleCommentSetting = function toggleCommentSetting() {\n if (_this.template.commentSettingBox.classList.contains('dplayer-comment-setting-open')) {\n _this.template.commentSettingBox.classList.remove('dplayer-comment-setting-open');\n } else {\n _this.template.commentSettingBox.classList.add('dplayer-comment-setting-open');\n }\n };\n var closeComment = function closeComment() {\n if (!_this.template.controller.classList.contains('dplayer-controller-comment')) {\n return;\n }\n _this.template.controller.classList.remove('dplayer-controller-comment');\n _this.template.mask.classList.remove('dplayer-mask-show');\n _this.container.classList.remove('dplayer-show-controller');\n closeCommentSetting();\n _this.disableHideController = false;\n };\n var openComment = function openComment() {\n _this.disableHideController = true;\n if (!_this.template.controller.classList.contains('dplayer-controller-comment')) {\n _this.template.controller.classList.add('dplayer-controller-comment');\n _this.template.mask.classList.add('dplayer-mask-show');\n _this.container.classList.add('dplayer-show-controller');\n _this.template.commentInput.focus();\n }\n };\n this.template.mask.addEventListener('click', function () {\n closeComment();\n });\n this.template.commentButton.addEventListener('click', function () {\n openComment();\n });\n this.template.commentSettingButton.addEventListener('click', function () {\n toggleCommentSetting();\n });\n this.template.commentColorSettingBox.addEventListener('click', function () {\n var sele = _this.template.commentColorSettingBox.querySelector('input:checked+span');\n if (sele) {\n var color = _this.template.commentColorSettingBox.querySelector('input:checked').value;\n _this.template.commentSettingFill.style.fill = color;\n _this.template.commentInput.style.color = color;\n _this.template.commentSendFill.style.fill = color;\n }\n });\n var sendComment = function sendComment() {\n _this.template.commentInput.blur();\n if (!_this.template.commentInput.value.replace(/^\\s+|\\s+$/g, '')) {\n _this.notice(_this.tran('Please input danmaku content!'));\n return;\n }\n _this.danmaku.send({\n text: _this.template.commentInput.value,\n color: _this.container.querySelector('.dplayer-comment-setting-color input:checked').value,\n type: _this.container.querySelector('.dplayer-comment-setting-type input:checked').value\n }, function () {\n _this.template.commentInput.value = '';\n closeComment();\n });\n };\n this.template.commentInput.addEventListener('click', function () {\n closeCommentSetting();\n });\n this.template.commentInput.addEventListener('keydown', function (e) {\n var event = e || window.event;\n if (event.keyCode === 13) {\n sendComment();\n }\n });\n this.template.commentSendButton.addEventListener('click', sendComment);\n this.fullScreen = new _fullscreen2.default(this);\n this.template.browserFullButton.addEventListener('click', function () {\n _this.fullScreen.toggle('browser');\n });\n this.template.webFullButton.addEventListener('click', function () {\n _this.fullScreen.toggle('web');\n });\n var handleKeyDown = function handleKeyDown(e) {\n if (_this.focus) {\n var tag = document.activeElement.tagName.toUpperCase();\n var editable = document.activeElement.getAttribute('contenteditable');\n if (tag !== 'INPUT' && tag !== 'TEXTAREA' && editable !== '' && editable !== 'true') {\n var event = e || window.event;\n var percentage = void 0;\n switch (event.keyCode) {\n case 32:\n event.preventDefault();\n _this.toggle();\n break;\n case 37:\n event.preventDefault();\n _this.seek(_this.video.currentTime - 5);\n hideController();\n break;\n case 39:\n event.preventDefault();\n _this.seek(_this.video.currentTime + 5);\n hideController();\n break;\n case 38:\n event.preventDefault();\n percentage = _this.volume() + 0.1;\n _this.volume(percentage);\n break;\n case 40:\n event.preventDefault();\n percentage = _this.volume() - 0.1;\n _this.volume(percentage);\n break;\n }\n }\n }\n };\n if (this.options.hotkey) {\n document.addEventListener('keydown', handleKeyDown);\n }\n document.addEventListener('keydown', function (e) {\n var event = e || window.event;\n switch (event.keyCode) {\n case 27:\n if (_this.fullScreen.isFullScreen('web')) {\n _this.fullScreen.cancel('web');\n }\n break;\n }\n });\n this.container.addEventListener('contextmenu', function (e) {\n var event = e || window.event;\n event.preventDefault();\n _this.template.menu.classList.add('dplayer-menu-show');\n var clientRect = _this.container.getBoundingClientRect();\n var menuLeft = event.clientX - clientRect.left;\n var menuTop = event.clientY - clientRect.top;\n if (menuLeft + _this.template.menu.offsetWidth >= clientRect.width) {\n _this.template.menu.style.right = clientRect.width - menuLeft + 'px';\n _this.template.menu.style.left = 'initial';\n } else {\n _this.template.menu.style.left = event.clientX - _this.container.getBoundingClientRect().left + 'px';\n _this.template.menu.style.right = 'initial';\n }\n if (menuTop + _this.template.menu.offsetHeight >= clientRect.height) {\n _this.template.menu.style.bottom = clientRect.height - menuTop + 'px';\n _this.template.menu.style.top = 'initial';\n } else {\n _this.template.menu.style.top = event.clientY - _this.container.getBoundingClientRect().top + 'px';\n _this.template.menu.style.bottom = 'initial';\n }\n _this.template.mask.classList.add('dplayer-mask-show');\n _this.events.trigger('contextmenu_show');\n _this.template.mask.addEventListener('click', function () {\n _this.template.mask.classList.remove('dplayer-mask-show');\n _this.template.menu.classList.remove('dplayer-menu-show');\n _this.events.trigger('contextmenu_hide');\n });\n });\n if (this.options.video.quality) {\n this.template.qualityList.addEventListener('click', function (e) {\n if (e.target.classList.contains('dplayer-quality-item')) {\n _this.switchQuality(e.target.dataset.index);\n }\n });\n }\n if (this.options.screenshot) {\n this.template.camareButton.addEventListener('click', function () {\n var canvas = document.createElement('canvas');\n canvas.width = _this.video.videoWidth;\n canvas.height = _this.video.videoHeight;\n canvas.getContext('2d').drawImage(_this.video, 0, 0, canvas.width, canvas.height);\n var dataURL = canvas.toDataURL();\n _this.template.camareButton.href = dataURL;\n _this.template.camareButton.download = 'DPlayer.png';\n _this.events.trigger('screenshot', dataURL);\n });\n }\n if (this.options.subtitle) {\n this.events.on('subtitle_show', function () {\n _this.template.subtitleButton.dataset.balloon = _this.tran('Hide subtitle');\n _this.template.subtitleButtonInner.style.opacity = '';\n _this.user.set('subtitle', 1);\n });\n this.events.on('subtitle_hide', function () {\n _this.template.subtitleButton.dataset.balloon = _this.tran('Show subtitle');\n _this.template.subtitleButtonInner.style.opacity = '0.4';\n _this.user.set('subtitle', 0);\n });\n this.template.subtitleButton.addEventListener('click', function () {\n _this.subtitle.toggle();\n });\n }\n this.initVideo(this.video, this.quality && this.quality.type || this.options.video.type);\n index++;\n instances.push(this);\n }\n _createClass(DPlayer, [\n {\n key: 'seek',\n value: function seek(time) {\n time = Math.max(time, 0);\n if (this.video.duration) {\n time = Math.min(time, this.video.duration);\n }\n if (this.video.currentTime < time) {\n this.notice(this.tran('FF') + ' ' + (time - this.video.currentTime).toFixed(0) + ' ' + this.tran('s'));\n } else if (this.video.currentTime > time) {\n this.notice(this.tran('REW') + ' ' + (this.video.currentTime - time).toFixed(0) + ' ' + this.tran('s'));\n }\n this.video.currentTime = time;\n if (this.danmaku) {\n this.danmaku.seek();\n }\n this.bar.set('played', time / this.video.duration, 'width');\n }\n },\n {\n key: 'play',\n value: function play() {\n this.paused = false;\n if (this.video.paused) {\n this.bezel.switch(this.icons.get('play'));\n }\n this.template.playButton.innerHTML = this.icons.get('pause');\n this.video.play();\n this.time.enable();\n this.container.classList.add('dplayer-playing');\n if (this.danmaku) {\n this.danmaku.play();\n }\n if (this.options.mutex) {\n for (var i = 0; i < instances.length; i++) {\n if (this !== instances[i]) {\n instances[i].pause();\n }\n }\n }\n }\n },\n {\n key: 'pause',\n value: function pause() {\n this.paused = true;\n this.container.classList.remove('dplayer-loading');\n if (!this.video.paused) {\n this.bezel.switch(this.icons.get('pause'));\n }\n this.ended = false;\n this.template.playButton.innerHTML = this.icons.get('play');\n this.video.pause();\n this.time.disable();\n this.container.classList.remove('dplayer-playing');\n if (this.danmaku) {\n this.danmaku.pause();\n }\n }\n },\n {\n key: 'volume',\n value: function volume(percentage, nostorage, nonotice) {\n percentage = parseFloat(percentage);\n if (!isNaN(percentage)) {\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n this.bar.set('volume', percentage, 'width');\n var formatPercentage = (percentage * 100).toFixed(0) + '%';\n this.template.volumeBarWrapWrap.dataset.balloon = formatPercentage;\n if (!nostorage) {\n this.user.set('volume', percentage);\n }\n if (!nonotice) {\n this.notice(this.tran('Volume') + ' ' + (percentage * 100).toFixed(0) + '%');\n }\n this.video.volume = percentage;\n if (this.video.muted) {\n this.video.muted = false;\n }\n this.switchVolumeIcon();\n }\n return this.video.volume;\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.video.paused) {\n this.play();\n } else {\n this.pause();\n }\n }\n },\n {\n key: 'on',\n value: function on(name, callback) {\n this.events.on(name, callback);\n }\n },\n {\n key: 'switchVideo',\n value: function switchVideo(video, danmakuAPI) {\n this.pause();\n this.video.poster = video.pic ? video.pic : '';\n this.video.src = video.url;\n this.initMSE(this.video, video.type || 'auto');\n if (danmakuAPI) {\n this.template.danmakuLoading.style.display = 'block';\n this.bar.set('played', 0, 'width');\n this.bar.set('loaded', 0, 'width');\n this.template.ptime.innerHTML = '00:00';\n this.template.danmaku.innerHTML = '';\n if (this.danmaku) {\n this.danmaku.reload({\n id: danmakuAPI.id,\n address: danmakuAPI.api,\n token: danmakuAPI.token,\n maximum: danmakuAPI.maximum,\n addition: danmakuAPI.addition,\n user: danmakuAPI.user\n });\n }\n }\n }\n },\n {\n key: 'initMSE',\n value: function initMSE(video, type) {\n this.type = type;\n if (this.type === 'auto') {\n if (/m3u8(#|\\?|$)/i.exec(video.src)) {\n this.type = 'hls';\n } else if (/.flv(#|\\?|$)/i.exec(video.src)) {\n this.type = 'flv';\n } else if (/.mpd(#|\\?|$)/i.exec(video.src)) {\n this.type = 'dash';\n } else {\n this.type = 'normal';\n }\n }\n if (this.type === 'hls' && Hls && Hls.isSupported()) {\n var hls = new Hls();\n hls.loadSource(video.src);\n hls.attachMedia(video);\n }\n if (this.type === 'flv' && flvjs && flvjs.isSupported()) {\n var flvPlayer = flvjs.createPlayer({\n type: 'flv',\n url: video.src\n });\n flvPlayer.attachMediaElement(video);\n flvPlayer.load();\n }\n if (this.type === 'dash' && dashjs) {\n dashjs.MediaPlayer().create().initialize(video, video.src, false);\n }\n }\n },\n {\n key: 'initVideo',\n value: function initVideo(video, type) {\n var _this2 = this;\n this.initMSE(video, type);\n this.on('durationchange', function () {\n if (video.duration !== 1) {\n _this2.template.dtime.innerHTML = _utils2.default.secondToTime(video.duration);\n }\n });\n this.on('progress', function () {\n var percentage = video.buffered.length ? video.buffered.end(video.buffered.length - 1) / video.duration : 0;\n _this2.bar.set('loaded', percentage, 'width');\n });\n this.on('error', function () {\n _this2.tran && _this2.notice && _this2.notice(_this2.tran('This video fails to load'), -1);\n });\n this.ended = false;\n this.on('ended', function () {\n _this2.bar.set('played', 1, 'width');\n if (!_this2.loop) {\n _this2.ended = true;\n _this2.pause();\n } else {\n _this2.seek(0);\n video.play();\n }\n if (_this2.danmaku) {\n _this2.danmaku.danIndex = 0;\n }\n });\n this.on('play', function () {\n if (_this2.paused) {\n _this2.play();\n }\n });\n this.on('pause', function () {\n if (!_this2.paused) {\n _this2.pause();\n }\n });\n var _loop2 = function _loop2(i) {\n video.addEventListener(_this2.events.videoEvents[i], function () {\n _this2.events.trigger(_this2.events.videoEvents[i]);\n });\n };\n for (var i = 0; i < this.events.videoEvents.length; i++) {\n _loop2(i);\n }\n this.volume(this.user.get('volume'), true, true);\n if (this.options.subtitle) {\n this.subtitle = new _subtitle2.default(this.template.subtitle, this.video, this.options.subtitle, this.events);\n if (!this.user.get('subtitle')) {\n this.subtitle.hide();\n }\n }\n }\n },\n {\n key: 'switchQuality',\n value: function switchQuality(index) {\n var _this3 = this;\n if (this.qualityIndex === index || this.switchingQuality) {\n return;\n } else {\n this.qualityIndex = index;\n }\n this.switchingQuality = true;\n this.quality = this.options.video.quality[index];\n this.template.qualityButton.innerHTML = this.quality.name;\n var paused = this.video.paused;\n this.video.pause();\n var videoHTML = this.template.tplVideo(false, null, this.options.screenshot, 'auto', this.quality.url, this.options.subtitle);\n var videoEle = new DOMParser().parseFromString(videoHTML, 'text/html').body.firstChild;\n this.template.videoWrap.insertBefore(videoEle, this.template.videoWrap.getElementsByTagName('div')[0]);\n this.prevVideo = this.video;\n this.video = videoEle;\n this.initVideo(this.video, this.quality.type || this.options.video.type);\n this.seek(this.prevVideo.currentTime);\n this.notice(this.tran('Switching to') + ' ' + this.quality.name + ' ' + this.tran('quality'), -1);\n this.events.trigger('quality_start', this.quality);\n this.on('canplay', function () {\n if (_this3.prevVideo) {\n if (_this3.video.currentTime !== _this3.prevVideo.currentTime) {\n _this3.seek(_this3.prevVideo.currentTime);\n return;\n }\n _this3.template.videoWrap.removeChild(_this3.prevVideo);\n _this3.video.classList.add('dplayer-video-current');\n if (!paused) {\n _this3.video.play();\n }\n _this3.prevVideo = null;\n _this3.notice(_this3.tran('Switched to') + ' ' + _this3.quality.name + ' ' + _this3.tran('quality'));\n _this3.switchingQuality = false;\n _this3.events.trigger('quality_end');\n }\n });\n }\n },\n {\n key: 'mouseHandler',\n value: function mouseHandler(pbar, timeTips) {\n var _this4 = this;\n var cumulativeOffset = function cumulativeOffset(element) {\n var top = 0, left = 0;\n do {\n top += element.offsetTop || 0;\n left += element.offsetLeft || 0;\n element = element.offsetParent;\n } while (element);\n return {\n top: top,\n left: left\n };\n };\n return function (e) {\n if (!_this4.video.duration) {\n return;\n }\n var clientX = e.clientX;\n var px = cumulativeOffset(pbar).left;\n var tx = clientX - px;\n if (tx < 0 || tx > pbar.offsetWidth) {\n return;\n }\n var time = _this4.video.duration * (tx / pbar.offsetWidth);\n timeTips.style.left = tx - 20 + 'px';\n switch (e.type) {\n case 'mouseenter':\n _this4.thumbnails && _this4.thumbnails.show();\n break;\n case 'mousemove':\n _this4.thumbnails && _this4.thumbnails.move(tx);\n timeTips.innerText = _utils2.default.secondToTime(time);\n _this4.timeTipsDisplay(true, timeTips);\n break;\n case 'mouseleave':\n _this4.thumbnails && _this4.thumbnails.hide();\n _this4.timeTipsDisplay(false, timeTips);\n break;\n }\n };\n }\n },\n {\n key: 'timeTipsDisplay',\n value: function timeTipsDisplay(show, timeTips) {\n if (show) {\n if (this.isTimeTipsShow) {\n return;\n }\n timeTips.classList.remove('hidden');\n this.isTimeTipsShow = true;\n } else {\n if (!this.isTimeTipsShow) {\n return;\n }\n timeTips.classList.add('hidden');\n this.isTimeTipsShow = false;\n }\n }\n },\n {\n key: 'initThumbnails',\n value: function initThumbnails() {\n var _this5 = this;\n this.thumbnails = new _thumbnails2.default(this.template.barPreview, this.template.barWrap.offsetWidth, this.options.video.thumbnails, this.events);\n this.on('loadedmetadata', function () {\n _this5.thumbnails.resize(160, 90);\n });\n }\n },\n {\n key: 'notice',\n value: function notice(text) {\n var _this6 = this;\n var time = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2000;\n var opacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.8;\n this.template.notice.innerHTML = text;\n this.template.notice.style.opacity = opacity;\n if (this.noticeTime) {\n clearTimeout(this.noticeTime);\n }\n this.events.trigger('notice_show', text);\n this.noticeTime = setTimeout(function () {\n _this6.template.notice.style.opacity = 0;\n _this6.events.trigger('notice_hide');\n }, time);\n }\n },\n {\n key: 'resize',\n value: function resize() {\n if (this.danmaku) {\n this.danmaku.resize();\n }\n this.events.trigger('resize');\n }\n },\n {\n key: 'destroy',\n value: function destroy() {\n instances.splice(instances.indexOf(this), 1);\n this.pause();\n clearTimeout(this.hideTime);\n this.time.destroy();\n this.video.src = '';\n this.container.innerHTML = '';\n this.events.trigger('destroy');\n for (var key in this) {\n if (this.hasOwnProperty(key) && key !== 'paused') {\n delete this[key];\n }\n }\n }\n }\n ]);\n return DPlayer;\n}();\nmodule.exports = DPlayer;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/DPlayer.js\n// module id = 2\n// module chunks = 0","'use strict';\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar defaultApiBackend = require('./api.js');\nmodule.exports = function (options) {\n var isMobile = /mobile/i.test(window.navigator.userAgent);\n if (isMobile) {\n options.autoplay = false;\n }\n var defaultOption = {\n container: options.element || document.getElementsByClassName('dplayer')[0],\n live: false,\n autoplay: false,\n theme: '#b7daff',\n loop: false,\n lang: (navigator.language || navigator.browserLanguage).toLowerCase(),\n screenshot: false,\n hotkey: true,\n preload: 'auto',\n volume: 0.7,\n apiBackend: defaultApiBackend,\n video: {},\n icons: {\n play: [\n '0 0 16 32',\n 'M15.552 15.168q0.448 0.32 0.448 0.832 0 0.448-0.448 0.768l-13.696 8.512q-0.768 0.512-1.312 0.192t-0.544-1.28v-16.448q0-0.96 0.544-1.28t1.312 0.192z'\n ],\n pause: [\n '0 0 17 32',\n 'M14.080 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048zM2.88 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048z'\n ],\n 'volume-up': [\n '0 0 21 32',\n 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528zM25.152 16q0 2.72-1.536 5.056t-4 3.36q-0.256 0.096-0.448 0.096-0.48 0-0.832-0.352t-0.32-0.8q0-0.704 0.672-1.056 1.024-0.512 1.376-0.8 1.312-0.96 2.048-2.4t0.736-3.104-0.736-3.104-2.048-2.4q-0.352-0.288-1.376-0.8-0.672-0.352-0.672-1.056 0-0.448 0.32-0.8t0.8-0.352q0.224 0 0.48 0.096 2.496 1.056 4 3.36t1.536 5.056z'\n ],\n 'volume-down': [\n '0 0 21 32',\n 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528z'\n ],\n 'volume-off': [\n '0 0 21 32',\n 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8z'\n ],\n loop: [\n '0 0 32 32',\n 'M1.882 16.941c0 4.152 3.221 7.529 7.177 7.529v1.882c-4.996 0-9.060-4.222-9.060-9.412s4.064-9.412 9.060-9.412h7.96l-3.098-3.098 1.331-1.331 5.372 5.37-5.37 5.372-1.333-1.333 3.1-3.098h-7.962c-3.957 0-7.177 3.377-7.177 7.529zM22.94 7.529v1.882c3.957 0 7.177 3.377 7.177 7.529s-3.221 7.529-7.177 7.529h-7.962l3.098-3.098-1.331-1.331-5.37 5.37 5.372 5.372 1.331-1.331-3.1-3.1h7.96c4.998 0 9.062-4.222 9.062-9.412s-4.064-9.412-9.060-9.412z'\n ],\n full: [\n '0 0 32 33',\n 'M6.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v4h4c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333zM30.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h4v-4c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM30.667 12c-0.8 0-1.333-0.533-1.333-1.333v-4h-4c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM1.333 12c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333h-4v4c0 0.8-0.533 1.333-1.333 1.333z'\n ],\n 'full-in': [\n '0 0 32 33',\n 'M24.965 24.38h-18.132c-1.366 0-2.478-1.113-2.478-2.478v-11.806c0-1.364 1.111-2.478 2.478-2.478h18.132c1.366 0 2.478 1.113 2.478 2.478v11.806c0 1.364-1.11 2.478-2.478 2.478zM6.833 10.097v11.806h18.134l-0.002-11.806h-18.132zM2.478 28.928h5.952c0.684 0 1.238-0.554 1.238-1.239 0-0.684-0.554-1.238-1.238-1.238h-5.952v-5.802c0-0.684-0.554-1.239-1.238-1.239s-1.239 0.556-1.239 1.239v5.802c0 1.365 1.111 2.478 2.478 2.478zM30.761 19.412c-0.684 0-1.238 0.554-1.238 1.238v5.801h-5.951c-0.686 0-1.239 0.554-1.239 1.238 0 0.686 0.554 1.239 1.239 1.239h5.951c1.366 0 2.478-1.111 2.478-2.478v-5.801c0-0.683-0.554-1.238-1.239-1.238zM0 5.55v5.802c0 0.683 0.554 1.238 1.238 1.238s1.238-0.555 1.238-1.238v-5.802h5.952c0.684 0 1.238-0.554 1.238-1.238s-0.554-1.238-1.238-1.238h-5.951c-1.366-0.001-2.478 1.111-2.478 2.476zM32 11.35v-5.801c0-1.365-1.11-2.478-2.478-2.478h-5.951c-0.686 0-1.239 0.554-1.239 1.238s0.554 1.238 1.239 1.238h5.951v5.801c0 0.683 0.554 1.237 1.238 1.237 0.686 0.002 1.239-0.553 1.239-1.236z'\n ],\n setting: [\n '0 0 32 28',\n 'M28.633 17.104c0.035 0.21 0.026 0.463-0.026 0.76s-0.14 0.598-0.262 0.904c-0.122 0.306-0.271 0.581-0.445 0.825s-0.367 0.419-0.576 0.524c-0.209 0.105-0.393 0.157-0.55 0.157s-0.332-0.035-0.524-0.105c-0.175-0.052-0.393-0.1-0.655-0.144s-0.528-0.052-0.799-0.026c-0.271 0.026-0.541 0.083-0.812 0.17s-0.502 0.236-0.694 0.445c-0.419 0.437-0.664 0.934-0.734 1.493s0.009 1.092 0.236 1.598c0.175 0.349 0.148 0.699-0.079 1.048-0.105 0.14-0.271 0.284-0.498 0.432s-0.476 0.284-0.747 0.406-0.555 0.218-0.851 0.288c-0.297 0.070-0.559 0.105-0.786 0.105-0.157 0-0.306-0.061-0.445-0.183s-0.236-0.253-0.288-0.393h-0.026c-0.192-0.541-0.52-1.009-0.982-1.402s-1-0.589-1.611-0.589c-0.594 0-1.131 0.197-1.611 0.589s-0.816 0.851-1.009 1.375c-0.087 0.21-0.218 0.362-0.393 0.458s-0.367 0.144-0.576 0.144c-0.244 0-0.52-0.044-0.825-0.131s-0.611-0.197-0.917-0.327c-0.306-0.131-0.581-0.284-0.825-0.458s-0.428-0.349-0.55-0.524c-0.087-0.122-0.135-0.266-0.144-0.432s0.057-0.397 0.197-0.694c0.192-0.402 0.266-0.86 0.223-1.375s-0.266-0.991-0.668-1.428c-0.244-0.262-0.541-0.432-0.891-0.511s-0.681-0.109-0.995-0.092c-0.367 0.017-0.742 0.087-1.127 0.21-0.244 0.070-0.489 0.052-0.734-0.052-0.192-0.070-0.371-0.231-0.537-0.485s-0.314-0.533-0.445-0.838c-0.131-0.306-0.231-0.62-0.301-0.943s-0.087-0.59-0.052-0.799c0.052-0.384 0.227-0.629 0.524-0.734 0.524-0.21 0.995-0.555 1.415-1.035s0.629-1.017 0.629-1.611c0-0.611-0.21-1.144-0.629-1.598s-0.891-0.786-1.415-0.996c-0.157-0.052-0.288-0.179-0.393-0.38s-0.157-0.406-0.157-0.616c0-0.227 0.035-0.48 0.105-0.76s0.162-0.55 0.275-0.812 0.244-0.502 0.393-0.72c0.148-0.218 0.31-0.38 0.485-0.485 0.14-0.087 0.275-0.122 0.406-0.105s0.275 0.052 0.432 0.105c0.524 0.21 1.070 0.275 1.637 0.197s1.070-0.327 1.506-0.747c0.21-0.209 0.362-0.467 0.458-0.773s0.157-0.607 0.183-0.904c0.026-0.297 0.026-0.568 0-0.812s-0.048-0.419-0.065-0.524c-0.035-0.105-0.066-0.227-0.092-0.367s-0.013-0.262 0.039-0.367c0.105-0.244 0.293-0.458 0.563-0.642s0.563-0.336 0.878-0.458c0.314-0.122 0.62-0.214 0.917-0.275s0.533-0.092 0.707-0.092c0.227 0 0.406 0.074 0.537 0.223s0.223 0.301 0.275 0.458c0.192 0.471 0.507 0.886 0.943 1.244s0.952 0.537 1.546 0.537c0.611 0 1.153-0.17 1.624-0.511s0.803-0.773 0.996-1.297c0.070-0.14 0.179-0.284 0.327-0.432s0.301-0.223 0.458-0.223c0.244 0 0.511 0.035 0.799 0.105s0.572 0.166 0.851 0.288c0.279 0.122 0.537 0.279 0.773 0.472s0.423 0.402 0.563 0.629c0.087 0.14 0.113 0.293 0.079 0.458s-0.070 0.284-0.105 0.354c-0.227 0.506-0.297 1.039-0.21 1.598s0.341 1.048 0.76 1.467c0.419 0.419 0.934 0.651 1.546 0.694s1.179-0.057 1.703-0.301c0.14-0.087 0.31-0.122 0.511-0.105s0.371 0.096 0.511 0.236c0.262 0.244 0.493 0.616 0.694 1.113s0.336 1 0.406 1.506c0.035 0.297-0.013 0.528-0.144 0.694s-0.266 0.275-0.406 0.327c-0.542 0.192-1.004 0.528-1.388 1.009s-0.576 1.026-0.576 1.637c0 0.594 0.162 1.113 0.485 1.559s0.747 0.764 1.27 0.956c0.122 0.070 0.227 0.14 0.314 0.21 0.192 0.157 0.323 0.358 0.393 0.602v0zM16.451 19.462c0.786 0 1.528-0.149 2.227-0.445s1.305-0.707 1.821-1.231c0.515-0.524 0.921-1.131 1.218-1.821s0.445-1.428 0.445-2.214c0-0.786-0.148-1.524-0.445-2.214s-0.703-1.292-1.218-1.808c-0.515-0.515-1.122-0.921-1.821-1.218s-1.441-0.445-2.227-0.445c-0.786 0-1.524 0.148-2.214 0.445s-1.292 0.703-1.808 1.218c-0.515 0.515-0.921 1.118-1.218 1.808s-0.445 1.428-0.445 2.214c0 0.786 0.149 1.524 0.445 2.214s0.703 1.297 1.218 1.821c0.515 0.524 1.118 0.934 1.808 1.231s1.428 0.445 2.214 0.445v0z'\n ],\n right: [\n '0 0 32 32',\n 'M22 16l-10.105-10.6-1.895 1.987 8.211 8.613-8.211 8.612 1.895 1.988 8.211-8.613z'\n ],\n comment: [\n '0 0 32 32',\n 'M27.128 0.38h-22.553c-2.336 0-4.229 1.825-4.229 4.076v16.273c0 2.251 1.893 4.076 4.229 4.076h4.229v-2.685h8.403l-8.784 8.072 1.566 1.44 7.429-6.827h9.71c2.335 0 4.229-1.825 4.229-4.076v-16.273c0-2.252-1.894-4.076-4.229-4.076zM28.538 19.403c0 1.5-1.262 2.717-2.819 2.717h-8.36l-0.076-0.070-0.076 0.070h-11.223c-1.557 0-2.819-1.217-2.819-2.717v-13.589c0-1.501 1.262-2.718 2.819-2.718h19.734c1.557 0 2.819-0.141 2.819 1.359v14.947zM9.206 10.557c-1.222 0-2.215 0.911-2.215 2.036s0.992 2.035 2.215 2.035c1.224 0 2.216-0.911 2.216-2.035s-0.992-2.036-2.216-2.036zM22.496 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.224 0 2.215-0.911 2.215-2.035s-0.991-2.036-2.215-2.036zM15.852 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.222 0 2.215-0.911 2.215-2.035s-0.992-2.036-2.215-2.036z'\n ],\n 'comment-off': [\n '0 0 32 32',\n 'M27.090 0.131h-22.731c-2.354 0-4.262 1.839-4.262 4.109v16.401c0 2.269 1.908 4.109 4.262 4.109h4.262v-2.706h8.469l-8.853 8.135 1.579 1.451 7.487-6.88h9.787c2.353 0 4.262-1.84 4.262-4.109v-16.401c0-2.27-1.909-4.109-4.262-4.109v0zM28.511 19.304c0 1.512-1.272 2.738-2.841 2.738h-8.425l-0.076-0.070-0.076 0.070h-11.311c-1.569 0-2.841-1.226-2.841-2.738v-13.696c0-1.513 1.272-2.739 2.841-2.739h19.889c1.569 0 2.841-0.142 2.841 1.37v15.064z'\n ],\n send: [\n '0 0 32 32',\n 'M13.725 30l3.9-5.325-3.9-1.125v6.45zM0 17.5l11.050 3.35 13.6-11.55-10.55 12.425 11.8 3.65 6.1-23.375-32 15.5z'\n ],\n pallette: [\n '0 0 32 32',\n 'M19.357 2.88c1.749 0 3.366 0.316 4.851 0.946 1.485 0.632 2.768 1.474 3.845 2.533s1.922 2.279 2.532 3.661c0.611 1.383 0.915 2.829 0.915 4.334 0 1.425-0.304 2.847-0.915 4.271-0.611 1.425-1.587 2.767-2.928 4.028-0.855 0.813-1.811 1.607-2.869 2.38s-2.136 1.465-3.233 2.075c-1.099 0.61-2.198 1.098-3.296 1.465-1.098 0.366-2.115 0.549-3.051 0.549-1.343 0-2.441-0.438-3.296-1.311-0.854-0.876-1.281-2.41-1.281-4.608 0-0.366 0.020-0.773 0.060-1.221s0.062-0.895 0.062-1.343c0-0.773-0.183-1.353-0.55-1.738-0.366-0.387-0.793-0.58-1.281-0.58-0.652 0-1.21 0.295-1.678 0.886s-0.926 1.23-1.373 1.921c-0.447 0.693-0.905 1.334-1.372 1.923s-1.028 0.886-1.679 0.886c-0.529 0-1.048-0.427-1.556-1.282s-0.763-2.259-0.763-4.212c0-2.197 0.529-4.241 1.587-6.133s2.462-3.529 4.21-4.912c1.75-1.383 3.762-2.471 6.041-3.264 2.277-0.796 4.617-1.212 7.018-1.253zM7.334 15.817c0.569 0 1.047-0.204 1.434-0.611s0.579-0.875 0.579-1.404c0-0.569-0.193-1.047-0.579-1.434s-0.864-0.579-1.434-0.579c-0.529 0-0.987 0.193-1.373 0.579s-0.58 0.864-0.58 1.434c0 0.53 0.194 0.998 0.58 1.404 0.388 0.407 0.845 0.611 1.373 0.611zM12.216 11.79c0.691 0 1.292-0.254 1.8-0.763s0.762-1.107 0.762-1.8c0-0.732-0.255-1.343-0.762-1.831-0.509-0.489-1.109-0.732-1.8-0.732-0.732 0-1.342 0.244-1.831 0.732-0.488 0.488-0.732 1.098-0.732 1.831 0 0.693 0.244 1.292 0.732 1.8s1.099 0.763 1.831 0.763zM16.366 25.947c0.692 0 1.282-0.214 1.77-0.64s0.732-0.987 0.732-1.678-0.244-1.261-0.732-1.709c-0.489-0.448-1.078-0.671-1.77-0.671-0.65 0-1.21 0.223-1.678 0.671s-0.702 1.018-0.702 1.709c0 0.692 0.234 1.25 0.702 1.678s1.027 0.64 1.678 0.64zM19.113 9.592c0.651 0 1.129-0.203 1.433-0.611 0.305-0.406 0.459-0.874 0.459-1.404 0-0.488-0.154-0.947-0.459-1.373-0.304-0.427-0.782-0.641-1.433-0.641-0.529 0-1.008 0.193-1.434 0.58s-0.64 0.865-0.64 1.434c0 0.571 0.213 1.049 0.64 1.434 0.427 0.389 0.905 0.581 1.434 0.581zM24.848 12.826c0.57 0 1.067-0.213 1.495-0.64 0.427-0.427 0.64-0.947 0.64-1.556 0-0.57-0.214-1.068-0.64-1.495-0.428-0.427-0.927-0.64-1.495-0.64-0.611 0-1.129 0.213-1.555 0.64-0.428 0.427-0.642 0.926-0.642 1.495 0 0.611 0.213 1.129 0.642 1.556s0.947 0.64 1.555 0.64z'\n ],\n camera: [\n '0 0 32 32',\n 'M16 23c-3.309 0-6-2.691-6-6s2.691-6 6-6 6 2.691 6 6-2.691 6-6 6zM16 13c-2.206 0-4 1.794-4 4s1.794 4 4 4c2.206 0 4-1.794 4-4s-1.794-4-4-4zM27 28h-22c-1.654 0-3-1.346-3-3v-16c0-1.654 1.346-3 3-3h3c0.552 0 1 0.448 1 1s-0.448 1-1 1h-3c-0.551 0-1 0.449-1 1v16c0 0.552 0.449 1 1 1h22c0.552 0 1-0.448 1-1v-16c0-0.551-0.448-1-1-1h-11c-0.552 0-1-0.448-1-1s0.448-1 1-1h11c1.654 0 3 1.346 3 3v16c0 1.654-1.346 3-3 3zM24 10.5c0 0.828 0.672 1.5 1.5 1.5s1.5-0.672 1.5-1.5c0-0.828-0.672-1.5-1.5-1.5s-1.5 0.672-1.5 1.5zM15 4c0 0.552-0.448 1-1 1h-4c-0.552 0-1-0.448-1-1v0c0-0.552 0.448-1 1-1h4c0.552 0 1 0.448 1 1v0z'\n ],\n subtitle: [\n '0 0 32 32',\n 'M26.667 5.333h-21.333c-0 0-0.001 0-0.001 0-1.472 0-2.666 1.194-2.666 2.666 0 0 0 0.001 0 0.001v-0 16c0 0 0 0.001 0 0.001 0 1.472 1.194 2.666 2.666 2.666 0 0 0.001 0 0.001 0h21.333c0 0 0.001 0 0.001 0 1.472 0 2.666-1.194 2.666-2.666 0-0 0-0.001 0-0.001v0-16c0-0 0-0.001 0-0.001 0-1.472-1.194-2.666-2.666-2.666-0 0-0.001 0-0.001 0h0zM5.333 16h5.333v2.667h-5.333v-2.667zM18.667 24h-13.333v-2.667h13.333v2.667zM26.667 24h-5.333v-2.667h5.333v2.667zM26.667 18.667h-13.333v-2.667h13.333v2.667z'\n ]\n },\n iconsColor: '#ffffff',\n contextmenu: [],\n mutex: true\n };\n for (var defaultKey in defaultOption) {\n if (defaultOption.hasOwnProperty(defaultKey) && !options.hasOwnProperty(defaultKey)) {\n options[defaultKey] = defaultOption[defaultKey];\n }\n }\n if (options.video) {\n !options.video.type && (options.video.type = 'auto');\n }\n if (_typeof(options.danmaku) === 'object' && options.danmaku) {\n !options.danmaku.user && (options.danmaku.user = 'DIYgod');\n }\n if (options.subtitle) {\n !options.subtitle.type && (options.subtitle.type = 'webvtt');\n !options.subtitle.fontSize && (options.subtitle.fontSize = '20px');\n !options.subtitle.bottom && (options.subtitle.bottom = '40px');\n !options.subtitle.color && (options.subtitle.color = '#fff');\n }\n if (options.video.quality) {\n options.video.url = [options.video.quality[options.video.defaultQuality].url];\n }\n if (options.lang) {\n options.lang = options.lang.toLowerCase();\n }\n if (options.icons) {\n options.icons = Object.assign({}, defaultOption.icons, options.icons);\n }\n options.contextmenu = options.contextmenu.concat([\n {\n text: 'About author',\n link: 'https://diygod.me'\n },\n {\n text: 'About DPlayer',\n link: 'https://github.com/MoePlayer/DPlayer'\n },\n {\n text: 'DPlayer feedback',\n link: 'https://github.com/DIYgod/DPlayer/issues'\n },\n {\n text: 'DPlayer ' + DPLAYER_VERSION + ' ' + GIT_HASH,\n link: 'https://github.com/MoePlayer/DPlayer/releases'\n }\n ]);\n return options;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/options.js\n// module id = 4\n// module chunks = 0","'use strict';\nvar SendXMLHttpRequest = function SendXMLHttpRequest(url, data, success, error, fail) {\n var xhr = new XMLHttpRequest();\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {\n var response = JSON.parse(xhr.responseText);\n if (response.code !== 1) {\n return error(xhr, response);\n }\n return success(xhr, response);\n }\n fail(xhr);\n }\n };\n xhr.open(data !== null ? 'POST' : 'GET', url, true);\n xhr.send(data !== null ? JSON.stringify(data) : null);\n};\nmodule.exports = {\n send: function send(endpoint, danmakuData, callback) {\n SendXMLHttpRequest(endpoint, danmakuData, function (xhr, response) {\n console.log('Post danmaku: ', response);\n if (callback) {\n callback();\n }\n }, function (xhr, response) {\n alert(response.msg);\n }, function (xhr) {\n console.log('Request was unsuccessful: ' + xhr.status);\n });\n },\n read: function read(endpoint, callback) {\n SendXMLHttpRequest(endpoint, null, function (xhr, response) {\n callback(null, response.danmaku);\n }, function (xhr, response) {\n callback({\n status: xhr.status,\n response: response\n });\n }, function (xhr) {\n callback({\n status: xhr.status,\n response: null\n });\n });\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 5\n// module chunks = 0","'use strict';\nmodule.exports = function (lang) {\n var _this = this;\n this.lang = lang;\n this.tran = function (text) {\n if (tranTxt[_this.lang] && tranTxt[_this.lang][text]) {\n return tranTxt[_this.lang][text];\n } else {\n return text;\n }\n };\n};\nvar tranTxt = {\n 'zh-cn': {\n 'Danmaku is loading': '弹幕加载中',\n 'Top': '顶部',\n 'Bottom': '底部',\n 'Rolling': '滚动',\n 'Input danmaku, hit Enter': '输入弹幕\\uFF0C回车发送',\n 'About author': '关于作者',\n 'DPlayer feedback': '播放器意见反馈',\n 'About DPlayer': '关于 DPlayer 播放器',\n 'Loop': '洗脑循环',\n 'Speed': '速度',\n 'Opacity for danmaku': '弹幕透明度',\n 'Normal': '正常',\n 'Please input danmaku content!': '要输入弹幕内容啊喂\\uFF01',\n 'Set danmaku color': '设置弹幕颜色',\n 'Set danmaku type': '设置弹幕类型',\n 'Show danmaku': '显示弹幕',\n 'This video fails to load': '视频加载失败',\n 'Switching to': '正在切换至',\n 'Switched to': '已经切换至',\n 'quality': '画质',\n 'FF': '快进',\n 'REW': '快退',\n 'Unlimited danmaku': '海量弹幕',\n 'Send danmaku': '发送弹幕',\n 'Setting': '设置',\n 'Full screen': '全屏',\n 'Web full screen': '页面全屏',\n 'Send': '发送',\n 'Screenshot': '截图',\n 's': '秒',\n 'Show subtitle': '显示字幕',\n 'Hide subtitle': '隐藏字幕',\n 'Volume': '音量',\n 'Live': '直播'\n },\n 'zh-tw': {\n 'Danmaku is loading': '彈幕加載中',\n 'Top': '頂部',\n 'Bottom': '底部',\n 'Rolling': '滾動',\n 'Input danmaku, hit Enter': '輸入彈幕\\uFF0CEnter 發送',\n 'About author': '關於作者',\n 'DPlayer feedback': '播放器意見反饋',\n 'About DPlayer': '關於 DPlayer 播放器',\n 'Loop': '循環播放',\n 'Speed': '速度',\n 'Opacity for danmaku': '彈幕透明度',\n 'Normal': '正常',\n 'Please input danmaku content!': '請輸入彈幕内容啊\\uFF01',\n 'Set danmaku color': '設置彈幕顏色',\n 'Set danmaku type': '設置彈幕類型',\n 'Show danmaku': '顯示彈幕',\n 'This video fails to load': '視頻加載失敗',\n 'Switching to': '正在切換至',\n 'Switched to': '已經切換至',\n 'quality': '畫質',\n 'FF': '快進',\n 'REW': '快退',\n 'Unlimited danmaku': '海量彈幕',\n 'Send danmaku': '發送彈幕',\n 'Setting': '設置',\n 'Full screen': '全屏',\n 'Web full screen': '頁面全屏',\n 'Send': '發送',\n 'Screenshot': '截圖',\n 's': '秒',\n 'Show subtitle': '顯示字幕',\n 'Hide subtitle': '隱藏字幕',\n 'Volume': '音量',\n 'Live': '直播'\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/i18n.js\n// module id = 6\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Template = function () {\n function Template(options) {\n _classCallCheck(this, Template);\n this.container = options.container;\n this.options = options.options;\n this.index = options.index;\n this.tran = options.tran;\n this.icons = options.icons;\n this.init();\n }\n _createClass(Template, [\n {\n key: 'init',\n value: function init() {\n this.container.innerHTML = this.tpl(this.options, this.index, this.tran, this.icons);\n this.volumeBar = this.container.querySelector('.dplayer-volume-bar-inner');\n this.volumeBarWrap = this.container.querySelector('.dplayer-volume-bar');\n this.volumeBarWrapWrap = this.container.querySelector('.dplayer-volume-bar-wrap');\n this.volumeButton = this.container.querySelector('.dplayer-volume');\n this.volumeIcon = this.container.querySelector('.dplayer-volume-icon .dplayer-icon-content');\n this.playedBar = this.container.querySelector('.dplayer-played');\n this.loadedBar = this.container.querySelector('.dplayer-loaded');\n this.playedBarWrap = this.container.querySelector('.dplayer-bar-wrap');\n this.playedBarTime = this.container.querySelector('.dplayer-bar-time');\n this.danmaku = this.container.querySelector('.dplayer-danmaku');\n this.danmakuLoading = this.container.querySelector('.dplayer-danloading');\n this.video = this.container.querySelector('.dplayer-video-current');\n this.bezel = this.container.querySelector('.dplayer-bezel-icon');\n this.playButton = this.container.querySelector('.dplayer-play-icon');\n this.videoWrap = this.container.querySelector('.dplayer-video-wrap');\n this.controllerMask = this.container.querySelector('.dplayer-controller-mask');\n this.ptime = this.container.querySelector('.dplayer-ptime');\n this.settingButton = this.container.querySelector('.dplayer-setting-icon');\n this.settingBox = this.container.querySelector('.dplayer-setting-box');\n this.mask = this.container.querySelector('.dplayer-mask');\n this.loop = this.container.querySelector('.dplayer-setting-loop');\n this.loopToggle = this.container.querySelector('.dplayer-setting-loop .dplayer-toggle-setting-input');\n this.showDanmaku = this.container.querySelector('.dplayer-setting-showdan');\n this.showDanmakuToggle = this.container.querySelector('.dplayer-showdan-setting-input');\n this.unlimitDanmaku = this.container.querySelector('.dplayer-setting-danunlimit');\n this.unlimitDanmakuToggle = this.container.querySelector('.dplayer-danunlimit-setting-input');\n this.speed = this.container.querySelector('.dplayer-setting-speed');\n this.speedItem = this.container.querySelectorAll('dplayer-setting-speed-item');\n this.danmakuOpacityBar = this.container.querySelector('.dplayer-danmaku-bar-inner');\n this.danmakuOpacityBarWrap = this.container.querySelector('.dplayer-danmaku-bar');\n this.danmakuOpacityBarWrapWrap = this.container.querySelector('.dplayer-danmaku-bar-wrap');\n this.danmakuOpacityBox = this.container.querySelector('.dplayer-setting-danmaku');\n this.dtime = this.container.querySelector('.dplayer-dtime');\n this.controller = this.container.querySelector('.dplayer-controller');\n this.commentInput = this.container.querySelector('.dplayer-comment-input');\n this.commentButton = this.container.querySelector('.dplayer-comment-icon');\n this.commentSettingBox = this.container.querySelector('.dplayer-comment-setting-box');\n this.commentSettingButton = this.container.querySelector('.dplayer-comment-setting-icon');\n this.commentSettingFill = this.container.querySelector('.dplayer-comment-setting-icon .dplayer-fill');\n this.commentSendButton = this.container.querySelector('.dplayer-send-icon');\n this.commentSendFill = this.container.querySelector('.dplayer-send-icon .dplayer-fill');\n this.commentColorSettingBox = this.container.querySelector('.dplayer-comment-setting-color');\n this.browserFullButton = this.container.querySelector('.dplayer-full-icon');\n this.webFullButton = this.container.querySelector('.dplayer-full-in-icon');\n this.menu = this.container.querySelector('.dplayer-menu');\n this.qualityList = this.container.querySelector('.dplayer-quality-list');\n this.camareButton = this.container.querySelector('.dplayer-camera-icon');\n this.subtitleButton = this.container.querySelector('.dplayer-subtitle-icon');\n this.subtitleButtonInner = this.container.querySelector('.dplayer-subtitle-icon .dplayer-icon-content');\n this.subtitle = this.container.querySelector('.dplayer-subtitle');\n this.qualityButton = this.container.querySelector('.dplayer-quality-icon');\n this.barPreview = this.container.querySelector('.dplayer-bar-preview');\n this.barWrap = this.container.querySelector('.dplayer-bar-wrap');\n this.notice = this.container.querySelector('.dplayer-notice');\n }\n },\n {\n key: 'tpl',\n value: function tpl(options, index, tran, icons) {\n return '
' + this.tplVideo(true, options.video.pic, options.screenshot, options.preload, options.video.url, options.subtitle) + '' + (options.logo ? '
' : '') + '
' + (options.danmaku ? '' + tran('Danmaku is loading') + '' : '') + '
' + tran('Set danmaku color') + '
' + tran('Set danmaku type') + '
0:00 / 0:00' + (options.live ? '' + tran('Live') + '' : '') + '
' + (options.video.quality ? '
' + this.tplQualityList(options.video.quality) + '
' : '') + '' + (options.screenshot ? '' + icons.get('camera') + '' : '') + '
' + (options.subtitle ? '
' : '') + '
' + tran('Speed') + '
' + icons.get('right') + '
' + tran('Loop') + '
' + tran('Show danmaku') + '
' + tran('Unlimited danmaku') + '
' + tran('Opacity for danmaku') + '
0.5
0.75
' + tran('Normal') + '
1.25
1.5
2
00:00
' + this.tplContextmenuList(options.contextmenu, tran) + '
';\n }\n },\n {\n key: 'tplDanmakumargin',\n value: function tplDanmakumargin(margin) {\n var result = '';\n if (margin) {\n for (var key in margin) {\n result += key + ':' + margin[key] + ';';\n }\n }\n return result;\n }\n },\n {\n key: 'tplContextmenuList',\n value: function tplContextmenuList(contextmenu, tran) {\n var result = '
';\n for (var i = 0; i < contextmenu.length; i++) {\n result += '';\n }\n result += '
';\n return result;\n }\n },\n {\n key: 'tplQualityList',\n value: function tplQualityList(quality) {\n var result = '
';\n for (var i = 0; i < quality.length; i++) {\n result += '
' + quality[i].name + '
';\n }\n result += '
';\n return result;\n }\n },\n {\n key: 'tplVideo',\n value: function tplVideo(current, pic, screenshot, preload, url, subtitle) {\n var enableSubtitle = subtitle && subtitle.type === 'webvtt';\n return '';\n }\n }\n ]);\n return Template;\n}();\nmodule.exports = Template;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/template.js\n// module id = 7\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar SvgSource = function () {\n function SvgSource(options) {\n _classCallCheck(this, SvgSource);\n this.icons = options.icons;\n this.iconColor = options.iconsColor;\n }\n _createClass(SvgSource, [{\n key: 'get',\n value: function get(type) {\n return '';\n }\n }]);\n return SvgSource;\n}();\nmodule.exports = SvgSource;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/svg.js\n// module id = 8\n// module chunks = 0","'use strict';\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Danmaku = function () {\n function Danmaku(options) {\n _classCallCheck(this, Danmaku);\n this.options = options;\n this.container = this.options.container;\n this.danTunnel = {\n right: {},\n top: {},\n bottom: {}\n };\n this.danIndex = 0;\n this.dan = [];\n this.showing = true;\n this._opacity = this.options.opacity;\n this.events = this.options.events;\n this.unlimited = this.options.unlimited;\n this._measure('');\n this.load();\n }\n _createClass(Danmaku, [\n {\n key: 'load',\n value: function load() {\n var _this = this;\n var apiurl = void 0;\n if (this.options.api.maximum) {\n apiurl = this.options.api.address + '?id=' + this.options.api.id + '&max=' + this.options.api.maximum;\n } else {\n apiurl = this.options.api.address + '?id=' + this.options.api.id;\n }\n var endpoints = (this.options.api.addition || []).slice(0);\n endpoints.push(apiurl);\n this.events && this.events.trigger('danmaku_load_start', endpoints);\n this._readAllEndpoints(endpoints, function (results) {\n _this.dan = [].concat.apply([], results).sort(function (a, b) {\n return a.time - b.time;\n });\n window.requestAnimationFrame(function () {\n _this.frame();\n });\n _this.options.callback();\n _this.events && _this.events.trigger('danmaku_load_end');\n });\n }\n },\n {\n key: 'reload',\n value: function reload(newAPI) {\n this.options.api = newAPI;\n this.dan = [];\n this.clear();\n this.load();\n }\n },\n {\n key: '_readAllEndpoints',\n value: function _readAllEndpoints(endpoints, callback) {\n var _this2 = this;\n var results = [];\n var readCount = 0;\n var cbk = function cbk(i) {\n return function (err, data) {\n ++readCount;\n if (err) {\n if (err.response) {\n _this2.options.error(err.response.msg);\n } else {\n _this2.options.error('Request was unsuccessful: ' + err.status);\n }\n results[i] = [];\n } else {\n results[i] = data;\n }\n if (readCount === endpoints.length) {\n return callback(results);\n }\n };\n };\n for (var i = 0; i < endpoints.length; ++i) {\n this.options.apiBackend.read(endpoints[i], cbk(i));\n }\n }\n },\n {\n key: 'send',\n value: function send(dan, callback) {\n var danmakuData = {\n token: this.options.api.token,\n player: this.options.api.id,\n author: this.options.api.user,\n time: this.options.time(),\n text: dan.text,\n color: dan.color,\n type: dan.type\n };\n this.options.apiBackend.send(this.options.api.address, danmakuData, callback);\n this.dan.splice(this.danIndex, 0, danmakuData);\n this.danIndex++;\n var danmaku = {\n text: this.htmlEncode(danmakuData.text),\n color: danmakuData.color,\n type: danmakuData.type,\n border: '2px solid ' + this.options.borderColor\n };\n this.draw(danmaku);\n this.events && this.events.trigger('danmaku_send', danmakuData);\n }\n },\n {\n key: 'frame',\n value: function frame() {\n var _this3 = this;\n if (this.dan.length && !this.paused && this.showing) {\n var item = this.dan[this.danIndex];\n var dan = [];\n while (item && this.options.time() > parseFloat(item.time)) {\n dan.push(item);\n item = this.dan[++this.danIndex];\n }\n this.draw(dan);\n }\n window.requestAnimationFrame(function () {\n _this3.frame();\n });\n }\n },\n {\n key: 'opacity',\n value: function opacity(percentage) {\n if (percentage !== undefined) {\n var items = this.container.getElementsByClassName('dplayer-danmaku-item');\n for (var i = 0; i < items.length; i++) {\n items[i].style.opacity = percentage;\n }\n this._opacity = percentage;\n this.events && this.events.trigger('danmaku_opacity', this._opacity);\n }\n return this._opacity;\n }\n },\n {\n key: 'draw',\n value: function draw(dan) {\n var _this4 = this;\n if (this.showing) {\n var itemHeight = this.options.height;\n var danWidth = this.container.offsetWidth;\n var danHeight = this.container.offsetHeight;\n var itemY = parseInt(danHeight / itemHeight);\n var danItemRight = function danItemRight(ele) {\n var eleWidth = ele.offsetWidth || parseInt(ele.style.width);\n var eleRight = ele.getBoundingClientRect().right || _this4.container.getBoundingClientRect().right + eleWidth;\n return _this4.container.getBoundingClientRect().right - eleRight;\n };\n var danSpeed = function danSpeed(width) {\n return (danWidth + width) / 5;\n };\n var getTunnel = function getTunnel(ele, type, width) {\n var tmp = danWidth / danSpeed(width);\n var _loop = function _loop(i) {\n var item = _this4.danTunnel[type][i + ''];\n if (item && item.length) {\n if (type !== 'right') {\n return 'continue';\n }\n for (var j = 0; j < item.length; j++) {\n var danRight = danItemRight(item[j]) - 10;\n if (danRight <= danWidth - tmp * danSpeed(parseInt(item[j].style.width)) || danRight <= 0) {\n break;\n }\n if (j === item.length - 1) {\n _this4.danTunnel[type][i + ''].push(ele);\n ele.addEventListener('animationend', function () {\n _this4.danTunnel[type][i + ''].splice(0, 1);\n });\n return { v: i % itemY };\n }\n }\n } else {\n _this4.danTunnel[type][i + ''] = [ele];\n ele.addEventListener('animationend', function () {\n _this4.danTunnel[type][i + ''].splice(0, 1);\n });\n return { v: i % itemY };\n }\n };\n for (var i = 0; _this4.unlimited || i < itemY; i++) {\n var _ret = _loop(i);\n switch (_ret) {\n case 'continue':\n continue;\n default:\n if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === 'object')\n return _ret.v;\n }\n }\n return -1;\n };\n if (Object.prototype.toString.call(dan) !== '[object Array]') {\n dan = [dan];\n }\n var docFragment = document.createDocumentFragment();\n var _loop2 = function _loop2(i) {\n if (!dan[i].type) {\n dan[i].type = 'right';\n }\n if (!dan[i].color) {\n dan[i].color = '#fff';\n }\n var item = document.createElement('div');\n item.classList.add('dplayer-danmaku-item');\n item.classList.add('dplayer-danmaku-' + dan[i].type);\n if (dan[i].border) {\n item.innerHTML = '' + dan[i].text + '';\n } else {\n item.innerHTML = dan[i].text;\n }\n item.style.opacity = _this4._opacity;\n item.style.color = dan[i].color;\n item.addEventListener('animationend', function () {\n _this4.container.removeChild(item);\n });\n var itemWidth = _this4._measure(dan[i].text);\n var tunnel = void 0;\n switch (dan[i].type) {\n case 'right':\n tunnel = getTunnel(item, dan[i].type, itemWidth);\n if (tunnel >= 0) {\n item.style.width = itemWidth + 1 + 'px';\n item.style.top = itemHeight * tunnel + 'px';\n item.style.transform = 'translateX(-' + danWidth + 'px)';\n }\n break;\n case 'top':\n tunnel = getTunnel(item, dan[i].type);\n if (tunnel >= 0) {\n item.style.top = itemHeight * tunnel + 'px';\n }\n break;\n case 'bottom':\n tunnel = getTunnel(item, dan[i].type);\n if (tunnel >= 0) {\n item.style.bottom = itemHeight * tunnel + 'px';\n }\n break;\n default:\n console.error('Can\\'t handled danmaku type: ' + dan[i].type);\n }\n if (tunnel >= 0) {\n item.classList.add('dplayer-danmaku-move');\n docFragment.appendChild(item);\n }\n };\n for (var i = 0; i < dan.length; i++) {\n _loop2(i);\n }\n this.container.appendChild(docFragment);\n return docFragment;\n }\n }\n },\n {\n key: 'play',\n value: function play() {\n this.paused = false;\n }\n },\n {\n key: 'pause',\n value: function pause() {\n this.paused = true;\n }\n },\n {\n key: '_measure',\n value: function _measure(text) {\n if (!this.context) {\n var measureStyle = getComputedStyle(this.container.getElementsByClassName('dplayer-danmaku-item')[0], null);\n this.context = document.createElement('canvas').getContext('2d');\n this.context.font = measureStyle.getPropertyValue('font');\n }\n return this.context.measureText(text).width;\n }\n },\n {\n key: 'seek',\n value: function seek() {\n this.clear();\n for (var i = 0; i < this.dan.length; i++) {\n if (this.dan[i].time >= this.options.time()) {\n this.danIndex = i;\n break;\n }\n this.danIndex = this.dan.length;\n }\n }\n },\n {\n key: 'clear',\n value: function clear() {\n this.danTunnel = {\n right: {},\n top: {},\n bottom: {}\n };\n this.danIndex = 0;\n this.options.container.innerHTML = '';\n this.events && this.events.trigger('danmaku_clear');\n }\n },\n {\n key: 'htmlEncode',\n value: function htmlEncode(str) {\n return str.replace(/&/g, '&').replace(//g, '>').replace(/\"/g, '"').replace(/'/g, ''').replace(/\\//g, '/');\n }\n },\n {\n key: 'resize',\n value: function resize() {\n var danWidth = this.container.offsetWidth;\n var items = this.container.getElementsByClassName('dplayer-danmaku-item');\n for (var i = 0; i < items.length; i++) {\n items[i].style.transform = 'translateX(-' + danWidth + 'px)';\n }\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.showing = false;\n this.pause();\n this.clear();\n this.events && this.events.trigger('danmaku_hide');\n }\n },\n {\n key: 'show',\n value: function show() {\n this.seek();\n this.showing = true;\n this.play();\n this.events && this.events.trigger('danmaku_show');\n }\n },\n {\n key: 'unlimit',\n value: function unlimit(boolean) {\n this.unlimited = boolean;\n }\n }\n ]);\n return Danmaku;\n}();\nmodule.exports = Danmaku;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/danmaku.js\n// module id = 9\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Thumbnails = function () {\n function Thumbnails(container, width, url, events) {\n _classCallCheck(this, Thumbnails);\n this.container = container;\n this.width = width;\n this.container.style.backgroundImage = 'url(\\'' + url + '\\')';\n this.events = events;\n }\n _createClass(Thumbnails, [\n {\n key: 'resize',\n value: function resize(width, height) {\n this.container.style.width = width + 'px';\n this.container.style.height = height + 'px';\n this.container.style.top = -height + 2 + 'px';\n }\n },\n {\n key: 'show',\n value: function show() {\n this.container.style.display = 'block';\n this.events && this.events.trigger('thumbnails_show');\n }\n },\n {\n key: 'move',\n value: function move(position) {\n this.container.style.backgroundPosition = '-' + (Math.ceil(position / this.width * 100) - 1) * 160 + 'px 0';\n this.container.style.left = position - this.container.offsetWidth / 2 + 'px';\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.container.style.display = 'none';\n this.events && this.events.trigger('thumbnails_hide');\n }\n }\n ]);\n return Thumbnails;\n}();\nmodule.exports = Thumbnails;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/thumbnails.js\n// module id = 10\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Events = function () {\n function Events() {\n _classCallCheck(this, Events);\n this.events = {};\n this.videoEvents = [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\n 'mozaudioavailable',\n 'pause',\n 'play',\n 'playing',\n 'progress',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'stalled',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'waiting'\n ];\n this.playerEvents = [\n 'screenshot',\n 'thumbnails_show',\n 'thumbnails_hide',\n 'danmaku_show',\n 'danmaku_hide',\n 'danmaku_clear',\n 'danmaku_loaded',\n 'danmaku_send',\n 'danmaku_opacity',\n 'contextmenu_show',\n 'contextmenu_hide',\n 'notice_show',\n 'notice_hide',\n 'quality_start',\n 'quality_end',\n 'destroy',\n 'resize',\n 'fullscreen',\n 'fullscreen_cancel',\n 'webfullscreen',\n 'webfullscreen_cancel',\n 'subtitle_show',\n 'subtitle_hide',\n 'subtitle_change'\n ];\n }\n _createClass(Events, [\n {\n key: 'on',\n value: function on(name, callback) {\n if (this.type(name) && typeof callback === 'function') {\n if (!this.events[name]) {\n this.events[name] = [];\n }\n this.events[name].push(callback);\n }\n }\n },\n {\n key: 'trigger',\n value: function trigger(name, info) {\n if (this.events[name] && this.events[name].length) {\n for (var i = 0; i < this.events[name].length; i++) {\n this.events[name][i](info);\n }\n }\n }\n },\n {\n key: 'type',\n value: function type(name) {\n if (this.playerEvents.indexOf(name) !== -1) {\n return 'player';\n } else if (this.videoEvents.indexOf(name) !== -1) {\n return 'video';\n }\n console.error('Unknown event name: ' + name);\n return null;\n }\n }\n ]);\n return Events;\n}();\nmodule.exports = Events;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/events.js\n// module id = 11\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar FullScreen = function () {\n function FullScreen(player) {\n var _this = this;\n _classCallCheck(this, FullScreen);\n this.player = player;\n this.player.events.on('webfullscreen', function () {\n _this.player.resize();\n });\n this.player.events.on('webfullscreen_cancel', function () {\n _this.player.resize();\n });\n var fullscreenchange = function fullscreenchange() {\n _this.player.resize();\n if (_this.isFullScreen('browser')) {\n _this.player.events.trigger('fullscreen');\n } else {\n _this.player.events.trigger('fullscreen_cancel');\n }\n };\n this.player.container.addEventListener('fullscreenchange', fullscreenchange);\n this.player.container.addEventListener('mozfullscreenchange', fullscreenchange);\n this.player.container.addEventListener('webkitfullscreenchange', fullscreenchange);\n }\n _createClass(FullScreen, [\n {\n key: 'isFullScreen',\n value: function isFullScreen() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n switch (type) {\n case 'browser':\n return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n case 'web':\n return this.player.container.classList.contains('dplayer-fulled');\n }\n }\n },\n {\n key: 'request',\n value: function request() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n switch (type) {\n case 'browser':\n if (this.player.container.requestFullscreen) {\n this.player.container.requestFullscreen();\n } else if (this.player.container.mozRequestFullScreen) {\n this.player.container.mozRequestFullScreen();\n } else if (this.player.container.webkitRequestFullscreen) {\n this.player.container.webkitRequestFullscreen();\n } else if (this.player.video.webkitEnterFullscreen) {\n this.player.video.webkitEnterFullscreen();\n }\n break;\n case 'web':\n this.player.container.classList.add('dplayer-fulled');\n this.lastScrollPosition = _utils2.default.getScrollPosition();\n document.body.classList.add('dplayer-web-fullscreen-fix');\n this.player.events.trigger('webfullscreen');\n break;\n }\n }\n },\n {\n key: 'cancel',\n value: function cancel() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n switch (type) {\n case 'browser':\n if (document.cancelFullScreen) {\n document.cancelFullScreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.webkitCancelFullScreen) {\n document.webkitCancelFullScreen();\n }\n break;\n case 'web':\n this.player.container.classList.remove('dplayer-fulled');\n document.body.classList.remove('dplayer-web-fullscreen-fix');\n _utils2.default.setScrollPosition(this.lastScrollPosition);\n this.player.events.trigger('webfullscreen_cancel');\n break;\n }\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n if (this.isFullScreen(type)) {\n this.cancel(type);\n } else {\n this.request(type);\n var anotherType = type === 'browser' ? 'web' : 'browser';\n if (this.isFullScreen(anotherType)) {\n this.cancel(anotherType);\n }\n }\n }\n }\n ]);\n return FullScreen;\n}();\nmodule.exports = FullScreen;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/fullscreen.js\n// module id = 12\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar User = function () {\n function User(player) {\n _classCallCheck(this, User);\n this.storageName = {\n opacity: 'dplayer-danmaku-opacity',\n volume: 'dplayer-volume',\n unlimited: 'dplayer-danmaku-unlimited',\n danmaku: 'dplayer-danmaku-show',\n subtitle: 'dplayer-subtitle-show'\n };\n this.default = {\n opacity: 0.7,\n volume: player.options.volume || 0.7,\n unlimited: (player.options.danmaku && player.options.danmaku.unlimited ? 1 : 0) || 0,\n danmaku: 1,\n subtitle: 1\n };\n this.data = {};\n this.init();\n }\n _createClass(User, [\n {\n key: 'init',\n value: function init() {\n for (var item in this.storageName) {\n var name = this.storageName[item];\n this.data[item] = parseFloat(_utils2.default.storage.get(name) || this.default[item]);\n }\n }\n },\n {\n key: 'get',\n value: function get(key) {\n return this.data[key];\n }\n },\n {\n key: 'set',\n value: function set(key, value) {\n this.data[key] = value;\n _utils2.default.storage.set(this.storageName[key], value);\n }\n }\n ]);\n return User;\n}();\nmodule.exports = User;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/user.js\n// module id = 13\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Subtitle = function () {\n function Subtitle(container, video, options, events) {\n _classCallCheck(this, Subtitle);\n this.container = container;\n this.video = video;\n this.options = options;\n this.events = events;\n this.init();\n }\n _createClass(Subtitle, [\n {\n key: 'init',\n value: function init() {\n var _this = this;\n this.container.style.fontSize = this.options.fontSize;\n this.container.style.bottom = this.options.bottom;\n this.container.style.color = this.options.color;\n if (this.video.textTracks && this.video.textTracks[0]) {\n var track = this.video.textTracks[0];\n track.oncuechange = function () {\n var cue = track.activeCues[0];\n if (cue) {\n _this.container.innerHTML = '';\n var p = document.createElement('p');\n p.appendChild(cue.getCueAsHTML());\n _this.container.appendChild(p);\n } else {\n _this.container.innerHTML = '';\n }\n _this.events.trigger('subtitle_change');\n };\n }\n }\n },\n {\n key: 'show',\n value: function show() {\n this.container.classList.remove('dplayer-subtitle-hide');\n this.events.trigger('subtitle_show');\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.container.classList.add('dplayer-subtitle-hide');\n this.events.trigger('subtitle_hide');\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.container.classList.contains('dplayer-subtitle-hide')) {\n this.show();\n } else {\n this.hide();\n }\n }\n }\n ]);\n return Subtitle;\n}();\nmodule.exports = Subtitle;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/subtitle.js\n// module id = 14\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Bar = function () {\n function Bar(template) {\n _classCallCheck(this, Bar);\n this.elements = {};\n this.elements.volume = template.volumeBar;\n this.elements.played = template.playedBar;\n this.elements.loaded = template.loadedBar;\n this.elements.danmaku = template.danmakuOpacityBar;\n }\n _createClass(Bar, [\n {\n key: 'set',\n value: function set(type, percentage, direction) {\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n this.elements[type].style[direction] = percentage * 100 + '%';\n }\n },\n {\n key: 'get',\n value: function get(type) {\n return parseFloat(this.elements[type].style.width) / 100;\n }\n }\n ]);\n return Bar;\n}();\nmodule.exports = Bar;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/bar.js\n// module id = 15\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Time = function () {\n function Time(player) {\n _classCallCheck(this, Time);\n this.player = player;\n window.requestAnimationFrame = function () {\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n window.setTimeout(callback, 1000 / 60);\n };\n }();\n this.types = [\n 'loading',\n 'progress'\n ];\n this.init();\n }\n _createClass(Time, [\n {\n key: 'init',\n value: function init() {\n for (var i = 0; i < this.types.length; i++) {\n var type = this.types[i];\n this['init' + type + 'Checker']();\n }\n }\n },\n {\n key: 'initloadingChecker',\n value: function initloadingChecker() {\n var _this = this;\n var lastPlayPos = 0;\n var currentPlayPos = 0;\n var bufferingDetected = false;\n this.loadingChecker = setInterval(function () {\n if (_this.enableloadingChecker) {\n currentPlayPos = _this.player.video.currentTime;\n if (!bufferingDetected && currentPlayPos === lastPlayPos && !_this.player.video.paused) {\n _this.player.container.classList.add('dplayer-loading');\n bufferingDetected = true;\n }\n if (bufferingDetected && currentPlayPos > lastPlayPos && !_this.player.video.paused) {\n _this.player.container.classList.remove('dplayer-loading');\n bufferingDetected = false;\n }\n lastPlayPos = currentPlayPos;\n }\n }, 100);\n }\n },\n {\n key: 'initprogressChecker',\n value: function initprogressChecker() {\n var _this2 = this;\n this.progressChecker = setInterval(function () {\n if (_this2.enableprogressChecker) {\n _this2.player.bar.set('played', _this2.player.video.currentTime / _this2.player.video.duration, 'width');\n var currentTime = _utils2.default.secondToTime(_this2.player.video.currentTime);\n if (_this2.player.template.ptime.innerHTML !== currentTime) {\n _this2.player.template.ptime.innerHTML = _utils2.default.secondToTime(_this2.player.video.currentTime);\n }\n }\n }, 100);\n }\n },\n {\n key: 'enable',\n value: function enable(type) {\n if (type) {\n this['enable' + type + 'Checker'] = true;\n } else {\n for (var i = 0; i < this.types.length; i++) {\n var _type = this.types[i];\n this['enable' + _type + 'Checker'] = true;\n }\n }\n }\n },\n {\n key: 'disable',\n value: function disable(type) {\n if (type) {\n this['enable' + type + 'Checker'] = false;\n } else {\n for (var i = 0; i < this.types.length; i++) {\n var _type2 = this.types[i];\n this['enable' + _type2 + 'Checker'] = false;\n }\n }\n }\n },\n {\n key: 'distroy',\n value: function distroy(type) {\n if (type) {\n clearInterval(this[type + 'Checker']);\n } else {\n for (var i = 0; i < this.types.length; i++) {\n clearInterval(this[this.types[i] + 'Checker']);\n }\n }\n }\n }\n ]);\n return Time;\n}();\nmodule.exports = Time;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/time.js\n// module id = 16\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Bezel = function () {\n function Bezel(container) {\n var _this = this;\n _classCallCheck(this, Bezel);\n this.container = container;\n this.container.addEventListener('animationend', function () {\n _this.container.classList.remove('dplayer-bezel-transition');\n });\n }\n _createClass(Bezel, [{\n key: 'switch',\n value: function _switch(icon) {\n this.container.innerHTML = icon;\n this.container.classList.add('dplayer-bezel-transition');\n }\n }]);\n return Bezel;\n}();\nmodule.exports = Bezel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/bezel.js\n// module id = 17\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///DPlayer.min.js","webpack:///webpack/bootstrap c39b5b5b679bd459a63e","webpack:///./src/utils.js","webpack:///./src/index.js","webpack:///./src/DPlayer.js","webpack:///./src/options.js","webpack:///./src/api.js","webpack:///./src/i18n.js","webpack:///./src/template.js","webpack:///./src/svg.js","webpack:///./src/danmaku.js","webpack:///./src/thumbnails.js","webpack:///./src/events.js","webpack:///./src/fullscreen.js","webpack:///./src/user.js","webpack:///./src/subtitle.js","webpack:///./src/bar.js","webpack:///./src/time.js","webpack:///./src/bezel.js","webpack:///./src/controller.js","webpack:///./src/setting.js","webpack:///./src/comment.js"],"names":["root","factory","exports","module","define","amd","self","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","secondToTime","second","add0","num","min","parseInt","sec","getElementViewLeft","element","actualLeft","offsetLeft","current","offsetParent","elementScrollLeft","document","body","scrollLeft","documentElement","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","getScrollPosition","left","window","pageXOffset","top","pageYOffset","scrollTop","setScrollPosition","_ref","_ref$left","undefined","_ref$top","isFirefox","scrollTo","isMobile","test","navigator","userAgent","isChrome","storage","set","key","value","localStorage","setItem","getItem","console","log","_interopRequireDefault","obj","default","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","length","descriptor","writable","protoProps","staticProps","_utils","_utils2","_options","_options2","_i18n","_i18n2","_template","_template2","_svg","_svg2","_danmaku","_danmaku2","_thumbnails","_thumbnails2","_events","_events2","_fullscreen","_fullscreen2","_user","_user2","_subtitle","_subtitle2","_bar","_bar2","_time","_time2","_bezel","_bezel2","_controller","_controller2","_setting","_setting2","_comment","_comment2","index","instances","DPlayer","options","_this","video","quality","qualityIndex","defaultQuality","tran","lang","icons","events","user","container","classList","add","danmaku","live","arrow","offsetWidth","template","bar","bezel","controller","opacity","callback","setTimeout","danmakuLoading","style","display","autoplay","play","pause","error","msg","notice","apiBackend","borderColor","theme","height","time","currentTime","unlimited","api","id","address","token","maximum","addition","comment","setting","addEventListener","focus","paused","playButton","toggle","videoWrap","controllerMask","thumbnails","initThumbnails","isTimeTipsShow","mouseHandler","playedBarWrap","playedBarTime","bind","barWidth","thumbMove","e","percentage","clientX","Math","max","ptime","innerHTML","duration","thumbUp","removeEventListener","seek","enable","clientWidth","disable","switchVolumeIcon","volume","volumeIcon","volumeMove","event","volumeBarWrap","volumeUp","volumeButton","remove","volumeBarWrapWrap","muted","dtime","fullScreen","browserFullButton","webFullButton","handleKeyDown","tag","activeElement","tagName","toUpperCase","editable","getAttribute","keyCode","preventDefault","setAutoHide","hotkey","isFullScreen","cancel","menu","clientRect","getBoundingClientRect","menuLeft","menuTop","clientY","width","right","offsetHeight","bottom","mask","trigger","qualityList","contains","switchQuality","dataset","screenshot","camareButton","canvas","createElement","videoWidth","videoHeight","getContext","drawImage","dataURL","toDataURL","href","download","subtitle","on","subtitleButton","balloon","subtitleButtonInner","initVideo","type","push","toFixed","switch","mutex","ended","nostorage","nonotice","parseFloat","isNaN","formatPercentage","danmakuAPI","poster","pic","src","url","initMSE","reload","exec","Hls","isSupported","hls","loadSource","attachMedia","flvjs","flvPlayer","createPlayer","attachMediaElement","load","dashjs","MediaPlayer","create","initialize","_this2","buffered","end","loop","danIndex","videoEvents","hide","_this3","switchingQuality","qualityButton","videoHTML","tplVideo","videoEle","DOMParser","parseFromString","firstChild","insertBefore","getElementsByTagName","prevVideo","removeChild","pbar","timeTips","_this4","cumulativeOffset","offsetTop","px","tx","show","move","innerText","timeTipsDisplay","_this5","barPreview","barWrap","resize","text","_this6","arguments","noticeTime","clearTimeout","splice","indexOf","destroy","_typeof","Symbol","iterator","constructor","defaultApiBackend","defaultOption","getElementsByClassName","language","browserLanguage","toLowerCase","preload","volume-up","volume-down","volume-off","full","full-in","comment-off","send","pallette","camera","iconsColor","contextmenu","defaultKey","fontSize","color","assign","concat","link","SendXMLHttpRequest","data","success","fail","xhr","XMLHttpRequest","onreadystatechange","readyState","status","response","JSON","parse","responseText","code","open","stringify","endpoint","danmakuData","alert","read","tranTxt","zh-cn","Danmaku is loading","Top","Bottom","Rolling","Input danmaku, hit Enter","About author","DPlayer feedback","About DPlayer","Loop","Speed","Opacity for danmaku","Normal","Please input danmaku content!","Set danmaku color","Set danmaku type","Show danmaku","This video fails to load","Switching to","Switched to","FF","REW","Unlimited danmaku","Send danmaku","Setting","Full screen","Web full screen","Send","Screenshot","Show subtitle","Hide subtitle","Volume","Live","zh-tw","Template","init","tpl","volumeBar","querySelector","playedBar","loadedBar","settingButton","settingBox","loopToggle","showDanmaku","showDanmakuToggle","unlimitDanmaku","unlimitDanmakuToggle","speed","speedItem","querySelectorAll","danmakuOpacityBar","danmakuOpacityBarWrap","danmakuOpacityBarWrapWrap","danmakuOpacityBox","commentInput","commentButton","commentSettingBox","commentSettingButton","commentSettingFill","commentSendButton","commentSendFill","commentColorSettingBox","logo","tplDanmakumargin","margin","tplQualityList","tplContextmenuList","result","enableSubtitle","SvgSource","iconColor","Danmaku","danTunnel","dan","showing","_opacity","_measure","apiurl","endpoints","slice","_readAllEndpoints","results","apply","sort","a","b","requestAnimationFrame","frame","newAPI","clear","readCount","err","player","author","htmlEncode","border","draw","item","items","itemHeight","danWidth","danHeight","itemY","danItemRight","ele","eleWidth","eleRight","danSpeed","getTunnel","tmp","_ret","v","j","danRight","toString","docFragment","createDocumentFragment","itemWidth","tunnel","transform","appendChild","context","measureStyle","getComputedStyle","font","getPropertyValue","measureText","str","replace","boolean","Thumbnails","backgroundImage","position","backgroundPosition","ceil","Events","playerEvents","info","FullScreen","lastScrollPosition","fullscreenchange","anotherType","anotherTypeOn","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","webkitEnterFullscreen","cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen","request","User","storageName","Subtitle","textTracks","track","oncuechange","cue","activeCues","getCueAsHTML","Bar","elements","played","loaded","direction","Time","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","types","lastPlayPos","currentPlayPos","bufferingDetected","loadingChecker","setInterval","enableloadingChecker","progressChecker","enableprogressChecker","_type","_type2","clearInterval","Bezel","icon","Controller","autoHideTimer","disableAutoHide","isShow","SettingBox","checked","unlimit","playbackRate","danmakuMove","danmakuUp","Comment","toggleSetting","fill","hideSetting","showSetting","blur"],"mappings":"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","file":"DPlayer.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"DPlayer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DPlayer\"] = factory();\n\telse\n\t\troot[\"DPlayer\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"DPlayer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DPlayer\"] = factory();\n\telse\n\t\troot[\"DPlayer\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nmodule.exports = {\n secondToTime: function secondToTime(second) {\n var add0 = function add0(num) {\n return num < 10 ? '0' + num : '' + num;\n };\n var min = parseInt(second / 60);\n var sec = parseInt(second - min * 60);\n return add0(min) + ':' + add0(sec);\n },\n getElementViewLeft: function getElementViewLeft(element) {\n var actualLeft = element.offsetLeft;\n var current = element.offsetParent;\n var elementScrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;\n if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {\n while (current !== null) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n } else {\n while (current !== null && current !== element) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n }\n return actualLeft - elementScrollLeft;\n },\n getScrollPosition: function getScrollPosition() {\n return {\n left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0,\n top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0\n };\n },\n setScrollPosition: function setScrollPosition(_ref) {\n var _ref$left = _ref.left, left = _ref$left === undefined ? 0 : _ref$left, _ref$top = _ref.top, top = _ref$top === undefined ? 0 : _ref$top;\n if (this.isFirefox) {\n document.documentElement.scrollLeft = left;\n document.documentElement.scrollTop = top;\n } else {\n window.scrollTo(left, top);\n }\n },\n isMobile: /mobile/i.test(window.navigator.userAgent),\n isFirefox: /firefox/i.test(window.navigator.userAgent),\n isChrome: /chrome/i.test(window.navigator.userAgent),\n storage: {\n set: function set(key, value) {\n localStorage.setItem(key, value);\n },\n get: function get(key) {\n return localStorage.getItem(key);\n }\n }\n};\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nconsole.log('\\n' + ' %c DPlayer ' + \"1.17.2\" + ' ' + \"0cae80b\" + ' %c http://dplayer.js.org ' + '\\n' + '\\n', 'color: #fadfa3; background: #030307; padding:5px 0;', 'background: #fadfa3; padding:5px 0;');\nmodule.exports = __webpack_require__(2);\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n__webpack_require__(3);\nvar _utils = __webpack_require__(0);\nvar _utils2 = _interopRequireDefault(_utils);\nvar _options = __webpack_require__(4);\nvar _options2 = _interopRequireDefault(_options);\nvar _i18n = __webpack_require__(6);\nvar _i18n2 = _interopRequireDefault(_i18n);\nvar _template = __webpack_require__(7);\nvar _template2 = _interopRequireDefault(_template);\nvar _svg = __webpack_require__(8);\nvar _svg2 = _interopRequireDefault(_svg);\nvar _danmaku = __webpack_require__(9);\nvar _danmaku2 = _interopRequireDefault(_danmaku);\nvar _thumbnails = __webpack_require__(10);\nvar _thumbnails2 = _interopRequireDefault(_thumbnails);\nvar _events = __webpack_require__(11);\nvar _events2 = _interopRequireDefault(_events);\nvar _fullscreen = __webpack_require__(12);\nvar _fullscreen2 = _interopRequireDefault(_fullscreen);\nvar _user = __webpack_require__(13);\nvar _user2 = _interopRequireDefault(_user);\nvar _subtitle = __webpack_require__(14);\nvar _subtitle2 = _interopRequireDefault(_subtitle);\nvar _bar = __webpack_require__(15);\nvar _bar2 = _interopRequireDefault(_bar);\nvar _time = __webpack_require__(16);\nvar _time2 = _interopRequireDefault(_time);\nvar _bezel = __webpack_require__(17);\nvar _bezel2 = _interopRequireDefault(_bezel);\nvar _controller = __webpack_require__(18);\nvar _controller2 = _interopRequireDefault(_controller);\nvar _setting = __webpack_require__(19);\nvar _setting2 = _interopRequireDefault(_setting);\nvar _comment = __webpack_require__(20);\nvar _comment2 = _interopRequireDefault(_comment);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar index = 0;\nvar instances = [];\nvar DPlayer = function () {\n function DPlayer(options) {\n var _this = this;\n _classCallCheck(this, DPlayer);\n this.options = (0, _options2.default)(options);\n if (this.options.video.quality) {\n this.qualityIndex = this.options.video.defaultQuality;\n this.quality = this.options.video.quality[this.options.video.defaultQuality];\n }\n this.tran = new _i18n2.default(this.options.lang).tran;\n this.icons = new _svg2.default(this.options);\n this.events = new _events2.default();\n this.user = new _user2.default(this);\n this.container = this.options.container;\n this.container.classList.add('dplayer');\n if (!this.options.danmaku) {\n this.container.classList.add('dplayer-no-danmaku');\n }\n if (this.options.live) {\n this.container.classList.add('dplayer-live');\n }\n if (_utils.isMobile) {\n this.container.classList.add('dplayer-mobile');\n }\n this.arrow = this.container.offsetWidth <= 500;\n if (this.arrow) {\n this.container.classList.add('dplayer-arrow');\n }\n this.template = new _template2.default({\n container: this.container,\n options: this.options,\n index: index,\n tran: this.tran,\n icons: this.icons\n });\n this.video = this.template.video;\n this.bar = new _bar2.default(this.template);\n this.bezel = new _bezel2.default(this.template.bezel);\n this.controller = new _controller2.default(this);\n if (this.options.danmaku) {\n this.danmaku = new _danmaku2.default({\n container: this.template.danmaku,\n opacity: this.user.get('opacity'),\n callback: function callback() {\n setTimeout(function () {\n _this.template.danmakuLoading.style.display = 'none';\n if (_this.options.autoplay && !_utils.isMobile) {\n _this.play();\n } else if (_utils.isMobile) {\n _this.pause();\n }\n }, 0);\n },\n error: function error(msg) {\n _this.notice(msg);\n },\n apiBackend: this.options.apiBackend,\n borderColor: this.options.theme,\n height: this.arrow ? 24 : 30,\n time: function time() {\n return _this.video.currentTime;\n },\n unlimited: this.user.get('unlimited'),\n api: {\n id: this.options.danmaku.id,\n address: this.options.danmaku.api,\n token: this.options.danmaku.token,\n maximum: this.options.danmaku.maximum,\n addition: this.options.danmaku.addition,\n user: this.options.danmaku.user\n },\n events: this.events\n });\n this.comment = new _comment2.default(this);\n }\n this.setting = new _setting2.default(this);\n document.addEventListener('click', function () {\n _this.focus = false;\n }, true);\n this.container.addEventListener('click', function () {\n _this.focus = true;\n }, true);\n this.paused = true;\n this.template.playButton.addEventListener('click', function () {\n _this.toggle();\n });\n if (!_utils.isMobile) {\n this.template.videoWrap.addEventListener('click', function () {\n _this.toggle();\n });\n this.template.controllerMask.addEventListener('click', function () {\n _this.toggle();\n });\n } else {\n this.template.videoWrap.addEventListener('click', function () {\n _this.controller.toggle();\n });\n this.template.controllerMask.addEventListener('click', function () {\n _this.controller.toggle();\n });\n }\n this.time = new _time2.default(this);\n if (this.options.video.thumbnails) {\n this.initThumbnails();\n }\n this.isTimeTipsShow = true;\n this.mouseHandler = this.mouseHandler(this.template.playedBarWrap, this.template.playedBarTime).bind(this);\n this.template.playedBarWrap.addEventListener('mousemove', this.mouseHandler);\n this.template.playedBarWrap.addEventListener('mouseenter', this.mouseHandler);\n this.template.playedBarWrap.addEventListener('mouseleave', this.mouseHandler);\n var barWidth = void 0;\n var thumbMove = function thumbMove(e) {\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.playedBarWrap)) / barWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.bar.set('played', percentage, 'width');\n _this.template.ptime.innerHTML = _utils2.default.secondToTime(percentage * _this.video.duration);\n };\n var thumbUp = function thumbUp(e) {\n document.removeEventListener('mouseup', thumbUp);\n document.removeEventListener('mousemove', thumbMove);\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.playedBarWrap)) / barWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.bar.set('played', percentage, 'width');\n _this.seek(_this.bar.get('played') * _this.video.duration);\n _this.time.enable('progress');\n };\n this.template.playedBarWrap.addEventListener('mousedown', function () {\n barWidth = _this.template.playedBarWrap.clientWidth;\n _this.time.disable('progress');\n document.addEventListener('mousemove', thumbMove);\n document.addEventListener('mouseup', thumbUp);\n });\n var vWidth = 35;\n this.switchVolumeIcon = function () {\n if (_this.volume() >= 0.95) {\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-up');\n } else if (_this.volume() > 0) {\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-down');\n } else {\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-off');\n }\n };\n var volumeMove = function volumeMove(event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.volumeBarWrap) - 5.5) / vWidth;\n _this.volume(percentage);\n };\n var volumeUp = function volumeUp() {\n document.removeEventListener('mouseup', volumeUp);\n document.removeEventListener('mousemove', volumeMove);\n _this.template.volumeButton.classList.remove('dplayer-volume-active');\n };\n this.template.volumeBarWrapWrap.addEventListener('click', function (event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.volumeBarWrap) - 5.5) / vWidth;\n _this.volume(percentage);\n });\n this.template.volumeBarWrapWrap.addEventListener('mousedown', function () {\n document.addEventListener('mousemove', volumeMove);\n document.addEventListener('mouseup', volumeUp);\n _this.template.volumeButton.classList.add('dplayer-volume-active');\n });\n this.template.volumeIcon.addEventListener('click', function () {\n if (_this.video.muted) {\n _this.video.muted = false;\n _this.switchVolumeIcon();\n _this.bar.set('volume', _this.volume(), 'width');\n } else {\n _this.video.muted = true;\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-off');\n _this.bar.set('volume', 0, 'width');\n }\n });\n if (this.video.duration !== 1) {\n this.template.dtime.innerHTML = this.video.duration ? _utils2.default.secondToTime(this.video.duration) : '00:00';\n }\n if (!this.danmaku) {\n if (this.options.autoplay && !_utils.isMobile) {\n this.play();\n } else if (_utils.isMobile) {\n this.pause();\n }\n }\n this.fullScreen = new _fullscreen2.default(this);\n this.template.browserFullButton.addEventListener('click', function () {\n _this.fullScreen.toggle('browser');\n });\n this.template.webFullButton.addEventListener('click', function () {\n _this.fullScreen.toggle('web');\n });\n var handleKeyDown = function handleKeyDown(e) {\n if (_this.focus) {\n var tag = document.activeElement.tagName.toUpperCase();\n var editable = document.activeElement.getAttribute('contenteditable');\n if (tag !== 'INPUT' && tag !== 'TEXTAREA' && editable !== '' && editable !== 'true') {\n var event = e || window.event;\n var percentage = void 0;\n switch (event.keyCode) {\n case 32:\n event.preventDefault();\n _this.toggle();\n break;\n case 37:\n event.preventDefault();\n _this.seek(_this.video.currentTime - 5);\n _this.controller.setAutoHide();\n break;\n case 39:\n event.preventDefault();\n _this.seek(_this.video.currentTime + 5);\n _this.controller.setAutoHide();\n break;\n case 38:\n event.preventDefault();\n percentage = _this.volume() + 0.1;\n _this.volume(percentage);\n break;\n case 40:\n event.preventDefault();\n percentage = _this.volume() - 0.1;\n _this.volume(percentage);\n break;\n }\n }\n }\n };\n if (this.options.hotkey) {\n document.addEventListener('keydown', handleKeyDown);\n }\n document.addEventListener('keydown', function (e) {\n var event = e || window.event;\n switch (event.keyCode) {\n case 27:\n if (_this.fullScreen.isFullScreen('web')) {\n _this.fullScreen.cancel('web');\n }\n break;\n }\n });\n this.container.addEventListener('contextmenu', function (e) {\n var event = e || window.event;\n event.preventDefault();\n _this.template.menu.classList.add('dplayer-menu-show');\n var clientRect = _this.container.getBoundingClientRect();\n var menuLeft = event.clientX - clientRect.left;\n var menuTop = event.clientY - clientRect.top;\n if (menuLeft + _this.template.menu.offsetWidth >= clientRect.width) {\n _this.template.menu.style.right = clientRect.width - menuLeft + 'px';\n _this.template.menu.style.left = 'initial';\n } else {\n _this.template.menu.style.left = event.clientX - _this.container.getBoundingClientRect().left + 'px';\n _this.template.menu.style.right = 'initial';\n }\n if (menuTop + _this.template.menu.offsetHeight >= clientRect.height) {\n _this.template.menu.style.bottom = clientRect.height - menuTop + 'px';\n _this.template.menu.style.top = 'initial';\n } else {\n _this.template.menu.style.top = event.clientY - _this.container.getBoundingClientRect().top + 'px';\n _this.template.menu.style.bottom = 'initial';\n }\n _this.template.mask.classList.add('dplayer-mask-show');\n _this.events.trigger('contextmenu_show');\n _this.template.mask.addEventListener('click', function () {\n _this.template.mask.classList.remove('dplayer-mask-show');\n _this.template.menu.classList.remove('dplayer-menu-show');\n _this.events.trigger('contextmenu_hide');\n });\n });\n if (this.options.video.quality) {\n this.template.qualityList.addEventListener('click', function (e) {\n if (e.target.classList.contains('dplayer-quality-item')) {\n _this.switchQuality(e.target.dataset.index);\n }\n });\n }\n if (this.options.screenshot) {\n this.template.camareButton.addEventListener('click', function () {\n var canvas = document.createElement('canvas');\n canvas.width = _this.video.videoWidth;\n canvas.height = _this.video.videoHeight;\n canvas.getContext('2d').drawImage(_this.video, 0, 0, canvas.width, canvas.height);\n var dataURL = canvas.toDataURL();\n _this.template.camareButton.href = dataURL;\n _this.template.camareButton.download = 'DPlayer.png';\n _this.events.trigger('screenshot', dataURL);\n });\n }\n if (this.options.subtitle) {\n this.events.on('subtitle_show', function () {\n _this.template.subtitleButton.dataset.balloon = _this.tran('Hide subtitle');\n _this.template.subtitleButtonInner.style.opacity = '';\n _this.user.set('subtitle', 1);\n });\n this.events.on('subtitle_hide', function () {\n _this.template.subtitleButton.dataset.balloon = _this.tran('Show subtitle');\n _this.template.subtitleButtonInner.style.opacity = '0.4';\n _this.user.set('subtitle', 0);\n });\n this.template.subtitleButton.addEventListener('click', function () {\n _this.subtitle.toggle();\n });\n }\n this.initVideo(this.video, this.quality && this.quality.type || this.options.video.type);\n index++;\n instances.push(this);\n }\n _createClass(DPlayer, [\n {\n key: 'seek',\n value: function seek(time) {\n time = Math.max(time, 0);\n if (this.video.duration) {\n time = Math.min(time, this.video.duration);\n }\n if (this.video.currentTime < time) {\n this.notice(this.tran('FF') + ' ' + (time - this.video.currentTime).toFixed(0) + ' ' + this.tran('s'));\n } else if (this.video.currentTime > time) {\n this.notice(this.tran('REW') + ' ' + (this.video.currentTime - time).toFixed(0) + ' ' + this.tran('s'));\n }\n this.video.currentTime = time;\n if (this.danmaku) {\n this.danmaku.seek();\n }\n this.bar.set('played', time / this.video.duration, 'width');\n }\n },\n {\n key: 'play',\n value: function play() {\n this.paused = false;\n if (this.video.paused) {\n this.bezel.switch(this.icons.get('play'));\n }\n this.template.playButton.innerHTML = this.icons.get('pause');\n this.video.play();\n this.time.enable();\n this.container.classList.add('dplayer-playing');\n if (this.danmaku) {\n this.danmaku.play();\n }\n if (this.options.mutex) {\n for (var i = 0; i < instances.length; i++) {\n if (this !== instances[i]) {\n instances[i].pause();\n }\n }\n }\n }\n },\n {\n key: 'pause',\n value: function pause() {\n this.paused = true;\n this.container.classList.remove('dplayer-loading');\n if (!this.video.paused) {\n this.bezel.switch(this.icons.get('pause'));\n }\n this.ended = false;\n this.template.playButton.innerHTML = this.icons.get('play');\n this.video.pause();\n this.time.disable();\n this.container.classList.remove('dplayer-playing');\n if (this.danmaku) {\n this.danmaku.pause();\n }\n }\n },\n {\n key: 'volume',\n value: function volume(percentage, nostorage, nonotice) {\n percentage = parseFloat(percentage);\n if (!isNaN(percentage)) {\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n this.bar.set('volume', percentage, 'width');\n var formatPercentage = (percentage * 100).toFixed(0) + '%';\n this.template.volumeBarWrapWrap.dataset.balloon = formatPercentage;\n if (!nostorage) {\n this.user.set('volume', percentage);\n }\n if (!nonotice) {\n this.notice(this.tran('Volume') + ' ' + (percentage * 100).toFixed(0) + '%');\n }\n this.video.volume = percentage;\n if (this.video.muted) {\n this.video.muted = false;\n }\n this.switchVolumeIcon();\n }\n return this.video.volume;\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.video.paused) {\n this.play();\n } else {\n this.pause();\n }\n }\n },\n {\n key: 'on',\n value: function on(name, callback) {\n this.events.on(name, callback);\n }\n },\n {\n key: 'switchVideo',\n value: function switchVideo(video, danmakuAPI) {\n this.pause();\n this.video.poster = video.pic ? video.pic : '';\n this.video.src = video.url;\n this.initMSE(this.video, video.type || 'auto');\n if (danmakuAPI) {\n this.template.danmakuLoading.style.display = 'block';\n this.bar.set('played', 0, 'width');\n this.bar.set('loaded', 0, 'width');\n this.template.ptime.innerHTML = '00:00';\n this.template.danmaku.innerHTML = '';\n if (this.danmaku) {\n this.danmaku.reload({\n id: danmakuAPI.id,\n address: danmakuAPI.api,\n token: danmakuAPI.token,\n maximum: danmakuAPI.maximum,\n addition: danmakuAPI.addition,\n user: danmakuAPI.user\n });\n }\n }\n }\n },\n {\n key: 'initMSE',\n value: function initMSE(video, type) {\n this.type = type;\n if (this.type === 'auto') {\n if (/m3u8(#|\\?|$)/i.exec(video.src)) {\n this.type = 'hls';\n } else if (/.flv(#|\\?|$)/i.exec(video.src)) {\n this.type = 'flv';\n } else if (/.mpd(#|\\?|$)/i.exec(video.src)) {\n this.type = 'dash';\n } else {\n this.type = 'normal';\n }\n }\n if (this.type === 'hls' && Hls && Hls.isSupported()) {\n var hls = new Hls();\n hls.loadSource(video.src);\n hls.attachMedia(video);\n }\n if (this.type === 'flv' && flvjs && flvjs.isSupported()) {\n var flvPlayer = flvjs.createPlayer({\n type: 'flv',\n url: video.src\n });\n flvPlayer.attachMediaElement(video);\n flvPlayer.load();\n }\n if (this.type === 'dash' && dashjs) {\n dashjs.MediaPlayer().create().initialize(video, video.src, false);\n }\n }\n },\n {\n key: 'initVideo',\n value: function initVideo(video, type) {\n var _this2 = this;\n this.initMSE(video, type);\n this.on('durationchange', function () {\n if (video.duration !== 1) {\n _this2.template.dtime.innerHTML = _utils2.default.secondToTime(video.duration);\n }\n });\n this.on('progress', function () {\n var percentage = video.buffered.length ? video.buffered.end(video.buffered.length - 1) / video.duration : 0;\n _this2.bar.set('loaded', percentage, 'width');\n });\n this.on('error', function () {\n _this2.tran && _this2.notice && _this2.notice(_this2.tran('This video fails to load'), -1);\n });\n this.ended = false;\n this.on('ended', function () {\n _this2.bar.set('played', 1, 'width');\n if (!_this2.setting.loop) {\n _this2.ended = true;\n _this2.pause();\n } else {\n _this2.seek(0);\n video.play();\n }\n if (_this2.danmaku) {\n _this2.danmaku.danIndex = 0;\n }\n });\n this.on('play', function () {\n if (_this2.paused) {\n _this2.play();\n }\n });\n this.on('pause', function () {\n if (!_this2.paused) {\n _this2.pause();\n }\n });\n var _loop = function _loop(i) {\n video.addEventListener(_this2.events.videoEvents[i], function () {\n _this2.events.trigger(_this2.events.videoEvents[i]);\n });\n };\n for (var i = 0; i < this.events.videoEvents.length; i++) {\n _loop(i);\n }\n this.volume(this.user.get('volume'), true, true);\n if (this.options.subtitle) {\n this.subtitle = new _subtitle2.default(this.template.subtitle, this.video, this.options.subtitle, this.events);\n if (!this.user.get('subtitle')) {\n this.subtitle.hide();\n }\n }\n }\n },\n {\n key: 'switchQuality',\n value: function switchQuality(index) {\n var _this3 = this;\n if (this.qualityIndex === index || this.switchingQuality) {\n return;\n } else {\n this.qualityIndex = index;\n }\n this.switchingQuality = true;\n this.quality = this.options.video.quality[index];\n this.template.qualityButton.innerHTML = this.quality.name;\n var paused = this.video.paused;\n this.video.pause();\n var videoHTML = this.template.tplVideo(false, null, this.options.screenshot, 'auto', this.quality.url, this.options.subtitle);\n var videoEle = new DOMParser().parseFromString(videoHTML, 'text/html').body.firstChild;\n this.template.videoWrap.insertBefore(videoEle, this.template.videoWrap.getElementsByTagName('div')[0]);\n this.prevVideo = this.video;\n this.video = videoEle;\n this.initVideo(this.video, this.quality.type || this.options.video.type);\n this.seek(this.prevVideo.currentTime);\n this.notice(this.tran('Switching to') + ' ' + this.quality.name + ' ' + this.tran('quality'), -1);\n this.events.trigger('quality_start', this.quality);\n this.on('canplay', function () {\n if (_this3.prevVideo) {\n if (_this3.video.currentTime !== _this3.prevVideo.currentTime) {\n _this3.seek(_this3.prevVideo.currentTime);\n return;\n }\n _this3.template.videoWrap.removeChild(_this3.prevVideo);\n _this3.video.classList.add('dplayer-video-current');\n if (!paused) {\n _this3.video.play();\n }\n _this3.prevVideo = null;\n _this3.notice(_this3.tran('Switched to') + ' ' + _this3.quality.name + ' ' + _this3.tran('quality'));\n _this3.switchingQuality = false;\n _this3.events.trigger('quality_end');\n }\n });\n }\n },\n {\n key: 'mouseHandler',\n value: function mouseHandler(pbar, timeTips) {\n var _this4 = this;\n var cumulativeOffset = function cumulativeOffset(element) {\n var top = 0, left = 0;\n do {\n top += element.offsetTop || 0;\n left += element.offsetLeft || 0;\n element = element.offsetParent;\n } while (element);\n return {\n top: top,\n left: left\n };\n };\n return function (e) {\n if (!_this4.video.duration) {\n return;\n }\n var clientX = e.clientX;\n var px = cumulativeOffset(pbar).left;\n var tx = clientX - px;\n if (tx < 0 || tx > pbar.offsetWidth) {\n return;\n }\n var time = _this4.video.duration * (tx / pbar.offsetWidth);\n timeTips.style.left = tx - 20 + 'px';\n switch (e.type) {\n case 'mouseenter':\n _this4.thumbnails && _this4.thumbnails.show();\n break;\n case 'mousemove':\n _this4.thumbnails && _this4.thumbnails.move(tx);\n timeTips.innerText = _utils2.default.secondToTime(time);\n _this4.timeTipsDisplay(true, timeTips);\n break;\n case 'mouseleave':\n _this4.thumbnails && _this4.thumbnails.hide();\n _this4.timeTipsDisplay(false, timeTips);\n break;\n }\n };\n }\n },\n {\n key: 'timeTipsDisplay',\n value: function timeTipsDisplay(show, timeTips) {\n if (show) {\n if (this.isTimeTipsShow) {\n return;\n }\n timeTips.classList.remove('hidden');\n this.isTimeTipsShow = true;\n } else {\n if (!this.isTimeTipsShow) {\n return;\n }\n timeTips.classList.add('hidden');\n this.isTimeTipsShow = false;\n }\n }\n },\n {\n key: 'initThumbnails',\n value: function initThumbnails() {\n var _this5 = this;\n this.thumbnails = new _thumbnails2.default(this.template.barPreview, this.template.barWrap.offsetWidth, this.options.video.thumbnails, this.events);\n this.on('loadedmetadata', function () {\n _this5.thumbnails.resize(160, 90);\n });\n }\n },\n {\n key: 'notice',\n value: function notice(text) {\n var _this6 = this;\n var time = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2000;\n var opacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.8;\n this.template.notice.innerHTML = text;\n this.template.notice.style.opacity = opacity;\n if (this.noticeTime) {\n clearTimeout(this.noticeTime);\n }\n this.events.trigger('notice_show', text);\n this.noticeTime = setTimeout(function () {\n _this6.template.notice.style.opacity = 0;\n _this6.events.trigger('notice_hide');\n }, time);\n }\n },\n {\n key: 'resize',\n value: function resize() {\n if (this.danmaku) {\n this.danmaku.resize();\n }\n this.events.trigger('resize');\n }\n },\n {\n key: 'destroy',\n value: function destroy() {\n instances.splice(instances.indexOf(this), 1);\n this.pause();\n this.controller.destroy();\n this.time.destroy();\n this.video.src = '';\n this.container.innerHTML = '';\n this.events.trigger('destroy');\n for (var key in this) {\n if (this.hasOwnProperty(key) && key !== 'paused') {\n delete this[key];\n }\n }\n }\n }\n ]);\n return DPlayer;\n}();\nmodule.exports = DPlayer;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar defaultApiBackend = __webpack_require__(5);\nmodule.exports = function (options) {\n var isMobile = /mobile/i.test(window.navigator.userAgent);\n if (isMobile) {\n options.autoplay = false;\n }\n var defaultOption = {\n container: options.element || document.getElementsByClassName('dplayer')[0],\n live: false,\n autoplay: false,\n theme: '#b7daff',\n loop: false,\n lang: (navigator.language || navigator.browserLanguage).toLowerCase(),\n screenshot: false,\n hotkey: true,\n preload: 'auto',\n volume: 0.7,\n apiBackend: defaultApiBackend,\n video: {},\n icons: {\n play: [\n '0 0 16 32',\n 'M15.552 15.168q0.448 0.32 0.448 0.832 0 0.448-0.448 0.768l-13.696 8.512q-0.768 0.512-1.312 0.192t-0.544-1.28v-16.448q0-0.96 0.544-1.28t1.312 0.192z'\n ],\n pause: [\n '0 0 17 32',\n 'M14.080 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048zM2.88 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048z'\n ],\n 'volume-up': [\n '0 0 21 32',\n 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528zM25.152 16q0 2.72-1.536 5.056t-4 3.36q-0.256 0.096-0.448 0.096-0.48 0-0.832-0.352t-0.32-0.8q0-0.704 0.672-1.056 1.024-0.512 1.376-0.8 1.312-0.96 2.048-2.4t0.736-3.104-0.736-3.104-2.048-2.4q-0.352-0.288-1.376-0.8-0.672-0.352-0.672-1.056 0-0.448 0.32-0.8t0.8-0.352q0.224 0 0.48 0.096 2.496 1.056 4 3.36t1.536 5.056z'\n ],\n 'volume-down': [\n '0 0 21 32',\n 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528z'\n ],\n 'volume-off': [\n '0 0 21 32',\n 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8z'\n ],\n loop: [\n '0 0 32 32',\n 'M1.882 16.941c0 4.152 3.221 7.529 7.177 7.529v1.882c-4.996 0-9.060-4.222-9.060-9.412s4.064-9.412 9.060-9.412h7.96l-3.098-3.098 1.331-1.331 5.372 5.37-5.37 5.372-1.333-1.333 3.1-3.098h-7.962c-3.957 0-7.177 3.377-7.177 7.529zM22.94 7.529v1.882c3.957 0 7.177 3.377 7.177 7.529s-3.221 7.529-7.177 7.529h-7.962l3.098-3.098-1.331-1.331-5.37 5.37 5.372 5.372 1.331-1.331-3.1-3.1h7.96c4.998 0 9.062-4.222 9.062-9.412s-4.064-9.412-9.060-9.412z'\n ],\n full: [\n '0 0 32 33',\n 'M6.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v4h4c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333zM30.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h4v-4c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM30.667 12c-0.8 0-1.333-0.533-1.333-1.333v-4h-4c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM1.333 12c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333h-4v4c0 0.8-0.533 1.333-1.333 1.333z'\n ],\n 'full-in': [\n '0 0 32 33',\n 'M24.965 24.38h-18.132c-1.366 0-2.478-1.113-2.478-2.478v-11.806c0-1.364 1.111-2.478 2.478-2.478h18.132c1.366 0 2.478 1.113 2.478 2.478v11.806c0 1.364-1.11 2.478-2.478 2.478zM6.833 10.097v11.806h18.134l-0.002-11.806h-18.132zM2.478 28.928h5.952c0.684 0 1.238-0.554 1.238-1.239 0-0.684-0.554-1.238-1.238-1.238h-5.952v-5.802c0-0.684-0.554-1.239-1.238-1.239s-1.239 0.556-1.239 1.239v5.802c0 1.365 1.111 2.478 2.478 2.478zM30.761 19.412c-0.684 0-1.238 0.554-1.238 1.238v5.801h-5.951c-0.686 0-1.239 0.554-1.239 1.238 0 0.686 0.554 1.239 1.239 1.239h5.951c1.366 0 2.478-1.111 2.478-2.478v-5.801c0-0.683-0.554-1.238-1.239-1.238zM0 5.55v5.802c0 0.683 0.554 1.238 1.238 1.238s1.238-0.555 1.238-1.238v-5.802h5.952c0.684 0 1.238-0.554 1.238-1.238s-0.554-1.238-1.238-1.238h-5.951c-1.366-0.001-2.478 1.111-2.478 2.476zM32 11.35v-5.801c0-1.365-1.11-2.478-2.478-2.478h-5.951c-0.686 0-1.239 0.554-1.239 1.238s0.554 1.238 1.239 1.238h5.951v5.801c0 0.683 0.554 1.237 1.238 1.237 0.686 0.002 1.239-0.553 1.239-1.236z'\n ],\n setting: [\n '0 0 32 28',\n 'M28.633 17.104c0.035 0.21 0.026 0.463-0.026 0.76s-0.14 0.598-0.262 0.904c-0.122 0.306-0.271 0.581-0.445 0.825s-0.367 0.419-0.576 0.524c-0.209 0.105-0.393 0.157-0.55 0.157s-0.332-0.035-0.524-0.105c-0.175-0.052-0.393-0.1-0.655-0.144s-0.528-0.052-0.799-0.026c-0.271 0.026-0.541 0.083-0.812 0.17s-0.502 0.236-0.694 0.445c-0.419 0.437-0.664 0.934-0.734 1.493s0.009 1.092 0.236 1.598c0.175 0.349 0.148 0.699-0.079 1.048-0.105 0.14-0.271 0.284-0.498 0.432s-0.476 0.284-0.747 0.406-0.555 0.218-0.851 0.288c-0.297 0.070-0.559 0.105-0.786 0.105-0.157 0-0.306-0.061-0.445-0.183s-0.236-0.253-0.288-0.393h-0.026c-0.192-0.541-0.52-1.009-0.982-1.402s-1-0.589-1.611-0.589c-0.594 0-1.131 0.197-1.611 0.589s-0.816 0.851-1.009 1.375c-0.087 0.21-0.218 0.362-0.393 0.458s-0.367 0.144-0.576 0.144c-0.244 0-0.52-0.044-0.825-0.131s-0.611-0.197-0.917-0.327c-0.306-0.131-0.581-0.284-0.825-0.458s-0.428-0.349-0.55-0.524c-0.087-0.122-0.135-0.266-0.144-0.432s0.057-0.397 0.197-0.694c0.192-0.402 0.266-0.86 0.223-1.375s-0.266-0.991-0.668-1.428c-0.244-0.262-0.541-0.432-0.891-0.511s-0.681-0.109-0.995-0.092c-0.367 0.017-0.742 0.087-1.127 0.21-0.244 0.070-0.489 0.052-0.734-0.052-0.192-0.070-0.371-0.231-0.537-0.485s-0.314-0.533-0.445-0.838c-0.131-0.306-0.231-0.62-0.301-0.943s-0.087-0.59-0.052-0.799c0.052-0.384 0.227-0.629 0.524-0.734 0.524-0.21 0.995-0.555 1.415-1.035s0.629-1.017 0.629-1.611c0-0.611-0.21-1.144-0.629-1.598s-0.891-0.786-1.415-0.996c-0.157-0.052-0.288-0.179-0.393-0.38s-0.157-0.406-0.157-0.616c0-0.227 0.035-0.48 0.105-0.76s0.162-0.55 0.275-0.812 0.244-0.502 0.393-0.72c0.148-0.218 0.31-0.38 0.485-0.485 0.14-0.087 0.275-0.122 0.406-0.105s0.275 0.052 0.432 0.105c0.524 0.21 1.070 0.275 1.637 0.197s1.070-0.327 1.506-0.747c0.21-0.209 0.362-0.467 0.458-0.773s0.157-0.607 0.183-0.904c0.026-0.297 0.026-0.568 0-0.812s-0.048-0.419-0.065-0.524c-0.035-0.105-0.066-0.227-0.092-0.367s-0.013-0.262 0.039-0.367c0.105-0.244 0.293-0.458 0.563-0.642s0.563-0.336 0.878-0.458c0.314-0.122 0.62-0.214 0.917-0.275s0.533-0.092 0.707-0.092c0.227 0 0.406 0.074 0.537 0.223s0.223 0.301 0.275 0.458c0.192 0.471 0.507 0.886 0.943 1.244s0.952 0.537 1.546 0.537c0.611 0 1.153-0.17 1.624-0.511s0.803-0.773 0.996-1.297c0.070-0.14 0.179-0.284 0.327-0.432s0.301-0.223 0.458-0.223c0.244 0 0.511 0.035 0.799 0.105s0.572 0.166 0.851 0.288c0.279 0.122 0.537 0.279 0.773 0.472s0.423 0.402 0.563 0.629c0.087 0.14 0.113 0.293 0.079 0.458s-0.070 0.284-0.105 0.354c-0.227 0.506-0.297 1.039-0.21 1.598s0.341 1.048 0.76 1.467c0.419 0.419 0.934 0.651 1.546 0.694s1.179-0.057 1.703-0.301c0.14-0.087 0.31-0.122 0.511-0.105s0.371 0.096 0.511 0.236c0.262 0.244 0.493 0.616 0.694 1.113s0.336 1 0.406 1.506c0.035 0.297-0.013 0.528-0.144 0.694s-0.266 0.275-0.406 0.327c-0.542 0.192-1.004 0.528-1.388 1.009s-0.576 1.026-0.576 1.637c0 0.594 0.162 1.113 0.485 1.559s0.747 0.764 1.27 0.956c0.122 0.070 0.227 0.14 0.314 0.21 0.192 0.157 0.323 0.358 0.393 0.602v0zM16.451 19.462c0.786 0 1.528-0.149 2.227-0.445s1.305-0.707 1.821-1.231c0.515-0.524 0.921-1.131 1.218-1.821s0.445-1.428 0.445-2.214c0-0.786-0.148-1.524-0.445-2.214s-0.703-1.292-1.218-1.808c-0.515-0.515-1.122-0.921-1.821-1.218s-1.441-0.445-2.227-0.445c-0.786 0-1.524 0.148-2.214 0.445s-1.292 0.703-1.808 1.218c-0.515 0.515-0.921 1.118-1.218 1.808s-0.445 1.428-0.445 2.214c0 0.786 0.149 1.524 0.445 2.214s0.703 1.297 1.218 1.821c0.515 0.524 1.118 0.934 1.808 1.231s1.428 0.445 2.214 0.445v0z'\n ],\n right: [\n '0 0 32 32',\n 'M22 16l-10.105-10.6-1.895 1.987 8.211 8.613-8.211 8.612 1.895 1.988 8.211-8.613z'\n ],\n comment: [\n '0 0 32 32',\n 'M27.128 0.38h-22.553c-2.336 0-4.229 1.825-4.229 4.076v16.273c0 2.251 1.893 4.076 4.229 4.076h4.229v-2.685h8.403l-8.784 8.072 1.566 1.44 7.429-6.827h9.71c2.335 0 4.229-1.825 4.229-4.076v-16.273c0-2.252-1.894-4.076-4.229-4.076zM28.538 19.403c0 1.5-1.262 2.717-2.819 2.717h-8.36l-0.076-0.070-0.076 0.070h-11.223c-1.557 0-2.819-1.217-2.819-2.717v-13.589c0-1.501 1.262-2.718 2.819-2.718h19.734c1.557 0 2.819-0.141 2.819 1.359v14.947zM9.206 10.557c-1.222 0-2.215 0.911-2.215 2.036s0.992 2.035 2.215 2.035c1.224 0 2.216-0.911 2.216-2.035s-0.992-2.036-2.216-2.036zM22.496 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.224 0 2.215-0.911 2.215-2.035s-0.991-2.036-2.215-2.036zM15.852 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.222 0 2.215-0.911 2.215-2.035s-0.992-2.036-2.215-2.036z'\n ],\n 'comment-off': [\n '0 0 32 32',\n 'M27.090 0.131h-22.731c-2.354 0-4.262 1.839-4.262 4.109v16.401c0 2.269 1.908 4.109 4.262 4.109h4.262v-2.706h8.469l-8.853 8.135 1.579 1.451 7.487-6.88h9.787c2.353 0 4.262-1.84 4.262-4.109v-16.401c0-2.27-1.909-4.109-4.262-4.109v0zM28.511 19.304c0 1.512-1.272 2.738-2.841 2.738h-8.425l-0.076-0.070-0.076 0.070h-11.311c-1.569 0-2.841-1.226-2.841-2.738v-13.696c0-1.513 1.272-2.739 2.841-2.739h19.889c1.569 0 2.841-0.142 2.841 1.37v15.064z'\n ],\n send: [\n '0 0 32 32',\n 'M13.725 30l3.9-5.325-3.9-1.125v6.45zM0 17.5l11.050 3.35 13.6-11.55-10.55 12.425 11.8 3.65 6.1-23.375-32 15.5z'\n ],\n pallette: [\n '0 0 32 32',\n 'M19.357 2.88c1.749 0 3.366 0.316 4.851 0.946 1.485 0.632 2.768 1.474 3.845 2.533s1.922 2.279 2.532 3.661c0.611 1.383 0.915 2.829 0.915 4.334 0 1.425-0.304 2.847-0.915 4.271-0.611 1.425-1.587 2.767-2.928 4.028-0.855 0.813-1.811 1.607-2.869 2.38s-2.136 1.465-3.233 2.075c-1.099 0.61-2.198 1.098-3.296 1.465-1.098 0.366-2.115 0.549-3.051 0.549-1.343 0-2.441-0.438-3.296-1.311-0.854-0.876-1.281-2.41-1.281-4.608 0-0.366 0.020-0.773 0.060-1.221s0.062-0.895 0.062-1.343c0-0.773-0.183-1.353-0.55-1.738-0.366-0.387-0.793-0.58-1.281-0.58-0.652 0-1.21 0.295-1.678 0.886s-0.926 1.23-1.373 1.921c-0.447 0.693-0.905 1.334-1.372 1.923s-1.028 0.886-1.679 0.886c-0.529 0-1.048-0.427-1.556-1.282s-0.763-2.259-0.763-4.212c0-2.197 0.529-4.241 1.587-6.133s2.462-3.529 4.21-4.912c1.75-1.383 3.762-2.471 6.041-3.264 2.277-0.796 4.617-1.212 7.018-1.253zM7.334 15.817c0.569 0 1.047-0.204 1.434-0.611s0.579-0.875 0.579-1.404c0-0.569-0.193-1.047-0.579-1.434s-0.864-0.579-1.434-0.579c-0.529 0-0.987 0.193-1.373 0.579s-0.58 0.864-0.58 1.434c0 0.53 0.194 0.998 0.58 1.404 0.388 0.407 0.845 0.611 1.373 0.611zM12.216 11.79c0.691 0 1.292-0.254 1.8-0.763s0.762-1.107 0.762-1.8c0-0.732-0.255-1.343-0.762-1.831-0.509-0.489-1.109-0.732-1.8-0.732-0.732 0-1.342 0.244-1.831 0.732-0.488 0.488-0.732 1.098-0.732 1.831 0 0.693 0.244 1.292 0.732 1.8s1.099 0.763 1.831 0.763zM16.366 25.947c0.692 0 1.282-0.214 1.77-0.64s0.732-0.987 0.732-1.678-0.244-1.261-0.732-1.709c-0.489-0.448-1.078-0.671-1.77-0.671-0.65 0-1.21 0.223-1.678 0.671s-0.702 1.018-0.702 1.709c0 0.692 0.234 1.25 0.702 1.678s1.027 0.64 1.678 0.64zM19.113 9.592c0.651 0 1.129-0.203 1.433-0.611 0.305-0.406 0.459-0.874 0.459-1.404 0-0.488-0.154-0.947-0.459-1.373-0.304-0.427-0.782-0.641-1.433-0.641-0.529 0-1.008 0.193-1.434 0.58s-0.64 0.865-0.64 1.434c0 0.571 0.213 1.049 0.64 1.434 0.427 0.389 0.905 0.581 1.434 0.581zM24.848 12.826c0.57 0 1.067-0.213 1.495-0.64 0.427-0.427 0.64-0.947 0.64-1.556 0-0.57-0.214-1.068-0.64-1.495-0.428-0.427-0.927-0.64-1.495-0.64-0.611 0-1.129 0.213-1.555 0.64-0.428 0.427-0.642 0.926-0.642 1.495 0 0.611 0.213 1.129 0.642 1.556s0.947 0.64 1.555 0.64z'\n ],\n camera: [\n '0 0 32 32',\n 'M16 23c-3.309 0-6-2.691-6-6s2.691-6 6-6 6 2.691 6 6-2.691 6-6 6zM16 13c-2.206 0-4 1.794-4 4s1.794 4 4 4c2.206 0 4-1.794 4-4s-1.794-4-4-4zM27 28h-22c-1.654 0-3-1.346-3-3v-16c0-1.654 1.346-3 3-3h3c0.552 0 1 0.448 1 1s-0.448 1-1 1h-3c-0.551 0-1 0.449-1 1v16c0 0.552 0.449 1 1 1h22c0.552 0 1-0.448 1-1v-16c0-0.551-0.448-1-1-1h-11c-0.552 0-1-0.448-1-1s0.448-1 1-1h11c1.654 0 3 1.346 3 3v16c0 1.654-1.346 3-3 3zM24 10.5c0 0.828 0.672 1.5 1.5 1.5s1.5-0.672 1.5-1.5c0-0.828-0.672-1.5-1.5-1.5s-1.5 0.672-1.5 1.5zM15 4c0 0.552-0.448 1-1 1h-4c-0.552 0-1-0.448-1-1v0c0-0.552 0.448-1 1-1h4c0.552 0 1 0.448 1 1v0z'\n ],\n subtitle: [\n '0 0 32 32',\n 'M26.667 5.333h-21.333c-0 0-0.001 0-0.001 0-1.472 0-2.666 1.194-2.666 2.666 0 0 0 0.001 0 0.001v-0 16c0 0 0 0.001 0 0.001 0 1.472 1.194 2.666 2.666 2.666 0 0 0.001 0 0.001 0h21.333c0 0 0.001 0 0.001 0 1.472 0 2.666-1.194 2.666-2.666 0-0 0-0.001 0-0.001v0-16c0-0 0-0.001 0-0.001 0-1.472-1.194-2.666-2.666-2.666-0 0-0.001 0-0.001 0h0zM5.333 16h5.333v2.667h-5.333v-2.667zM18.667 24h-13.333v-2.667h13.333v2.667zM26.667 24h-5.333v-2.667h5.333v2.667zM26.667 18.667h-13.333v-2.667h13.333v2.667z'\n ]\n },\n iconsColor: '#ffffff',\n contextmenu: [],\n mutex: true\n };\n for (var defaultKey in defaultOption) {\n if (defaultOption.hasOwnProperty(defaultKey) && !options.hasOwnProperty(defaultKey)) {\n options[defaultKey] = defaultOption[defaultKey];\n }\n }\n if (options.video) {\n !options.video.type && (options.video.type = 'auto');\n }\n if (_typeof(options.danmaku) === 'object' && options.danmaku) {\n !options.danmaku.user && (options.danmaku.user = 'DIYgod');\n }\n if (options.subtitle) {\n !options.subtitle.type && (options.subtitle.type = 'webvtt');\n !options.subtitle.fontSize && (options.subtitle.fontSize = '20px');\n !options.subtitle.bottom && (options.subtitle.bottom = '40px');\n !options.subtitle.color && (options.subtitle.color = '#fff');\n }\n if (options.video.quality) {\n options.video.url = [options.video.quality[options.video.defaultQuality].url];\n }\n if (options.lang) {\n options.lang = options.lang.toLowerCase();\n }\n if (options.icons) {\n options.icons = Object.assign({}, defaultOption.icons, options.icons);\n }\n options.contextmenu = options.contextmenu.concat([\n {\n text: 'About author',\n link: 'https://diygod.me'\n },\n {\n text: 'About DPlayer',\n link: 'https://github.com/MoePlayer/DPlayer'\n },\n {\n text: 'DPlayer feedback',\n link: 'https://github.com/DIYgod/DPlayer/issues'\n },\n {\n text: 'DPlayer ' + \"1.17.2\" + ' ' + \"0cae80b\",\n link: 'https://github.com/MoePlayer/DPlayer/releases'\n }\n ]);\n return options;\n};\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar SendXMLHttpRequest = function SendXMLHttpRequest(url, data, success, error, fail) {\n var xhr = new XMLHttpRequest();\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {\n var response = JSON.parse(xhr.responseText);\n if (response.code !== 1) {\n return error(xhr, response);\n }\n return success(xhr, response);\n }\n fail(xhr);\n }\n };\n xhr.open(data !== null ? 'POST' : 'GET', url, true);\n xhr.send(data !== null ? JSON.stringify(data) : null);\n};\nmodule.exports = {\n send: function send(endpoint, danmakuData, callback) {\n SendXMLHttpRequest(endpoint, danmakuData, function (xhr, response) {\n console.log('Post danmaku: ', response);\n if (callback) {\n callback();\n }\n }, function (xhr, response) {\n alert(response.msg);\n }, function (xhr) {\n console.log('Request was unsuccessful: ' + xhr.status);\n });\n },\n read: function read(endpoint, callback) {\n SendXMLHttpRequest(endpoint, null, function (xhr, response) {\n callback(null, response.danmaku);\n }, function (xhr, response) {\n callback({\n status: xhr.status,\n response: response\n });\n }, function (xhr) {\n callback({\n status: xhr.status,\n response: null\n });\n });\n }\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nmodule.exports = function (lang) {\n var _this = this;\n this.lang = lang;\n this.tran = function (text) {\n if (tranTxt[_this.lang] && tranTxt[_this.lang][text]) {\n return tranTxt[_this.lang][text];\n } else {\n return text;\n }\n };\n};\nvar tranTxt = {\n 'zh-cn': {\n 'Danmaku is loading': '弹幕加载中',\n 'Top': '顶部',\n 'Bottom': '底部',\n 'Rolling': '滚动',\n 'Input danmaku, hit Enter': '输入弹幕\\uFF0C回车发送',\n 'About author': '关于作者',\n 'DPlayer feedback': '播放器意见反馈',\n 'About DPlayer': '关于 DPlayer 播放器',\n 'Loop': '洗脑循环',\n 'Speed': '速度',\n 'Opacity for danmaku': '弹幕透明度',\n 'Normal': '正常',\n 'Please input danmaku content!': '要输入弹幕内容啊喂\\uFF01',\n 'Set danmaku color': '设置弹幕颜色',\n 'Set danmaku type': '设置弹幕类型',\n 'Show danmaku': '显示弹幕',\n 'This video fails to load': '视频加载失败',\n 'Switching to': '正在切换至',\n 'Switched to': '已经切换至',\n 'quality': '画质',\n 'FF': '快进',\n 'REW': '快退',\n 'Unlimited danmaku': '海量弹幕',\n 'Send danmaku': '发送弹幕',\n 'Setting': '设置',\n 'Full screen': '全屏',\n 'Web full screen': '页面全屏',\n 'Send': '发送',\n 'Screenshot': '截图',\n 's': '秒',\n 'Show subtitle': '显示字幕',\n 'Hide subtitle': '隐藏字幕',\n 'Volume': '音量',\n 'Live': '直播'\n },\n 'zh-tw': {\n 'Danmaku is loading': '彈幕加載中',\n 'Top': '頂部',\n 'Bottom': '底部',\n 'Rolling': '滾動',\n 'Input danmaku, hit Enter': '輸入彈幕\\uFF0CEnter 發送',\n 'About author': '關於作者',\n 'DPlayer feedback': '播放器意見反饋',\n 'About DPlayer': '關於 DPlayer 播放器',\n 'Loop': '循環播放',\n 'Speed': '速度',\n 'Opacity for danmaku': '彈幕透明度',\n 'Normal': '正常',\n 'Please input danmaku content!': '請輸入彈幕内容啊\\uFF01',\n 'Set danmaku color': '設置彈幕顏色',\n 'Set danmaku type': '設置彈幕類型',\n 'Show danmaku': '顯示彈幕',\n 'This video fails to load': '視頻加載失敗',\n 'Switching to': '正在切換至',\n 'Switched to': '已經切換至',\n 'quality': '畫質',\n 'FF': '快進',\n 'REW': '快退',\n 'Unlimited danmaku': '海量彈幕',\n 'Send danmaku': '發送彈幕',\n 'Setting': '設置',\n 'Full screen': '全屏',\n 'Web full screen': '頁面全屏',\n 'Send': '發送',\n 'Screenshot': '截圖',\n 's': '秒',\n 'Show subtitle': '顯示字幕',\n 'Hide subtitle': '隱藏字幕',\n 'Volume': '音量',\n 'Live': '直播'\n }\n};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Template = function () {\n function Template(options) {\n _classCallCheck(this, Template);\n this.container = options.container;\n this.options = options.options;\n this.index = options.index;\n this.tran = options.tran;\n this.icons = options.icons;\n this.init();\n }\n _createClass(Template, [\n {\n key: 'init',\n value: function init() {\n this.container.innerHTML = this.tpl(this.options, this.index, this.tran, this.icons);\n this.volumeBar = this.container.querySelector('.dplayer-volume-bar-inner');\n this.volumeBarWrap = this.container.querySelector('.dplayer-volume-bar');\n this.volumeBarWrapWrap = this.container.querySelector('.dplayer-volume-bar-wrap');\n this.volumeButton = this.container.querySelector('.dplayer-volume');\n this.volumeIcon = this.container.querySelector('.dplayer-volume-icon .dplayer-icon-content');\n this.playedBar = this.container.querySelector('.dplayer-played');\n this.loadedBar = this.container.querySelector('.dplayer-loaded');\n this.playedBarWrap = this.container.querySelector('.dplayer-bar-wrap');\n this.playedBarTime = this.container.querySelector('.dplayer-bar-time');\n this.danmaku = this.container.querySelector('.dplayer-danmaku');\n this.danmakuLoading = this.container.querySelector('.dplayer-danloading');\n this.video = this.container.querySelector('.dplayer-video-current');\n this.bezel = this.container.querySelector('.dplayer-bezel-icon');\n this.playButton = this.container.querySelector('.dplayer-play-icon');\n this.videoWrap = this.container.querySelector('.dplayer-video-wrap');\n this.controllerMask = this.container.querySelector('.dplayer-controller-mask');\n this.ptime = this.container.querySelector('.dplayer-ptime');\n this.settingButton = this.container.querySelector('.dplayer-setting-icon');\n this.settingBox = this.container.querySelector('.dplayer-setting-box');\n this.mask = this.container.querySelector('.dplayer-mask');\n this.loop = this.container.querySelector('.dplayer-setting-loop');\n this.loopToggle = this.container.querySelector('.dplayer-setting-loop .dplayer-toggle-setting-input');\n this.showDanmaku = this.container.querySelector('.dplayer-setting-showdan');\n this.showDanmakuToggle = this.container.querySelector('.dplayer-showdan-setting-input');\n this.unlimitDanmaku = this.container.querySelector('.dplayer-setting-danunlimit');\n this.unlimitDanmakuToggle = this.container.querySelector('.dplayer-danunlimit-setting-input');\n this.speed = this.container.querySelector('.dplayer-setting-speed');\n this.speedItem = this.container.querySelectorAll('.dplayer-setting-speed-item');\n this.danmakuOpacityBar = this.container.querySelector('.dplayer-danmaku-bar-inner');\n this.danmakuOpacityBarWrap = this.container.querySelector('.dplayer-danmaku-bar');\n this.danmakuOpacityBarWrapWrap = this.container.querySelector('.dplayer-danmaku-bar-wrap');\n this.danmakuOpacityBox = this.container.querySelector('.dplayer-setting-danmaku');\n this.dtime = this.container.querySelector('.dplayer-dtime');\n this.controller = this.container.querySelector('.dplayer-controller');\n this.commentInput = this.container.querySelector('.dplayer-comment-input');\n this.commentButton = this.container.querySelector('.dplayer-comment-icon');\n this.commentSettingBox = this.container.querySelector('.dplayer-comment-setting-box');\n this.commentSettingButton = this.container.querySelector('.dplayer-comment-setting-icon');\n this.commentSettingFill = this.container.querySelector('.dplayer-comment-setting-icon .dplayer-fill');\n this.commentSendButton = this.container.querySelector('.dplayer-send-icon');\n this.commentSendFill = this.container.querySelector('.dplayer-send-icon .dplayer-fill');\n this.commentColorSettingBox = this.container.querySelector('.dplayer-comment-setting-color');\n this.browserFullButton = this.container.querySelector('.dplayer-full-icon');\n this.webFullButton = this.container.querySelector('.dplayer-full-in-icon');\n this.menu = this.container.querySelector('.dplayer-menu');\n this.qualityList = this.container.querySelector('.dplayer-quality-list');\n this.camareButton = this.container.querySelector('.dplayer-camera-icon');\n this.subtitleButton = this.container.querySelector('.dplayer-subtitle-icon');\n this.subtitleButtonInner = this.container.querySelector('.dplayer-subtitle-icon .dplayer-icon-content');\n this.subtitle = this.container.querySelector('.dplayer-subtitle');\n this.qualityButton = this.container.querySelector('.dplayer-quality-icon');\n this.barPreview = this.container.querySelector('.dplayer-bar-preview');\n this.barWrap = this.container.querySelector('.dplayer-bar-wrap');\n this.notice = this.container.querySelector('.dplayer-notice');\n }\n },\n {\n key: 'tpl',\n value: function tpl(options, index, tran, icons) {\n return '
' + this.tplVideo(true, options.video.pic, options.screenshot, options.preload, options.video.url, options.subtitle) + '' + (options.logo ? '
' : '') + '
' + (options.danmaku ? '' + tran('Danmaku is loading') + '' : '') + '
' + tran('Set danmaku color') + '
' + tran('Set danmaku type') + '
0:00 / 0:00' + (options.live ? '' + tran('Live') + '' : '') + '
' + (options.video.quality ? '
' + this.tplQualityList(options.video.quality) + '
' : '') + '' + (options.screenshot ? '' + icons.get('camera') + '' : '') + '
' + (options.subtitle ? '
' : '') + '
' + tran('Speed') + '
' + icons.get('right') + '
' + tran('Loop') + '
' + tran('Show danmaku') + '
' + tran('Unlimited danmaku') + '
' + tran('Opacity for danmaku') + '
0.5
0.75
' + tran('Normal') + '
1.25
1.5
2
00:00
' + this.tplContextmenuList(options.contextmenu, tran) + '
';\n }\n },\n {\n key: 'tplDanmakumargin',\n value: function tplDanmakumargin(margin) {\n var result = '';\n if (margin) {\n for (var key in margin) {\n result += key + ':' + margin[key] + ';';\n }\n }\n return result;\n }\n },\n {\n key: 'tplContextmenuList',\n value: function tplContextmenuList(contextmenu, tran) {\n var result = '
';\n for (var i = 0; i < contextmenu.length; i++) {\n result += '';\n }\n result += '
';\n return result;\n }\n },\n {\n key: 'tplQualityList',\n value: function tplQualityList(quality) {\n var result = '
';\n for (var i = 0; i < quality.length; i++) {\n result += '
' + quality[i].name + '
';\n }\n result += '
';\n return result;\n }\n },\n {\n key: 'tplVideo',\n value: function tplVideo(current, pic, screenshot, preload, url, subtitle) {\n var enableSubtitle = subtitle && subtitle.type === 'webvtt';\n return '';\n }\n }\n ]);\n return Template;\n}();\nmodule.exports = Template;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar SvgSource = function () {\n function SvgSource(options) {\n _classCallCheck(this, SvgSource);\n this.icons = options.icons;\n this.iconColor = options.iconsColor;\n }\n _createClass(SvgSource, [{\n key: 'get',\n value: function get(type) {\n return '';\n }\n }]);\n return SvgSource;\n}();\nmodule.exports = SvgSource;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Danmaku = function () {\n function Danmaku(options) {\n _classCallCheck(this, Danmaku);\n this.options = options;\n this.container = this.options.container;\n this.danTunnel = {\n right: {},\n top: {},\n bottom: {}\n };\n this.danIndex = 0;\n this.dan = [];\n this.showing = true;\n this._opacity = this.options.opacity;\n this.events = this.options.events;\n this.unlimited = this.options.unlimited;\n this._measure('');\n this.load();\n }\n _createClass(Danmaku, [\n {\n key: 'load',\n value: function load() {\n var _this = this;\n var apiurl = void 0;\n if (this.options.api.maximum) {\n apiurl = this.options.api.address + '?id=' + this.options.api.id + '&max=' + this.options.api.maximum;\n } else {\n apiurl = this.options.api.address + '?id=' + this.options.api.id;\n }\n var endpoints = (this.options.api.addition || []).slice(0);\n endpoints.push(apiurl);\n this.events && this.events.trigger('danmaku_load_start', endpoints);\n this._readAllEndpoints(endpoints, function (results) {\n _this.dan = [].concat.apply([], results).sort(function (a, b) {\n return a.time - b.time;\n });\n window.requestAnimationFrame(function () {\n _this.frame();\n });\n _this.options.callback();\n _this.events && _this.events.trigger('danmaku_load_end');\n });\n }\n },\n {\n key: 'reload',\n value: function reload(newAPI) {\n this.options.api = newAPI;\n this.dan = [];\n this.clear();\n this.load();\n }\n },\n {\n key: '_readAllEndpoints',\n value: function _readAllEndpoints(endpoints, callback) {\n var _this2 = this;\n var results = [];\n var readCount = 0;\n var cbk = function cbk(i) {\n return function (err, data) {\n ++readCount;\n if (err) {\n if (err.response) {\n _this2.options.error(err.response.msg);\n } else {\n _this2.options.error('Request was unsuccessful: ' + err.status);\n }\n results[i] = [];\n } else {\n results[i] = data;\n }\n if (readCount === endpoints.length) {\n return callback(results);\n }\n };\n };\n for (var i = 0; i < endpoints.length; ++i) {\n this.options.apiBackend.read(endpoints[i], cbk(i));\n }\n }\n },\n {\n key: 'send',\n value: function send(dan, callback) {\n var danmakuData = {\n token: this.options.api.token,\n player: this.options.api.id,\n author: this.options.api.user,\n time: this.options.time(),\n text: dan.text,\n color: dan.color,\n type: dan.type\n };\n this.options.apiBackend.send(this.options.api.address, danmakuData, callback);\n this.dan.splice(this.danIndex, 0, danmakuData);\n this.danIndex++;\n var danmaku = {\n text: this.htmlEncode(danmakuData.text),\n color: danmakuData.color,\n type: danmakuData.type,\n border: '2px solid ' + this.options.borderColor\n };\n this.draw(danmaku);\n this.events && this.events.trigger('danmaku_send', danmakuData);\n }\n },\n {\n key: 'frame',\n value: function frame() {\n var _this3 = this;\n if (this.dan.length && !this.paused && this.showing) {\n var item = this.dan[this.danIndex];\n var dan = [];\n while (item && this.options.time() > parseFloat(item.time)) {\n dan.push(item);\n item = this.dan[++this.danIndex];\n }\n this.draw(dan);\n }\n window.requestAnimationFrame(function () {\n _this3.frame();\n });\n }\n },\n {\n key: 'opacity',\n value: function opacity(percentage) {\n if (percentage !== undefined) {\n var items = this.container.getElementsByClassName('dplayer-danmaku-item');\n for (var i = 0; i < items.length; i++) {\n items[i].style.opacity = percentage;\n }\n this._opacity = percentage;\n this.events && this.events.trigger('danmaku_opacity', this._opacity);\n }\n return this._opacity;\n }\n },\n {\n key: 'draw',\n value: function draw(dan) {\n var _this4 = this;\n if (this.showing) {\n var itemHeight = this.options.height;\n var danWidth = this.container.offsetWidth;\n var danHeight = this.container.offsetHeight;\n var itemY = parseInt(danHeight / itemHeight);\n var danItemRight = function danItemRight(ele) {\n var eleWidth = ele.offsetWidth || parseInt(ele.style.width);\n var eleRight = ele.getBoundingClientRect().right || _this4.container.getBoundingClientRect().right + eleWidth;\n return _this4.container.getBoundingClientRect().right - eleRight;\n };\n var danSpeed = function danSpeed(width) {\n return (danWidth + width) / 5;\n };\n var getTunnel = function getTunnel(ele, type, width) {\n var tmp = danWidth / danSpeed(width);\n var _loop = function _loop(i) {\n var item = _this4.danTunnel[type][i + ''];\n if (item && item.length) {\n if (type !== 'right') {\n return 'continue';\n }\n for (var j = 0; j < item.length; j++) {\n var danRight = danItemRight(item[j]) - 10;\n if (danRight <= danWidth - tmp * danSpeed(parseInt(item[j].style.width)) || danRight <= 0) {\n break;\n }\n if (j === item.length - 1) {\n _this4.danTunnel[type][i + ''].push(ele);\n ele.addEventListener('animationend', function () {\n _this4.danTunnel[type][i + ''].splice(0, 1);\n });\n return { v: i % itemY };\n }\n }\n } else {\n _this4.danTunnel[type][i + ''] = [ele];\n ele.addEventListener('animationend', function () {\n _this4.danTunnel[type][i + ''].splice(0, 1);\n });\n return { v: i % itemY };\n }\n };\n for (var i = 0; _this4.unlimited || i < itemY; i++) {\n var _ret = _loop(i);\n switch (_ret) {\n case 'continue':\n continue;\n default:\n if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === 'object')\n return _ret.v;\n }\n }\n return -1;\n };\n if (Object.prototype.toString.call(dan) !== '[object Array]') {\n dan = [dan];\n }\n var docFragment = document.createDocumentFragment();\n var _loop2 = function _loop2(i) {\n if (!dan[i].type) {\n dan[i].type = 'right';\n }\n if (!dan[i].color) {\n dan[i].color = '#fff';\n }\n var item = document.createElement('div');\n item.classList.add('dplayer-danmaku-item');\n item.classList.add('dplayer-danmaku-' + dan[i].type);\n if (dan[i].border) {\n item.innerHTML = '' + dan[i].text + '';\n } else {\n item.innerHTML = dan[i].text;\n }\n item.style.opacity = _this4._opacity;\n item.style.color = dan[i].color;\n item.addEventListener('animationend', function () {\n _this4.container.removeChild(item);\n });\n var itemWidth = _this4._measure(dan[i].text);\n var tunnel = void 0;\n switch (dan[i].type) {\n case 'right':\n tunnel = getTunnel(item, dan[i].type, itemWidth);\n if (tunnel >= 0) {\n item.style.width = itemWidth + 1 + 'px';\n item.style.top = itemHeight * tunnel + 'px';\n item.style.transform = 'translateX(-' + danWidth + 'px)';\n }\n break;\n case 'top':\n tunnel = getTunnel(item, dan[i].type);\n if (tunnel >= 0) {\n item.style.top = itemHeight * tunnel + 'px';\n }\n break;\n case 'bottom':\n tunnel = getTunnel(item, dan[i].type);\n if (tunnel >= 0) {\n item.style.bottom = itemHeight * tunnel + 'px';\n }\n break;\n default:\n console.error('Can\\'t handled danmaku type: ' + dan[i].type);\n }\n if (tunnel >= 0) {\n item.classList.add('dplayer-danmaku-move');\n docFragment.appendChild(item);\n }\n };\n for (var i = 0; i < dan.length; i++) {\n _loop2(i);\n }\n this.container.appendChild(docFragment);\n return docFragment;\n }\n }\n },\n {\n key: 'play',\n value: function play() {\n this.paused = false;\n }\n },\n {\n key: 'pause',\n value: function pause() {\n this.paused = true;\n }\n },\n {\n key: '_measure',\n value: function _measure(text) {\n if (!this.context) {\n var measureStyle = getComputedStyle(this.container.getElementsByClassName('dplayer-danmaku-item')[0], null);\n this.context = document.createElement('canvas').getContext('2d');\n this.context.font = measureStyle.getPropertyValue('font');\n }\n return this.context.measureText(text).width;\n }\n },\n {\n key: 'seek',\n value: function seek() {\n this.clear();\n for (var i = 0; i < this.dan.length; i++) {\n if (this.dan[i].time >= this.options.time()) {\n this.danIndex = i;\n break;\n }\n this.danIndex = this.dan.length;\n }\n }\n },\n {\n key: 'clear',\n value: function clear() {\n this.danTunnel = {\n right: {},\n top: {},\n bottom: {}\n };\n this.danIndex = 0;\n this.options.container.innerHTML = '';\n this.events && this.events.trigger('danmaku_clear');\n }\n },\n {\n key: 'htmlEncode',\n value: function htmlEncode(str) {\n return str.replace(/&/g, '&').replace(//g, '>').replace(/\"/g, '"').replace(/'/g, ''').replace(/\\//g, '/');\n }\n },\n {\n key: 'resize',\n value: function resize() {\n var danWidth = this.container.offsetWidth;\n var items = this.container.getElementsByClassName('dplayer-danmaku-item');\n for (var i = 0; i < items.length; i++) {\n items[i].style.transform = 'translateX(-' + danWidth + 'px)';\n }\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.showing = false;\n this.pause();\n this.clear();\n this.events && this.events.trigger('danmaku_hide');\n }\n },\n {\n key: 'show',\n value: function show() {\n this.seek();\n this.showing = true;\n this.play();\n this.events && this.events.trigger('danmaku_show');\n }\n },\n {\n key: 'unlimit',\n value: function unlimit(boolean) {\n this.unlimited = boolean;\n }\n }\n ]);\n return Danmaku;\n}();\nmodule.exports = Danmaku;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Thumbnails = function () {\n function Thumbnails(container, width, url, events) {\n _classCallCheck(this, Thumbnails);\n this.container = container;\n this.width = width;\n this.container.style.backgroundImage = 'url(\\'' + url + '\\')';\n this.events = events;\n }\n _createClass(Thumbnails, [\n {\n key: 'resize',\n value: function resize(width, height) {\n this.container.style.width = width + 'px';\n this.container.style.height = height + 'px';\n this.container.style.top = -height + 2 + 'px';\n }\n },\n {\n key: 'show',\n value: function show() {\n this.container.style.display = 'block';\n this.events && this.events.trigger('thumbnails_show');\n }\n },\n {\n key: 'move',\n value: function move(position) {\n this.container.style.backgroundPosition = '-' + (Math.ceil(position / this.width * 100) - 1) * 160 + 'px 0';\n this.container.style.left = position - this.container.offsetWidth / 2 + 'px';\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.container.style.display = 'none';\n this.events && this.events.trigger('thumbnails_hide');\n }\n }\n ]);\n return Thumbnails;\n}();\nmodule.exports = Thumbnails;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Events = function () {\n function Events() {\n _classCallCheck(this, Events);\n this.events = {};\n this.videoEvents = [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\n 'mozaudioavailable',\n 'pause',\n 'play',\n 'playing',\n 'progress',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'stalled',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'waiting'\n ];\n this.playerEvents = [\n 'screenshot',\n 'thumbnails_show',\n 'thumbnails_hide',\n 'danmaku_show',\n 'danmaku_hide',\n 'danmaku_clear',\n 'danmaku_loaded',\n 'danmaku_send',\n 'danmaku_opacity',\n 'contextmenu_show',\n 'contextmenu_hide',\n 'notice_show',\n 'notice_hide',\n 'quality_start',\n 'quality_end',\n 'destroy',\n 'resize',\n 'fullscreen',\n 'fullscreen_cancel',\n 'webfullscreen',\n 'webfullscreen_cancel',\n 'subtitle_show',\n 'subtitle_hide',\n 'subtitle_change'\n ];\n }\n _createClass(Events, [\n {\n key: 'on',\n value: function on(name, callback) {\n if (this.type(name) && typeof callback === 'function') {\n if (!this.events[name]) {\n this.events[name] = [];\n }\n this.events[name].push(callback);\n }\n }\n },\n {\n key: 'trigger',\n value: function trigger(name, info) {\n if (this.events[name] && this.events[name].length) {\n for (var i = 0; i < this.events[name].length; i++) {\n this.events[name][i](info);\n }\n }\n }\n },\n {\n key: 'type',\n value: function type(name) {\n if (this.playerEvents.indexOf(name) !== -1) {\n return 'player';\n } else if (this.videoEvents.indexOf(name) !== -1) {\n return 'video';\n }\n console.error('Unknown event name: ' + name);\n return null;\n }\n }\n ]);\n return Events;\n}();\nmodule.exports = Events;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = __webpack_require__(0);\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar FullScreen = function () {\n function FullScreen(player) {\n var _this = this;\n _classCallCheck(this, FullScreen);\n this.player = player;\n this.player.events.on('webfullscreen', function () {\n _this.player.resize();\n });\n this.player.events.on('webfullscreen_cancel', function () {\n _this.player.resize();\n _utils2.default.setScrollPosition(_this.lastScrollPosition);\n });\n var fullscreenchange = function fullscreenchange() {\n _this.player.resize();\n if (_this.isFullScreen('browser')) {\n _this.player.events.trigger('fullscreen');\n } else {\n _utils2.default.setScrollPosition(_this.lastScrollPosition);\n _this.player.events.trigger('fullscreen_cancel');\n }\n };\n this.player.container.addEventListener('fullscreenchange', fullscreenchange);\n this.player.container.addEventListener('mozfullscreenchange', fullscreenchange);\n this.player.container.addEventListener('webkitfullscreenchange', fullscreenchange);\n }\n _createClass(FullScreen, [\n {\n key: 'isFullScreen',\n value: function isFullScreen() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n switch (type) {\n case 'browser':\n return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n case 'web':\n return this.player.container.classList.contains('dplayer-fulled');\n }\n }\n },\n {\n key: 'request',\n value: function request() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n var anotherType = type === 'browser' ? 'web' : 'browser';\n var anotherTypeOn = this.isFullScreen(anotherType);\n if (!anotherTypeOn) {\n this.lastScrollPosition = _utils2.default.getScrollPosition();\n }\n switch (type) {\n case 'browser':\n if (this.player.container.requestFullscreen) {\n this.player.container.requestFullscreen();\n } else if (this.player.container.mozRequestFullScreen) {\n this.player.container.mozRequestFullScreen();\n } else if (this.player.container.webkitRequestFullscreen) {\n this.player.container.webkitRequestFullscreen();\n } else if (this.player.video.webkitEnterFullscreen) {\n this.player.video.webkitEnterFullscreen();\n }\n break;\n case 'web':\n this.player.container.classList.add('dplayer-fulled');\n document.body.classList.add('dplayer-web-fullscreen-fix');\n this.player.events.trigger('webfullscreen');\n break;\n }\n if (anotherTypeOn) {\n this.cancel(anotherType);\n }\n }\n },\n {\n key: 'cancel',\n value: function cancel() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n switch (type) {\n case 'browser':\n if (document.cancelFullScreen) {\n document.cancelFullScreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.webkitCancelFullScreen) {\n document.webkitCancelFullScreen();\n }\n break;\n case 'web':\n this.player.container.classList.remove('dplayer-fulled');\n document.body.classList.remove('dplayer-web-fullscreen-fix');\n this.player.events.trigger('webfullscreen_cancel');\n break;\n }\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n if (this.isFullScreen(type)) {\n this.cancel(type);\n } else {\n this.request(type);\n }\n }\n }\n ]);\n return FullScreen;\n}();\nmodule.exports = FullScreen;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = __webpack_require__(0);\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar User = function () {\n function User(player) {\n _classCallCheck(this, User);\n this.storageName = {\n opacity: 'dplayer-danmaku-opacity',\n volume: 'dplayer-volume',\n unlimited: 'dplayer-danmaku-unlimited',\n danmaku: 'dplayer-danmaku-show',\n subtitle: 'dplayer-subtitle-show'\n };\n this.default = {\n opacity: 0.7,\n volume: player.options.volume || 0.7,\n unlimited: (player.options.danmaku && player.options.danmaku.unlimited ? 1 : 0) || 0,\n danmaku: 1,\n subtitle: 1\n };\n this.data = {};\n this.init();\n }\n _createClass(User, [\n {\n key: 'init',\n value: function init() {\n for (var item in this.storageName) {\n var name = this.storageName[item];\n this.data[item] = parseFloat(_utils2.default.storage.get(name) || this.default[item]);\n }\n }\n },\n {\n key: 'get',\n value: function get(key) {\n return this.data[key];\n }\n },\n {\n key: 'set',\n value: function set(key, value) {\n this.data[key] = value;\n _utils2.default.storage.set(this.storageName[key], value);\n }\n }\n ]);\n return User;\n}();\nmodule.exports = User;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Subtitle = function () {\n function Subtitle(container, video, options, events) {\n _classCallCheck(this, Subtitle);\n this.container = container;\n this.video = video;\n this.options = options;\n this.events = events;\n this.init();\n }\n _createClass(Subtitle, [\n {\n key: 'init',\n value: function init() {\n var _this = this;\n this.container.style.fontSize = this.options.fontSize;\n this.container.style.bottom = this.options.bottom;\n this.container.style.color = this.options.color;\n if (this.video.textTracks && this.video.textTracks[0]) {\n var track = this.video.textTracks[0];\n track.oncuechange = function () {\n var cue = track.activeCues[0];\n if (cue) {\n _this.container.innerHTML = '';\n var p = document.createElement('p');\n p.appendChild(cue.getCueAsHTML());\n _this.container.appendChild(p);\n } else {\n _this.container.innerHTML = '';\n }\n _this.events.trigger('subtitle_change');\n };\n }\n }\n },\n {\n key: 'show',\n value: function show() {\n this.container.classList.remove('dplayer-subtitle-hide');\n this.events.trigger('subtitle_show');\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.container.classList.add('dplayer-subtitle-hide');\n this.events.trigger('subtitle_hide');\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.container.classList.contains('dplayer-subtitle-hide')) {\n this.show();\n } else {\n this.hide();\n }\n }\n }\n ]);\n return Subtitle;\n}();\nmodule.exports = Subtitle;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Bar = function () {\n function Bar(template) {\n _classCallCheck(this, Bar);\n this.elements = {};\n this.elements.volume = template.volumeBar;\n this.elements.played = template.playedBar;\n this.elements.loaded = template.loadedBar;\n this.elements.danmaku = template.danmakuOpacityBar;\n }\n _createClass(Bar, [\n {\n key: 'set',\n value: function set(type, percentage, direction) {\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n this.elements[type].style[direction] = percentage * 100 + '%';\n }\n },\n {\n key: 'get',\n value: function get(type) {\n return parseFloat(this.elements[type].style.width) / 100;\n }\n }\n ]);\n return Bar;\n}();\nmodule.exports = Bar;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = __webpack_require__(0);\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Time = function () {\n function Time(player) {\n _classCallCheck(this, Time);\n this.player = player;\n window.requestAnimationFrame = function () {\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n window.setTimeout(callback, 1000 / 60);\n };\n }();\n this.types = [\n 'loading',\n 'progress'\n ];\n this.init();\n }\n _createClass(Time, [\n {\n key: 'init',\n value: function init() {\n for (var i = 0; i < this.types.length; i++) {\n var type = this.types[i];\n this['init' + type + 'Checker']();\n }\n }\n },\n {\n key: 'initloadingChecker',\n value: function initloadingChecker() {\n var _this = this;\n var lastPlayPos = 0;\n var currentPlayPos = 0;\n var bufferingDetected = false;\n this.loadingChecker = setInterval(function () {\n if (_this.enableloadingChecker) {\n currentPlayPos = _this.player.video.currentTime;\n if (!bufferingDetected && currentPlayPos === lastPlayPos && !_this.player.video.paused) {\n _this.player.container.classList.add('dplayer-loading');\n bufferingDetected = true;\n }\n if (bufferingDetected && currentPlayPos > lastPlayPos && !_this.player.video.paused) {\n _this.player.container.classList.remove('dplayer-loading');\n bufferingDetected = false;\n }\n lastPlayPos = currentPlayPos;\n }\n }, 100);\n }\n },\n {\n key: 'initprogressChecker',\n value: function initprogressChecker() {\n var _this2 = this;\n this.progressChecker = setInterval(function () {\n if (_this2.enableprogressChecker) {\n _this2.player.bar.set('played', _this2.player.video.currentTime / _this2.player.video.duration, 'width');\n var currentTime = _utils2.default.secondToTime(_this2.player.video.currentTime);\n if (_this2.player.template.ptime.innerHTML !== currentTime) {\n _this2.player.template.ptime.innerHTML = _utils2.default.secondToTime(_this2.player.video.currentTime);\n }\n }\n }, 100);\n }\n },\n {\n key: 'enable',\n value: function enable(type) {\n if (type) {\n this['enable' + type + 'Checker'] = true;\n } else {\n for (var i = 0; i < this.types.length; i++) {\n var _type = this.types[i];\n this['enable' + _type + 'Checker'] = true;\n }\n }\n }\n },\n {\n key: 'disable',\n value: function disable(type) {\n if (type) {\n this['enable' + type + 'Checker'] = false;\n } else {\n for (var i = 0; i < this.types.length; i++) {\n var _type2 = this.types[i];\n this['enable' + _type2 + 'Checker'] = false;\n }\n }\n }\n },\n {\n key: 'distroy',\n value: function distroy(type) {\n if (type) {\n clearInterval(this[type + 'Checker']);\n } else {\n for (var i = 0; i < this.types.length; i++) {\n clearInterval(this[this.types[i] + 'Checker']);\n }\n }\n }\n }\n ]);\n return Time;\n}();\nmodule.exports = Time;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Bezel = function () {\n function Bezel(container) {\n var _this = this;\n _classCallCheck(this, Bezel);\n this.container = container;\n this.container.addEventListener('animationend', function () {\n _this.container.classList.remove('dplayer-bezel-transition');\n });\n }\n _createClass(Bezel, [{\n key: 'switch',\n value: function _switch(icon) {\n this.container.innerHTML = icon;\n this.container.classList.add('dplayer-bezel-transition');\n }\n }]);\n return Bezel;\n}();\nmodule.exports = Bezel;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = __webpack_require__(0);\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Controller = function () {\n function Controller(player) {\n var _this = this;\n _classCallCheck(this, Controller);\n this.player = player;\n this.autoHideTimer = 0;\n if (!_utils.isMobile) {\n this.player.container.addEventListener('mousemove', function () {\n _this.setAutoHide();\n });\n this.player.container.addEventListener('click', function () {\n _this.setAutoHide();\n });\n }\n }\n _createClass(Controller, [\n {\n key: 'setAutoHide',\n value: function setAutoHide() {\n var _this2 = this;\n this.show();\n clearTimeout(this.autoHideTimer);\n this.autoHideTimer = setTimeout(function () {\n if (_this2.player.video.played.length && !_this2.disableAutoHide) {\n _this2.hide();\n }\n }, 2000);\n }\n },\n {\n key: 'show',\n value: function show() {\n this.player.container.classList.remove('dplayer-hide-controller');\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.player.container.classList.add('dplayer-hide-controller');\n this.player.setting.hide();\n this.player.comment.hide();\n }\n },\n {\n key: 'isShow',\n value: function isShow() {\n return !this.player.container.classList.contains('dplayer-hide-controller');\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.isShow()) {\n this.hide();\n } else {\n this.show();\n }\n }\n },\n {\n key: 'destroy',\n value: function destroy() {\n clearTimeout(this.autoHideTimer);\n }\n }\n ]);\n return Controller;\n}();\nmodule.exports = Controller;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = __webpack_require__(0);\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar SettingBox = function () {\n function SettingBox(player) {\n var _this = this;\n _classCallCheck(this, SettingBox);\n this.player = player;\n this.player.template.mask.addEventListener('click', function () {\n _this.hide();\n });\n this.player.template.settingButton.addEventListener('click', function () {\n _this.show();\n });\n this.loop = this.player.options.loop;\n this.player.template.loopToggle.checked = this.loop;\n this.player.template.loop.addEventListener('click', function () {\n _this.player.template.loopToggle.checked = !_this.player.template.loopToggle.checked;\n if (_this.player.template.loopToggle.checked) {\n _this.loop = true;\n } else {\n _this.loop = false;\n }\n _this.hide();\n });\n this.showDanmaku = this.player.user.get('danmaku');\n if (!this.showDanmaku) {\n this.player.danmaku && this.player.danmaku.hide();\n }\n this.player.template.showDanmakuToggle.checked = this.showDanmaku;\n this.player.template.showDanmaku.addEventListener('click', function () {\n _this.player.template.showDanmakuToggle.checked = !_this.player.template.showDanmakuToggle.checked;\n if (_this.player.template.showDanmakuToggle.checked) {\n _this.showDanmaku = true;\n _this.player.danmaku.show();\n } else {\n _this.showDanmaku = false;\n _this.player.danmaku.hide();\n }\n _this.player.user.set('danmaku', _this.showDanmaku ? 1 : 0);\n _this.hide();\n });\n this.unlimitDanmaku = this.player.user.get('unlimited');\n this.player.template.unlimitDanmakuToggle.checked = this.unlimitDanmaku;\n this.player.template.unlimitDanmaku.addEventListener('click', function () {\n _this.player.template.unlimitDanmakuToggle.checked = !_this.player.template.unlimitDanmakuToggle.checked;\n if (_this.player.template.unlimitDanmakuToggle.checked) {\n _this.unlimitDanmaku = true;\n _this.player.danmaku.unlimit(true);\n } else {\n _this.unlimitDanmaku = false;\n _this.player.danmaku.unlimit(false);\n }\n _this.player.user.set('unlimited', _this.unlimitDanmaku ? 1 : 0);\n _this.hide();\n });\n this.player.template.speed.addEventListener('click', function () {\n _this.player.template.settingBox.classList.add('dplayer-setting-box-narrow');\n _this.player.template.settingBox.classList.add('dplayer-setting-box-speed');\n });\n var _loop = function _loop(i) {\n _this.player.template.speedItem[i].addEventListener('click', function () {\n _this.player.video.playbackRate = _this.player.template.speedItem[i].dataset.speed;\n _this.hide();\n });\n };\n for (var i = 0; i < this.player.template.speedItem.length; i++) {\n _loop(i);\n }\n if (this.player.danmaku) {\n var dWidth = 130;\n this.player.on('danmaku_opacity', function (percentage) {\n _this.player.bar.set('danmaku', percentage, 'width');\n _this.player.user.set('opacity', percentage);\n });\n this.player.danmaku.opacity(this.player.user.get('opacity'));\n var danmakuMove = function danmakuMove(event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.player.template.danmakuOpacityBarWrap)) / dWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.player.danmaku.opacity(percentage);\n };\n var danmakuUp = function danmakuUp() {\n document.removeEventListener('mouseup', danmakuUp);\n document.removeEventListener('mousemove', danmakuMove);\n _this.player.template.danmakuOpacityBox.classList.remove('dplayer-setting-danmaku-active');\n };\n this.player.template.danmakuOpacityBarWrapWrap.addEventListener('click', function (event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.player.template.danmakuOpacityBarWrap)) / dWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.player.danmaku.opacity(percentage);\n });\n this.player.template.danmakuOpacityBarWrapWrap.addEventListener('mousedown', function () {\n document.addEventListener('mousemove', danmakuMove);\n document.addEventListener('mouseup', danmakuUp);\n _this.player.template.danmakuOpacityBox.classList.add('dplayer-setting-danmaku-active');\n });\n }\n }\n _createClass(SettingBox, [\n {\n key: 'hide',\n value: function hide() {\n var _this2 = this;\n this.player.template.settingBox.classList.remove('dplayer-setting-box-open');\n this.player.template.mask.classList.remove('dplayer-mask-show');\n setTimeout(function () {\n _this2.player.template.settingBox.classList.remove('dplayer-setting-box-narrow');\n _this2.player.template.settingBox.classList.remove('dplayer-setting-box-speed');\n }, 300);\n this.player.controller.disableAutoHide = false;\n }\n },\n {\n key: 'show',\n value: function show() {\n this.player.template.settingBox.classList.add('dplayer-setting-box-open');\n this.player.template.mask.classList.add('dplayer-mask-show');\n this.player.controller.disableAutoHide = true;\n }\n }\n ]);\n return SettingBox;\n}();\nmodule.exports = SettingBox;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Comment = function () {\n function Comment(player) {\n var _this = this;\n _classCallCheck(this, Comment);\n this.player = player;\n this.player.template.mask.addEventListener('click', function () {\n _this.hide();\n });\n this.player.template.commentButton.addEventListener('click', function () {\n _this.show();\n });\n this.player.template.commentSettingButton.addEventListener('click', function () {\n _this.toggleSetting();\n });\n this.player.template.commentColorSettingBox.addEventListener('click', function () {\n var sele = _this.player.template.commentColorSettingBox.querySelector('input:checked+span');\n if (sele) {\n var color = _this.player.template.commentColorSettingBox.querySelector('input:checked').value;\n _this.player.template.commentSettingFill.style.fill = color;\n _this.player.template.commentInput.style.color = color;\n _this.player.template.commentSendFill.style.fill = color;\n }\n });\n this.player.template.commentInput.addEventListener('click', function () {\n _this.hideSetting();\n });\n this.player.template.commentInput.addEventListener('keydown', function (e) {\n var event = e || window.event;\n if (event.keyCode === 13) {\n _this.send();\n }\n });\n this.player.template.commentSendButton.addEventListener('click', function () {\n _this.send();\n });\n }\n _createClass(Comment, [\n {\n key: 'show',\n value: function show() {\n this.player.controller.disableAutoHide = true;\n this.player.template.controller.classList.add('dplayer-controller-comment');\n this.player.template.mask.classList.add('dplayer-mask-show');\n this.player.container.classList.add('dplayer-show-controller');\n this.player.template.commentInput.focus();\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.player.template.controller.classList.remove('dplayer-controller-comment');\n this.player.template.mask.classList.remove('dplayer-mask-show');\n this.player.container.classList.remove('dplayer-show-controller');\n this.player.controller.disableAutoHide = false;\n this.hideSetting();\n }\n },\n {\n key: 'showSetting',\n value: function showSetting() {\n this.player.template.commentSettingBox.classList.add('dplayer-comment-setting-open');\n }\n },\n {\n key: 'hideSetting',\n value: function hideSetting() {\n this.player.template.commentSettingBox.classList.remove('dplayer-comment-setting-open');\n }\n },\n {\n key: 'toggleSetting',\n value: function toggleSetting() {\n if (this.player.template.commentSettingBox.classList.contains('dplayer-comment-setting-open')) {\n this.hideSetting();\n } else {\n this.showSetting();\n }\n }\n },\n {\n key: 'send',\n value: function send() {\n var _this2 = this;\n this.player.template.commentInput.blur();\n if (!this.player.template.commentInput.value.replace(/^\\s+|\\s+$/g, '')) {\n this.player.notice(this.player.tran('Please input danmaku content!'));\n return;\n }\n this.player.danmaku.send({\n text: this.player.template.commentInput.value,\n color: this.player.container.querySelector('.dplayer-comment-setting-color input:checked').value,\n type: this.player.container.querySelector('.dplayer-comment-setting-type input:checked').value\n }, function () {\n _this2.player.template.commentInput.value = '';\n _this2.hide();\n });\n }\n }\n ]);\n return Comment;\n}();\nmodule.exports = Comment;\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// DPlayer.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c39b5b5b679bd459a63e","'use strict';\nmodule.exports = {\n secondToTime: function secondToTime(second) {\n var add0 = function add0(num) {\n return num < 10 ? '0' + num : '' + num;\n };\n var min = parseInt(second / 60);\n var sec = parseInt(second - min * 60);\n return add0(min) + ':' + add0(sec);\n },\n getElementViewLeft: function getElementViewLeft(element) {\n var actualLeft = element.offsetLeft;\n var current = element.offsetParent;\n var elementScrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;\n if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {\n while (current !== null) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n } else {\n while (current !== null && current !== element) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n }\n return actualLeft - elementScrollLeft;\n },\n getScrollPosition: function getScrollPosition() {\n return {\n left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0,\n top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0\n };\n },\n setScrollPosition: function setScrollPosition(_ref) {\n var _ref$left = _ref.left, left = _ref$left === undefined ? 0 : _ref$left, _ref$top = _ref.top, top = _ref$top === undefined ? 0 : _ref$top;\n if (this.isFirefox) {\n document.documentElement.scrollLeft = left;\n document.documentElement.scrollTop = top;\n } else {\n window.scrollTo(left, top);\n }\n },\n isMobile: /mobile/i.test(window.navigator.userAgent),\n isFirefox: /firefox/i.test(window.navigator.userAgent),\n isChrome: /chrome/i.test(window.navigator.userAgent),\n storage: {\n set: function set(key, value) {\n localStorage.setItem(key, value);\n },\n get: function get(key) {\n return localStorage.getItem(key);\n }\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utils.js\n// module id = 0\n// module chunks = 0","'use strict';\nconsole.log('\\n' + ' %c DPlayer ' + DPLAYER_VERSION + ' ' + GIT_HASH + ' %c http://dplayer.js.org ' + '\\n' + '\\n', 'color: #fadfa3; background: #030307; padding:5px 0;', 'background: #fadfa3; padding:5px 0;');\nmodule.exports = require('./DPlayer');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/index.js\n// module id = 1\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nrequire('./DPlayer.scss');\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nvar _options = require('./options');\nvar _options2 = _interopRequireDefault(_options);\nvar _i18n = require('./i18n');\nvar _i18n2 = _interopRequireDefault(_i18n);\nvar _template = require('./template');\nvar _template2 = _interopRequireDefault(_template);\nvar _svg = require('./svg');\nvar _svg2 = _interopRequireDefault(_svg);\nvar _danmaku = require('./danmaku');\nvar _danmaku2 = _interopRequireDefault(_danmaku);\nvar _thumbnails = require('./thumbnails');\nvar _thumbnails2 = _interopRequireDefault(_thumbnails);\nvar _events = require('./events');\nvar _events2 = _interopRequireDefault(_events);\nvar _fullscreen = require('./fullscreen');\nvar _fullscreen2 = _interopRequireDefault(_fullscreen);\nvar _user = require('./user');\nvar _user2 = _interopRequireDefault(_user);\nvar _subtitle = require('./subtitle');\nvar _subtitle2 = _interopRequireDefault(_subtitle);\nvar _bar = require('./bar');\nvar _bar2 = _interopRequireDefault(_bar);\nvar _time = require('./time');\nvar _time2 = _interopRequireDefault(_time);\nvar _bezel = require('./bezel');\nvar _bezel2 = _interopRequireDefault(_bezel);\nvar _controller = require('./controller');\nvar _controller2 = _interopRequireDefault(_controller);\nvar _setting = require('./setting');\nvar _setting2 = _interopRequireDefault(_setting);\nvar _comment = require('./comment');\nvar _comment2 = _interopRequireDefault(_comment);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar index = 0;\nvar instances = [];\nvar DPlayer = function () {\n function DPlayer(options) {\n var _this = this;\n _classCallCheck(this, DPlayer);\n this.options = (0, _options2.default)(options);\n if (this.options.video.quality) {\n this.qualityIndex = this.options.video.defaultQuality;\n this.quality = this.options.video.quality[this.options.video.defaultQuality];\n }\n this.tran = new _i18n2.default(this.options.lang).tran;\n this.icons = new _svg2.default(this.options);\n this.events = new _events2.default();\n this.user = new _user2.default(this);\n this.container = this.options.container;\n this.container.classList.add('dplayer');\n if (!this.options.danmaku) {\n this.container.classList.add('dplayer-no-danmaku');\n }\n if (this.options.live) {\n this.container.classList.add('dplayer-live');\n }\n if (_utils.isMobile) {\n this.container.classList.add('dplayer-mobile');\n }\n this.arrow = this.container.offsetWidth <= 500;\n if (this.arrow) {\n this.container.classList.add('dplayer-arrow');\n }\n this.template = new _template2.default({\n container: this.container,\n options: this.options,\n index: index,\n tran: this.tran,\n icons: this.icons\n });\n this.video = this.template.video;\n this.bar = new _bar2.default(this.template);\n this.bezel = new _bezel2.default(this.template.bezel);\n this.controller = new _controller2.default(this);\n if (this.options.danmaku) {\n this.danmaku = new _danmaku2.default({\n container: this.template.danmaku,\n opacity: this.user.get('opacity'),\n callback: function callback() {\n setTimeout(function () {\n _this.template.danmakuLoading.style.display = 'none';\n if (_this.options.autoplay && !_utils.isMobile) {\n _this.play();\n } else if (_utils.isMobile) {\n _this.pause();\n }\n }, 0);\n },\n error: function error(msg) {\n _this.notice(msg);\n },\n apiBackend: this.options.apiBackend,\n borderColor: this.options.theme,\n height: this.arrow ? 24 : 30,\n time: function time() {\n return _this.video.currentTime;\n },\n unlimited: this.user.get('unlimited'),\n api: {\n id: this.options.danmaku.id,\n address: this.options.danmaku.api,\n token: this.options.danmaku.token,\n maximum: this.options.danmaku.maximum,\n addition: this.options.danmaku.addition,\n user: this.options.danmaku.user\n },\n events: this.events\n });\n this.comment = new _comment2.default(this);\n }\n this.setting = new _setting2.default(this);\n document.addEventListener('click', function () {\n _this.focus = false;\n }, true);\n this.container.addEventListener('click', function () {\n _this.focus = true;\n }, true);\n this.paused = true;\n this.template.playButton.addEventListener('click', function () {\n _this.toggle();\n });\n if (!_utils.isMobile) {\n this.template.videoWrap.addEventListener('click', function () {\n _this.toggle();\n });\n this.template.controllerMask.addEventListener('click', function () {\n _this.toggle();\n });\n } else {\n this.template.videoWrap.addEventListener('click', function () {\n _this.controller.toggle();\n });\n this.template.controllerMask.addEventListener('click', function () {\n _this.controller.toggle();\n });\n }\n this.time = new _time2.default(this);\n if (this.options.video.thumbnails) {\n this.initThumbnails();\n }\n this.isTimeTipsShow = true;\n this.mouseHandler = this.mouseHandler(this.template.playedBarWrap, this.template.playedBarTime).bind(this);\n this.template.playedBarWrap.addEventListener('mousemove', this.mouseHandler);\n this.template.playedBarWrap.addEventListener('mouseenter', this.mouseHandler);\n this.template.playedBarWrap.addEventListener('mouseleave', this.mouseHandler);\n var barWidth = void 0;\n var thumbMove = function thumbMove(e) {\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.playedBarWrap)) / barWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.bar.set('played', percentage, 'width');\n _this.template.ptime.innerHTML = _utils2.default.secondToTime(percentage * _this.video.duration);\n };\n var thumbUp = function thumbUp(e) {\n document.removeEventListener('mouseup', thumbUp);\n document.removeEventListener('mousemove', thumbMove);\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.playedBarWrap)) / barWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.bar.set('played', percentage, 'width');\n _this.seek(_this.bar.get('played') * _this.video.duration);\n _this.time.enable('progress');\n };\n this.template.playedBarWrap.addEventListener('mousedown', function () {\n barWidth = _this.template.playedBarWrap.clientWidth;\n _this.time.disable('progress');\n document.addEventListener('mousemove', thumbMove);\n document.addEventListener('mouseup', thumbUp);\n });\n var vWidth = 35;\n this.switchVolumeIcon = function () {\n if (_this.volume() >= 0.95) {\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-up');\n } else if (_this.volume() > 0) {\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-down');\n } else {\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-off');\n }\n };\n var volumeMove = function volumeMove(event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.volumeBarWrap) - 5.5) / vWidth;\n _this.volume(percentage);\n };\n var volumeUp = function volumeUp() {\n document.removeEventListener('mouseup', volumeUp);\n document.removeEventListener('mousemove', volumeMove);\n _this.template.volumeButton.classList.remove('dplayer-volume-active');\n };\n this.template.volumeBarWrapWrap.addEventListener('click', function (event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.template.volumeBarWrap) - 5.5) / vWidth;\n _this.volume(percentage);\n });\n this.template.volumeBarWrapWrap.addEventListener('mousedown', function () {\n document.addEventListener('mousemove', volumeMove);\n document.addEventListener('mouseup', volumeUp);\n _this.template.volumeButton.classList.add('dplayer-volume-active');\n });\n this.template.volumeIcon.addEventListener('click', function () {\n if (_this.video.muted) {\n _this.video.muted = false;\n _this.switchVolumeIcon();\n _this.bar.set('volume', _this.volume(), 'width');\n } else {\n _this.video.muted = true;\n _this.template.volumeIcon.innerHTML = _this.icons.get('volume-off');\n _this.bar.set('volume', 0, 'width');\n }\n });\n if (this.video.duration !== 1) {\n this.template.dtime.innerHTML = this.video.duration ? _utils2.default.secondToTime(this.video.duration) : '00:00';\n }\n if (!this.danmaku) {\n if (this.options.autoplay && !_utils.isMobile) {\n this.play();\n } else if (_utils.isMobile) {\n this.pause();\n }\n }\n this.fullScreen = new _fullscreen2.default(this);\n this.template.browserFullButton.addEventListener('click', function () {\n _this.fullScreen.toggle('browser');\n });\n this.template.webFullButton.addEventListener('click', function () {\n _this.fullScreen.toggle('web');\n });\n var handleKeyDown = function handleKeyDown(e) {\n if (_this.focus) {\n var tag = document.activeElement.tagName.toUpperCase();\n var editable = document.activeElement.getAttribute('contenteditable');\n if (tag !== 'INPUT' && tag !== 'TEXTAREA' && editable !== '' && editable !== 'true') {\n var event = e || window.event;\n var percentage = void 0;\n switch (event.keyCode) {\n case 32:\n event.preventDefault();\n _this.toggle();\n break;\n case 37:\n event.preventDefault();\n _this.seek(_this.video.currentTime - 5);\n _this.controller.setAutoHide();\n break;\n case 39:\n event.preventDefault();\n _this.seek(_this.video.currentTime + 5);\n _this.controller.setAutoHide();\n break;\n case 38:\n event.preventDefault();\n percentage = _this.volume() + 0.1;\n _this.volume(percentage);\n break;\n case 40:\n event.preventDefault();\n percentage = _this.volume() - 0.1;\n _this.volume(percentage);\n break;\n }\n }\n }\n };\n if (this.options.hotkey) {\n document.addEventListener('keydown', handleKeyDown);\n }\n document.addEventListener('keydown', function (e) {\n var event = e || window.event;\n switch (event.keyCode) {\n case 27:\n if (_this.fullScreen.isFullScreen('web')) {\n _this.fullScreen.cancel('web');\n }\n break;\n }\n });\n this.container.addEventListener('contextmenu', function (e) {\n var event = e || window.event;\n event.preventDefault();\n _this.template.menu.classList.add('dplayer-menu-show');\n var clientRect = _this.container.getBoundingClientRect();\n var menuLeft = event.clientX - clientRect.left;\n var menuTop = event.clientY - clientRect.top;\n if (menuLeft + _this.template.menu.offsetWidth >= clientRect.width) {\n _this.template.menu.style.right = clientRect.width - menuLeft + 'px';\n _this.template.menu.style.left = 'initial';\n } else {\n _this.template.menu.style.left = event.clientX - _this.container.getBoundingClientRect().left + 'px';\n _this.template.menu.style.right = 'initial';\n }\n if (menuTop + _this.template.menu.offsetHeight >= clientRect.height) {\n _this.template.menu.style.bottom = clientRect.height - menuTop + 'px';\n _this.template.menu.style.top = 'initial';\n } else {\n _this.template.menu.style.top = event.clientY - _this.container.getBoundingClientRect().top + 'px';\n _this.template.menu.style.bottom = 'initial';\n }\n _this.template.mask.classList.add('dplayer-mask-show');\n _this.events.trigger('contextmenu_show');\n _this.template.mask.addEventListener('click', function () {\n _this.template.mask.classList.remove('dplayer-mask-show');\n _this.template.menu.classList.remove('dplayer-menu-show');\n _this.events.trigger('contextmenu_hide');\n });\n });\n if (this.options.video.quality) {\n this.template.qualityList.addEventListener('click', function (e) {\n if (e.target.classList.contains('dplayer-quality-item')) {\n _this.switchQuality(e.target.dataset.index);\n }\n });\n }\n if (this.options.screenshot) {\n this.template.camareButton.addEventListener('click', function () {\n var canvas = document.createElement('canvas');\n canvas.width = _this.video.videoWidth;\n canvas.height = _this.video.videoHeight;\n canvas.getContext('2d').drawImage(_this.video, 0, 0, canvas.width, canvas.height);\n var dataURL = canvas.toDataURL();\n _this.template.camareButton.href = dataURL;\n _this.template.camareButton.download = 'DPlayer.png';\n _this.events.trigger('screenshot', dataURL);\n });\n }\n if (this.options.subtitle) {\n this.events.on('subtitle_show', function () {\n _this.template.subtitleButton.dataset.balloon = _this.tran('Hide subtitle');\n _this.template.subtitleButtonInner.style.opacity = '';\n _this.user.set('subtitle', 1);\n });\n this.events.on('subtitle_hide', function () {\n _this.template.subtitleButton.dataset.balloon = _this.tran('Show subtitle');\n _this.template.subtitleButtonInner.style.opacity = '0.4';\n _this.user.set('subtitle', 0);\n });\n this.template.subtitleButton.addEventListener('click', function () {\n _this.subtitle.toggle();\n });\n }\n this.initVideo(this.video, this.quality && this.quality.type || this.options.video.type);\n index++;\n instances.push(this);\n }\n _createClass(DPlayer, [\n {\n key: 'seek',\n value: function seek(time) {\n time = Math.max(time, 0);\n if (this.video.duration) {\n time = Math.min(time, this.video.duration);\n }\n if (this.video.currentTime < time) {\n this.notice(this.tran('FF') + ' ' + (time - this.video.currentTime).toFixed(0) + ' ' + this.tran('s'));\n } else if (this.video.currentTime > time) {\n this.notice(this.tran('REW') + ' ' + (this.video.currentTime - time).toFixed(0) + ' ' + this.tran('s'));\n }\n this.video.currentTime = time;\n if (this.danmaku) {\n this.danmaku.seek();\n }\n this.bar.set('played', time / this.video.duration, 'width');\n }\n },\n {\n key: 'play',\n value: function play() {\n this.paused = false;\n if (this.video.paused) {\n this.bezel.switch(this.icons.get('play'));\n }\n this.template.playButton.innerHTML = this.icons.get('pause');\n this.video.play();\n this.time.enable();\n this.container.classList.add('dplayer-playing');\n if (this.danmaku) {\n this.danmaku.play();\n }\n if (this.options.mutex) {\n for (var i = 0; i < instances.length; i++) {\n if (this !== instances[i]) {\n instances[i].pause();\n }\n }\n }\n }\n },\n {\n key: 'pause',\n value: function pause() {\n this.paused = true;\n this.container.classList.remove('dplayer-loading');\n if (!this.video.paused) {\n this.bezel.switch(this.icons.get('pause'));\n }\n this.ended = false;\n this.template.playButton.innerHTML = this.icons.get('play');\n this.video.pause();\n this.time.disable();\n this.container.classList.remove('dplayer-playing');\n if (this.danmaku) {\n this.danmaku.pause();\n }\n }\n },\n {\n key: 'volume',\n value: function volume(percentage, nostorage, nonotice) {\n percentage = parseFloat(percentage);\n if (!isNaN(percentage)) {\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n this.bar.set('volume', percentage, 'width');\n var formatPercentage = (percentage * 100).toFixed(0) + '%';\n this.template.volumeBarWrapWrap.dataset.balloon = formatPercentage;\n if (!nostorage) {\n this.user.set('volume', percentage);\n }\n if (!nonotice) {\n this.notice(this.tran('Volume') + ' ' + (percentage * 100).toFixed(0) + '%');\n }\n this.video.volume = percentage;\n if (this.video.muted) {\n this.video.muted = false;\n }\n this.switchVolumeIcon();\n }\n return this.video.volume;\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.video.paused) {\n this.play();\n } else {\n this.pause();\n }\n }\n },\n {\n key: 'on',\n value: function on(name, callback) {\n this.events.on(name, callback);\n }\n },\n {\n key: 'switchVideo',\n value: function switchVideo(video, danmakuAPI) {\n this.pause();\n this.video.poster = video.pic ? video.pic : '';\n this.video.src = video.url;\n this.initMSE(this.video, video.type || 'auto');\n if (danmakuAPI) {\n this.template.danmakuLoading.style.display = 'block';\n this.bar.set('played', 0, 'width');\n this.bar.set('loaded', 0, 'width');\n this.template.ptime.innerHTML = '00:00';\n this.template.danmaku.innerHTML = '';\n if (this.danmaku) {\n this.danmaku.reload({\n id: danmakuAPI.id,\n address: danmakuAPI.api,\n token: danmakuAPI.token,\n maximum: danmakuAPI.maximum,\n addition: danmakuAPI.addition,\n user: danmakuAPI.user\n });\n }\n }\n }\n },\n {\n key: 'initMSE',\n value: function initMSE(video, type) {\n this.type = type;\n if (this.type === 'auto') {\n if (/m3u8(#|\\?|$)/i.exec(video.src)) {\n this.type = 'hls';\n } else if (/.flv(#|\\?|$)/i.exec(video.src)) {\n this.type = 'flv';\n } else if (/.mpd(#|\\?|$)/i.exec(video.src)) {\n this.type = 'dash';\n } else {\n this.type = 'normal';\n }\n }\n if (this.type === 'hls' && Hls && Hls.isSupported()) {\n var hls = new Hls();\n hls.loadSource(video.src);\n hls.attachMedia(video);\n }\n if (this.type === 'flv' && flvjs && flvjs.isSupported()) {\n var flvPlayer = flvjs.createPlayer({\n type: 'flv',\n url: video.src\n });\n flvPlayer.attachMediaElement(video);\n flvPlayer.load();\n }\n if (this.type === 'dash' && dashjs) {\n dashjs.MediaPlayer().create().initialize(video, video.src, false);\n }\n }\n },\n {\n key: 'initVideo',\n value: function initVideo(video, type) {\n var _this2 = this;\n this.initMSE(video, type);\n this.on('durationchange', function () {\n if (video.duration !== 1) {\n _this2.template.dtime.innerHTML = _utils2.default.secondToTime(video.duration);\n }\n });\n this.on('progress', function () {\n var percentage = video.buffered.length ? video.buffered.end(video.buffered.length - 1) / video.duration : 0;\n _this2.bar.set('loaded', percentage, 'width');\n });\n this.on('error', function () {\n _this2.tran && _this2.notice && _this2.notice(_this2.tran('This video fails to load'), -1);\n });\n this.ended = false;\n this.on('ended', function () {\n _this2.bar.set('played', 1, 'width');\n if (!_this2.setting.loop) {\n _this2.ended = true;\n _this2.pause();\n } else {\n _this2.seek(0);\n video.play();\n }\n if (_this2.danmaku) {\n _this2.danmaku.danIndex = 0;\n }\n });\n this.on('play', function () {\n if (_this2.paused) {\n _this2.play();\n }\n });\n this.on('pause', function () {\n if (!_this2.paused) {\n _this2.pause();\n }\n });\n var _loop = function _loop(i) {\n video.addEventListener(_this2.events.videoEvents[i], function () {\n _this2.events.trigger(_this2.events.videoEvents[i]);\n });\n };\n for (var i = 0; i < this.events.videoEvents.length; i++) {\n _loop(i);\n }\n this.volume(this.user.get('volume'), true, true);\n if (this.options.subtitle) {\n this.subtitle = new _subtitle2.default(this.template.subtitle, this.video, this.options.subtitle, this.events);\n if (!this.user.get('subtitle')) {\n this.subtitle.hide();\n }\n }\n }\n },\n {\n key: 'switchQuality',\n value: function switchQuality(index) {\n var _this3 = this;\n if (this.qualityIndex === index || this.switchingQuality) {\n return;\n } else {\n this.qualityIndex = index;\n }\n this.switchingQuality = true;\n this.quality = this.options.video.quality[index];\n this.template.qualityButton.innerHTML = this.quality.name;\n var paused = this.video.paused;\n this.video.pause();\n var videoHTML = this.template.tplVideo(false, null, this.options.screenshot, 'auto', this.quality.url, this.options.subtitle);\n var videoEle = new DOMParser().parseFromString(videoHTML, 'text/html').body.firstChild;\n this.template.videoWrap.insertBefore(videoEle, this.template.videoWrap.getElementsByTagName('div')[0]);\n this.prevVideo = this.video;\n this.video = videoEle;\n this.initVideo(this.video, this.quality.type || this.options.video.type);\n this.seek(this.prevVideo.currentTime);\n this.notice(this.tran('Switching to') + ' ' + this.quality.name + ' ' + this.tran('quality'), -1);\n this.events.trigger('quality_start', this.quality);\n this.on('canplay', function () {\n if (_this3.prevVideo) {\n if (_this3.video.currentTime !== _this3.prevVideo.currentTime) {\n _this3.seek(_this3.prevVideo.currentTime);\n return;\n }\n _this3.template.videoWrap.removeChild(_this3.prevVideo);\n _this3.video.classList.add('dplayer-video-current');\n if (!paused) {\n _this3.video.play();\n }\n _this3.prevVideo = null;\n _this3.notice(_this3.tran('Switched to') + ' ' + _this3.quality.name + ' ' + _this3.tran('quality'));\n _this3.switchingQuality = false;\n _this3.events.trigger('quality_end');\n }\n });\n }\n },\n {\n key: 'mouseHandler',\n value: function mouseHandler(pbar, timeTips) {\n var _this4 = this;\n var cumulativeOffset = function cumulativeOffset(element) {\n var top = 0, left = 0;\n do {\n top += element.offsetTop || 0;\n left += element.offsetLeft || 0;\n element = element.offsetParent;\n } while (element);\n return {\n top: top,\n left: left\n };\n };\n return function (e) {\n if (!_this4.video.duration) {\n return;\n }\n var clientX = e.clientX;\n var px = cumulativeOffset(pbar).left;\n var tx = clientX - px;\n if (tx < 0 || tx > pbar.offsetWidth) {\n return;\n }\n var time = _this4.video.duration * (tx / pbar.offsetWidth);\n timeTips.style.left = tx - 20 + 'px';\n switch (e.type) {\n case 'mouseenter':\n _this4.thumbnails && _this4.thumbnails.show();\n break;\n case 'mousemove':\n _this4.thumbnails && _this4.thumbnails.move(tx);\n timeTips.innerText = _utils2.default.secondToTime(time);\n _this4.timeTipsDisplay(true, timeTips);\n break;\n case 'mouseleave':\n _this4.thumbnails && _this4.thumbnails.hide();\n _this4.timeTipsDisplay(false, timeTips);\n break;\n }\n };\n }\n },\n {\n key: 'timeTipsDisplay',\n value: function timeTipsDisplay(show, timeTips) {\n if (show) {\n if (this.isTimeTipsShow) {\n return;\n }\n timeTips.classList.remove('hidden');\n this.isTimeTipsShow = true;\n } else {\n if (!this.isTimeTipsShow) {\n return;\n }\n timeTips.classList.add('hidden');\n this.isTimeTipsShow = false;\n }\n }\n },\n {\n key: 'initThumbnails',\n value: function initThumbnails() {\n var _this5 = this;\n this.thumbnails = new _thumbnails2.default(this.template.barPreview, this.template.barWrap.offsetWidth, this.options.video.thumbnails, this.events);\n this.on('loadedmetadata', function () {\n _this5.thumbnails.resize(160, 90);\n });\n }\n },\n {\n key: 'notice',\n value: function notice(text) {\n var _this6 = this;\n var time = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2000;\n var opacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.8;\n this.template.notice.innerHTML = text;\n this.template.notice.style.opacity = opacity;\n if (this.noticeTime) {\n clearTimeout(this.noticeTime);\n }\n this.events.trigger('notice_show', text);\n this.noticeTime = setTimeout(function () {\n _this6.template.notice.style.opacity = 0;\n _this6.events.trigger('notice_hide');\n }, time);\n }\n },\n {\n key: 'resize',\n value: function resize() {\n if (this.danmaku) {\n this.danmaku.resize();\n }\n this.events.trigger('resize');\n }\n },\n {\n key: 'destroy',\n value: function destroy() {\n instances.splice(instances.indexOf(this), 1);\n this.pause();\n this.controller.destroy();\n this.time.destroy();\n this.video.src = '';\n this.container.innerHTML = '';\n this.events.trigger('destroy');\n for (var key in this) {\n if (this.hasOwnProperty(key) && key !== 'paused') {\n delete this[key];\n }\n }\n }\n }\n ]);\n return DPlayer;\n}();\nmodule.exports = DPlayer;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/DPlayer.js\n// module id = 2\n// module chunks = 0","'use strict';\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar defaultApiBackend = require('./api.js');\nmodule.exports = function (options) {\n var isMobile = /mobile/i.test(window.navigator.userAgent);\n if (isMobile) {\n options.autoplay = false;\n }\n var defaultOption = {\n container: options.element || document.getElementsByClassName('dplayer')[0],\n live: false,\n autoplay: false,\n theme: '#b7daff',\n loop: false,\n lang: (navigator.language || navigator.browserLanguage).toLowerCase(),\n screenshot: false,\n hotkey: true,\n preload: 'auto',\n volume: 0.7,\n apiBackend: defaultApiBackend,\n video: {},\n icons: {\n play: [\n '0 0 16 32',\n 'M15.552 15.168q0.448 0.32 0.448 0.832 0 0.448-0.448 0.768l-13.696 8.512q-0.768 0.512-1.312 0.192t-0.544-1.28v-16.448q0-0.96 0.544-1.28t1.312 0.192z'\n ],\n pause: [\n '0 0 17 32',\n 'M14.080 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048zM2.88 4.8q2.88 0 2.88 2.048v18.24q0 2.112-2.88 2.112t-2.88-2.112v-18.24q0-2.048 2.88-2.048z'\n ],\n 'volume-up': [\n '0 0 21 32',\n 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528zM25.152 16q0 2.72-1.536 5.056t-4 3.36q-0.256 0.096-0.448 0.096-0.48 0-0.832-0.352t-0.32-0.8q0-0.704 0.672-1.056 1.024-0.512 1.376-0.8 1.312-0.96 2.048-2.4t0.736-3.104-0.736-3.104-2.048-2.4q-0.352-0.288-1.376-0.8-0.672-0.352-0.672-1.056 0-0.448 0.32-0.8t0.8-0.352q0.224 0 0.48 0.096 2.496 1.056 4 3.36t1.536 5.056z'\n ],\n 'volume-down': [\n '0 0 21 32',\n 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8zM20.576 16q0 1.344-0.768 2.528t-2.016 1.664q-0.16 0.096-0.448 0.096-0.448 0-0.8-0.32t-0.32-0.832q0-0.384 0.192-0.64t0.544-0.448 0.608-0.384 0.512-0.64 0.192-1.024-0.192-1.024-0.512-0.64-0.608-0.384-0.544-0.448-0.192-0.64q0-0.48 0.32-0.832t0.8-0.32q0.288 0 0.448 0.096 1.248 0.48 2.016 1.664t0.768 2.528z'\n ],\n 'volume-off': [\n '0 0 21 32',\n 'M13.728 6.272v19.456q0 0.448-0.352 0.8t-0.8 0.32-0.8-0.32l-5.952-5.952h-4.672q-0.48 0-0.8-0.352t-0.352-0.8v-6.848q0-0.48 0.352-0.8t0.8-0.352h4.672l5.952-5.952q0.32-0.32 0.8-0.32t0.8 0.32 0.352 0.8z'\n ],\n loop: [\n '0 0 32 32',\n 'M1.882 16.941c0 4.152 3.221 7.529 7.177 7.529v1.882c-4.996 0-9.060-4.222-9.060-9.412s4.064-9.412 9.060-9.412h7.96l-3.098-3.098 1.331-1.331 5.372 5.37-5.37 5.372-1.333-1.333 3.1-3.098h-7.962c-3.957 0-7.177 3.377-7.177 7.529zM22.94 7.529v1.882c3.957 0 7.177 3.377 7.177 7.529s-3.221 7.529-7.177 7.529h-7.962l3.098-3.098-1.331-1.331-5.37 5.37 5.372 5.372 1.331-1.331-3.1-3.1h7.96c4.998 0 9.062-4.222 9.062-9.412s-4.064-9.412-9.060-9.412z'\n ],\n full: [\n '0 0 32 33',\n 'M6.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v4h4c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333zM30.667 28h-5.333c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h4v-4c0-0.8 0.533-1.333 1.333-1.333s1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM30.667 12c-0.8 0-1.333-0.533-1.333-1.333v-4h-4c-0.8 0-1.333-0.533-1.333-1.333s0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333v5.333c0 0.8-0.533 1.333-1.333 1.333zM1.333 12c-0.8 0-1.333-0.533-1.333-1.333v-5.333c0-0.8 0.533-1.333 1.333-1.333h5.333c0.8 0 1.333 0.533 1.333 1.333s-0.533 1.333-1.333 1.333h-4v4c0 0.8-0.533 1.333-1.333 1.333z'\n ],\n 'full-in': [\n '0 0 32 33',\n 'M24.965 24.38h-18.132c-1.366 0-2.478-1.113-2.478-2.478v-11.806c0-1.364 1.111-2.478 2.478-2.478h18.132c1.366 0 2.478 1.113 2.478 2.478v11.806c0 1.364-1.11 2.478-2.478 2.478zM6.833 10.097v11.806h18.134l-0.002-11.806h-18.132zM2.478 28.928h5.952c0.684 0 1.238-0.554 1.238-1.239 0-0.684-0.554-1.238-1.238-1.238h-5.952v-5.802c0-0.684-0.554-1.239-1.238-1.239s-1.239 0.556-1.239 1.239v5.802c0 1.365 1.111 2.478 2.478 2.478zM30.761 19.412c-0.684 0-1.238 0.554-1.238 1.238v5.801h-5.951c-0.686 0-1.239 0.554-1.239 1.238 0 0.686 0.554 1.239 1.239 1.239h5.951c1.366 0 2.478-1.111 2.478-2.478v-5.801c0-0.683-0.554-1.238-1.239-1.238zM0 5.55v5.802c0 0.683 0.554 1.238 1.238 1.238s1.238-0.555 1.238-1.238v-5.802h5.952c0.684 0 1.238-0.554 1.238-1.238s-0.554-1.238-1.238-1.238h-5.951c-1.366-0.001-2.478 1.111-2.478 2.476zM32 11.35v-5.801c0-1.365-1.11-2.478-2.478-2.478h-5.951c-0.686 0-1.239 0.554-1.239 1.238s0.554 1.238 1.239 1.238h5.951v5.801c0 0.683 0.554 1.237 1.238 1.237 0.686 0.002 1.239-0.553 1.239-1.236z'\n ],\n setting: [\n '0 0 32 28',\n 'M28.633 17.104c0.035 0.21 0.026 0.463-0.026 0.76s-0.14 0.598-0.262 0.904c-0.122 0.306-0.271 0.581-0.445 0.825s-0.367 0.419-0.576 0.524c-0.209 0.105-0.393 0.157-0.55 0.157s-0.332-0.035-0.524-0.105c-0.175-0.052-0.393-0.1-0.655-0.144s-0.528-0.052-0.799-0.026c-0.271 0.026-0.541 0.083-0.812 0.17s-0.502 0.236-0.694 0.445c-0.419 0.437-0.664 0.934-0.734 1.493s0.009 1.092 0.236 1.598c0.175 0.349 0.148 0.699-0.079 1.048-0.105 0.14-0.271 0.284-0.498 0.432s-0.476 0.284-0.747 0.406-0.555 0.218-0.851 0.288c-0.297 0.070-0.559 0.105-0.786 0.105-0.157 0-0.306-0.061-0.445-0.183s-0.236-0.253-0.288-0.393h-0.026c-0.192-0.541-0.52-1.009-0.982-1.402s-1-0.589-1.611-0.589c-0.594 0-1.131 0.197-1.611 0.589s-0.816 0.851-1.009 1.375c-0.087 0.21-0.218 0.362-0.393 0.458s-0.367 0.144-0.576 0.144c-0.244 0-0.52-0.044-0.825-0.131s-0.611-0.197-0.917-0.327c-0.306-0.131-0.581-0.284-0.825-0.458s-0.428-0.349-0.55-0.524c-0.087-0.122-0.135-0.266-0.144-0.432s0.057-0.397 0.197-0.694c0.192-0.402 0.266-0.86 0.223-1.375s-0.266-0.991-0.668-1.428c-0.244-0.262-0.541-0.432-0.891-0.511s-0.681-0.109-0.995-0.092c-0.367 0.017-0.742 0.087-1.127 0.21-0.244 0.070-0.489 0.052-0.734-0.052-0.192-0.070-0.371-0.231-0.537-0.485s-0.314-0.533-0.445-0.838c-0.131-0.306-0.231-0.62-0.301-0.943s-0.087-0.59-0.052-0.799c0.052-0.384 0.227-0.629 0.524-0.734 0.524-0.21 0.995-0.555 1.415-1.035s0.629-1.017 0.629-1.611c0-0.611-0.21-1.144-0.629-1.598s-0.891-0.786-1.415-0.996c-0.157-0.052-0.288-0.179-0.393-0.38s-0.157-0.406-0.157-0.616c0-0.227 0.035-0.48 0.105-0.76s0.162-0.55 0.275-0.812 0.244-0.502 0.393-0.72c0.148-0.218 0.31-0.38 0.485-0.485 0.14-0.087 0.275-0.122 0.406-0.105s0.275 0.052 0.432 0.105c0.524 0.21 1.070 0.275 1.637 0.197s1.070-0.327 1.506-0.747c0.21-0.209 0.362-0.467 0.458-0.773s0.157-0.607 0.183-0.904c0.026-0.297 0.026-0.568 0-0.812s-0.048-0.419-0.065-0.524c-0.035-0.105-0.066-0.227-0.092-0.367s-0.013-0.262 0.039-0.367c0.105-0.244 0.293-0.458 0.563-0.642s0.563-0.336 0.878-0.458c0.314-0.122 0.62-0.214 0.917-0.275s0.533-0.092 0.707-0.092c0.227 0 0.406 0.074 0.537 0.223s0.223 0.301 0.275 0.458c0.192 0.471 0.507 0.886 0.943 1.244s0.952 0.537 1.546 0.537c0.611 0 1.153-0.17 1.624-0.511s0.803-0.773 0.996-1.297c0.070-0.14 0.179-0.284 0.327-0.432s0.301-0.223 0.458-0.223c0.244 0 0.511 0.035 0.799 0.105s0.572 0.166 0.851 0.288c0.279 0.122 0.537 0.279 0.773 0.472s0.423 0.402 0.563 0.629c0.087 0.14 0.113 0.293 0.079 0.458s-0.070 0.284-0.105 0.354c-0.227 0.506-0.297 1.039-0.21 1.598s0.341 1.048 0.76 1.467c0.419 0.419 0.934 0.651 1.546 0.694s1.179-0.057 1.703-0.301c0.14-0.087 0.31-0.122 0.511-0.105s0.371 0.096 0.511 0.236c0.262 0.244 0.493 0.616 0.694 1.113s0.336 1 0.406 1.506c0.035 0.297-0.013 0.528-0.144 0.694s-0.266 0.275-0.406 0.327c-0.542 0.192-1.004 0.528-1.388 1.009s-0.576 1.026-0.576 1.637c0 0.594 0.162 1.113 0.485 1.559s0.747 0.764 1.27 0.956c0.122 0.070 0.227 0.14 0.314 0.21 0.192 0.157 0.323 0.358 0.393 0.602v0zM16.451 19.462c0.786 0 1.528-0.149 2.227-0.445s1.305-0.707 1.821-1.231c0.515-0.524 0.921-1.131 1.218-1.821s0.445-1.428 0.445-2.214c0-0.786-0.148-1.524-0.445-2.214s-0.703-1.292-1.218-1.808c-0.515-0.515-1.122-0.921-1.821-1.218s-1.441-0.445-2.227-0.445c-0.786 0-1.524 0.148-2.214 0.445s-1.292 0.703-1.808 1.218c-0.515 0.515-0.921 1.118-1.218 1.808s-0.445 1.428-0.445 2.214c0 0.786 0.149 1.524 0.445 2.214s0.703 1.297 1.218 1.821c0.515 0.524 1.118 0.934 1.808 1.231s1.428 0.445 2.214 0.445v0z'\n ],\n right: [\n '0 0 32 32',\n 'M22 16l-10.105-10.6-1.895 1.987 8.211 8.613-8.211 8.612 1.895 1.988 8.211-8.613z'\n ],\n comment: [\n '0 0 32 32',\n 'M27.128 0.38h-22.553c-2.336 0-4.229 1.825-4.229 4.076v16.273c0 2.251 1.893 4.076 4.229 4.076h4.229v-2.685h8.403l-8.784 8.072 1.566 1.44 7.429-6.827h9.71c2.335 0 4.229-1.825 4.229-4.076v-16.273c0-2.252-1.894-4.076-4.229-4.076zM28.538 19.403c0 1.5-1.262 2.717-2.819 2.717h-8.36l-0.076-0.070-0.076 0.070h-11.223c-1.557 0-2.819-1.217-2.819-2.717v-13.589c0-1.501 1.262-2.718 2.819-2.718h19.734c1.557 0 2.819-0.141 2.819 1.359v14.947zM9.206 10.557c-1.222 0-2.215 0.911-2.215 2.036s0.992 2.035 2.215 2.035c1.224 0 2.216-0.911 2.216-2.035s-0.992-2.036-2.216-2.036zM22.496 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.224 0 2.215-0.911 2.215-2.035s-0.991-2.036-2.215-2.036zM15.852 10.557c-1.224 0-2.215 0.911-2.215 2.036s0.991 2.035 2.215 2.035c1.222 0 2.215-0.911 2.215-2.035s-0.992-2.036-2.215-2.036z'\n ],\n 'comment-off': [\n '0 0 32 32',\n 'M27.090 0.131h-22.731c-2.354 0-4.262 1.839-4.262 4.109v16.401c0 2.269 1.908 4.109 4.262 4.109h4.262v-2.706h8.469l-8.853 8.135 1.579 1.451 7.487-6.88h9.787c2.353 0 4.262-1.84 4.262-4.109v-16.401c0-2.27-1.909-4.109-4.262-4.109v0zM28.511 19.304c0 1.512-1.272 2.738-2.841 2.738h-8.425l-0.076-0.070-0.076 0.070h-11.311c-1.569 0-2.841-1.226-2.841-2.738v-13.696c0-1.513 1.272-2.739 2.841-2.739h19.889c1.569 0 2.841-0.142 2.841 1.37v15.064z'\n ],\n send: [\n '0 0 32 32',\n 'M13.725 30l3.9-5.325-3.9-1.125v6.45zM0 17.5l11.050 3.35 13.6-11.55-10.55 12.425 11.8 3.65 6.1-23.375-32 15.5z'\n ],\n pallette: [\n '0 0 32 32',\n 'M19.357 2.88c1.749 0 3.366 0.316 4.851 0.946 1.485 0.632 2.768 1.474 3.845 2.533s1.922 2.279 2.532 3.661c0.611 1.383 0.915 2.829 0.915 4.334 0 1.425-0.304 2.847-0.915 4.271-0.611 1.425-1.587 2.767-2.928 4.028-0.855 0.813-1.811 1.607-2.869 2.38s-2.136 1.465-3.233 2.075c-1.099 0.61-2.198 1.098-3.296 1.465-1.098 0.366-2.115 0.549-3.051 0.549-1.343 0-2.441-0.438-3.296-1.311-0.854-0.876-1.281-2.41-1.281-4.608 0-0.366 0.020-0.773 0.060-1.221s0.062-0.895 0.062-1.343c0-0.773-0.183-1.353-0.55-1.738-0.366-0.387-0.793-0.58-1.281-0.58-0.652 0-1.21 0.295-1.678 0.886s-0.926 1.23-1.373 1.921c-0.447 0.693-0.905 1.334-1.372 1.923s-1.028 0.886-1.679 0.886c-0.529 0-1.048-0.427-1.556-1.282s-0.763-2.259-0.763-4.212c0-2.197 0.529-4.241 1.587-6.133s2.462-3.529 4.21-4.912c1.75-1.383 3.762-2.471 6.041-3.264 2.277-0.796 4.617-1.212 7.018-1.253zM7.334 15.817c0.569 0 1.047-0.204 1.434-0.611s0.579-0.875 0.579-1.404c0-0.569-0.193-1.047-0.579-1.434s-0.864-0.579-1.434-0.579c-0.529 0-0.987 0.193-1.373 0.579s-0.58 0.864-0.58 1.434c0 0.53 0.194 0.998 0.58 1.404 0.388 0.407 0.845 0.611 1.373 0.611zM12.216 11.79c0.691 0 1.292-0.254 1.8-0.763s0.762-1.107 0.762-1.8c0-0.732-0.255-1.343-0.762-1.831-0.509-0.489-1.109-0.732-1.8-0.732-0.732 0-1.342 0.244-1.831 0.732-0.488 0.488-0.732 1.098-0.732 1.831 0 0.693 0.244 1.292 0.732 1.8s1.099 0.763 1.831 0.763zM16.366 25.947c0.692 0 1.282-0.214 1.77-0.64s0.732-0.987 0.732-1.678-0.244-1.261-0.732-1.709c-0.489-0.448-1.078-0.671-1.77-0.671-0.65 0-1.21 0.223-1.678 0.671s-0.702 1.018-0.702 1.709c0 0.692 0.234 1.25 0.702 1.678s1.027 0.64 1.678 0.64zM19.113 9.592c0.651 0 1.129-0.203 1.433-0.611 0.305-0.406 0.459-0.874 0.459-1.404 0-0.488-0.154-0.947-0.459-1.373-0.304-0.427-0.782-0.641-1.433-0.641-0.529 0-1.008 0.193-1.434 0.58s-0.64 0.865-0.64 1.434c0 0.571 0.213 1.049 0.64 1.434 0.427 0.389 0.905 0.581 1.434 0.581zM24.848 12.826c0.57 0 1.067-0.213 1.495-0.64 0.427-0.427 0.64-0.947 0.64-1.556 0-0.57-0.214-1.068-0.64-1.495-0.428-0.427-0.927-0.64-1.495-0.64-0.611 0-1.129 0.213-1.555 0.64-0.428 0.427-0.642 0.926-0.642 1.495 0 0.611 0.213 1.129 0.642 1.556s0.947 0.64 1.555 0.64z'\n ],\n camera: [\n '0 0 32 32',\n 'M16 23c-3.309 0-6-2.691-6-6s2.691-6 6-6 6 2.691 6 6-2.691 6-6 6zM16 13c-2.206 0-4 1.794-4 4s1.794 4 4 4c2.206 0 4-1.794 4-4s-1.794-4-4-4zM27 28h-22c-1.654 0-3-1.346-3-3v-16c0-1.654 1.346-3 3-3h3c0.552 0 1 0.448 1 1s-0.448 1-1 1h-3c-0.551 0-1 0.449-1 1v16c0 0.552 0.449 1 1 1h22c0.552 0 1-0.448 1-1v-16c0-0.551-0.448-1-1-1h-11c-0.552 0-1-0.448-1-1s0.448-1 1-1h11c1.654 0 3 1.346 3 3v16c0 1.654-1.346 3-3 3zM24 10.5c0 0.828 0.672 1.5 1.5 1.5s1.5-0.672 1.5-1.5c0-0.828-0.672-1.5-1.5-1.5s-1.5 0.672-1.5 1.5zM15 4c0 0.552-0.448 1-1 1h-4c-0.552 0-1-0.448-1-1v0c0-0.552 0.448-1 1-1h4c0.552 0 1 0.448 1 1v0z'\n ],\n subtitle: [\n '0 0 32 32',\n 'M26.667 5.333h-21.333c-0 0-0.001 0-0.001 0-1.472 0-2.666 1.194-2.666 2.666 0 0 0 0.001 0 0.001v-0 16c0 0 0 0.001 0 0.001 0 1.472 1.194 2.666 2.666 2.666 0 0 0.001 0 0.001 0h21.333c0 0 0.001 0 0.001 0 1.472 0 2.666-1.194 2.666-2.666 0-0 0-0.001 0-0.001v0-16c0-0 0-0.001 0-0.001 0-1.472-1.194-2.666-2.666-2.666-0 0-0.001 0-0.001 0h0zM5.333 16h5.333v2.667h-5.333v-2.667zM18.667 24h-13.333v-2.667h13.333v2.667zM26.667 24h-5.333v-2.667h5.333v2.667zM26.667 18.667h-13.333v-2.667h13.333v2.667z'\n ]\n },\n iconsColor: '#ffffff',\n contextmenu: [],\n mutex: true\n };\n for (var defaultKey in defaultOption) {\n if (defaultOption.hasOwnProperty(defaultKey) && !options.hasOwnProperty(defaultKey)) {\n options[defaultKey] = defaultOption[defaultKey];\n }\n }\n if (options.video) {\n !options.video.type && (options.video.type = 'auto');\n }\n if (_typeof(options.danmaku) === 'object' && options.danmaku) {\n !options.danmaku.user && (options.danmaku.user = 'DIYgod');\n }\n if (options.subtitle) {\n !options.subtitle.type && (options.subtitle.type = 'webvtt');\n !options.subtitle.fontSize && (options.subtitle.fontSize = '20px');\n !options.subtitle.bottom && (options.subtitle.bottom = '40px');\n !options.subtitle.color && (options.subtitle.color = '#fff');\n }\n if (options.video.quality) {\n options.video.url = [options.video.quality[options.video.defaultQuality].url];\n }\n if (options.lang) {\n options.lang = options.lang.toLowerCase();\n }\n if (options.icons) {\n options.icons = Object.assign({}, defaultOption.icons, options.icons);\n }\n options.contextmenu = options.contextmenu.concat([\n {\n text: 'About author',\n link: 'https://diygod.me'\n },\n {\n text: 'About DPlayer',\n link: 'https://github.com/MoePlayer/DPlayer'\n },\n {\n text: 'DPlayer feedback',\n link: 'https://github.com/DIYgod/DPlayer/issues'\n },\n {\n text: 'DPlayer ' + DPLAYER_VERSION + ' ' + GIT_HASH,\n link: 'https://github.com/MoePlayer/DPlayer/releases'\n }\n ]);\n return options;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/options.js\n// module id = 4\n// module chunks = 0","'use strict';\nvar SendXMLHttpRequest = function SendXMLHttpRequest(url, data, success, error, fail) {\n var xhr = new XMLHttpRequest();\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {\n var response = JSON.parse(xhr.responseText);\n if (response.code !== 1) {\n return error(xhr, response);\n }\n return success(xhr, response);\n }\n fail(xhr);\n }\n };\n xhr.open(data !== null ? 'POST' : 'GET', url, true);\n xhr.send(data !== null ? JSON.stringify(data) : null);\n};\nmodule.exports = {\n send: function send(endpoint, danmakuData, callback) {\n SendXMLHttpRequest(endpoint, danmakuData, function (xhr, response) {\n console.log('Post danmaku: ', response);\n if (callback) {\n callback();\n }\n }, function (xhr, response) {\n alert(response.msg);\n }, function (xhr) {\n console.log('Request was unsuccessful: ' + xhr.status);\n });\n },\n read: function read(endpoint, callback) {\n SendXMLHttpRequest(endpoint, null, function (xhr, response) {\n callback(null, response.danmaku);\n }, function (xhr, response) {\n callback({\n status: xhr.status,\n response: response\n });\n }, function (xhr) {\n callback({\n status: xhr.status,\n response: null\n });\n });\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 5\n// module chunks = 0","'use strict';\nmodule.exports = function (lang) {\n var _this = this;\n this.lang = lang;\n this.tran = function (text) {\n if (tranTxt[_this.lang] && tranTxt[_this.lang][text]) {\n return tranTxt[_this.lang][text];\n } else {\n return text;\n }\n };\n};\nvar tranTxt = {\n 'zh-cn': {\n 'Danmaku is loading': '弹幕加载中',\n 'Top': '顶部',\n 'Bottom': '底部',\n 'Rolling': '滚动',\n 'Input danmaku, hit Enter': '输入弹幕\\uFF0C回车发送',\n 'About author': '关于作者',\n 'DPlayer feedback': '播放器意见反馈',\n 'About DPlayer': '关于 DPlayer 播放器',\n 'Loop': '洗脑循环',\n 'Speed': '速度',\n 'Opacity for danmaku': '弹幕透明度',\n 'Normal': '正常',\n 'Please input danmaku content!': '要输入弹幕内容啊喂\\uFF01',\n 'Set danmaku color': '设置弹幕颜色',\n 'Set danmaku type': '设置弹幕类型',\n 'Show danmaku': '显示弹幕',\n 'This video fails to load': '视频加载失败',\n 'Switching to': '正在切换至',\n 'Switched to': '已经切换至',\n 'quality': '画质',\n 'FF': '快进',\n 'REW': '快退',\n 'Unlimited danmaku': '海量弹幕',\n 'Send danmaku': '发送弹幕',\n 'Setting': '设置',\n 'Full screen': '全屏',\n 'Web full screen': '页面全屏',\n 'Send': '发送',\n 'Screenshot': '截图',\n 's': '秒',\n 'Show subtitle': '显示字幕',\n 'Hide subtitle': '隐藏字幕',\n 'Volume': '音量',\n 'Live': '直播'\n },\n 'zh-tw': {\n 'Danmaku is loading': '彈幕加載中',\n 'Top': '頂部',\n 'Bottom': '底部',\n 'Rolling': '滾動',\n 'Input danmaku, hit Enter': '輸入彈幕\\uFF0CEnter 發送',\n 'About author': '關於作者',\n 'DPlayer feedback': '播放器意見反饋',\n 'About DPlayer': '關於 DPlayer 播放器',\n 'Loop': '循環播放',\n 'Speed': '速度',\n 'Opacity for danmaku': '彈幕透明度',\n 'Normal': '正常',\n 'Please input danmaku content!': '請輸入彈幕内容啊\\uFF01',\n 'Set danmaku color': '設置彈幕顏色',\n 'Set danmaku type': '設置彈幕類型',\n 'Show danmaku': '顯示彈幕',\n 'This video fails to load': '視頻加載失敗',\n 'Switching to': '正在切換至',\n 'Switched to': '已經切換至',\n 'quality': '畫質',\n 'FF': '快進',\n 'REW': '快退',\n 'Unlimited danmaku': '海量彈幕',\n 'Send danmaku': '發送彈幕',\n 'Setting': '設置',\n 'Full screen': '全屏',\n 'Web full screen': '頁面全屏',\n 'Send': '發送',\n 'Screenshot': '截圖',\n 's': '秒',\n 'Show subtitle': '顯示字幕',\n 'Hide subtitle': '隱藏字幕',\n 'Volume': '音量',\n 'Live': '直播'\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/i18n.js\n// module id = 6\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Template = function () {\n function Template(options) {\n _classCallCheck(this, Template);\n this.container = options.container;\n this.options = options.options;\n this.index = options.index;\n this.tran = options.tran;\n this.icons = options.icons;\n this.init();\n }\n _createClass(Template, [\n {\n key: 'init',\n value: function init() {\n this.container.innerHTML = this.tpl(this.options, this.index, this.tran, this.icons);\n this.volumeBar = this.container.querySelector('.dplayer-volume-bar-inner');\n this.volumeBarWrap = this.container.querySelector('.dplayer-volume-bar');\n this.volumeBarWrapWrap = this.container.querySelector('.dplayer-volume-bar-wrap');\n this.volumeButton = this.container.querySelector('.dplayer-volume');\n this.volumeIcon = this.container.querySelector('.dplayer-volume-icon .dplayer-icon-content');\n this.playedBar = this.container.querySelector('.dplayer-played');\n this.loadedBar = this.container.querySelector('.dplayer-loaded');\n this.playedBarWrap = this.container.querySelector('.dplayer-bar-wrap');\n this.playedBarTime = this.container.querySelector('.dplayer-bar-time');\n this.danmaku = this.container.querySelector('.dplayer-danmaku');\n this.danmakuLoading = this.container.querySelector('.dplayer-danloading');\n this.video = this.container.querySelector('.dplayer-video-current');\n this.bezel = this.container.querySelector('.dplayer-bezel-icon');\n this.playButton = this.container.querySelector('.dplayer-play-icon');\n this.videoWrap = this.container.querySelector('.dplayer-video-wrap');\n this.controllerMask = this.container.querySelector('.dplayer-controller-mask');\n this.ptime = this.container.querySelector('.dplayer-ptime');\n this.settingButton = this.container.querySelector('.dplayer-setting-icon');\n this.settingBox = this.container.querySelector('.dplayer-setting-box');\n this.mask = this.container.querySelector('.dplayer-mask');\n this.loop = this.container.querySelector('.dplayer-setting-loop');\n this.loopToggle = this.container.querySelector('.dplayer-setting-loop .dplayer-toggle-setting-input');\n this.showDanmaku = this.container.querySelector('.dplayer-setting-showdan');\n this.showDanmakuToggle = this.container.querySelector('.dplayer-showdan-setting-input');\n this.unlimitDanmaku = this.container.querySelector('.dplayer-setting-danunlimit');\n this.unlimitDanmakuToggle = this.container.querySelector('.dplayer-danunlimit-setting-input');\n this.speed = this.container.querySelector('.dplayer-setting-speed');\n this.speedItem = this.container.querySelectorAll('.dplayer-setting-speed-item');\n this.danmakuOpacityBar = this.container.querySelector('.dplayer-danmaku-bar-inner');\n this.danmakuOpacityBarWrap = this.container.querySelector('.dplayer-danmaku-bar');\n this.danmakuOpacityBarWrapWrap = this.container.querySelector('.dplayer-danmaku-bar-wrap');\n this.danmakuOpacityBox = this.container.querySelector('.dplayer-setting-danmaku');\n this.dtime = this.container.querySelector('.dplayer-dtime');\n this.controller = this.container.querySelector('.dplayer-controller');\n this.commentInput = this.container.querySelector('.dplayer-comment-input');\n this.commentButton = this.container.querySelector('.dplayer-comment-icon');\n this.commentSettingBox = this.container.querySelector('.dplayer-comment-setting-box');\n this.commentSettingButton = this.container.querySelector('.dplayer-comment-setting-icon');\n this.commentSettingFill = this.container.querySelector('.dplayer-comment-setting-icon .dplayer-fill');\n this.commentSendButton = this.container.querySelector('.dplayer-send-icon');\n this.commentSendFill = this.container.querySelector('.dplayer-send-icon .dplayer-fill');\n this.commentColorSettingBox = this.container.querySelector('.dplayer-comment-setting-color');\n this.browserFullButton = this.container.querySelector('.dplayer-full-icon');\n this.webFullButton = this.container.querySelector('.dplayer-full-in-icon');\n this.menu = this.container.querySelector('.dplayer-menu');\n this.qualityList = this.container.querySelector('.dplayer-quality-list');\n this.camareButton = this.container.querySelector('.dplayer-camera-icon');\n this.subtitleButton = this.container.querySelector('.dplayer-subtitle-icon');\n this.subtitleButtonInner = this.container.querySelector('.dplayer-subtitle-icon .dplayer-icon-content');\n this.subtitle = this.container.querySelector('.dplayer-subtitle');\n this.qualityButton = this.container.querySelector('.dplayer-quality-icon');\n this.barPreview = this.container.querySelector('.dplayer-bar-preview');\n this.barWrap = this.container.querySelector('.dplayer-bar-wrap');\n this.notice = this.container.querySelector('.dplayer-notice');\n }\n },\n {\n key: 'tpl',\n value: function tpl(options, index, tran, icons) {\n return '
' + this.tplVideo(true, options.video.pic, options.screenshot, options.preload, options.video.url, options.subtitle) + '' + (options.logo ? '
' : '') + '
' + (options.danmaku ? '' + tran('Danmaku is loading') + '' : '') + '
' + tran('Set danmaku color') + '
' + tran('Set danmaku type') + '
0:00 / 0:00' + (options.live ? '' + tran('Live') + '' : '') + '
' + (options.video.quality ? '
' + this.tplQualityList(options.video.quality) + '
' : '') + '' + (options.screenshot ? '' + icons.get('camera') + '' : '') + '
' + (options.subtitle ? '
' : '') + '
' + tran('Speed') + '
' + icons.get('right') + '
' + tran('Loop') + '
' + tran('Show danmaku') + '
' + tran('Unlimited danmaku') + '
' + tran('Opacity for danmaku') + '
0.5
0.75
' + tran('Normal') + '
1.25
1.5
2
00:00
' + this.tplContextmenuList(options.contextmenu, tran) + '
';\n }\n },\n {\n key: 'tplDanmakumargin',\n value: function tplDanmakumargin(margin) {\n var result = '';\n if (margin) {\n for (var key in margin) {\n result += key + ':' + margin[key] + ';';\n }\n }\n return result;\n }\n },\n {\n key: 'tplContextmenuList',\n value: function tplContextmenuList(contextmenu, tran) {\n var result = '
';\n for (var i = 0; i < contextmenu.length; i++) {\n result += '';\n }\n result += '
';\n return result;\n }\n },\n {\n key: 'tplQualityList',\n value: function tplQualityList(quality) {\n var result = '
';\n for (var i = 0; i < quality.length; i++) {\n result += '
' + quality[i].name + '
';\n }\n result += '
';\n return result;\n }\n },\n {\n key: 'tplVideo',\n value: function tplVideo(current, pic, screenshot, preload, url, subtitle) {\n var enableSubtitle = subtitle && subtitle.type === 'webvtt';\n return '';\n }\n }\n ]);\n return Template;\n}();\nmodule.exports = Template;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/template.js\n// module id = 7\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar SvgSource = function () {\n function SvgSource(options) {\n _classCallCheck(this, SvgSource);\n this.icons = options.icons;\n this.iconColor = options.iconsColor;\n }\n _createClass(SvgSource, [{\n key: 'get',\n value: function get(type) {\n return '';\n }\n }]);\n return SvgSource;\n}();\nmodule.exports = SvgSource;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/svg.js\n// module id = 8\n// module chunks = 0","'use strict';\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Danmaku = function () {\n function Danmaku(options) {\n _classCallCheck(this, Danmaku);\n this.options = options;\n this.container = this.options.container;\n this.danTunnel = {\n right: {},\n top: {},\n bottom: {}\n };\n this.danIndex = 0;\n this.dan = [];\n this.showing = true;\n this._opacity = this.options.opacity;\n this.events = this.options.events;\n this.unlimited = this.options.unlimited;\n this._measure('');\n this.load();\n }\n _createClass(Danmaku, [\n {\n key: 'load',\n value: function load() {\n var _this = this;\n var apiurl = void 0;\n if (this.options.api.maximum) {\n apiurl = this.options.api.address + '?id=' + this.options.api.id + '&max=' + this.options.api.maximum;\n } else {\n apiurl = this.options.api.address + '?id=' + this.options.api.id;\n }\n var endpoints = (this.options.api.addition || []).slice(0);\n endpoints.push(apiurl);\n this.events && this.events.trigger('danmaku_load_start', endpoints);\n this._readAllEndpoints(endpoints, function (results) {\n _this.dan = [].concat.apply([], results).sort(function (a, b) {\n return a.time - b.time;\n });\n window.requestAnimationFrame(function () {\n _this.frame();\n });\n _this.options.callback();\n _this.events && _this.events.trigger('danmaku_load_end');\n });\n }\n },\n {\n key: 'reload',\n value: function reload(newAPI) {\n this.options.api = newAPI;\n this.dan = [];\n this.clear();\n this.load();\n }\n },\n {\n key: '_readAllEndpoints',\n value: function _readAllEndpoints(endpoints, callback) {\n var _this2 = this;\n var results = [];\n var readCount = 0;\n var cbk = function cbk(i) {\n return function (err, data) {\n ++readCount;\n if (err) {\n if (err.response) {\n _this2.options.error(err.response.msg);\n } else {\n _this2.options.error('Request was unsuccessful: ' + err.status);\n }\n results[i] = [];\n } else {\n results[i] = data;\n }\n if (readCount === endpoints.length) {\n return callback(results);\n }\n };\n };\n for (var i = 0; i < endpoints.length; ++i) {\n this.options.apiBackend.read(endpoints[i], cbk(i));\n }\n }\n },\n {\n key: 'send',\n value: function send(dan, callback) {\n var danmakuData = {\n token: this.options.api.token,\n player: this.options.api.id,\n author: this.options.api.user,\n time: this.options.time(),\n text: dan.text,\n color: dan.color,\n type: dan.type\n };\n this.options.apiBackend.send(this.options.api.address, danmakuData, callback);\n this.dan.splice(this.danIndex, 0, danmakuData);\n this.danIndex++;\n var danmaku = {\n text: this.htmlEncode(danmakuData.text),\n color: danmakuData.color,\n type: danmakuData.type,\n border: '2px solid ' + this.options.borderColor\n };\n this.draw(danmaku);\n this.events && this.events.trigger('danmaku_send', danmakuData);\n }\n },\n {\n key: 'frame',\n value: function frame() {\n var _this3 = this;\n if (this.dan.length && !this.paused && this.showing) {\n var item = this.dan[this.danIndex];\n var dan = [];\n while (item && this.options.time() > parseFloat(item.time)) {\n dan.push(item);\n item = this.dan[++this.danIndex];\n }\n this.draw(dan);\n }\n window.requestAnimationFrame(function () {\n _this3.frame();\n });\n }\n },\n {\n key: 'opacity',\n value: function opacity(percentage) {\n if (percentage !== undefined) {\n var items = this.container.getElementsByClassName('dplayer-danmaku-item');\n for (var i = 0; i < items.length; i++) {\n items[i].style.opacity = percentage;\n }\n this._opacity = percentage;\n this.events && this.events.trigger('danmaku_opacity', this._opacity);\n }\n return this._opacity;\n }\n },\n {\n key: 'draw',\n value: function draw(dan) {\n var _this4 = this;\n if (this.showing) {\n var itemHeight = this.options.height;\n var danWidth = this.container.offsetWidth;\n var danHeight = this.container.offsetHeight;\n var itemY = parseInt(danHeight / itemHeight);\n var danItemRight = function danItemRight(ele) {\n var eleWidth = ele.offsetWidth || parseInt(ele.style.width);\n var eleRight = ele.getBoundingClientRect().right || _this4.container.getBoundingClientRect().right + eleWidth;\n return _this4.container.getBoundingClientRect().right - eleRight;\n };\n var danSpeed = function danSpeed(width) {\n return (danWidth + width) / 5;\n };\n var getTunnel = function getTunnel(ele, type, width) {\n var tmp = danWidth / danSpeed(width);\n var _loop = function _loop(i) {\n var item = _this4.danTunnel[type][i + ''];\n if (item && item.length) {\n if (type !== 'right') {\n return 'continue';\n }\n for (var j = 0; j < item.length; j++) {\n var danRight = danItemRight(item[j]) - 10;\n if (danRight <= danWidth - tmp * danSpeed(parseInt(item[j].style.width)) || danRight <= 0) {\n break;\n }\n if (j === item.length - 1) {\n _this4.danTunnel[type][i + ''].push(ele);\n ele.addEventListener('animationend', function () {\n _this4.danTunnel[type][i + ''].splice(0, 1);\n });\n return { v: i % itemY };\n }\n }\n } else {\n _this4.danTunnel[type][i + ''] = [ele];\n ele.addEventListener('animationend', function () {\n _this4.danTunnel[type][i + ''].splice(0, 1);\n });\n return { v: i % itemY };\n }\n };\n for (var i = 0; _this4.unlimited || i < itemY; i++) {\n var _ret = _loop(i);\n switch (_ret) {\n case 'continue':\n continue;\n default:\n if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === 'object')\n return _ret.v;\n }\n }\n return -1;\n };\n if (Object.prototype.toString.call(dan) !== '[object Array]') {\n dan = [dan];\n }\n var docFragment = document.createDocumentFragment();\n var _loop2 = function _loop2(i) {\n if (!dan[i].type) {\n dan[i].type = 'right';\n }\n if (!dan[i].color) {\n dan[i].color = '#fff';\n }\n var item = document.createElement('div');\n item.classList.add('dplayer-danmaku-item');\n item.classList.add('dplayer-danmaku-' + dan[i].type);\n if (dan[i].border) {\n item.innerHTML = '' + dan[i].text + '';\n } else {\n item.innerHTML = dan[i].text;\n }\n item.style.opacity = _this4._opacity;\n item.style.color = dan[i].color;\n item.addEventListener('animationend', function () {\n _this4.container.removeChild(item);\n });\n var itemWidth = _this4._measure(dan[i].text);\n var tunnel = void 0;\n switch (dan[i].type) {\n case 'right':\n tunnel = getTunnel(item, dan[i].type, itemWidth);\n if (tunnel >= 0) {\n item.style.width = itemWidth + 1 + 'px';\n item.style.top = itemHeight * tunnel + 'px';\n item.style.transform = 'translateX(-' + danWidth + 'px)';\n }\n break;\n case 'top':\n tunnel = getTunnel(item, dan[i].type);\n if (tunnel >= 0) {\n item.style.top = itemHeight * tunnel + 'px';\n }\n break;\n case 'bottom':\n tunnel = getTunnel(item, dan[i].type);\n if (tunnel >= 0) {\n item.style.bottom = itemHeight * tunnel + 'px';\n }\n break;\n default:\n console.error('Can\\'t handled danmaku type: ' + dan[i].type);\n }\n if (tunnel >= 0) {\n item.classList.add('dplayer-danmaku-move');\n docFragment.appendChild(item);\n }\n };\n for (var i = 0; i < dan.length; i++) {\n _loop2(i);\n }\n this.container.appendChild(docFragment);\n return docFragment;\n }\n }\n },\n {\n key: 'play',\n value: function play() {\n this.paused = false;\n }\n },\n {\n key: 'pause',\n value: function pause() {\n this.paused = true;\n }\n },\n {\n key: '_measure',\n value: function _measure(text) {\n if (!this.context) {\n var measureStyle = getComputedStyle(this.container.getElementsByClassName('dplayer-danmaku-item')[0], null);\n this.context = document.createElement('canvas').getContext('2d');\n this.context.font = measureStyle.getPropertyValue('font');\n }\n return this.context.measureText(text).width;\n }\n },\n {\n key: 'seek',\n value: function seek() {\n this.clear();\n for (var i = 0; i < this.dan.length; i++) {\n if (this.dan[i].time >= this.options.time()) {\n this.danIndex = i;\n break;\n }\n this.danIndex = this.dan.length;\n }\n }\n },\n {\n key: 'clear',\n value: function clear() {\n this.danTunnel = {\n right: {},\n top: {},\n bottom: {}\n };\n this.danIndex = 0;\n this.options.container.innerHTML = '';\n this.events && this.events.trigger('danmaku_clear');\n }\n },\n {\n key: 'htmlEncode',\n value: function htmlEncode(str) {\n return str.replace(/&/g, '&').replace(//g, '>').replace(/\"/g, '"').replace(/'/g, ''').replace(/\\//g, '/');\n }\n },\n {\n key: 'resize',\n value: function resize() {\n var danWidth = this.container.offsetWidth;\n var items = this.container.getElementsByClassName('dplayer-danmaku-item');\n for (var i = 0; i < items.length; i++) {\n items[i].style.transform = 'translateX(-' + danWidth + 'px)';\n }\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.showing = false;\n this.pause();\n this.clear();\n this.events && this.events.trigger('danmaku_hide');\n }\n },\n {\n key: 'show',\n value: function show() {\n this.seek();\n this.showing = true;\n this.play();\n this.events && this.events.trigger('danmaku_show');\n }\n },\n {\n key: 'unlimit',\n value: function unlimit(boolean) {\n this.unlimited = boolean;\n }\n }\n ]);\n return Danmaku;\n}();\nmodule.exports = Danmaku;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/danmaku.js\n// module id = 9\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Thumbnails = function () {\n function Thumbnails(container, width, url, events) {\n _classCallCheck(this, Thumbnails);\n this.container = container;\n this.width = width;\n this.container.style.backgroundImage = 'url(\\'' + url + '\\')';\n this.events = events;\n }\n _createClass(Thumbnails, [\n {\n key: 'resize',\n value: function resize(width, height) {\n this.container.style.width = width + 'px';\n this.container.style.height = height + 'px';\n this.container.style.top = -height + 2 + 'px';\n }\n },\n {\n key: 'show',\n value: function show() {\n this.container.style.display = 'block';\n this.events && this.events.trigger('thumbnails_show');\n }\n },\n {\n key: 'move',\n value: function move(position) {\n this.container.style.backgroundPosition = '-' + (Math.ceil(position / this.width * 100) - 1) * 160 + 'px 0';\n this.container.style.left = position - this.container.offsetWidth / 2 + 'px';\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.container.style.display = 'none';\n this.events && this.events.trigger('thumbnails_hide');\n }\n }\n ]);\n return Thumbnails;\n}();\nmodule.exports = Thumbnails;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/thumbnails.js\n// module id = 10\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Events = function () {\n function Events() {\n _classCallCheck(this, Events);\n this.events = {};\n this.videoEvents = [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\n 'mozaudioavailable',\n 'pause',\n 'play',\n 'playing',\n 'progress',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'stalled',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'waiting'\n ];\n this.playerEvents = [\n 'screenshot',\n 'thumbnails_show',\n 'thumbnails_hide',\n 'danmaku_show',\n 'danmaku_hide',\n 'danmaku_clear',\n 'danmaku_loaded',\n 'danmaku_send',\n 'danmaku_opacity',\n 'contextmenu_show',\n 'contextmenu_hide',\n 'notice_show',\n 'notice_hide',\n 'quality_start',\n 'quality_end',\n 'destroy',\n 'resize',\n 'fullscreen',\n 'fullscreen_cancel',\n 'webfullscreen',\n 'webfullscreen_cancel',\n 'subtitle_show',\n 'subtitle_hide',\n 'subtitle_change'\n ];\n }\n _createClass(Events, [\n {\n key: 'on',\n value: function on(name, callback) {\n if (this.type(name) && typeof callback === 'function') {\n if (!this.events[name]) {\n this.events[name] = [];\n }\n this.events[name].push(callback);\n }\n }\n },\n {\n key: 'trigger',\n value: function trigger(name, info) {\n if (this.events[name] && this.events[name].length) {\n for (var i = 0; i < this.events[name].length; i++) {\n this.events[name][i](info);\n }\n }\n }\n },\n {\n key: 'type',\n value: function type(name) {\n if (this.playerEvents.indexOf(name) !== -1) {\n return 'player';\n } else if (this.videoEvents.indexOf(name) !== -1) {\n return 'video';\n }\n console.error('Unknown event name: ' + name);\n return null;\n }\n }\n ]);\n return Events;\n}();\nmodule.exports = Events;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/events.js\n// module id = 11\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar FullScreen = function () {\n function FullScreen(player) {\n var _this = this;\n _classCallCheck(this, FullScreen);\n this.player = player;\n this.player.events.on('webfullscreen', function () {\n _this.player.resize();\n });\n this.player.events.on('webfullscreen_cancel', function () {\n _this.player.resize();\n _utils2.default.setScrollPosition(_this.lastScrollPosition);\n });\n var fullscreenchange = function fullscreenchange() {\n _this.player.resize();\n if (_this.isFullScreen('browser')) {\n _this.player.events.trigger('fullscreen');\n } else {\n _utils2.default.setScrollPosition(_this.lastScrollPosition);\n _this.player.events.trigger('fullscreen_cancel');\n }\n };\n this.player.container.addEventListener('fullscreenchange', fullscreenchange);\n this.player.container.addEventListener('mozfullscreenchange', fullscreenchange);\n this.player.container.addEventListener('webkitfullscreenchange', fullscreenchange);\n }\n _createClass(FullScreen, [\n {\n key: 'isFullScreen',\n value: function isFullScreen() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n switch (type) {\n case 'browser':\n return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n case 'web':\n return this.player.container.classList.contains('dplayer-fulled');\n }\n }\n },\n {\n key: 'request',\n value: function request() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n var anotherType = type === 'browser' ? 'web' : 'browser';\n var anotherTypeOn = this.isFullScreen(anotherType);\n if (!anotherTypeOn) {\n this.lastScrollPosition = _utils2.default.getScrollPosition();\n }\n switch (type) {\n case 'browser':\n if (this.player.container.requestFullscreen) {\n this.player.container.requestFullscreen();\n } else if (this.player.container.mozRequestFullScreen) {\n this.player.container.mozRequestFullScreen();\n } else if (this.player.container.webkitRequestFullscreen) {\n this.player.container.webkitRequestFullscreen();\n } else if (this.player.video.webkitEnterFullscreen) {\n this.player.video.webkitEnterFullscreen();\n }\n break;\n case 'web':\n this.player.container.classList.add('dplayer-fulled');\n document.body.classList.add('dplayer-web-fullscreen-fix');\n this.player.events.trigger('webfullscreen');\n break;\n }\n if (anotherTypeOn) {\n this.cancel(anotherType);\n }\n }\n },\n {\n key: 'cancel',\n value: function cancel() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n switch (type) {\n case 'browser':\n if (document.cancelFullScreen) {\n document.cancelFullScreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.webkitCancelFullScreen) {\n document.webkitCancelFullScreen();\n }\n break;\n case 'web':\n this.player.container.classList.remove('dplayer-fulled');\n document.body.classList.remove('dplayer-web-fullscreen-fix');\n this.player.events.trigger('webfullscreen_cancel');\n break;\n }\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n if (this.isFullScreen(type)) {\n this.cancel(type);\n } else {\n this.request(type);\n }\n }\n }\n ]);\n return FullScreen;\n}();\nmodule.exports = FullScreen;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/fullscreen.js\n// module id = 12\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar User = function () {\n function User(player) {\n _classCallCheck(this, User);\n this.storageName = {\n opacity: 'dplayer-danmaku-opacity',\n volume: 'dplayer-volume',\n unlimited: 'dplayer-danmaku-unlimited',\n danmaku: 'dplayer-danmaku-show',\n subtitle: 'dplayer-subtitle-show'\n };\n this.default = {\n opacity: 0.7,\n volume: player.options.volume || 0.7,\n unlimited: (player.options.danmaku && player.options.danmaku.unlimited ? 1 : 0) || 0,\n danmaku: 1,\n subtitle: 1\n };\n this.data = {};\n this.init();\n }\n _createClass(User, [\n {\n key: 'init',\n value: function init() {\n for (var item in this.storageName) {\n var name = this.storageName[item];\n this.data[item] = parseFloat(_utils2.default.storage.get(name) || this.default[item]);\n }\n }\n },\n {\n key: 'get',\n value: function get(key) {\n return this.data[key];\n }\n },\n {\n key: 'set',\n value: function set(key, value) {\n this.data[key] = value;\n _utils2.default.storage.set(this.storageName[key], value);\n }\n }\n ]);\n return User;\n}();\nmodule.exports = User;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/user.js\n// module id = 13\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Subtitle = function () {\n function Subtitle(container, video, options, events) {\n _classCallCheck(this, Subtitle);\n this.container = container;\n this.video = video;\n this.options = options;\n this.events = events;\n this.init();\n }\n _createClass(Subtitle, [\n {\n key: 'init',\n value: function init() {\n var _this = this;\n this.container.style.fontSize = this.options.fontSize;\n this.container.style.bottom = this.options.bottom;\n this.container.style.color = this.options.color;\n if (this.video.textTracks && this.video.textTracks[0]) {\n var track = this.video.textTracks[0];\n track.oncuechange = function () {\n var cue = track.activeCues[0];\n if (cue) {\n _this.container.innerHTML = '';\n var p = document.createElement('p');\n p.appendChild(cue.getCueAsHTML());\n _this.container.appendChild(p);\n } else {\n _this.container.innerHTML = '';\n }\n _this.events.trigger('subtitle_change');\n };\n }\n }\n },\n {\n key: 'show',\n value: function show() {\n this.container.classList.remove('dplayer-subtitle-hide');\n this.events.trigger('subtitle_show');\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.container.classList.add('dplayer-subtitle-hide');\n this.events.trigger('subtitle_hide');\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.container.classList.contains('dplayer-subtitle-hide')) {\n this.show();\n } else {\n this.hide();\n }\n }\n }\n ]);\n return Subtitle;\n}();\nmodule.exports = Subtitle;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/subtitle.js\n// module id = 14\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Bar = function () {\n function Bar(template) {\n _classCallCheck(this, Bar);\n this.elements = {};\n this.elements.volume = template.volumeBar;\n this.elements.played = template.playedBar;\n this.elements.loaded = template.loadedBar;\n this.elements.danmaku = template.danmakuOpacityBar;\n }\n _createClass(Bar, [\n {\n key: 'set',\n value: function set(type, percentage, direction) {\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n this.elements[type].style[direction] = percentage * 100 + '%';\n }\n },\n {\n key: 'get',\n value: function get(type) {\n return parseFloat(this.elements[type].style.width) / 100;\n }\n }\n ]);\n return Bar;\n}();\nmodule.exports = Bar;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/bar.js\n// module id = 15\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Time = function () {\n function Time(player) {\n _classCallCheck(this, Time);\n this.player = player;\n window.requestAnimationFrame = function () {\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n window.setTimeout(callback, 1000 / 60);\n };\n }();\n this.types = [\n 'loading',\n 'progress'\n ];\n this.init();\n }\n _createClass(Time, [\n {\n key: 'init',\n value: function init() {\n for (var i = 0; i < this.types.length; i++) {\n var type = this.types[i];\n this['init' + type + 'Checker']();\n }\n }\n },\n {\n key: 'initloadingChecker',\n value: function initloadingChecker() {\n var _this = this;\n var lastPlayPos = 0;\n var currentPlayPos = 0;\n var bufferingDetected = false;\n this.loadingChecker = setInterval(function () {\n if (_this.enableloadingChecker) {\n currentPlayPos = _this.player.video.currentTime;\n if (!bufferingDetected && currentPlayPos === lastPlayPos && !_this.player.video.paused) {\n _this.player.container.classList.add('dplayer-loading');\n bufferingDetected = true;\n }\n if (bufferingDetected && currentPlayPos > lastPlayPos && !_this.player.video.paused) {\n _this.player.container.classList.remove('dplayer-loading');\n bufferingDetected = false;\n }\n lastPlayPos = currentPlayPos;\n }\n }, 100);\n }\n },\n {\n key: 'initprogressChecker',\n value: function initprogressChecker() {\n var _this2 = this;\n this.progressChecker = setInterval(function () {\n if (_this2.enableprogressChecker) {\n _this2.player.bar.set('played', _this2.player.video.currentTime / _this2.player.video.duration, 'width');\n var currentTime = _utils2.default.secondToTime(_this2.player.video.currentTime);\n if (_this2.player.template.ptime.innerHTML !== currentTime) {\n _this2.player.template.ptime.innerHTML = _utils2.default.secondToTime(_this2.player.video.currentTime);\n }\n }\n }, 100);\n }\n },\n {\n key: 'enable',\n value: function enable(type) {\n if (type) {\n this['enable' + type + 'Checker'] = true;\n } else {\n for (var i = 0; i < this.types.length; i++) {\n var _type = this.types[i];\n this['enable' + _type + 'Checker'] = true;\n }\n }\n }\n },\n {\n key: 'disable',\n value: function disable(type) {\n if (type) {\n this['enable' + type + 'Checker'] = false;\n } else {\n for (var i = 0; i < this.types.length; i++) {\n var _type2 = this.types[i];\n this['enable' + _type2 + 'Checker'] = false;\n }\n }\n }\n },\n {\n key: 'distroy',\n value: function distroy(type) {\n if (type) {\n clearInterval(this[type + 'Checker']);\n } else {\n for (var i = 0; i < this.types.length; i++) {\n clearInterval(this[this.types[i] + 'Checker']);\n }\n }\n }\n }\n ]);\n return Time;\n}();\nmodule.exports = Time;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/time.js\n// module id = 16\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Bezel = function () {\n function Bezel(container) {\n var _this = this;\n _classCallCheck(this, Bezel);\n this.container = container;\n this.container.addEventListener('animationend', function () {\n _this.container.classList.remove('dplayer-bezel-transition');\n });\n }\n _createClass(Bezel, [{\n key: 'switch',\n value: function _switch(icon) {\n this.container.innerHTML = icon;\n this.container.classList.add('dplayer-bezel-transition');\n }\n }]);\n return Bezel;\n}();\nmodule.exports = Bezel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/bezel.js\n// module id = 17\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Controller = function () {\n function Controller(player) {\n var _this = this;\n _classCallCheck(this, Controller);\n this.player = player;\n this.autoHideTimer = 0;\n if (!_utils.isMobile) {\n this.player.container.addEventListener('mousemove', function () {\n _this.setAutoHide();\n });\n this.player.container.addEventListener('click', function () {\n _this.setAutoHide();\n });\n }\n }\n _createClass(Controller, [\n {\n key: 'setAutoHide',\n value: function setAutoHide() {\n var _this2 = this;\n this.show();\n clearTimeout(this.autoHideTimer);\n this.autoHideTimer = setTimeout(function () {\n if (_this2.player.video.played.length && !_this2.disableAutoHide) {\n _this2.hide();\n }\n }, 2000);\n }\n },\n {\n key: 'show',\n value: function show() {\n this.player.container.classList.remove('dplayer-hide-controller');\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.player.container.classList.add('dplayer-hide-controller');\n this.player.setting.hide();\n this.player.comment.hide();\n }\n },\n {\n key: 'isShow',\n value: function isShow() {\n return !this.player.container.classList.contains('dplayer-hide-controller');\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.isShow()) {\n this.hide();\n } else {\n this.show();\n }\n }\n },\n {\n key: 'destroy',\n value: function destroy() {\n clearTimeout(this.autoHideTimer);\n }\n }\n ]);\n return Controller;\n}();\nmodule.exports = Controller;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/controller.js\n// module id = 18\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar SettingBox = function () {\n function SettingBox(player) {\n var _this = this;\n _classCallCheck(this, SettingBox);\n this.player = player;\n this.player.template.mask.addEventListener('click', function () {\n _this.hide();\n });\n this.player.template.settingButton.addEventListener('click', function () {\n _this.show();\n });\n this.loop = this.player.options.loop;\n this.player.template.loopToggle.checked = this.loop;\n this.player.template.loop.addEventListener('click', function () {\n _this.player.template.loopToggle.checked = !_this.player.template.loopToggle.checked;\n if (_this.player.template.loopToggle.checked) {\n _this.loop = true;\n } else {\n _this.loop = false;\n }\n _this.hide();\n });\n this.showDanmaku = this.player.user.get('danmaku');\n if (!this.showDanmaku) {\n this.player.danmaku && this.player.danmaku.hide();\n }\n this.player.template.showDanmakuToggle.checked = this.showDanmaku;\n this.player.template.showDanmaku.addEventListener('click', function () {\n _this.player.template.showDanmakuToggle.checked = !_this.player.template.showDanmakuToggle.checked;\n if (_this.player.template.showDanmakuToggle.checked) {\n _this.showDanmaku = true;\n _this.player.danmaku.show();\n } else {\n _this.showDanmaku = false;\n _this.player.danmaku.hide();\n }\n _this.player.user.set('danmaku', _this.showDanmaku ? 1 : 0);\n _this.hide();\n });\n this.unlimitDanmaku = this.player.user.get('unlimited');\n this.player.template.unlimitDanmakuToggle.checked = this.unlimitDanmaku;\n this.player.template.unlimitDanmaku.addEventListener('click', function () {\n _this.player.template.unlimitDanmakuToggle.checked = !_this.player.template.unlimitDanmakuToggle.checked;\n if (_this.player.template.unlimitDanmakuToggle.checked) {\n _this.unlimitDanmaku = true;\n _this.player.danmaku.unlimit(true);\n } else {\n _this.unlimitDanmaku = false;\n _this.player.danmaku.unlimit(false);\n }\n _this.player.user.set('unlimited', _this.unlimitDanmaku ? 1 : 0);\n _this.hide();\n });\n this.player.template.speed.addEventListener('click', function () {\n _this.player.template.settingBox.classList.add('dplayer-setting-box-narrow');\n _this.player.template.settingBox.classList.add('dplayer-setting-box-speed');\n });\n var _loop = function _loop(i) {\n _this.player.template.speedItem[i].addEventListener('click', function () {\n _this.player.video.playbackRate = _this.player.template.speedItem[i].dataset.speed;\n _this.hide();\n });\n };\n for (var i = 0; i < this.player.template.speedItem.length; i++) {\n _loop(i);\n }\n if (this.player.danmaku) {\n var dWidth = 130;\n this.player.on('danmaku_opacity', function (percentage) {\n _this.player.bar.set('danmaku', percentage, 'width');\n _this.player.user.set('opacity', percentage);\n });\n this.player.danmaku.opacity(this.player.user.get('opacity'));\n var danmakuMove = function danmakuMove(event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.player.template.danmakuOpacityBarWrap)) / dWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.player.danmaku.opacity(percentage);\n };\n var danmakuUp = function danmakuUp() {\n document.removeEventListener('mouseup', danmakuUp);\n document.removeEventListener('mousemove', danmakuMove);\n _this.player.template.danmakuOpacityBox.classList.remove('dplayer-setting-danmaku-active');\n };\n this.player.template.danmakuOpacityBarWrapWrap.addEventListener('click', function (event) {\n var e = event || window.event;\n var percentage = (e.clientX - _utils2.default.getElementViewLeft(_this.player.template.danmakuOpacityBarWrap)) / dWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.player.danmaku.opacity(percentage);\n });\n this.player.template.danmakuOpacityBarWrapWrap.addEventListener('mousedown', function () {\n document.addEventListener('mousemove', danmakuMove);\n document.addEventListener('mouseup', danmakuUp);\n _this.player.template.danmakuOpacityBox.classList.add('dplayer-setting-danmaku-active');\n });\n }\n }\n _createClass(SettingBox, [\n {\n key: 'hide',\n value: function hide() {\n var _this2 = this;\n this.player.template.settingBox.classList.remove('dplayer-setting-box-open');\n this.player.template.mask.classList.remove('dplayer-mask-show');\n setTimeout(function () {\n _this2.player.template.settingBox.classList.remove('dplayer-setting-box-narrow');\n _this2.player.template.settingBox.classList.remove('dplayer-setting-box-speed');\n }, 300);\n this.player.controller.disableAutoHide = false;\n }\n },\n {\n key: 'show',\n value: function show() {\n this.player.template.settingBox.classList.add('dplayer-setting-box-open');\n this.player.template.mask.classList.add('dplayer-mask-show');\n this.player.controller.disableAutoHide = true;\n }\n }\n ]);\n return SettingBox;\n}();\nmodule.exports = SettingBox;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/setting.js\n// module id = 19\n// module chunks = 0","'use strict';\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Comment = function () {\n function Comment(player) {\n var _this = this;\n _classCallCheck(this, Comment);\n this.player = player;\n this.player.template.mask.addEventListener('click', function () {\n _this.hide();\n });\n this.player.template.commentButton.addEventListener('click', function () {\n _this.show();\n });\n this.player.template.commentSettingButton.addEventListener('click', function () {\n _this.toggleSetting();\n });\n this.player.template.commentColorSettingBox.addEventListener('click', function () {\n var sele = _this.player.template.commentColorSettingBox.querySelector('input:checked+span');\n if (sele) {\n var color = _this.player.template.commentColorSettingBox.querySelector('input:checked').value;\n _this.player.template.commentSettingFill.style.fill = color;\n _this.player.template.commentInput.style.color = color;\n _this.player.template.commentSendFill.style.fill = color;\n }\n });\n this.player.template.commentInput.addEventListener('click', function () {\n _this.hideSetting();\n });\n this.player.template.commentInput.addEventListener('keydown', function (e) {\n var event = e || window.event;\n if (event.keyCode === 13) {\n _this.send();\n }\n });\n this.player.template.commentSendButton.addEventListener('click', function () {\n _this.send();\n });\n }\n _createClass(Comment, [\n {\n key: 'show',\n value: function show() {\n this.player.controller.disableAutoHide = true;\n this.player.template.controller.classList.add('dplayer-controller-comment');\n this.player.template.mask.classList.add('dplayer-mask-show');\n this.player.container.classList.add('dplayer-show-controller');\n this.player.template.commentInput.focus();\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.player.template.controller.classList.remove('dplayer-controller-comment');\n this.player.template.mask.classList.remove('dplayer-mask-show');\n this.player.container.classList.remove('dplayer-show-controller');\n this.player.controller.disableAutoHide = false;\n this.hideSetting();\n }\n },\n {\n key: 'showSetting',\n value: function showSetting() {\n this.player.template.commentSettingBox.classList.add('dplayer-comment-setting-open');\n }\n },\n {\n key: 'hideSetting',\n value: function hideSetting() {\n this.player.template.commentSettingBox.classList.remove('dplayer-comment-setting-open');\n }\n },\n {\n key: 'toggleSetting',\n value: function toggleSetting() {\n if (this.player.template.commentSettingBox.classList.contains('dplayer-comment-setting-open')) {\n this.hideSetting();\n } else {\n this.showSetting();\n }\n }\n },\n {\n key: 'send',\n value: function send() {\n var _this2 = this;\n this.player.template.commentInput.blur();\n if (!this.player.template.commentInput.value.replace(/^\\s+|\\s+$/g, '')) {\n this.player.notice(this.player.tran('Please input danmaku content!'));\n return;\n }\n this.player.danmaku.send({\n text: this.player.template.commentInput.value,\n color: this.player.container.querySelector('.dplayer-comment-setting-color input:checked').value,\n type: this.player.container.querySelector('.dplayer-comment-setting-type input:checked').value\n }, function () {\n _this2.player.template.commentInput.value = '';\n _this2.hide();\n });\n }\n }\n ]);\n return Comment;\n}();\nmodule.exports = Comment;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/comment.js\n// module id = 20\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/src/DPlayer.js b/src/DPlayer.js index a532873..4e2c9fa 100644 --- a/src/DPlayer.js +++ b/src/DPlayer.js @@ -14,6 +14,9 @@ import Subtitle from './subtitle'; import Bar from './bar'; import Time from './time'; import Bezel from './bezel'; +import Controller from './controller'; +import Setting from './setting'; +import Comment from './comment'; let index = 0; const instances = []; @@ -68,6 +71,8 @@ class DPlayer { this.bezel = new Bezel(this.template.bezel); + this.controller = new Controller(this); + if (this.options.danmaku) { this.danmaku = new Danmaku({ container: this.template.danmaku, @@ -103,8 +108,12 @@ class DPlayer { }, events: this.events }); + + this.comment = new Comment(this); } + this.setting = new Setting(this); + document.addEventListener('click', () => { this.focus = false; }, true); @@ -127,16 +136,12 @@ class DPlayer { }); } else { - const toggleController = () => { - if (this.container.classList.contains('dplayer-hide-controller')) { - this.container.classList.remove('dplayer-hide-controller'); - } - else { - this.container.classList.add('dplayer-hide-controller'); - } - }; - this.template.videoWrap.addEventListener('click', toggleController); - this.template.controllerMask.addEventListener('click', toggleController); + this.template.videoWrap.addEventListener('click', () => { + this.controller.toggle(); + }); + this.template.controllerMask.addEventListener('click', () => { + this.controller.toggle(); + }); } this.time = new Time(this); @@ -228,164 +233,6 @@ class DPlayer { } }); - - /** - * auto hide controller - */ - this.hideTime = 0; - const hideController = () => { - this.container.classList.remove('dplayer-hide-controller'); - clearTimeout(this.hideTime); - this.hideTime = setTimeout(() => { - if (this.video.played.length && !this.disableHideController) { - this.container.classList.add('dplayer-hide-controller'); - closeSetting(); - closeComment(); - } - }, 2000); - }; - if (!isMobile) { - this.container.addEventListener('mousemove', hideController); - this.container.addEventListener('click', hideController); - } - - - /** - * setting - */ - // toggle setting box - const closeSetting = () => { - if (this.template.settingBox.classList.contains('dplayer-setting-box-open')) { - this.template.settingBox.classList.remove('dplayer-setting-box-open'); - this.template.mask.classList.remove('dplayer-mask-show'); - setTimeout(() => { - this.template.settingBox.classList.remove('dplayer-setting-box-narrow'); - this.template.settingBox.classList.remove('dplayer-setting-box-speed'); - }, 300); - } - - this.disableHideController = false; - }; - const openSetting = () => { - this.disableHideController = true; - - this.template.settingBox.classList.add('dplayer-setting-box-open'); - this.template.mask.classList.add('dplayer-mask-show'); - }; - - this.template.mask.addEventListener('click', () => { - closeSetting(); - }); - this.template.settingButton.addEventListener('click', () => { - openSetting(); - }); - - this.loop = this.options.loop; - let showdan = this.user.get('danmaku'); - if (!showdan) { - this.danmaku && this.danmaku.hide(); - } - let unlimitDan = this.user.get('unlimited'); - - // loop control - this.template.loopToggle.checked = this.loop; - - this.template.loop.addEventListener('click', () => { - this.template.loopToggle.checked = !this.template.loopToggle.checked; - if (this.template.loopToggle.checked) { - this.loop = true; - } - else { - this.loop = false; - } - closeSetting(); - }); - - // show danmaku control - this.template.showDanmakuToggle.checked = showdan; - - this.template.showDanmaku.addEventListener('click', () => { - this.template.showDanmakuToggle.checked = !this.template.showDanmakuToggle.checked; - if (this.template.showDanmakuToggle.checked) { - showdan = true; - if (!this.paused) { - this.danmaku.show(); - } - } - else { - showdan = false; - this.danmaku.hide(); - } - this.user.set('danmaku', showdan ? 1 : 0); - closeSetting(); - }); - - // unlimited danmaku control - this.template.unlimitDanmakuToggle.checked = unlimitDan; - - this.template.unlimitDanmaku.addEventListener('click', () => { - this.template.unlimitDanmakuToggle.checked = !this.template.unlimitDanmakuToggle.checked; - if (this.template.unlimitDanmakuToggle.checked) { - unlimitDan = true; - this.danmaku.unlimit(true); - } - else { - unlimitDan = false; - this.danmaku.unlimit(false); - } - this.user.set('unlimited', unlimitDan ? 1 : 0); - closeSetting(); - }); - - // speed control - this.template.speed.addEventListener('click', () => { - this.template.settingBox.classList.add('dplayer-setting-box-narrow'); - this.template.settingBox.classList.add('dplayer-setting-box-speed'); - - for (let i = 0; i < this.template.speedItem.length; i++) { - this.template.speedItem[i].addEventListener('click', () => { - this.video.playbackRate = this.template.speedItem[i].dataset.speed; - closeSetting(); - }); - } - }); - - if (this.danmaku) { - // danmaku opacity - const dWidth = 130; - this.on('danmaku_opacity', (percentage) => { - this.bar.set('danmaku', percentage, 'width'); - this.user.set('opacity', percentage); - }); - this.danmaku.opacity(this.user.get('opacity')); - - const danmakuMove = (event) => { - const e = event || window.event; - let percentage = (e.clientX - utils.getElementViewLeft(this.template.danmakuOpacityBarWrap)) / dWidth; - percentage = Math.max(percentage, 0); - percentage = Math.min(percentage, 1); - this.danmaku.opacity(percentage); - }; - const danmakuUp = () => { - document.removeEventListener('mouseup', danmakuUp); - document.removeEventListener('mousemove', danmakuMove); - this.template.danmakuOpacityBox.classList.remove('dplayer-setting-danmaku-active'); - }; - - this.template.danmakuOpacityBarWrapWrap.addEventListener('click', (event) => { - const e = event || window.event; - let percentage = (e.clientX - utils.getElementViewLeft(this.template.danmakuOpacityBarWrap)) / dWidth; - percentage = Math.max(percentage, 0); - percentage = Math.min(percentage, 1); - this.danmaku.opacity(percentage); - }); - this.template.danmakuOpacityBarWrapWrap.addEventListener('mousedown', () => { - document.addEventListener('mousemove', danmakuMove); - document.addEventListener('mouseup', danmakuUp); - this.template.danmakuOpacityBox.classList.add('dplayer-setting-danmaku-active'); - }); - } - // set duration time if (this.video.duration !== 1) { // compatibility: Android browsers will output 1 at first this.template.dtime.innerHTML = this.video.duration ? utils.secondToTime(this.video.duration) : '00:00'; @@ -401,101 +248,6 @@ class DPlayer { } } - - /** - * comment - */ - - const closeCommentSetting = () => { - if (this.template.commentSettingBox.classList.contains('dplayer-comment-setting-open')) { - this.template.commentSettingBox.classList.remove('dplayer-comment-setting-open'); - } - }; - const toggleCommentSetting = () => { - if (this.template.commentSettingBox.classList.contains('dplayer-comment-setting-open')) { - this.template.commentSettingBox.classList.remove('dplayer-comment-setting-open'); - } - else { - this.template.commentSettingBox.classList.add('dplayer-comment-setting-open'); - } - }; - - const closeComment = () => { - if (!this.template.controller.classList.contains('dplayer-controller-comment')) { - return; - } - - this.template.controller.classList.remove('dplayer-controller-comment'); - this.template.mask.classList.remove('dplayer-mask-show'); - this.container.classList.remove('dplayer-show-controller'); - - closeCommentSetting(); - - this.disableHideController = false; - }; - const openComment = () => { - this.disableHideController = true; - - if (!this.template.controller.classList.contains('dplayer-controller-comment')) { - this.template.controller.classList.add('dplayer-controller-comment'); - this.template.mask.classList.add('dplayer-mask-show'); - this.container.classList.add('dplayer-show-controller'); - this.template.commentInput.focus(); - } - }; - - this.template.mask.addEventListener('click', () => { - closeComment(); - }); - this.template.commentButton.addEventListener('click', () => { - openComment(); - }); - this.template.commentSettingButton.addEventListener('click', () => { - toggleCommentSetting(); - }); - - // comment setting box - this.template.commentColorSettingBox.addEventListener('click', () => { - const sele = this.template.commentColorSettingBox.querySelector(`input:checked+span`); - if (sele) { - const color = this.template.commentColorSettingBox.querySelector(`input:checked`).value; - this.template.commentSettingFill.style.fill = color; - this.template.commentInput.style.color = color; - this.template.commentSendFill.style.fill = color; - } - }); - - const sendComment = () => { - this.template.commentInput.blur(); - - // text can't be empty - if (!this.template.commentInput.value.replace(/^\s+|\s+$/g, '')) { - this.notice(this.tran('Please input danmaku content!')); - return; - } - - this.danmaku.send({ - text: this.template.commentInput.value, - color: this.container.querySelector('.dplayer-comment-setting-color input:checked').value, - type: this.container.querySelector('.dplayer-comment-setting-type input:checked').value - }, () => { - this.template.commentInput.value = ''; - closeComment(); - }); - }; - - this.template.commentInput.addEventListener('click', () => { - closeCommentSetting(); - }); - this.template.commentInput.addEventListener('keydown', (e) => { - const event = e || window.event; - if (event.keyCode === 13) { - sendComment(); - } - }); - - this.template.commentSendButton.addEventListener('click', sendComment); - this.fullScreen = new FullScreen(this); // browser full screen @@ -526,12 +278,12 @@ class DPlayer { case 37: event.preventDefault(); this.seek(this.video.currentTime - 5); - hideController(); + this.controller.setAutoHide(); break; case 39: event.preventDefault(); this.seek(this.video.currentTime + 5); - hideController(); + this.controller.setAutoHide(); break; case 38: event.preventDefault(); @@ -873,7 +625,7 @@ class DPlayer { this.ended = false; this.on('ended', () => { this.bar.set('played', 1, 'width'); - if (!this.loop) { + if (!this.setting.loop) { this.ended = true; this.pause(); } @@ -1050,7 +802,7 @@ class DPlayer { destroy () { instances.splice(instances.indexOf(this), 1); this.pause(); - clearTimeout(this.hideTime); + this.controller.destroy(); this.time.destroy(); this.video.src = ''; this.container.innerHTML = ''; diff --git a/src/comment.js b/src/comment.js new file mode 100644 index 0000000..ce2f5b8 --- /dev/null +++ b/src/comment.js @@ -0,0 +1,93 @@ +class Comment { + constructor (player) { + this.player = player; + + this.player.template.mask.addEventListener('click', () => { + this.hide(); + }); + this.player.template.commentButton.addEventListener('click', () => { + this.show(); + }); + this.player.template.commentSettingButton.addEventListener('click', () => { + this.toggleSetting(); + }); + + this.player.template.commentColorSettingBox.addEventListener('click', () => { + const sele = this.player.template.commentColorSettingBox.querySelector(`input:checked+span`); + if (sele) { + const color = this.player.template.commentColorSettingBox.querySelector(`input:checked`).value; + this.player.template.commentSettingFill.style.fill = color; + this.player.template.commentInput.style.color = color; + this.player.template.commentSendFill.style.fill = color; + } + }); + + this.player.template.commentInput.addEventListener('click', () => { + this.hideSetting(); + }); + this.player.template.commentInput.addEventListener('keydown', (e) => { + const event = e || window.event; + if (event.keyCode === 13) { + this.send(); + } + }); + + this.player.template.commentSendButton.addEventListener('click', () => { + this.send(); + }); + } + + show () { + this.player.controller.disableAutoHide = true; + this.player.template.controller.classList.add('dplayer-controller-comment'); + this.player.template.mask.classList.add('dplayer-mask-show'); + this.player.container.classList.add('dplayer-show-controller'); + this.player.template.commentInput.focus(); + } + + hide () { + this.player.template.controller.classList.remove('dplayer-controller-comment'); + this.player.template.mask.classList.remove('dplayer-mask-show'); + this.player.container.classList.remove('dplayer-show-controller'); + this.player.controller.disableAutoHide = false; + this.hideSetting(); + } + + showSetting () { + this.player.template.commentSettingBox.classList.add('dplayer-comment-setting-open'); + } + + hideSetting () { + this.player.template.commentSettingBox.classList.remove('dplayer-comment-setting-open'); + } + + toggleSetting () { + if (this.player.template.commentSettingBox.classList.contains('dplayer-comment-setting-open')) { + this.hideSetting(); + } + else { + this.showSetting(); + } + } + + send () { + this.player.template.commentInput.blur(); + + // text can't be empty + if (!this.player.template.commentInput.value.replace(/^\s+|\s+$/g, '')) { + this.player.notice(this.player.tran('Please input danmaku content!')); + return; + } + + this.player.danmaku.send({ + text: this.player.template.commentInput.value, + color: this.player.container.querySelector('.dplayer-comment-setting-color input:checked').value, + type: this.player.container.querySelector('.dplayer-comment-setting-type input:checked').value + }, () => { + this.player.template.commentInput.value = ''; + this.hide(); + }); + } +} + +module.exports = Comment; \ No newline at end of file diff --git a/src/controller.js b/src/controller.js new file mode 100644 index 0000000..3aee547 --- /dev/null +++ b/src/controller.js @@ -0,0 +1,56 @@ +import { isMobile } from './utils'; + +class Controller { + constructor (player) { + this.player = player; + + this.autoHideTimer = 0; + if (!isMobile) { + this.player.container.addEventListener('mousemove', () => { + this.setAutoHide(); + }); + this.player.container.addEventListener('click', () => { + this.setAutoHide(); + }); + } + } + + setAutoHide () { + this.show(); + clearTimeout(this.autoHideTimer); + this.autoHideTimer = setTimeout(() => { + if (this.player.video.played.length && !this.disableAutoHide) { + this.hide(); + } + }, 2000); + } + + show () { + this.player.container.classList.remove('dplayer-hide-controller'); + } + + hide () { + this.player.container.classList.add('dplayer-hide-controller'); + this.player.setting.hide(); + this.player.comment.hide(); + } + + isShow () { + return !this.player.container.classList.contains('dplayer-hide-controller'); + } + + toggle () { + if (this.isShow()) { + this.hide(); + } + else { + this.show(); + } + } + + destroy () { + clearTimeout(this.autoHideTimer); + } +} + +module.exports = Controller; \ No newline at end of file diff --git a/src/setting.js b/src/setting.js new file mode 100644 index 0000000..2307347 --- /dev/null +++ b/src/setting.js @@ -0,0 +1,133 @@ +import utils from './utils'; + +class SettingBox { + constructor (player) { + this.player = player; + + this.player.template.mask.addEventListener('click', () => { + this.hide(); + }); + this.player.template.settingButton.addEventListener('click', () => { + this.show(); + }); + + // loop + this.loop = this.player.options.loop; + this.player.template.loopToggle.checked = this.loop; + this.player.template.loop.addEventListener('click', () => { + this.player.template.loopToggle.checked = !this.player.template.loopToggle.checked; + if (this.player.template.loopToggle.checked) { + this.loop = true; + } + else { + this.loop = false; + } + this.hide(); + }); + + // show danmaku + this.showDanmaku = this.player.user.get('danmaku'); + if (!this.showDanmaku) { + this.player.danmaku && this.player.danmaku.hide(); + } + this.player.template.showDanmakuToggle.checked = this.showDanmaku; + this.player.template.showDanmaku.addEventListener('click', () => { + this.player.template.showDanmakuToggle.checked = !this.player.template.showDanmakuToggle.checked; + if (this.player.template.showDanmakuToggle.checked) { + this.showDanmaku = true; + this.player.danmaku.show(); + } + else { + this.showDanmaku = false; + this.player.danmaku.hide(); + } + this.player.user.set('danmaku', this.showDanmaku ? 1 : 0); + this.hide(); + }); + + // unlimit danmaku + this.unlimitDanmaku = this.player.user.get('unlimited'); + this.player.template.unlimitDanmakuToggle.checked = this.unlimitDanmaku; + this.player.template.unlimitDanmaku.addEventListener('click', () => { + this.player.template.unlimitDanmakuToggle.checked = !this.player.template.unlimitDanmakuToggle.checked; + if (this.player.template.unlimitDanmakuToggle.checked) { + this.unlimitDanmaku = true; + this.player.danmaku.unlimit(true); + } + else { + this.unlimitDanmaku = false; + this.player.danmaku.unlimit(false); + } + this.player.user.set('unlimited', this.unlimitDanmaku ? 1 : 0); + this.hide(); + }); + + // speed + this.player.template.speed.addEventListener('click', () => { + this.player.template.settingBox.classList.add('dplayer-setting-box-narrow'); + this.player.template.settingBox.classList.add('dplayer-setting-box-speed'); + }); + for (let i = 0; i < this.player.template.speedItem.length; i++) { + this.player.template.speedItem[i].addEventListener('click', () => { + this.player.video.playbackRate = this.player.template.speedItem[i].dataset.speed; + this.hide(); + }); + } + + // danmaku opacity + if (this.player.danmaku) { + const dWidth = 130; + this.player.on('danmaku_opacity', (percentage) => { + this.player.bar.set('danmaku', percentage, 'width'); + this.player.user.set('opacity', percentage); + }); + this.player.danmaku.opacity(this.player.user.get('opacity')); + + const danmakuMove = (event) => { + const e = event || window.event; + let percentage = (e.clientX - utils.getElementViewLeft(this.player.template.danmakuOpacityBarWrap)) / dWidth; + percentage = Math.max(percentage, 0); + percentage = Math.min(percentage, 1); + this.player.danmaku.opacity(percentage); + }; + const danmakuUp = () => { + document.removeEventListener('mouseup', danmakuUp); + document.removeEventListener('mousemove', danmakuMove); + this.player.template.danmakuOpacityBox.classList.remove('dplayer-setting-danmaku-active'); + }; + + this.player.template.danmakuOpacityBarWrapWrap.addEventListener('click', (event) => { + const e = event || window.event; + let percentage = (e.clientX - utils.getElementViewLeft(this.player.template.danmakuOpacityBarWrap)) / dWidth; + percentage = Math.max(percentage, 0); + percentage = Math.min(percentage, 1); + this.player.danmaku.opacity(percentage); + }); + this.player.template.danmakuOpacityBarWrapWrap.addEventListener('mousedown', () => { + document.addEventListener('mousemove', danmakuMove); + document.addEventListener('mouseup', danmakuUp); + this.player.template.danmakuOpacityBox.classList.add('dplayer-setting-danmaku-active'); + }); + } + } + + hide () { + this.player.template.settingBox.classList.remove('dplayer-setting-box-open'); + this.player.template.mask.classList.remove('dplayer-mask-show'); + setTimeout(() => { + this.player.template.settingBox.classList.remove('dplayer-setting-box-narrow'); + this.player.template.settingBox.classList.remove('dplayer-setting-box-speed'); + }, 300); + + this.player.controller.disableAutoHide = false; + } + + show () { + this.player.template.settingBox.classList.add('dplayer-setting-box-open'); + this.player.template.mask.classList.add('dplayer-mask-show'); + + this.player.controller.disableAutoHide = true; + } +} + +module.exports = SettingBox; \ No newline at end of file diff --git a/src/template.js b/src/template.js index be91857..36b1246 100644 --- a/src/template.js +++ b/src/template.js @@ -38,7 +38,7 @@ class Template { this.unlimitDanmaku = this.container.querySelector('.dplayer-setting-danunlimit'); this.unlimitDanmakuToggle = this.container.querySelector('.dplayer-danunlimit-setting-input'); this.speed = this.container.querySelector('.dplayer-setting-speed'); - this.speedItem = this.container.querySelectorAll('dplayer-setting-speed-item'); + this.speedItem = this.container.querySelectorAll('.dplayer-setting-speed-item'); this.danmakuOpacityBar = this.container.querySelector('.dplayer-danmaku-bar-inner'); this.danmakuOpacityBarWrap = this.container.querySelector('.dplayer-danmaku-bar'); this.danmakuOpacityBarWrapWrap = this.container.querySelector('.dplayer-danmaku-bar-wrap');