From 4ce05442c751955b3e9df27d664e7d2321b52181 Mon Sep 17 00:00:00 2001 From: Harvey Zack Date: Wed, 24 Oct 2018 13:43:11 +0800 Subject: [PATCH] bugfix --- docs/css/artplayer.css | 11 +- docs/img/{yourName.png => your-name.png} | Bin docs/index.html | 47 ++- docs/js/artplayer.js | 507 +++++++++++++---------- docs/js/artplayer.js.map | 2 +- src/contextmenu.js | 29 +- src/controls/danmu.js | 7 +- src/controls/fullscreen.js | 7 +- src/controls/index.js | 90 ++-- src/controls/pip.js | 7 +- src/controls/playAndPause.js | 11 +- src/controls/progress.js | 33 +- src/controls/setting.js | 7 +- src/controls/subtitle.js | 7 +- src/controls/thumbnails.js | 25 +- src/controls/time.js | 15 +- src/controls/volume.js | 18 +- src/index.js | 13 +- src/info.js | 4 +- src/player.js | 11 +- src/style/artplayer.scss | 36 ++ src/style/{index.scss => bottom.scss} | 210 +--------- src/style/contextmenu.scss | 32 ++ src/style/index.js | 10 + src/style/info.scss | 38 ++ src/style/layers.scss | 16 + src/style/loading.scss | 15 + src/style/mask.scss | 21 + src/style/notice.scss | 16 + src/style/subtitle.scss | 17 + src/style/video.scss | 14 + src/subtitle.js | 8 +- src/template.js | 2 +- src/utils/index.js | 6 + src/verification/control.js | 5 - src/verification/player.js | 117 +----- 36 files changed, 731 insertions(+), 683 deletions(-) rename docs/img/{yourName.png => your-name.png} (100%) create mode 100644 src/style/artplayer.scss rename src/style/{index.scss => bottom.scss} (62%) create mode 100644 src/style/contextmenu.scss create mode 100644 src/style/index.js create mode 100644 src/style/info.scss create mode 100644 src/style/layers.scss create mode 100644 src/style/loading.scss create mode 100644 src/style/mask.scss create mode 100644 src/style/notice.scss create mode 100644 src/style/subtitle.scss create mode 100644 src/style/video.scss diff --git a/docs/css/artplayer.css b/docs/css/artplayer.css index f38b36d77..db337a6bd 100644 --- a/docs/css/artplayer.css +++ b/docs/css/artplayer.css @@ -1 +1,10 @@ -.artplayer-video-player{position:relative;width:100%;height:100%;overflow:hidden;outline:0;font-family:Roboto,Arial,Helvetica,sans-serif;color:#eee;text-align:left;direction:ltr;font-size:14px;line-height:1.3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:manipulation;-ms-high-contrast-adjust:none}.artplayer-video-player *{box-sizing:border-box}.artplayer-video-player .art-icon{display:inline-block}.artplayer-video-player .art-icon svg{fill:#fff}.artplayer-video-player .artplayer-video{position:absolute;z-index:10;left:0;top:0;right:0;bottom:0;width:100%;height:100%;background-color:#000;outline:0}.artplayer-video-player .artplayer-subtitle{position:absolute;z-index:20;bottom:40px;width:100%;padding:0 20px;text-align:center;color:#fff;text-shadow:.5px .5px .5px rgba(0,0,0,.5);font-size:20px}.artplayer-video-player .artplayer-subtitle p{margin:5px 0}.artplayer-video-player .artplayer-layers{position:absolute;z-index:30;left:0;top:0;right:0;bottom:0;width:100%;height:100%}.artplayer-video-player .artplayer-layers .art-layer{position:absolute}.artplayer-video-player .artplayer-mask{display:none;position:absolute;z-index:40;left:0;top:0;right:0;bottom:0;width:100%;height:100%;cursor:pointer}.artplayer-video-player .artplayer-mask .art-icon-playBig{position:absolute;right:30px;bottom:65px;opacity:.6}.artplayer-video-player .artplayer-loading{display:none;position:absolute;z-index:40;left:0;top:0;right:0;bottom:0;width:100%;height:100%;align-items:center;justify-content:center}.artplayer-video-player .artplayer-bottom{position:absolute;z-index:50;left:0;right:0;bottom:0;height:100px;padding:60px 10px 0;opacity:0;visibility:hidden;transition:all .2s ease-in-out;pointer-events:none;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==) repeat-x bottom}.artplayer-video-player .artplayer-bottom .artplayer-progress{position:relative;pointer-events:all}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress{position:relative;height:5px;padding:1px 0;cursor:pointer}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner{position:relative;height:100%;background:hsla(0,0%,100%,.2)}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{position:absolute;z-index:10;left:0;top:0;right:0;bottom:0;height:100%;width:0;background:hsla(0,0%,100%,.4)}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner .art-progress-played{position:absolute;z-index:20;left:0;top:0;right:0;bottom:0;height:100%;width:0}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner .art-progress-highlight{position:absolute;z-index:30;left:0;top:0;right:0;bottom:0;height:0}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span{display:inline-block;position:absolute;left:0;top:0;width:7px;height:3px;background:#fff;border-radius:3px}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{display:none;position:absolute;z-index:40;top:-5px;left:-6.5px;width:13px;height:13px;border-radius:50%}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner .art-progress-indicator.show-indicator{display:block}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner .art-progress-tip{display:none;position:absolute;z-index:50;top:-25px;left:0;height:20px;padding:0 5px;line-height:20px;color:#fff;font-size:12px;text-align:center;background:rgba(0,0,0,.7);border-radius:3px;font-weight:700}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress:hover .art-progress-indicator,.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress:hover .art-progress-tip{display:block}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-thumbnails{display:none;position:absolute;bottom:8px;left:0;pointer-events:none;background-color:rgba(0,0,0,.7)}.artplayer-video-player .artplayer-bottom .artplayer-controls{position:relative;pointer-events:all;display:flex;align-items:center;justify-content:space-between;height:36px}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control{float:left;font-size:12px;height:36px;line-height:36px;cursor:pointer}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control .art-icon{display:flex;align-items:center;justify-content:center;float:left;height:36px;width:36px;padding:7px}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-volume .art-volume-panel{position:relative;float:left;width:0;height:100%;transition:margin .2s cubic-bezier(.4,0,1,1),width .2s cubic-bezier(.4,0,1,1);overflow:hidden}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-volume .art-volume-panel .art-volume-slider-handle{position:absolute;top:50%;left:0;width:12px;height:12px;border-radius:12px;margin-top:-6px;background:#fff}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-volume .art-volume-panel .art-volume-slider-handle:before{left:-54px;background:#fff}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-volume .art-volume-panel .art-volume-slider-handle:after{left:6px;background:hsla(0,0%,100%,.2)}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-volume .art-volume-panel .art-volume-slider-handle:after,.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-volume .art-volume-panel .art-volume-slider-handle:before{content:"";position:absolute;display:block;top:50%;height:3px;margin-top:-2px;width:60px}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-volume .art-volume-panel.art-volume-panel-hover{width:60px}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-time{padding:0 10px}.artplayer-video-player.controls-show .artplayer-bottom,.artplayer-video-player:hover .artplayer-bottom{opacity:1;visibility:visible}.artplayer-video-player .artplayer-notice{display:none;font-size:14px;position:absolute;z-index:60;left:10px;top:10px;height:30px;line-height:30px;padding:0 10px;border-radius:3px;color:#fff;background:rgba(0,0,0,.6)}.artplayer-video-player .artplayer-contextmenu{position:absolute;z-index:70;left:0;top:0;width:200px;padding:5px 0;background:rgba(0,0,0,.8)}.artplayer-video-player .artplayer-contextmenu a{font-size:13px;display:block;color:#fff;padding:7px 10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-decoration:none;text-shadow:0 0 2px rgba(0,0,0,.5)}.artplayer-video-player .artplayer-contextmenu a:hover{background-color:hsla(0,0%,100%,.1)}.artplayer-video-player .artplayer-info{display:none;position:absolute;left:10px;top:10px;z-index:80;width:350px;min-height:150px;padding:10px;color:#fff;font-size:12px;font-family:Noto Sans CJK SC DemiLight,Roboto,Segoe UI,Tahoma,Arial,Helvetica,sans-serif;-webkit-font-smoothing:antialiased;background:rgba(0,0,0,.7)}.artplayer-video-player .artplayer-info .art-info-item{display:flex;margin-bottom:5px}.artplayer-video-player .artplayer-info .art-info-item .art-info-title{width:100px;text-align:right}.artplayer-video-player .artplayer-info .art-info-item .art-info-content{flex:1;padding-left:5px}.artplayer-video-player .artplayer-info .artplayer-info-close{position:absolute;top:5px;right:5px;cursor:pointer}.artplayer-video-player.artplayer-error .art-progress-indicator,.artplayer-video-player.artplayer-error .art-progress-tip{display:none!important} \ No newline at end of file +.artplayer-video-player .artplayer-video{position:absolute;z-index:10;left:0;top:0;right:0;bottom:0;width:100%;height:100%;background-color:#000;outline:0} +.artplayer-video-player{position:relative;width:100%;height:100%;overflow:hidden;outline:0;font-family:Roboto,Arial,Helvetica,sans-serif;color:#eee;text-align:left;direction:ltr;font-size:14px;line-height:1.3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:manipulation;-ms-high-contrast-adjust:none}.artplayer-video-player *{box-sizing:border-box}.artplayer-video-player .art-icon{display:inline-block}.artplayer-video-player .art-icon svg{fill:#fff}.artplayer-video-player.artplayer-error .art-progress-indicator,.artplayer-video-player.artplayer-error .art-progress-tip{display:none!important} +.artplayer-video-player .artplayer-subtitle{position:absolute;z-index:20;bottom:40px;width:100%;padding:0 20px;text-align:center;color:#fff;text-shadow:.5px .5px .5px rgba(0,0,0,.5);font-size:20px}.artplayer-video-player .artplayer-subtitle p{margin:5px 0} +.artplayer-video-player .artplayer-layers{position:absolute;z-index:30;left:0;top:0;right:0;bottom:0;width:100%;height:100%}.artplayer-video-player .artplayer-layers .art-layer{position:absolute} +.artplayer-video-player .artplayer-mask{display:none;position:absolute;z-index:40;left:0;top:0;right:0;bottom:0;width:100%;height:100%;cursor:pointer}.artplayer-video-player .artplayer-mask .art-icon-playBig{position:absolute;right:30px;bottom:65px;opacity:.6} +.artplayer-video-player .artplayer-loading{display:none;position:absolute;z-index:40;left:0;top:0;right:0;bottom:0;width:100%;height:100%;align-items:center;justify-content:center} +.artplayer-video-player .artplayer-notice{display:none;font-size:14px;position:absolute;z-index:60;left:10px;top:10px;height:30px;line-height:30px;padding:0 10px;border-radius:3px;color:#fff;background:rgba(0,0,0,.6)} +.artplayer-video-player .artplayer-bottom{position:absolute;z-index:50;left:0;right:0;bottom:0;height:100px;padding:60px 10px 0;opacity:0;visibility:hidden;transition:all .2s ease-in-out;pointer-events:none;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==) repeat-x bottom}.artplayer-video-player .artplayer-bottom .artplayer-progress{position:relative;pointer-events:all}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress{position:relative;height:5px;padding:1px 0;cursor:pointer}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner{position:relative;height:100%;background:hsla(0,0%,100%,.2)}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{position:absolute;z-index:10;left:0;top:0;right:0;bottom:0;height:100%;width:0;background:hsla(0,0%,100%,.4)}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner .art-progress-played{position:absolute;z-index:20;left:0;top:0;right:0;bottom:0;height:100%;width:0}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner .art-progress-highlight{position:absolute;z-index:30;left:0;top:0;right:0;bottom:0;height:0}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span{display:inline-block;position:absolute;left:0;top:0;width:7px;height:3px;background:#fff;border-radius:3px}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner .art-progress-indicator{display:none;position:absolute;z-index:40;top:-5px;left:-6.5px;width:13px;height:13px;border-radius:50%}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner .art-progress-indicator.show-indicator{display:block}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress .art-control-progress-inner .art-progress-tip{display:none;position:absolute;z-index:50;top:-25px;left:0;height:20px;padding:0 5px;line-height:20px;color:#fff;font-size:12px;text-align:center;background:rgba(0,0,0,.7);border-radius:3px;font-weight:700}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress:hover .art-progress-indicator,.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-progress:hover .art-progress-tip{display:block}.artplayer-video-player .artplayer-bottom .artplayer-progress .art-control-thumbnails{display:none;position:absolute;bottom:8px;left:0;pointer-events:none;background-color:rgba(0,0,0,.7)}.artplayer-video-player .artplayer-bottom .artplayer-controls{position:relative;pointer-events:all;display:flex;align-items:center;justify-content:space-between;height:36px}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control{float:left;font-size:12px;height:36px;line-height:36px;cursor:pointer}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control .art-icon{display:flex;align-items:center;justify-content:center;float:left;height:36px;width:36px;padding:7px}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-volume .art-volume-panel{position:relative;float:left;width:0;height:100%;transition:margin .2s cubic-bezier(.4,0,1,1),width .2s cubic-bezier(.4,0,1,1);overflow:hidden}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-volume .art-volume-panel .art-volume-slider-handle{position:absolute;top:50%;left:0;width:12px;height:12px;border-radius:12px;margin-top:-6px;background:#fff}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-volume .art-volume-panel .art-volume-slider-handle:before{left:-54px;background:#fff}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-volume .art-volume-panel .art-volume-slider-handle:after{left:6px;background:hsla(0,0%,100%,.2)}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-volume .art-volume-panel .art-volume-slider-handle:after,.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-volume .art-volume-panel .art-volume-slider-handle:before{content:"";position:absolute;display:block;top:50%;height:3px;margin-top:-2px;width:60px}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-volume .art-volume-panel.art-volume-panel-hover{width:60px}.artplayer-video-player .artplayer-bottom .artplayer-controls .art-control-time{padding:0 10px}.artplayer-video-player.controls-show .artplayer-bottom,.artplayer-video-player:hover .artplayer-bottom{opacity:1;visibility:visible} +.artplayer-video-player .artplayer-contextmenu{position:absolute;z-index:70;left:0;top:0;width:200px;padding:5px 0;background:rgba(0,0,0,.8)}.artplayer-video-player .artplayer-contextmenu .art-menu{cursor:pointer;font-size:13px;display:block;color:#fff;padding:7px 10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-shadow:0 0 2px rgba(0,0,0,.5)}.artplayer-video-player .artplayer-contextmenu .art-menu a{color:#fff;text-decoration:none}.artplayer-video-player .artplayer-contextmenu .art-menu:hover{background-color:hsla(0,0%,100%,.1)} +.artplayer-video-player .artplayer-info{display:none;position:absolute;left:10px;top:10px;z-index:80;width:350px;min-height:150px;padding:10px;color:#fff;font-size:12px;font-family:Noto Sans CJK SC DemiLight,Roboto,Segoe UI,Tahoma,Arial,Helvetica,sans-serif;-webkit-font-smoothing:antialiased;background:rgba(0,0,0,.7)}.artplayer-video-player .artplayer-info .art-info-item{display:flex;margin-bottom:5px}.artplayer-video-player .artplayer-info .art-info-item .art-info-title{width:100px;text-align:right}.artplayer-video-player .artplayer-info .art-info-item .art-info-content{flex:1;padding-left:5px}.artplayer-video-player .artplayer-info .artplayer-info-close{position:absolute;top:5px;right:5px;cursor:pointer} \ No newline at end of file diff --git a/docs/img/yourName.png b/docs/img/your-name.png similarity index 100% rename from docs/img/yourName.png rename to docs/img/your-name.png diff --git a/docs/index.html b/docs/index.html index 8823a69fd..1a9755df8 100644 --- a/docs/index.html +++ b/docs/index.html @@ -26,7 +26,6 @@ diff --git a/docs/js/artplayer.js b/docs/js/artplayer.js index c5c8da414..44384959f 100644 --- a/docs/js/artplayer.js +++ b/docs/js/artplayer.js @@ -422,29 +422,25 @@ var storage = Object.assign({}, getStorage(), defineProperty({}, key, value)); localStorage.setItem('artplayer_settings', JSON.stringify(storage)); } + function getType(val) { + var toString = Object.prototype.toString; + var type = toString.call(val).slice(8, -1).toLowerCase().replace(/\s/g, ''); + return type; + } - function validOption(option) { - errorHandle(option.container, '\'container\' option is required.'); - errorHandle(option.url, '\'url\' option is required.'); - errorHandle(typeof option.container === 'string' || option.container instanceof Element, "'container' option require 'string' or 'Element' type, but got '".concat(_typeof_1(option.container), "'.")); - errorHandle(typeof option.url === 'string', "'url' option require 'string' type, but got '".concat(_typeof_1(option.url), "'.")); - errorHandle(typeof option.poster === 'string', "'poster' option require 'string' type, but got '".concat(_typeof_1(option.poster), "'.")); - errorHandle(Object.prototype.toString.call(option.thumbnails) === '[object Object]', "'thumbnails' option require 'object' type, but got '".concat(_typeof_1(option.thumbnails), "'.")); - errorHandle(typeof option.volume === 'number', "'volume' option require 'number' type, but got '".concat(_typeof_1(option.volume), "'.")); - errorHandle(typeof option.autoplay === 'boolean', "'autoplay' option require 'boolean' type, but got '".concat(_typeof_1(option.autoplay), "'.")); - errorHandle(typeof option.loop === 'boolean', "'loop' option require 'boolean' type, but got '".concat(_typeof_1(option.loop), "'.")); - errorHandle(['none', 'metadata', 'auto'].indexOf(option.preload) > -1, "'preload' option require one of 'none\u3001metadata\u3001auto', but got '".concat(option.preload, ".")); - errorHandle(typeof option.lang === 'string', "'lang' option require 'string' type, but got '".concat(_typeof_1(option.lang), "'.")); - errorHandle(typeof option.type === 'string', "'type' option require 'string' type, but got '".concat(_typeof_1(option.type), "'.")); - errorHandle(typeof option.mimeCodec === 'string', "'mimeCodec' option require 'string' type, but got '".concat(_typeof_1(option.mimeCodec), "'.")); - errorHandle(Array.isArray(option.layers), "'layers' option require 'array' type, but got '".concat(_typeof_1(option.layers), "'.")); - errorHandle(Array.isArray(option.contextmenu), "'contextmenu' option require 'array' type, but got '".concat(_typeof_1(option.contextmenu), "'.")); - errorHandle(typeof option.loading === 'string' || option.loading instanceof Element, "'loading' option require 'string' type, but got '".concat(_typeof_1(option.loading), "'.")); - errorHandle(typeof option.theme === 'string', "'theme' option require 'string' type, but got '".concat(_typeof_1(option.theme), "'.")); - errorHandle(typeof option.hotkey === 'boolean', "'hotkey' option require 'boolean' type, but got '".concat(_typeof_1(option.hotkey), "'.")); - errorHandle(Object.prototype.toString.call(option.subtitle) === '[object Object]', "'subtitle' option require 'object' type, but got '".concat(_typeof_1(option.subtitle), "'.")); - errorHandle(Array.isArray(option.controls), "'controls' option require 'array' type, but got '".concat(_typeof_1(option.controls), "'.")); - errorHandle(Array.isArray(option.highlight), "'highlight' option require 'array' type, but got '".concat(_typeof_1(option.highlight), "'.")); + function validOption(DEFAULTS, option) { + var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ['option']; + Object.keys(DEFAULTS).forEach(function (key) { + var defaultValue = DEFAULTS[key]; + var value = option[key]; + var defaultType = getType(defaultValue); + var type = getType(value); + errorHandle(defaultType === type, "'".concat(path.join('.'), ".").concat(key, "' require '").concat(defaultType, "' type, but got '").concat(type, "'")); + + if (type === 'object') { + validOption(defaultValue, value, path.concat(key)); + } + }); } var mimeCodec = { @@ -562,7 +558,7 @@ key: "init", value: function init() { var refs = this.art.refs; - refs.$container.innerHTML = "\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
[x]
\n
\n
\n "; + refs.$container.innerHTML = "\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
[x]
\n
\n
\n "; refs.$player = refs.$container.querySelector('.artplayer-video-player'); refs.$video = refs.$container.querySelector('.artplayer-video'); refs.$subtitle = refs.$container.querySelector('.artplayer-subtitle'); @@ -654,13 +650,16 @@ createClass(Player, [{ key: "init", value: function init() { - var option = this.art.option; - var $video = this.art.refs.$video; - $video.controls = false; - $video.poster = option.poster; + var _this$art = this.art, + option = _this$art.option, + $video = _this$art.refs.$video; + Object.keys(option.moreVideoAttr).forEach(function (key) { + var value = option.moreVideoAttr[key]; + $video[key] = value; + }); $video.volume = clamp(option.volume, 0, 1); + $video.poster = option.poster; $video.autoplay = option.autoplay; - $video.preload = option.preload; $video.src = option.url; } }, { @@ -668,13 +667,13 @@ value: function eventBind() { var _this = this; - var _this$art = this.art, - proxy = _this$art.events.proxy, - _this$art$refs = _this$art.refs, - $player = _this$art$refs.$player, - $video = _this$art$refs.$video, - i18n = _this$art.i18n, - notice = _this$art.notice; + var _this$art2 = this.art, + proxy = _this$art2.events.proxy, + _this$art2$refs = _this$art2.refs, + $player = _this$art2$refs.$player, + $video = _this$art2$refs.$video, + i18n = _this$art2.i18n, + notice = _this$art2.notice; config.video.events.forEach(function (eventName) { proxy($video, eventName, function (event) { _this.art.emit("video:".concat(event.type), event); @@ -753,10 +752,10 @@ }, { key: "play", value: function play() { - var _this$art2 = this.art, - $video = _this$art2.refs.$video, - i18n = _this$art2.i18n, - notice = _this$art2.notice; + var _this$art3 = this.art, + $video = _this$art3.refs.$video, + i18n = _this$art3.i18n, + notice = _this$art3.notice; var promise = $video.play(); notice.show(i18n.get('Start')); this.art.emit('play', $video); @@ -765,10 +764,10 @@ }, { key: "pause", value: function pause() { - var _this$art3 = this.art, - $video = _this$art3.refs.$video, - i18n = _this$art3.i18n, - notice = _this$art3.notice; + var _this$art4 = this.art, + $video = _this$art4.refs.$video, + i18n = _this$art4.i18n, + notice = _this$art4.notice; $video.pause(); notice.show(i18n.get('Pause')); this.art.emit('pause', $video); @@ -785,9 +784,9 @@ }, { key: "seek", value: function seek(time) { - var _this$art4 = this.art, - $video = _this$art4.refs.$video, - notice = _this$art4.notice; + var _this$art5 = this.art, + $video = _this$art5.refs.$video, + notice = _this$art5.notice; var newTime = Math.max(time, 0); if ($video.duration) { @@ -801,10 +800,10 @@ }, { key: "volume", value: function volume(percentage) { - var _this$art5 = this.art, - $video = _this$art5.refs.$video, - i18n = _this$art5.i18n, - notice = _this$art5.notice; + var _this$art6 = this.art, + $video = _this$art6.refs.$video, + i18n = _this$art6.i18n, + notice = _this$art6.notice; if (percentage !== undefined) { $video.volume = clamp(percentage, 0, 1); @@ -827,10 +826,10 @@ }, { key: "playbackRate", value: function playbackRate(rate) { - var _this$art6 = this.art, - $video = _this$art6.refs.$video, - i18n = _this$art6.i18n, - notice = _this$art6.notice; + var _this$art7 = this.art, + $video = _this$art7.refs.$video, + i18n = _this$art7.i18n, + notice = _this$art7.notice; var newRate = clamp(rate, 0.1, 10); $video.playbackRate = newRate; notice.show("".concat(i18n.get('Rate'), ": ").concat(newRate, "x")); @@ -841,33 +840,62 @@ return Player; }(); - function validControl(option) { - errorHandle(typeof option.control === 'function', "'control' option require 'function' type, but got '".concat(_typeof_1(option.control), "'.")); - errorHandle(typeof option.disable === 'boolean', "'disable' option require 'boolean' type, but got '".concat(_typeof_1(option.disable), "'.")); - errorHandle(['top', 'left', 'right'].indexOf(option.position) > -1, "'position' option require one of 'top\u3001left\u3001right', but got '".concat(option.position, "'.")); - errorHandle(typeof option.index === 'number', "'index' option require 'number' type, but got '".concat(_typeof_1(option.index), "'.")); - } + var Danmu = + /*#__PURE__*/ + function () { + function Danmu(option) { + classCallCheck(this, Danmu); - var Danmu = function Danmu(art, option) { - classCallCheck(this, Danmu); + this.option = option; + } - this.art = art; - this.option = option; - }; + createClass(Danmu, [{ + key: "apply", + value: function apply(art) { + this.art = art; + } + }]); - var Fullscreen = function Fullscreen(art, option) { - classCallCheck(this, Fullscreen); + return Danmu; + }(); - this.art = art; - this.option = option; - }; + var Fullscreen = + /*#__PURE__*/ + function () { + function Fullscreen(option) { + classCallCheck(this, Fullscreen); - var Pip = function Pip(art, option) { - classCallCheck(this, Pip); + this.option = option; + } - this.art = art; - this.option = option; - }; + createClass(Fullscreen, [{ + key: "apply", + value: function apply(art) { + this.art = art; + } + }]); + + return Fullscreen; + }(); + + var Pip = + /*#__PURE__*/ + function () { + function Pip(option) { + classCallCheck(this, Pip); + + this.option = option; + } + + createClass(Pip, [{ + key: "apply", + value: function apply(art) { + this.art = art; + } + }]); + + return Pip; + }(); var loading = "\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n"; @@ -908,15 +936,19 @@ var PlayAndPause = /*#__PURE__*/ function () { - function PlayAndPause(art, option) { + function PlayAndPause(option) { classCallCheck(this, PlayAndPause); - this.art = art; this.option = option; - this.init(); } createClass(PlayAndPause, [{ + key: "apply", + value: function apply(art) { + this.art = art; + this.init(); + } + }, { key: "init", value: function init() { var _this = this; @@ -924,8 +956,8 @@ var _this$art = this.art, proxy = _this$art.events.proxy, player = _this$art.player; - this.$play = append(this.option.ref, icons$1.play); - this.$pause = append(this.option.ref, icons$1.pause); + this.$play = append(this.option.$control, icons$1.play); + this.$pause = append(this.option.$control, icons$1.pause); this.$pause.style.display = 'none'; proxy(this.$play, 'click', function () { player.play(); @@ -950,19 +982,23 @@ var Progress = /*#__PURE__*/ function () { - function Progress(art, option) { + function Progress(option) { classCallCheck(this, Progress); - this.art = art; this.option = option; - this.isDroging = false; - this.getLoaded = this.getLoaded.bind(this); - this.getPlayed = this.getPlayed.bind(this); - this.set = this.set.bind(this); - this.init(); } createClass(Progress, [{ + key: "apply", + value: function apply(art) { + this.art = art; + this.isDroging = false; + this.getLoaded = this.getLoaded.bind(this); + this.getPlayed = this.getPlayed.bind(this); + this.set = this.set.bind(this); + this.init(); + } + }, { key: "init", value: function init() { var _this = this; @@ -974,16 +1010,18 @@ proxy = _this$art.events.proxy, $video = _this$art.refs.$video, player = _this$art.player; - append(this.option.ref, "\n
\n
\n
\n
\n
\n
\n
\n ")); - this.$loaded = this.option.ref.querySelector('.art-progress-loaded'); - this.$played = this.option.ref.querySelector('.art-progress-played'); - this.$highlight = this.option.ref.querySelector('.art-progress-highlight'); - this.$indicator = this.option.ref.querySelector('.art-progress-indicator'); - this.$tip = this.option.ref.querySelector('.art-progress-tip'); + append(this.option.$control, "\n
\n
\n
\n
\n
\n
\n
\n ")); + this.$loaded = this.option.$control.querySelector('.art-progress-loaded'); + this.$played = this.option.$control.querySelector('.art-progress-played'); + this.$highlight = this.option.$control.querySelector('.art-progress-highlight'); + this.$indicator = this.option.$control.querySelector('.art-progress-indicator'); + this.$tip = this.option.$control.querySelector('.art-progress-tip'); this.art.on('video:canplay', function () { _this.set('loaded', _this.getLoaded()); - highlight.forEach(function (item) { + highlight.filter(function (item) { + return !item.disable; + }).forEach(function (item) { var left = Number(item.time) / $video.duration; append(_this.$highlight, "\n \n ")); }); @@ -997,7 +1035,7 @@ this.art.on('video:ended', function () { _this.set('played', 1); }); - proxy(this.option.ref, 'mousemove', function (event) { + proxy(this.option.$control, 'mousemove', function (event) { _this.$tip.style.display = 'block'; if (event.path.indexOf(_this.$highlight) > -1) { @@ -1006,10 +1044,10 @@ _this.showTime(event); } }); - proxy(this.option.ref, 'mouseout', function () { + proxy(this.option.$control, 'mouseout', function () { _this.$tip.style.display = 'none'; }); - proxy(this.option.ref, 'click', function (event) { + proxy(this.option.$control, 'click', function (event) { if (event.target !== _this.$indicator) { var _this$getPosFromEvent = _this.getPosFromEvent(event), second = _this$getPosFromEvent.second, @@ -1052,7 +1090,7 @@ text = _event$target$dataset.text, time = _event$target$dataset.time; this.$tip.innerHTML = text; - var left = Number(time) / $video.duration * this.option.ref.clientWidth + event.target.clientWidth / 2 - this.$tip.clientWidth / 2; + var left = Number(time) / $video.duration * this.option.$control.clientWidth + event.target.clientWidth / 2 - this.$tip.clientWidth / 2; this.$tip.style.left = "".concat(left, "px"); } }, { @@ -1067,8 +1105,8 @@ if (width <= tipWidth / 2) { this.$tip.style.left = 0; - } else if (width > this.option.ref.clientWidth - tipWidth / 2) { - this.$tip.style.left = "".concat(this.option.ref.clientWidth - tipWidth, "px"); + } else if (width > this.option.$control.clientWidth - tipWidth / 2) { + this.$tip.style.left = "".concat(this.option.$control.clientWidth - tipWidth, "px"); } else { this.$tip.style.left = "".concat(width - tipWidth / 2, "px"); } @@ -1099,38 +1137,54 @@ return Progress; }(); - var Subtitle = function Subtitle(art, option) { - classCallCheck(this, Subtitle); + var Subtitle = + /*#__PURE__*/ + function () { + function Subtitle(option) { + classCallCheck(this, Subtitle); - this.art = art; - this.option = option; - }; + this.option = option; + } + + createClass(Subtitle, [{ + key: "apply", + value: function apply(art) { + this.art = art; + } + }]); + + return Subtitle; + }(); var Time = /*#__PURE__*/ function () { - function Time(art, option) { + function Time(option) { classCallCheck(this, Time); - this.art = art; this.option = option; - this.init(); } createClass(Time, [{ + key: "apply", + value: function apply(art) { + this.art = art; + this.init(); + } + }, { key: "init", value: function init() { var _this = this; - this.option.ref.innerHTML = '00:00 / 00:00'; + this.option.$control.innerHTML = '00:00 / 00:00'; this.art.on('video:canplay', function () { - _this.option.ref.innerHTML = _this.getTime(); + _this.option.$control.innerHTML = _this.getTime(); }); this.art.on('video:timeupdate', function () { - _this.option.ref.innerHTML = _this.getTime(); + _this.option.$control.innerHTML = _this.getTime(); }); this.art.on('video:seeking', function () { - _this.option.ref.innerHTML = _this.getTime(); + _this.option.$control.innerHTML = _this.getTime(); }); } }, { @@ -1147,16 +1201,20 @@ var Volume = /*#__PURE__*/ function () { - function Volume(art, option) { + function Volume(option) { classCallCheck(this, Volume); - this.art = art; this.option = option; - this.isDroging = false; - this.init(); } createClass(Volume, [{ + key: "apply", + value: function apply(art) { + this.art = art; + this.isDroging = false; + this.init(); + } + }, { key: "init", value: function init() { var _this = this; @@ -1164,9 +1222,9 @@ var _this$art = this.art, proxy = _this$art.events.proxy, player = _this$art.player; - this.$volume = append(this.option.ref, icons$1.volume); - this.$volumeClose = append(this.option.ref, icons$1.volumeClose); - this.$volumePanel = append(this.option.ref, '
'); + this.$volume = append(this.option.$control, icons$1.volume); + this.$volumeClose = append(this.option.$control, icons$1.volumeClose); + this.$volumePanel = append(this.option.$control, '
'); this.$volumeHandle = append(this.$volumePanel, '
'); this.$volumeClose.style.display = 'none'; var volume = getStorage('volume'); @@ -1181,8 +1239,9 @@ proxy(this.$volumeClose, 'click', function () { _this.$volume.style.display = 'block'; _this.$volumeClose.style.display = 'none'; + player.volume(getStorage('volume')); }); - proxy(this.option.ref, 'mouseenter', function () { + proxy(this.option.$control, 'mouseenter', function () { _this.$volumePanel.classList.add('art-volume-panel-hover'); // TODO @@ -1190,7 +1249,7 @@ _this.setVolumeHandle(player.volume()); }, 200); }); - proxy(this.option.ref, 'mouseleave', function () { + proxy(this.option.$control, 'mouseleave', function () { _this.$volumePanel.classList.remove('art-volume-panel-hover'); }); proxy(this.$volumePanel, 'click', function (event) { @@ -1258,25 +1317,41 @@ return Volume; }(); - var Setting = function Setting(art, option) { - classCallCheck(this, Setting); + var Setting = + /*#__PURE__*/ + function () { + function Setting(option) { + classCallCheck(this, Setting); - this.art = art; - this.option = option; - }; + this.option = option; + } + + createClass(Setting, [{ + key: "apply", + value: function apply(art) { + this.art = art; + } + }]); + + return Setting; + }(); var Thumbnails = /*#__PURE__*/ function () { - function Thumbnails(art, option) { + function Thumbnails(option) { classCallCheck(this, Thumbnails); - this.art = art; this.option = option; - this.init(); } createClass(Thumbnails, [{ + key: "apply", + value: function apply(art) { + this.art = art; + this.init(); + } + }, { key: "init", value: function init() { var _this = this; @@ -1285,12 +1360,12 @@ $progress = _this$art.refs.$progress, proxy = _this$art.events.proxy; proxy($progress, 'mousemove', function (event) { - _this.option.ref.style.display = 'block'; + _this.option.$control.style.display = 'block'; _this.showThumbnails(event); }); proxy($progress, 'mouseout', function () { - _this.option.ref.style.display = 'none'; + _this.option.$control.style.display = 'none'; }); } }, { @@ -1311,17 +1386,17 @@ var perIndex = Math.ceil(posWidth / perWidth); var yIndex = Math.ceil(perIndex / column); var xIndex = perIndex % column || column; - this.option.ref.style.backgroundImage = "url(".concat(url, ")"); - this.option.ref.style.height = "".concat(height, "px"); - this.option.ref.style.width = "".concat(width, "px"); - this.option.ref.style.backgroundPosition = "-".concat(--xIndex * width, "px -").concat(--yIndex * height, "px"); + this.option.$control.style.backgroundImage = "url(".concat(url, ")"); + this.option.$control.style.height = "".concat(height, "px"); + this.option.$control.style.width = "".concat(width, "px"); + this.option.$control.style.backgroundPosition = "-".concat(--xIndex * width, "px -").concat(--yIndex * height, "px"); if (posWidth <= width / 2) { - this.option.ref.style.left = 0; + this.option.$control.style.left = 0; } else if (posWidth > $progress.clientWidth - width / 2) { - this.option.ref.style.left = "".concat($progress.clientWidth - width, "px"); + this.option.$control.style.left = "".concat($progress.clientWidth - width, "px"); } else { - this.option.ref.style.left = "".concat(posWidth - width / 2, "px"); + this.option.$control.style.left = "".concat(posWidth - width / 2, "px"); } } }]); @@ -1352,92 +1427,78 @@ value: function init() { var _this = this; - this.add({ - control: Progress, + this.add(new Progress({ disable: false, position: 'top', index: 10 - }); - this.add({ - control: Thumbnails, + })); + this.add(new Thumbnails({ disable: !this.art.option.thumbnails.url, position: 'top', index: 20 - }); - this.add({ - control: PlayAndPause, + })); + this.add(new PlayAndPause({ disable: false, position: 'left', index: 10 - }); - this.add({ - control: Volume, + })); + this.add(new Volume({ disable: false, - tooltip: 'Volume', position: 'left', index: 20 - }); - this.add({ - control: Time, + })); + this.add(new Time({ disable: false, - tooltip: 'Volume', position: 'left', index: 30 - }); - this.add({ - control: Danmu, + })); + this.add(new Danmu({ disable: false, - tooltip: 'Danmu', position: 'right', index: 10 - }); - this.add({ - control: Subtitle, + })); + this.add(new Subtitle({ disable: false, - tooltip: 'Subtitle', position: 'right', index: 20 - }); - this.add({ - control: Setting, + })); + this.add(new Setting({ disable: false, - tooltip: 'Setting', position: 'right', index: 30 - }); - this.add({ - control: Pip, + })); + this.add(new Pip({ disable: false, - tooltip: 'Pip', position: 'right', index: 40 - }); - this.add({ - control: Fullscreen, + })); + this.add(new Fullscreen({ disable: false, - tooltip: 'Fullscreen', position: 'right', index: 50 - }); - this.art.option.controls.forEach(function (item) { + })); + this.art.option.controls.filter(function (item) { + return !item.disable; + }).forEach(function (item) { _this.add(item); }); } }, { key: "add", - value: function add(option) { - validControl(option); + value: function add(control) { + var option = control.option; if (!option.disable) { id++; - var name = option.control.name.toLowerCase() || "control".concat(id); + var name = control.constructor.name.toLowerCase() || "control".concat(id); var $control = document.createElement('div'); $control.setAttribute('class', "art-control art-control-".concat(name)); $control.setAttribute('data-control-index', String(option.index) || id); - option.ref = $control; - this.commonMethod(option); - this[name] = new option.control(this.art, option); + option.$control = $control; + this.commonMethod(control); this.$map[option.position].push($control); + control.apply(this.art); + this[name] = control; } } }, { @@ -1474,24 +1535,24 @@ } }, { key: "commonMethod", - value: function commonMethod(option) { + value: function commonMethod(control) { var _this3 = this; - Object.defineProperty(option.control.prototype, 'hide', { + Object.defineProperty(control, 'hide', { value: function value() { - option.ref.style.display = 'none'; + control.option.$control.style.display = 'none'; - _this3.art.emit('control:hide', option.ref); + _this3.art.emit('control:hide', control.option.$control); } }); - Object.defineProperty(option.control.prototype, 'show', { + Object.defineProperty(control, 'show', { value: function value() { - option.ref.style.display = option.position === 'top' ? 'block' : 'inline-block'; + control.option.$control.style.display = 'block'; - _this3.art.emit('control:show', option.ref); + _this3.art.emit('control:show', control.option.$control); } }); - Object.defineProperty(option.control.prototype, 'getPosFromEvent', { + Object.defineProperty(control, 'getPosFromEvent', { value: function value(event) { var _this3$art$refs = _this3.art.refs, $video = _this3$art$refs.$video, @@ -1530,6 +1591,8 @@ return Controls; }(); + var id$1 = 0; + var Contextmenu = /*#__PURE__*/ function () { @@ -1551,15 +1614,17 @@ refs = _this$art.refs, proxy = _this$art.events.proxy; option.contextmenu.push({ - text: i18n.get('Video info'), + name: 'info', + html: i18n.get('Video info'), click: function click() { _this.art.info.show(); } }, { - text: 'ArtPlayer 1.0.0', - link: 'https://github.com/zhw2590582/artplayer' + name: 'version', + html: 'ArtPlayer 1.0.0' }, { - text: i18n.get('Close'), + name: 'close', + html: i18n.get('Close'), click: function click() { _this.hide(); } @@ -1594,20 +1659,21 @@ refs.$contextmenu = document.createElement('div'); refs.$contextmenu.classList.add('artplayer-contextmenu'); option.contextmenu.forEach(function (item) { - var $menu = document.createElement('a'); - $menu.innerHTML = item.text; - $menu.classList.add('art-menu'); + id$1++; + var $menu = document.createElement('div'); + $menu.setAttribute('data-art-menu-id', id$1); + $menu.setAttribute('class', "art-menu art-menu-".concat(item.name || id$1)); + append($menu, item.html); + setStyle($menu, item.style || {}); - if (item.link) { - $menu.target = '_blank'; - $menu.href = item.link; - } else if (item.click) { - $menu.href = '#'; + if (item.click) { proxy($menu, 'click', function (event) { event.preventDefault(); item.click(_this2.art, event); _this2.hide(); + + _this2.art.emit('contextmenu:click', $menu); }); } @@ -1722,8 +1788,8 @@ var infoHtml = []; infoHtml.push("\n
\n
Player version:
\n
1.0.0
\n
\n "); infoHtml.push("\n
\n
Video url:
\n
\n
\n "); - infoHtml.push("\n
\n
Video type:
\n
\n
\n "); - infoHtml.push("\n
\n
Video size:
\n
\n
\n "); + infoHtml.push("\n
\n
Video type:
\n
loading...
\n
\n "); + infoHtml.push("\n
\n
Video size:
\n
loading...
\n
\n "); infoHtml.push("\n
\n
Video volume:
\n
\n
\n "); infoHtml.push("\n
\n
Video time:
\n
\n
\n "); infoHtml.push("\n
\n
Video duration:
\n
\n
\n "); @@ -1788,8 +1854,12 @@ classCallCheck(this, Subtitle); this.art = art; - this.checkExt(this.art.option.subtitle.url); - this.init(); + var url = this.art.option.subtitle.url; + + if (url) { + this.checkExt(url); + this.init(); + } } createClass(Subtitle, [{ @@ -2013,7 +2083,7 @@ return Hotkey; }(); - var id$1 = 0; + var id$2 = 0; var Layers = /*#__PURE__*/ @@ -2044,11 +2114,11 @@ key: "add", value: function add(option, callback) { var refs = this.art.refs; - id$1++; + id$2++; var $layer = document.createElement('div'); - $layer.setAttribute('data-art-layer-id', id$1); - $layer.setAttribute('class', "art-layer art-layer-".concat(option.name || id$1)); - $layer.style.zIndex = option.index || id$1; + $layer.setAttribute('data-art-layer-id', id$2); + $layer.setAttribute('class', "art-layer art-layer-".concat(option.name || id$2)); + $layer.style.zIndex = option.index || id$2; append($layer, option.html); setStyle($layer, option.style || {}); refs.$layers.appendChild($layer); @@ -2198,7 +2268,7 @@ return Mask; }(); - var id$2 = 0; + var id$3 = 0; var instances = []; var Artplayer = @@ -2216,7 +2286,7 @@ _this.emit('init:start'); _this.option = deepMerge({}, Artplayer.DEFAULTS, option); - validOption(_this.option); + validOption(Artplayer.DEFAULTS, _this.option); _this.init(); @@ -2253,7 +2323,7 @@ this.loading = new Loading(this); this.hotkey = new Hotkey(this); this.mask = new Mask(this); - this.id = id$2++; + this.id = id$3++; instances.push(this); return this; } @@ -2302,6 +2372,7 @@ container: '.artplayer', url: '', poster: '', + volume: 0.7, thumbnails: { url: '', number: 60, @@ -2309,10 +2380,8 @@ height: 90, column: 10 }, - volume: 0.7, autoplay: false, loop: false, - preload: 'auto', type: '', mimeCodec: '', layers: [], @@ -2326,6 +2395,12 @@ }, controls: [], highlight: [], + moreVideoAttr: { + 'controls': false, + 'preload': 'auto', + 'webkit-playsinline': true, + 'playsinline': true + }, lang: navigator.language.toLowerCase() }; } diff --git a/docs/js/artplayer.js.map b/docs/js/artplayer.js.map index 36597fe84..2f08bc22d 100644 --- a/docs/js/artplayer.js.map +++ b/docs/js/artplayer.js.map @@ -1 +1 @@ -{"version":3,"file":"artplayer.js","sources":["../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/construct.js","../../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","../../node_modules/@babel/runtime/helpers/iterableToArray.js","../../node_modules/@babel/runtime/helpers/nonIterableSpread.js","../../node_modules/@babel/runtime/helpers/toConsumableArray.js","../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../node_modules/@babel/runtime/helpers/typeof.js","../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/inherits.js","../../node_modules/@babel/runtime/helpers/defineProperty.js","../../node_modules/@babel/runtime/helpers/objectSpread.js","../../node_modules/@babel/runtime/helpers/arrayWithHoles.js","../../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../../node_modules/@babel/runtime/helpers/nonIterableRest.js","../../node_modules/@babel/runtime/helpers/slicedToArray.js","../../node_modules/@babel/runtime/helpers/isNativeFunction.js","../../node_modules/@babel/runtime/helpers/wrapNativeSuper.js","../../src/utils/index.js","../../src/verification/player.js","../../src/config/mimeCodec.js","../../src/config/mse.js","../../src/config/video.js","../../src/config/index.js","../../node_modules/tiny-emitter/index.js","../../src/template.js","../../src/i18n.js","../../src/player.js","../../src/verification/control.js","../../src/controls/danmu.js","../../src/controls/fullscreen.js","../../src/controls/pip.js","../../src/icons/index.js","../../src/controls/playAndPause.js","../../src/controls/progress.js","../../src/controls/subtitle.js","../../src/controls/time.js","../../src/controls/volume.js","../../src/controls/setting.js","../../src/controls/thumbnails.js","../../src/controls/index.js","../../src/contextmenu.js","../../src/danmu.js","../../src/info.js","../../src/subtitle.js","../../src/events.js","../../src/hotkey.js","../../src/layers.js","../../src/loading.js","../../src/notice.js","../../src/mask.js","../../src/index.js"],"sourcesContent":["function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nmodule.exports = _construct;","function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nmodule.exports = _arrayWithoutHoles;","function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nmodule.exports = _nonIterableSpread;","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","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) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","var defineProperty = require(\"./defineProperty\");\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nmodule.exports = _objectSpread;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nmodule.exports = _nonIterableRest;","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nmodule.exports = _isNativeFunction;","var getPrototypeOf = require(\"./getPrototypeOf\");\n\nvar setPrototypeOf = require(\"./setPrototypeOf\");\n\nvar isNativeFunction = require(\"./isNativeFunction\");\n\nvar construct = require(\"./construct\");\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\nmodule.exports = _wrapNativeSuper;","export class ArtPlayerError extends Error {\n constructor(message, context) {\n super(message);\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, context || this.constructor);\n }\n this.name = 'ArtPlayerError';\n }\n}\n\nexport function errorHandle(condition, msg) {\n const isFun = typeof condition === 'function';\n if (isFun ? !isFun() : !condition) {\n throw new ArtPlayerError(msg);\n }\n}\n\nexport function clamp(num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));\n}\n\nexport function getExt(url) {\n if (url.includes('?')) {\n return getExt(url.split('?')[0]);\n }\n\n if (url.includes('#')) {\n return getExt(url.split('#')[0]);\n }\n\n return url\n .trim()\n .toLowerCase()\n .split('.')\n .pop();\n}\n\nexport function append(parent, child) {\n if (child instanceof Element) {\n parent.appendChild(child);\n } else {\n parent.insertAdjacentHTML('beforeend', child);\n }\n return parent.lastElementChild;\n}\n\nexport function setStyle(element, styles) {\n Object.keys(styles).forEach(key => {\n element.style[key] = styles[key];\n });\n return element;\n}\n\nexport function secondToTime(second) {\n const add0 = num => (num < 10 ? `0${num}` : String(num));\n const hour = Math.floor(second / 3600);\n const min = Math.floor((second - hour * 3600) / 60);\n const sec = Math.floor(second - hour * 3600 - min * 60);\n return (hour > 0 ? [hour, min, sec] : [min, sec]).map(add0).join(':');\n}\n\nexport function deepMerge(...sources) {\n const isObject = value => value !== null && typeof value === 'object';\n let returnValue = {};\n for (const source of sources) {\n if (Array.isArray(source)) {\n if (!Array.isArray(returnValue)) {\n returnValue = [];\n }\n returnValue = [...returnValue, ...source];\n } else if (isObject(source)) {\n for (let [key, value] of Object.entries(source)) {\n if (isObject(value) && Reflect.has(returnValue, key)) {\n value = deepMerge(returnValue[key], value);\n }\n returnValue = { ...returnValue, [key]: value };\n }\n }\n }\n return returnValue;\n}\n\nexport function getStorage(key) {\n const storage = JSON.parse(localStorage.getItem('artplayer_settings')) || {};\n return key ? storage[key] : storage;\n}\n\nexport function setStorage(key, value) {\n const storage = Object.assign({}, getStorage(), {\n [key]: value\n });\n localStorage.setItem('artplayer_settings', JSON.stringify(storage));\n}\n","import { errorHandle } from '../utils';\n\nexport default function validOption(option) {\n errorHandle(\n option.container,\n '\\'container\\' option is required.'\n );\n\n errorHandle(\n option.url,\n '\\'url\\' option is required.'\n );\n\n errorHandle(\n typeof option.container === 'string' || option.container instanceof Element,\n `'container' option require 'string' or 'Element' type, but got '${typeof option.container}'.`\n );\n\n errorHandle(\n typeof option.url === 'string',\n `'url' option require 'string' type, but got '${typeof option.url}'.`\n );\n\n errorHandle(\n typeof option.poster === 'string',\n `'poster' option require 'string' type, but got '${typeof option.poster}'.`\n );\n\n errorHandle(\n Object.prototype.toString.call(option.thumbnails) === '[object Object]',\n `'thumbnails' option require 'object' type, but got '${typeof option.thumbnails}'.`\n );\n\n errorHandle(\n typeof option.volume === 'number',\n `'volume' option require 'number' type, but got '${typeof option.volume}'.`\n );\n\n errorHandle(\n typeof option.autoplay === 'boolean',\n `'autoplay' option require 'boolean' type, but got '${typeof option.autoplay}'.`\n );\n\n errorHandle(\n typeof option.loop === 'boolean',\n `'loop' option require 'boolean' type, but got '${typeof option.loop}'.`\n );\n\n errorHandle(\n ['none', 'metadata', 'auto'].indexOf(option.preload) > -1,\n `'preload' option require one of 'none、metadata、auto', but got '${option.preload}.`\n );\n\n errorHandle(\n typeof option.lang === 'string',\n `'lang' option require 'string' type, but got '${typeof option.lang}'.`\n );\n\n errorHandle(\n typeof option.type === 'string',\n `'type' option require 'string' type, but got '${typeof option.type}'.`\n );\n\n errorHandle(\n typeof option.mimeCodec === 'string',\n `'mimeCodec' option require 'string' type, but got '${typeof option.mimeCodec}'.`\n );\n\n errorHandle(\n Array.isArray(option.layers),\n `'layers' option require 'array' type, but got '${typeof option.layers}'.`\n );\n\n errorHandle(\n Array.isArray(option.contextmenu),\n `'contextmenu' option require 'array' type, but got '${typeof option.contextmenu}'.`\n );\n\n errorHandle(\n typeof option.loading === 'string' || option.loading instanceof Element,\n `'loading' option require 'string' type, but got '${typeof option.loading}'.`\n );\n\n errorHandle(\n typeof option.theme === 'string',\n `'theme' option require 'string' type, but got '${typeof option.theme}'.`\n );\n\n errorHandle(\n typeof option.hotkey === 'boolean',\n `'hotkey' option require 'boolean' type, but got '${typeof option.hotkey}'.`\n );\n\n errorHandle(\n Object.prototype.toString.call(option.subtitle) === '[object Object]',\n `'subtitle' option require 'object' type, but got '${typeof option.subtitle}'.`\n );\n\n errorHandle(\n Array.isArray(option.controls),\n `'controls' option require 'array' type, but got '${typeof option.controls}'.`\n );\n\n errorHandle(\n Array.isArray(option.highlight),\n `'highlight' option require 'array' type, but got '${typeof option.highlight}'.`\n );\n}\n","export default {\n mp4: 'video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"',\n webm: 'video/webm; codecs=\"vorbis, vp8\"',\n ts: 'video/mp2t; codecs=\"avc1.42E01E, mp4a.40.2\"'\n};\n","export default {\n mediaSource: {\n propertys: [\n 'activeSourceBuffers',\n 'duration',\n 'readyState',\n 'sourceBuffers'\n ],\n methods: [\n 'addSourceBuffer',\n 'endOfStream',\n 'removeSourceBuffer',\n 'clearLiveSeekableRange',\n 'setLiveSeekableRange'\n ],\n events: [\n 'sourceclose',\n 'sourceended',\n 'sourceopen'\n ]\n },\n sourceBuffer: {\n propertys: [\n 'mode',\n 'updating',\n 'buffered',\n 'timestampOffset',\n 'audioTracks',\n 'videoTracks',\n 'textTracks',\n 'appendWindowStart',\n 'appendWindowEnd',\n 'trackDefaults'\n ],\n methods: [\n 'appendBuffer',\n 'appendStream',\n 'abort',\n 'remove'\n ],\n events: [\n 'abort',\n 'error',\n 'update',\n 'updateend',\n 'updatestart'\n ]\n },\n sourceBufferList: {\n propertys: [\n 'length'\n ],\n events: [\n 'addsourcebuffer',\n 'removesourcebuffer'\n ]\n }\n};\n","export default {\n propertys: [\n 'audioTracks',\n 'autoplay',\n 'buffered',\n 'controller',\n 'controls',\n 'crossOrigin',\n 'currentSrc',\n 'currentTime',\n 'defaultMuted',\n 'defaultPlaybackRate',\n 'duration',\n 'ended',\n 'error',\n 'loop',\n 'mediaGroup',\n 'muted',\n 'networkState',\n 'paused',\n 'playbackRate',\n 'played',\n 'preload',\n 'readyState',\n 'seekable',\n 'seeking',\n 'src',\n 'startDate',\n 'textTracks',\n 'videoTracks',\n 'volume'\n ],\n methods: [\n 'addTextTrack',\n 'canPlayType',\n 'load',\n 'play',\n 'pause'\n ],\n events: [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\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};\n","import mimeCodec from './mimeCodec';\nimport mse from './mse';\nimport video from './video';\n\nexport default {\n mimeCodec,\n mse,\n video\n};\n","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n","export default class Template {\n constructor(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n const { refs } = this.art;\n refs.$container.innerHTML = `\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
[x]
\n
\n
\n `;\n refs.$player = refs.$container.querySelector('.artplayer-video-player');\n refs.$video = refs.$container.querySelector('.artplayer-video');\n refs.$subtitle = refs.$container.querySelector('.artplayer-subtitle');\n refs.$bottom = refs.$container.querySelector('.artplayer-bottom');\n refs.$progress = refs.$container.querySelector('.artplayer-progress');\n refs.$controls = refs.$container.querySelector('.artplayer-controls');\n refs.$controlsLeft = refs.$container.querySelector('.artplayer-controls-left');\n refs.$controlsRight = refs.$container.querySelector('.artplayer-controls-right');\n refs.$layers = refs.$container.querySelector('.artplayer-layers');\n refs.$loading = refs.$container.querySelector('.artplayer-loading');\n refs.$notice = refs.$container.querySelector('.artplayer-notice');\n refs.$mask = refs.$container.querySelector('.artplayer-mask');\n refs.$info = refs.$container.querySelector('.artplayer-info');\n refs.$infoPanel = refs.$container.querySelector('.artplayer-info-panel');\n refs.$infoClose = refs.$container.querySelector('.artplayer-info-close');\n }\n}\n","let i18nMap = {\n 'zh-cn': {\n 'About author': '关于作者',\n 'Video info': '视频统计信息',\n 'Close': '关闭',\n 'Video load failed': '视频加载失败',\n 'Volume': '音量',\n 'Start': '开始',\n 'Pause': '暂停',\n 'Rate': '速度'\n },\n 'zh-tw': {\n 'About author': '關於作者',\n 'Video info': '影片統計訊息',\n 'Close': '關閉',\n 'Video load failed': '影片載入失敗',\n 'Volume': '音量',\n 'Start': '開始',\n 'Pause': '暫停',\n 'Rate': '速度'\n }\n};\n\nexport default class I18n {\n constructor({ option }) {\n this.option = option;\n this.init();\n }\n\n init() {\n this.language = i18nMap[this.option.lang.toLowerCase()] || {};\n }\n\n get(key) {\n return this.language[key] || key;\n }\n\n update(callback) {\n i18nMap = callback(i18nMap);\n this.init();\n }\n}\n","import { clamp, secondToTime } from './utils';\nimport config from './config';\n\nexport default class Player {\n constructor(art) {\n this.art = art;\n this.init();\n this.eventBind();\n }\n\n init() {\n const { option } = this.art;\n const { $video } = this.art.refs;\n $video.controls = false;\n $video.poster = option.poster;\n $video.volume = clamp(option.volume, 0, 1);\n $video.autoplay = option.autoplay;\n $video.preload = option.preload;\n $video.src = option.url;\n }\n\n eventBind() {\n const { events: { proxy }, refs: { $player, $video }, i18n, notice } = this.art;\n\n config.video.events.forEach(eventName => {\n proxy($video, eventName, event => {\n this.art.emit(`video:${event.type}`, event);\n });\n });\n\n this.art.on('video:loadstart', () => {\n this.art.loading.show();\n });\n\n this.art.on('video:loadeddata', () => {\n this.art.loading.hide();\n });\n\n this.art.on('video:waiting', () => {\n this.art.loading.show();\n });\n\n this.art.on('video:seeking', () => {\n this.art.loading.show();\n });\n\n this.art.on('video:canplay', () => {\n this.art.controls.show();\n this.art.mask.show();\n this.art.loading.hide();\n if (this.art.option.autoplay) {\n const promise = this.play();\n if (promise !== undefined) {\n promise.then().catch(err => {\n console.warn(err);\n });\n }\n }\n });\n\n this.art.on('video:playing', () => {\n this.art.isPlaying = true;\n this.art.controls.hide();\n this.art.mask.hide();\n });\n\n this.art.on('video:pause', () => {\n this.art.isPlaying = false;\n this.art.controls.show();\n this.art.mask.show();\n });\n\n this.art.on('video:ended', () => {\n this.art.isPlaying = false;\n this.art.controls.show();\n this.art.mask.show();\n if (this.art.option.loop) {\n this.seek(0);\n this.play();\n }\n });\n\n this.art.on('video:error', () => {\n this.art.isError = true;\n this.art.isPlaying = false;\n this.art.loading.hide();\n this.art.controls.hide();\n $player.classList.add('artplayer-error');\n notice.show(i18n.get('Video load failed'), false);\n this.art.destroy();\n });\n }\n\n play() {\n const { refs: { $video }, i18n, notice } = this.art;\n const promise = $video.play();\n notice.show(i18n.get('Start'));\n this.art.emit('play', $video);\n return promise;\n }\n\n pause() {\n const { refs: { $video }, i18n, notice } = this.art;\n $video.pause();\n notice.show(i18n.get('Pause'));\n this.art.emit('pause', $video);\n }\n\n toggle() {\n if (this.art.isPlaying) {\n this.pause();\n } else {\n this.play();\n }\n }\n\n seek(time) {\n const { refs: { $video }, notice } = this.art;\n let newTime = Math.max(time, 0);\n if ($video.duration) {\n newTime = Math.min(newTime, $video.duration);\n }\n $video.currentTime = newTime;\n notice.show(`${secondToTime(newTime)} / ${secondToTime($video.duration)}`);\n this.art.emit('seek', newTime);\n }\n\n volume(percentage) {\n const { refs: { $video }, i18n, notice } = this.art;\n if (percentage !== undefined) {\n $video.volume = clamp(percentage, 0, 1);\n notice.show(`${i18n.get('Volume')}: ${parseInt($video.volume * 100)}`);\n this.art.emit('volume', $video.volume);\n }\n return $video.volume || 0;\n }\n\n currentTime() {\n return this.art.refs.$video.currentTime || 0;\n }\n\n duration() {\n return this.art.refs.$video.duration || 0;\n }\n\n playbackRate(rate) {\n const { refs: { $video }, i18n, notice } = this.art;\n const newRate = clamp(rate, 0.1, 10);\n $video.playbackRate = newRate;\n notice.show(`${i18n.get('Rate')}: ${newRate}x`);\n this.art.emit('playbackRate', newRate);\n }\n}\n","import { errorHandle } from '../utils';\n\nexport default function validControl(option) {\n errorHandle(\n typeof option.control === 'function',\n `'control' option require 'function' type, but got '${typeof option.control}'.`\n );\n\n errorHandle(\n typeof option.disable === 'boolean',\n `'disable' option require 'boolean' type, but got '${typeof option.disable}'.`\n );\n\n errorHandle(\n ['top', 'left', 'right'].indexOf(option.position) > -1,\n `'position' option require one of 'top、left、right', but got '${option.position}'.`\n );\n\n errorHandle(\n typeof option.index === 'number',\n `'index' option require 'number' type, but got '${typeof option.index}'.`\n );\n}\n","export default class Danmu {\n constructor(art, option) {\n this.art = art;\n this.option = option;\n }\n}\n","export default class Fullscreen {\n constructor(art, option) {\n this.art = art;\n this.option = option;\n }\n}\n","export default class Pip {\n constructor(art, option) {\n this.art = art;\n this.option = option;\n }\n}\n","import loading from './loading.svg';\nimport playBig from './play-big.svg';\nimport play from './play.svg';\nimport pause from './pause.svg';\nimport volume from './volume.svg';\nimport volumeClose from './volume-close.svg';\n\nconst icons = {\n loading,\n playBig,\n play,\n pause,\n volume,\n volumeClose\n};\n\nfunction creatDomFromSvg(map) {\n const result = {};\n Object.keys(map).forEach(name => {\n const tmp = document.createElement('div');\n tmp.innerHTML = `${map[name]}`;\n [result[name]] = tmp.childNodes;\n });\n return result;\n}\n\nexport default creatDomFromSvg(icons);\n","import { append } from '../utils';\nimport icons from '../icons';\n\nexport default class PlayAndPause {\n constructor(art, option) {\n this.art = art;\n this.option = option;\n this.init();\n }\n\n init() {\n const { events: { proxy }, player } = this.art;\n\n this.$play = append(this.option.ref, icons.play);\n this.$pause = append(this.option.ref, icons.pause);\n this.$pause.style.display = 'none';\n\n proxy(this.$play, 'click', () => {\n player.play();\n });\n\n proxy(this.$pause, 'click', () => {\n player.pause();\n });\n\n this.art.on('video:playing', () => {\n this.$play.style.display = 'none';\n this.$pause.style.display = 'block';\n });\n\n this.art.on('video:pause', () => {\n this.$play.style.display = 'block';\n this.$pause.style.display = 'none';\n });\n }\n}\n","import { append } from '../utils';\n\nexport default class Progress {\n constructor(art, option) {\n this.art = art;\n this.option = option;\n this.isDroging = false;\n this.getLoaded = this.getLoaded.bind(this);\n this.getPlayed = this.getPlayed.bind(this);\n this.set = this.set.bind(this);\n this.init();\n }\n\n init() {\n const {\n option: { highlight, theme },\n events: { proxy },\n refs: { $video },\n player\n } = this.art;\n\n append(\n this.option.ref,\n `\n
\n
\n
\n
\n
\n
\n
\n `\n );\n\n this.$loaded = this.option.ref.querySelector('.art-progress-loaded');\n this.$played = this.option.ref.querySelector('.art-progress-played');\n this.$highlight = this.option.ref.querySelector('.art-progress-highlight');\n this.$indicator = this.option.ref.querySelector('.art-progress-indicator');\n this.$tip = this.option.ref.querySelector('.art-progress-tip');\n\n this.art.on('video:canplay', () => {\n this.set('loaded', this.getLoaded());\n highlight.forEach(item => {\n const left = Number(item.time) / $video.duration;\n append(this.$highlight, `\n \n `\n );\n });\n });\n\n this.art.on('video:progress', () => {\n this.set('loaded', this.getLoaded());\n });\n\n this.art.on('video:timeupdate', () => {\n this.set('played', this.getPlayed());\n });\n\n this.art.on('video:ended', () => {\n this.set('played', 1);\n });\n\n proxy(this.option.ref, 'mousemove', event => {\n this.$tip.style.display = 'block';\n if (event.path.indexOf(this.$highlight) > -1) {\n this.showHighlight(event);\n } else {\n this.showTime(event);\n }\n });\n\n proxy(this.option.ref, 'mouseout', () => {\n this.$tip.style.display = 'none';\n });\n\n proxy(this.option.ref, 'click', event => {\n if (event.target !== this.$indicator) {\n const { second, percentage } = this.getPosFromEvent(event);\n this.set('played', percentage);\n player.seek(second);\n }\n });\n\n proxy(this.$indicator, 'mousedown', () => {\n this.isDroging = true;\n });\n\n proxy(document, 'mousemove', event => {\n if (this.isDroging) {\n const { second, percentage } = this.getPosFromEvent(event);\n this.$indicator.classList.add('show-indicator');\n this.set('played', percentage);\n player.seek(second);\n }\n });\n\n proxy(document, 'mouseup', () => {\n if (this.isDroging) {\n this.isDroging = false;\n this.$indicator.classList.remove('show-indicator');\n }\n });\n }\n\n showHighlight(event) {\n const { $video } = this.art.refs;\n const { text, time } = event.target.dataset;\n this.$tip.innerHTML = text;\n const left =\n Number(time) / $video.duration * this.option.ref.clientWidth +\n event.target.clientWidth / 2 -\n this.$tip.clientWidth / 2;\n this.$tip.style.left = `${left}px`;\n }\n\n showTime(event) {\n const { width, time } = this.getPosFromEvent(event);\n const tipWidth = this.$tip.clientWidth;\n this.$tip.innerHTML = time;\n if (width <= tipWidth / 2) {\n this.$tip.style.left = 0;\n } else if (width > this.option.ref.clientWidth - tipWidth / 2) {\n this.$tip.style.left = `${this.option.ref.clientWidth - tipWidth}px`;\n } else {\n this.$tip.style.left = `${width - tipWidth / 2}px`;\n }\n }\n\n getPlayed() {\n const { $video } = this.art.refs;\n return $video.currentTime / $video.duration;\n }\n\n getLoaded() {\n const { $video } = this.art.refs;\n return $video.buffered.length\n ? $video.buffered.end($video.buffered.length - 1) / $video.duration\n : 0;\n }\n\n set(type, percentage) {\n this[`$${type}`].style.width = `${percentage * 100}%`;\n if (type === 'played') {\n this.$indicator.style.left = `calc(${percentage * 100}% - 6.5px)`;\n }\n }\n}\n","export default class Subtitle {\n constructor(art, option) {\n this.art = art;\n this.option = option;\n }\n}\n","import { secondToTime } from '../utils';\n\nexport default class Time {\n constructor(art, option) {\n this.art = art;\n this.option = option;\n this.init();\n }\n\n init() {\n this.option.ref.innerHTML = '00:00 / 00:00';\n\n this.art.on('video:canplay', () => {\n this.option.ref.innerHTML = this.getTime();\n });\n\n this.art.on('video:timeupdate', () => {\n this.option.ref.innerHTML = this.getTime();\n });\n\n this.art.on('video:seeking', () => {\n this.option.ref.innerHTML = this.getTime();\n });\n }\n\n getTime() {\n const { player } = this.art;\n return `${secondToTime(player.currentTime())} / ${secondToTime(player.duration())}`;\n }\n}\n","import { append, setStorage, getStorage, clamp } from '../utils';\nimport icons from '../icons';\n\nexport default class Volume {\n constructor(art, option) {\n this.art = art;\n this.option = option;\n this.isDroging = false;\n this.init();\n }\n\n init() {\n const { events: { proxy }, player } = this.art;\n this.$volume = append(this.option.ref, icons.volume);\n this.$volumeClose = append(this.option.ref, icons.volumeClose);\n this.$volumePanel = append(this.option.ref, '
');\n this.$volumeHandle = append(this.$volumePanel, '
');\n this.$volumeClose.style.display = 'none';\n\n const volume = getStorage('volume');\n this.setVolumeHandle(volume);\n player.volume(volume);\n\n proxy(this.$volume, 'click', () => {\n this.$volume.style.display = 'none';\n this.$volumeClose.style.display = 'block';\n setStorage('volume', player.volume());\n player.volume(0);\n });\n\n proxy(this.$volumeClose, 'click', () => {\n this.$volume.style.display = 'block';\n this.$volumeClose.style.display = 'none';\n });\n\n proxy(this.option.ref, 'mouseenter', () => {\n this.$volumePanel.classList.add('art-volume-panel-hover');\n\n // TODO\n setTimeout(() => {\n this.setVolumeHandle(player.volume());\n }, 200);\n });\n\n proxy(this.option.ref, 'mouseleave', () => {\n this.$volumePanel.classList.remove('art-volume-panel-hover');\n });\n\n proxy(this.$volumePanel, 'click', event => {\n this.volumeChangeFromEvent(event);\n });\n\n proxy(this.$volumeHandle, 'mousedown', () => {\n this.isDroging = true;\n });\n\n proxy(this.$volumeHandle, 'mousemove', event => {\n if (this.isDroging) {\n this.volumeChangeFromEvent(event);\n }\n });\n\n proxy(document, 'mouseup', () => {\n if (this.isDroging) {\n this.isDroging = false;\n }\n });\n\n this.art.on('video:volumechange', () => {\n const percentage = player.volume();\n this.setVolumeHandle(percentage);\n if (percentage === 0) {\n this.$volume.style.display = 'none';\n this.$volumeClose.style.display = 'block';\n } else {\n this.$volume.style.display = 'block';\n this.$volumeClose.style.display = 'none';\n }\n });\n }\n\n volumeChangeFromEvent(event) {\n const { player } = this.art;\n const { left: panelLeft, width: panelWidth } = this.$volumePanel.getBoundingClientRect();\n const { width: handleWidth } = this.$volumeHandle.getBoundingClientRect();\n const percentage = clamp(event.x - panelLeft - handleWidth / 2, 0, panelWidth - handleWidth / 2) / (panelWidth - handleWidth);\n setStorage('volume', percentage);\n player.volume(percentage);\n }\n\n setVolumeHandle(percentage = 0.7) {\n const { width: panelWidth } = this.$volumePanel.getBoundingClientRect();\n const { width: handleWidth } = this.$volumeHandle.getBoundingClientRect();\n const width = handleWidth / 2 + (panelWidth - handleWidth) * percentage - handleWidth / 2;\n this.$volumeHandle.style.left = `${width}px`;\n }\n}\n","export default class Setting {\n constructor(art, option) {\n this.art = art;\n this.option = option;\n }\n}\n","export default class Thumbnails {\n constructor(art, option) {\n this.art = art;\n this.option = option;\n this.init();\n }\n\n init() {\n const {\n refs: { $progress },\n events: { proxy }\n } = this.art;\n\n proxy($progress, 'mousemove', event => {\n this.option.ref.style.display = 'block';\n this.showThumbnails(event);\n });\n\n proxy($progress, 'mouseout', () => {\n this.option.ref.style.display = 'none';\n });\n }\n\n showThumbnails(event) {\n const { $progress } = this.art.refs;\n const { width: posWidth } = this.getPosFromEvent(event);\n const { url, height, width, number, column } = this.art.option.thumbnails;\n const perWidth = $progress.clientWidth / number;\n const perIndex = Math.ceil(posWidth / perWidth);\n let yIndex = Math.ceil(perIndex / column);\n let xIndex = perIndex % column || column;\n\n this.option.ref.style.backgroundImage = `url(${url})`;\n this.option.ref.style.height = `${height}px`;\n this.option.ref.style.width = `${width}px`;\n this.option.ref.style.backgroundPosition = `-${--xIndex * width}px -${--yIndex * height}px`;\n\n if (posWidth <= width / 2) {\n this.option.ref.style.left = 0;\n } else if (posWidth > $progress.clientWidth - width / 2) {\n this.option.ref.style.left = `${$progress.clientWidth - width}px`;\n } else {\n this.option.ref.style.left = `${posWidth - width / 2}px`;\n }\n }\n}\n","import { secondToTime, clamp } from '../utils';\nimport validControl from '../verification/control';\nimport Danmu from './danmu';\nimport Fullscreen from './fullscreen';\nimport Pip from './pip';\nimport PlayAndPause from './playAndPause';\nimport Progress from './progress';\nimport Subtitle from './subtitle';\nimport Time from './time';\nimport Volume from './volume';\nimport Setting from './setting';\nimport Thumbnails from './thumbnails';\n\nlet id = 0;\nexport default class Controls {\n constructor(art) {\n this.art = art;\n this.$map = {\n top: [],\n left: [],\n right: []\n };\n this.init();\n this.mount();\n }\n\n init() {\n this.add({\n control: Progress,\n disable: false,\n position: 'top',\n index: 10\n });\n\n this.add({\n control: Thumbnails,\n disable: !this.art.option.thumbnails.url,\n position: 'top',\n index: 20\n });\n\n this.add({\n control: PlayAndPause,\n disable: false,\n position: 'left',\n index: 10\n });\n\n this.add({\n control: Volume,\n disable: false,\n tooltip: 'Volume',\n position: 'left',\n index: 20\n });\n\n this.add({\n control: Time,\n disable: false,\n tooltip: 'Volume',\n position: 'left',\n index: 30\n });\n\n this.add({\n control: Danmu,\n disable: false,\n tooltip: 'Danmu',\n position: 'right',\n index: 10\n });\n\n this.add({\n control: Subtitle,\n disable: false,\n tooltip: 'Subtitle',\n position: 'right',\n index: 20\n });\n\n this.add({\n control: Setting,\n disable: false,\n tooltip: 'Setting',\n position: 'right',\n index: 30\n });\n\n this.add({\n control: Pip,\n disable: false,\n tooltip: 'Pip',\n position: 'right',\n index: 40\n });\n\n this.add({\n control: Fullscreen,\n disable: false,\n tooltip: 'Fullscreen',\n position: 'right',\n index: 50\n });\n\n this.art.option.controls.forEach(item => {\n this.add(item);\n });\n }\n\n add(option) {\n validControl(option);\n if (!option.disable) {\n id++;\n const name = option.control.name.toLowerCase() || `control${id}`;\n const $control = document.createElement('div');\n $control.setAttribute('class', `art-control art-control-${name}`);\n $control.setAttribute('data-control-index', String(option.index) || id);\n option.ref = $control;\n this.commonMethod(option);\n this[name] = new option.control(this.art, option);\n this.$map[option.position].push($control);\n }\n }\n\n mount() {\n const { $progress, $controlsLeft, $controlsRight } = this.art.refs;\n Object.keys(this.$map).forEach(key => {\n this.$map[key]\n .sort(\n (a, b) =>\n Number(a.dataset.controlIndex) - Number(b.dataset.controlIndex)\n )\n .forEach($control => {\n switch (key) {\n case 'top':\n $progress.appendChild($control);\n break;\n case 'left':\n $controlsLeft.appendChild($control);\n break;\n case 'right':\n $controlsRight.appendChild($control);\n break;\n default:\n break;\n }\n });\n });\n }\n\n commonMethod(option) {\n Object.defineProperty(option.control.prototype, 'hide', {\n value: () => {\n option.ref.style.display = 'none';\n this.art.emit('control:hide', option.ref);\n }\n });\n\n Object.defineProperty(option.control.prototype, 'show', {\n value: () => {\n option.ref.style.display =\n option.position === 'top' ? 'block' : 'inline-block';\n this.art.emit('control:show', option.ref);\n }\n });\n\n Object.defineProperty(option.control.prototype, 'getPosFromEvent', {\n value: event => {\n const { $video, $progress } = this.art.refs;\n const { left } = $progress.getBoundingClientRect();\n const width = clamp(event.x - left, 0, $progress.clientWidth);\n const second = width / $progress.clientWidth * $video.duration;\n const time = secondToTime(second);\n const percentage = clamp(width / $progress.clientWidth, 0, 1);\n return { second, time, width, percentage };\n }\n });\n }\n\n show() {\n const { $player } = this.art.refs;\n $player.classList.add('controls-show');\n }\n\n hide() {\n const { $player } = this.art.refs;\n $player.classList.remove('controls-show');\n }\n}\n","import { append } from './utils';\n\nexport default class Contextmenu {\n constructor(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n const {\n option,\n i18n,\n refs,\n events: { proxy }\n } = this.art;\n\n option.contextmenu.push(\n {\n text: i18n.get('Video info'),\n click: () => {\n this.art.info.show();\n }\n },\n {\n text: 'ArtPlayer __VERSION__',\n link: 'https://github.com/zhw2590582/artplayer'\n },\n {\n text: i18n.get('Close'),\n click: () => {\n this.hide();\n }\n }\n );\n\n proxy(refs.$player, 'contextmenu', event => {\n event.preventDefault();\n this.art.isFocus = true;\n if (!refs.$contextmenu) {\n this.creatMenu();\n }\n this.show();\n this.setPos(event);\n });\n\n proxy(refs.$player, 'click', event => {\n if (refs.$contextmenu && !event.path.includes(refs.$contextmenu)) {\n this.hide();\n }\n });\n }\n\n creatMenu() {\n const {\n option,\n refs,\n events: { proxy }\n } = this.art;\n refs.$contextmenu = document.createElement('div');\n refs.$contextmenu.classList.add('artplayer-contextmenu');\n option.contextmenu.forEach(item => {\n const $menu = document.createElement('a');\n $menu.innerHTML = item.text;\n $menu.classList.add('art-menu');\n if (item.link) {\n $menu.target = '_blank';\n $menu.href = item.link;\n } else if (item.click) {\n $menu.href = '#';\n proxy($menu, 'click', event => {\n event.preventDefault();\n item.click(this.art, event);\n this.hide();\n });\n }\n append(refs.$contextmenu, $menu);\n });\n append(refs.$player, refs.$contextmenu);\n }\n\n setPos(event) {\n const { refs } = this.art;\n const mouseX = event.clientX;\n const mouseY = event.clientY;\n const { height: cHeight, width: cWidth, left: cLeft, top: cTop } = refs.$player.getBoundingClientRect();\n const { height: mHeight, width: mWidth } = refs.$contextmenu.getBoundingClientRect();\n let menuLeft = mouseX - cLeft;\n let menuTop = mouseY - cTop;\n\n if (mouseX + mWidth > cLeft + cWidth) {\n menuLeft = cWidth - mWidth;\n }\n\n if (mouseY + mHeight > cTop + cHeight) {\n menuTop = cHeight - mHeight;\n }\n\n refs.$contextmenu.style.left = `${menuLeft}px`;\n refs.$contextmenu.style.top = `${menuTop}px`;\n }\n\n hide() {\n const { refs: { $contextmenu } } = this.art;\n if ($contextmenu) {\n $contextmenu.style.display = 'none';\n this.art.emit('contextmenu:hide', $contextmenu);\n }\n }\n\n show() {\n const { refs: { $contextmenu } } = this.art;\n if ($contextmenu) {\n $contextmenu.style.display = 'block';\n this.art.emit('contextmenu:show', $contextmenu);\n }\n }\n}\n","export default class Danmu {\n constructor(art) {\n this.art = art;\n }\n}\n","import { append } from './utils';\n\nexport default class Info {\n constructor(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n const { refs: { $infoClose }, events: { proxy } } = this.art;\n proxy($infoClose, 'click', () => {\n this.hide();\n });\n }\n\n show() {\n const { $info, $infoPanel } = this.art.refs;\n $info.style.display = 'block';\n if (!$infoPanel.innerHTML) {\n append($infoPanel, this.creatInfo());\n this.getHeader();\n }\n clearTimeout(this.timer);\n this.loop();\n this.art.emit('info:show', $info);\n }\n\n creatInfo() {\n const infoHtml = [];\n\n infoHtml.push(`\n
\n
Player version:
\n
__VERSION__
\n
\n `);\n\n infoHtml.push(`\n
\n
Video url:
\n
\n
\n `);\n\n infoHtml.push(`\n
\n
Video type:
\n
\n
\n `);\n\n infoHtml.push(`\n
\n
Video size:
\n
\n
\n `);\n\n infoHtml.push(`\n
\n
Video volume:
\n
\n
\n `);\n\n infoHtml.push(`\n
\n
Video time:
\n
\n
\n `);\n\n infoHtml.push(`\n
\n
Video duration:
\n
\n
\n `);\n\n infoHtml.push(`\n
\n
Video resolution:
\n
\n x \n
\n
\n `);\n\n return infoHtml.join('');\n }\n\n getHeader() {\n const { option: { url }, refs: { $infoPanel } } = this.art;\n const types = Array.from($infoPanel.querySelectorAll('[data-head]'));\n fetch(url, {\n method: 'HEAD'\n }).then(data => {\n types.forEach(item => {\n const value = data.headers.get(item.dataset.head);\n item.innerHTML = value !== undefined ? value : 'unknown';\n });\n }).catch(() => {\n types.forEach(item => {\n item.innerHTML = 'unknown';\n });\n });\n }\n\n loop() {\n const { $infoPanel, $video } = this.art.refs;\n this.timer = setTimeout(() => {\n const types = Array.from($infoPanel.querySelectorAll('[data-video]'));\n types.forEach(item => {\n const value = $video[item.dataset.video];\n item.innerHTML = value !== undefined ? value : 'unknown';\n });\n this.loop();\n }, 1000);\n }\n\n hide() {\n const { $info } = this.art.refs;\n $info.style.display = 'none';\n clearTimeout(this.timer);\n this.art.emit('info:hide', $info);\n }\n}\n","import { errorHandle, getExt, setStyle } from './utils';\n\nexport default class Subtitle {\n constructor(art) {\n this.art = art;\n this.checkExt(this.art.option.subtitle.url);\n this.init();\n }\n\n init() {\n const {\n events: { proxy },\n option: { subtitle },\n refs: { $video, $subtitle }\n } = this.art;\n\n setStyle($subtitle, subtitle.style || {});\n const $track = document.createElement('track');\n $track.default = true;\n $track.kind = 'metadata';\n\n this.load(subtitle.url).then(data => {\n $track.src = data;\n $video.appendChild($track);\n this.art.refs.$track = $track;\n if ($video.textTracks && $video.textTracks[0]) {\n const [track] = $video.textTracks;\n proxy(track, 'cuechange', () => {\n const [cue] = track.activeCues;\n $subtitle.innerHTML = '';\n if (cue) {\n const template = document.createElement('div');\n template.appendChild(cue.getCueAsHTML());\n $subtitle.innerHTML = template.innerHTML\n .split(/\\r?\\n/)\n .map(item => `

${item}

`)\n .join('');\n }\n this.art.emit('subtitle:update', $subtitle);\n });\n }\n });\n }\n\n load(url) {\n let type;\n return fetch(url)\n .then(response => {\n type = response.headers.get('Content-Type');\n return response.text();\n })\n .then(text => {\n if ((/x-subrip/gi).test(type)) {\n return this.srtToVtt(text);\n }\n return url;\n })\n .catch(err => {\n throw err;\n });\n }\n\n srtToVtt(text) {\n const vttText = 'WEBVTT \\r\\n\\r\\n'.concat(\n text\n .replace(/\\{\\\\([ibu])\\}/g, '')\n .replace(/\\{\\\\([ibu])1\\}/g, '<$1>')\n .replace(/\\{([ibu])\\}/g, '<$1>')\n .replace(/\\{\\/([ibu])\\}/g, '')\n .replace(/(\\d\\d:\\d\\d:\\d\\d),(\\d\\d\\d)/g, '$1.$2')\n .concat('\\r\\n\\r\\n')\n );\n return URL.createObjectURL(\n new Blob([vttText], {\n type: 'text/vtt'\n })\n );\n }\n\n checkExt(url) {\n const ext = getExt(url);\n errorHandle(\n ext === 'vtt' || ext === 'srt',\n `'subtitle.url' option require 'vtt' or 'srt' format, but got '${ext}'.`\n );\n }\n\n show() {\n const { $subtitle } = this.art.refs;\n $subtitle.style.display = 'block';\n this.art.emit('subtitle:show', $subtitle);\n }\n\n hide() {\n const { $subtitle } = this.art.refs;\n $subtitle.style.display = 'none';\n this.art.emit('subtitle:hide', $subtitle);\n }\n\n switch(url) {\n const { $track } = this.art.refs;\n this.checkExt(url);\n errorHandle($track, 'You need to initialize the subtitle option first.');\n this.load(url).then(data => {\n if (url !== data) {\n $track.src = data;\n this.art.emit('subtitle:switch', url);\n }\n });\n }\n}\n","export default class Events {\n constructor(art) {\n this.art = art;\n this.destroyEvents = [];\n this.proxy = this.proxy.bind(this);\n }\n\n proxy(target, name, callback, option = {}) {\n if (Array.isArray(name)) {\n name.forEach(item => this.proxy(target, item, callback, option));\n }\n\n target.addEventListener(name, callback, option);\n this.destroyEvents.push(() => {\n target.removeEventListener(name, callback, option);\n });\n }\n\n destroy() {\n this.destroyEvents.forEach(event => event());\n }\n}\n","export default class Hotkey {\n constructor(art) {\n this.art = art;\n if (this.art.option.hotkey) {\n this.init();\n }\n }\n\n init() {\n const {\n player,\n refs: { $player },\n events: { proxy }\n } = this.art;\n\n proxy(document, 'click', event => {\n this.art.isFocus = event.path.indexOf($player) > -1;\n });\n\n proxy(window, 'keydown', event => {\n if (this.art.isFocus) {\n const tag = document.activeElement.tagName.toUpperCase();\n const editable = document.activeElement.getAttribute('contenteditable');\n if (\n tag !== 'INPUT' &&\n tag !== 'TEXTAREA' &&\n editable !== '' &&\n editable !== 'true'\n ) {\n switch (event.keyCode) {\n case 39:\n event.preventDefault();\n player.seek(player.currentTime() + 10);\n break;\n case 37:\n event.preventDefault();\n player.seek(player.currentTime() - 10);\n break;\n case 38:\n event.preventDefault();\n player.volume(player.volume() + 0.05);\n break;\n case 40:\n event.preventDefault();\n player.volume(player.volume() - 0.05);\n break;\n case 32:\n event.preventDefault();\n player.toggle();\n break;\n default:\n break;\n }\n }\n }\n });\n }\n}\n","import { append, setStyle } from './utils';\n\nlet id = 0;\nexport default class Layers {\n constructor(art) {\n this.art = art;\n this.add = this.add.bind(this);\n this.art.option.layers.forEach(this.add);\n this.init();\n }\n\n init() {\n const { refs, player, events: { proxy } } = this.art;\n proxy(refs.$layers, 'click', event => {\n if (event.path[0] === refs.$layers) {\n player.pause();\n }\n });\n }\n\n add(option, callback) {\n const { refs } = this.art;\n id++;\n\n const $layer = document.createElement('div');\n $layer.setAttribute('data-art-layer-id', id);\n $layer.setAttribute('class', `art-layer art-layer-${option.name || id}`);\n $layer.style.zIndex = option.index || id;\n append($layer, option.html);\n setStyle($layer, option.style || {});\n refs.$layers.appendChild($layer);\n this.art.emit('layers:add', $layer);\n callback && callback($layer);\n }\n\n show() {\n const { $layers } = this.art.refs;\n $layers.style.display = 'block';\n this.art.emit('layers:show', $layers);\n }\n\n hide() {\n const { $layers } = this.art.refs;\n $layers.style.display = 'none';\n this.art.emit('layers:hide', $layers);\n }\n}\n","import icons from './icons';\nimport { append } from './utils';\n\nexport default class Loading {\n constructor(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n const { option, refs: { $loading } } = this.art;\n append($loading, option.loading || icons.loading);\n }\n\n hide() {\n const { $loading } = this.art.refs;\n $loading.style.display = 'none';\n this.art.emit('loading:hide', $loading);\n }\n\n show() {\n const { $loading } = this.art.refs;\n $loading.style.display = 'flex';\n this.art.emit('loading:show', $loading);\n }\n}\n","export default class Notice {\n constructor(art) {\n this.art = art;\n this.timer = null;\n }\n\n show(msg, autoHide = true, time = 1000) {\n const { $notice } = this.art.refs;\n $notice.style.display = 'block';\n $notice.innerHTML = msg instanceof Error ? msg.message.trim() : msg;\n if (autoHide) {\n clearTimeout(this.timer);\n this.timer = setTimeout(() => {\n this.hide();\n }, time);\n }\n this.art.emit('notice:show', $notice);\n }\n\n hide() {\n const { $notice } = this.art.refs;\n $notice.style.display = 'none';\n this.art.emit('notice:hide', $notice);\n }\n}\n","import icons from './icons';\nimport { append } from './utils';\n\nexport default class Mask {\n constructor(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n const {\n player,\n refs,\n events: { proxy }\n } = this.art;\n\n append(refs.$mask, icons.playBig);\n\n proxy(refs.$mask, 'click', () => {\n player.play();\n this.hide();\n });\n }\n\n show() {\n const { $mask } = this.art.refs;\n $mask.style.display = 'block';\n this.art.emit('mask:show', $mask);\n }\n\n hide() {\n const { $mask } = this.art.refs;\n $mask.style.display = 'none';\n this.art.emit('mask:show', $mask);\n }\n}\n","import './style/index.scss';\nimport { deepMerge } from './utils';\nimport validOption from './verification/player';\nimport config from './config';\nimport Emitter from 'tiny-emitter';\nimport Template from './template';\nimport I18n from './i18n';\nimport Player from './player';\nimport Controls from './controls';\nimport Contextmenu from './contextmenu';\nimport Danmu from './danmu';\nimport Info from './info';\nimport Subtitle from './subtitle';\nimport Events from './events';\nimport Hotkey from './hotkey';\nimport Layers from './layers';\nimport Loading from './loading';\nimport Notice from './notice';\nimport Mask from './mask';\n\nlet id = 0;\nexport const instances = [];\n\nclass Artplayer extends Emitter {\n constructor(option) {\n super();\n this.emit('init:start');\n this.option = deepMerge({}, Artplayer.DEFAULTS, option);\n validOption(this.option);\n this.init();\n this.emit('init:end');\n }\n\n static get version() {\n return '__VERSION__';\n }\n\n static get config() {\n return config;\n }\n\n static get DEFAULTS() {\n return {\n container: '.artplayer',\n url: '',\n poster: '',\n thumbnails: {\n url: '',\n number: 60,\n width: 160,\n height: 90,\n column: 10\n },\n volume: 0.7,\n autoplay: false,\n loop: false,\n preload: 'auto',\n type: '',\n mimeCodec: '',\n layers: [],\n contextmenu: [],\n loading: '',\n theme: '#f00',\n hotkey: true,\n subtitle: {\n url: '',\n style: {}\n },\n controls: [],\n highlight: [],\n lang: navigator.language.toLowerCase()\n };\n }\n\n static use(Plugin) {\n const name = Plugin.name.toLowerCase();\n const installedPlugins = this.plugins || (this.plugins = {});\n if (!installedPlugins[name]) {\n const args = Array.from(arguments).slice(1);\n args.unshift(this);\n installedPlugins[name] = new Plugin(...args);\n this.prototype.emit('use', Plugin);\n }\n return this;\n }\n\n init() {\n this.isError = false;\n this.isFocus = false;\n this.isPlaying = false;\n this.refs = {};\n\n if (this.option.container instanceof Element) {\n this.refs.$container = this.option.container;\n } else {\n this.refs.$container = document.querySelector(this.option.container);\n }\n\n this.template = new Template(this);\n this.i18n = new I18n(this);\n this.notice = new Notice(this);\n this.events = new Events(this);\n this.player = new Player(this);\n this.layers = new Layers(this);\n this.controls = new Controls(this);\n this.contextmenu = new Contextmenu(this);\n this.danmu = new Danmu(this);\n this.subtitle = new Subtitle(this);\n this.info = new Info(this);\n this.loading = new Loading(this);\n this.hotkey = new Hotkey(this);\n this.mask = new Mask(this);\n\n this.id = id++;\n instances.push(this);\n return this;\n }\n\n destroy(removeHtml = false) {\n this.events.destroy();\n instances.splice(instances.indexOf(this), 1);\n if (removeHtml) {\n this.refs.$container.innerHTML = '';\n }\n this.emit('destroy');\n }\n}\n\nwindow.Artplayer = Artplayer;\nexport default Artplayer;\n"],"names":["_typeof","ArtPlayerError","message","context","Error","captureStackTrace","constructor","name","errorHandle","condition","msg","isFun","clamp","num","a","b","Math","max","min","getExt","url","includes","split","trim","toLowerCase","pop","append","parent","child","Element","appendChild","insertAdjacentHTML","lastElementChild","setStyle","element","styles","Object","keys","forEach","key","style","secondToTime","second","add0","String","hour","floor","sec","map","join","deepMerge","isObject","value","returnValue","sources","source","Array","isArray","entries","Reflect","has","getStorage","storage","JSON","parse","localStorage","getItem","setStorage","assign","setItem","stringify","validOption","option","container","poster","prototype","toString","call","thumbnails","volume","autoplay","loop","indexOf","preload","lang","type","mimeCodec","layers","contextmenu","loading","theme","hotkey","subtitle","controls","highlight","mp4","webm","ts","mediaSource","propertys","methods","events","sourceBuffer","sourceBufferList","mse","video","Template","art","init","refs","$container","innerHTML","$player","querySelector","$video","$subtitle","$bottom","$progress","$controls","$controlsLeft","$controlsRight","$layers","$loading","$notice","$mask","$info","$infoPanel","$infoClose","i18nMap","I18n","language","callback","Player","eventBind","src","proxy","i18n","notice","config","eventName","event","emit","on","show","hide","mask","promise","play","undefined","then","catch","err","console","warn","isPlaying","seek","isError","classList","add","get","destroy","pause","time","newTime","duration","currentTime","percentage","parseInt","rate","newRate","playbackRate","validControl","control","disable","position","index","Danmu","Fullscreen","Pip","icons","playBig","volumeClose","creatDomFromSvg","result","tmp","document","createElement","childNodes","PlayAndPause","player","$play","ref","$pause","display","Progress","isDroging","getLoaded","bind","getPlayed","set","$loaded","$played","$highlight","$indicator","$tip","item","left","Number","text","path","showHighlight","showTime","target","getPosFromEvent","remove","dataset","clientWidth","width","tipWidth","buffered","length","end","Subtitle","Time","getTime","Volume","$volume","$volumeClose","$volumePanel","$volumeHandle","setVolumeHandle","setTimeout","volumeChangeFromEvent","getBoundingClientRect","panelLeft","panelWidth","handleWidth","x","Setting","Thumbnails","showThumbnails","posWidth","height","number","column","perWidth","perIndex","ceil","yIndex","xIndex","backgroundImage","backgroundPosition","id","Controls","$map","top","right","mount","tooltip","$control","setAttribute","commonMethod","push","sort","controlIndex","defineProperty","Contextmenu","click","info","link","preventDefault","isFocus","$contextmenu","creatMenu","setPos","$menu","href","mouseX","clientX","mouseY","clientY","cHeight","cWidth","cLeft","cTop","mHeight","mWidth","menuLeft","menuTop","Info","creatInfo","getHeader","clearTimeout","timer","infoHtml","types","from","querySelectorAll","fetch","method","data","headers","head","checkExt","$track","default","kind","load","textTracks","track","activeCues","cue","template","getCueAsHTML","response","test","srtToVtt","vttText","concat","replace","URL","createObjectURL","Blob","ext","Events","destroyEvents","addEventListener","removeEventListener","Hotkey","window","tag","activeElement","tagName","toUpperCase","editable","getAttribute","keyCode","toggle","Layers","$layer","zIndex","html","Loading","Notice","autoHide","Mask","instances","Artplayer","DEFAULTS","danmu","removeHtml","splice","Plugin","installedPlugins","plugins","args","arguments","slice","unshift","navigator","Emitter"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"artplayer.js","sources":["../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/construct.js","../../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","../../node_modules/@babel/runtime/helpers/iterableToArray.js","../../node_modules/@babel/runtime/helpers/nonIterableSpread.js","../../node_modules/@babel/runtime/helpers/toConsumableArray.js","../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../node_modules/@babel/runtime/helpers/typeof.js","../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/inherits.js","../../node_modules/@babel/runtime/helpers/defineProperty.js","../../node_modules/@babel/runtime/helpers/objectSpread.js","../../node_modules/@babel/runtime/helpers/arrayWithHoles.js","../../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../../node_modules/@babel/runtime/helpers/nonIterableRest.js","../../node_modules/@babel/runtime/helpers/slicedToArray.js","../../node_modules/@babel/runtime/helpers/isNativeFunction.js","../../node_modules/@babel/runtime/helpers/wrapNativeSuper.js","../../src/utils/index.js","../../src/verification/player.js","../../src/config/mimeCodec.js","../../src/config/mse.js","../../src/config/video.js","../../src/config/index.js","../../node_modules/tiny-emitter/index.js","../../src/template.js","../../src/i18n.js","../../src/player.js","../../src/controls/danmu.js","../../src/controls/fullscreen.js","../../src/controls/pip.js","../../src/icons/index.js","../../src/controls/playAndPause.js","../../src/controls/progress.js","../../src/controls/subtitle.js","../../src/controls/time.js","../../src/controls/volume.js","../../src/controls/setting.js","../../src/controls/thumbnails.js","../../src/controls/index.js","../../src/contextmenu.js","../../src/danmu.js","../../src/info.js","../../src/subtitle.js","../../src/events.js","../../src/hotkey.js","../../src/layers.js","../../src/loading.js","../../src/notice.js","../../src/mask.js","../../src/index.js"],"sourcesContent":["function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nmodule.exports = _construct;","function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nmodule.exports = _arrayWithoutHoles;","function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nmodule.exports = _nonIterableSpread;","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","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) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","var defineProperty = require(\"./defineProperty\");\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nmodule.exports = _objectSpread;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nmodule.exports = _nonIterableRest;","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nmodule.exports = _isNativeFunction;","var getPrototypeOf = require(\"./getPrototypeOf\");\n\nvar setPrototypeOf = require(\"./setPrototypeOf\");\n\nvar isNativeFunction = require(\"./isNativeFunction\");\n\nvar construct = require(\"./construct\");\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\nmodule.exports = _wrapNativeSuper;","export class ArtPlayerError extends Error {\n constructor(message, context) {\n super(message);\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, context || this.constructor);\n }\n this.name = 'ArtPlayerError';\n }\n}\n\nexport function errorHandle(condition, msg) {\n const isFun = typeof condition === 'function';\n if (isFun ? !isFun() : !condition) {\n throw new ArtPlayerError(msg);\n }\n}\n\nexport function clamp(num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));\n}\n\nexport function getExt(url) {\n if (url.includes('?')) {\n return getExt(url.split('?')[0]);\n }\n\n if (url.includes('#')) {\n return getExt(url.split('#')[0]);\n }\n\n return url\n .trim()\n .toLowerCase()\n .split('.')\n .pop();\n}\n\nexport function append(parent, child) {\n if (child instanceof Element) {\n parent.appendChild(child);\n } else {\n parent.insertAdjacentHTML('beforeend', child);\n }\n return parent.lastElementChild;\n}\n\nexport function setStyle(element, styles) {\n Object.keys(styles).forEach(key => {\n element.style[key] = styles[key];\n });\n return element;\n}\n\nexport function secondToTime(second) {\n const add0 = num => (num < 10 ? `0${num}` : String(num));\n const hour = Math.floor(second / 3600);\n const min = Math.floor((second - hour * 3600) / 60);\n const sec = Math.floor(second - hour * 3600 - min * 60);\n return (hour > 0 ? [hour, min, sec] : [min, sec]).map(add0).join(':');\n}\n\nexport function deepMerge(...sources) {\n const isObject = value => value !== null && typeof value === 'object';\n let returnValue = {};\n for (const source of sources) {\n if (Array.isArray(source)) {\n if (!Array.isArray(returnValue)) {\n returnValue = [];\n }\n returnValue = [...returnValue, ...source];\n } else if (isObject(source)) {\n for (let [key, value] of Object.entries(source)) {\n if (isObject(value) && Reflect.has(returnValue, key)) {\n value = deepMerge(returnValue[key], value);\n }\n returnValue = { ...returnValue, [key]: value };\n }\n }\n }\n return returnValue;\n}\n\nexport function getStorage(key) {\n const storage = JSON.parse(localStorage.getItem('artplayer_settings')) || {};\n return key ? storage[key] : storage;\n}\n\nexport function setStorage(key, value) {\n const storage = Object.assign({}, getStorage(), {\n [key]: value\n });\n localStorage.setItem('artplayer_settings', JSON.stringify(storage));\n}\n\nexport function getType(val) {\n const { toString } = Object.prototype;\n const type = toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, '');\n return type;\n}\n","import { errorHandle, getType } from '../utils';\n\nexport default function validOption(DEFAULTS, option, path = ['option']) {\n Object.keys(DEFAULTS).forEach(key => {\n const defaultValue = DEFAULTS[key];\n const value = option[key];\n const defaultType = getType(defaultValue);\n const type = getType(value);\n errorHandle(defaultType === type, `'${path.join('.')}.${key}' require '${defaultType}' type, but got '${type}'`);\n\n if (type === 'object') {\n validOption(defaultValue, value, path.concat(key));\n }\n });\n}\n","export default {\n mp4: 'video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"',\n webm: 'video/webm; codecs=\"vorbis, vp8\"',\n ts: 'video/mp2t; codecs=\"avc1.42E01E, mp4a.40.2\"'\n};\n","export default {\n mediaSource: {\n propertys: [\n 'activeSourceBuffers',\n 'duration',\n 'readyState',\n 'sourceBuffers'\n ],\n methods: [\n 'addSourceBuffer',\n 'endOfStream',\n 'removeSourceBuffer',\n 'clearLiveSeekableRange',\n 'setLiveSeekableRange'\n ],\n events: [\n 'sourceclose',\n 'sourceended',\n 'sourceopen'\n ]\n },\n sourceBuffer: {\n propertys: [\n 'mode',\n 'updating',\n 'buffered',\n 'timestampOffset',\n 'audioTracks',\n 'videoTracks',\n 'textTracks',\n 'appendWindowStart',\n 'appendWindowEnd',\n 'trackDefaults'\n ],\n methods: [\n 'appendBuffer',\n 'appendStream',\n 'abort',\n 'remove'\n ],\n events: [\n 'abort',\n 'error',\n 'update',\n 'updateend',\n 'updatestart'\n ]\n },\n sourceBufferList: {\n propertys: [\n 'length'\n ],\n events: [\n 'addsourcebuffer',\n 'removesourcebuffer'\n ]\n }\n};\n","export default {\n propertys: [\n 'audioTracks',\n 'autoplay',\n 'buffered',\n 'controller',\n 'controls',\n 'crossOrigin',\n 'currentSrc',\n 'currentTime',\n 'defaultMuted',\n 'defaultPlaybackRate',\n 'duration',\n 'ended',\n 'error',\n 'loop',\n 'mediaGroup',\n 'muted',\n 'networkState',\n 'paused',\n 'playbackRate',\n 'played',\n 'preload',\n 'readyState',\n 'seekable',\n 'seeking',\n 'src',\n 'startDate',\n 'textTracks',\n 'videoTracks',\n 'volume'\n ],\n methods: [\n 'addTextTrack',\n 'canPlayType',\n 'load',\n 'play',\n 'pause'\n ],\n events: [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\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};\n","import mimeCodec from './mimeCodec';\nimport mse from './mse';\nimport video from './video';\n\nexport default {\n mimeCodec,\n mse,\n video\n};\n","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n","export default class Template {\n constructor(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n const { refs } = this.art;\n refs.$container.innerHTML = `\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
[x]
\n
\n
\n `;\n refs.$player = refs.$container.querySelector('.artplayer-video-player');\n refs.$video = refs.$container.querySelector('.artplayer-video');\n refs.$subtitle = refs.$container.querySelector('.artplayer-subtitle');\n refs.$bottom = refs.$container.querySelector('.artplayer-bottom');\n refs.$progress = refs.$container.querySelector('.artplayer-progress');\n refs.$controls = refs.$container.querySelector('.artplayer-controls');\n refs.$controlsLeft = refs.$container.querySelector('.artplayer-controls-left');\n refs.$controlsRight = refs.$container.querySelector('.artplayer-controls-right');\n refs.$layers = refs.$container.querySelector('.artplayer-layers');\n refs.$loading = refs.$container.querySelector('.artplayer-loading');\n refs.$notice = refs.$container.querySelector('.artplayer-notice');\n refs.$mask = refs.$container.querySelector('.artplayer-mask');\n refs.$info = refs.$container.querySelector('.artplayer-info');\n refs.$infoPanel = refs.$container.querySelector('.artplayer-info-panel');\n refs.$infoClose = refs.$container.querySelector('.artplayer-info-close');\n }\n}\n","let i18nMap = {\n 'zh-cn': {\n 'About author': '关于作者',\n 'Video info': '视频统计信息',\n 'Close': '关闭',\n 'Video load failed': '视频加载失败',\n 'Volume': '音量',\n 'Start': '开始',\n 'Pause': '暂停',\n 'Rate': '速度'\n },\n 'zh-tw': {\n 'About author': '關於作者',\n 'Video info': '影片統計訊息',\n 'Close': '關閉',\n 'Video load failed': '影片載入失敗',\n 'Volume': '音量',\n 'Start': '開始',\n 'Pause': '暫停',\n 'Rate': '速度'\n }\n};\n\nexport default class I18n {\n constructor({ option }) {\n this.option = option;\n this.init();\n }\n\n init() {\n this.language = i18nMap[this.option.lang.toLowerCase()] || {};\n }\n\n get(key) {\n return this.language[key] || key;\n }\n\n update(callback) {\n i18nMap = callback(i18nMap);\n this.init();\n }\n}\n","import { clamp, secondToTime } from './utils';\nimport config from './config';\n\nexport default class Player {\n constructor(art) {\n this.art = art;\n this.init();\n this.eventBind();\n }\n\n init() {\n const { option, refs: { $video } } = this.art;\n Object.keys(option.moreVideoAttr).forEach(key => {\n const value = option.moreVideoAttr[key];\n $video[key] = value;\n });\n $video.volume = clamp(option.volume, 0, 1);\n $video.poster = option.poster;\n $video.autoplay = option.autoplay;\n $video.src = option.url;\n }\n\n eventBind() {\n const { events: { proxy }, refs: { $player, $video }, i18n, notice } = this.art;\n\n config.video.events.forEach(eventName => {\n proxy($video, eventName, event => {\n this.art.emit(`video:${event.type}`, event);\n });\n });\n\n this.art.on('video:loadstart', () => {\n this.art.loading.show();\n });\n\n this.art.on('video:loadeddata', () => {\n this.art.loading.hide();\n });\n\n this.art.on('video:waiting', () => {\n this.art.loading.show();\n });\n\n this.art.on('video:seeking', () => {\n this.art.loading.show();\n });\n\n this.art.on('video:canplay', () => {\n this.art.controls.show();\n this.art.mask.show();\n this.art.loading.hide();\n if (this.art.option.autoplay) {\n const promise = this.play();\n if (promise !== undefined) {\n promise.then().catch(err => {\n console.warn(err);\n });\n }\n }\n });\n\n this.art.on('video:playing', () => {\n this.art.isPlaying = true;\n this.art.controls.hide();\n this.art.mask.hide();\n });\n\n this.art.on('video:pause', () => {\n this.art.isPlaying = false;\n this.art.controls.show();\n this.art.mask.show();\n });\n\n this.art.on('video:ended', () => {\n this.art.isPlaying = false;\n this.art.controls.show();\n this.art.mask.show();\n if (this.art.option.loop) {\n this.seek(0);\n this.play();\n }\n });\n\n this.art.on('video:error', () => {\n this.art.isError = true;\n this.art.isPlaying = false;\n this.art.loading.hide();\n this.art.controls.hide();\n $player.classList.add('artplayer-error');\n notice.show(i18n.get('Video load failed'), false);\n this.art.destroy();\n });\n }\n\n play() {\n const { refs: { $video }, i18n, notice } = this.art;\n const promise = $video.play();\n notice.show(i18n.get('Start'));\n this.art.emit('play', $video);\n return promise;\n }\n\n pause() {\n const { refs: { $video }, i18n, notice } = this.art;\n $video.pause();\n notice.show(i18n.get('Pause'));\n this.art.emit('pause', $video);\n }\n\n toggle() {\n if (this.art.isPlaying) {\n this.pause();\n } else {\n this.play();\n }\n }\n\n seek(time) {\n const { refs: { $video }, notice } = this.art;\n let newTime = Math.max(time, 0);\n if ($video.duration) {\n newTime = Math.min(newTime, $video.duration);\n }\n $video.currentTime = newTime;\n notice.show(`${secondToTime(newTime)} / ${secondToTime($video.duration)}`);\n this.art.emit('seek', newTime);\n }\n\n volume(percentage) {\n const { refs: { $video }, i18n, notice } = this.art;\n if (percentage !== undefined) {\n $video.volume = clamp(percentage, 0, 1);\n notice.show(`${i18n.get('Volume')}: ${parseInt($video.volume * 100)}`);\n this.art.emit('volume', $video.volume);\n }\n return $video.volume || 0;\n }\n\n currentTime() {\n return this.art.refs.$video.currentTime || 0;\n }\n\n duration() {\n return this.art.refs.$video.duration || 0;\n }\n\n playbackRate(rate) {\n const { refs: { $video }, i18n, notice } = this.art;\n const newRate = clamp(rate, 0.1, 10);\n $video.playbackRate = newRate;\n notice.show(`${i18n.get('Rate')}: ${newRate}x`);\n this.art.emit('playbackRate', newRate);\n }\n}\n","export default class Danmu {\n constructor(option) {\n this.option = option;\n }\n\n apply(art) {\n this.art = art;\n }\n}\n","export default class Fullscreen {\n constructor(option) {\n this.option = option;\n }\n\n apply(art) {\n this.art = art;\n }\n}\n","export default class Pip {\n constructor(option) {\n this.option = option;\n }\n\n apply(art) {\n this.art = art;\n }\n}\n","import loading from './loading.svg';\nimport playBig from './play-big.svg';\nimport play from './play.svg';\nimport pause from './pause.svg';\nimport volume from './volume.svg';\nimport volumeClose from './volume-close.svg';\n\nconst icons = {\n loading,\n playBig,\n play,\n pause,\n volume,\n volumeClose\n};\n\nfunction creatDomFromSvg(map) {\n const result = {};\n Object.keys(map).forEach(name => {\n const tmp = document.createElement('div');\n tmp.innerHTML = `${map[name]}`;\n [result[name]] = tmp.childNodes;\n });\n return result;\n}\n\nexport default creatDomFromSvg(icons);\n","import { append } from '../utils';\nimport icons from '../icons';\n\nexport default class PlayAndPause {\n constructor(option) {\n this.option = option;\n }\n\n apply(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n const { events: { proxy }, player } = this.art;\n\n this.$play = append(this.option.$control, icons.play);\n this.$pause = append(this.option.$control, icons.pause);\n this.$pause.style.display = 'none';\n\n proxy(this.$play, 'click', () => {\n player.play();\n });\n\n proxy(this.$pause, 'click', () => {\n player.pause();\n });\n\n this.art.on('video:playing', () => {\n this.$play.style.display = 'none';\n this.$pause.style.display = 'block';\n });\n\n this.art.on('video:pause', () => {\n this.$play.style.display = 'block';\n this.$pause.style.display = 'none';\n });\n }\n}\n","import { append } from '../utils';\n\nexport default class Progress {\n constructor(option) {\n this.option = option;\n }\n\n apply(art) {\n this.art = art;\n this.isDroging = false;\n this.getLoaded = this.getLoaded.bind(this);\n this.getPlayed = this.getPlayed.bind(this);\n this.set = this.set.bind(this);\n this.init();\n }\n\n init() {\n const {\n option: { highlight, theme },\n events: { proxy },\n refs: { $video },\n player\n } = this.art;\n\n append(\n this.option.$control,\n `\n
\n
\n
\n
\n
\n
\n
\n `\n );\n\n this.$loaded = this.option.$control.querySelector('.art-progress-loaded');\n this.$played = this.option.$control.querySelector('.art-progress-played');\n this.$highlight = this.option.$control.querySelector('.art-progress-highlight');\n this.$indicator = this.option.$control.querySelector('.art-progress-indicator');\n this.$tip = this.option.$control.querySelector('.art-progress-tip');\n\n this.art.on('video:canplay', () => {\n this.set('loaded', this.getLoaded());\n highlight.filter(item => !item.disable).forEach(item => {\n const left = Number(item.time) / $video.duration;\n append(this.$highlight, `\n \n `\n );\n });\n });\n\n this.art.on('video:progress', () => {\n this.set('loaded', this.getLoaded());\n });\n\n this.art.on('video:timeupdate', () => {\n this.set('played', this.getPlayed());\n });\n\n this.art.on('video:ended', () => {\n this.set('played', 1);\n });\n\n proxy(this.option.$control, 'mousemove', event => {\n this.$tip.style.display = 'block';\n if (event.path.indexOf(this.$highlight) > -1) {\n this.showHighlight(event);\n } else {\n this.showTime(event);\n }\n });\n\n proxy(this.option.$control, 'mouseout', () => {\n this.$tip.style.display = 'none';\n });\n\n proxy(this.option.$control, 'click', event => {\n if (event.target !== this.$indicator) {\n const { second, percentage } = this.getPosFromEvent(event);\n this.set('played', percentage);\n player.seek(second);\n }\n });\n\n proxy(this.$indicator, 'mousedown', () => {\n this.isDroging = true;\n });\n\n proxy(document, 'mousemove', event => {\n if (this.isDroging) {\n const { second, percentage } = this.getPosFromEvent(event);\n this.$indicator.classList.add('show-indicator');\n this.set('played', percentage);\n player.seek(second);\n }\n });\n\n proxy(document, 'mouseup', () => {\n if (this.isDroging) {\n this.isDroging = false;\n this.$indicator.classList.remove('show-indicator');\n }\n });\n }\n\n showHighlight(event) {\n const { $video } = this.art.refs;\n const { text, time } = event.target.dataset;\n this.$tip.innerHTML = text;\n const left =\n Number(time) / $video.duration * this.option.$control.clientWidth +\n event.target.clientWidth / 2 -\n this.$tip.clientWidth / 2;\n this.$tip.style.left = `${left}px`;\n }\n\n showTime(event) {\n const { width, time } = this.getPosFromEvent(event);\n const tipWidth = this.$tip.clientWidth;\n this.$tip.innerHTML = time;\n if (width <= tipWidth / 2) {\n this.$tip.style.left = 0;\n } else if (width > this.option.$control.clientWidth - tipWidth / 2) {\n this.$tip.style.left = `${this.option.$control.clientWidth - tipWidth}px`;\n } else {\n this.$tip.style.left = `${width - tipWidth / 2}px`;\n }\n }\n\n getPlayed() {\n const { $video } = this.art.refs;\n return $video.currentTime / $video.duration;\n }\n\n getLoaded() {\n const { $video } = this.art.refs;\n return $video.buffered.length\n ? $video.buffered.end($video.buffered.length - 1) / $video.duration\n : 0;\n }\n\n set(type, percentage) {\n this[`$${type}`].style.width = `${percentage * 100}%`;\n if (type === 'played') {\n this.$indicator.style.left = `calc(${percentage * 100}% - 6.5px)`;\n }\n }\n}\n","export default class Subtitle {\n constructor(option) {\n this.option = option;\n }\n\n apply(art) {\n this.art = art;\n }\n}\n","import { secondToTime } from '../utils';\n\nexport default class Time {\n constructor(option) {\n this.option = option;\n }\n\n apply(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n this.option.$control.innerHTML = '00:00 / 00:00';\n\n this.art.on('video:canplay', () => {\n this.option.$control.innerHTML = this.getTime();\n });\n\n this.art.on('video:timeupdate', () => {\n this.option.$control.innerHTML = this.getTime();\n });\n\n this.art.on('video:seeking', () => {\n this.option.$control.innerHTML = this.getTime();\n });\n }\n\n getTime() {\n const { player } = this.art;\n return `${secondToTime(player.currentTime())} / ${secondToTime(player.duration())}`;\n }\n}\n","import { append, setStorage, getStorage, clamp } from '../utils';\nimport icons from '../icons';\n\nexport default class Volume {\n constructor(option) {\n this.option = option;\n }\n\n apply(art) {\n this.art = art;\n this.isDroging = false;\n this.init();\n }\n\n init() {\n const { events: { proxy }, player } = this.art;\n this.$volume = append(this.option.$control, icons.volume);\n this.$volumeClose = append(this.option.$control, icons.volumeClose);\n this.$volumePanel = append(this.option.$control, '
');\n this.$volumeHandle = append(this.$volumePanel, '
');\n this.$volumeClose.style.display = 'none';\n\n const volume = getStorage('volume');\n this.setVolumeHandle(volume);\n player.volume(volume);\n\n proxy(this.$volume, 'click', () => {\n this.$volume.style.display = 'none';\n this.$volumeClose.style.display = 'block';\n setStorage('volume', player.volume());\n player.volume(0);\n });\n\n proxy(this.$volumeClose, 'click', () => {\n this.$volume.style.display = 'block';\n this.$volumeClose.style.display = 'none';\n player.volume(getStorage('volume'));\n });\n\n proxy(this.option.$control, 'mouseenter', () => {\n this.$volumePanel.classList.add('art-volume-panel-hover');\n\n // TODO\n setTimeout(() => {\n this.setVolumeHandle(player.volume());\n }, 200);\n });\n\n proxy(this.option.$control, 'mouseleave', () => {\n this.$volumePanel.classList.remove('art-volume-panel-hover');\n });\n\n proxy(this.$volumePanel, 'click', event => {\n this.volumeChangeFromEvent(event);\n });\n\n proxy(this.$volumeHandle, 'mousedown', () => {\n this.isDroging = true;\n });\n\n proxy(this.$volumeHandle, 'mousemove', event => {\n if (this.isDroging) {\n this.volumeChangeFromEvent(event);\n }\n });\n\n proxy(document, 'mouseup', () => {\n if (this.isDroging) {\n this.isDroging = false;\n }\n });\n\n this.art.on('video:volumechange', () => {\n const percentage = player.volume();\n this.setVolumeHandle(percentage);\n if (percentage === 0) {\n this.$volume.style.display = 'none';\n this.$volumeClose.style.display = 'block';\n } else {\n this.$volume.style.display = 'block';\n this.$volumeClose.style.display = 'none';\n }\n });\n }\n\n volumeChangeFromEvent(event) {\n const { player } = this.art;\n const { left: panelLeft, width: panelWidth } = this.$volumePanel.getBoundingClientRect();\n const { width: handleWidth } = this.$volumeHandle.getBoundingClientRect();\n const percentage = clamp(event.x - panelLeft - handleWidth / 2, 0, panelWidth - handleWidth / 2) / (panelWidth - handleWidth);\n setStorage('volume', percentage);\n player.volume(percentage);\n }\n\n setVolumeHandle(percentage = 0.7) {\n const { width: panelWidth } = this.$volumePanel.getBoundingClientRect();\n const { width: handleWidth } = this.$volumeHandle.getBoundingClientRect();\n const width = handleWidth / 2 + (panelWidth - handleWidth) * percentage - handleWidth / 2;\n this.$volumeHandle.style.left = `${width}px`;\n }\n}\n","export default class Setting {\n constructor(option) {\n this.option = option;\n }\n\n apply(art) {\n this.art = art;\n }\n}\n","export default class Thumbnails {\n constructor(option) {\n this.option = option;\n }\n\n apply(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n const {\n refs: { $progress },\n events: { proxy }\n } = this.art;\n\n proxy($progress, 'mousemove', event => {\n this.option.$control.style.display = 'block';\n this.showThumbnails(event);\n });\n\n proxy($progress, 'mouseout', () => {\n this.option.$control.style.display = 'none';\n });\n }\n\n showThumbnails(event) {\n const { $progress } = this.art.refs;\n const { width: posWidth } = this.getPosFromEvent(event);\n const { url, height, width, number, column } = this.art.option.thumbnails;\n const perWidth = $progress.clientWidth / number;\n const perIndex = Math.ceil(posWidth / perWidth);\n let yIndex = Math.ceil(perIndex / column);\n let xIndex = perIndex % column || column;\n\n this.option.$control.style.backgroundImage = `url(${url})`;\n this.option.$control.style.height = `${height}px`;\n this.option.$control.style.width = `${width}px`;\n this.option.$control.style.backgroundPosition = `-${--xIndex * width}px -${--yIndex * height}px`;\n\n if (posWidth <= width / 2) {\n this.option.$control.style.left = 0;\n } else if (posWidth > $progress.clientWidth - width / 2) {\n this.option.$control.style.left = `${$progress.clientWidth - width}px`;\n } else {\n this.option.$control.style.left = `${posWidth - width / 2}px`;\n }\n }\n}\n","import { secondToTime, clamp } from '../utils';\nimport Danmu from './danmu';\nimport Fullscreen from './fullscreen';\nimport Pip from './pip';\nimport PlayAndPause from './playAndPause';\nimport Progress from './progress';\nimport Subtitle from './subtitle';\nimport Time from './time';\nimport Volume from './volume';\nimport Setting from './setting';\nimport Thumbnails from './thumbnails';\n\nlet id = 0;\nexport default class Controls {\n constructor(art) {\n this.art = art;\n this.$map = {\n top: [],\n left: [],\n right: []\n };\n this.init();\n this.mount();\n }\n\n init() {\n this.add(new Progress({\n disable: false,\n position: 'top',\n index: 10\n }));\n\n this.add(new Thumbnails({\n disable: !this.art.option.thumbnails.url,\n position: 'top',\n index: 20\n }));\n\n this.add(new PlayAndPause({\n disable: false,\n position: 'left',\n index: 10\n }));\n\n this.add(new Volume({\n disable: false,\n position: 'left',\n index: 20\n }));\n\n this.add(new Time({\n disable: false,\n position: 'left',\n index: 30\n }));\n\n this.add(new Danmu({\n disable: false,\n position: 'right',\n index: 10\n }));\n\n this.add(new Subtitle({\n disable: false,\n position: 'right',\n index: 20\n }));\n\n this.add(new Setting({\n disable: false,\n position: 'right',\n index: 30\n }));\n\n this.add(new Pip({\n disable: false,\n position: 'right',\n index: 40\n }));\n\n this.add(new Fullscreen({\n disable: false,\n position: 'right',\n index: 50\n }));\n\n this.art.option.controls.filter(item => !item.disable).forEach(item => {\n this.add(item);\n });\n }\n\n add(control) {\n const { option } = control;\n if (!option.disable) {\n id++;\n const name = control.constructor.name.toLowerCase() || `control${id}`;\n const $control = document.createElement('div');\n $control.setAttribute('class', `art-control art-control-${name}`);\n $control.setAttribute('data-control-index', String(option.index) || id);\n option.$control = $control;\n this.commonMethod(control);\n this.$map[option.position].push($control);\n control.apply(this.art);\n this[name] = control;\n }\n }\n\n mount() {\n const { $progress, $controlsLeft, $controlsRight } = this.art.refs;\n Object.keys(this.$map).forEach(key => {\n this.$map[key]\n .sort(\n (a, b) =>\n Number(a.dataset.controlIndex) - Number(b.dataset.controlIndex)\n )\n .forEach($control => {\n switch (key) {\n case 'top':\n $progress.appendChild($control);\n break;\n case 'left':\n $controlsLeft.appendChild($control);\n break;\n case 'right':\n $controlsRight.appendChild($control);\n break;\n default:\n break;\n }\n });\n });\n }\n\n commonMethod(control) {\n Object.defineProperty(control, 'hide', {\n value: () => {\n control.option.$control.style.display = 'none';\n this.art.emit('control:hide', control.option.$control);\n }\n });\n\n Object.defineProperty(control, 'show', {\n value: () => {\n control.option.$control.style.display = 'block';\n this.art.emit('control:show', control.option.$control);\n }\n });\n\n Object.defineProperty(control, 'getPosFromEvent', {\n value: event => {\n const { $video, $progress } = this.art.refs;\n const { left } = $progress.getBoundingClientRect();\n const width = clamp(event.x - left, 0, $progress.clientWidth);\n const second = width / $progress.clientWidth * $video.duration;\n const time = secondToTime(second);\n const percentage = clamp(width / $progress.clientWidth, 0, 1);\n return { second, time, width, percentage };\n }\n });\n }\n\n show() {\n const { $player } = this.art.refs;\n $player.classList.add('controls-show');\n }\n\n hide() {\n const { $player } = this.art.refs;\n $player.classList.remove('controls-show');\n }\n}\n","import { append, setStyle } from './utils';\n\nlet id = 0;\nexport default class Contextmenu {\n constructor(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n const {\n option,\n i18n,\n refs,\n events: { proxy }\n } = this.art;\n\n option.contextmenu.push(\n {\n name: 'info',\n html: i18n.get('Video info'),\n click: () => {\n this.art.info.show();\n }\n },\n {\n name: 'version',\n html: 'ArtPlayer __VERSION__'\n },\n {\n name: 'close',\n html: i18n.get('Close'),\n click: () => {\n this.hide();\n }\n }\n );\n\n proxy(refs.$player, 'contextmenu', event => {\n event.preventDefault();\n this.art.isFocus = true;\n if (!refs.$contextmenu) {\n this.creatMenu();\n }\n this.show();\n this.setPos(event);\n });\n\n proxy(refs.$player, 'click', event => {\n if (refs.$contextmenu && !event.path.includes(refs.$contextmenu)) {\n this.hide();\n }\n });\n }\n\n creatMenu() {\n const {\n option,\n refs,\n events: { proxy }\n } = this.art;\n refs.$contextmenu = document.createElement('div');\n refs.$contextmenu.classList.add('artplayer-contextmenu');\n option.contextmenu.forEach(item => {\n id++;\n const $menu = document.createElement('div');\n $menu.setAttribute('data-art-menu-id', id);\n $menu.setAttribute('class', `art-menu art-menu-${item.name || id}`);\n append($menu, item.html);\n setStyle($menu, item.style || {});\n if (item.click) {\n proxy($menu, 'click', event => {\n event.preventDefault();\n item.click(this.art, event);\n this.hide();\n this.art.emit('contextmenu:click', $menu);\n });\n }\n append(refs.$contextmenu, $menu);\n });\n append(refs.$player, refs.$contextmenu);\n }\n\n setPos(event) {\n const { refs } = this.art;\n const mouseX = event.clientX;\n const mouseY = event.clientY;\n const { height: cHeight, width: cWidth, left: cLeft, top: cTop } = refs.$player.getBoundingClientRect();\n const { height: mHeight, width: mWidth } = refs.$contextmenu.getBoundingClientRect();\n let menuLeft = mouseX - cLeft;\n let menuTop = mouseY - cTop;\n\n if (mouseX + mWidth > cLeft + cWidth) {\n menuLeft = cWidth - mWidth;\n }\n\n if (mouseY + mHeight > cTop + cHeight) {\n menuTop = cHeight - mHeight;\n }\n\n refs.$contextmenu.style.left = `${menuLeft}px`;\n refs.$contextmenu.style.top = `${menuTop}px`;\n }\n\n hide() {\n const { refs: { $contextmenu } } = this.art;\n if ($contextmenu) {\n $contextmenu.style.display = 'none';\n this.art.emit('contextmenu:hide', $contextmenu);\n }\n }\n\n show() {\n const { refs: { $contextmenu } } = this.art;\n if ($contextmenu) {\n $contextmenu.style.display = 'block';\n this.art.emit('contextmenu:show', $contextmenu);\n }\n }\n}\n","export default class Danmu {\n constructor(art) {\n this.art = art;\n }\n}\n","import { append } from './utils';\n\nexport default class Info {\n constructor(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n const { refs: { $infoClose }, events: { proxy } } = this.art;\n proxy($infoClose, 'click', () => {\n this.hide();\n });\n }\n\n show() {\n const { $info, $infoPanel } = this.art.refs;\n $info.style.display = 'block';\n if (!$infoPanel.innerHTML) {\n append($infoPanel, this.creatInfo());\n this.getHeader();\n }\n clearTimeout(this.timer);\n this.loop();\n this.art.emit('info:show', $info);\n }\n\n creatInfo() {\n const infoHtml = [];\n\n infoHtml.push(`\n
\n
Player version:
\n
__VERSION__
\n
\n `);\n\n infoHtml.push(`\n
\n
Video url:
\n
\n
\n `);\n\n infoHtml.push(`\n
\n
Video type:
\n
loading...
\n
\n `);\n\n infoHtml.push(`\n
\n
Video size:
\n
loading...
\n
\n `);\n\n infoHtml.push(`\n
\n
Video volume:
\n
\n
\n `);\n\n infoHtml.push(`\n
\n
Video time:
\n
\n
\n `);\n\n infoHtml.push(`\n
\n
Video duration:
\n
\n
\n `);\n\n infoHtml.push(`\n
\n
Video resolution:
\n
\n x \n
\n
\n `);\n\n return infoHtml.join('');\n }\n\n getHeader() {\n const { option: { url }, refs: { $infoPanel } } = this.art;\n const types = Array.from($infoPanel.querySelectorAll('[data-head]'));\n fetch(url, {\n method: 'HEAD'\n }).then(data => {\n types.forEach(item => {\n const value = data.headers.get(item.dataset.head);\n item.innerHTML = value !== undefined ? value : 'unknown';\n });\n }).catch(() => {\n types.forEach(item => {\n item.innerHTML = 'unknown';\n });\n });\n }\n\n loop() {\n const { $infoPanel, $video } = this.art.refs;\n this.timer = setTimeout(() => {\n const types = Array.from($infoPanel.querySelectorAll('[data-video]'));\n types.forEach(item => {\n const value = $video[item.dataset.video];\n item.innerHTML = value !== undefined ? value : 'unknown';\n });\n this.loop();\n }, 1000);\n }\n\n hide() {\n const { $info } = this.art.refs;\n $info.style.display = 'none';\n clearTimeout(this.timer);\n this.art.emit('info:hide', $info);\n }\n}\n","import { errorHandle, getExt, setStyle } from './utils';\n\nexport default class Subtitle {\n constructor(art) {\n this.art = art;\n\n const { url } = this.art.option.subtitle;\n if (url) {\n this.checkExt(url);\n this.init();\n }\n }\n\n init() {\n const {\n events: { proxy },\n option: { subtitle },\n refs: { $video, $subtitle }\n } = this.art;\n\n setStyle($subtitle, subtitle.style || {});\n const $track = document.createElement('track');\n $track.default = true;\n $track.kind = 'metadata';\n\n this.load(subtitle.url).then(data => {\n $track.src = data;\n $video.appendChild($track);\n this.art.refs.$track = $track;\n if ($video.textTracks && $video.textTracks[0]) {\n const [track] = $video.textTracks;\n proxy(track, 'cuechange', () => {\n const [cue] = track.activeCues;\n $subtitle.innerHTML = '';\n if (cue) {\n const template = document.createElement('div');\n template.appendChild(cue.getCueAsHTML());\n $subtitle.innerHTML = template.innerHTML\n .split(/\\r?\\n/)\n .map(item => `

${item}

`)\n .join('');\n }\n this.art.emit('subtitle:update', $subtitle);\n });\n }\n });\n }\n\n load(url) {\n let type;\n return fetch(url)\n .then(response => {\n type = response.headers.get('Content-Type');\n return response.text();\n })\n .then(text => {\n if ((/x-subrip/gi).test(type)) {\n return this.srtToVtt(text);\n }\n return url;\n })\n .catch(err => {\n throw err;\n });\n }\n\n srtToVtt(text) {\n const vttText = 'WEBVTT \\r\\n\\r\\n'.concat(\n text\n .replace(/\\{\\\\([ibu])\\}/g, '')\n .replace(/\\{\\\\([ibu])1\\}/g, '<$1>')\n .replace(/\\{([ibu])\\}/g, '<$1>')\n .replace(/\\{\\/([ibu])\\}/g, '')\n .replace(/(\\d\\d:\\d\\d:\\d\\d),(\\d\\d\\d)/g, '$1.$2')\n .concat('\\r\\n\\r\\n')\n );\n return URL.createObjectURL(\n new Blob([vttText], {\n type: 'text/vtt'\n })\n );\n }\n\n checkExt(url) {\n const ext = getExt(url);\n errorHandle(\n ext === 'vtt' || ext === 'srt',\n `'subtitle.url' option require 'vtt' or 'srt' format, but got '${ext}'.`\n );\n }\n\n show() {\n const { $subtitle } = this.art.refs;\n $subtitle.style.display = 'block';\n this.art.emit('subtitle:show', $subtitle);\n }\n\n hide() {\n const { $subtitle } = this.art.refs;\n $subtitle.style.display = 'none';\n this.art.emit('subtitle:hide', $subtitle);\n }\n\n switch(url) {\n const { $track } = this.art.refs;\n this.checkExt(url);\n errorHandle($track, 'You need to initialize the subtitle option first.');\n this.load(url).then(data => {\n if (url !== data) {\n $track.src = data;\n this.art.emit('subtitle:switch', url);\n }\n });\n }\n}\n","export default class Events {\n constructor(art) {\n this.art = art;\n this.destroyEvents = [];\n this.proxy = this.proxy.bind(this);\n }\n\n proxy(target, name, callback, option = {}) {\n if (Array.isArray(name)) {\n name.forEach(item => this.proxy(target, item, callback, option));\n }\n\n target.addEventListener(name, callback, option);\n this.destroyEvents.push(() => {\n target.removeEventListener(name, callback, option);\n });\n }\n\n destroy() {\n this.destroyEvents.forEach(event => event());\n }\n}\n","export default class Hotkey {\n constructor(art) {\n this.art = art;\n if (this.art.option.hotkey) {\n this.init();\n }\n }\n\n init() {\n const {\n player,\n refs: { $player },\n events: { proxy }\n } = this.art;\n\n proxy(document, 'click', event => {\n this.art.isFocus = event.path.indexOf($player) > -1;\n });\n\n proxy(window, 'keydown', event => {\n if (this.art.isFocus) {\n const tag = document.activeElement.tagName.toUpperCase();\n const editable = document.activeElement.getAttribute('contenteditable');\n if (\n tag !== 'INPUT' &&\n tag !== 'TEXTAREA' &&\n editable !== '' &&\n editable !== 'true'\n ) {\n switch (event.keyCode) {\n case 39:\n event.preventDefault();\n player.seek(player.currentTime() + 10);\n break;\n case 37:\n event.preventDefault();\n player.seek(player.currentTime() - 10);\n break;\n case 38:\n event.preventDefault();\n player.volume(player.volume() + 0.05);\n break;\n case 40:\n event.preventDefault();\n player.volume(player.volume() - 0.05);\n break;\n case 32:\n event.preventDefault();\n player.toggle();\n break;\n default:\n break;\n }\n }\n }\n });\n }\n}\n","import { append, setStyle } from './utils';\n\nlet id = 0;\nexport default class Layers {\n constructor(art) {\n this.art = art;\n this.add = this.add.bind(this);\n this.art.option.layers.forEach(this.add);\n this.init();\n }\n\n init() {\n const { refs, player, events: { proxy } } = this.art;\n proxy(refs.$layers, 'click', event => {\n if (event.path[0] === refs.$layers) {\n player.pause();\n }\n });\n }\n\n add(option, callback) {\n const { refs } = this.art;\n id++;\n\n const $layer = document.createElement('div');\n $layer.setAttribute('data-art-layer-id', id);\n $layer.setAttribute('class', `art-layer art-layer-${option.name || id}`);\n $layer.style.zIndex = option.index || id;\n append($layer, option.html);\n setStyle($layer, option.style || {});\n refs.$layers.appendChild($layer);\n this.art.emit('layers:add', $layer);\n callback && callback($layer);\n }\n\n show() {\n const { $layers } = this.art.refs;\n $layers.style.display = 'block';\n this.art.emit('layers:show', $layers);\n }\n\n hide() {\n const { $layers } = this.art.refs;\n $layers.style.display = 'none';\n this.art.emit('layers:hide', $layers);\n }\n}\n","import icons from './icons';\nimport { append } from './utils';\n\nexport default class Loading {\n constructor(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n const { option, refs: { $loading } } = this.art;\n append($loading, option.loading || icons.loading);\n }\n\n hide() {\n const { $loading } = this.art.refs;\n $loading.style.display = 'none';\n this.art.emit('loading:hide', $loading);\n }\n\n show() {\n const { $loading } = this.art.refs;\n $loading.style.display = 'flex';\n this.art.emit('loading:show', $loading);\n }\n}\n","export default class Notice {\n constructor(art) {\n this.art = art;\n this.timer = null;\n }\n\n show(msg, autoHide = true, time = 1000) {\n const { $notice } = this.art.refs;\n $notice.style.display = 'block';\n $notice.innerHTML = msg instanceof Error ? msg.message.trim() : msg;\n if (autoHide) {\n clearTimeout(this.timer);\n this.timer = setTimeout(() => {\n this.hide();\n }, time);\n }\n this.art.emit('notice:show', $notice);\n }\n\n hide() {\n const { $notice } = this.art.refs;\n $notice.style.display = 'none';\n this.art.emit('notice:hide', $notice);\n }\n}\n","import icons from './icons';\nimport { append } from './utils';\n\nexport default class Mask {\n constructor(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n const {\n player,\n refs,\n events: { proxy }\n } = this.art;\n\n append(refs.$mask, icons.playBig);\n\n proxy(refs.$mask, 'click', () => {\n player.play();\n this.hide();\n });\n }\n\n show() {\n const { $mask } = this.art.refs;\n $mask.style.display = 'block';\n this.art.emit('mask:show', $mask);\n }\n\n hide() {\n const { $mask } = this.art.refs;\n $mask.style.display = 'none';\n this.art.emit('mask:show', $mask);\n }\n}\n","import './style';\nimport { deepMerge } from './utils';\nimport validOption from './verification/player';\nimport config from './config';\nimport Emitter from 'tiny-emitter';\nimport Template from './template';\nimport I18n from './i18n';\nimport Player from './player';\nimport Controls from './controls';\nimport Contextmenu from './contextmenu';\nimport Danmu from './danmu';\nimport Info from './info';\nimport Subtitle from './subtitle';\nimport Events from './events';\nimport Hotkey from './hotkey';\nimport Layers from './layers';\nimport Loading from './loading';\nimport Notice from './notice';\nimport Mask from './mask';\n\nlet id = 0;\nexport const instances = [];\n\nclass Artplayer extends Emitter {\n constructor(option) {\n super();\n this.emit('init:start');\n this.option = deepMerge({}, Artplayer.DEFAULTS, option);\n validOption(Artplayer.DEFAULTS, this.option);\n this.init();\n this.emit('init:end');\n }\n\n static get version() {\n return '__VERSION__';\n }\n\n static get config() {\n return config;\n }\n\n static get DEFAULTS() {\n return {\n container: '.artplayer',\n url: '',\n poster: '',\n volume: 0.7,\n thumbnails: {\n url: '',\n number: 60,\n width: 160,\n height: 90,\n column: 10\n },\n autoplay: false,\n loop: false,\n type: '',\n mimeCodec: '',\n layers: [],\n contextmenu: [],\n loading: '',\n theme: '#f00',\n hotkey: true,\n subtitle: {\n url: '',\n style: {}\n },\n controls: [],\n highlight: [],\n moreVideoAttr: {\n 'controls': false,\n 'preload': 'auto',\n 'webkit-playsinline': true,\n 'playsinline': true\n },\n lang: navigator.language.toLowerCase()\n };\n }\n\n static use(Plugin) {\n const name = Plugin.name.toLowerCase();\n const installedPlugins = this.plugins || (this.plugins = {});\n if (!installedPlugins[name]) {\n const args = Array.from(arguments).slice(1);\n args.unshift(this);\n installedPlugins[name] = new Plugin(...args);\n this.prototype.emit('use', Plugin);\n }\n return this;\n }\n\n init() {\n this.isError = false;\n this.isFocus = false;\n this.isPlaying = false;\n this.refs = {};\n\n if (this.option.container instanceof Element) {\n this.refs.$container = this.option.container;\n } else {\n this.refs.$container = document.querySelector(this.option.container);\n }\n\n this.template = new Template(this);\n this.i18n = new I18n(this);\n this.notice = new Notice(this);\n this.events = new Events(this);\n this.player = new Player(this);\n this.layers = new Layers(this);\n this.controls = new Controls(this);\n this.contextmenu = new Contextmenu(this);\n this.danmu = new Danmu(this);\n this.subtitle = new Subtitle(this);\n this.info = new Info(this);\n this.loading = new Loading(this);\n this.hotkey = new Hotkey(this);\n this.mask = new Mask(this);\n\n this.id = id++;\n instances.push(this);\n return this;\n }\n\n destroy(removeHtml = false) {\n this.events.destroy();\n instances.splice(instances.indexOf(this), 1);\n if (removeHtml) {\n this.refs.$container.innerHTML = '';\n }\n this.emit('destroy');\n }\n}\n\nwindow.Artplayer = Artplayer;\nexport default Artplayer;\n"],"names":["_typeof","ArtPlayerError","message","context","Error","captureStackTrace","constructor","name","errorHandle","condition","msg","isFun","clamp","num","a","b","Math","max","min","getExt","url","includes","split","trim","toLowerCase","pop","append","parent","child","Element","appendChild","insertAdjacentHTML","lastElementChild","setStyle","element","styles","Object","keys","forEach","key","style","secondToTime","second","add0","String","hour","floor","sec","map","join","deepMerge","isObject","value","returnValue","sources","source","Array","isArray","entries","Reflect","has","getStorage","storage","JSON","parse","localStorage","getItem","setStorage","assign","setItem","stringify","getType","val","toString","prototype","type","call","slice","replace","validOption","DEFAULTS","option","path","defaultValue","defaultType","concat","mp4","webm","ts","mediaSource","propertys","methods","events","sourceBuffer","sourceBufferList","mimeCodec","mse","video","Template","art","init","refs","$container","innerHTML","$player","querySelector","$video","$subtitle","$bottom","$progress","$controls","$controlsLeft","$controlsRight","$layers","$loading","$notice","$mask","$info","$infoPanel","$infoClose","i18nMap","I18n","language","lang","callback","Player","eventBind","moreVideoAttr","volume","poster","autoplay","src","proxy","i18n","notice","config","eventName","event","emit","on","loading","show","hide","controls","mask","promise","play","undefined","then","catch","err","console","warn","isPlaying","loop","seek","isError","classList","add","get","destroy","pause","time","newTime","duration","currentTime","percentage","parseInt","rate","newRate","playbackRate","Danmu","Fullscreen","Pip","icons","playBig","volumeClose","creatDomFromSvg","result","tmp","document","createElement","childNodes","PlayAndPause","player","$play","$control","$pause","display","Progress","isDroging","getLoaded","bind","getPlayed","set","highlight","theme","$loaded","$played","$highlight","$indicator","$tip","filter","item","disable","left","Number","text","indexOf","showHighlight","showTime","target","getPosFromEvent","remove","dataset","clientWidth","width","tipWidth","buffered","length","end","Subtitle","Time","getTime","Volume","$volume","$volumeClose","$volumePanel","$volumeHandle","setVolumeHandle","setTimeout","volumeChangeFromEvent","getBoundingClientRect","panelLeft","panelWidth","handleWidth","x","Setting","Thumbnails","showThumbnails","posWidth","thumbnails","height","number","column","perWidth","perIndex","ceil","yIndex","xIndex","backgroundImage","backgroundPosition","id","Controls","$map","top","right","mount","position","index","control","setAttribute","commonMethod","push","apply","sort","controlIndex","defineProperty","Contextmenu","contextmenu","html","click","info","preventDefault","isFocus","$contextmenu","creatMenu","setPos","$menu","mouseX","clientX","mouseY","clientY","cHeight","cWidth","cLeft","cTop","mHeight","mWidth","menuLeft","menuTop","Info","creatInfo","getHeader","clearTimeout","timer","infoHtml","types","from","querySelectorAll","fetch","method","data","headers","head","subtitle","checkExt","$track","default","kind","load","textTracks","track","activeCues","cue","template","getCueAsHTML","response","test","srtToVtt","vttText","URL","createObjectURL","Blob","ext","Events","destroyEvents","addEventListener","removeEventListener","Hotkey","hotkey","window","tag","activeElement","tagName","toUpperCase","editable","getAttribute","keyCode","toggle","Layers","layers","$layer","zIndex","Loading","Notice","autoHide","Mask","instances","Artplayer","container","danmu","removeHtml","splice","Plugin","installedPlugins","plugins","args","arguments","unshift","navigator","Emitter"],"mappings":"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"} \ No newline at end of file diff --git a/src/contextmenu.js b/src/contextmenu.js index b1d1123c9..11bb67c7a 100644 --- a/src/contextmenu.js +++ b/src/contextmenu.js @@ -1,5 +1,6 @@ -import { append } from './utils'; +import { append, setStyle } from './utils'; +let id = 0; export default class Contextmenu { constructor(art) { this.art = art; @@ -16,17 +17,19 @@ export default class Contextmenu { option.contextmenu.push( { - text: i18n.get('Video info'), + name: 'info', + html: i18n.get('Video info'), click: () => { this.art.info.show(); } }, { - text: 'ArtPlayer __VERSION__', - link: 'https://github.com/zhw2590582/artplayer' + name: 'version', + html: 'ArtPlayer __VERSION__' }, { - text: i18n.get('Close'), + name: 'close', + html: i18n.get('Close'), click: () => { this.hide(); } @@ -59,18 +62,18 @@ export default class Contextmenu { refs.$contextmenu = document.createElement('div'); refs.$contextmenu.classList.add('artplayer-contextmenu'); option.contextmenu.forEach(item => { - const $menu = document.createElement('a'); - $menu.innerHTML = item.text; - $menu.classList.add('art-menu'); - if (item.link) { - $menu.target = '_blank'; - $menu.href = item.link; - } else if (item.click) { - $menu.href = '#'; + id++; + const $menu = document.createElement('div'); + $menu.setAttribute('data-art-menu-id', id); + $menu.setAttribute('class', `art-menu art-menu-${item.name || id}`); + append($menu, item.html); + setStyle($menu, item.style || {}); + if (item.click) { proxy($menu, 'click', event => { event.preventDefault(); item.click(this.art, event); this.hide(); + this.art.emit('contextmenu:click', $menu); }); } append(refs.$contextmenu, $menu); diff --git a/src/controls/danmu.js b/src/controls/danmu.js index 60d52c5db..22f1eee26 100644 --- a/src/controls/danmu.js +++ b/src/controls/danmu.js @@ -1,6 +1,9 @@ export default class Danmu { - constructor(art, option) { - this.art = art; + constructor(option) { this.option = option; } + + apply(art) { + this.art = art; + } } diff --git a/src/controls/fullscreen.js b/src/controls/fullscreen.js index 0a7160298..a18790f3e 100644 --- a/src/controls/fullscreen.js +++ b/src/controls/fullscreen.js @@ -1,6 +1,9 @@ export default class Fullscreen { - constructor(art, option) { - this.art = art; + constructor(option) { this.option = option; } + + apply(art) { + this.art = art; + } } diff --git a/src/controls/index.js b/src/controls/index.js index 2cdaf30c9..1b0646194 100644 --- a/src/controls/index.js +++ b/src/controls/index.js @@ -1,5 +1,4 @@ import { secondToTime, clamp } from '../utils'; -import validControl from '../verification/control'; import Danmu from './danmu'; import Fullscreen from './fullscreen'; import Pip from './pip'; @@ -25,100 +24,84 @@ export default class Controls { } init() { - this.add({ - control: Progress, + this.add(new Progress({ disable: false, position: 'top', index: 10 - }); + })); - this.add({ - control: Thumbnails, + this.add(new Thumbnails({ disable: !this.art.option.thumbnails.url, position: 'top', index: 20 - }); + })); - this.add({ - control: PlayAndPause, + this.add(new PlayAndPause({ disable: false, position: 'left', index: 10 - }); + })); - this.add({ - control: Volume, + this.add(new Volume({ disable: false, - tooltip: 'Volume', position: 'left', index: 20 - }); + })); - this.add({ - control: Time, + this.add(new Time({ disable: false, - tooltip: 'Volume', position: 'left', index: 30 - }); + })); - this.add({ - control: Danmu, + this.add(new Danmu({ disable: false, - tooltip: 'Danmu', position: 'right', index: 10 - }); + })); - this.add({ - control: Subtitle, + this.add(new Subtitle({ disable: false, - tooltip: 'Subtitle', position: 'right', index: 20 - }); + })); - this.add({ - control: Setting, + this.add(new Setting({ disable: false, - tooltip: 'Setting', position: 'right', index: 30 - }); + })); - this.add({ - control: Pip, + this.add(new Pip({ disable: false, - tooltip: 'Pip', position: 'right', index: 40 - }); + })); - this.add({ - control: Fullscreen, + this.add(new Fullscreen({ disable: false, - tooltip: 'Fullscreen', position: 'right', index: 50 - }); + })); - this.art.option.controls.forEach(item => { + this.art.option.controls.filter(item => !item.disable).forEach(item => { this.add(item); }); } - add(option) { - validControl(option); + add(control) { + const { option } = control; if (!option.disable) { id++; - const name = option.control.name.toLowerCase() || `control${id}`; + const name = control.constructor.name.toLowerCase() || `control${id}`; const $control = document.createElement('div'); $control.setAttribute('class', `art-control art-control-${name}`); $control.setAttribute('data-control-index', String(option.index) || id); - option.ref = $control; - this.commonMethod(option); - this[name] = new option.control(this.art, option); + option.$control = $control; + this.commonMethod(control); this.$map[option.position].push($control); + control.apply(this.art); + this[name] = control; } } @@ -148,23 +131,22 @@ export default class Controls { }); } - commonMethod(option) { - Object.defineProperty(option.control.prototype, 'hide', { + commonMethod(control) { + Object.defineProperty(control, 'hide', { value: () => { - option.ref.style.display = 'none'; - this.art.emit('control:hide', option.ref); + control.option.$control.style.display = 'none'; + this.art.emit('control:hide', control.option.$control); } }); - Object.defineProperty(option.control.prototype, 'show', { + Object.defineProperty(control, 'show', { value: () => { - option.ref.style.display = - option.position === 'top' ? 'block' : 'inline-block'; - this.art.emit('control:show', option.ref); + control.option.$control.style.display = 'block'; + this.art.emit('control:show', control.option.$control); } }); - Object.defineProperty(option.control.prototype, 'getPosFromEvent', { + Object.defineProperty(control, 'getPosFromEvent', { value: event => { const { $video, $progress } = this.art.refs; const { left } = $progress.getBoundingClientRect(); diff --git a/src/controls/pip.js b/src/controls/pip.js index 5896941c3..c004b406e 100644 --- a/src/controls/pip.js +++ b/src/controls/pip.js @@ -1,6 +1,9 @@ export default class Pip { - constructor(art, option) { - this.art = art; + constructor(option) { this.option = option; } + + apply(art) { + this.art = art; + } } diff --git a/src/controls/playAndPause.js b/src/controls/playAndPause.js index 3c7e3d9a3..93023b72b 100644 --- a/src/controls/playAndPause.js +++ b/src/controls/playAndPause.js @@ -2,17 +2,20 @@ import { append } from '../utils'; import icons from '../icons'; export default class PlayAndPause { - constructor(art, option) { - this.art = art; + constructor(option) { this.option = option; + } + + apply(art) { + this.art = art; this.init(); } init() { const { events: { proxy }, player } = this.art; - this.$play = append(this.option.ref, icons.play); - this.$pause = append(this.option.ref, icons.pause); + this.$play = append(this.option.$control, icons.play); + this.$pause = append(this.option.$control, icons.pause); this.$pause.style.display = 'none'; proxy(this.$play, 'click', () => { diff --git a/src/controls/progress.js b/src/controls/progress.js index 8ab787508..ad96bf7c5 100644 --- a/src/controls/progress.js +++ b/src/controls/progress.js @@ -1,9 +1,12 @@ import { append } from '../utils'; export default class Progress { - constructor(art, option) { - this.art = art; + constructor(option) { this.option = option; + } + + apply(art) { + this.art = art; this.isDroging = false; this.getLoaded = this.getLoaded.bind(this); this.getPlayed = this.getPlayed.bind(this); @@ -20,7 +23,7 @@ export default class Progress { } = this.art; append( - this.option.ref, + this.option.$control, `
@@ -32,15 +35,15 @@ export default class Progress { ` ); - this.$loaded = this.option.ref.querySelector('.art-progress-loaded'); - this.$played = this.option.ref.querySelector('.art-progress-played'); - this.$highlight = this.option.ref.querySelector('.art-progress-highlight'); - this.$indicator = this.option.ref.querySelector('.art-progress-indicator'); - this.$tip = this.option.ref.querySelector('.art-progress-tip'); + this.$loaded = this.option.$control.querySelector('.art-progress-loaded'); + this.$played = this.option.$control.querySelector('.art-progress-played'); + this.$highlight = this.option.$control.querySelector('.art-progress-highlight'); + this.$indicator = this.option.$control.querySelector('.art-progress-indicator'); + this.$tip = this.option.$control.querySelector('.art-progress-tip'); this.art.on('video:canplay', () => { this.set('loaded', this.getLoaded()); - highlight.forEach(item => { + highlight.filter(item => !item.disable).forEach(item => { const left = Number(item.time) / $video.duration; append(this.$highlight, ` @@ -61,7 +64,7 @@ export default class Progress { this.set('played', 1); }); - proxy(this.option.ref, 'mousemove', event => { + proxy(this.option.$control, 'mousemove', event => { this.$tip.style.display = 'block'; if (event.path.indexOf(this.$highlight) > -1) { this.showHighlight(event); @@ -70,11 +73,11 @@ export default class Progress { } }); - proxy(this.option.ref, 'mouseout', () => { + proxy(this.option.$control, 'mouseout', () => { this.$tip.style.display = 'none'; }); - proxy(this.option.ref, 'click', event => { + proxy(this.option.$control, 'click', event => { if (event.target !== this.$indicator) { const { second, percentage } = this.getPosFromEvent(event); this.set('played', percentage); @@ -108,7 +111,7 @@ export default class Progress { const { text, time } = event.target.dataset; this.$tip.innerHTML = text; const left = - Number(time) / $video.duration * this.option.ref.clientWidth + + Number(time) / $video.duration * this.option.$control.clientWidth + event.target.clientWidth / 2 - this.$tip.clientWidth / 2; this.$tip.style.left = `${left}px`; @@ -120,8 +123,8 @@ export default class Progress { this.$tip.innerHTML = time; if (width <= tipWidth / 2) { this.$tip.style.left = 0; - } else if (width > this.option.ref.clientWidth - tipWidth / 2) { - this.$tip.style.left = `${this.option.ref.clientWidth - tipWidth}px`; + } else if (width > this.option.$control.clientWidth - tipWidth / 2) { + this.$tip.style.left = `${this.option.$control.clientWidth - tipWidth}px`; } else { this.$tip.style.left = `${width - tipWidth / 2}px`; } diff --git a/src/controls/setting.js b/src/controls/setting.js index dbfe052bc..bb3fcc633 100644 --- a/src/controls/setting.js +++ b/src/controls/setting.js @@ -1,6 +1,9 @@ export default class Setting { - constructor(art, option) { - this.art = art; + constructor(option) { this.option = option; } + + apply(art) { + this.art = art; + } } diff --git a/src/controls/subtitle.js b/src/controls/subtitle.js index ba319063e..b2343ea0e 100644 --- a/src/controls/subtitle.js +++ b/src/controls/subtitle.js @@ -1,6 +1,9 @@ export default class Subtitle { - constructor(art, option) { - this.art = art; + constructor(option) { this.option = option; } + + apply(art) { + this.art = art; + } } diff --git a/src/controls/thumbnails.js b/src/controls/thumbnails.js index 4bad3634e..d22382a9c 100644 --- a/src/controls/thumbnails.js +++ b/src/controls/thumbnails.js @@ -1,7 +1,10 @@ export default class Thumbnails { - constructor(art, option) { - this.art = art; + constructor(option) { this.option = option; + } + + apply(art) { + this.art = art; this.init(); } @@ -12,12 +15,12 @@ export default class Thumbnails { } = this.art; proxy($progress, 'mousemove', event => { - this.option.ref.style.display = 'block'; + this.option.$control.style.display = 'block'; this.showThumbnails(event); }); proxy($progress, 'mouseout', () => { - this.option.ref.style.display = 'none'; + this.option.$control.style.display = 'none'; }); } @@ -30,17 +33,17 @@ export default class Thumbnails { let yIndex = Math.ceil(perIndex / column); let xIndex = perIndex % column || column; - this.option.ref.style.backgroundImage = `url(${url})`; - this.option.ref.style.height = `${height}px`; - this.option.ref.style.width = `${width}px`; - this.option.ref.style.backgroundPosition = `-${--xIndex * width}px -${--yIndex * height}px`; + this.option.$control.style.backgroundImage = `url(${url})`; + this.option.$control.style.height = `${height}px`; + this.option.$control.style.width = `${width}px`; + this.option.$control.style.backgroundPosition = `-${--xIndex * width}px -${--yIndex * height}px`; if (posWidth <= width / 2) { - this.option.ref.style.left = 0; + this.option.$control.style.left = 0; } else if (posWidth > $progress.clientWidth - width / 2) { - this.option.ref.style.left = `${$progress.clientWidth - width}px`; + this.option.$control.style.left = `${$progress.clientWidth - width}px`; } else { - this.option.ref.style.left = `${posWidth - width / 2}px`; + this.option.$control.style.left = `${posWidth - width / 2}px`; } } } diff --git a/src/controls/time.js b/src/controls/time.js index 4ed4f7cbc..62411e430 100644 --- a/src/controls/time.js +++ b/src/controls/time.js @@ -1,25 +1,28 @@ import { secondToTime } from '../utils'; export default class Time { - constructor(art, option) { - this.art = art; + constructor(option) { this.option = option; + } + + apply(art) { + this.art = art; this.init(); } init() { - this.option.ref.innerHTML = '00:00 / 00:00'; + this.option.$control.innerHTML = '00:00 / 00:00'; this.art.on('video:canplay', () => { - this.option.ref.innerHTML = this.getTime(); + this.option.$control.innerHTML = this.getTime(); }); this.art.on('video:timeupdate', () => { - this.option.ref.innerHTML = this.getTime(); + this.option.$control.innerHTML = this.getTime(); }); this.art.on('video:seeking', () => { - this.option.ref.innerHTML = this.getTime(); + this.option.$control.innerHTML = this.getTime(); }); } diff --git a/src/controls/volume.js b/src/controls/volume.js index d182dc0de..413c7ba2d 100644 --- a/src/controls/volume.js +++ b/src/controls/volume.js @@ -2,18 +2,21 @@ import { append, setStorage, getStorage, clamp } from '../utils'; import icons from '../icons'; export default class Volume { - constructor(art, option) { - this.art = art; + constructor(option) { this.option = option; + } + + apply(art) { + this.art = art; this.isDroging = false; this.init(); } init() { const { events: { proxy }, player } = this.art; - this.$volume = append(this.option.ref, icons.volume); - this.$volumeClose = append(this.option.ref, icons.volumeClose); - this.$volumePanel = append(this.option.ref, '
'); + this.$volume = append(this.option.$control, icons.volume); + this.$volumeClose = append(this.option.$control, icons.volumeClose); + this.$volumePanel = append(this.option.$control, '
'); this.$volumeHandle = append(this.$volumePanel, '
'); this.$volumeClose.style.display = 'none'; @@ -31,9 +34,10 @@ export default class Volume { proxy(this.$volumeClose, 'click', () => { this.$volume.style.display = 'block'; this.$volumeClose.style.display = 'none'; + player.volume(getStorage('volume')); }); - proxy(this.option.ref, 'mouseenter', () => { + proxy(this.option.$control, 'mouseenter', () => { this.$volumePanel.classList.add('art-volume-panel-hover'); // TODO @@ -42,7 +46,7 @@ export default class Volume { }, 200); }); - proxy(this.option.ref, 'mouseleave', () => { + proxy(this.option.$control, 'mouseleave', () => { this.$volumePanel.classList.remove('art-volume-panel-hover'); }); diff --git a/src/index.js b/src/index.js index f706bde85..03638a077 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,4 @@ -import './style/index.scss'; +import './style'; import { deepMerge } from './utils'; import validOption from './verification/player'; import config from './config'; @@ -26,7 +26,7 @@ class Artplayer extends Emitter { super(); this.emit('init:start'); this.option = deepMerge({}, Artplayer.DEFAULTS, option); - validOption(this.option); + validOption(Artplayer.DEFAULTS, this.option); this.init(); this.emit('init:end'); } @@ -44,6 +44,7 @@ class Artplayer extends Emitter { container: '.artplayer', url: '', poster: '', + volume: 0.7, thumbnails: { url: '', number: 60, @@ -51,10 +52,8 @@ class Artplayer extends Emitter { height: 90, column: 10 }, - volume: 0.7, autoplay: false, loop: false, - preload: 'auto', type: '', mimeCodec: '', layers: [], @@ -68,6 +67,12 @@ class Artplayer extends Emitter { }, controls: [], highlight: [], + moreVideoAttr: { + 'controls': false, + 'preload': 'auto', + 'webkit-playsinline': true, + 'playsinline': true + }, lang: navigator.language.toLowerCase() }; } diff --git a/src/info.js b/src/info.js index 5c7493e80..c2bd73f8d 100644 --- a/src/info.js +++ b/src/info.js @@ -45,14 +45,14 @@ export default class Info { infoHtml.push(`
Video type:
-
+
loading...
`); infoHtml.push(`
Video size:
-
+
loading...
`); diff --git a/src/player.js b/src/player.js index ff8c0a2d8..5ab541dae 100644 --- a/src/player.js +++ b/src/player.js @@ -9,13 +9,14 @@ export default class Player { } init() { - const { option } = this.art; - const { $video } = this.art.refs; - $video.controls = false; - $video.poster = option.poster; + const { option, refs: { $video } } = this.art; + Object.keys(option.moreVideoAttr).forEach(key => { + const value = option.moreVideoAttr[key]; + $video[key] = value; + }); $video.volume = clamp(option.volume, 0, 1); + $video.poster = option.poster; $video.autoplay = option.autoplay; - $video.preload = option.preload; $video.src = option.url; } diff --git a/src/style/artplayer.scss b/src/style/artplayer.scss new file mode 100644 index 000000000..1ab2ebd4a --- /dev/null +++ b/src/style/artplayer.scss @@ -0,0 +1,36 @@ +@charset "UTF-8"; + +.artplayer-video-player { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; + outline: 0; + font-family: Roboto,Arial,Helvetica,sans-serif; + color: #eee; + text-align: left; + direction: ltr; + font-size: 14px; + line-height: 1.3; + user-select: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); + touch-action: manipulation; + -ms-high-contrast-adjust: none; + + * { + box-sizing: border-box; + } + + .art-icon { + display: inline-block; + svg { + fill: #fff; + } + } + + &.artplayer-error { + .art-progress-indicator, .art-progress-tip { + display: none !important; + } + } +} \ No newline at end of file diff --git a/src/style/index.scss b/src/style/bottom.scss similarity index 62% rename from src/style/index.scss rename to src/style/bottom.scss index 1e6ef3ba2..e8e66d423 100644 --- a/src/style/index.scss +++ b/src/style/bottom.scss @@ -1,111 +1,4 @@ -@charset "UTF-8"; - .artplayer-video-player { - position: relative; - width: 100%; - height: 100%; - overflow: hidden; - outline: 0; - font-family: Roboto,Arial,Helvetica,sans-serif; - color: #eee; - text-align: left; - direction: ltr; - font-size: 14px; - line-height: 1.3; - user-select: none; - -webkit-tap-highlight-color: rgba(0,0,0,0); - touch-action: manipulation; - -ms-high-contrast-adjust: none; - - * { - box-sizing: border-box; - } - - .art-icon { - display: inline-block; - svg { - fill: #fff; - } - } - - .artplayer-video { - position: absolute; - z-index: 10; - left: 0; - top: 0; - right: 0; - bottom: 0; - width: 100%; - height: 100%; - background-color: #000; - outline: 0; - } - - .artplayer-subtitle { - position: absolute; - z-index: 20; - bottom: 40px; - width: 100%; - padding: 0 20px; - text-align: center; - color: #fff; - text-shadow: 0.5px 0.5px 0.5px rgba(0, 0, 0, 0.5); - font-size: 20px; - - p { - margin: 5px 0; - } - } - - .artplayer-layers { - position: absolute; - z-index: 30; - left: 0; - top: 0; - right: 0; - bottom: 0; - width: 100%; - height: 100%; - - .art-layer { - position: absolute; - } - } - - .artplayer-mask { - display: none; - position: absolute; - z-index: 40; - left: 0; - top: 0; - right: 0; - bottom: 0; - width: 100%; - height: 100%; - cursor: pointer; - - .art-icon-playBig { - position: absolute; - right: 30px; - bottom: 65px; - opacity: .6; - } - } - - .artplayer-loading { - display: none; - position: absolute; - z-index: 40; - left: 0; - top: 0; - right: 0; - bottom: 0; - width: 100%; - height: 100%; - align-items: center; - justify-content: center; - } - .artplayer-bottom { position: absolute; z-index: 50; @@ -226,7 +119,7 @@ background-color: rgba(0,0,0,.7); } } - + .artplayer-controls { position: relative; pointer-events: all; @@ -234,7 +127,7 @@ align-items: center; justify-content: space-between; height: 36px; - + .art-control { float: left; font-size: 12px; @@ -251,7 +144,7 @@ padding: 7px; } } - + .art-control-volume { .art-volume-panel { position: relative; @@ -260,7 +153,7 @@ height: 100%; transition: margin .2s cubic-bezier(0.4,0.0,1,1),width .2s cubic-bezier(0.4,0.0,1,1); overflow: hidden; - + .art-volume-slider-handle { position: absolute; top: 50%; @@ -270,17 +163,17 @@ border-radius: 12px; margin-top: -6px; background: #fff; - + &::before { left: -54px; background: #fff; } - + &::after { left: 6px; background: rgba(255,255,255,.2); } - + &::before, &::after { content: ''; position: absolute; @@ -291,13 +184,13 @@ width: 60px } } - + &.art-volume-panel-hover { width: 60px; } } } - + .art-control-time { padding: 0 10px; } @@ -310,87 +203,4 @@ visibility: visible; } } - - .artplayer-notice { - display: none; - font-size: 14px; - position: absolute; - z-index: 60; - left: 10px; - top: 10px; - height: 30px; - line-height: 30px; - padding: 0 10px; - border-radius: 3px; - color: #fff; - background: rgba(0, 0, 0, 0.6); - } - - .artplayer-contextmenu { - position: absolute; - z-index: 70; - left: 0; - top: 0; - width: 200px; - padding: 5px 0; - background:rgba(0, 0, 0, 0.8); - a { - font-size: 13px; - display: block; - color: #fff; - padding: 7px 10px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - text-decoration: none; - text-shadow: 0 0 2px rgba(0, 0, 0, 0.5); - - &:hover { - background-color: rgba(255,255,255,.1); - } - } - } - - .artplayer-info { - display: none; - position: absolute; - left: 10px; - top: 10px; - z-index: 80; - width: 350px; - min-height: 150px; - padding: 10px; - color: #fff; - font-size: 12px; - font-family: Noto Sans CJK SC DemiLight,Roboto,Segoe UI,Tahoma,Arial,Helvetica,sans-serif; - -webkit-font-smoothing: antialiased; - background: rgba(0,0,0,.7); - - .art-info-item { - display: flex; - margin-bottom: 5px; - .art-info-title { - width: 100px; - text-align: right; - } - - .art-info-content { - flex: 1; - padding-left: 5px; - } - } - - .artplayer-info-close { - position: absolute; - top: 5px; - right: 5px; - cursor: pointer; - } - } - - &.artplayer-error { - .art-progress-indicator, .art-progress-tip { - display: none !important; - } - } -} \ No newline at end of file +} diff --git a/src/style/contextmenu.scss b/src/style/contextmenu.scss new file mode 100644 index 000000000..e2c63b3d1 --- /dev/null +++ b/src/style/contextmenu.scss @@ -0,0 +1,32 @@ +.artplayer-video-player { + .artplayer-contextmenu { + position: absolute; + z-index: 70; + left: 0; + top: 0; + width: 200px; + padding: 5px 0; + background:rgba(0, 0, 0, 0.8); + .art-menu { + cursor: pointer; + font-size: 13px; + display: block; + color: #fff; + padding: 7px 10px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + text-shadow: 0 0 2px rgba(0, 0, 0, 0.5); + + a { + color: #fff; + text-decoration: none; + } + + &:hover { + background-color: rgba(255,255,255,.1); + } + } + } + +} diff --git a/src/style/index.js b/src/style/index.js new file mode 100644 index 000000000..50c6caa96 --- /dev/null +++ b/src/style/index.js @@ -0,0 +1,10 @@ +import './artplayer.scss'; +import './video.scss'; +import './subtitle.scss'; +import './layers.scss'; +import './mask.scss'; +import './loading.scss'; +import './bottom.scss'; +import './notice.scss'; +import './contextmenu.scss'; +import './info.scss'; diff --git a/src/style/info.scss b/src/style/info.scss new file mode 100644 index 000000000..3c306c653 --- /dev/null +++ b/src/style/info.scss @@ -0,0 +1,38 @@ +.artplayer-video-player { + .artplayer-info { + display: none; + position: absolute; + left: 10px; + top: 10px; + z-index: 80; + width: 350px; + min-height: 150px; + padding: 10px; + color: #fff; + font-size: 12px; + font-family: Noto Sans CJK SC DemiLight,Roboto,Segoe UI,Tahoma,Arial,Helvetica,sans-serif; + -webkit-font-smoothing: antialiased; + background: rgba(0,0,0,.7); + + .art-info-item { + display: flex; + margin-bottom: 5px; + .art-info-title { + width: 100px; + text-align: right; + } + + .art-info-content { + flex: 1; + padding-left: 5px; + } + } + + .artplayer-info-close { + position: absolute; + top: 5px; + right: 5px; + cursor: pointer; + } + } +} diff --git a/src/style/layers.scss b/src/style/layers.scss new file mode 100644 index 000000000..b4cb0071a --- /dev/null +++ b/src/style/layers.scss @@ -0,0 +1,16 @@ +.artplayer-video-player { + .artplayer-layers { + position: absolute; + z-index: 30; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + + .art-layer { + position: absolute; + } + } +} diff --git a/src/style/loading.scss b/src/style/loading.scss new file mode 100644 index 000000000..09d07c21a --- /dev/null +++ b/src/style/loading.scss @@ -0,0 +1,15 @@ +.artplayer-video-player { + .artplayer-loading { + display: none; + position: absolute; + z-index: 40; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + align-items: center; + justify-content: center; + } +} diff --git a/src/style/mask.scss b/src/style/mask.scss new file mode 100644 index 000000000..48a31a0f2 --- /dev/null +++ b/src/style/mask.scss @@ -0,0 +1,21 @@ +.artplayer-video-player { + .artplayer-mask { + display: none; + position: absolute; + z-index: 40; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + cursor: pointer; + + .art-icon-playBig { + position: absolute; + right: 30px; + bottom: 65px; + opacity: .6; + } + } +} diff --git a/src/style/notice.scss b/src/style/notice.scss new file mode 100644 index 000000000..46bc48d8c --- /dev/null +++ b/src/style/notice.scss @@ -0,0 +1,16 @@ +.artplayer-video-player { + .artplayer-notice { + display: none; + font-size: 14px; + position: absolute; + z-index: 60; + left: 10px; + top: 10px; + height: 30px; + line-height: 30px; + padding: 0 10px; + border-radius: 3px; + color: #fff; + background: rgba(0, 0, 0, 0.6); + } +} diff --git a/src/style/subtitle.scss b/src/style/subtitle.scss new file mode 100644 index 000000000..ec1852ee2 --- /dev/null +++ b/src/style/subtitle.scss @@ -0,0 +1,17 @@ +.artplayer-video-player { + .artplayer-subtitle { + position: absolute; + z-index: 20; + bottom: 40px; + width: 100%; + padding: 0 20px; + text-align: center; + color: #fff; + text-shadow: 0.5px 0.5px 0.5px rgba(0, 0, 0, 0.5); + font-size: 20px; + + p { + margin: 5px 0; + } + } +} diff --git a/src/style/video.scss b/src/style/video.scss new file mode 100644 index 000000000..c183b7ebf --- /dev/null +++ b/src/style/video.scss @@ -0,0 +1,14 @@ +.artplayer-video-player { + .artplayer-video { + position: absolute; + z-index: 10; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + background-color: #000; + outline: 0; + } +} diff --git a/src/subtitle.js b/src/subtitle.js index 1508c7b79..9add80f0e 100644 --- a/src/subtitle.js +++ b/src/subtitle.js @@ -3,8 +3,12 @@ import { errorHandle, getExt, setStyle } from './utils'; export default class Subtitle { constructor(art) { this.art = art; - this.checkExt(this.art.option.subtitle.url); - this.init(); + + const { url } = this.art.option.subtitle; + if (url) { + this.checkExt(url); + this.init(); + } } init() { diff --git a/src/template.js b/src/template.js index 26a366e87..74be032a0 100644 --- a/src/template.js +++ b/src/template.js @@ -8,7 +8,7 @@ export default class Template { const { refs } = this.art; refs.$container.innerHTML = `
- +
diff --git a/src/utils/index.js b/src/utils/index.js index 1f0312780..39d247a23 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -91,3 +91,9 @@ export function setStorage(key, value) { }); localStorage.setItem('artplayer_settings', JSON.stringify(storage)); } + +export function getType(val) { + const { toString } = Object.prototype; + const type = toString.call(val).slice(8, -1).toLowerCase().replace(/\s/g, ''); + return type; +} diff --git a/src/verification/control.js b/src/verification/control.js index 5fef76c2a..a5c56ab7c 100644 --- a/src/verification/control.js +++ b/src/verification/control.js @@ -1,11 +1,6 @@ import { errorHandle } from '../utils'; export default function validControl(option) { - errorHandle( - typeof option.control === 'function', - `'control' option require 'function' type, but got '${typeof option.control}'.` - ); - errorHandle( typeof option.disable === 'boolean', `'disable' option require 'boolean' type, but got '${typeof option.disable}'.` diff --git a/src/verification/player.js b/src/verification/player.js index 560bf2e0b..bf22a6a89 100644 --- a/src/verification/player.js +++ b/src/verification/player.js @@ -1,108 +1,15 @@ -import { errorHandle } from '../utils'; +import { errorHandle, getType } from '../utils'; -export default function validOption(option) { - errorHandle( - option.container, - '\'container\' option is required.' - ); +export default function validOption(DEFAULTS, option, path = ['option']) { + Object.keys(DEFAULTS).forEach(key => { + const defaultValue = DEFAULTS[key]; + const value = option[key]; + const defaultType = getType(defaultValue); + const type = getType(value); + errorHandle(defaultType === type, `'${path.join('.')}.${key}' require '${defaultType}' type, but got '${type}'`); - errorHandle( - option.url, - '\'url\' option is required.' - ); - - errorHandle( - typeof option.container === 'string' || option.container instanceof Element, - `'container' option require 'string' or 'Element' type, but got '${typeof option.container}'.` - ); - - errorHandle( - typeof option.url === 'string', - `'url' option require 'string' type, but got '${typeof option.url}'.` - ); - - errorHandle( - typeof option.poster === 'string', - `'poster' option require 'string' type, but got '${typeof option.poster}'.` - ); - - errorHandle( - Object.prototype.toString.call(option.thumbnails) === '[object Object]', - `'thumbnails' option require 'object' type, but got '${typeof option.thumbnails}'.` - ); - - errorHandle( - typeof option.volume === 'number', - `'volume' option require 'number' type, but got '${typeof option.volume}'.` - ); - - errorHandle( - typeof option.autoplay === 'boolean', - `'autoplay' option require 'boolean' type, but got '${typeof option.autoplay}'.` - ); - - errorHandle( - typeof option.loop === 'boolean', - `'loop' option require 'boolean' type, but got '${typeof option.loop}'.` - ); - - errorHandle( - ['none', 'metadata', 'auto'].indexOf(option.preload) > -1, - `'preload' option require one of 'none、metadata、auto', but got '${option.preload}.` - ); - - errorHandle( - typeof option.lang === 'string', - `'lang' option require 'string' type, but got '${typeof option.lang}'.` - ); - - errorHandle( - typeof option.type === 'string', - `'type' option require 'string' type, but got '${typeof option.type}'.` - ); - - errorHandle( - typeof option.mimeCodec === 'string', - `'mimeCodec' option require 'string' type, but got '${typeof option.mimeCodec}'.` - ); - - errorHandle( - Array.isArray(option.layers), - `'layers' option require 'array' type, but got '${typeof option.layers}'.` - ); - - errorHandle( - Array.isArray(option.contextmenu), - `'contextmenu' option require 'array' type, but got '${typeof option.contextmenu}'.` - ); - - errorHandle( - typeof option.loading === 'string' || option.loading instanceof Element, - `'loading' option require 'string' type, but got '${typeof option.loading}'.` - ); - - errorHandle( - typeof option.theme === 'string', - `'theme' option require 'string' type, but got '${typeof option.theme}'.` - ); - - errorHandle( - typeof option.hotkey === 'boolean', - `'hotkey' option require 'boolean' type, but got '${typeof option.hotkey}'.` - ); - - errorHandle( - Object.prototype.toString.call(option.subtitle) === '[object Object]', - `'subtitle' option require 'object' type, but got '${typeof option.subtitle}'.` - ); - - errorHandle( - Array.isArray(option.controls), - `'controls' option require 'array' type, but got '${typeof option.controls}'.` - ); - - errorHandle( - Array.isArray(option.highlight), - `'highlight' option require 'array' type, but got '${typeof option.highlight}'.` - ); + if (type === 'object') { + validOption(defaultValue, value, path.concat(key)); + } + }); }