xgplayer 2.32.2 → 2.32.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/controls/danmu.js +3 -1
- package/browser/controls/errorRetry.js +1 -1
- package/browser/controls/nativeTextTrack.js +1 -1
- package/browser/core_player.js +1 -1
- package/browser/core_player.js.map +1 -1
- package/browser/index.js +7 -5
- package/browser/index.js.map +1 -1
- package/browser/simple_player.js +1 -1
- package/browser/simple_player.js.map +1 -1
- package/dist/controls/danmu.js +3 -1
- package/dist/controls/errorRetry.js +1 -1
- package/dist/controls/nativeTextTrack.js +1 -1
- package/dist/core_player.js +6 -7
- package/dist/core_player.js.map +1 -1
- package/dist/index.js +2881 -1887
- package/dist/index.js.map +1 -1
- package/dist/index.min.css +1 -0
- package/dist/index.min.js +2 -0
- package/dist/index.min.js.map +1 -0
- package/dist/simple_player.js +6 -7
- package/dist/simple_player.js.map +1 -1
- package/es/controls/danmu.js +3 -1
- package/es/controls/errorRetry.js +1 -1
- package/es/controls/nativeTextTrack.js +1 -1
- package/es/core_player.js +1 -1
- package/es/core_player.js.map +1 -1
- package/es/index.js +7 -5
- package/es/index.js.map +1 -1
- package/es/simple_player.js +1 -1
- package/es/simple_player.js.map +1 -1
- package/package.json +11 -2
- package/types/index.d.ts +0 -11
- package/postcss.config.js +0 -7
- package/src/bind/airplay.js +0 -10
- package/src/bind/cssFullscreen.js +0 -10
- package/src/bind/danmu.js +0 -10
- package/src/bind/definition.js +0 -10
- package/src/bind/download.js +0 -10
- package/src/bind/enter.js +0 -8
- package/src/bind/error.js +0 -8
- package/src/bind/errorRetry.js +0 -8
- package/src/bind/flex.js +0 -8
- package/src/bind/fullscreen.js +0 -10
- package/src/bind/i18n.js +0 -8
- package/src/bind/keyboard.js +0 -8
- package/src/bind/loading.js +0 -8
- package/src/bind/localPreview.js +0 -10
- package/src/bind/memoryPlay.js +0 -10
- package/src/bind/miniplayer.js +0 -10
- package/src/bind/mobile.js +0 -8
- package/src/bind/nativeTextTrack.js +0 -8
- package/src/bind/pc.js +0 -8
- package/src/bind/pip.js +0 -10
- package/src/bind/play.js +0 -10
- package/src/bind/playNext.js +0 -10
- package/src/bind/playbackRate.js +0 -8
- package/src/bind/poster.js +0 -8
- package/src/bind/progress.js +0 -8
- package/src/bind/reload.js +0 -10
- package/src/bind/replay.js +0 -10
- package/src/bind/rotate.js +0 -10
- package/src/bind/screenShot.js +0 -10
- package/src/bind/stallCheck.js +0 -8
- package/src/bind/start.js +0 -10
- package/src/bind/textTrack.js +0 -8
- package/src/bind/time.js +0 -8
- package/src/bind/volume.js +0 -10
- package/src/controls/airplay.js +0 -20
- package/src/controls/cssFullscreen.js +0 -49
- package/src/controls/danmu.js +0 -75
- package/src/controls/definition.js +0 -13
- package/src/controls/download.js +0 -28
- package/src/controls/errorRetry.js +0 -132
- package/src/controls/fullscreen.js +0 -145
- package/src/controls/keyboard.js +0 -214
- package/src/controls/localPreview.js +0 -32
- package/src/controls/memoryPlay.js +0 -14
- package/src/controls/miniplayer.js +0 -128
- package/src/controls/mobile.js +0 -100
- package/src/controls/pc.js +0 -123
- package/src/controls/pip.js +0 -52
- package/src/controls/play.js +0 -34
- package/src/controls/playNext.js +0 -29
- package/src/controls/reload.js +0 -24
- package/src/controls/replay.js +0 -30
- package/src/controls/rotate.js +0 -99
- package/src/controls/screenShot.js +0 -65
- package/src/controls/stallCheck.js +0 -38
- package/src/controls/start.js +0 -60
- package/src/controls/textTrack.js +0 -182
- package/src/controls/volume.js +0 -178
- package/src/controls.js +0 -36
- package/src/core_player.js +0 -13
- package/src/error.js +0 -74
- package/src/index.js +0 -57
- package/src/player.js +0 -553
- package/src/proxy.js +0 -495
- package/src/simple_player.js +0 -42
- package/src/skin/assets/airplay.svg +0 -1
- package/src/skin/assets/download.svg +0 -14
- package/src/skin/assets/exitCssFull.svg +0 -3
- package/src/skin/assets/exitFull.svg +0 -3
- package/src/skin/assets/loading.svg +0 -3
- package/src/skin/assets/panel.svg +0 -4
- package/src/skin/assets/pause.svg +0 -3
- package/src/skin/assets/play.svg +0 -3
- package/src/skin/assets/playNext.svg +0 -3
- package/src/skin/assets/reload.svg +0 -3
- package/src/skin/assets/replay.svg +0 -3
- package/src/skin/assets/requestCssFull.svg +0 -3
- package/src/skin/assets/requestFull.svg +0 -3
- package/src/skin/assets/rotate.svg +0 -11
- package/src/skin/assets/startPause.svg +0 -3
- package/src/skin/assets/startPlay.svg +0 -3
- package/src/skin/assets/volumeLarge.svg +0 -4
- package/src/skin/assets/volumeMuted.svg +0 -4
- package/src/skin/assets/volumeSmall.svg +0 -4
- package/src/skin/controls/airplay.js +0 -44
- package/src/skin/controls/cssFullscreen.js +0 -36
- package/src/skin/controls/danmu.js +0 -214
- package/src/skin/controls/definition.js +0 -251
- package/src/skin/controls/download.js +0 -29
- package/src/skin/controls/enter.js +0 -21
- package/src/skin/controls/error.js +0 -57
- package/src/skin/controls/flex.js +0 -13
- package/src/skin/controls/fullscreen.js +0 -43
- package/src/skin/controls/i18n.js +0 -168
- package/src/skin/controls/loading.js +0 -17
- package/src/skin/controls/localPreview.js +0 -18
- package/src/skin/controls/memoryPlay.js +0 -39
- package/src/skin/controls/miniplayer.js +0 -26
- package/src/skin/controls/nativeTextTrack.js +0 -153
- package/src/skin/controls/pip.js +0 -26
- package/src/skin/controls/play.js +0 -43
- package/src/skin/controls/playNext.js +0 -41
- package/src/skin/controls/playbackRate.js +0 -141
- package/src/skin/controls/poster.js +0 -18
- package/src/skin/controls/progress.js +0 -407
- package/src/skin/controls/reload.js +0 -29
- package/src/skin/controls/replay.js +0 -56
- package/src/skin/controls/rotate.js +0 -29
- package/src/skin/controls/screenShot.js +0 -27
- package/src/skin/controls/start.js +0 -62
- package/src/skin/controls/textTrack.js +0 -113
- package/src/skin/controls/time.js +0 -40
- package/src/skin/controls/volume.js +0 -63
- package/src/skin/index.js +0 -63
- package/src/skin/style/common/animation.scss +0 -16
- package/src/skin/style/common/svg-url.scss +0 -70
- package/src/skin/style/controls/airplay.scss +0 -35
- package/src/skin/style/controls/controls.scss +0 -40
- package/src/skin/style/controls/cssfullscreen.scss +0 -103
- package/src/skin/style/controls/danmu.scss +0 -333
- package/src/skin/style/controls/definition.scss +0 -76
- package/src/skin/style/controls/download.scss +0 -45
- package/src/skin/style/controls/enter.scss +0 -55
- package/src/skin/style/controls/error.scss +0 -34
- package/src/skin/style/controls/fullscreen.scss +0 -60
- package/src/skin/style/controls/icon.scss +0 -12
- package/src/skin/style/controls/live.scss +0 -9
- package/src/skin/style/controls/loading.scss +0 -44
- package/src/skin/style/controls/memoryPlay.scss +0 -28
- package/src/skin/style/controls/miniplayer.scss +0 -104
- package/src/skin/style/controls/pip.scss +0 -42
- package/src/skin/style/controls/placeholder.scss +0 -7
- package/src/skin/style/controls/play.scss +0 -79
- package/src/skin/style/controls/playNext.scss +0 -44
- package/src/skin/style/controls/playbackRate.scss +0 -82
- package/src/skin/style/controls/poster.scss +0 -19
- package/src/skin/style/controls/progress.scss +0 -182
- package/src/skin/style/controls/reload.scss +0 -43
- package/src/skin/style/controls/replay.scss +0 -46
- package/src/skin/style/controls/rotate.scss +0 -41
- package/src/skin/style/controls/screenShot.scss +0 -42
- package/src/skin/style/controls/start.scss +0 -78
- package/src/skin/style/controls/textTrack.scss +0 -87
- package/src/skin/style/controls/time.scss +0 -24
- package/src/skin/style/controls/tips.scss +0 -24
- package/src/skin/style/controls/videoProxy.scss +0 -6
- package/src/skin/style/controls/volume.scss +0 -143
- package/src/skin/style/index.scss +0 -88
- package/src/utils/sniffer.js +0 -47
- package/src/utils/url.js +0 -10
- package/src/utils/util.js +0 -358
- package/src/utils/xgplayerTimeRange.js +0 -17
- package/src/version.js +0 -7
- package/version.json +0 -3
- package/webpack.config.js +0 -168
package/es/simple_player.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://xgplayer/webpack/universalModuleDefinition","webpack://xgplayer/webpack/bootstrap","webpack://xgplayer/./src/utils/util.js","webpack://xgplayer/./node_modules/css-loader/lib/css-base.js","webpack://xgplayer/./node_modules/style-loader/lib/addStyles.js","webpack://xgplayer/./src/utils/sniffer.js","webpack://xgplayer/./src/error.js","webpack://xgplayer/./src/proxy.js","webpack://xgplayer/./src/player.js","webpack://xgplayer/./node_modules/es5-ext/object/is-value.js","webpack://xgplayer/./src/utils/xgplayerTimeRange.js","webpack://xgplayer/./src/skin/controls/i18n.js","webpack://xgplayer/./node_modules/type/value/is.js","webpack://xgplayer/./node_modules/event-emitter/index.js","webpack://xgplayer/./node_modules/event-emitter/all-off.js","webpack://xgplayer/./src/controls/mobile.js","webpack://xgplayer/./src/controls/pc.js","webpack://xgplayer/./src/controls/start.js","webpack://xgplayer/./src/skin/controls/start.js","webpack://xgplayer/./node_modules/d/index.js","webpack://xgplayer/./node_modules/type/plain-function/is.js","webpack://xgplayer/./node_modules/type/function/is.js","webpack://xgplayer/./node_modules/type/prototype/is.js","webpack://xgplayer/./node_modules/type/object/is.js","webpack://xgplayer/./node_modules/es5-ext/object/assign/index.js","webpack://xgplayer/./node_modules/es5-ext/object/assign/is-implemented.js","webpack://xgplayer/./node_modules/es5-ext/object/assign/shim.js","webpack://xgplayer/./node_modules/es5-ext/object/keys/index.js","webpack://xgplayer/./node_modules/es5-ext/object/keys/is-implemented.js","webpack://xgplayer/./node_modules/es5-ext/object/keys/shim.js","webpack://xgplayer/./node_modules/es5-ext/function/noop.js","webpack://xgplayer/./node_modules/es5-ext/object/valid-value.js","webpack://xgplayer/./node_modules/es5-ext/object/normalize-options.js","webpack://xgplayer/./node_modules/es5-ext/string/#/contains/index.js","webpack://xgplayer/./node_modules/es5-ext/string/#/contains/is-implemented.js","webpack://xgplayer/./node_modules/es5-ext/string/#/contains/shim.js","webpack://xgplayer/./node_modules/es5-ext/object/valid-callable.js","webpack://xgplayer/./node_modules/es5-ext/object/valid-object.js","webpack://xgplayer/./node_modules/es5-ext/object/is-object.js","webpack://xgplayer/./src/skin/style/index.scss?43d7","webpack://xgplayer/./src/skin/style/index.scss","webpack://xgplayer/./node_modules/style-loader/lib/urls.js","webpack://xgplayer/./src/skin/style/controls/start.scss?7b40","webpack://xgplayer/./src/skin/style/controls/start.scss","webpack://xgplayer/./src/controls/fullscreen.js","webpack://xgplayer/./src/controls/play.js","webpack://xgplayer/./src/controls/replay.js","webpack://xgplayer/./src/skin/controls/poster.js","webpack://xgplayer/./src/skin/controls/flex.js","webpack://xgplayer/./src/skin/controls/progress.js","webpack://xgplayer/./src/skin/controls/time.js","webpack://xgplayer/./src/skin/controls/play.js","webpack://xgplayer/./src/skin/controls/fullscreen.js","webpack://xgplayer/./src/skin/controls/loading.js","webpack://xgplayer/./src/skin/controls/replay.js","webpack://xgplayer/./src/skin/style/controls/play.scss?80f8","webpack://xgplayer/./src/skin/style/controls/play.scss","webpack://xgplayer/./src/skin/style/controls/poster.scss?b40b","webpack://xgplayer/./src/skin/style/controls/poster.scss","webpack://xgplayer/./src/skin/style/controls/placeholder.scss?b5ec","webpack://xgplayer/./src/skin/style/controls/placeholder.scss","webpack://xgplayer/./src/skin/style/controls/fullscreen.scss?66dd","webpack://xgplayer/./src/skin/style/controls/fullscreen.scss","webpack://xgplayer/./src/skin/style/controls/loading.scss?397a","webpack://xgplayer/./src/skin/style/controls/loading.scss","webpack://xgplayer/./src/skin/style/controls/progress.scss?f0bf","webpack://xgplayer/./src/skin/style/controls/progress.scss","webpack://xgplayer/./src/skin/style/controls/time.scss?b72e","webpack://xgplayer/./src/skin/style/controls/time.scss","webpack://xgplayer/./src/skin/style/controls/replay.scss?a918","webpack://xgplayer/./src/skin/style/controls/replay.scss","webpack://xgplayer/./src/simple_player.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","createDom","el","tpl","attrs","cname","dom","document","createElement","className","innerHTML","keys","forEach","item","setAttribute","hasClass","classList","Array","some","match","RegExp","addClass","replace","split","add","removeClass","remove","reg","toggleClass","findDom","sel","querySelector","e","indexOf","getElementById","slice","padStart","str","length","pad","charstr","String","len","maxlen","Math","ceil","chars","push","join","substring","format","time","isNaN","hour","floor","minute","second","event","touches","touch","changedTouches","clientX","clientY","offsetX","pageX","target","offsetLeft","offsetY","pageY","offsetTop","_target","srcElement","typeOf","obj","toString","deepCopy","dst","src","Node","concat","copyDom","nodeType","back","tagName","attributes","node","_setInterval","context","eventName","intervalFunc","frequency","_interval","setInterval","_clearInterval","clearInterval","createImgBtn","imgUrl","width","height","btn","style","backgroundImage","w","h","unit","every","Number","trim","backgroundSize","margin","isWeiXin","navigator","userAgent","toLowerCase","isUc","offInDestroy","fn","offEvent","once","onDestroy","off","on","_fn","data","getBuffered2","vbuffered","maxHoleDuration","buffered","start","end","sort","a","b","diff","buffered_2","buf2len","buf2end","XgplayerTimeRange","checkIsBrowser","setStyle","elem","error","setProperty","PresentationMode","PIP","INLINE","FULLSCREEN","checkWebkitSetPresentationMode","video","webkitSetPresentationMode","util","getBgImage","url","currentStyle","getComputedStyle","href","computeWatchDur","played","arr","begin","j","splice","min","max","watch_dur","useSourceMap","list","this","map","content","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","source","sourceRoot","cssWithMappingToString","mediaQuery","alreadyImportedModules","id","memo","stylesInDom","isOldIE","all","atob","apply","arguments","getTarget","getElement","styleTarget","HTMLIFrameElement","contentDocument","head","singleton","singletonCounter","stylesInsertedAtTop","fixUrls","addStylesToDom","styles","options","domStyle","refs","parts","addStyle","listToStyles","newStyles","base","part","css","media","insertStyleElement","insertInto","Error","lastStyleElementInsertedAtTop","insertAt","nextSibling","insertBefore","appendChild","firstChild","before","removeStyleElement","parentNode","removeChild","idx","createStyleElement","type","addAttrs","update","result","transform","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","link","rel","createLinkElement","updateLink","applyToTag","newObj","DEBUG","newList","mayRemove","textStore","replaceText","index","replacement","filter","Boolean","styleSheet","cssText","cssNode","createTextNode","childNodes","autoFixUrls","undefined","convertToAbsoluteUrls","blob","oldSrc","sniffer","os","isPc","ua","ie","firfox","chrome","opera","safari","test","isWindowsPhone","isSymbian","isAndroid","isFireFox","isTablet","isPhone","ErrorTypes","network","code","msg","remark","mse","parse","decoder","runtime","timeout","other","Errors","constructor","currentTime","duration","networkState","readyState","currentSrc","ended","errd","line","handle","version","errorCode","mediaError","playerVersion","errorType","domain","ex","arg","Proxy","_hasStart","videoConfig","controls","isShowControl","autoplay","playsinline","airplay","tabindex","mediaType","muted","loop","textTrackDom","textTrackShowDefault","nativeTextTrack","isArray","track","default","label","kind","srclang","crossorigin","textTrackStyle","styleStr","wrap","sheet","insertRule","addRule","XgVideoProxy","videoStyle","getElementsByTagName","autoplayMuted","ev","charAt","toUpperCase","EventEmitter","lastBuffer","self","defaultVideoEventHandler","hasStart","inWaitingStart","Date","getTime","_onError","emit","curBuffer","videoEventHandler","videoEventMiddleware","evItem","addEventListener","bool","destroy","play","pause","canPlayType","getBufferedRange","range","proxyOn","proxyOnce","isTrue","crossOrigin","isFinite","replay","defaultMuted","config","err","status","en","cn","lang","playbackRate","rate","preload","seekable","seeking","posterUrl","poster","volume","vol","Player","super","ignores","whitelist","documentElement","getAttribute","language","toLocaleLowerCase","inactive","controlsList","userTimer","waitTimer","history","isProgressMoving","unselectable","onselectstart","display","vid","console","device","fluid","execBeforePluginsCall","closeI18n","install","s_i18n","method","controlStyle","fetch","headers","Accept","then","res","ok","json","prop","pluginsCall","catch","log","controlPlugins","controlsRun","evName","evFunc","player","mousemoveFunc","closeFocusVideoFocus","focus","playFunc","closePlayVideoFocus","getVideoSize","videoWidth","videoHeight","containerSize","getBoundingClientRect","fitVideoSize","setTimeout","isReady","videoInit","rotate","updateRotateDeg","removeEventListener","attachVideo","danmu","resize","canPlayFunc","playPromise","disableStartLoad","load","reload","reloadFunc","isDelDom","bulletResizeTimer","k","checkTimer","clearTimeout","loadeddataFunc","replayFunc","keyShortcut","onKeydown","removeAttribute","classNameList","allOff","_replay","browser","Function","userGestureTrigEvent","param","defaultUserGestureEventHandler","userGestureEventMiddleware","plugins","descriptor","warn","onFocus","onBlur","enablePausedInactive","paused","closeInactive","onPlay","onPause","onEnded","onSeeking","isSeeking","onWaiting","onSeeked","onPlaying","use","controlLst","control","_undefined","require","val","bufferedList","HAVE_NOTHING","HAVE_METADATA","HAVE_CURRENT_DATA","HAVE_FUTURE_DATA","HAVE_ENOUGH_DATA","NETWORK_EMPTY","NETWORK_IDLE","NETWORK_LOADING","NETWORK_NO_SOURCE","MEDIA_ERR_ABORTED","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","MEDIA_ERR_SRC_NOT_SUPPORTED","REPLAY","ERROR","PLAY_TIPS","PAUSE_TIPS","PLAYNEXT_TIPS","DOWNLOAD_TIPS","ROTATE_TIPS","RELOAD_TIPS","FULLSCREEN_TIPS","EXITFULLSCREEN_TIPS","CSSFULLSCREEN_TIPS","EXITCSSFULLSCREEN_TIPS","TEXTTRACK","MINIPLAYER","SCREENSHOT","LIVE","OFF","MINIPLAYER_DRAG","AIRPLAY_TIPS","set","methods","descriptors","callable","defineProperties","configurable","writable","listener","__eeOnceListener__","__ee__","listeners","candidate","args","emitter","_click_","clk","clickedTime","first","onReady","onElementTouchend","isTouchMove","element","closeVideoPreventDefault","preventDefault","closeVideoStopPropagation","stopPropagation","closeVideoTouch","onTouch","closeVideoClick","enableVideoDbltouch","abs","onMouseEnter","leavePlayerTimer","onMouseLeave","closePlayerBlur","leavePlayerTime","onElementClick","onElementDblclick","closeVideoDblclick","fullscreen","createEvent","initEvent","Event","dispatchEvent","closeControlsBlur","onCanPlay","onStartBtnClick","contains","mediaSource","onPlayerReady","enableContextmenu","hideStartBtn","onclick","isValue","isPlainFunction","assign","normalizeOpts","dscr","desc","gs","isFunction","classRe","functionToString","isPrototype","isObject","possibleTypes","foo","bar","trzy","dest","TypeError","process","opts1","searchString","function","locals","location","baseUrl","protocol","host","currentDir","pathname","fullMatch","origUrl","newUrl","unquotedOrigUrl","$1","onFullscreenBtnClick","rotateFullscreen","exitRotateFullscreen","getRotateFullscreen","exitFullscreen","getFullscreen","onFullscreenChange","fullscreenEl","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","onWebkitpresentationmodechanged","webkitPresentationMode","requestFullscreen","fullscreenPromise","mozRequestFullScreen","webkitRequestFullscreen","Element","ALLOW_KEYBOARD_INPUT","webkitSupportsFullscreen","webkitEnterFullscreen","msRequestFullscreen","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","onPlayBtnClick","allowPlayAfterEnded","onReplayBtnClick","playceholder","isRotateFullscreen","containerWidth","container","progress","outer","cache","point","thumbnail","dotEvent","dotItem","text","dotArr","onCanplay","progressDot","dot","left","addProgressDot","removeProgressDot","removeAllProgressDot","coverPreviewContainer","coverPreviewPoint","coverPreviewOuter","tnailPicNum","tnailWidth","tnailHeight","tnailCol","tnailRow","interval","tnailUrls","onLoadedmetadata","isShowCoverPreview","pic_num","col","row","urls","disableSwipeHandler","enableSwipeHandler","disableSwipe","events","pop","disableProgress","allowSeekAfterEnded","isRotate","top","move","now","allowSeekPlayed","toFixed","maxPlayedTime","dash","closeMoveSeek","indexInPage","tnaiRowIndex","tnaiColIndex","up","passive","blur","containerLeft","compute","textContent","pointWidth","leave","onTimeupdate","precent","prevPrecent","onCurrentTimeChange","onSrcChange","onCacheUpdate","cacheUpdateEvents","destroyFunc","onTimeChange","playBtn","tipsText","tips","fullscreenBtn","request","requestfull","exitfull","replayText","path","getPropertyValue","svg","Flex","Fullscreen","S_fullscreen","S_loading","Mobile","Pc","Play","S_play","S_progress","S_poster","S_time","Start","S_start","Replay","S_replay"],"mappings":"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","file":"simple_player.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"xgplayer\"] = factory();\n\telse\n\t\troot[\"xgplayer\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 113);\n","import XgplayerTimeRange from './xgplayerTimeRange'\n\nexport function createDom(el = 'div', tpl = '', attrs = {}, cname = '') {\n let dom = document.createElement(el)\n dom.className = cname\n dom.innerHTML = tpl\n Object.keys(attrs).forEach(item => {\n let key = item\n let value = attrs[item]\n if (el === 'video' || el === 'audio') {\n if (value) {\n dom.setAttribute(key, value)\n }\n } else {\n dom.setAttribute(key, value)\n }\n })\n return dom\n}\n\nexport function hasClass(el, className) {\n if (!el) {\n return false;\n }\n\n if (el.classList) {\n return Array.prototype.some.call(el.classList, item => item === className)\n } else if (el.className) {\n return !!el.className.match(new RegExp('(\\\\s|^)' + className + '(\\\\s|$)'))\n } else {\n return false;\n }\n}\n\nexport function addClass(el, className) {\n if (!el) {\n return;\n }\n\n if (el.classList) {\n className.replace(/(^\\s+|\\s+$)/g, '').split(/\\s+/g).forEach(item => {\n item && el.classList.add(item)\n })\n } else if (!hasClass(el, className)) {\n el.className += ' ' + className\n }\n}\n\nexport function removeClass(el, className) {\n if (!el) {\n return;\n }\n\n if (el.classList) {\n className.split(/\\s+/g).forEach(item => {\n el.classList.remove(item)\n })\n } else if (hasClass(el, className)) {\n className.split(/\\s+/g).forEach(item => {\n let reg = new RegExp('(\\\\s|^)' + item + '(\\\\s|$)')\n el.className = el.className.replace(reg, ' ')\n })\n }\n}\n\nexport function toggleClass(el, className) {\n if (!el) {\n return;\n }\n\n className.split(/\\s+/g).forEach(item => {\n if (hasClass(el, item)) {\n removeClass(el, item)\n } else {\n addClass(el, item)\n }\n })\n}\n\nexport function findDom(el = document, sel) {\n let dom\n // fix querySelector IDs that start with a digit\n // https://stackoverflow.com/questions/37270787/uncaught-syntaxerror-failed-to-execute-queryselector-on-document\n try {\n dom = el.querySelector(sel)\n } catch (e) {\n if (sel.indexOf('#') === 0) {\n dom = el.getElementById(sel.slice(1))\n }\n }\n return dom\n}\n\nexport function padStart(str, length, pad) {\n let charstr = String(pad)\n let len = length >> 0\n let maxlen = Math.ceil(len / charstr.length)\n let chars = []\n let r = String(str)\n while (maxlen--) {\n chars.push(charstr)\n }\n return chars.join('').substring(0, len - r.length) + r\n}\n\nexport function format(time) {\n if (window.isNaN(time)) {\n return ''\n }\n let hour = padStart(Math.floor(time / 3600), 2, 0)\n let minute = padStart(Math.floor((time - hour * 3600) / 60), 2, 0)\n let second = padStart(Math.floor((time - hour * 3600 - minute * 60)), 2, 0)\n return (hour === '00' ? [minute, second] : [hour, minute, second]).join(':')\n}\n\nexport function event(e) {\n if (e.touches) {\n let touch = e.touches[0] || e.changedTouches[0]\n e.clientX = touch.clientX || 0\n e.clientY = touch.clientY || 0\n e.offsetX = touch.pageX - touch.target.offsetLeft\n e.offsetY = touch.pageY - touch.target.offsetTop\n }\n e._target = e.target || e.srcElement\n}\n\nexport function typeOf(obj) {\n return Object.prototype.toString.call(obj).match(/([^\\s.*]+)(?=]$)/g)[0]\n}\n\nexport function deepCopy(dst, src) {\n if (typeOf(src) === 'Object' && typeOf(dst) === 'Object') {\n Object.keys(src).forEach(key => {\n if (typeOf(src[key]) === 'Object' && !(src[key] instanceof Node)) {\n if (!dst[key]) {\n dst[key] = src[key]\n } else {\n deepCopy(dst[key], src[key])\n }\n } else if (typeOf(src[key]) === 'Array') {\n dst[key] = typeOf(dst[key]) === 'Array' ? dst[key].concat(src[key]) : src[key]\n } else {\n dst[key] = src[key]\n }\n })\n return dst\n }\n}\nexport function getBgImage(el) {\n // fix: return current page url when url is none\n let url = (el.currentStyle || window.getComputedStyle(el, null)).backgroundImage\n if (!url || url === 'none') {\n return ''\n }\n let a = document.createElement('a')\n a.href = url.replace(/url\\(\"|\"\\)/g, '')\n return a.href\n}\n\nexport function copyDom(dom) {\n if (dom && dom.nodeType === 1) {\n let back = document.createElement(dom.tagName)\n Array.prototype.forEach.call(dom.attributes, (node) => {\n back.setAttribute(node.name, node.value)\n })\n if (dom.innerHTML) {\n back.innerHTML = dom.innerHTML\n }\n return back\n } else {\n return ''\n }\n}\n\nexport function _setInterval(context, eventName, intervalFunc, frequency) {\n if (!context._interval[eventName]) {\n context._interval[eventName] = setInterval(intervalFunc.bind(context), frequency)\n }\n}\n\nexport function _clearInterval(context, eventName) {\n clearInterval(context._interval[eventName])\n context._interval[eventName] = null\n}\n\nexport function createImgBtn(name, imgUrl, width, height) {\n let btn = createDom(`xg-${name}`, '', {}, `xgplayer-${name}-img`)\n btn.style.backgroundImage = `url(\"${imgUrl}\")`\n if (width && height) {\n let w, h, unit\n ['px', 'rem', 'em', 'pt', 'dp', 'vw', 'vh', 'vm', '%'].every((item) => {\n if (width.indexOf(item) > -1 && height.indexOf(item) > -1) {\n w = Number(width.slice(0, width.indexOf(item)).trim())\n h = Number(height.slice(0, height.indexOf(item)).trim())\n unit = item\n return false\n } else {\n return true\n }\n })\n btn.style.width = `${w}${unit}`\n btn.style.height = `${h}${unit}`\n btn.style.backgroundSize = `${w}${unit} ${h}${unit}`\n if (name === 'start') {\n btn.style.margin = `-${h / 2}${unit} auto auto -${w / 2}${unit}`\n } else {\n btn.style.margin = 'auto 5px auto 5px'\n }\n }\n return btn\n}\n\nexport function isWeiXin() {\n let ua = window.navigator.userAgent.toLowerCase()\n return ua.indexOf('micromessenger') > -1\n}\n\nexport function isUc() {\n let ua = window.navigator.userAgent.toLowerCase()\n return ua.indexOf('ucbrowser') > -1\n}\n\nexport function computeWatchDur(played = []) {\n let arr = []\n for (let i = 0; i < played.length; i++) {\n if(!played[i].end || played[i].begin < 0 || played[i].end < 0 || played[i].end < played[i].begin) {\n continue\n }\n if(arr.length < 1) {\n arr.push({begin: played[i].begin, end: played[i].end})\n } else {\n for (let j = 0; j < arr.length; j++) {\n let begin = played[i].begin\n let end = played[i].end\n if(end < arr[j].begin) {\n arr.splice(j, 0, {begin, end})\n break\n } else if(begin > arr[j].end) {\n if(j > arr.length - 2) {\n arr.push({begin, end})\n break\n }\n } else {\n let b = arr[j].begin\n let e = arr[j].end\n arr[j].begin = Math.min(begin, b)\n arr[j].end = Math.max(end, e)\n break\n }\n }\n }\n }\n let watch_dur = 0\n for (let i = 0; i < arr.length; i++) {\n watch_dur += arr[i].end - arr[i].begin\n }\n return watch_dur\n}\n\nexport function offInDestroy(object, event, fn, offEvent) {\n function onDestroy () {\n object.off(event, fn)\n object.off(offEvent, onDestroy)\n }\n object.once(offEvent, onDestroy)\n}\n\nexport function on(object, event, fn, offEvent) {\n if (offEvent) {\n object.on(event, fn)\n offInDestroy(object, event, fn, offEvent)\n } else {\n let _fn = data => {\n fn(data)\n object.off(event, _fn)\n }\n object.on(event, _fn)\n }\n}\n\nexport function once(object, event, fn, offEvent) {\n if (offEvent) {\n object.once(event, fn)\n offInDestroy(object, event, fn, offEvent)\n } else {\n let _fn = data => {\n fn(data)\n object.off(event, _fn)\n }\n object.once(event, _fn)\n }\n}\n\nexport function getBuffered2(vbuffered, maxHoleDuration = 0.5) { //ref: hls.js\n let buffered = []\n for (let i = 0; i < vbuffered.length; i++) {\n buffered.push({ start: vbuffered.start(i) < 0.5 ? 0 : vbuffered.start(i), end: vbuffered.end(i) });\n }\n buffered.sort(function (a, b) {\n let diff = a.start - b.start;\n if (diff) {\n return diff;\n } else {\n return b.end - a.end;\n }\n });\n let buffered_2 = []\n if (maxHoleDuration) {\n for (let i = 0; i < buffered.length; i++) {\n let buf2len = buffered_2.length\n if (buf2len) {\n let buf2end = buffered_2[buf2len - 1].end\n if ((buffered[i].start - buf2end) < maxHoleDuration) {\n if (buffered[i].end > buf2end) {\n buffered_2[buf2len - 1].end = buffered[i].end\n }\n } else {\n buffered_2.push(buffered[i])\n }\n } else {\n buffered_2.push(buffered[i])\n }\n }\n } else {\n buffered_2 = buffered\n }\n return new XgplayerTimeRange(buffered_2)\n}\n\nexport function checkIsBrowser() {\n return !(typeof(window) === 'undefined' || typeof(window.document) === 'undefined' || typeof(window.document.createElement) === 'undefined')\n}\n\nexport function setStyle(elem, name, value) {\n let style = elem.style;\n try {\n style[name] = value;\n } catch (error) {\n style.setProperty( name, value );\n }\n}\n\nexport const PresentationMode = {\n PIP: 'picture-in-picture',\n INLINE: 'inline',\n FULLSCREEN: 'fullscreen'\n}\n\nexport function checkWebkitSetPresentationMode (video) {\n return typeof video.webkitSetPresentationMode === 'function'\n}\n\nexport const util = {\n createDom, hasClass, addClass, removeClass, toggleClass, findDom, padStart, format, event, typeOf, \n deepCopy, getBgImage, copyDom, setInterval: _setInterval, clearInterval: _clearInterval, createImgBtn, isWeiXin, isUc, computeWatchDur,\n offInDestroy, on, once, getBuffered2, checkIsBrowser, setStyle\n}\n\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target) {\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton && typeof options.singleton !== \"boolean\") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n if (!options.insertInto) options.insertInto = \"head\";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \"bottom\";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \"top\") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \"bottom\") {\n\t\ttarget.appendChild(style);\n\t} else if (typeof options.insertAt === \"object\" && options.insertAt.before) {\n\t\tvar nextSibling = getElement(options.insertInto + \" \" + options.insertAt.before);\n\t\ttarget.insertBefore(style, nextSibling);\n\t} else {\n\t\tthrow new Error(\"[Style Loader]\\n\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\n Must be 'top', 'bottom', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n\");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\"style\");\n\n\toptions.attrs.type = \"text/css\";\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\"link\");\n\n\toptions.attrs.type = \"text/css\";\n\toptions.attrs.rel = \"stylesheet\";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t result = options.transform(obj.css);\n\n\t if (result) {\n\t \t// If transform returns a value, use that instead of the original css.\n\t \t// This allows running runtime transformations on the css.\n\t \tobj.css = result;\n\t } else {\n\t \t// If the transform function returns a falsy value, don't add this css.\n\t \t// This allows conditional loading of css\n\t \treturn function() {\n\t \t\t// noop\n\t \t};\n\t }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \"function\" &&\n\t\ttypeof URL.createObjectURL === \"function\" &&\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\n\t\ttypeof Blob === \"function\" &&\n\t\ttypeof btoa === \"function\"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \"\" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\"media\", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default. Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\n\t}\n\n\tvar blob = new Blob([css], { type: \"text/css\" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n","let sniffer = {}\n\nObject.defineProperty(sniffer, 'device', {\n get: function () {\n let r = sniffer.os\n return r.isPc ? 'pc' : 'mobile'\n // return r.isPc ? 'pc' : r.isTablet ? 'tablet' : 'mobile'\n }\n})\n\nObject.defineProperty(sniffer, 'browser', {\n get: function () {\n let ua = navigator.userAgent.toLowerCase()\n let reg = {\n ie: /rv:([\\d.]+)\\) like gecko/,\n firfox: /firefox\\/([\\d.]+)/,\n chrome: /chrome\\/([\\d.]+)/,\n opera: /opera.([\\d.]+)/,\n safari: /version\\/([\\d.]+).*safari/\n }\n return [].concat(Object.keys(reg).filter(key => reg[key].test(ua)))[0] || ''\n }\n})\n\nObject.defineProperty(sniffer, 'os', {\n get: function () {\n let ua = navigator.userAgent\n let isWindowsPhone = /(?:Windows Phone)/.test(ua)\n let isSymbian = /(?:SymbianOS)/.test(ua) || isWindowsPhone\n let isAndroid = /(?:Android)/.test(ua)\n let isFireFox = /(?:Firefox)/.test(ua)\n let isTablet = /(?:iPad|PlayBook)/.test(ua) || (isAndroid && !/(?:Mobile)/.test(ua)) || (isFireFox && /(?:Tablet)/.test(ua))\n let isPhone = /(?:iPhone)/.test(ua) && !isTablet\n let isPc = !isPhone && !isAndroid && !isSymbian && !isTablet\n return {\n isTablet,\n isPhone,\n isAndroid,\n isPc,\n isSymbian,\n isWindowsPhone,\n isFireFox\n }\n }\n})\n\nexport default sniffer\n","import {version} from '../version.json'\nconst ErrorTypes = {\n network: {\n code: 1,\n msg: '视频下载错误',\n remark: '只要视频下载错误就使用此类型,无论是video本身的超时还是xhr的分段请求超时或者资源不存在'\n },\n mse: {\n code: 2,\n msg: '流追加错误',\n remark: '追加流的时候如果类型不对、无法被正确解码则会触发此类错误'\n },\n parse: {\n code: 3,\n msg: '解析错误',\n remark: 'mp4、hls、flv我们都是使用js进行格式解析,如果解析失败则会触发此类错误'\n },\n format: {\n code: 4,\n msg: '格式错误',\n remark: '如果浏览器不支持的格式导致播放错误'\n },\n decoder: {\n code: 5,\n msg: '解码错误',\n remark: '浏览器解码异常会抛出此类型错误'\n },\n runtime: {\n code: 6,\n msg: '语法错误',\n remark: '播放器语法错误'\n },\n timeout: {\n code: 7,\n msg: '播放超时',\n remark: '播放过程中无法正常请求下一个分段导致播放中断'\n },\n other: {\n code: 8,\n msg: '其他错误',\n remark: '不可知的错误或被忽略的错误类型'\n }\n}\n\nclass Errors {\n constructor (type, currentTime, duration, networkState, readyState, src, currentSrc,\n ended, errd = {line: '', handle: '', msg: '', version: ''}, errorCode, mediaError) {\n let r = {}\n if (arguments.length > 1) {\n r.playerVersion = version // 播放器版本\n r.errorType = type\n r.domain = document.domain // domain\n r.duration = duration // 视频时长\n r.currentTime = currentTime\n r.networkState = networkState\n r.readyState = readyState\n r.currentSrc = currentSrc\n r.src = src\n r.ended = ended\n r.errd = errd // 错误详情\n r.ex = (ErrorTypes[type] || {}).msg // 补充信息\n r.errorCode = errorCode\n r.mediaError = mediaError\n } else {\n const arg = arguments[0]\n Object.keys(arg).map(key => {\n r[key] = arg[key]\n })\n r.ex = ((arg.type && ErrorTypes[arg.type]) || {}).msg\n }\n return r\n }\n}\nexport default Errors\n","import EventEmitter from 'event-emitter'\nimport { findDom, createDom, hasClass, removeClass, _clearInterval, _setInterval, on, once, getBuffered2, setStyle } from './utils/util'\nimport Errors from './error'\n\nclass Proxy {\n constructor (options) {\n this._hasStart = false\n this.videoConfig = {\n controls: !!options.isShowControl,\n autoplay: options.autoplay,\n playsinline: options.playsinline,\n 'webkit-playsinline': options.playsinline,\n 'x5-playsinline': options.playsinline,\n 'x5-video-player-type': options['x5-video-player-type'] || options['x5VideoPlayerType'],\n 'x5-video-player-fullscreen': options['x5-video-player-fullscreen'] || options['x5VideoPlayerFullscreen'],\n 'x5-video-orientation': options['x5-video-orientation'] || options['x5VideoOrientation'],\n airplay: options['airplay'],\n 'webkit-airplay': options['airplay'],\n tabindex: 2,\n mediaType: options.mediaType || 'video'\n }\n if (options.muted) {\n this.videoConfig.muted = 'muted'\n }\n if (options.loop) {\n this.videoConfig.loop = 'loop'\n }\n let textTrackDom = ''\n this.textTrackShowDefault = true\n if (options.nativeTextTrack && Array.isArray(options.nativeTextTrack)) {\n if (options.nativeTextTrack.length > 0 && !options.nativeTextTrack.some(track => { return track.default })) {\n options.nativeTextTrack[0].default = true\n this.textTrackShowDefault = false\n }\n options.nativeTextTrack.some(track => {\n if (track.src && track.label && track.default) {\n textTrackDom += `<track src=\"${track.src}\" `\n if (track.kind) {\n textTrackDom += `kind=\"${track.kind}\" `\n }\n textTrackDom += `label=\"${track.label}\" `\n if (track.srclang) {\n textTrackDom += `srclang=\"${track.srclang}\" `\n }\n textTrackDom += `${track.default ? 'default' : ''}>`\n return true\n }\n })\n this.videoConfig.crossorigin = 'anonymous'\n }\n if (options.textTrackStyle) {\n let style = document.createElement('style')\n this.textTrackStyle = style\n document.head.appendChild(style)\n let styleStr = ''\n for (let index in options.textTrackStyle) {\n styleStr += `${index}: ${options.textTrackStyle[index]};`\n }\n let wrap = options.id ? `#${options.id}` : (options.el.id ? `#${options.el.id}` : `.${options.el.className}`)\n if (style.sheet.insertRule) {\n style.sheet.insertRule(`${wrap} video::cue { ${styleStr} }`, 0)\n } else if (style.sheet.addRule) {\n style.sheet.addRule(`${wrap} video::cue`, styleStr)\n }\n }\n let el = options.el ? options.el : findDom(document, `#${options.id}`)\n const XgVideoProxy = this.constructor.XgVideoProxy\n if(XgVideoProxy && this.videoConfig.mediaType === XgVideoProxy.mediaType) {\n this.video = new XgVideoProxy(el, options)\n } else {\n this.video = createDom(this.videoConfig.mediaType, textTrackDom, this.videoConfig, '')\n }\n if (options.videoStyle) {\n Object.keys(options.videoStyle).forEach(key => {\n setStyle(this.video, key, options.videoStyle[key])\n })\n }\n if (!this.textTrackShowDefault && textTrackDom) {\n let trackDoms = this.video.getElementsByTagName('Track')\n trackDoms[0].track.mode = 'hidden'\n }\n if (options.autoplay) {\n this.video.autoplay = true\n if (options.autoplayMuted) {\n this.video.muted = true\n }\n }\n\n this.ev = ['play', 'playing', 'pause', 'ended', 'error', 'seeking', 'seeked', 'progress', \n 'timeupdate', 'waiting', 'canplay', 'canplaythrough', 'durationchange', 'volumechange', 'ratechange', 'loadedmetadata', 'loadeddata', 'loadstart'\n ].map((item) => {\n return {\n [item]: `on${item.charAt(0).toUpperCase()}${item.slice(1)}`\n }\n })\n EventEmitter(this)\n\n this._interval = {}\n let lastBuffer = '0,0'\n let self = this\n\n const defaultVideoEventHandler = name => {\n // fix when video destroy called and video reload\n if (!this) {\n return\n }\n if (name === 'play') {\n this.hasStart = true\n } else if (name === 'canplay') {\n removeClass(this.root, 'xgplayer-is-enter')\n } else if (name === 'waiting') {\n this.inWaitingStart = new Date().getTime()\n } else if (name === 'playing') {\n removeClass(this.root, 'xgplayer-is-enter')\n if (this.inWaitingStart) {\n this.inWaitingStart = undefined\n }\n }\n if (name === 'error') {\n // process the error\n this._onError(name)\n } else {\n this.emit(name, this)\n }\n\n if (this.hasOwnProperty('_interval')) {\n if (['ended', 'error', 'timeupdate'].indexOf(name) < 0) {\n _clearInterval(this, 'bufferedChange')\n _setInterval(this, 'bufferedChange', function () {\n if (this.video && this.video.buffered) {\n let curBuffer = []\n for (let i = 0, len = this.video.buffered.length; i < len; i++) {\n curBuffer.push([this.video.buffered.start(i), this.video.buffered.end(i)])\n }\n if (curBuffer.toString() !== lastBuffer) {\n lastBuffer = curBuffer.toString()\n this.emit('bufferedChange', curBuffer)\n }\n }\n }, 200)\n } else {\n if (name !== 'timeupdate') {\n _clearInterval(this, 'bufferedChange')\n }\n }\n }\n }\n\n const videoEventHandler = name => {\n if(options.videoEventMiddleware && typeof options.videoEventMiddleware[name] === 'function') {\n options.videoEventMiddleware[name].call(this, this, name, defaultVideoEventHandler)\n } else {\n defaultVideoEventHandler.call(this, name);\n }\n }\n\n this.ev.forEach(item => {\n self.evItem = Object.keys(item)[0]\n let name = Object.keys(item)[0]\n self.video.addEventListener(Object.keys(item)[0], videoEventHandler.bind(self, name))\n })\n }\n /**\n * 错误监听处理逻辑抽离\n */\n _onError (name) {\n if (this.video && this.video.error) {\n this.emit(name, new Errors('other', this.currentTime, this.duration, this.networkState, this.readyState, this.currentSrc, this.src,\n this.ended, {\n line: 162,\n msg: this.error,\n handle: 'Constructor'\n }, this.video.error.code, this.video.error))\n }\n }\n\n get hasStart () {\n return this._hasStart\n }\n set hasStart (bool) {\n if (typeof bool === 'boolean' && bool === true && !this._hasStart) {\n this._hasStart = true\n this.emit('hasstart')\n }\n }\n destroy () {\n if (this.textTrackStyle) {\n this.textTrackStyle.parentNode.removeChild(this.textTrackStyle)\n }\n }\n play () {\n return this.video.play()\n }\n pause () {\n this.video.pause()\n }\n canPlayType (type) {\n return this.video.canPlayType(type)\n }\n getBufferedRange (buffered) {\n let range = [0, 0]\n let video = this.video\n if(!buffered) buffered = video.buffered\n let currentTime = video.currentTime\n if (buffered) {\n for (let i = 0, len = buffered.length; i < len; i++) {\n range[0] = buffered.start(i)\n range[1] = buffered.end(i)\n if (range[0] <= currentTime && currentTime <= range[1]) {\n break\n }\n }\n }\n if (range[0] - currentTime <= 0 && currentTime - range[1] <= 0) {\n return range\n } else {\n return [0, 0]\n }\n }\n proxyOn (event, fn) {\n on(this, event, fn, 'destroy')\n }\n proxyOnce (event, fn) {\n once(this, event, fn, 'destroy')\n }\n set autoplay (isTrue) {\n if(this.video) {\n this.video.autoplay = isTrue\n }\n }\n get autoplay () {\n if(this.video) {\n return this.video.autoplay\n } else {\n return false\n }\n }\n get buffered () {\n if(this.video) {\n return this.video.buffered\n } else {\n return undefined\n }\n }\n get buffered2 () {\n return getBuffered2(this.video.buffered)\n }\n get crossOrigin () {\n if(this.video) {\n return this.video.crossOrigin\n } else {\n return false\n }\n }\n set crossOrigin (isTrue) {\n if(this.video) {\n this.video.crossOrigin = isTrue\n }\n }\n get currentSrc () {\n if(this.video) {\n return this.video.currentSrc\n } else {\n return undefined\n }\n }\n get currentTime () {\n if(this.video) {\n return this.video.currentTime || 0\n } else {\n return 0\n }\n }\n set currentTime (time) {\n if (typeof isFinite === 'function' && !isFinite(time)) return\n if (hasClass(this.root, 'xgplayer-ended')) {\n this.once('playing', () => { this.video.currentTime = time })\n this.replay()\n } else {\n this.video.currentTime = time\n }\n this.emit('currentTimeChange', time)\n }\n get defaultMuted () {\n if(this.video) {\n return this.video.defaultMuted\n } else {\n return false\n }\n }\n set defaultMuted (isTrue) {\n if(this.video) {\n this.video.defaultMuted = isTrue\n }\n }\n get duration () {\n if(this.config.duration) {\n if(this.video) return Math.min(this.config.duration, this.video.duration)\n else return this.config.duration\n }\n if (!this.video) return null\n return this.video.duration\n }\n get ended () {\n if(this.video) {\n return this.video.ended || false\n } else {\n return true\n }\n }\n get error () {\n let err = this.video.error\n if (!err) {\n return null\n }\n let status = [{\n en: 'MEDIA_ERR_ABORTED',\n cn: '取回过程被用户中止'\n }, {\n en: 'MEDIA_ERR_NETWORK',\n cn: '当下载时发生错误'\n }, {\n en: 'MEDIA_ERR_DECODE',\n cn: '当解码时发生错误'\n }, {\n en: 'MEDIA_ERR_SRC_NOT_SUPPORTED',\n cn: '不支持音频/视频'\n }]\n return this.lang ? this.lang[status[err.code - 1].en] : status[err.code - 1].en\n }\n get loop () {\n if(this.video) {\n return this.video.loop\n } else {\n return false\n }\n }\n set loop (isTrue) {\n if(this.video) {\n this.video.loop = isTrue\n }\n }\n get muted () {\n if(this.video) {\n return this.video.muted\n } else {\n return false\n }\n }\n set muted (isTrue) {\n if(this.video) {\n this.video.muted = isTrue\n }\n }\n get networkState () {\n let status = [{\n en: 'NETWORK_EMPTY',\n cn: '音频/视频尚未初始化'\n }, {\n en: 'NETWORK_IDLE',\n cn: '音频/视频是活动的且已选取资源,但并未使用网络'\n }, {\n en: 'NETWORK_LOADING',\n cn: '浏览器正在下载数据'\n }, {\n en: 'NETWORK_NO_SOURCE',\n cn: '未找到音频/视频来源'\n }]\n return this.lang ? this.lang[status[this.video.networkState].en] : status[this.video.networkState].en\n }\n get paused () {\n // if(this.video) {\n // return this.video.paused\n // } else {\n // return false\n // }\n return hasClass(this.root, 'xgplayer-pause')\n }\n get playbackRate () {\n if(this.video) {\n return this.video.playbackRate\n } else {\n return 1\n }\n }\n set playbackRate (rate) {\n if(this.video) {\n this.video.playbackRate = rate\n }\n }\n get played () {\n if(this.video) {\n return this.video.played\n } else {\n return undefined\n }\n }\n get preload () {\n if(this.video) {\n return this.video.preload\n } else {\n return false\n }\n }\n set preload (isTrue) {\n if(this.video) {\n this.video.preload = isTrue\n }\n }\n get readyState () {\n let status = [{\n en: 'HAVE_NOTHING',\n cn: '没有关于音频/视频是否就绪的信息'\n }, {\n en: 'HAVE_METADATA',\n cn: '关于音频/视频就绪的元数据'\n }, {\n en: 'HAVE_CURRENT_DATA',\n cn: '关于当前播放位置的数据是可用的,但没有足够的数据来播放下一帧/毫秒'\n }, {\n en: 'HAVE_FUTURE_DATA',\n cn: '当前及至少下一帧的数据是可用的'\n }, {\n en: 'HAVE_ENOUGH_DATA',\n cn: '可用数据足以开始播放'\n }]\n return this.lang ? this.lang[status[this.video.readyState].en] : status[this.video.readyState]\n }\n get seekable () {\n if(this.video) {\n return this.video.seekable\n } else {\n return false\n }\n }\n get seeking () {\n if(this.video) {\n return this.video.seeking\n } else {\n return false\n }\n }\n get src () {\n if(this.video) {\n return this.video.src\n } else {\n return undefined\n }\n }\n set src (url) {\n if (!hasClass(this.root, 'xgplayer-ended')) {\n this.emit('urlchange', this.video.src)\n }\n removeClass(this.root, 'xgplayer-ended xgplayer-is-replay xgplayer-is-error')\n this.video.pause()\n this.emit('pause')\n this.video.src = url\n this.emit('srcChange')\n }\n set poster (posterUrl) {\n let poster = findDom(this.root, '.xgplayer-poster')\n if (poster) {\n poster.style.backgroundImage = `url(${posterUrl})`\n }\n }\n get volume () {\n if(this.video) {\n return this.video.volume\n } else {\n return 1\n }\n }\n set volume (vol) {\n if(this.video) {\n this.video.volume = vol\n }\n }\n get fullscreen () {\n return hasClass(this.root, 'xgplayer-is-fullscreen') || hasClass(this.root, 'xgplayer-fullscreen-active')\n }\n get bullet () {\n return findDom(this.root, 'xg-danmu') ? hasClass(findDom(this.root, 'xg-danmu'), 'xgplayer-has-danmu') : false\n }\n get textTrack () {\n return hasClass(this.root, 'xgplayer-is-textTrack')\n }\n get pip () {\n return hasClass(this.root, 'xgplayer-pip-active')\n }\n get isMiniPlayer () {\n return hasClass(this.root, 'xgplayer-miniplayer-active')\n }\n}\n\nexport default Proxy\n","import Proxy from './proxy'\nimport { util, deepCopy, findDom, createDom, addClass, typeOf, hasClass, removeClass, checkIsBrowser } from './utils/util'\nimport sniffer from './utils/sniffer'\nimport XgplayerTimeRange from './utils/xgplayerTimeRange'\nimport Errors from './error'\nimport allOff from 'event-emitter/all-off'\nimport s_i18n from './skin/controls/i18n.js'\nimport './skin/style/index.scss'\n\nimport {\n version\n} from '../version.json'\nclass Player extends Proxy {\n constructor (options) {\n super(options)\n this.config = deepCopy({\n width: 600,\n height: 337.5,\n ignores: [],\n whitelist: [],\n lang: (document.documentElement.getAttribute('lang') || navigator.language || 'zh-cn').toLocaleLowerCase(),\n inactive: 3000,\n volume: 0.6,\n controls: true,\n controlsList: ['nodownload']\n }, options)\n this.version = version\n this.userTimer = null\n this.waitTimer = null\n this.history = []\n this.isProgressMoving = false\n this.root = findDom(document, `#${this.config.id}`)\n this.controls = createDom('xg-controls', '', {\n unselectable: 'on',\n onselectstart: 'return false'\n }, 'xgplayer-controls')\n if (this.config.isShowControl) {\n this.controls.style.display = 'none'\n }\n if (!this.root) {\n let el = this.config.el\n if (el && el.nodeType === 1) {\n this.root = el\n } else {\n this.emit('error', new Errors({\n type: 'use',\n errd: {\n line: 45,\n handle: 'Constructor',\n msg: 'container id can\\'t be empty'\n },\n vid: this.config.vid\n }))\n console.error('container id can\\'t be empty')\n return false\n }\n }\n // this.rootBackup = copyDom(this.root)\n addClass(this.root, `xgplayer xgplayer-${sniffer.device} xgplayer-nostart xgplayer-pause ${this.config.controls ? '' : 'xgplayer-no-controls'}`)\n this.root.appendChild(this.controls)\n if (this.config.fluid) {\n this.root.style['max-width'] = '100%'\n this.root.style['width'] = '100%'\n this.root.style['height'] = '0'\n this.root.style['padding-top'] = `${this.config.height * 100 / this.config.width}%`\n\n this.video.style['position'] = 'absolute'\n this.video.style['top'] = '0'\n this.video.style['left'] = '0'\n } else {\n // this.root.style.width = `${this.config.width}px`\n // this.root.style.height = `${this.config.height}px`\n if (this.config.width) {\n if (typeof this.config.width !== 'number') {\n this.root.style.width = this.config.width\n } else {\n this.root.style.width = `${this.config.width}px`\n }\n }\n if (this.config.height) {\n if (typeof this.config.height !== 'number') {\n this.root.style.height = this.config.height\n } else {\n this.root.style.height = `${this.config.height}px`\n }\n }\n }\n if (this.config.execBeforePluginsCall) {\n this.config.execBeforePluginsCall.forEach(item => {\n item.call(this, this)\n })\n }\n if(!this.config.closeI18n) {\n Player.install(s_i18n.name, s_i18n.method)\n }\n if (this.config.controlStyle && typeOf(this.config.controlStyle) === 'String') {\n let self = this\n fetch(self.config.controlStyle, {\n method: 'GET',\n headers: {\n Accept: 'application/json'\n }\n }).then(function (res) {\n if (res.ok) {\n res.json().then(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n self.config[prop] = obj[prop]\n }\n }\n self.pluginsCall()\n })\n }\n }).catch(function (err) {\n console.log('Fetch错误:' + err)\n })\n } else {\n this.pluginsCall()\n }\n if(this.config.controlPlugins) {\n Player.controlsRun(this.config.controlPlugins, this)\n }\n this.ev.forEach((item) => {\n let evName = Object.keys(item)[0]\n let evFunc = this[item[evName]]\n if (evFunc) {\n this.on(evName, evFunc)\n }\n });\n\n ['focus', 'blur'].forEach(item => {\n this.on(item, this['on' + item.charAt(0).toUpperCase() + item.slice(1)])\n })\n let player = this\n this.mousemoveFunc = function () {\n player.emit('focus')\n if (!player.config.closeFocusVideoFocus) {\n player.video.focus()\n }\n }\n this.root.addEventListener('mousemove', this.mousemoveFunc)\n this.playFunc = function () {\n player.emit('focus')\n if (!player.config.closePlayVideoFocus) {\n player.video.focus()\n }\n }\n player.once('play', this.playFunc)\n\n this.getVideoSize = function () {\n if (this.video.videoWidth && this.video.videoHeight) {\n let containerSize = player.root.getBoundingClientRect()\n if (player.config.fitVideoSize === 'auto') {\n if (containerSize.width / containerSize.height > this.video.videoWidth / this.video.videoHeight) {\n player.root.style.height = `${this.video.videoHeight / this.video.videoWidth * containerSize.width}px`\n } else {\n player.root.style.width = `${this.video.videoWidth / this.video.videoHeight * containerSize.height}px`\n }\n } else if (player.config.fitVideoSize === 'fixWidth') {\n player.root.style.height = `${this.video.videoHeight / this.video.videoWidth * containerSize.width}px`\n } else if (player.config.fitVideoSize === 'fixHeight') {\n player.root.style.width = `${this.video.videoWidth / this.video.videoHeight * containerSize.height}px`\n }\n }\n }\n player.once('loadeddata', this.getVideoSize)\n\n setTimeout(() => {\n this.emit('ready')\n this.isReady = true\n }, 0)\n\n if (this.config.videoInit) {\n if (hasClass(this.root, 'xgplayer-nostart')) {\n this.start()\n }\n }\n if (player.config.rotate) {\n player.on('requestFullscreen', this.updateRotateDeg)\n player.on('exitFullscreen', this.updateRotateDeg)\n }\n\n function onDestroy () {\n player.root.removeEventListener('mousemove', player.mousemoveFunc)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n }\n\n attachVideo () {\n if(this.video && this.video.nodeType === 1) {\n this.root.insertBefore(this.video, this.root.firstChild)\n }\n setTimeout(() => {\n this.emit('complete')\n if(this.danmu && typeof this.danmu.resize === 'function') {\n this.danmu.resize()\n }\n }, 1)\n }\n\n start (url = this.config.url) {\n if(!this.video) return\n let player = this\n if (!url || url === '') {\n this.emit('urlNull')\n return\n }\n this.canPlayFunc = function () {\n player.off('canplay', player.canPlayFunc)\n let playPromise = player.video.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.then(function () {\n player.emit('autoplay started')\n }).catch(function () {\n player.emit('autoplay was prevented')\n addClass(player.root, 'xgplayer-is-autoplay')\n })\n }\n }\n if (typeOf(url) !== 'Array') {\n if (typeOf(url) === 'String' && url.indexOf('blob:') > -1 && url === this.video.src) {\n // 在Chromium环境下用mse url给video二次赋值会导致错误\n } else {\n this.video.src = url\n }\n } else {\n url.forEach(item => {\n this.video.appendChild(createDom('source', '', {\n src: `${item.src}`,\n type: `${item.type || ''}`\n }))\n })\n }\n if (this.config.autoplay) {\n if (sniffer.os.isPhone) {\n this.canPlayFunc()\n } else {\n this.on('canplay', this.canPlayFunc)\n }\n }\n if(!this.config.disableStartLoad) {\n this.video.load()\n }\n this.attachVideo()\n }\n\n reload () {\n this.video.load()\n this.reloadFunc = function () {\n // eslint-disable-next-line handle-callback-err\n let playPromise = this.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }\n this.once('loadeddata', this.reloadFunc)\n }\n\n destroy (isDelDom = true) {\n let player = this\n clearInterval(this.bulletResizeTimer)\n for (let k in this._interval) {\n clearInterval(this._interval[k])\n this._interval[k] = null\n }\n if (this.checkTimer) {\n clearInterval(this.checkTimer)\n }\n if (this.waitTimer) {\n clearTimeout(this.waitTimer)\n }\n this.ev.forEach((item) => {\n let evName = Object.keys(item)[0]\n let evFunc = this[item[evName]]\n if (evFunc) {\n this.off(evName, evFunc)\n }\n });\n if (this.loadeddataFunc) {\n this.off('loadeddata', this.loadeddataFunc)\n }\n if (this.reloadFunc) {\n this.off('loadeddata', this.reloadFunc)\n }\n if (this.replayFunc) {\n this.off('play', this.replayFunc)\n }\n if (this.playFunc) {\n this.off('play', this.playFunc)\n }\n if (this.getVideoSize) {\n this.off('loadeddata', this.getVideoSize)\n };\n ['focus', 'blur'].forEach(item => {\n this.off(item, this['on' + item.charAt(0).toUpperCase() + item.slice(1)])\n })\n if (!this.config.keyShortcut || this.config.keyShortcut === 'on') {\n ['video', 'controls'].forEach(item => {\n if (this[item]) {\n this[item].removeEventListener('keydown', function (e) { player.onKeydown(e, player) })\n }\n })\n }\n\n function destroyFunc () {\n this.emit('destroy')\n // this.root.id = this.root.id + '_del'\n // parentNode.insertBefore(this.rootBackup, this.root)\n\n // fix video destroy https://stackoverflow.com/questions/3258587/how-to-properly-unload-destroy-a-video-element\n this.video.removeAttribute('src') // empty source\n this.video.load()\n if (isDelDom) {\n // parentNode.removeChild(this.root)\n this.root.innerHTML = ''\n let classNameList = this.root.className.split(' ')\n if (classNameList.length > 0) {\n this.root.className = classNameList.filter(name => name.indexOf('xgplayer') < 0).join(' ')\n } else {\n this.root.className = ''\n }\n }\n\n for (let k in this) {\n // if (k !== 'config') {\n delete this[k]\n // }\n }\n allOff(this)\n }\n\n // destroy immediately\n // Don't use the paused property detection, it doesn't use MediaElement.paused, \n // so it's not accurate enough. Destroy after waiting for pause event, this \n // changes the synchronous behavior of destroy api\n destroyFunc.call(this)\n\n super.destroy()\n }\n\n replay () {\n let self = this\n let _replay = this._replay\n // ie9 bugfix\n removeClass(this.root, 'xgplayer-ended')\n if(sniffer.browser.indexOf('ie') > -1) {\n this.emit('play')\n this.emit('playing')\n }\n \n if (_replay && _replay instanceof Function) {\n _replay()\n } else {\n this.currentTime = 0\n // eslint-disable-next-line handle-callback-err\n let playPromise = this.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }\n }\n\n userGestureTrigEvent (name, param) {\n const defaultUserGestureEventHandler = (name, param) => {\n this.emit(name, param)\n }\n if(this.config.userGestureEventMiddleware && typeof this.config.userGestureEventMiddleware[name] === 'function') {\n this.config.userGestureEventMiddleware[name].call(this, this, name, param, defaultUserGestureEventHandler)\n } else {\n defaultUserGestureEventHandler.call(this, name, param);\n }\n }\n\n pluginsCall () {\n if(Player.plugins['s_i18n']) {\n Player.plugins['s_i18n'].call(this, this)\n }\n let self = this\n if (Player.plugins) {\n let ignores = this.config.ignores\n Object.keys(Player.plugins).forEach(name => {\n let descriptor = Player.plugins[name]\n if(!descriptor || typeof descriptor !== 'function'){\n console.warn('plugin name', name , 'is invalid')\n } else {\n if (!ignores.some(item => name === item || name === 's_' + item) && name !== 's_i18n') {\n if (['pc', 'tablet', 'mobile'].some(type => type === name)) {\n if (name === sniffer.device) {\n setTimeout(() => {\n // if destroyed, skip\n if (!self.video) return;\n descriptor.call(self, self)\n }, 0)\n }\n } else {\n descriptor.call(this, this)\n }\n }\n }\n })\n }\n }\n\n onFocus () {\n let player = this\n if(hasClass(this.root, 'xgplayer-inactive')) {\n player.emit('controlShow')\n }\n removeClass(this.root, 'xgplayer-inactive')\n if (player.userTimer) {\n clearTimeout(player.userTimer)\n }\n player.userTimer = setTimeout(function () {\n player.emit('blur')\n }, player.config.inactive)\n }\n\n onBlur () {\n // this.video.blur()\n if ((this.config.enablePausedInactive || !this.paused) && !this.ended && !this.config.closeInactive) {\n if(!hasClass(this.root, 'xgplayer-inactive')) {\n this.emit('controlHide')\n }\n addClass(this.root, 'xgplayer-inactive')\n }\n }\n\n onPlay () {\n addClass(this.root, 'xgplayer-isloading')\n addClass(this.root, 'xgplayer-playing')\n removeClass(this.root, 'xgplayer-pause')\n }\n\n onPause () {\n addClass(this.root, 'xgplayer-pause')\n if (this.userTimer) {\n clearTimeout(this.userTimer)\n }\n this.emit('focus')\n }\n\n onEnded () {\n addClass(this.root, 'xgplayer-ended')\n removeClass(this.root, 'xgplayer-playing')\n }\n\n onSeeking () {\n this.isSeeking = true\n // 兼容IE下无法触发waiting事件的问题 seeking的时候直接出发waiting\n this.onWaiting()\n // addClass(this.root, 'seeking');\n }\n\n // onTimeupdate () {\n // // for ie,playing fired before waiting\n // if (this.waitTimer) {\n // clearTimeout(this.waitTimer)\n // }\n // removeClass(this.root, 'xgplayer-isloading')\n\n // }\n\n onSeeked () {\n // for ie,playing fired before waiting\n this.once('timeupdate', () => {\n this.isSeeking = false\n })\n if (this.waitTimer) {\n clearTimeout(this.waitTimer)\n }\n removeClass(this.root, 'xgplayer-isloading')\n }\n\n onWaiting () {\n let self = this\n if (self.waitTimer) {\n clearTimeout(self.waitTimer)\n }\n if (self.checkTimer) {\n clearInterval(self.checkTimer)\n self.checkTimer = null\n }\n let time = self.currentTime\n self.waitTimer = setTimeout(function () {\n addClass(self.root, 'xgplayer-isloading')\n self.checkTimer = setInterval(function () {\n if (self.currentTime !== time) {\n removeClass(self.root, 'xgplayer-isloading')\n clearInterval(self.checkTimer)\n self.checkTimer = null\n }\n }, 1000)\n }, 500)\n }\n\n onPlaying () {\n // 兼容safari下无法自动播放会触发该事件的场景\n if (this.paused) {\n return\n }\n this.isSeeking = false\n if (this.waitTimer) {\n clearTimeout(this.waitTimer)\n }\n removeClass(this.root, 'xgplayer-isloading xgplayer-nostart xgplayer-pause xgplayer-ended xgplayer-is-error xgplayer-replay')\n addClass(this.root, 'xgplayer-playing')\n }\n\n static install (name, descriptor) {\n if (!checkIsBrowser()) {\n return\n }\n if (!Player.plugins) {\n Player.plugins = {}\n }\n if (!Player.plugins[name]) {\n Player.plugins[name] = descriptor\n }\n }\n\n static installAll (list) {\n for(let k = 0; k < list.length; k++){\n Player.install(list[k].name, list[k].method)\n }\n }\n\n static use (name, descriptor) {\n if (!Player.plugins) {\n Player.plugins = {}\n }\n Player.plugins[name] = descriptor\n }\n\n static useAll (list) {\n for (let k in list) {\n Player.use(list[k].name, list[k].method)\n }\n }\n\n static controlsRun (controlLst, context) {\n controlLst.forEach(function(control) {\n control.method.call(context)\n })\n }\n}\n\nPlayer.util = util\nPlayer.sniffer = sniffer\nPlayer.Errors = Errors\nPlayer.XgplayerTimeRange = XgplayerTimeRange\n\nexport default Player\n","\"use strict\";\n\nvar _undefined = require(\"../function/noop\")(); // Support ES3 engines\n\nmodule.exports = function (val) { return val !== _undefined && val !== null; };\n","export default class XgplayerTimeRange {\n constructor(bufferedList) {\n this.bufferedList = bufferedList\n }\n\n start (index) {\n return this.bufferedList[index].start\n }\n\n end (index) {\n return this.bufferedList[index].end\n }\n\n get length () {\n return this.bufferedList.length\n }\n}\n","import { typeOf } from '../../utils/util'\n\nlet s_i18n = function () {\n let player = this; let lang = {};\n lang.en = {\n HAVE_NOTHING: 'There is no information on whether audio/video is ready',\n HAVE_METADATA: 'Audio/video metadata is ready ',\n HAVE_CURRENT_DATA: 'Data about the current play location is available, but there is not enough data to play the next frame/millisecond',\n HAVE_FUTURE_DATA: 'Current and at least one frame of data is available',\n HAVE_ENOUGH_DATA: 'The available data is sufficient to start playing',\n NETWORK_EMPTY: 'Audio/video has not been initialized',\n NETWORK_IDLE: 'Audio/video is active and has been selected for resources, but no network is used',\n NETWORK_LOADING: 'The browser is downloading the data',\n NETWORK_NO_SOURCE: 'No audio/video source was found',\n MEDIA_ERR_ABORTED: 'The fetch process is aborted by the user',\n MEDIA_ERR_NETWORK: 'An error occurred while downloading',\n MEDIA_ERR_DECODE: 'An error occurred while decoding',\n MEDIA_ERR_SRC_NOT_SUPPORTED: 'Audio/video is not supported',\n REPLAY: 'Replay',\n ERROR: 'Network is offline',\n PLAY_TIPS: 'Play',\n PAUSE_TIPS: 'Pause',\n PLAYNEXT_TIPS: 'Play next',\n DOWNLOAD_TIPS: 'Download',\n ROTATE_TIPS: 'Rotate',\n RELOAD_TIPS: 'Reload',\n FULLSCREEN_TIPS: \"Fullscreen\",\n EXITFULLSCREEN_TIPS: 'Exit fullscreen',\n CSSFULLSCREEN_TIPS: 'Cssfullscreen',\n EXITCSSFULLSCREEN_TIPS: 'Exit cssfullscreen',\n TEXTTRACK: 'Caption',\n PIP: 'Pip',\n MINIPLAYER: 'Miniplayer',\n SCREENSHOT: 'Screenshot',\n LIVE: 'LIVE',\n OFF: 'Off',\n MINIPLAYER_DRAG: 'Click and hold to drag',\n AIRPLAY_TIPS: 'Airplay',\n }\n lang['zh-cn'] = {\n HAVE_NOTHING: '没有关于音频/视频是否就绪的信息',\n HAVE_METADATA: '音频/视频的元数据已就绪',\n HAVE_CURRENT_DATA: '关于当前播放位置的数据是可用的,但没有足够的数据来播放下一帧/毫秒',\n HAVE_FUTURE_DATA: '当前及至少下一帧的数据是可用的',\n HAVE_ENOUGH_DATA: '可用数据足以开始播放',\n NETWORK_EMPTY: '音频/视频尚未初始化',\n NETWORK_IDLE: '音频/视频是活动的且已选取资源,但并未使用网络',\n NETWORK_LOADING: '浏览器正在下载数据',\n NETWORK_NO_SOURCE: '未找到音频/视频来源',\n MEDIA_ERR_ABORTED: '取回过程被用户中止',\n MEDIA_ERR_NETWORK: '当下载时发生错误',\n MEDIA_ERR_DECODE: '当解码时发生错误',\n MEDIA_ERR_SRC_NOT_SUPPORTED: '不支持的音频/视频格式',\n REPLAY: '重播',\n ERROR: '网络连接似乎出现了问题',\n PLAY_TIPS: '播放',\n PAUSE_TIPS: '暂停',\n PLAYNEXT_TIPS: '下一集',\n DOWNLOAD_TIPS: '下载',\n ROTATE_TIPS: '旋转',\n RELOAD_TIPS: '重新载入',\n FULLSCREEN_TIPS: \"进入全屏\",\n EXITFULLSCREEN_TIPS: '退出全屏',\n CSSFULLSCREEN_TIPS: '进入样式全屏',\n EXITCSSFULLSCREEN_TIPS: '退出样式全屏',\n TEXTTRACK: '字幕',\n PIP: '画中画',\n MINIPLAYER: '迷你播放器',\n SCREENSHOT: '截图',\n LIVE: '正在直播',\n OFF: '关闭',\n MINIPLAYER_DRAG: '点击按住可拖动视频',\n AIRPLAY_TIPS: '隔空播放',\n }\n lang['zh-hk'] = {\n HAVE_NOTHING: '沒有關於音頻/視頻是否就緒的信息',\n HAVE_METADATA: '音頻/視頻的元數據已就緒',\n HAVE_CURRENT_DATA: '關於當前播放位置的數據是可用的,但沒有足夠的數據來播放下壹幀/毫秒',\n HAVE_FUTURE_DATA: '當前及至少下壹幀的數據是可用的',\n HAVE_ENOUGH_DATA: '可用數據足以開始播放',\n NETWORK_EMPTY: '音頻/視頻尚未初始化',\n NETWORK_IDLE: '音頻/視頻是活動的且已選取資源,但並未使用網絡',\n NETWORK_LOADING: '瀏覽器正在下載數據',\n NETWORK_NO_SOURCE: '未找到音頻/視頻來源',\n MEDIA_ERR_ABORTED: '取回過程被用戶中止',\n MEDIA_ERR_NETWORK: '當下載時發生錯誤',\n MEDIA_ERR_DECODE: '當解碼時發生錯誤',\n MEDIA_ERR_SRC_NOT_SUPPORTED: '不支持的音頻/視頻格式',\n REPLAY: '重播',\n ERROR: '網絡連接似乎出現了問題',\n PLAY_TIPS: '播放',\n PAUSE_TIPS: '暫停',\n PLAYNEXT_TIPS: '下壹集',\n DOWNLOAD_TIPS: '下載',\n ROTATE_TIPS: '旋轉',\n RELOAD_TIPS: '重新載入',\n FULLSCREEN_TIPS: \"進入全屏\",\n EXITFULLSCREEN_TIPS: '退出全屏',\n CSSFULLSCREEN_TIPS: '進入樣式全屏',\n EXITCSSFULLSCREEN_TIPS: '退出樣式全屏',\n TEXTTRACK: '字幕',\n PIP: '畫中畫',\n MINIPLAYER: '迷妳播放器',\n SCREENSHOT: '截圖',\n LIVE: '正在直播',\n OFF: '關閉',\n MINIPLAYER_DRAG: '點擊按住可拖動視頻',\n AIRPLAY_TIPS: '隔空播放',\n }\n lang['jp'] = {\n HAVE_NOTHING: 'オーディオ/ビデオが準備できているか情報がありません',\n HAVE_METADATA: 'オーディオ/ビデオのメタデータは準備できています',\n HAVE_CURRENT_DATA: '現在の再生位置に関するデータは利用可能ですが、次のフレーム/ミリ秒を再生するのに十分なデータがありません',\n HAVE_FUTURE_DATA: '現在、少なくとも次のフレームのデータが利用可能です',\n HAVE_ENOUGH_DATA: '利用可能なデータは再生を開始するのに十分です',\n NETWORK_EMPTY: 'オーディオ/ビデオが初期化されていません',\n NETWORK_IDLE: 'オーディオ/ビデオはアクティブでリソースが選択されていますが、ネットワークが使用されていません',\n NETWORK_LOADING: 'ブラウザーはデータをダウンロードしています',\n NETWORK_NO_SOURCE: 'オーディオ/ビデオ のソースが見つかりません',\n MEDIA_ERR_ABORTED: 'ユーザーによってフェッチプロセスが中止されました',\n MEDIA_ERR_NETWORK: 'ダウンロード中にエラーが発生しました',\n MEDIA_ERR_DECODE: 'デコード中にエラーが発生しました',\n MEDIA_ERR_SRC_NOT_SUPPORTED: 'オーディオ/ビデオ の形式がサポートされていません',\n REPLAY: 'リプレイ',\n ERROR: 'ネットワークの接続に問題が発生しました',\n PLAY_TIPS: 'プレイ',\n PAUSE_TIPS: '一時停止',\n PLAYNEXT_TIPS: '次をプレイ',\n DOWNLOAD_TIPS: 'ダウンロード',\n ROTATE_TIPS: '回転',\n RELOAD_TIPS: '再読み込み',\n FULLSCREEN_TIPS: \"フルスクリーン\",\n EXITFULLSCREEN_TIPS: 'フルスクリーンを終了',\n CSSFULLSCREEN_TIPS: 'シアターモード',\n EXITCSSFULLSCREEN_TIPS: 'シアターモードを終了',\n TEXTTRACK: '字幕',\n PIP: 'ミニプレーヤー',\n MINIPLAYER: 'ミニプレーヤー',\n SCREENSHOT: 'スクリーンショット',\n LIVE: '生放送',\n OFF: 'オフ',\n MINIPLAYER_DRAG: 'ボタンを押して働画をドラッグする',\n AIRPLAY_TIPS: '隔空放送',\n }\n\n Object.defineProperty(player, 'lang', {\n get: function () {\n if (player.config) {\n return lang[player.config.lang] || lang['en']\n } else {\n return lang['en']\n }\n },\n set: function (value) {\n if (typeOf(value) === 'Object') {\n Object.keys(value).forEach(key => {\n lang[key] = value[key]\n })\n }\n }\n })\n\n}\n\nexport default {\n name: 's_i18n',\n method: s_i18n\n}","\"use strict\";\n\n// ES3 safe\nvar _undefined = void 0;\n\nmodule.exports = function (value) { return value !== _undefined && value !== null; };\n","'use strict';\n\nvar d = require('d')\n , callable = require('es5-ext/object/valid-callable')\n\n , apply = Function.prototype.apply, call = Function.prototype.call\n , create = Object.create, defineProperty = Object.defineProperty\n , defineProperties = Object.defineProperties\n , hasOwnProperty = Object.prototype.hasOwnProperty\n , descriptor = { configurable: true, enumerable: false, writable: true }\n\n , on, once, off, emit, methods, descriptors, base;\n\non = function (type, listener) {\n\tvar data;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) {\n\t\tdata = descriptor.value = create(null);\n\t\tdefineProperty(this, '__ee__', descriptor);\n\t\tdescriptor.value = null;\n\t} else {\n\t\tdata = this.__ee__;\n\t}\n\tif (!data[type]) data[type] = listener;\n\telse if (typeof data[type] === 'object') data[type].push(listener);\n\telse data[type] = [data[type], listener];\n\n\treturn this;\n};\n\nonce = function (type, listener) {\n\tvar once, self;\n\n\tcallable(listener);\n\tself = this;\n\ton.call(this, type, once = function () {\n\t\toff.call(self, type, once);\n\t\tapply.call(listener, this, arguments);\n\t});\n\n\tonce.__eeOnceListener__ = listener;\n\treturn this;\n};\n\noff = function (type, listener) {\n\tvar data, listeners, candidate, i;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return this;\n\tdata = this.__ee__;\n\tif (!data[type]) return this;\n\tlisteners = data[type];\n\n\tif (typeof listeners === 'object') {\n\t\tfor (i = 0; (candidate = listeners[i]); ++i) {\n\t\t\tif ((candidate === listener) ||\n\t\t\t\t\t(candidate.__eeOnceListener__ === listener)) {\n\t\t\t\tif (listeners.length === 2) data[type] = listeners[i ? 0 : 1];\n\t\t\t\telse listeners.splice(i, 1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif ((listeners === listener) ||\n\t\t\t\t(listeners.__eeOnceListener__ === listener)) {\n\t\t\tdelete data[type];\n\t\t}\n\t}\n\n\treturn this;\n};\n\nemit = function (type) {\n\tvar i, l, listener, listeners, args;\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return;\n\tlisteners = this.__ee__[type];\n\tif (!listeners) return;\n\n\tif (typeof listeners === 'object') {\n\t\tl = arguments.length;\n\t\targs = new Array(l - 1);\n\t\tfor (i = 1; i < l; ++i) args[i - 1] = arguments[i];\n\n\t\tlisteners = listeners.slice();\n\t\tfor (i = 0; (listener = listeners[i]); ++i) {\n\t\t\tapply.call(listener, this, args);\n\t\t}\n\t} else {\n\t\tswitch (arguments.length) {\n\t\tcase 1:\n\t\t\tcall.call(listeners, this);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tcall.call(listeners, this, arguments[1]);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tcall.call(listeners, this, arguments[1], arguments[2]);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tl = arguments.length;\n\t\t\targs = new Array(l - 1);\n\t\t\tfor (i = 1; i < l; ++i) {\n\t\t\t\targs[i - 1] = arguments[i];\n\t\t\t}\n\t\t\tapply.call(listeners, this, args);\n\t\t}\n\t}\n};\n\nmethods = {\n\ton: on,\n\tonce: once,\n\toff: off,\n\temit: emit\n};\n\ndescriptors = {\n\ton: d(on),\n\tonce: d(once),\n\toff: d(off),\n\temit: d(emit)\n};\n\nbase = defineProperties({}, descriptors);\n\nmodule.exports = exports = function (o) {\n\treturn (o == null) ? create(base) : defineProperties(Object(o), descriptors);\n};\nexports.methods = methods;\n","'use strict';\n\nvar value = require('es5-ext/object/valid-object')\n\n , hasOwnProperty = Object.prototype.hasOwnProperty;\n\nmodule.exports = function (emitter/*, type*/) {\n\tvar type = arguments[1], data;\n\n\tvalue(emitter);\n\n\tif (type !== undefined) {\n\t\tdata = hasOwnProperty.call(emitter, '__ee__') && emitter.__ee__;\n\t\tif (!data) return;\n\t\tif (data[type]) delete data[type];\n\t\treturn;\n\t}\n\tif (hasOwnProperty.call(emitter, '__ee__')) delete emitter.__ee__;\n};\n","import { hasClass } from '../utils/util'\n\nlet mobile = function () {\n let player = this\n let root = player.root\n let clk = 0; let _click_\n let clickedTime = {\n first: '',\n second: ''\n }\n\n player.onElementTouchend = function (e, element) {\n if(!this.config.closeVideoPreventDefault) {\n e.preventDefault()\n }\n if(!this.config.closeVideoStopPropagation) {\n e.stopPropagation()\n }\n let player = this\n if (hasClass(root, 'xgplayer-inactive')) {\n player.emit('focus')\n } else {\n player.emit('blur')\n }\n if (!player.config.closeVideoTouch && !player.isTouchMove) {\n function onTouch() {\n _click_ = setTimeout(function () {\n if (hasClass(player.root, 'xgplayer-nostart')) {\n return false\n } else if (!player.ended) {\n if (player.paused) {\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n } else {\n player.pause()\n }\n }\n clk = 0\n }, 200)\n }\n if (!player.config.closeVideoClick) {\n clk++\n if (_click_) {\n clearTimeout(_click_)\n }\n if (clk === 1) {\n if(player.config.enableVideoDbltouch) {\n clickedTime.first = new Date()\n } else {\n onTouch()\n }\n } else if (clk === 2) {\n if(player.config.enableVideoDbltouch) {\n clickedTime.second = new Date()\n if (Math.abs(clickedTime.first - clickedTime.second) < 400) {\n // 双击\n onTouch()\n } else {\n clickedTime.first = new Date()\n clk = 1\n }\n } else {\n clk = 0\n }\n } else {\n clk = 0\n }\n }\n }\n }\n\n function onReady (e) {\n player.video.addEventListener('touchend', function (e) {\n player.onElementTouchend(e, player.video)\n })\n player.video.addEventListener('touchstart', () => {\n player.isTouchMove = false\n })\n player.video.addEventListener('touchmove', () => {\n player.isTouchMove = true\n })\n if (player.config.autoplay) {\n player.start()\n }\n }\n player.once('ready', onReady)\n\n function onDestroy () {\n player.off('ready', onReady)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'mobile',\n method: mobile\n}","import { hasClass } from '../utils/util'\n\nlet pc = function () {\n let player = this\n if(!player.controls || !player.video) return\n let controls = player.controls; let root = player.root\n let clk = 0; let _click_\n\n player.onElementClick = function (e, element) {\n if(!this.config.closeVideoPreventDefault) {\n e.preventDefault()\n }\n if(!this.config.closeVideoStopPropagation) {\n e.stopPropagation()\n }\n let player = this\n if (!player.config.closeVideoClick) {\n clk++\n if (_click_) {\n clearTimeout(_click_)\n }\n if (clk === 1) {\n _click_ = setTimeout(function () {\n if (hasClass(player.root, 'xgplayer-nostart')) {\n return false\n } else if (!player.ended) {\n if (player.paused) {\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n } else {\n player.pause()\n }\n }\n clk = 0\n }, 200)\n } else {\n clk = 0\n }\n }\n }\n player.video.addEventListener('click', function (e) { player.onElementClick(e, player.video) }, false)\n\n player.onElementDblclick = function (e, element) {\n if(!this.config.closeVideoPreventDefault) {\n e.preventDefault()\n }\n if(!this.config.closeVideoStopPropagation) {\n e.stopPropagation()\n }\n let player = this\n if (!player.config.closeVideoDblclick) {\n let fullscreen = controls.querySelector('.xgplayer-fullscreen')\n if (fullscreen) {\n let clk\n if (document.createEvent) {\n clk = document.createEvent('Event')\n clk.initEvent('click', true, true)\n } else {\n clk = new Event('click')\n }\n fullscreen.dispatchEvent(clk)\n }\n }\n }\n player.video.addEventListener('dblclick', function (e) { player.onElementDblclick(e, player.video) }, false)\n\n function onMouseEnter () {\n clearTimeout(player.leavePlayerTimer)\n player.emit('focus', player)\n }\n root.addEventListener('mouseenter', onMouseEnter)\n\n function onMouseLeave () {\n if(!player.config.closePlayerBlur) {\n player.leavePlayerTimer = setTimeout(function () {\n player.emit('blur', player)\n }, player.config.leavePlayerTime || 0)\n }\n }\n root.addEventListener('mouseleave', onMouseLeave)\n\n function onControlMouseEnter (e) {\n if (player.userTimer) {\n clearTimeout(player.userTimer)\n }\n }\n controls.addEventListener('mouseenter', onControlMouseEnter)\n\n function onControlMouseLeave (e) {\n if(!player.config.closeControlsBlur) {\n player.emit('focus', player)\n }\n }\n controls.addEventListener('mouseleave', onControlMouseLeave)\n\n function onControlClick (e) {\n e.preventDefault()\n e.stopPropagation()\n }\n controls.addEventListener('click', onControlClick)\n\n function onReady (e) {\n if (player.config.autoplay) {\n player.start()\n }\n }\n player.once('ready', onReady)\n\n function onDestroy () {\n root.removeEventListener('mouseenter', onMouseEnter)\n root.removeEventListener('mouseleave', onMouseLeave)\n player.off('ready', onReady)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'pc',\n method: pc\n}","import { addClass, hasClass, removeClass } from '../utils/util'\n\nlet start = function () {\n let player = this\n let root = player.root\n\n function onCanPlay () {\n player.off('canplay', onCanPlay)\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }\n\n function onStartBtnClick () {\n if (hasClass(root, 'xgplayer-nostart')) {\n removeClass(root, 'xgplayer-nostart') // for ie quick switch\n addClass(root, 'xgplayer-is-enter')\n\n if(typeof root.contains === 'function') {\n if((player.video && player.video.nodeType === 1 && !root.contains(player.video)) || (player.video && player.video.nodeType !== 1 && player.video.mediaSource === undefined)) {\n player.once('canplay', onCanPlay)\n player.start()\n } else {\n onCanPlay()\n }\n } else {\n if((player.video && player.video.nodeType === 1 && !root.querySelector(this.videoConfig.mediaType)) || (player.video && player.video.nodeType !== 1 && player.video.mediaSource === undefined)) {\n player.once('canplay', onCanPlay)\n player.start()\n } else {\n onCanPlay()\n }\n }\n } else {\n if (player.paused) {\n removeClass(root, 'xgplayer-nostart xgplayer-isloading')\n setTimeout(() => {\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }, 10)\n }\n }\n }\n player.on('startBtnClick', onStartBtnClick)\n\n function onDestroy () {\n player.off('startBtnClick', onStartBtnClick)\n player.off('canplay', onCanPlay)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'start',\n method: start\n}","import { createDom, addClass, removeClass, isWeiXin, isUc } from '../../utils/util'\nimport StartPlayIcon from '../assets/startPlay.svg'\nimport StartPauseIcon from '../assets/startPause.svg'\nimport '../style/controls/start.scss'\n\nlet s_start = function () {\n let player = this\n let root = player.root\n let btn = createDom('xg-start', `<div class=\"xgplayer-icon-play\">${StartPlayIcon}</div>\n <div class=\"xgplayer-icon-pause\">${StartPauseIcon}</div>`, {}, 'xgplayer-start')\n function onPlayerReady(player) {\n addClass(player.root, 'xgplayer-skin-default')\n if (player.config) {\n player.config.autoplay && !isWeiXin() && !isUc() && addClass(player.root, 'xgplayer-is-enter')\n if (player.config.lang && player.config.lang === 'en') {\n addClass(player.root, 'xgplayer-lang-is-en')\n } else if (player.config.lang === 'jp') {\n addClass(player.root, 'xgplayer-lang-is-jp')\n }\n if(!player.config.enableContextmenu) {\n player.video.addEventListener('contextmenu', e => {\n e.preventDefault()\n e.stopPropagation()\n })\n }\n }\n }\n\n if(player.config && player.config.hideStartBtn) {\n addClass(root, 'xgplayer-start-hide')\n }\n\n if (player.isReady) {\n root.appendChild(btn)\n onPlayerReady(player)\n } else {\n player.once('ready', () => {\n root.appendChild(btn)\n onPlayerReady(player)\n });\n }\n\n player.once('autoplay was prevented', () => {\n removeClass(player.root, 'xgplayer-is-enter')\n addClass(player.root, 'xgplayer-nostart')\n })\n\n player.once('canplay', () => {\n removeClass(player.root, 'xgplayer-is-enter')\n })\n\n btn.onclick = e => {\n e.preventDefault()\n e.stopPropagation()\n player.userGestureTrigEvent('startBtnClick')\n }\n}\n\nexport default {\n name: 's_start',\n method: s_start\n}","\"use strict\";\n\nvar isValue = require(\"type/value/is\")\n , isPlainFunction = require(\"type/plain-function/is\")\n , assign = require(\"es5-ext/object/assign\")\n , normalizeOpts = require(\"es5-ext/object/normalize-options\")\n , contains = require(\"es5-ext/string/#/contains\");\n\nvar d = (module.exports = function (dscr, value/*, options*/) {\n\tvar c, e, w, options, desc;\n\tif (arguments.length < 2 || typeof dscr !== \"string\") {\n\t\toptions = value;\n\t\tvalue = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[2];\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t\tw = contains.call(dscr, \"w\");\n\t} else {\n\t\tc = w = true;\n\t\te = false;\n\t}\n\n\tdesc = { value: value, configurable: c, enumerable: e, writable: w };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n});\n\nd.gs = function (dscr, get, set/*, options*/) {\n\tvar c, e, options, desc;\n\tif (typeof dscr !== \"string\") {\n\t\toptions = set;\n\t\tset = get;\n\t\tget = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[3];\n\t}\n\tif (!isValue(get)) {\n\t\tget = undefined;\n\t} else if (!isPlainFunction(get)) {\n\t\toptions = get;\n\t\tget = set = undefined;\n\t} else if (!isValue(set)) {\n\t\tset = undefined;\n\t} else if (!isPlainFunction(set)) {\n\t\toptions = set;\n\t\tset = undefined;\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t} else {\n\t\tc = true;\n\t\te = false;\n\t}\n\n\tdesc = { get: get, set: set, configurable: c, enumerable: e };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n};\n","\"use strict\";\n\nvar isFunction = require(\"../function/is\");\n\nvar classRe = /^\\s*class[\\s{/}]/, functionToString = Function.prototype.toString;\n\nmodule.exports = function (value) {\n\tif (!isFunction(value)) return false;\n\tif (classRe.test(functionToString.call(value))) return false;\n\treturn true;\n};\n","\"use strict\";\n\nvar isPrototype = require(\"../prototype/is\");\n\nmodule.exports = function (value) {\n\tif (typeof value !== \"function\") return false;\n\n\tif (!hasOwnProperty.call(value, \"length\")) return false;\n\n\ttry {\n\t\tif (typeof value.length !== \"number\") return false;\n\t\tif (typeof value.call !== \"function\") return false;\n\t\tif (typeof value.apply !== \"function\") return false;\n\t} catch (error) {\n\t\treturn false;\n\t}\n\n\treturn !isPrototype(value);\n};\n","\"use strict\";\n\nvar isObject = require(\"../object/is\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) return false;\n\ttry {\n\t\tif (!value.constructor) return false;\n\t\treturn value.constructor.prototype === value;\n\t} catch (error) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"../value/is\");\n\n// prettier-ignore\nvar possibleTypes = { \"object\": true, \"function\": true, \"undefined\": true /* document.all */ };\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) return false;\n\treturn hasOwnProperty.call(possibleTypes, typeof value);\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.assign : require(\"./shim\");\n","\"use strict\";\n\nmodule.exports = function () {\n\tvar assign = Object.assign, obj;\n\tif (typeof assign !== \"function\") return false;\n\tobj = { foo: \"raz\" };\n\tassign(obj, { bar: \"dwa\" }, { trzy: \"trzy\" });\n\treturn obj.foo + obj.bar + obj.trzy === \"razdwatrzy\";\n};\n","\"use strict\";\n\nvar keys = require(\"../keys\")\n , value = require(\"../valid-value\")\n , max = Math.max;\n\nmodule.exports = function (dest, src /*, …srcn*/) {\n\tvar error, i, length = max(arguments.length, 2), assign;\n\tdest = Object(value(dest));\n\tassign = function (key) {\n\t\ttry {\n\t\t\tdest[key] = src[key];\n\t\t} catch (e) {\n\t\t\tif (!error) error = e;\n\t\t}\n\t};\n\tfor (i = 1; i < length; ++i) {\n\t\tsrc = arguments[i];\n\t\tkeys(src).forEach(assign);\n\t}\n\tif (error !== undefined) throw error;\n\treturn dest;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.keys : require(\"./shim\");\n","\"use strict\";\n\nmodule.exports = function () {\n\ttry {\n\t\tObject.keys(\"primitive\");\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"../is-value\");\n\nvar keys = Object.keys;\n\nmodule.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };\n","\"use strict\";\n\n// eslint-disable-next-line no-empty-function\nmodule.exports = function () {};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) throw new TypeError(\"Cannot use null or undefined\");\n\treturn value;\n};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nvar forEach = Array.prototype.forEach, create = Object.create;\n\nvar process = function (src, obj) {\n\tvar key;\n\tfor (key in src) obj[key] = src[key];\n};\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function (opts1 /*, …options*/) {\n\tvar result = create(null);\n\tforEach.call(arguments, function (options) {\n\t\tif (!isValue(options)) return;\n\t\tprocess(Object(options), result);\n\t});\n\treturn result;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? String.prototype.contains : require(\"./shim\");\n","\"use strict\";\n\nvar str = \"razdwatrzy\";\n\nmodule.exports = function () {\n\tif (typeof str.contains !== \"function\") return false;\n\treturn str.contains(\"dwa\") === true && str.contains(\"foo\") === false;\n};\n","\"use strict\";\n\nvar indexOf = String.prototype.indexOf;\n\nmodule.exports = function (searchString /*, position*/) {\n\treturn indexOf.call(this, searchString, arguments[1]) > -1;\n};\n","\"use strict\";\n\nmodule.exports = function (fn) {\n\tif (typeof fn !== \"function\") throw new TypeError(fn + \" is not a function\");\n\treturn fn;\n};\n","\"use strict\";\n\nvar isObject = require(\"./is-object\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) throw new TypeError(value + \" is not an Object\");\n\treturn value;\n};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nvar map = { function: true, object: true };\n\nmodule.exports = function (value) { return (isValue(value) && map[typeof value]) || false; };\n","\nvar content = require(\"!!../../../node_modules/css-loader/index.js??ref--5-1!../../../node_modules/postcss-loader/lib/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./index.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/index.js??ref--5-1!../../../node_modules/postcss-loader/lib/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./index.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/index.js??ref--5-1!../../../node_modules/postcss-loader/lib/index.js!../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./index.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default{background:#000;width:100%;height:100%;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;-ms-user-select:none}.xgplayer-skin-default *{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}.xgplayer-skin-default.xgplayer-rotate-fullscreen{position:absolute;top:0;left:100%;bottom:0;right:0;height:100vw!important;width:100vh!important;-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.xgplayer-skin-default.xgplayer-is-fullscreen{width:100%!important;height:100%!important;padding-top:0!important;z-index:9999}.xgplayer-skin-default.xgplayer-is-fullscreen.xgplayer-inactive{cursor:none}.xgplayer-skin-default video{width:100%;height:100%;outline:none}.xgplayer-skin-default .xgplayer-none{display:none}@-webkit-keyframes loadingRotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loadingRotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes loadingDashOffset{0%{stroke-dashoffset:236}to{stroke-dashoffset:0}}@keyframes loadingDashOffset{0%{stroke-dashoffset:236}to{stroke-dashoffset:0}}.xgplayer-skin-default .xgplayer-controls{display:-webkit-flex;display:-moz-box;display:flex;position:absolute;bottom:0;left:0;right:0;height:40px;background-image:linear-gradient(180deg,transparent,rgba(0,0,0,.37),rgba(0,0,0,.75),rgba(0,0,0,.75));z-index:10}.xgplayer-skin-default.xgplayer-inactive .xgplayer-controls,.xgplayer-skin-default.xgplayer-is-live .xgplayer-controls .xgplayer-progress,.xgplayer-skin-default.xgplayer-is-live .xgplayer-controls .xgplayer-time,.xgplayer-skin-default.xgplayer-no-controls .xgplayer-controls,.xgplayer-skin-default.xgplayer-nostart .xgplayer-controls{display:none}.xgplayer-skin-default.xgplayer-is-live .xgplayer-controls .xgplayer-live{display:block}.xgplayer-skin-default .xgplayer-live{display:block;font-size:12px;color:#fff;line-height:40px;-webkit-order:1;-moz-box-ordinal-group:2;order:1}.xgplayer-skin-default .xgplayer-icon{display:block;width:40px;height:40px;overflow:hidden;fill:#fff}.xgplayer-skin-default .xgplayer-icon svg{position:absolute}.xgplayer-skin-default .xgplayer-tips{background:rgba(0,0,0,.54);border-radius:1px;display:none;position:absolute;font-family:PingFangSC-Regular;font-size:11px;color:#fff;padding:2px 4px;text-align:center;top:-30px;left:50%;margin-left:-16px;width:auto;white-space:nowrap}.xgplayer-skin-default.xgplayer-mobile .xgplayer-tips{display:none!important}.xgplayer-skin-default .xgplayer-screen-container{display:block;width:100%}\", \"\"]);\n\n// exports\n","\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n // get current location\n var location = typeof window !== \"undefined\" && window.location;\n\n if (!location) {\n throw new Error(\"fixUrls requires window.location\");\n }\n\n\t// blank or null?\n\tif (!css || typeof css !== \"string\") {\n\t return css;\n }\n\n var baseUrl = location.protocol + \"//\" + location.host;\n var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\( = Match on the word \"url\" with any whitespace after it and then a parens\n\t ( = Start a capturing group\n\t (?: = Start a non-capturing group\n\t [^)(] = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t (?: = Start another non-capturing groups\n\t [^)(]+ = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t [^)(]* = Match anything that isn't a parentheses\n\t \\) = Match a end parentheses\n\t ) = End Group\n *\\) = Match anything and then a close parens\n ) = Close non-capturing group\n * = Match anything\n ) = Close capturing group\n\t \\) = Match a close parens\n\n\t /gi = Get all matches, not the first. Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\"(.*)\"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(unquotedOrigUrl)) {\n\t\t return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\"//\") === 0) {\n\t\t \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \"url(\" + JSON.stringify(newUrl) + \")\";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n","\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./start.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./start.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./start.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-start{border-radius:50%;display:inline-block;width:70px;height:70px;background:rgba(0,0,0,.38);overflow:hidden;text-align:center;line-height:70px;vertical-align:middle;position:absolute;left:50%;top:50%;z-index:115;margin:-35px auto auto -35px;cursor:pointer}.xgplayer-skin-default .xgplayer-start div{position:absolute}.xgplayer-skin-default .xgplayer-start div svg{fill:hsla(0,0%,100%,.7)}.xgplayer-skin-default .xgplayer-start .xgplayer-icon-play{display:block}.xgplayer-skin-default .xgplayer-start .xgplayer-icon-pause{display:none}.xgplayer-skin-default .xgplayer-start:hover{opacity:.85}.xgplayer-skin-default.xgplayer-pause.xgplayer-start-hide .xgplayer-start,.xgplayer-skin-default.xgplayer-playing .xgplayer-start,.xgplayer-skin-default.xgplayer-playing .xgplayer-start .xgplayer-icon-play,.xgplayer-skin-default.xgplayer-start-hide .xgplayer-start{display:none}.xgplayer-skin-default.xgplayer-playing .xgplayer-start .xgplayer-icon-pause{display:block}.xgplayer-skin-default.xgplayer-pause .xgplayer-start{display:inline-block}.xgplayer-skin-default.xgplayer-pause .xgplayer-start .xgplayer-icon-play{display:block}.xgplayer-skin-default.xgplayer-is-replay .xgplayer-start,.xgplayer-skin-default.xgplayer-pause .xgplayer-start .xgplayer-icon-pause{display:none}.xgplayer-skin-default.xgplayer-is-replay .xgplayer-start .xgplayer-icon-play{display:block}.xgplayer-skin-default.xgplayer-is-replay .xgplayer-start .xgplayer-icon-pause{display:none}\", \"\"]);\n\n// exports\n","import { hasClass, addClass, removeClass, PresentationMode, checkWebkitSetPresentationMode } from '../utils/util'\n\nlet fullscreen = function () {\n let player = this\n let root = player.root\n\n function onFullscreenBtnClick () {\n if (player.config.rotateFullscreen) {\n if (hasClass(root, 'xgplayer-rotate-fullscreen')) {\n player.exitRotateFullscreen()\n } else {\n player.getRotateFullscreen()\n }\n } else {\n if (hasClass(root, 'xgplayer-is-fullscreen')) {\n player.exitFullscreen(root)\n } else {\n player.getFullscreen(root)\n }\n }\n }\n player.on('fullscreenBtnClick', onFullscreenBtnClick)\n\n function onFullscreenChange () {\n let fullscreenEl = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement\n if (fullscreenEl && fullscreenEl === root) {\n addClass(root, 'xgplayer-is-fullscreen')\n player.emit('requestFullscreen')\n } else if (hasClass(root, 'xgplayer-is-fullscreen')) {\n removeClass(root, 'xgplayer-is-fullscreen')\n player.emit('exitFullscreen')\n }\n if (player.danmu && typeof player.danmu.resize === 'function') {\n player.danmu.resize()\n }\n };\n ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'].forEach(item => {\n document.addEventListener(item, onFullscreenChange)\n })\n\n player.video.addEventListener('webkitbeginfullscreen', function () {\n addClass(root, 'xgplayer-is-fullscreen')\n player.emit('requestFullscreen')\n })\n\n player.video.addEventListener('webkitendfullscreen', function () {\n removeClass(root, 'xgplayer-is-fullscreen')\n player.emit('exitFullscreen')\n })\n\n function onWebkitpresentationmodechanged (e) {\n const mode = player.video.webkitPresentationMode\n // 非全屏模式 退出全屏\n if (mode !== PresentationMode.FULLSCREEN) {\n removeClass(root, 'xgplayer-is-fullscreen')\n player.emit('exitFullscreen')\n }\n }\n\n checkWebkitSetPresentationMode(player.video) &&\n player.video.addEventListener('webkitpresentationmodechanged', onWebkitpresentationmodechanged)\n\n function onDestroy () {\n player.off('fullscreenBtnClick', onFullscreenBtnClick);\n ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'].forEach(item => {\n document.removeEventListener(item, onFullscreenChange)\n })\n\n checkWebkitSetPresentationMode(player.video) &&\n player.video.removeEventListener('webkitpresentationmodechanged', onWebkitpresentationmodechanged)\n\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n\n player.getFullscreen = function (el) {\n let player = this\n if (el.requestFullscreen) {\n let fullscreenPromise = el.requestFullscreen()\n if (fullscreenPromise) {\n fullscreenPromise.catch(function () {\n player.emit('fullscreen error')\n })\n }\n } else if (el.mozRequestFullScreen) {\n el.mozRequestFullScreen()\n } else if (el.webkitRequestFullscreen) {\n el.webkitRequestFullscreen(window.Element.ALLOW_KEYBOARD_INPUT)\n } else if (player.video.webkitSupportsFullscreen) {\n player.video.webkitEnterFullscreen()\n } else if (el.msRequestFullscreen) {\n el.msRequestFullscreen()\n } else {\n addClass(el, 'xgplayer-is-cssfullscreen')\n }\n }\n\n player.exitFullscreen = function (el) {\n if (document.exitFullscreen) {\n document.exitFullscreen()\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen()\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen()\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen()\n }\n removeClass(el, 'xgplayer-is-cssfullscreen')\n }\n\n player.getRotateFullscreen = function () {\n let player = this\n document.documentElement.style.width = '100%'\n document.documentElement.style.height = '100%'\n if (player.config.fluid) {\n player.root.style['padding-top'] = ''\n player.root.style['max-width'] = 'unset'\n }\n if (player.root && !hasClass(player.root, 'xgplayer-rotate-fullscreen')) {\n addClass(player.root, 'xgplayer-rotate-fullscreen')\n }\n player.emit('getRotateFullscreen')\n }\n\n player.exitRotateFullscreen = function () {\n let player = this\n document.documentElement.style.width = 'unset'\n document.documentElement.style.height = 'unset'\n if (player.config.fluid) {\n player.root.style['width'] = '100%'\n player.root.style['height'] = '0'\n player.root.style['padding-top'] = `${player.config.height * 100 / player.config.width}%`\n player.root.style['max-width'] = '100%'\n }\n if (player.root && hasClass(player.root, 'xgplayer-rotate-fullscreen')) {\n removeClass(player.root, 'xgplayer-rotate-fullscreen')\n }\n player.emit('exitRotateFullscreen')\n }\n}\n\nexport default {\n name: 'fullscreen',\n method: fullscreen\n}\n","import { hasClass } from '../utils/util'\n\nlet play = function () {\n let player = this\n\n function onPlayBtnClick () {\n if (!player.config.allowPlayAfterEnded && player.ended) {\n return\n }\n if(hasClass(player.root, 'xgplayer-nostart')) {\n player.start()\n }\n if (player.paused) {\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n } else {\n player.pause()\n }\n }\n player.on('playBtnClick', onPlayBtnClick)\n\n function onDestroy () {\n player.off('playBtnClick', onPlayBtnClick)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'play',\n method: play\n}","import { addClass, removeClass } from '../utils/util'\n\nlet replay = function () {\n let player = this\n let root = player.root\n\n function onReplayBtnClick () {\n removeClass(root, 'xgplayer-is-replay')\n player.replay()\n }\n player.on('replayBtnClick', onReplayBtnClick)\n\n function onEnded () {\n if (!player.config.loop) {\n addClass(root, 'xgplayer-is-replay')\n }\n }\n player.on('ended', onEnded)\n\n function onDestroy () {\n player.off('replayBtnClick', onReplayBtnClick)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'replay',\n method: replay\n}","import { createDom } from '../../utils/util'\nimport '../style/controls/poster.scss'\n\nlet s_poster = function () {\n let player = this\n let root = player.root\n if (!player.config.poster) {\n return\n }\n let poster = createDom('xg-poster', '', {}, 'xgplayer-poster')\n poster.style.backgroundImage = `url(${player.config.poster})`\n root.appendChild(poster)\n}\n\nexport default {\n name: 's_poster',\n method: s_poster\n}","import { createDom } from '../../utils/util'\nimport '../style/controls/placeholder.scss'\n\nlet s_flex = function () {\n let player = this\n let playceholder = createDom('xg-placeholder', '', {}, 'xgplayer-placeholder')\n player.controls.appendChild(playceholder)\n}\n\nexport default {\n name: 's_flex',\n method: s_flex\n}","import { createDom, addClass, removeClass, hasClass, toggleClass, typeOf, event, format, findDom } from '../../utils/util'\r\nimport sniffer from '../../utils/sniffer'\r\nimport '../style/controls/progress.scss'\r\n\r\nconst isRotateFullscreen = (player) => {\r\n return hasClass(player.root, 'xgplayer-rotate-fullscreen')\r\n}\r\n\r\nlet s_progress = function () {\r\n let player = this\r\n let container = createDom('xg-progress', `<xg-outer class=\"xgplayer-progress-outer\">\r\n <xg-cache class=\"xgplayer-progress-cache\"></xg-cache>\r\n <xg-played class=\"xgplayer-progress-played\">\r\n <xg-progress-btn class=\"xgplayer-progress-btn\"></xg-progress-btn>\r\n <xg-point class=\"xgplayer-progress-point xgplayer-tips\"></xg-point>\r\n <xg-thumbnail class=\"xgplayer-progress-thumbnail xgplayer-tips\"></xg-thumbnail>\r\n </xg-played>\r\n </xg-outer>`, {tabindex: 1}, 'xgplayer-progress')\r\n let containerWidth\r\n player.controls.appendChild(container)\r\n let progress = container.querySelector('.xgplayer-progress-played')\r\n let outer = container.querySelector('.xgplayer-progress-outer')\r\n let cache = container.querySelector('.xgplayer-progress-cache')\r\n let point = container.querySelector('.xgplayer-progress-point')\r\n let thumbnail = container.querySelector('.xgplayer-progress-thumbnail')\r\n player.dotArr = {}\r\n function dotEvent (dotItem, text) {\r\n dotItem.addEventListener('mouseenter', function (e) {\r\n if (text) {\r\n addClass(dotItem, 'xgplayer-progress-dot-show')\r\n addClass(container, 'xgplayer-progress-dot-active')\r\n }\r\n })\r\n dotItem.addEventListener('mouseleave', function (e) {\r\n if (text) {\r\n removeClass(dotItem, 'xgplayer-progress-dot-show')\r\n removeClass(container, 'xgplayer-progress-dot-active')\r\n }\r\n })\r\n dotItem.addEventListener('touchend', function (e) {\r\n // e.preventDefault()\r\n e.stopPropagation()\r\n if (text) {\r\n if (!hasClass(dotItem, 'xgplayer-progress-dot-show')) {\r\n Object.keys(player.dotArr).forEach(function (key) {\r\n if (player.dotArr[key]) {\r\n removeClass(player.dotArr[key], 'xgplayer-progress-dot-show')\r\n }\r\n })\r\n }\r\n toggleClass(dotItem, 'xgplayer-progress-dot-show')\r\n toggleClass(container, 'xgplayer-progress-dot-active')\r\n }\r\n })\r\n }\r\n function onCanplay () {\r\n if (player.config.progressDot && typeOf(player.config.progressDot) === 'Array') {\r\n player.config.progressDot.forEach(item => {\r\n if (item.time >= 0 && item.time <= player.duration) {\r\n let dot = createDom('xg-progress-dot', item.text ? `<span class=\"xgplayer-progress-tip\">${item.text}</span>` : '', {}, 'xgplayer-progress-dot')\r\n dot.style.left = (item.time / player.duration) * 100 + '%'\r\n if (item.duration >= 0) {\r\n dot.style.width = (Math.min(item.duration, player.duration - item.time) / player.duration) * 100 + '%'\r\n }\r\n if(item.style) {\r\n for(let k in item.style) {\r\n dot.style[k] = item.style[k]\r\n }\r\n }\r\n outer.appendChild(dot)\r\n player.dotArr[item.time] = dot\r\n dotEvent(dot, item.text)\r\n }\r\n })\r\n }\r\n }\r\n player.once('canplay', onCanplay)\r\n player.addProgressDot = function (time, text, duration, style) {\r\n if (player.dotArr[time]) {\r\n return\r\n }\r\n if (time >= 0 && time <= player.duration) {\r\n let dot = createDom('xg-progress-dot', text ? `<span class=\"xgplayer-progress-tip\">${text}</span>` : '', {}, 'xgplayer-progress-dot')\r\n dot.style.left = (time / player.duration) * 100 + '%'\r\n if (duration >= 0) {\r\n dot.style.width = (Math.min(duration, player.duration - time) / player.duration) * 100 + '%'\r\n }\r\n if(style) {\r\n for(let k in style) {\r\n dot.style[k] = style[k]\r\n }\r\n }\r\n outer.appendChild(dot)\r\n player.dotArr[time] = dot\r\n dotEvent(dot, text)\r\n }\r\n }\r\n player.removeProgressDot = function (time) {\r\n if (time >= 0 && time <= player.duration && player.dotArr[time]) {\r\n let dot = player.dotArr[time]\r\n dot.parentNode.removeChild(dot)\r\n dot = null\r\n player.dotArr[time] = null\r\n }\r\n }\r\n player.removeAllProgressDot = function () {\r\n Object.keys(player.dotArr).forEach(function (key) {\r\n if (player.dotArr[key]) {\r\n let dot = player.dotArr[key]\r\n dot.parentNode.removeChild(dot)\r\n dot = null\r\n player.dotArr[key] = null\r\n }\r\n })\r\n }\r\n let tnailPicNum = 0\r\n let tnailWidth = 0\r\n let tnailHeight = 0\r\n let tnailCol = 0\r\n let tnailRow = 0\r\n let interval = 0\r\n let tnailUrls = []\r\n let coverPreviewContainer, coverPreviewPoint, coverPreviewOuter\r\n let onLoadedmetadata = function() {\r\n if (player.config.thumbnail) {\r\n if(player.config.thumbnail.isShowCoverPreview && !coverPreviewContainer) {\r\n progress.removeChild(thumbnail)\r\n coverPreviewContainer = createDom('xg-coverpreview', `<xg-outer class=\"xgplayer-coverpreview-outer\">\r\n <xg-thumbnail class=\"xgplayer-coverpreview-thumbnail\"></xg-thumbnail>\r\n <xg-point class=\"xgplayer-coverpreview-point\"></xg-point>\r\n </xg-outer>`, {tabindex: 1}, 'xgplayer-coverpreview')\r\n coverPreviewOuter = coverPreviewContainer.querySelector('.xgplayer-coverpreview-outer')\r\n coverPreviewPoint = coverPreviewContainer.querySelector('.xgplayer-coverpreview-point')\r\n thumbnail = coverPreviewContainer.querySelector('.xgplayer-coverpreview-thumbnail')\r\n player.root.appendChild(coverPreviewContainer)\r\n }\r\n tnailPicNum = player.config.thumbnail.pic_num\r\n tnailWidth = player.config.thumbnail.width\r\n tnailHeight = player.config.thumbnail.height\r\n tnailCol = player.config.thumbnail.col\r\n tnailRow = player.config.thumbnail.row\r\n tnailUrls = player.config.thumbnail.urls\r\n thumbnail.style.width = `${tnailWidth}px`\r\n thumbnail.style.height = `${tnailHeight}px`\r\n };\r\n };\r\n player.on('loadedmetadata', onLoadedmetadata);\r\n\r\n if (typeof player.config.disableSwipeHandler === 'function' && typeof player.config.enableSwipeHandler === 'function') {\r\n player.root.addEventListener('touchmove', e => {\r\n e.preventDefault();\r\n // e.stopPropagation();\r\n if (!player.disableSwipe) {\r\n player.disableSwipe = true\r\n player.config.disableSwipeHandler.call(player);\r\n }\r\n });\r\n player.root.addEventListener('touchstart', e => {\r\n // e.preventDefault();\r\n player.disableSwipe = true\r\n player.config.disableSwipeHandler.call(player);\r\n });\r\n player.root.addEventListener('touchend', e => {\r\n // e.preventDefault();\r\n player.disableSwipe = false\r\n player.config.enableSwipeHandler.call(player);\r\n });\r\n };\r\n let events = ['touchstart', 'mousedown'];\r\n if (sniffer.device === 'mobile') {\r\n // 解决在移动端触发多次seeking问题\r\n events.pop()\r\n }\r\n events.forEach(item => {\r\n container.addEventListener(item, function (e) {\r\n if (player.config.disableProgress) return;\r\n // e.preventDefault()\r\n e.stopPropagation()\r\n event(e)\r\n if (e._target === point || (!player.config.allowSeekAfterEnded && player.ended)) {\r\n return true\r\n }\r\n\r\n container.focus()\r\n let {left} = progress.getBoundingClientRect()\r\n\r\n const isRotate = isRotateFullscreen(player)\r\n if (isRotate) {\r\n left = progress.getBoundingClientRect().top\r\n containerWidth = container.getBoundingClientRect().height\r\n } else {\r\n containerWidth = container.getBoundingClientRect().width\r\n left = progress.getBoundingClientRect().left\r\n }\r\n\r\n let move = function (e) {\r\n // e.preventDefault()\r\n e.stopPropagation()\r\n event(e)\r\n player.isProgressMoving = true\r\n let w = (isRotate ? e.clientY : e.clientX) - left\r\n if (w > containerWidth) {\r\n w = containerWidth\r\n }\r\n let now = w / containerWidth * player.duration\r\n if(now < 0) now = 0\r\n if(player.config.allowSeekPlayed && (Number(now).toFixed(1) > player.maxPlayedTime)) {}\r\n else {\r\n progress.style.width = `${w * 100 / containerWidth}%`\r\n\r\n if (player.videoConfig.mediaType === 'video' && !player.dash && !player.config.closeMoveSeek) {\r\n console.log('trigger touchmove')\r\n player.currentTime = Number(now).toFixed(1)\r\n } else {\r\n let time = findDom(player.controls, '.xgplayer-time')\r\n if (time) {\r\n time.innerHTML = `<span class=\"xgplayer-time-current\">${format(now || 0)}</span><span>${format(player.duration)}</span>`\r\n }\r\n }\r\n }\r\n\r\n if(player.config.thumbnail && player.config.thumbnail.isShowCoverPreview) {\r\n coverPreviewPoint.innerHTML = `<span>${format(now)}</span> / ${format(player.duration || 0)}`\r\n\r\n interval = player.duration / tnailPicNum\r\n let index = Math.floor(now / interval)\r\n thumbnail.style.backgroundImage = `url(${tnailUrls[Math.ceil((index + 1) / (tnailCol * tnailRow)) - 1]})`\r\n let indexInPage = index + 1 - (tnailCol * tnailRow) * (Math.ceil((index + 1) / (tnailCol * tnailRow)) - 1)\r\n let tnaiRowIndex = Math.ceil(indexInPage / tnailRow) - 1\r\n let tnaiColIndex = indexInPage - tnaiRowIndex * tnailRow - 1\r\n thumbnail.style['background-position'] = `-${tnaiColIndex * tnailWidth}px -${tnaiRowIndex * tnailHeight}px`\r\n coverPreviewContainer.style.display = 'block'\r\n }\r\n \r\n player.emit('focus')\r\n }\r\n let up = function (e) {\r\n console.log('up event', e)\r\n // e.preventDefault()\r\n e.stopPropagation()\r\n event(e)\r\n window.removeEventListener('mousemove', move)\r\n window.removeEventListener('touchmove', move, { passive: false })\r\n window.removeEventListener('mouseup', up)\r\n window.removeEventListener('touchend', up)\r\n if(sniffer.browser.indexOf('ie') < 0) {\r\n container.blur()\r\n }\r\n if (!player.isProgressMoving || (player.videoConfig && player.videoConfig.mediaType === 'audio') || player.dash || player.config.closeMoveSeek) {\r\n let w = (isRotate ? e.clientY : e.clientX) - left\r\n if (w > containerWidth) {\r\n w = containerWidth\r\n }\r\n let now = w / containerWidth * player.duration\r\n if(now < 0) now = 0\r\n if(player.config.allowSeekPlayed && (Number(now).toFixed(1) > player.maxPlayedTime)) {}\r\n else {\r\n progress.style.width = `${w * 100 / containerWidth}%`\r\n console.warn('trigger touchup')\r\n player.currentTime = Number(now).toFixed(1)\r\n }\r\n }\r\n if(player.config.thumbnail && player.config.thumbnail.isShowCoverPreview) {\r\n coverPreviewContainer.style.display = 'none'\r\n }\r\n player.emit('focus')\r\n player.isProgressMoving = false\r\n }\r\n // if (item === 'touchstart') {\r\n window.addEventListener('touchmove', move, { passive: false })\r\n window.addEventListener('touchend', up)\r\n // } else {\r\n window.addEventListener('mousemove', move)\r\n // console.warn('add envent mouseup')\r\n window.addEventListener('mouseup', up)\r\n // }\r\n return true\r\n })\r\n })\r\n\r\n container.addEventListener('mouseenter', function (e) {\r\n if (!player.config.allowSeekAfterEnded && player.ended) {\r\n return true\r\n }\r\n const isRotate = isRotateFullscreen(player)\r\n let containerLeft = isRotate ? container.getBoundingClientRect().top : container.getBoundingClientRect().left\r\n let containerWidth = isRotate ? container.getBoundingClientRect().height : container.getBoundingClientRect().width\r\n\r\n let compute = function (e) {\r\n let now = ((isRotate ? e.clientY : e.clientX) - containerLeft) / containerWidth * player.duration\r\n now = now < 0 ? 0 : now\r\n point.textContent = format(now)\r\n let pointWidth = point.getBoundingClientRect().width\r\n if (player.config.thumbnail && !player.config.thumbnail.isShowCoverPreview) {\r\n interval = player.duration / tnailPicNum\r\n let index = Math.floor(now / interval)\r\n thumbnail.style.backgroundImage = `url(${tnailUrls[Math.ceil((index + 1) / (tnailCol * tnailRow)) - 1]})`\r\n let indexInPage = index + 1 - (tnailCol * tnailRow) * (Math.ceil((index + 1) / (tnailCol * tnailRow)) - 1)\r\n let tnaiRowIndex = Math.ceil(indexInPage / tnailRow) - 1\r\n let tnaiColIndex = indexInPage - tnaiRowIndex * tnailRow - 1\r\n thumbnail.style['background-position'] = `-${tnaiColIndex * tnailWidth}px -${tnaiRowIndex * tnailHeight}px`\r\n let left = (isRotate ? e.clientY : e.clientX) - containerLeft - tnailWidth / 2\r\n left = left > 0 ? left : 0\r\n left = left < containerWidth - tnailWidth ? left : containerWidth - tnailWidth\r\n thumbnail.style.left = `${left}px`\r\n thumbnail.style.top = `${-10 - tnailHeight}px`\r\n thumbnail.style.display = 'block'\r\n point.style.left = `${left + tnailWidth / 2 - pointWidth / 2}px`\r\n } else {\r\n let left = e.clientX - containerLeft - pointWidth / 2\r\n left = left > 0 ? left : 0\r\n left = left > containerWidth - pointWidth ? containerWidth - pointWidth : left\r\n point.style.left = `${left}px`\r\n }\r\n if (hasClass(container, 'xgplayer-progress-dot-active')) {\r\n point.style.display = 'none'\r\n } else {\r\n point.style.display = 'block'\r\n }\r\n }\r\n let move = function (e) {\r\n compute(e)\r\n }\r\n let leave = function (e) {\r\n container.removeEventListener('mousemove', move, false)\r\n container.removeEventListener('mouseleave', leave, false)\r\n compute(e)\r\n point.style.display = 'none'\r\n if (player.config.thumbnail && !player.config.thumbnail.isShowCoverPreview) {\r\n thumbnail.style.display = 'none'\r\n }\r\n }\r\n container.addEventListener('mousemove', move, false)\r\n container.addEventListener('mouseleave', leave, false)\r\n compute(e)\r\n }, false)\r\n\r\n // let lastBtnLeft = false\r\n let onTimeupdate = function () {\r\n if(player.maxPlayedTime === undefined) player.maxPlayedTime = 0\r\n if(player.maxPlayedTime < player.currentTime) player.maxPlayedTime = player.currentTime\r\n if (!containerWidth && container) {\r\n containerWidth = container.getBoundingClientRect().width\r\n }\r\n if (!player.isProgressMoving && !player.isSeeking && !player.seeking) {\r\n const precent = player.currentTime / player.duration\r\n const prevPrecent = Number(progress.style.width.replace('%', '') || '0') / Number(container.style.width || '100');\r\n if (Math.abs(precent - prevPrecent) <= 1) {\r\n progress.style.width = `${player.currentTime * 100 / player.duration}%`\r\n }\r\n }\r\n }\r\n player.on('timeupdate', onTimeupdate)\r\n\r\n let onCurrentTimeChange = function (time) {\r\n progress.style.width = `${time * 100 / player.duration}%`\r\n }\r\n player.on('currentTimeChange', onCurrentTimeChange)\r\n\r\n let onSrcChange = function () {\r\n progress.style.width = '0%'\r\n }\r\n player.on('srcChange', onSrcChange)\r\n\r\n let onCacheUpdate = function () {\r\n let buffered = player.buffered\r\n if (buffered && buffered.length > 0) {\r\n let end = buffered.end(buffered.length - 1)\r\n for (let i = 0, len = buffered.length; i < len; i++) {\r\n if (player.currentTime >= buffered.start(i) && player.currentTime <= buffered.end(i)) {\r\n end = buffered.end(i)\r\n for (let j = i + 1; j < buffered.length; j++) {\r\n if (buffered.start(j) - buffered.end(j - 1) >= 2) {\r\n end = buffered.end(j - 1)\r\n break\r\n }\r\n }\r\n break\r\n }\r\n }\r\n cache.style.width = `${end / player.duration * 100}%`\r\n }\r\n }\r\n const cacheUpdateEvents = ['bufferedChange', 'cacheupdate', 'ended', 'timeupdate']\r\n cacheUpdateEvents.forEach(item => {\r\n player.on(item, onCacheUpdate)\r\n })\r\n\r\n function destroyFunc () {\r\n player.removeAllProgressDot()\r\n player.off('canplay', onCanplay)\r\n player.off('timeupdate', onTimeupdate)\r\n player.off('currentTimeChange', onCurrentTimeChange)\r\n player.off('srcChange', onSrcChange)\r\n player.off('loadedmetadata', onLoadedmetadata);\r\n cacheUpdateEvents.forEach(item => {\r\n player.off(item, onCacheUpdate)\r\n })\r\n player.off('destroy', destroyFunc)\r\n }\r\n player.once('destroy', destroyFunc)\r\n}\r\n\r\nexport default {\r\n name: 's_progress',\r\n method: s_progress\r\n}","import { createDom, format } from '../../utils/util'\nimport '../style/controls/time.scss'\n\nlet s_time = function () {\n let player = this\n let container = createDom('xg-time', `<span class=\"xgplayer-time-current\">${player.currentTime || format(0)}</span>\n <span>${player.duration || format(0)}</span>`, {}, 'xgplayer-time')\n player.once('ready', () => {\n if(player.controls) {\n player.controls.appendChild(container)\n }\n })\n let onTimeChange = function () {\n // let liveText = player.lang.LIVE\n // if(player.duration === Infinity) {\n // addClass(player.root, 'xgplayer-is-live')\n // if(!findDom(player.root, '.xgplayer-live')) {\n // const live = createDom('xg-live', liveText, {}, 'xgplayer-live')\n // player.controls.appendChild(live)\n // }\n // }\n if (player.videoConfig.mediaType !== 'audio' || !player.isProgressMoving || !player.dash) {\n container.innerHTML = `<span class=\"xgplayer-time-current\">${format(player.currentTime || 0)}</span>` + `<span>${format(player.duration)}</span>`\n }\n }\n player.on('durationchange', onTimeChange)\n player.on('timeupdate', onTimeChange)\n\n function onDestroy () {\n player.off('durationchange', onTimeChange)\n player.off('timeupdate', onTimeChange)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 's_time',\n method: s_time\n}","import { createDom, createImgBtn } from '../../utils/util'\nimport PlayIcon from '../assets/play.svg'\nimport PauseIcon from '../assets/pause.svg'\nimport '../style/controls/play.scss'\n\nlet s_play = function () {\n let player = this\n let playBtn = player.config.playBtn ? player.config.playBtn : {}\n let btn\n if (playBtn.type === 'img') {\n btn = createImgBtn('play', playBtn.url.play, playBtn.width, playBtn.height)\n } else {\n btn = createDom('xg-play', `<xg-icon class=\"xgplayer-icon\">\n <div class=\"xgplayer-icon-play\">${PlayIcon}</div>\n <div class=\"xgplayer-icon-pause\">${PauseIcon}</div>\n </xg-icon>`, {}, 'xgplayer-play')\n }\n\n let tipsText = {}\n tipsText.play = player.lang.PLAY_TIPS\n tipsText.pause = player.lang.PAUSE_TIPS\n let tips = createDom('xg-tips', `<span class=\"xgplayer-tip-play\">${tipsText.play}</span>\n <span class=\"xgplayer-tip-pause\">${tipsText.pause}</span>`, {}, 'xgplayer-tips')\n btn.appendChild(tips)\n player.once('ready', () => {\n if(player.controls) {\n player.controls.appendChild(btn)\n }\n });\n\n ['click', 'touchend'].forEach(item => {\n btn.addEventListener(item, function (e) {\n e.preventDefault()\n e.stopPropagation()\n player.userGestureTrigEvent('playBtnClick')\n })\n })\n}\n\nexport default {\n name: 's_play',\n method: s_play\n}","import { createDom, createImgBtn } from '../../utils/util'\nimport RequestFullIcon from '../assets/requestFull.svg'\nimport ExitFullIcon from '../assets/exitFull.svg'\nimport '../style/controls/fullscreen.scss'\n\nlet s_fullscreen = function () {\n let player = this\n let fullscreenBtn = player.config.fullscreenBtn ? player.config.fullscreenBtn : {}\n let btn\n if (fullscreenBtn.type === 'img') {\n btn = createImgBtn('fullscreen', fullscreenBtn.url.request, fullscreenBtn.width, fullscreenBtn.height)\n } else {\n btn = createDom('xg-fullscreen', `<xg-icon class=\"xgplayer-icon\">\n <div class=\"xgplayer-icon-requestfull\">${RequestFullIcon}</div>\n <div class=\"xgplayer-icon-exitfull\">${ExitFullIcon}</div>\n </xg-icon>`, {}, 'xgplayer-fullscreen')\n }\n\n let tipsText = {}\n tipsText.requestfull = player.lang.FULLSCREEN_TIPS\n tipsText.exitfull = player.lang.EXITFULLSCREEN_TIPS\n let tips = createDom('xg-tips', `<span class=\"xgplayer-tip-requestfull\">${tipsText.requestfull}</span>\n <span class=\"xgplayer-tip-exitfull\">${tipsText.exitfull}</span>`, {}, 'xgplayer-tips')\n btn.appendChild(tips)\n player.once('ready', () => {\n if(player.controls) {\n player.controls.appendChild(btn)\n }\n });\n\n ['click', 'touchend'].forEach(item => {\n btn.addEventListener(item, function (e) {\n e.preventDefault()\n e.stopPropagation()\n player.userGestureTrigEvent('fullscreenBtnClick')\n })\n })\n}\n\nexport default {\n name: 's_fullscreen',\n method: s_fullscreen\n}","import { createDom } from '../../utils/util'\nimport Loading from '../assets/loading.svg'\nimport '../style/controls/loading.scss'\n\nlet s_loading = function () {\n let player = this\n let root = player.root\n let container = createDom('xg-loading', `${Loading}`, {}, 'xgplayer-loading')\n player.once('ready', () => {\n root.appendChild(container)\n })\n}\n\nexport default {\n name: 's_loading',\n method: s_loading\n}","import { createDom } from '../../utils/util'\nimport ReplayIcon from '../assets/replay.svg'\nimport '../style/controls/replay.scss'\n\nlet s_replay = function () {\n let player = this\n let root = player.root\n\n let replayText = player.lang.REPLAY\n let btn = createDom('xg-replay', `${ReplayIcon}\n <xg-replay-txt class=\"xgplayer-replay-txt\">${replayText}</xg-replay-txt>\n `, {}, 'xgplayer-replay')\n player.once('ready', () => {\n root.appendChild(btn)\n })\n\n function onEnded () {\n let path = btn.querySelector('path')\n if(path) {\n let transform = window.getComputedStyle(path).getPropertyValue('transform')\n if(typeof transform === 'string' && transform.indexOf('none') > -1) {\n return\n } else {\n path.setAttribute('transform', transform)\n }\n }\n }\n player.on('ended', onEnded)\n\n function onBtnClick (e) {\n e.preventDefault()\n e.stopPropagation()\n }\n btn.addEventListener('click', onBtnClick)\n\n let svg = btn.querySelector('svg');\n\n ['click', 'touchend'].forEach(item => {\n svg.addEventListener(item, function (e) {\n e.preventDefault()\n e.stopPropagation()\n player.userGestureTrigEvent('replayBtnClick')\n })\n })\n\n function destroyFunc () {\n player.off('ended', onEnded)\n player.off('destroy', destroyFunc)\n }\n player.once('destroy', destroyFunc)\n}\n\nexport default {\n name: 's_replay',\n method: s_replay\n}","\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./play.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./play.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./play.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-play,.xgplayer-skin-default .xgplayer-play-img{width:40px;position:relative;-webkit-order:0;-moz-box-ordinal-group:1;order:0;display:block;cursor:pointer;margin-left:3px}.xgplayer-skin-default .xgplayer-play-img .xgplayer-icon,.xgplayer-skin-default .xgplayer-play .xgplayer-icon{margin-top:3px;width:32px}.xgplayer-skin-default .xgplayer-play-img .xgplayer-icon div,.xgplayer-skin-default .xgplayer-play .xgplayer-icon div{position:absolute}.xgplayer-skin-default .xgplayer-play-img .xgplayer-icon .xgplayer-icon-play,.xgplayer-skin-default .xgplayer-play .xgplayer-icon .xgplayer-icon-play{display:block}.xgplayer-skin-default .xgplayer-play-img .xgplayer-icon .xgplayer-icon-pause,.xgplayer-skin-default .xgplayer-play .xgplayer-icon .xgplayer-icon-pause{display:none}.xgplayer-skin-default .xgplayer-play-img .xgplayer-tips .xgplayer-tip-play,.xgplayer-skin-default .xgplayer-play .xgplayer-tips .xgplayer-tip-play{display:block}.xgplayer-skin-default .xgplayer-play-img .xgplayer-tips .xgplayer-tip-pause,.xgplayer-skin-default .xgplayer-play .xgplayer-tips .xgplayer-tip-pause{display:none}.xgplayer-skin-default .xgplayer-play-img:hover,.xgplayer-skin-default .xgplayer-play:hover{opacity:.85}.xgplayer-skin-default .xgplayer-play-img:hover .xgplayer-tips,.xgplayer-skin-default .xgplayer-play:hover .xgplayer-tips{display:block}.xgplayer-skin-default.xgplayer-playing .xgplayer-play-img .xgplayer-icon .xgplayer-icon-play,.xgplayer-skin-default.xgplayer-playing .xgplayer-play .xgplayer-icon .xgplayer-icon-play{display:none}.xgplayer-skin-default.xgplayer-playing .xgplayer-play-img .xgplayer-icon .xgplayer-icon-pause,.xgplayer-skin-default.xgplayer-playing .xgplayer-play .xgplayer-icon .xgplayer-icon-pause{display:block}.xgplayer-skin-default.xgplayer-playing .xgplayer-play-img .xgplayer-tips .xgplayer-tip-play,.xgplayer-skin-default.xgplayer-playing .xgplayer-play .xgplayer-tips .xgplayer-tip-play{display:none}.xgplayer-skin-default.xgplayer-pause .xgplayer-play-img .xgplayer-icon .xgplayer-icon-play,.xgplayer-skin-default.xgplayer-pause .xgplayer-play .xgplayer-icon .xgplayer-icon-play,.xgplayer-skin-default.xgplayer-playing .xgplayer-play-img .xgplayer-tips .xgplayer-tip-pause,.xgplayer-skin-default.xgplayer-playing .xgplayer-play .xgplayer-tips .xgplayer-tip-pause{display:block}.xgplayer-skin-default.xgplayer-pause .xgplayer-play-img .xgplayer-icon .xgplayer-icon-pause,.xgplayer-skin-default.xgplayer-pause .xgplayer-play .xgplayer-icon .xgplayer-icon-pause{display:none}.xgplayer-skin-default.xgplayer-pause .xgplayer-play-img .xgplayer-tips .xgplayer-tip-play,.xgplayer-skin-default.xgplayer-pause .xgplayer-play .xgplayer-tips .xgplayer-tip-play{display:block}.xgplayer-skin-default.xgplayer-pause .xgplayer-play-img .xgplayer-tips .xgplayer-tip-pause,.xgplayer-skin-default.xgplayer-pause .xgplayer-play .xgplayer-tips .xgplayer-tip-pause{display:none}\", \"\"]);\n\n// exports\n","\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./poster.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./poster.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./poster.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-poster{display:none;position:absolute;left:0;top:0;width:100%;height:100%;z-index:100;background-size:cover;background-position:50%}.xgplayer-skin-default.xgplayer-nostart .xgplayer-poster{display:block}\", \"\"]);\n\n// exports\n","\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./placeholder.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./placeholder.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./placeholder.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-placeholder{-webkit-flex:1;-moz-box-flex:1;flex:1;-webkit-order:3;-moz-box-ordinal-group:4;order:3;display:block}\", \"\"]);\n\n// exports\n","\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./fullscreen.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./fullscreen.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./fullscreen.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-fullscreen,.xgplayer-skin-default .xgplayer-fullscreen-img{position:relative;-webkit-order:13;-moz-box-ordinal-group:14;order:13;display:block;cursor:pointer;margin-left:5px;margin-right:3px}.xgplayer-skin-default .xgplayer-fullscreen-img .xgplayer-icon,.xgplayer-skin-default .xgplayer-fullscreen .xgplayer-icon{margin-top:3px}.xgplayer-skin-default .xgplayer-fullscreen-img .xgplayer-icon div,.xgplayer-skin-default .xgplayer-fullscreen .xgplayer-icon div{position:absolute}.xgplayer-skin-default .xgplayer-fullscreen-img .xgplayer-icon .xgplayer-icon-requestfull,.xgplayer-skin-default .xgplayer-fullscreen .xgplayer-icon .xgplayer-icon-requestfull{display:block}.xgplayer-skin-default .xgplayer-fullscreen-img .xgplayer-icon .xgplayer-icon-exitfull,.xgplayer-skin-default .xgplayer-fullscreen .xgplayer-icon .xgplayer-icon-exitfull{display:none}.xgplayer-skin-default .xgplayer-fullscreen-img .xgplayer-tips,.xgplayer-skin-default .xgplayer-fullscreen .xgplayer-tips{position:absolute;right:0;left:auto}.xgplayer-skin-default .xgplayer-fullscreen-img .xgplayer-tips .xgplayer-tip-requestfull,.xgplayer-skin-default .xgplayer-fullscreen .xgplayer-tips .xgplayer-tip-requestfull{display:block}.xgplayer-skin-default .xgplayer-fullscreen-img .xgplayer-tips .xgplayer-tip-exitfull,.xgplayer-skin-default .xgplayer-fullscreen .xgplayer-tips .xgplayer-tip-exitfull{display:none}.xgplayer-skin-default .xgplayer-fullscreen-img:hover,.xgplayer-skin-default .xgplayer-fullscreen:hover{opacity:.85}.xgplayer-skin-default .xgplayer-fullscreen-img:hover .xgplayer-tips,.xgplayer-skin-default .xgplayer-fullscreen:hover .xgplayer-tips{display:block}.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen-img .xgplayer-icon .xgplayer-icon-requestfull,.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen .xgplayer-icon .xgplayer-icon-requestfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen-img .xgplayer-icon .xgplayer-icon-requestfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen .xgplayer-icon .xgplayer-icon-requestfull{display:none}.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen-img .xgplayer-icon .xgplayer-icon-exitfull,.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen .xgplayer-icon .xgplayer-icon-exitfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen-img .xgplayer-icon .xgplayer-icon-exitfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen .xgplayer-icon .xgplayer-icon-exitfull{display:block}.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen-img .xgplayer-tips .xgplayer-tip-requestfull,.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen .xgplayer-tips .xgplayer-tip-requestfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen-img .xgplayer-tips .xgplayer-tip-requestfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen .xgplayer-tips .xgplayer-tip-requestfull{display:none}.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen-img .xgplayer-tips .xgplayer-tip-exitfull,.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen .xgplayer-tips .xgplayer-tip-exitfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen-img .xgplayer-tips .xgplayer-tip-exitfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen .xgplayer-tips .xgplayer-tip-exitfull{display:block}\", \"\"]);\n\n// exports\n","\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./loading.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./loading.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./loading.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-loading{display:none;width:100px;height:100px;overflow:hidden;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7);position:absolute;left:50%;top:50%;margin:-50px auto auto -50px}.xgplayer-skin-default .xgplayer-loading svg{border-radius:50%;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-animation:loadingRotate 1s linear infinite;animation:loadingRotate 1s linear infinite}.xgplayer-skin-default .xgplayer-loading svg path{stroke:#ddd;stroke-dasharray:236;-webkit-animation:loadingDashOffset 2s linear infinite;animation:loadingDashOffset 2s linear infinite;animation-direction:alternate-reverse;fill:none;stroke-width:12px}.xgplayer-skin-default.xgplayer-nostart .xgplayer-loading{display:none}.xgplayer-skin-default.xgplayer-pause .xgplayer-loading{display:none!important}.xgplayer-skin-default.xgplayer-isloading .xgplayer-loading{display:block}\", \"\"]);\n\n// exports\n","\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./progress.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./progress.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./progress.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-progress{display:block;position:absolute;height:20px;line-height:20px;left:12px;right:12px;outline:none;top:-15px;z-index:35}.xgplayer-skin-default .xgplayer-progress-outer{background:hsla(0,0%,100%,.3);display:block;height:3px;line-height:3px;margin-top:8.5px;width:100%;position:relative;cursor:pointer}.xgplayer-skin-default .xgplayer-progress-cache,.xgplayer-skin-default .xgplayer-progress-played{display:block;height:100%;line-height:1;position:absolute;left:0;top:0}.xgplayer-skin-default .xgplayer-progress-cache{width:0;background:hsla(0,0%,100%,.5)}.xgplayer-skin-default .xgplayer-progress-played{display:block;width:0;background-image:linear-gradient(-90deg,#fa1f41,#e31106);border-radius:0 1.5px 1.5px 0}.xgplayer-skin-default .xgplayer-progress-btn{display:none;position:absolute;left:0;top:-5px;width:13px;height:13px;border-radius:30px;background:#fff;box-shadow:0 0 2px 0 rgba(0,0,0,.26);left:100%;-webkit-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);z-index:36}.xgplayer-skin-default .xgplayer-progress-point{position:absolute}.xgplayer-skin-default .xgplayer-progress-point.xgplayer-tips{margin-left:0;top:-25px;display:none;z-index:100}.xgplayer-skin-default .xgplayer-progress-dot{display:inline-block;position:absolute;height:3px;width:5px;top:0;background:#fff;border-radius:6px;z-index:16}.xgplayer-skin-default .xgplayer-progress-dot .xgplayer-progress-tip{position:absolute;bottom:200%;right:50%;-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%);height:auto;line-height:30px;width:auto;background:rgba(0,0,0,.3);border-radius:6px;border:1px solid rgba(0,0,0,.8);cursor:default;white-space:nowrap;display:none}.xgplayer-skin-default .xgplayer-progress-dot-show .xgplayer-progress-tip{display:block}.xgplayer-skin-default .xgplayer-progress-thumbnail{position:absolute;-moz-box-sizing:border-box;box-sizing:border-box}.xgplayer-skin-default .xgplayer-progress-thumbnail.xgplayer-tips{margin-left:0;display:none;z-index:99}.xgplayer-skin-default .xgplayer-coverpreview{position:absolute;width:100%;height:100%;top:0;left:0;display:none}.xgplayer-skin-default .xgplayer-coverpreview .xgplayer-coverpreview-outer{position:absolute;display:block;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.xgplayer-skin-default .xgplayer-coverpreview .xgplayer-coverpreview-outer .xgplayer-coverpreview-thumbnail{display:block}.xgplayer-skin-default .xgplayer-coverpreview .xgplayer-coverpreview-outer .xgplayer-coverpreview-point{display:block;text-align:center;font-family:PingFangSC-Regular;font-size:11px;color:#ccc;padding:2px 4px}.xgplayer-skin-default .xgplayer-coverpreview .xgplayer-coverpreview-outer .xgplayer-coverpreview-point span{color:#fff}.xgplayer-skin-default .xgplayer-progress:focus .xgplayer-progress-outer,.xgplayer-skin-default .xgplayer-progress:hover .xgplayer-progress-outer{height:6px;margin-top:7px}.xgplayer-skin-default .xgplayer-progress:focus .xgplayer-progress-dot,.xgplayer-skin-default .xgplayer-progress:hover .xgplayer-progress-dot{height:6px}.xgplayer-skin-default .xgplayer-progress:focus .xgplayer-progress-btn,.xgplayer-skin-default .xgplayer-progress:hover .xgplayer-progress-btn{display:block;top:-3px}.xgplayer-skin-default.xgplayer-definition-active .xgplayer-progress,.xgplayer-skin-default.xgplayer-playbackrate-active .xgplayer-progress,.xgplayer-skin-default.xgplayer-texttrack-active .xgplayer-progress,.xgplayer-skin-default.xgplayer-volume-active .xgplayer-progress{z-index:15}.xgplayer-skin-default.xgplayer-mobile .xgplayer-progress-btn{display:block!important}.xgplayer-skin-default.xgplayer-mobile .xgplayer-progress:focus .xgplayer-progress-outer,.xgplayer-skin-default.xgplayer-mobile .xgplayer-progress:hover .xgplayer-progress-outer{height:3px!important;margin-top:8.5px!important}.xgplayer-skin-default.xgplayer-mobile .xgplayer-progress:focus .xgplayer-progress-btn,.xgplayer-skin-default.xgplayer-mobile .xgplayer-progress:hover .xgplayer-progress-btn{display:block!important;top:-5px!important}\", \"\"]);\n\n// exports\n","\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./time.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./time.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./time.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-time{-webkit-order:2;-moz-box-ordinal-group:3;order:2;font-family:ArialMT;font-size:13px;color:#fff;line-height:40px;height:40px;text-align:center;display:inline-block;margin:auto 8px}.xgplayer-skin-default .xgplayer-time span{color:hsla(0,0%,100%,.5)}.xgplayer-skin-default .xgplayer-time .xgplayer-time-current{color:#fff}.xgplayer-skin-default .xgplayer-time .xgplayer-time-current:after{content:\\\"/\\\";display:inline-block;padding:0 3px}\", \"\"]);\n\n// exports\n","\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./replay.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./replay.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/index.js??ref--5-1!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./replay.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-replay{position:absolute;left:0;top:0;width:100%;height:100%;z-index:105;display:none;-webkit-justify-content:center;-moz-box-pack:center;justify-content:center;-webkit-align-items:center;-moz-box-align:center;align-items:center;background:rgba(0,0,0,.54);-webkit-flex-direction:column;-moz-box-orient:vertical;-moz-box-direction:normal;flex-direction:column}.xgplayer-skin-default .xgplayer-replay svg{background:rgba(0,0,0,.58);border-radius:100%;cursor:pointer}.xgplayer-skin-default .xgplayer-replay svg path{-webkit-transform:translate(20px,21px);-ms-transform:translate(20px,21px);transform:translate(20px,21px);fill:#ddd}.xgplayer-skin-default .xgplayer-replay svg:hover{background:rgba(0,0,0,.38)}.xgplayer-skin-default .xgplayer-replay svg:hover path{fill:#fff}.xgplayer-skin-default .xgplayer-replay .xgplayer-replay-txt{display:inline-block;font-family:PingFangSC-Regular;font-size:14px;color:#fff;line-height:34px}.xgplayer-skin-default.xgplayer.xgplayer-ended .xgplayer-controls{display:none}.xgplayer-skin-default.xgplayer.xgplayer-ended .xgplayer-replay{display:-webkit-flex;display:-moz-box;display:flex}\", \"\"]);\n\n// exports\n","import Player from './player'\n\nimport Flex from './skin/controls/flex'\nimport Fullscreen from './controls/fullscreen'\nimport S_fullscreen from './skin/controls/fullscreen'\nimport S_loading from './skin/controls/loading'\nimport Mobile from './controls/mobile'\nimport Pc from './controls/pc'\nimport Play from './controls/play'\nimport S_play from './skin/controls/play'\nimport S_progress from './skin/controls/progress'\nimport S_poster from './skin/controls/poster'\nimport S_time from './skin/controls/time'\nimport Start from './controls/start'\nimport S_start from './skin/controls/start'\nimport Replay from './controls/replay'\nimport S_replay from './skin/controls/replay'\n// import Volume from './controls/volume'\n// import S_volume from './skin/controls/volume'\n\nlet controlLst = [\n Flex,\n Fullscreen,\n S_fullscreen,\n S_loading,\n Mobile,\n Pc,\n Play,\n S_play,\n S_progress,\n S_poster,\n S_time,\n Start,\n S_start,\n Replay,\n S_replay\n]\ncontrolLst.forEach(function(control) {\n Player.install(control.name, control.method)\n})\n\nexport default Player\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack://xgplayer/webpack/universalModuleDefinition","webpack://xgplayer/webpack/bootstrap","webpack://xgplayer/./src/utils/util.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/css-loader/lib/css-base.js","webpack://xgplayer/./node_modules/style-loader/lib/addStyles.js","webpack://xgplayer/./src/utils/sniffer.js","webpack://xgplayer/./src/error.js","webpack://xgplayer/./src/proxy.js","webpack://xgplayer/./src/player.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/is-value.js","webpack://xgplayer/./src/utils/xgplayerTimeRange.js","webpack://xgplayer/./src/skin/controls/i18n.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/type/value/is.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/event-emitter/index.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/event-emitter/all-off.js","webpack://xgplayer/./src/controls/mobile.js","webpack://xgplayer/./src/controls/pc.js","webpack://xgplayer/./src/controls/start.js","webpack://xgplayer/./src/skin/controls/start.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/d/index.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/type/plain-function/is.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/type/function/is.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/type/prototype/is.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/type/object/is.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/assign/index.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/assign/is-implemented.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/assign/shim.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/keys/index.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/keys/is-implemented.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/keys/shim.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/function/noop.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/valid-value.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/normalize-options.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/string/#/contains/index.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/string/#/contains/is-implemented.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/string/#/contains/shim.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/valid-callable.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/valid-object.js","webpack://xgplayer//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/is-object.js","webpack://xgplayer/./src/skin/style/index.scss?8c1f","webpack://xgplayer/./src/skin/style/index.scss","webpack://xgplayer/./node_modules/style-loader/lib/urls.js","webpack://xgplayer/./src/skin/style/controls/start.scss?0c41","webpack://xgplayer/./src/skin/style/controls/start.scss","webpack://xgplayer/./src/controls/fullscreen.js","webpack://xgplayer/./src/controls/play.js","webpack://xgplayer/./src/controls/replay.js","webpack://xgplayer/./src/skin/controls/poster.js","webpack://xgplayer/./src/skin/controls/flex.js","webpack://xgplayer/./src/skin/controls/progress.js","webpack://xgplayer/./src/skin/controls/time.js","webpack://xgplayer/./src/skin/controls/play.js","webpack://xgplayer/./src/skin/controls/fullscreen.js","webpack://xgplayer/./src/skin/controls/loading.js","webpack://xgplayer/./src/skin/controls/replay.js","webpack://xgplayer/./src/skin/style/controls/play.scss?e857","webpack://xgplayer/./src/skin/style/controls/play.scss","webpack://xgplayer/./src/skin/style/controls/poster.scss?be24","webpack://xgplayer/./src/skin/style/controls/poster.scss","webpack://xgplayer/./src/skin/style/controls/placeholder.scss?564a","webpack://xgplayer/./src/skin/style/controls/placeholder.scss","webpack://xgplayer/./src/skin/style/controls/fullscreen.scss?12bf","webpack://xgplayer/./src/skin/style/controls/fullscreen.scss","webpack://xgplayer/./src/skin/style/controls/loading.scss?c41a","webpack://xgplayer/./src/skin/style/controls/loading.scss","webpack://xgplayer/./src/skin/style/controls/progress.scss?23f1","webpack://xgplayer/./src/skin/style/controls/progress.scss","webpack://xgplayer/./src/skin/style/controls/time.scss?0cc8","webpack://xgplayer/./src/skin/style/controls/time.scss","webpack://xgplayer/./src/skin/style/controls/replay.scss?041b","webpack://xgplayer/./src/skin/style/controls/replay.scss","webpack://xgplayer/./src/simple_player.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","createDom","el","tpl","attrs","cname","dom","document","createElement","className","innerHTML","keys","forEach","item","setAttribute","hasClass","classList","Array","some","match","RegExp","addClass","replace","split","add","removeClass","remove","reg","toggleClass","findDom","sel","querySelector","e","indexOf","getElementById","slice","padStart","str","length","pad","charstr","String","len","maxlen","Math","ceil","chars","push","join","substring","format","time","isNaN","hour","floor","minute","second","event","touches","touch","changedTouches","clientX","clientY","offsetX","pageX","target","offsetLeft","offsetY","pageY","offsetTop","_target","srcElement","typeOf","obj","toString","deepCopy","dst","src","Node","concat","copyDom","nodeType","back","tagName","attributes","node","_setInterval","context","eventName","intervalFunc","frequency","_interval","setInterval","_clearInterval","clearInterval","createImgBtn","imgUrl","width","height","btn","style","backgroundImage","w","h","unit","every","Number","trim","backgroundSize","margin","isWeiXin","navigator","userAgent","toLowerCase","isUc","offInDestroy","fn","offEvent","once","onDestroy","off","on","_fn","data","getBuffered2","vbuffered","maxHoleDuration","buffered","start","end","sort","a","b","diff","buffered_2","buf2len","buf2end","XgplayerTimeRange","checkIsBrowser","setStyle","elem","error","setProperty","PresentationMode","PIP","INLINE","FULLSCREEN","checkWebkitSetPresentationMode","video","webkitSetPresentationMode","util","getBgImage","url","currentStyle","getComputedStyle","href","computeWatchDur","played","arr","begin","j","splice","min","max","watch_dur","useSourceMap","list","this","map","content","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","source","sourceRoot","cssWithMappingToString","mediaQuery","alreadyImportedModules","id","memo","stylesInDom","isOldIE","all","atob","apply","arguments","getTarget","getElement","styleTarget","HTMLIFrameElement","contentDocument","head","singleton","singletonCounter","stylesInsertedAtTop","fixUrls","addStylesToDom","styles","options","domStyle","refs","parts","addStyle","listToStyles","newStyles","base","part","css","media","insertStyleElement","insertInto","Error","lastStyleElementInsertedAtTop","insertAt","nextSibling","insertBefore","appendChild","firstChild","before","removeStyleElement","parentNode","removeChild","idx","createStyleElement","type","addAttrs","update","result","transform","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","link","rel","createLinkElement","updateLink","applyToTag","newObj","DEBUG","newList","mayRemove","textStore","replaceText","index","replacement","filter","Boolean","styleSheet","cssText","cssNode","createTextNode","childNodes","autoFixUrls","undefined","convertToAbsoluteUrls","blob","oldSrc","sniffer","os","isPc","ua","ie","firfox","chrome","opera","safari","test","isWindowsPhone","isSymbian","isAndroid","isFireFox","isTablet","isPhone","ErrorTypes","network","code","msg","remark","mse","parse","decoder","runtime","timeout","other","Errors","constructor","currentTime","duration","networkState","readyState","currentSrc","ended","errd","line","handle","version","errorCode","mediaError","playerVersion","errorType","domain","ex","arg","Proxy","_hasStart","videoConfig","controls","isShowControl","autoplay","playsinline","airplay","tabindex","mediaType","muted","loop","textTrackDom","textTrackShowDefault","nativeTextTrack","isArray","track","default","label","kind","srclang","crossorigin","textTrackStyle","styleStr","wrap","sheet","insertRule","addRule","XgVideoProxy","videoStyle","getElementsByTagName","autoplayMuted","ev","charAt","toUpperCase","EventEmitter","lastBuffer","self","defaultVideoEventHandler","hasStart","inWaitingStart","Date","getTime","_onError","emit","curBuffer","videoEventHandler","videoEventMiddleware","evItem","addEventListener","bool","destroy","play","pause","canPlayType","getBufferedRange","range","proxyOn","proxyOnce","isTrue","crossOrigin","isFinite","replay","defaultMuted","config","err","status","en","cn","lang","playbackRate","rate","preload","seekable","seeking","posterUrl","poster","volume","vol","Player","super","ignores","whitelist","documentElement","getAttribute","language","toLocaleLowerCase","inactive","controlsList","userTimer","waitTimer","history","isProgressMoving","unselectable","onselectstart","display","vid","console","device","fluid","execBeforePluginsCall","closeI18n","install","s_i18n","method","controlStyle","fetch","headers","Accept","then","res","ok","json","prop","pluginsCall","catch","log","controlPlugins","controlsRun","evName","evFunc","player","mousemoveFunc","closeFocusVideoFocus","focus","playFunc","closePlayVideoFocus","getVideoSize","videoWidth","videoHeight","containerSize","getBoundingClientRect","fitVideoSize","setTimeout","isReady","videoInit","rotate","updateRotateDeg","removeEventListener","attachVideo","danmu","resize","canPlayFunc","playPromise","disableStartLoad","load","reload","reloadFunc","isDelDom","bulletResizeTimer","k","checkTimer","clearTimeout","loadeddataFunc","replayFunc","keyShortcut","onKeydown","removeAttribute","classNameList","allOff","_replay","browser","Function","userGestureTrigEvent","param","defaultUserGestureEventHandler","userGestureEventMiddleware","plugins","descriptor","warn","onFocus","onBlur","enablePausedInactive","paused","closeInactive","onPlay","onPause","onEnded","onSeeking","isSeeking","onWaiting","onSeeked","onPlaying","use","controlLst","control","_undefined","require","val","bufferedList","HAVE_NOTHING","HAVE_METADATA","HAVE_CURRENT_DATA","HAVE_FUTURE_DATA","HAVE_ENOUGH_DATA","NETWORK_EMPTY","NETWORK_IDLE","NETWORK_LOADING","NETWORK_NO_SOURCE","MEDIA_ERR_ABORTED","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","MEDIA_ERR_SRC_NOT_SUPPORTED","REPLAY","ERROR","PLAY_TIPS","PAUSE_TIPS","PLAYNEXT_TIPS","DOWNLOAD_TIPS","ROTATE_TIPS","RELOAD_TIPS","FULLSCREEN_TIPS","EXITFULLSCREEN_TIPS","CSSFULLSCREEN_TIPS","EXITCSSFULLSCREEN_TIPS","TEXTTRACK","MINIPLAYER","SCREENSHOT","LIVE","OFF","MINIPLAYER_DRAG","AIRPLAY_TIPS","set","methods","descriptors","callable","defineProperties","configurable","writable","listener","__eeOnceListener__","__ee__","listeners","candidate","args","emitter","_click_","clk","clickedTime","first","onReady","onElementTouchend","isTouchMove","element","closeVideoPreventDefault","preventDefault","closeVideoStopPropagation","stopPropagation","closeVideoTouch","onTouch","closeVideoClick","enableVideoDbltouch","abs","onMouseEnter","leavePlayerTimer","onMouseLeave","closePlayerBlur","leavePlayerTime","onElementClick","onElementDblclick","closeVideoDblclick","fullscreen","createEvent","initEvent","Event","dispatchEvent","closeControlsBlur","onCanPlay","onStartBtnClick","contains","mediaSource","onPlayerReady","enableContextmenu","hideStartBtn","onclick","isValue","isPlainFunction","assign","normalizeOpts","dscr","desc","gs","isFunction","classRe","functionToString","isPrototype","isObject","possibleTypes","foo","bar","trzy","dest","TypeError","process","opts1","searchString","function","locals","location","baseUrl","protocol","host","currentDir","pathname","fullMatch","origUrl","newUrl","unquotedOrigUrl","$1","onFullscreenBtnClick","rotateFullscreen","exitRotateFullscreen","getRotateFullscreen","exitFullscreen","getFullscreen","onFullscreenChange","fullscreenEl","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","onWebkitpresentationmodechanged","webkitPresentationMode","requestFullscreen","fullscreenPromise","mozRequestFullScreen","webkitRequestFullscreen","Element","ALLOW_KEYBOARD_INPUT","webkitSupportsFullscreen","webkitEnterFullscreen","msRequestFullscreen","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","onPlayBtnClick","allowPlayAfterEnded","onReplayBtnClick","playceholder","isRotateFullscreen","containerWidth","container","progress","outer","cache","point","thumbnail","dotEvent","dotItem","text","dotArr","onCanplay","progressDot","dot","left","addProgressDot","removeProgressDot","removeAllProgressDot","coverPreviewContainer","coverPreviewPoint","coverPreviewOuter","tnailPicNum","tnailWidth","tnailHeight","tnailCol","tnailRow","interval","tnailUrls","onLoadedmetadata","isShowCoverPreview","pic_num","col","row","urls","disableSwipeHandler","enableSwipeHandler","disableSwipe","events","pop","disableProgress","allowSeekAfterEnded","isRotate","top","move","now","allowSeekPlayed","toFixed","maxPlayedTime","dash","closeMoveSeek","indexInPage","tnaiRowIndex","tnaiColIndex","up","passive","blur","containerLeft","compute","textContent","pointWidth","leave","onTimeupdate","precent","prevPrecent","onCurrentTimeChange","onSrcChange","onCacheUpdate","cacheUpdateEvents","destroyFunc","onTimeChange","playBtn","tipsText","tips","fullscreenBtn","request","requestfull","exitfull","replayText","path","getPropertyValue","svg","Flex","Fullscreen","S_fullscreen","S_loading","Mobile","Pc","Play","S_play","S_progress","S_poster","S_time","Start","S_start","Replay","S_replay"],"mappings":"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","file":"simple_player.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"xgplayer\"] = factory();\n\telse\n\t\troot[\"xgplayer\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 112);\n","import XgplayerTimeRange from './xgplayerTimeRange'\n\nexport function createDom(el = 'div', tpl = '', attrs = {}, cname = '') {\n let dom = document.createElement(el)\n dom.className = cname\n dom.innerHTML = tpl\n Object.keys(attrs).forEach(item => {\n let key = item\n let value = attrs[item]\n if (el === 'video' || el === 'audio') {\n if (value) {\n dom.setAttribute(key, value)\n }\n } else {\n dom.setAttribute(key, value)\n }\n })\n return dom\n}\n\nexport function hasClass(el, className) {\n if (!el) {\n return false;\n }\n\n if (el.classList) {\n return Array.prototype.some.call(el.classList, item => item === className)\n } else if (el.className) {\n return !!el.className.match(new RegExp('(\\\\s|^)' + className + '(\\\\s|$)'))\n } else {\n return false;\n }\n}\n\nexport function addClass(el, className) {\n if (!el) {\n return;\n }\n\n if (el.classList) {\n className.replace(/(^\\s+|\\s+$)/g, '').split(/\\s+/g).forEach(item => {\n item && el.classList.add(item)\n })\n } else if (!hasClass(el, className)) {\n el.className += ' ' + className\n }\n}\n\nexport function removeClass(el, className) {\n if (!el) {\n return;\n }\n\n if (el.classList) {\n className.split(/\\s+/g).forEach(item => {\n el.classList.remove(item)\n })\n } else if (hasClass(el, className)) {\n className.split(/\\s+/g).forEach(item => {\n let reg = new RegExp('(\\\\s|^)' + item + '(\\\\s|$)')\n el.className = el.className.replace(reg, ' ')\n })\n }\n}\n\nexport function toggleClass(el, className) {\n if (!el) {\n return;\n }\n\n className.split(/\\s+/g).forEach(item => {\n if (hasClass(el, item)) {\n removeClass(el, item)\n } else {\n addClass(el, item)\n }\n })\n}\n\nexport function findDom(el = document, sel) {\n let dom\n // fix querySelector IDs that start with a digit\n // https://stackoverflow.com/questions/37270787/uncaught-syntaxerror-failed-to-execute-queryselector-on-document\n try {\n dom = el.querySelector(sel)\n } catch (e) {\n if (sel.indexOf('#') === 0) {\n dom = el.getElementById(sel.slice(1))\n }\n }\n return dom\n}\n\nexport function padStart(str, length, pad) {\n let charstr = String(pad)\n let len = length >> 0\n let maxlen = Math.ceil(len / charstr.length)\n let chars = []\n let r = String(str)\n while (maxlen--) {\n chars.push(charstr)\n }\n return chars.join('').substring(0, len - r.length) + r\n}\n\nexport function format(time) {\n if (window.isNaN(time)) {\n return ''\n }\n let hour = padStart(Math.floor(time / 3600), 2, 0)\n let minute = padStart(Math.floor((time - hour * 3600) / 60), 2, 0)\n let second = padStart(Math.floor((time - hour * 3600 - minute * 60)), 2, 0)\n return (hour === '00' ? [minute, second] : [hour, minute, second]).join(':')\n}\n\nexport function event(e) {\n if (e.touches) {\n let touch = e.touches[0] || e.changedTouches[0]\n e.clientX = touch.clientX || 0\n e.clientY = touch.clientY || 0\n e.offsetX = touch.pageX - touch.target.offsetLeft\n e.offsetY = touch.pageY - touch.target.offsetTop\n }\n e._target = e.target || e.srcElement\n}\n\nexport function typeOf(obj) {\n return Object.prototype.toString.call(obj).match(/([^\\s.*]+)(?=]$)/g)[0]\n}\n\nexport function deepCopy(dst, src) {\n if (typeOf(src) === 'Object' && typeOf(dst) === 'Object') {\n Object.keys(src).forEach(key => {\n if (typeOf(src[key]) === 'Object' && !(src[key] instanceof Node)) {\n if (!dst[key]) {\n dst[key] = src[key]\n } else {\n deepCopy(dst[key], src[key])\n }\n } else if (typeOf(src[key]) === 'Array') {\n dst[key] = typeOf(dst[key]) === 'Array' ? dst[key].concat(src[key]) : src[key]\n } else {\n dst[key] = src[key]\n }\n })\n return dst\n }\n}\nexport function getBgImage(el) {\n // fix: return current page url when url is none\n let url = (el.currentStyle || window.getComputedStyle(el, null)).backgroundImage\n if (!url || url === 'none') {\n return ''\n }\n let a = document.createElement('a')\n a.href = url.replace(/url\\(\"|\"\\)/g, '')\n return a.href\n}\n\nexport function copyDom(dom) {\n if (dom && dom.nodeType === 1) {\n let back = document.createElement(dom.tagName)\n Array.prototype.forEach.call(dom.attributes, (node) => {\n back.setAttribute(node.name, node.value)\n })\n if (dom.innerHTML) {\n back.innerHTML = dom.innerHTML\n }\n return back\n } else {\n return ''\n }\n}\n\nexport function _setInterval(context, eventName, intervalFunc, frequency) {\n if (!context._interval[eventName]) {\n context._interval[eventName] = setInterval(intervalFunc.bind(context), frequency)\n }\n}\n\nexport function _clearInterval(context, eventName) {\n clearInterval(context._interval[eventName])\n context._interval[eventName] = null\n}\n\nexport function createImgBtn(name, imgUrl, width, height) {\n let btn = createDom(`xg-${name}`, '', {}, `xgplayer-${name}-img`)\n btn.style.backgroundImage = `url(\"${imgUrl}\")`\n if (width && height) {\n let w, h, unit\n ['px', 'rem', 'em', 'pt', 'dp', 'vw', 'vh', 'vm', '%'].every((item) => {\n if (width.indexOf(item) > -1 && height.indexOf(item) > -1) {\n w = Number(width.slice(0, width.indexOf(item)).trim())\n h = Number(height.slice(0, height.indexOf(item)).trim())\n unit = item\n return false\n } else {\n return true\n }\n })\n btn.style.width = `${w}${unit}`\n btn.style.height = `${h}${unit}`\n btn.style.backgroundSize = `${w}${unit} ${h}${unit}`\n if (name === 'start') {\n btn.style.margin = `-${h / 2}${unit} auto auto -${w / 2}${unit}`\n } else {\n btn.style.margin = 'auto 5px auto 5px'\n }\n }\n return btn\n}\n\nexport function isWeiXin() {\n let ua = window.navigator.userAgent.toLowerCase()\n return ua.indexOf('micromessenger') > -1\n}\n\nexport function isUc() {\n let ua = window.navigator.userAgent.toLowerCase()\n return ua.indexOf('ucbrowser') > -1\n}\n\nexport function computeWatchDur(played = []) {\n let arr = []\n for (let i = 0; i < played.length; i++) {\n if(!played[i].end || played[i].begin < 0 || played[i].end < 0 || played[i].end < played[i].begin) {\n continue\n }\n if(arr.length < 1) {\n arr.push({begin: played[i].begin, end: played[i].end})\n } else {\n for (let j = 0; j < arr.length; j++) {\n let begin = played[i].begin\n let end = played[i].end\n if(end < arr[j].begin) {\n arr.splice(j, 0, {begin, end})\n break\n } else if(begin > arr[j].end) {\n if(j > arr.length - 2) {\n arr.push({begin, end})\n break\n }\n } else {\n let b = arr[j].begin\n let e = arr[j].end\n arr[j].begin = Math.min(begin, b)\n arr[j].end = Math.max(end, e)\n break\n }\n }\n }\n }\n let watch_dur = 0\n for (let i = 0; i < arr.length; i++) {\n watch_dur += arr[i].end - arr[i].begin\n }\n return watch_dur\n}\n\nexport function offInDestroy(object, event, fn, offEvent) {\n function onDestroy () {\n object.off(event, fn)\n object.off(offEvent, onDestroy)\n }\n object.once(offEvent, onDestroy)\n}\n\nexport function on(object, event, fn, offEvent) {\n if (offEvent) {\n object.on(event, fn)\n offInDestroy(object, event, fn, offEvent)\n } else {\n let _fn = data => {\n fn(data)\n object.off(event, _fn)\n }\n object.on(event, _fn)\n }\n}\n\nexport function once(object, event, fn, offEvent) {\n if (offEvent) {\n object.once(event, fn)\n offInDestroy(object, event, fn, offEvent)\n } else {\n let _fn = data => {\n fn(data)\n object.off(event, _fn)\n }\n object.once(event, _fn)\n }\n}\n\nexport function getBuffered2(vbuffered, maxHoleDuration = 0.5) { //ref: hls.js\n let buffered = []\n for (let i = 0; i < vbuffered.length; i++) {\n buffered.push({ start: vbuffered.start(i) < 0.5 ? 0 : vbuffered.start(i), end: vbuffered.end(i) });\n }\n buffered.sort(function (a, b) {\n let diff = a.start - b.start;\n if (diff) {\n return diff;\n } else {\n return b.end - a.end;\n }\n });\n let buffered_2 = []\n if (maxHoleDuration) {\n for (let i = 0; i < buffered.length; i++) {\n let buf2len = buffered_2.length\n if (buf2len) {\n let buf2end = buffered_2[buf2len - 1].end\n if ((buffered[i].start - buf2end) < maxHoleDuration) {\n if (buffered[i].end > buf2end) {\n buffered_2[buf2len - 1].end = buffered[i].end\n }\n } else {\n buffered_2.push(buffered[i])\n }\n } else {\n buffered_2.push(buffered[i])\n }\n }\n } else {\n buffered_2 = buffered\n }\n return new XgplayerTimeRange(buffered_2)\n}\n\nexport function checkIsBrowser() {\n return !(typeof(window) === 'undefined' || typeof(window.document) === 'undefined' || typeof(window.document.createElement) === 'undefined')\n}\n\nexport function setStyle(elem, name, value) {\n let style = elem.style;\n try {\n style[name] = value;\n } catch (error) {\n style.setProperty( name, value );\n }\n}\n\nexport const PresentationMode = {\n PIP: 'picture-in-picture',\n INLINE: 'inline',\n FULLSCREEN: 'fullscreen'\n}\n\nexport function checkWebkitSetPresentationMode (video) {\n return typeof video.webkitSetPresentationMode === 'function'\n}\n\nexport const util = {\n createDom, hasClass, addClass, removeClass, toggleClass, findDom, padStart, format, event, typeOf, \n deepCopy, getBgImage, copyDom, setInterval: _setInterval, clearInterval: _clearInterval, createImgBtn, isWeiXin, isUc, computeWatchDur,\n offInDestroy, on, once, getBuffered2, checkIsBrowser, setStyle\n}\n\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target) {\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton && typeof options.singleton !== \"boolean\") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n if (!options.insertInto) options.insertInto = \"head\";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \"bottom\";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \"top\") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \"bottom\") {\n\t\ttarget.appendChild(style);\n\t} else if (typeof options.insertAt === \"object\" && options.insertAt.before) {\n\t\tvar nextSibling = getElement(options.insertInto + \" \" + options.insertAt.before);\n\t\ttarget.insertBefore(style, nextSibling);\n\t} else {\n\t\tthrow new Error(\"[Style Loader]\\n\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\n Must be 'top', 'bottom', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n\");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\"style\");\n\n\toptions.attrs.type = \"text/css\";\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\"link\");\n\n\toptions.attrs.type = \"text/css\";\n\toptions.attrs.rel = \"stylesheet\";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t result = options.transform(obj.css);\n\n\t if (result) {\n\t \t// If transform returns a value, use that instead of the original css.\n\t \t// This allows running runtime transformations on the css.\n\t \tobj.css = result;\n\t } else {\n\t \t// If the transform function returns a falsy value, don't add this css.\n\t \t// This allows conditional loading of css\n\t \treturn function() {\n\t \t\t// noop\n\t \t};\n\t }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \"function\" &&\n\t\ttypeof URL.createObjectURL === \"function\" &&\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\n\t\ttypeof Blob === \"function\" &&\n\t\ttypeof btoa === \"function\"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \"\" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\"media\", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default. Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\n\t}\n\n\tvar blob = new Blob([css], { type: \"text/css\" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n","let sniffer = {}\n\nObject.defineProperty(sniffer, 'device', {\n get: function () {\n let r = sniffer.os\n return r.isPc ? 'pc' : 'mobile'\n // return r.isPc ? 'pc' : r.isTablet ? 'tablet' : 'mobile'\n }\n})\n\nObject.defineProperty(sniffer, 'browser', {\n get: function () {\n let ua = navigator.userAgent.toLowerCase()\n let reg = {\n ie: /rv:([\\d.]+)\\) like gecko/,\n firfox: /firefox\\/([\\d.]+)/,\n chrome: /chrome\\/([\\d.]+)/,\n opera: /opera.([\\d.]+)/,\n safari: /version\\/([\\d.]+).*safari/\n }\n return [].concat(Object.keys(reg).filter(key => reg[key].test(ua)))[0] || ''\n }\n})\n\nObject.defineProperty(sniffer, 'os', {\n get: function () {\n let ua = navigator.userAgent\n let isWindowsPhone = /(?:Windows Phone)/.test(ua)\n let isSymbian = /(?:SymbianOS)/.test(ua) || isWindowsPhone\n let isAndroid = /(?:Android)/.test(ua)\n let isFireFox = /(?:Firefox)/.test(ua)\n let isTablet = /(?:iPad|PlayBook)/.test(ua) || (isAndroid && !/(?:Mobile)/.test(ua)) || (isFireFox && /(?:Tablet)/.test(ua))\n let isPhone = /(?:iPhone)/.test(ua) && !isTablet\n let isPc = !isPhone && !isAndroid && !isSymbian && !isTablet\n return {\n isTablet,\n isPhone,\n isAndroid,\n isPc,\n isSymbian,\n isWindowsPhone,\n isFireFox\n }\n }\n})\n\nexport default sniffer\n","import {version} from '../version.json'\nconst ErrorTypes = {\n network: {\n code: 1,\n msg: '视频下载错误',\n remark: '只要视频下载错误就使用此类型,无论是video本身的超时还是xhr的分段请求超时或者资源不存在'\n },\n mse: {\n code: 2,\n msg: '流追加错误',\n remark: '追加流的时候如果类型不对、无法被正确解码则会触发此类错误'\n },\n parse: {\n code: 3,\n msg: '解析错误',\n remark: 'mp4、hls、flv我们都是使用js进行格式解析,如果解析失败则会触发此类错误'\n },\n format: {\n code: 4,\n msg: '格式错误',\n remark: '如果浏览器不支持的格式导致播放错误'\n },\n decoder: {\n code: 5,\n msg: '解码错误',\n remark: '浏览器解码异常会抛出此类型错误'\n },\n runtime: {\n code: 6,\n msg: '语法错误',\n remark: '播放器语法错误'\n },\n timeout: {\n code: 7,\n msg: '播放超时',\n remark: '播放过程中无法正常请求下一个分段导致播放中断'\n },\n other: {\n code: 8,\n msg: '其他错误',\n remark: '不可知的错误或被忽略的错误类型'\n }\n}\n\nclass Errors {\n constructor (type, currentTime, duration, networkState, readyState, src, currentSrc,\n ended, errd = {line: '', handle: '', msg: '', version: ''}, errorCode, mediaError) {\n let r = {}\n if (arguments.length > 1) {\n r.playerVersion = version // 播放器版本\n r.errorType = type\n r.domain = document.domain // domain\n r.duration = duration // 视频时长\n r.currentTime = currentTime\n r.networkState = networkState\n r.readyState = readyState\n r.currentSrc = currentSrc\n r.src = src\n r.ended = ended\n r.errd = errd // 错误详情\n r.ex = (ErrorTypes[type] || {}).msg // 补充信息\n r.errorCode = errorCode\n r.mediaError = mediaError\n } else {\n const arg = arguments[0]\n Object.keys(arg).map(key => {\n r[key] = arg[key]\n })\n r.ex = ((arg.type && ErrorTypes[arg.type]) || {}).msg\n }\n return r\n }\n}\nexport default Errors\n","import EventEmitter from 'event-emitter'\nimport { findDom, createDom, hasClass, removeClass, _clearInterval, _setInterval, on, once, getBuffered2, setStyle } from './utils/util'\nimport Errors from './error'\n\nclass Proxy {\n constructor (options) {\n this._hasStart = false\n this.videoConfig = {\n controls: !!options.isShowControl,\n autoplay: options.autoplay,\n playsinline: options.playsinline,\n 'webkit-playsinline': options.playsinline,\n 'x5-playsinline': options.playsinline,\n 'x5-video-player-type': options['x5-video-player-type'] || options['x5VideoPlayerType'],\n 'x5-video-player-fullscreen': options['x5-video-player-fullscreen'] || options['x5VideoPlayerFullscreen'],\n 'x5-video-orientation': options['x5-video-orientation'] || options['x5VideoOrientation'],\n airplay: options['airplay'],\n 'webkit-airplay': options['airplay'],\n tabindex: 2,\n mediaType: options.mediaType || 'video'\n }\n if (options.muted) {\n this.videoConfig.muted = 'muted'\n }\n if (options.loop) {\n this.videoConfig.loop = 'loop'\n }\n let textTrackDom = ''\n this.textTrackShowDefault = true\n if (options.nativeTextTrack && Array.isArray(options.nativeTextTrack)) {\n if (options.nativeTextTrack.length > 0 && !options.nativeTextTrack.some(track => { return track.default })) {\n options.nativeTextTrack[0].default = true\n this.textTrackShowDefault = false\n }\n options.nativeTextTrack.some(track => {\n if (track.src && track.label && track.default) {\n textTrackDom += `<track src=\"${track.src}\" `\n if (track.kind) {\n textTrackDom += `kind=\"${track.kind}\" `\n }\n textTrackDom += `label=\"${track.label}\" `\n if (track.srclang) {\n textTrackDom += `srclang=\"${track.srclang}\" `\n }\n textTrackDom += `${track.default ? 'default' : ''}>`\n return true\n }\n })\n this.videoConfig.crossorigin = 'anonymous'\n }\n if (options.textTrackStyle) {\n let style = document.createElement('style')\n this.textTrackStyle = style\n document.head.appendChild(style)\n let styleStr = ''\n for (let index in options.textTrackStyle) {\n styleStr += `${index}: ${options.textTrackStyle[index]};`\n }\n let wrap = options.id ? `#${options.id}` : (options.el.id ? `#${options.el.id}` : `.${options.el.className}`)\n if (style.sheet.insertRule) {\n style.sheet.insertRule(`${wrap} video::cue { ${styleStr} }`, 0)\n } else if (style.sheet.addRule) {\n style.sheet.addRule(`${wrap} video::cue`, styleStr)\n }\n }\n let el = options.el ? options.el : findDom(document, `#${options.id}`)\n const XgVideoProxy = this.constructor.XgVideoProxy\n if(XgVideoProxy && this.videoConfig.mediaType === XgVideoProxy.mediaType) {\n this.video = new XgVideoProxy(el, options)\n } else {\n this.video = createDom(this.videoConfig.mediaType, textTrackDom, this.videoConfig, '')\n }\n if (options.videoStyle) {\n Object.keys(options.videoStyle).forEach(key => {\n setStyle(this.video, key, options.videoStyle[key])\n })\n }\n if (!this.textTrackShowDefault && textTrackDom) {\n let trackDoms = this.video.getElementsByTagName('Track')\n trackDoms[0].track.mode = 'hidden'\n }\n if (options.autoplay) {\n this.video.autoplay = true\n if (options.autoplayMuted) {\n this.video.muted = true\n }\n }\n\n this.ev = ['play', 'playing', 'pause', 'ended', 'error', 'seeking', 'seeked', 'progress', \n 'timeupdate', 'waiting', 'canplay', 'canplaythrough', 'durationchange', 'volumechange', 'ratechange', 'loadedmetadata', 'loadeddata', 'loadstart'\n ].map((item) => {\n return {\n [item]: `on${item.charAt(0).toUpperCase()}${item.slice(1)}`\n }\n })\n EventEmitter(this)\n\n this._interval = {}\n let lastBuffer = '0,0'\n let self = this\n\n const defaultVideoEventHandler = name => {\n // fix when video destroy called and video reload\n if (!this) {\n return\n }\n if (name === 'play') {\n this.hasStart = true\n } else if (name === 'canplay') {\n removeClass(this.root, 'xgplayer-is-enter')\n } else if (name === 'waiting') {\n this.inWaitingStart = new Date().getTime()\n } else if (name === 'playing') {\n removeClass(this.root, 'xgplayer-is-enter')\n if (this.inWaitingStart) {\n this.inWaitingStart = undefined\n }\n }\n if (name === 'error') {\n // process the error\n this._onError(name)\n } else {\n this.emit(name, this)\n }\n\n if (this.hasOwnProperty('_interval')) {\n if (['ended', 'error', 'timeupdate'].indexOf(name) < 0) {\n _clearInterval(this, 'bufferedChange')\n _setInterval(this, 'bufferedChange', function () {\n if (this.video && this.video.buffered) {\n let curBuffer = []\n for (let i = 0, len = this.video.buffered.length; i < len; i++) {\n curBuffer.push([this.video.buffered.start(i), this.video.buffered.end(i)])\n }\n if (curBuffer.toString() !== lastBuffer) {\n lastBuffer = curBuffer.toString()\n this.emit('bufferedChange', curBuffer)\n }\n }\n }, 200)\n } else {\n if (name !== 'timeupdate') {\n _clearInterval(this, 'bufferedChange')\n }\n }\n }\n }\n\n const videoEventHandler = name => {\n if(options.videoEventMiddleware && typeof options.videoEventMiddleware[name] === 'function') {\n options.videoEventMiddleware[name].call(this, this, name, defaultVideoEventHandler)\n } else {\n defaultVideoEventHandler.call(this, name);\n }\n }\n\n this.ev.forEach(item => {\n self.evItem = Object.keys(item)[0]\n let name = Object.keys(item)[0]\n self.video.addEventListener(Object.keys(item)[0], videoEventHandler.bind(self, name))\n })\n }\n /**\n * 错误监听处理逻辑抽离\n */\n _onError (name) {\n if (this.video && this.video.error) {\n this.emit(name, new Errors('other', this.currentTime, this.duration, this.networkState, this.readyState, this.currentSrc, this.src,\n this.ended, {\n line: 162,\n msg: this.error,\n handle: 'Constructor'\n }, this.video.error.code, this.video.error))\n }\n }\n\n get hasStart () {\n return this._hasStart\n }\n set hasStart (bool) {\n if (typeof bool === 'boolean' && bool === true && !this._hasStart) {\n this._hasStart = true\n this.emit('hasstart')\n }\n }\n destroy () {\n if (this.textTrackStyle) {\n this.textTrackStyle.parentNode.removeChild(this.textTrackStyle)\n }\n }\n play () {\n return this.video.play()\n }\n pause () {\n this.video.pause()\n }\n canPlayType (type) {\n return this.video.canPlayType(type)\n }\n getBufferedRange (buffered) {\n let range = [0, 0]\n let video = this.video\n if(!buffered) buffered = video.buffered\n let currentTime = video.currentTime\n if (buffered) {\n for (let i = 0, len = buffered.length; i < len; i++) {\n range[0] = buffered.start(i)\n range[1] = buffered.end(i)\n if (range[0] <= currentTime && currentTime <= range[1]) {\n break\n }\n }\n }\n if (range[0] - currentTime <= 0 && currentTime - range[1] <= 0) {\n return range\n } else {\n return [0, 0]\n }\n }\n proxyOn (event, fn) {\n on(this, event, fn, 'destroy')\n }\n proxyOnce (event, fn) {\n once(this, event, fn, 'destroy')\n }\n set autoplay (isTrue) {\n if(this.video) {\n this.video.autoplay = isTrue\n }\n }\n get autoplay () {\n if(this.video) {\n return this.video.autoplay\n } else {\n return false\n }\n }\n get buffered () {\n if(this.video) {\n return this.video.buffered\n } else {\n return undefined\n }\n }\n get buffered2 () {\n return getBuffered2(this.video.buffered)\n }\n get crossOrigin () {\n if(this.video) {\n return this.video.crossOrigin\n } else {\n return false\n }\n }\n set crossOrigin (isTrue) {\n if(this.video) {\n this.video.crossOrigin = isTrue\n }\n }\n get currentSrc () {\n if(this.video) {\n return this.video.currentSrc\n } else {\n return undefined\n }\n }\n get currentTime () {\n if(this.video) {\n return this.video.currentTime || 0\n } else {\n return 0\n }\n }\n set currentTime (time) {\n if (typeof isFinite === 'function' && !isFinite(time)) return\n if (hasClass(this.root, 'xgplayer-ended')) {\n this.once('playing', () => { this.video.currentTime = time })\n this.replay()\n } else {\n this.video.currentTime = time\n }\n this.emit('currentTimeChange', time)\n }\n get defaultMuted () {\n if(this.video) {\n return this.video.defaultMuted\n } else {\n return false\n }\n }\n set defaultMuted (isTrue) {\n if(this.video) {\n this.video.defaultMuted = isTrue\n }\n }\n get duration () {\n if(this.config.duration) {\n if(this.video) return Math.min(this.config.duration, this.video.duration)\n else return this.config.duration\n }\n if (!this.video) return null\n return this.video.duration\n }\n get ended () {\n if(this.video) {\n return this.video.ended || false\n } else {\n return true\n }\n }\n get error () {\n let err = this.video.error\n if (!err) {\n return null\n }\n let status = [{\n en: 'MEDIA_ERR_ABORTED',\n cn: '取回过程被用户中止'\n }, {\n en: 'MEDIA_ERR_NETWORK',\n cn: '当下载时发生错误'\n }, {\n en: 'MEDIA_ERR_DECODE',\n cn: '当解码时发生错误'\n }, {\n en: 'MEDIA_ERR_SRC_NOT_SUPPORTED',\n cn: '不支持音频/视频'\n }]\n return this.lang ? this.lang[status[err.code - 1].en] : status[err.code - 1].en\n }\n get loop () {\n if(this.video) {\n return this.video.loop\n } else {\n return false\n }\n }\n set loop (isTrue) {\n if(this.video) {\n this.video.loop = isTrue\n }\n }\n get muted () {\n if(this.video) {\n return this.video.muted\n } else {\n return false\n }\n }\n set muted (isTrue) {\n if(this.video) {\n this.video.muted = isTrue\n }\n }\n get networkState () {\n let status = [{\n en: 'NETWORK_EMPTY',\n cn: '音频/视频尚未初始化'\n }, {\n en: 'NETWORK_IDLE',\n cn: '音频/视频是活动的且已选取资源,但并未使用网络'\n }, {\n en: 'NETWORK_LOADING',\n cn: '浏览器正在下载数据'\n }, {\n en: 'NETWORK_NO_SOURCE',\n cn: '未找到音频/视频来源'\n }]\n return this.lang ? this.lang[status[this.video.networkState].en] : status[this.video.networkState].en\n }\n get paused () {\n // if(this.video) {\n // return this.video.paused\n // } else {\n // return false\n // }\n return hasClass(this.root, 'xgplayer-pause')\n }\n get playbackRate () {\n if(this.video) {\n return this.video.playbackRate\n } else {\n return 1\n }\n }\n set playbackRate (rate) {\n if(this.video) {\n this.video.playbackRate = rate\n }\n }\n get played () {\n if(this.video) {\n return this.video.played\n } else {\n return undefined\n }\n }\n get preload () {\n if(this.video) {\n return this.video.preload\n } else {\n return false\n }\n }\n set preload (isTrue) {\n if(this.video) {\n this.video.preload = isTrue\n }\n }\n get readyState () {\n let status = [{\n en: 'HAVE_NOTHING',\n cn: '没有关于音频/视频是否就绪的信息'\n }, {\n en: 'HAVE_METADATA',\n cn: '关于音频/视频就绪的元数据'\n }, {\n en: 'HAVE_CURRENT_DATA',\n cn: '关于当前播放位置的数据是可用的,但没有足够的数据来播放下一帧/毫秒'\n }, {\n en: 'HAVE_FUTURE_DATA',\n cn: '当前及至少下一帧的数据是可用的'\n }, {\n en: 'HAVE_ENOUGH_DATA',\n cn: '可用数据足以开始播放'\n }]\n return this.lang ? this.lang[status[this.video.readyState].en] : status[this.video.readyState]\n }\n get seekable () {\n if(this.video) {\n return this.video.seekable\n } else {\n return false\n }\n }\n get seeking () {\n if(this.video) {\n return this.video.seeking\n } else {\n return false\n }\n }\n get src () {\n if(this.video) {\n return this.video.src\n } else {\n return undefined\n }\n }\n set src (url) {\n if (!hasClass(this.root, 'xgplayer-ended')) {\n this.emit('urlchange', this.video.src)\n }\n removeClass(this.root, 'xgplayer-ended xgplayer-is-replay xgplayer-is-error')\n this.video.pause()\n this.emit('pause')\n this.video.src = url\n this.emit('srcChange')\n }\n set poster (posterUrl) {\n let poster = findDom(this.root, '.xgplayer-poster')\n if (poster) {\n poster.style.backgroundImage = `url(${posterUrl})`\n }\n }\n get volume () {\n if(this.video) {\n return this.video.volume\n } else {\n return 1\n }\n }\n set volume (vol) {\n if(this.video) {\n this.video.volume = vol\n }\n }\n get fullscreen () {\n return hasClass(this.root, 'xgplayer-is-fullscreen') || hasClass(this.root, 'xgplayer-fullscreen-active')\n }\n get bullet () {\n return findDom(this.root, 'xg-danmu') ? hasClass(findDom(this.root, 'xg-danmu'), 'xgplayer-has-danmu') : false\n }\n get textTrack () {\n return hasClass(this.root, 'xgplayer-is-textTrack')\n }\n get pip () {\n return hasClass(this.root, 'xgplayer-pip-active')\n }\n get isMiniPlayer () {\n return hasClass(this.root, 'xgplayer-miniplayer-active')\n }\n}\n\nexport default Proxy\n","import Proxy from './proxy'\nimport { util, deepCopy, findDom, createDom, addClass, typeOf, hasClass, removeClass, checkIsBrowser } from './utils/util'\nimport sniffer from './utils/sniffer'\nimport XgplayerTimeRange from './utils/xgplayerTimeRange'\nimport Errors from './error'\nimport allOff from 'event-emitter/all-off'\nimport s_i18n from './skin/controls/i18n.js'\nimport './skin/style/index.scss'\n\nimport {\n version\n} from '../version.json'\nclass Player extends Proxy {\n constructor (options) {\n super(options)\n this.config = deepCopy({\n width: 600,\n height: 337.5,\n ignores: [],\n whitelist: [],\n lang: (document.documentElement.getAttribute('lang') || navigator.language || 'zh-cn').toLocaleLowerCase(),\n inactive: 3000,\n volume: 0.6,\n controls: true,\n controlsList: ['nodownload']\n }, options)\n this.version = version\n this.userTimer = null\n this.waitTimer = null\n this.history = []\n this.isProgressMoving = false\n this.root = findDom(document, `#${this.config.id}`)\n this.controls = createDom('xg-controls', '', {\n unselectable: 'on',\n onselectstart: 'return false'\n }, 'xgplayer-controls')\n if (this.config.isShowControl) {\n this.controls.style.display = 'none'\n }\n if (!this.root) {\n let el = this.config.el\n if (el && el.nodeType === 1) {\n this.root = el\n } else {\n this.emit('error', new Errors({\n type: 'use',\n errd: {\n line: 45,\n handle: 'Constructor',\n msg: 'container id can\\'t be empty'\n },\n vid: this.config.vid\n }))\n console.error('container id can\\'t be empty')\n return false\n }\n }\n // this.rootBackup = copyDom(this.root)\n addClass(this.root, `xgplayer xgplayer-${sniffer.device} xgplayer-nostart xgplayer-pause ${this.config.controls ? '' : 'xgplayer-no-controls'}`)\n this.root.appendChild(this.controls)\n if (this.config.fluid) {\n this.root.style['max-width'] = '100%'\n this.root.style['width'] = '100%'\n this.root.style['height'] = '0'\n this.root.style['padding-top'] = `${this.config.height * 100 / this.config.width}%`\n\n this.video.style['position'] = 'absolute'\n this.video.style['top'] = '0'\n this.video.style['left'] = '0'\n } else {\n // this.root.style.width = `${this.config.width}px`\n // this.root.style.height = `${this.config.height}px`\n if (this.config.width) {\n if (typeof this.config.width !== 'number') {\n this.root.style.width = this.config.width\n } else {\n this.root.style.width = `${this.config.width}px`\n }\n }\n if (this.config.height) {\n if (typeof this.config.height !== 'number') {\n this.root.style.height = this.config.height\n } else {\n this.root.style.height = `${this.config.height}px`\n }\n }\n }\n if (this.config.execBeforePluginsCall) {\n this.config.execBeforePluginsCall.forEach(item => {\n item.call(this, this)\n })\n }\n if(!this.config.closeI18n) {\n Player.install(s_i18n.name, s_i18n.method)\n }\n if (this.config.controlStyle && typeOf(this.config.controlStyle) === 'String') {\n let self = this\n fetch(self.config.controlStyle, {\n method: 'GET',\n headers: {\n Accept: 'application/json'\n }\n }).then(function (res) {\n if (res.ok) {\n res.json().then(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n self.config[prop] = obj[prop]\n }\n }\n self.pluginsCall()\n })\n }\n }).catch(function (err) {\n console.log('Fetch错误:' + err)\n })\n } else {\n this.pluginsCall()\n }\n if(this.config.controlPlugins) {\n Player.controlsRun(this.config.controlPlugins, this)\n }\n this.ev.forEach((item) => {\n let evName = Object.keys(item)[0]\n let evFunc = this[item[evName]]\n if (evFunc) {\n this.on(evName, evFunc)\n }\n });\n\n ['focus', 'blur'].forEach(item => {\n this.on(item, this['on' + item.charAt(0).toUpperCase() + item.slice(1)])\n })\n let player = this\n this.mousemoveFunc = function () {\n player.emit('focus')\n if (!player.config.closeFocusVideoFocus) {\n player.video.focus()\n }\n }\n this.root.addEventListener('mousemove', this.mousemoveFunc)\n this.playFunc = function () {\n player.emit('focus')\n if (!player.config.closePlayVideoFocus) {\n player.video.focus()\n }\n }\n player.once('play', this.playFunc)\n\n this.getVideoSize = function () {\n if (this.video.videoWidth && this.video.videoHeight) {\n let containerSize = player.root.getBoundingClientRect()\n if (player.config.fitVideoSize === 'auto') {\n if (containerSize.width / containerSize.height > this.video.videoWidth / this.video.videoHeight) {\n player.root.style.height = `${this.video.videoHeight / this.video.videoWidth * containerSize.width}px`\n } else {\n player.root.style.width = `${this.video.videoWidth / this.video.videoHeight * containerSize.height}px`\n }\n } else if (player.config.fitVideoSize === 'fixWidth') {\n player.root.style.height = `${this.video.videoHeight / this.video.videoWidth * containerSize.width}px`\n } else if (player.config.fitVideoSize === 'fixHeight') {\n player.root.style.width = `${this.video.videoWidth / this.video.videoHeight * containerSize.height}px`\n }\n }\n }\n player.once('loadeddata', this.getVideoSize)\n\n setTimeout(() => {\n this.emit('ready')\n this.isReady = true\n }, 0)\n\n if (this.config.videoInit) {\n if (hasClass(this.root, 'xgplayer-nostart')) {\n this.start()\n }\n }\n if (player.config.rotate) {\n player.on('requestFullscreen', this.updateRotateDeg)\n player.on('exitFullscreen', this.updateRotateDeg)\n }\n\n function onDestroy () {\n player.root.removeEventListener('mousemove', player.mousemoveFunc)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n }\n\n attachVideo () {\n if(this.video && this.video.nodeType === 1) {\n this.root.insertBefore(this.video, this.root.firstChild)\n }\n setTimeout(() => {\n this.emit('complete')\n if(this.danmu && typeof this.danmu.resize === 'function') {\n this.danmu.resize()\n }\n }, 1)\n }\n\n start (url = this.config.url) {\n if(!this.video) return\n let player = this\n if (!url || url === '') {\n this.emit('urlNull')\n return\n }\n this.canPlayFunc = function () {\n player.off('canplay', player.canPlayFunc)\n let playPromise = player.video.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.then(function () {\n player.emit('autoplay started')\n }).catch(function () {\n player.emit('autoplay was prevented')\n addClass(player.root, 'xgplayer-is-autoplay')\n })\n }\n }\n if (typeOf(url) !== 'Array') {\n if (typeOf(url) === 'String' && url.indexOf('blob:') > -1 && url === this.video.src) {\n // 在Chromium环境下用mse url给video二次赋值会导致错误\n } else {\n this.video.src = url\n }\n } else {\n url.forEach(item => {\n this.video.appendChild(createDom('source', '', {\n src: `${item.src}`,\n type: `${item.type || ''}`\n }))\n })\n }\n if (this.config.autoplay) {\n if (sniffer.os.isPhone) {\n this.canPlayFunc()\n } else {\n this.on('canplay', this.canPlayFunc)\n }\n }\n if(!this.config.disableStartLoad) {\n this.video.load()\n }\n this.attachVideo()\n }\n\n reload () {\n this.video.load()\n this.reloadFunc = function () {\n // eslint-disable-next-line handle-callback-err\n let playPromise = this.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }\n this.once('loadeddata', this.reloadFunc)\n }\n\n destroy (isDelDom = true) {\n let player = this\n clearInterval(this.bulletResizeTimer)\n for (let k in this._interval) {\n clearInterval(this._interval[k])\n this._interval[k] = null\n }\n if (this.checkTimer) {\n clearInterval(this.checkTimer)\n }\n if (this.waitTimer) {\n clearTimeout(this.waitTimer)\n }\n this.ev.forEach((item) => {\n let evName = Object.keys(item)[0]\n let evFunc = this[item[evName]]\n if (evFunc) {\n this.off(evName, evFunc)\n }\n });\n if (this.loadeddataFunc) {\n this.off('loadeddata', this.loadeddataFunc)\n }\n if (this.reloadFunc) {\n this.off('loadeddata', this.reloadFunc)\n }\n if (this.replayFunc) {\n this.off('play', this.replayFunc)\n }\n if (this.playFunc) {\n this.off('play', this.playFunc)\n }\n if (this.getVideoSize) {\n this.off('loadeddata', this.getVideoSize)\n };\n ['focus', 'blur'].forEach(item => {\n this.off(item, this['on' + item.charAt(0).toUpperCase() + item.slice(1)])\n })\n if (!this.config.keyShortcut || this.config.keyShortcut === 'on') {\n ['video', 'controls'].forEach(item => {\n if (this[item]) {\n this[item].removeEventListener('keydown', function (e) { player.onKeydown(e, player) })\n }\n })\n }\n\n function destroyFunc () {\n this.emit('destroy')\n // this.root.id = this.root.id + '_del'\n // parentNode.insertBefore(this.rootBackup, this.root)\n\n // fix video destroy https://stackoverflow.com/questions/3258587/how-to-properly-unload-destroy-a-video-element\n this.video.removeAttribute('src') // empty source\n this.video.load()\n if (isDelDom) {\n // parentNode.removeChild(this.root)\n this.root.innerHTML = ''\n let classNameList = this.root.className.split(' ')\n if (classNameList.length > 0) {\n this.root.className = classNameList.filter(name => name.indexOf('xgplayer') < 0).join(' ')\n } else {\n this.root.className = ''\n }\n }\n\n for (let k in this) {\n // if (k !== 'config') {\n delete this[k]\n // }\n }\n allOff(this)\n }\n\n // destroy immediately\n // Don't use the paused property detection, it doesn't use MediaElement.paused, \n // so it's not accurate enough. Destroy after waiting for pause event, this \n // changes the synchronous behavior of destroy api\n destroyFunc.call(this)\n\n super.destroy()\n }\n\n replay () {\n let self = this\n let _replay = this._replay\n // ie9 bugfix\n removeClass(this.root, 'xgplayer-ended')\n if(sniffer.browser.indexOf('ie') > -1) {\n this.emit('play')\n this.emit('playing')\n }\n \n if (_replay && _replay instanceof Function) {\n _replay()\n } else {\n this.currentTime = 0\n // eslint-disable-next-line handle-callback-err\n let playPromise = this.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }\n }\n\n userGestureTrigEvent (name, param) {\n const defaultUserGestureEventHandler = (name, param) => {\n this.emit(name, param)\n }\n if(this.config.userGestureEventMiddleware && typeof this.config.userGestureEventMiddleware[name] === 'function') {\n this.config.userGestureEventMiddleware[name].call(this, this, name, param, defaultUserGestureEventHandler)\n } else {\n defaultUserGestureEventHandler.call(this, name, param);\n }\n }\n\n pluginsCall () {\n if(Player.plugins['s_i18n']) {\n Player.plugins['s_i18n'].call(this, this)\n }\n let self = this\n if (Player.plugins) {\n let ignores = this.config.ignores\n Object.keys(Player.plugins).forEach(name => {\n let descriptor = Player.plugins[name]\n if(!descriptor || typeof descriptor !== 'function'){\n console.warn('plugin name', name , 'is invalid')\n } else {\n if (!ignores.some(item => name === item || name === 's_' + item) && name !== 's_i18n') {\n if (['pc', 'tablet', 'mobile'].some(type => type === name)) {\n if (name === sniffer.device) {\n setTimeout(() => {\n // if destroyed, skip\n if (!self.video) return;\n descriptor.call(self, self)\n }, 0)\n }\n } else {\n descriptor.call(this, this)\n }\n }\n }\n })\n }\n }\n\n onFocus () {\n let player = this\n if(hasClass(this.root, 'xgplayer-inactive')) {\n player.emit('controlShow')\n }\n removeClass(this.root, 'xgplayer-inactive')\n if (player.userTimer) {\n clearTimeout(player.userTimer)\n }\n player.userTimer = setTimeout(function () {\n player.emit('blur')\n }, player.config.inactive)\n }\n\n onBlur () {\n // this.video.blur()\n if ((this.config.enablePausedInactive || !this.paused) && !this.ended && !this.config.closeInactive) {\n if(!hasClass(this.root, 'xgplayer-inactive')) {\n this.emit('controlHide')\n }\n addClass(this.root, 'xgplayer-inactive')\n }\n }\n\n onPlay () {\n addClass(this.root, 'xgplayer-isloading')\n addClass(this.root, 'xgplayer-playing')\n removeClass(this.root, 'xgplayer-pause')\n }\n\n onPause () {\n addClass(this.root, 'xgplayer-pause')\n if (this.userTimer) {\n clearTimeout(this.userTimer)\n }\n this.emit('focus')\n }\n\n onEnded () {\n addClass(this.root, 'xgplayer-ended')\n removeClass(this.root, 'xgplayer-playing')\n }\n\n onSeeking () {\n this.isSeeking = true\n // 兼容IE下无法触发waiting事件的问题 seeking的时候直接出发waiting\n this.onWaiting()\n // addClass(this.root, 'seeking');\n }\n\n // onTimeupdate () {\n // // for ie,playing fired before waiting\n // if (this.waitTimer) {\n // clearTimeout(this.waitTimer)\n // }\n // removeClass(this.root, 'xgplayer-isloading')\n\n // }\n\n onSeeked () {\n // for ie,playing fired before waiting\n this.once('timeupdate', () => {\n this.isSeeking = false\n })\n if (this.waitTimer) {\n clearTimeout(this.waitTimer)\n }\n removeClass(this.root, 'xgplayer-isloading')\n }\n\n onWaiting () {\n let self = this\n if (self.waitTimer) {\n clearTimeout(self.waitTimer)\n }\n if (self.checkTimer) {\n clearInterval(self.checkTimer)\n self.checkTimer = null\n }\n let time = self.currentTime\n self.waitTimer = setTimeout(function () {\n addClass(self.root, 'xgplayer-isloading')\n self.checkTimer = setInterval(function () {\n if (self.currentTime !== time) {\n removeClass(self.root, 'xgplayer-isloading')\n clearInterval(self.checkTimer)\n self.checkTimer = null\n }\n }, 1000)\n }, 500)\n }\n\n onPlaying () {\n // 兼容safari下无法自动播放会触发该事件的场景\n if (this.paused) {\n return\n }\n this.isSeeking = false\n if (this.waitTimer) {\n clearTimeout(this.waitTimer)\n }\n removeClass(this.root, 'xgplayer-isloading xgplayer-nostart xgplayer-pause xgplayer-ended xgplayer-is-error xgplayer-replay')\n addClass(this.root, 'xgplayer-playing')\n }\n\n static install (name, descriptor) {\n if (!checkIsBrowser()) {\n return\n }\n if (!Player.plugins) {\n Player.plugins = {}\n }\n if (!Player.plugins[name]) {\n Player.plugins[name] = descriptor\n }\n }\n\n static installAll (list) {\n for(let k = 0; k < list.length; k++){\n Player.install(list[k].name, list[k].method)\n }\n }\n\n static use (name, descriptor) {\n if (!Player.plugins) {\n Player.plugins = {}\n }\n Player.plugins[name] = descriptor\n }\n\n static useAll (list) {\n for (let k in list) {\n Player.use(list[k].name, list[k].method)\n }\n }\n\n static controlsRun (controlLst, context) {\n controlLst.forEach(function(control) {\n control.method.call(context)\n })\n }\n}\n\nPlayer.util = util\nPlayer.sniffer = sniffer\nPlayer.Errors = Errors\nPlayer.XgplayerTimeRange = XgplayerTimeRange\n\nexport default Player\n","\"use strict\";\n\nvar _undefined = require(\"../function/noop\")(); // Support ES3 engines\n\nmodule.exports = function (val) { return val !== _undefined && val !== null; };\n","export default class XgplayerTimeRange {\n constructor(bufferedList) {\n this.bufferedList = bufferedList\n }\n\n start (index) {\n return this.bufferedList[index].start\n }\n\n end (index) {\n return this.bufferedList[index].end\n }\n\n get length () {\n return this.bufferedList.length\n }\n}\n","import { typeOf } from '../../utils/util'\n\nlet s_i18n = function () {\n let player = this; let lang = {};\n lang.en = {\n HAVE_NOTHING: 'There is no information on whether audio/video is ready',\n HAVE_METADATA: 'Audio/video metadata is ready ',\n HAVE_CURRENT_DATA: 'Data about the current play location is available, but there is not enough data to play the next frame/millisecond',\n HAVE_FUTURE_DATA: 'Current and at least one frame of data is available',\n HAVE_ENOUGH_DATA: 'The available data is sufficient to start playing',\n NETWORK_EMPTY: 'Audio/video has not been initialized',\n NETWORK_IDLE: 'Audio/video is active and has been selected for resources, but no network is used',\n NETWORK_LOADING: 'The browser is downloading the data',\n NETWORK_NO_SOURCE: 'No audio/video source was found',\n MEDIA_ERR_ABORTED: 'The fetch process is aborted by the user',\n MEDIA_ERR_NETWORK: 'An error occurred while downloading',\n MEDIA_ERR_DECODE: 'An error occurred while decoding',\n MEDIA_ERR_SRC_NOT_SUPPORTED: 'Audio/video is not supported',\n REPLAY: 'Replay',\n ERROR: 'Network is offline',\n PLAY_TIPS: 'Play',\n PAUSE_TIPS: 'Pause',\n PLAYNEXT_TIPS: 'Play next',\n DOWNLOAD_TIPS: 'Download',\n ROTATE_TIPS: 'Rotate',\n RELOAD_TIPS: 'Reload',\n FULLSCREEN_TIPS: \"Fullscreen\",\n EXITFULLSCREEN_TIPS: 'Exit fullscreen',\n CSSFULLSCREEN_TIPS: 'Cssfullscreen',\n EXITCSSFULLSCREEN_TIPS: 'Exit cssfullscreen',\n TEXTTRACK: 'Caption',\n PIP: 'Pip',\n MINIPLAYER: 'Miniplayer',\n SCREENSHOT: 'Screenshot',\n LIVE: 'LIVE',\n OFF: 'Off',\n MINIPLAYER_DRAG: 'Click and hold to drag',\n AIRPLAY_TIPS: 'Airplay',\n }\n lang['zh-cn'] = {\n HAVE_NOTHING: '没有关于音频/视频是否就绪的信息',\n HAVE_METADATA: '音频/视频的元数据已就绪',\n HAVE_CURRENT_DATA: '关于当前播放位置的数据是可用的,但没有足够的数据来播放下一帧/毫秒',\n HAVE_FUTURE_DATA: '当前及至少下一帧的数据是可用的',\n HAVE_ENOUGH_DATA: '可用数据足以开始播放',\n NETWORK_EMPTY: '音频/视频尚未初始化',\n NETWORK_IDLE: '音频/视频是活动的且已选取资源,但并未使用网络',\n NETWORK_LOADING: '浏览器正在下载数据',\n NETWORK_NO_SOURCE: '未找到音频/视频来源',\n MEDIA_ERR_ABORTED: '取回过程被用户中止',\n MEDIA_ERR_NETWORK: '当下载时发生错误',\n MEDIA_ERR_DECODE: '当解码时发生错误',\n MEDIA_ERR_SRC_NOT_SUPPORTED: '不支持的音频/视频格式',\n REPLAY: '重播',\n ERROR: '网络连接似乎出现了问题',\n PLAY_TIPS: '播放',\n PAUSE_TIPS: '暂停',\n PLAYNEXT_TIPS: '下一集',\n DOWNLOAD_TIPS: '下载',\n ROTATE_TIPS: '旋转',\n RELOAD_TIPS: '重新载入',\n FULLSCREEN_TIPS: \"进入全屏\",\n EXITFULLSCREEN_TIPS: '退出全屏',\n CSSFULLSCREEN_TIPS: '进入样式全屏',\n EXITCSSFULLSCREEN_TIPS: '退出样式全屏',\n TEXTTRACK: '字幕',\n PIP: '画中画',\n MINIPLAYER: '迷你播放器',\n SCREENSHOT: '截图',\n LIVE: '正在直播',\n OFF: '关闭',\n MINIPLAYER_DRAG: '点击按住可拖动视频',\n AIRPLAY_TIPS: '隔空播放',\n }\n lang['zh-hk'] = {\n HAVE_NOTHING: '沒有關於音頻/視頻是否就緒的信息',\n HAVE_METADATA: '音頻/視頻的元數據已就緒',\n HAVE_CURRENT_DATA: '關於當前播放位置的數據是可用的,但沒有足夠的數據來播放下壹幀/毫秒',\n HAVE_FUTURE_DATA: '當前及至少下壹幀的數據是可用的',\n HAVE_ENOUGH_DATA: '可用數據足以開始播放',\n NETWORK_EMPTY: '音頻/視頻尚未初始化',\n NETWORK_IDLE: '音頻/視頻是活動的且已選取資源,但並未使用網絡',\n NETWORK_LOADING: '瀏覽器正在下載數據',\n NETWORK_NO_SOURCE: '未找到音頻/視頻來源',\n MEDIA_ERR_ABORTED: '取回過程被用戶中止',\n MEDIA_ERR_NETWORK: '當下載時發生錯誤',\n MEDIA_ERR_DECODE: '當解碼時發生錯誤',\n MEDIA_ERR_SRC_NOT_SUPPORTED: '不支持的音頻/視頻格式',\n REPLAY: '重播',\n ERROR: '網絡連接似乎出現了問題',\n PLAY_TIPS: '播放',\n PAUSE_TIPS: '暫停',\n PLAYNEXT_TIPS: '下壹集',\n DOWNLOAD_TIPS: '下載',\n ROTATE_TIPS: '旋轉',\n RELOAD_TIPS: '重新載入',\n FULLSCREEN_TIPS: \"進入全屏\",\n EXITFULLSCREEN_TIPS: '退出全屏',\n CSSFULLSCREEN_TIPS: '進入樣式全屏',\n EXITCSSFULLSCREEN_TIPS: '退出樣式全屏',\n TEXTTRACK: '字幕',\n PIP: '畫中畫',\n MINIPLAYER: '迷妳播放器',\n SCREENSHOT: '截圖',\n LIVE: '正在直播',\n OFF: '關閉',\n MINIPLAYER_DRAG: '點擊按住可拖動視頻',\n AIRPLAY_TIPS: '隔空播放',\n }\n lang['jp'] = {\n HAVE_NOTHING: 'オーディオ/ビデオが準備できているか情報がありません',\n HAVE_METADATA: 'オーディオ/ビデオのメタデータは準備できています',\n HAVE_CURRENT_DATA: '現在の再生位置に関するデータは利用可能ですが、次のフレーム/ミリ秒を再生するのに十分なデータがありません',\n HAVE_FUTURE_DATA: '現在、少なくとも次のフレームのデータが利用可能です',\n HAVE_ENOUGH_DATA: '利用可能なデータは再生を開始するのに十分です',\n NETWORK_EMPTY: 'オーディオ/ビデオが初期化されていません',\n NETWORK_IDLE: 'オーディオ/ビデオはアクティブでリソースが選択されていますが、ネットワークが使用されていません',\n NETWORK_LOADING: 'ブラウザーはデータをダウンロードしています',\n NETWORK_NO_SOURCE: 'オーディオ/ビデオ のソースが見つかりません',\n MEDIA_ERR_ABORTED: 'ユーザーによってフェッチプロセスが中止されました',\n MEDIA_ERR_NETWORK: 'ダウンロード中にエラーが発生しました',\n MEDIA_ERR_DECODE: 'デコード中にエラーが発生しました',\n MEDIA_ERR_SRC_NOT_SUPPORTED: 'オーディオ/ビデオ の形式がサポートされていません',\n REPLAY: 'リプレイ',\n ERROR: 'ネットワークの接続に問題が発生しました',\n PLAY_TIPS: 'プレイ',\n PAUSE_TIPS: '一時停止',\n PLAYNEXT_TIPS: '次をプレイ',\n DOWNLOAD_TIPS: 'ダウンロード',\n ROTATE_TIPS: '回転',\n RELOAD_TIPS: '再読み込み',\n FULLSCREEN_TIPS: \"フルスクリーン\",\n EXITFULLSCREEN_TIPS: 'フルスクリーンを終了',\n CSSFULLSCREEN_TIPS: 'シアターモード',\n EXITCSSFULLSCREEN_TIPS: 'シアターモードを終了',\n TEXTTRACK: '字幕',\n PIP: 'ミニプレーヤー',\n MINIPLAYER: 'ミニプレーヤー',\n SCREENSHOT: 'スクリーンショット',\n LIVE: '生放送',\n OFF: 'オフ',\n MINIPLAYER_DRAG: 'ボタンを押して働画をドラッグする',\n AIRPLAY_TIPS: '隔空放送',\n }\n\n Object.defineProperty(player, 'lang', {\n get: function () {\n if (player.config) {\n return lang[player.config.lang] || lang['en']\n } else {\n return lang['en']\n }\n },\n set: function (value) {\n if (typeOf(value) === 'Object') {\n Object.keys(value).forEach(key => {\n lang[key] = value[key]\n })\n }\n }\n })\n\n}\n\nexport default {\n name: 's_i18n',\n method: s_i18n\n}","\"use strict\";\n\n// ES3 safe\nvar _undefined = void 0;\n\nmodule.exports = function (value) { return value !== _undefined && value !== null; };\n","'use strict';\n\nvar d = require('d')\n , callable = require('es5-ext/object/valid-callable')\n\n , apply = Function.prototype.apply, call = Function.prototype.call\n , create = Object.create, defineProperty = Object.defineProperty\n , defineProperties = Object.defineProperties\n , hasOwnProperty = Object.prototype.hasOwnProperty\n , descriptor = { configurable: true, enumerable: false, writable: true }\n\n , on, once, off, emit, methods, descriptors, base;\n\non = function (type, listener) {\n\tvar data;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) {\n\t\tdata = descriptor.value = create(null);\n\t\tdefineProperty(this, '__ee__', descriptor);\n\t\tdescriptor.value = null;\n\t} else {\n\t\tdata = this.__ee__;\n\t}\n\tif (!data[type]) data[type] = listener;\n\telse if (typeof data[type] === 'object') data[type].push(listener);\n\telse data[type] = [data[type], listener];\n\n\treturn this;\n};\n\nonce = function (type, listener) {\n\tvar once, self;\n\n\tcallable(listener);\n\tself = this;\n\ton.call(this, type, once = function () {\n\t\toff.call(self, type, once);\n\t\tapply.call(listener, this, arguments);\n\t});\n\n\tonce.__eeOnceListener__ = listener;\n\treturn this;\n};\n\noff = function (type, listener) {\n\tvar data, listeners, candidate, i;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return this;\n\tdata = this.__ee__;\n\tif (!data[type]) return this;\n\tlisteners = data[type];\n\n\tif (typeof listeners === 'object') {\n\t\tfor (i = 0; (candidate = listeners[i]); ++i) {\n\t\t\tif ((candidate === listener) ||\n\t\t\t\t\t(candidate.__eeOnceListener__ === listener)) {\n\t\t\t\tif (listeners.length === 2) data[type] = listeners[i ? 0 : 1];\n\t\t\t\telse listeners.splice(i, 1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif ((listeners === listener) ||\n\t\t\t\t(listeners.__eeOnceListener__ === listener)) {\n\t\t\tdelete data[type];\n\t\t}\n\t}\n\n\treturn this;\n};\n\nemit = function (type) {\n\tvar i, l, listener, listeners, args;\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return;\n\tlisteners = this.__ee__[type];\n\tif (!listeners) return;\n\n\tif (typeof listeners === 'object') {\n\t\tl = arguments.length;\n\t\targs = new Array(l - 1);\n\t\tfor (i = 1; i < l; ++i) args[i - 1] = arguments[i];\n\n\t\tlisteners = listeners.slice();\n\t\tfor (i = 0; (listener = listeners[i]); ++i) {\n\t\t\tapply.call(listener, this, args);\n\t\t}\n\t} else {\n\t\tswitch (arguments.length) {\n\t\tcase 1:\n\t\t\tcall.call(listeners, this);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tcall.call(listeners, this, arguments[1]);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tcall.call(listeners, this, arguments[1], arguments[2]);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tl = arguments.length;\n\t\t\targs = new Array(l - 1);\n\t\t\tfor (i = 1; i < l; ++i) {\n\t\t\t\targs[i - 1] = arguments[i];\n\t\t\t}\n\t\t\tapply.call(listeners, this, args);\n\t\t}\n\t}\n};\n\nmethods = {\n\ton: on,\n\tonce: once,\n\toff: off,\n\temit: emit\n};\n\ndescriptors = {\n\ton: d(on),\n\tonce: d(once),\n\toff: d(off),\n\temit: d(emit)\n};\n\nbase = defineProperties({}, descriptors);\n\nmodule.exports = exports = function (o) {\n\treturn (o == null) ? create(base) : defineProperties(Object(o), descriptors);\n};\nexports.methods = methods;\n","'use strict';\n\nvar value = require('es5-ext/object/valid-object')\n\n , hasOwnProperty = Object.prototype.hasOwnProperty;\n\nmodule.exports = function (emitter/*, type*/) {\n\tvar type = arguments[1], data;\n\n\tvalue(emitter);\n\n\tif (type !== undefined) {\n\t\tdata = hasOwnProperty.call(emitter, '__ee__') && emitter.__ee__;\n\t\tif (!data) return;\n\t\tif (data[type]) delete data[type];\n\t\treturn;\n\t}\n\tif (hasOwnProperty.call(emitter, '__ee__')) delete emitter.__ee__;\n};\n","import { hasClass } from '../utils/util'\n\nlet mobile = function () {\n let player = this\n let root = player.root\n let clk = 0; let _click_\n let clickedTime = {\n first: '',\n second: ''\n }\n\n player.onElementTouchend = function (e, element) {\n if(!this.config.closeVideoPreventDefault) {\n e.preventDefault()\n }\n if(!this.config.closeVideoStopPropagation) {\n e.stopPropagation()\n }\n let player = this\n if (hasClass(root, 'xgplayer-inactive')) {\n player.emit('focus')\n } else {\n player.emit('blur')\n }\n if (!player.config.closeVideoTouch && !player.isTouchMove) {\n function onTouch() {\n _click_ = setTimeout(function () {\n if (hasClass(player.root, 'xgplayer-nostart')) {\n return false\n } else if (!player.ended) {\n if (player.paused) {\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n } else {\n player.pause()\n }\n }\n clk = 0\n }, 200)\n }\n if (!player.config.closeVideoClick) {\n clk++\n if (_click_) {\n clearTimeout(_click_)\n }\n if (clk === 1) {\n if(player.config.enableVideoDbltouch) {\n clickedTime.first = new Date()\n } else {\n onTouch()\n }\n } else if (clk === 2) {\n if(player.config.enableVideoDbltouch) {\n clickedTime.second = new Date()\n if (Math.abs(clickedTime.first - clickedTime.second) < 400) {\n // 双击\n onTouch()\n } else {\n clickedTime.first = new Date()\n clk = 1\n }\n } else {\n clk = 0\n }\n } else {\n clk = 0\n }\n }\n }\n }\n\n function onReady (e) {\n player.video.addEventListener('touchend', function (e) {\n player.onElementTouchend(e, player.video)\n })\n player.video.addEventListener('touchstart', () => {\n player.isTouchMove = false\n })\n player.video.addEventListener('touchmove', () => {\n player.isTouchMove = true\n })\n if (player.config.autoplay) {\n player.start()\n }\n }\n player.once('ready', onReady)\n\n function onDestroy () {\n player.off('ready', onReady)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'mobile',\n method: mobile\n}","import { hasClass } from '../utils/util'\n\nlet pc = function () {\n let player = this\n if(!player.controls || !player.video) return\n let controls = player.controls; let root = player.root\n let clk = 0; let _click_\n\n player.onElementClick = function (e, element) {\n if(!this.config.closeVideoPreventDefault) {\n e.preventDefault()\n }\n if(!this.config.closeVideoStopPropagation) {\n e.stopPropagation()\n }\n let player = this\n if (!player.config.closeVideoClick) {\n clk++\n if (_click_) {\n clearTimeout(_click_)\n }\n if (clk === 1) {\n _click_ = setTimeout(function () {\n if (hasClass(player.root, 'xgplayer-nostart')) {\n return false\n } else if (!player.ended) {\n if (player.paused) {\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n } else {\n player.pause()\n }\n }\n clk = 0\n }, 200)\n } else {\n clk = 0\n }\n }\n }\n player.video.addEventListener('click', function (e) { player.onElementClick(e, player.video) }, false)\n\n player.onElementDblclick = function (e, element) {\n if(!this.config.closeVideoPreventDefault) {\n e.preventDefault()\n }\n if(!this.config.closeVideoStopPropagation) {\n e.stopPropagation()\n }\n let player = this\n if (!player.config.closeVideoDblclick) {\n let fullscreen = controls.querySelector('.xgplayer-fullscreen')\n if (fullscreen) {\n let clk\n if (document.createEvent) {\n clk = document.createEvent('Event')\n clk.initEvent('click', true, true)\n } else {\n clk = new Event('click')\n }\n fullscreen.dispatchEvent(clk)\n }\n }\n }\n player.video.addEventListener('dblclick', function (e) { player.onElementDblclick(e, player.video) }, false)\n\n function onMouseEnter () {\n clearTimeout(player.leavePlayerTimer)\n player.emit('focus', player)\n }\n root.addEventListener('mouseenter', onMouseEnter)\n\n function onMouseLeave () {\n if(!player.config.closePlayerBlur) {\n player.leavePlayerTimer = setTimeout(function () {\n player.emit('blur', player)\n }, player.config.leavePlayerTime || 0)\n }\n }\n root.addEventListener('mouseleave', onMouseLeave)\n\n function onControlMouseEnter (e) {\n if (player.userTimer) {\n clearTimeout(player.userTimer)\n }\n }\n controls.addEventListener('mouseenter', onControlMouseEnter)\n\n function onControlMouseLeave (e) {\n if(!player.config.closeControlsBlur) {\n player.emit('focus', player)\n }\n }\n controls.addEventListener('mouseleave', onControlMouseLeave)\n\n function onControlClick (e) {\n e.preventDefault()\n e.stopPropagation()\n }\n controls.addEventListener('click', onControlClick)\n\n function onReady (e) {\n if (player.config.autoplay) {\n player.start()\n }\n }\n player.once('ready', onReady)\n\n function onDestroy () {\n root.removeEventListener('mouseenter', onMouseEnter)\n root.removeEventListener('mouseleave', onMouseLeave)\n player.off('ready', onReady)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'pc',\n method: pc\n}","import { addClass, hasClass, removeClass } from '../utils/util'\n\nlet start = function () {\n let player = this\n let root = player.root\n\n function onCanPlay () {\n player.off('canplay', onCanPlay)\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }\n\n function onStartBtnClick () {\n if (hasClass(root, 'xgplayer-nostart')) {\n removeClass(root, 'xgplayer-nostart') // for ie quick switch\n addClass(root, 'xgplayer-is-enter')\n\n if(typeof root.contains === 'function') {\n if((player.video && player.video.nodeType === 1 && !root.contains(player.video)) || (player.video && player.video.nodeType !== 1 && player.video.mediaSource === undefined)) {\n player.once('canplay', onCanPlay)\n player.start()\n } else {\n onCanPlay()\n }\n } else {\n if((player.video && player.video.nodeType === 1 && !root.querySelector(this.videoConfig.mediaType)) || (player.video && player.video.nodeType !== 1 && player.video.mediaSource === undefined)) {\n player.once('canplay', onCanPlay)\n player.start()\n } else {\n onCanPlay()\n }\n }\n } else {\n if (player.paused) {\n removeClass(root, 'xgplayer-nostart xgplayer-isloading')\n setTimeout(() => {\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n }, 10)\n }\n }\n }\n player.on('startBtnClick', onStartBtnClick)\n\n function onDestroy () {\n player.off('startBtnClick', onStartBtnClick)\n player.off('canplay', onCanPlay)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'start',\n method: start\n}","import { createDom, addClass, removeClass, isWeiXin, isUc } from '../../utils/util'\nimport StartPlayIcon from '../assets/startPlay.svg'\nimport StartPauseIcon from '../assets/startPause.svg'\nimport '../style/controls/start.scss'\n\nlet s_start = function () {\n let player = this\n let root = player.root\n let btn = createDom('xg-start', `<div class=\"xgplayer-icon-play\">${StartPlayIcon}</div>\n <div class=\"xgplayer-icon-pause\">${StartPauseIcon}</div>`, {}, 'xgplayer-start')\n function onPlayerReady(player) {\n addClass(player.root, 'xgplayer-skin-default')\n if (player.config) {\n player.config.autoplay && !isWeiXin() && !isUc() && addClass(player.root, 'xgplayer-is-enter')\n if (player.config.lang && player.config.lang === 'en') {\n addClass(player.root, 'xgplayer-lang-is-en')\n } else if (player.config.lang === 'jp') {\n addClass(player.root, 'xgplayer-lang-is-jp')\n }\n if(!player.config.enableContextmenu) {\n player.video.addEventListener('contextmenu', e => {\n e.preventDefault()\n e.stopPropagation()\n })\n }\n }\n }\n\n if(player.config && player.config.hideStartBtn) {\n addClass(root, 'xgplayer-start-hide')\n }\n\n if (player.isReady) {\n root.appendChild(btn)\n onPlayerReady(player)\n } else {\n player.once('ready', () => {\n root.appendChild(btn)\n onPlayerReady(player)\n });\n }\n\n player.once('autoplay was prevented', () => {\n removeClass(player.root, 'xgplayer-is-enter')\n addClass(player.root, 'xgplayer-nostart')\n })\n\n player.once('canplay', () => {\n removeClass(player.root, 'xgplayer-is-enter')\n })\n\n btn.onclick = e => {\n e.preventDefault()\n e.stopPropagation()\n player.userGestureTrigEvent('startBtnClick')\n }\n}\n\nexport default {\n name: 's_start',\n method: s_start\n}","\"use strict\";\n\nvar isValue = require(\"type/value/is\")\n , isPlainFunction = require(\"type/plain-function/is\")\n , assign = require(\"es5-ext/object/assign\")\n , normalizeOpts = require(\"es5-ext/object/normalize-options\")\n , contains = require(\"es5-ext/string/#/contains\");\n\nvar d = (module.exports = function (dscr, value/*, options*/) {\n\tvar c, e, w, options, desc;\n\tif (arguments.length < 2 || typeof dscr !== \"string\") {\n\t\toptions = value;\n\t\tvalue = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[2];\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t\tw = contains.call(dscr, \"w\");\n\t} else {\n\t\tc = w = true;\n\t\te = false;\n\t}\n\n\tdesc = { value: value, configurable: c, enumerable: e, writable: w };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n});\n\nd.gs = function (dscr, get, set/*, options*/) {\n\tvar c, e, options, desc;\n\tif (typeof dscr !== \"string\") {\n\t\toptions = set;\n\t\tset = get;\n\t\tget = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[3];\n\t}\n\tif (!isValue(get)) {\n\t\tget = undefined;\n\t} else if (!isPlainFunction(get)) {\n\t\toptions = get;\n\t\tget = set = undefined;\n\t} else if (!isValue(set)) {\n\t\tset = undefined;\n\t} else if (!isPlainFunction(set)) {\n\t\toptions = set;\n\t\tset = undefined;\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t} else {\n\t\tc = true;\n\t\te = false;\n\t}\n\n\tdesc = { get: get, set: set, configurable: c, enumerable: e };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n};\n","\"use strict\";\n\nvar isFunction = require(\"../function/is\");\n\nvar classRe = /^\\s*class[\\s{/}]/, functionToString = Function.prototype.toString;\n\nmodule.exports = function (value) {\n\tif (!isFunction(value)) return false;\n\tif (classRe.test(functionToString.call(value))) return false;\n\treturn true;\n};\n","\"use strict\";\n\nvar isPrototype = require(\"../prototype/is\");\n\nmodule.exports = function (value) {\n\tif (typeof value !== \"function\") return false;\n\n\tif (!hasOwnProperty.call(value, \"length\")) return false;\n\n\ttry {\n\t\tif (typeof value.length !== \"number\") return false;\n\t\tif (typeof value.call !== \"function\") return false;\n\t\tif (typeof value.apply !== \"function\") return false;\n\t} catch (error) {\n\t\treturn false;\n\t}\n\n\treturn !isPrototype(value);\n};\n","\"use strict\";\n\nvar isObject = require(\"../object/is\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) return false;\n\ttry {\n\t\tif (!value.constructor) return false;\n\t\treturn value.constructor.prototype === value;\n\t} catch (error) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"../value/is\");\n\n// prettier-ignore\nvar possibleTypes = { \"object\": true, \"function\": true, \"undefined\": true /* document.all */ };\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) return false;\n\treturn hasOwnProperty.call(possibleTypes, typeof value);\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.assign : require(\"./shim\");\n","\"use strict\";\n\nmodule.exports = function () {\n\tvar assign = Object.assign, obj;\n\tif (typeof assign !== \"function\") return false;\n\tobj = { foo: \"raz\" };\n\tassign(obj, { bar: \"dwa\" }, { trzy: \"trzy\" });\n\treturn obj.foo + obj.bar + obj.trzy === \"razdwatrzy\";\n};\n","\"use strict\";\n\nvar keys = require(\"../keys\")\n , value = require(\"../valid-value\")\n , max = Math.max;\n\nmodule.exports = function (dest, src /*, …srcn*/) {\n\tvar error, i, length = max(arguments.length, 2), assign;\n\tdest = Object(value(dest));\n\tassign = function (key) {\n\t\ttry {\n\t\t\tdest[key] = src[key];\n\t\t} catch (e) {\n\t\t\tif (!error) error = e;\n\t\t}\n\t};\n\tfor (i = 1; i < length; ++i) {\n\t\tsrc = arguments[i];\n\t\tkeys(src).forEach(assign);\n\t}\n\tif (error !== undefined) throw error;\n\treturn dest;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.keys : require(\"./shim\");\n","\"use strict\";\n\nmodule.exports = function () {\n\ttry {\n\t\tObject.keys(\"primitive\");\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"../is-value\");\n\nvar keys = Object.keys;\n\nmodule.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };\n","\"use strict\";\n\n// eslint-disable-next-line no-empty-function\nmodule.exports = function () {};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) throw new TypeError(\"Cannot use null or undefined\");\n\treturn value;\n};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nvar forEach = Array.prototype.forEach, create = Object.create;\n\nvar process = function (src, obj) {\n\tvar key;\n\tfor (key in src) obj[key] = src[key];\n};\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function (opts1 /*, …options*/) {\n\tvar result = create(null);\n\tforEach.call(arguments, function (options) {\n\t\tif (!isValue(options)) return;\n\t\tprocess(Object(options), result);\n\t});\n\treturn result;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? String.prototype.contains : require(\"./shim\");\n","\"use strict\";\n\nvar str = \"razdwatrzy\";\n\nmodule.exports = function () {\n\tif (typeof str.contains !== \"function\") return false;\n\treturn str.contains(\"dwa\") === true && str.contains(\"foo\") === false;\n};\n","\"use strict\";\n\nvar indexOf = String.prototype.indexOf;\n\nmodule.exports = function (searchString /*, position*/) {\n\treturn indexOf.call(this, searchString, arguments[1]) > -1;\n};\n","\"use strict\";\n\nmodule.exports = function (fn) {\n\tif (typeof fn !== \"function\") throw new TypeError(fn + \" is not a function\");\n\treturn fn;\n};\n","\"use strict\";\n\nvar isObject = require(\"./is-object\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) throw new TypeError(value + \" is not an Object\");\n\treturn value;\n};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nvar map = { function: true, object: true };\n\nmodule.exports = function (value) { return (isValue(value) && map[typeof value]) || false; };\n","\nvar content = require(\"!!../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../node_modules/postcss-loader/lib/index.js!../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./index.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../node_modules/postcss-loader/lib/index.js!../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./index.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../node_modules/postcss-loader/lib/index.js!../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./index.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default{background:#000;width:100%;height:100%;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;-ms-user-select:none}.xgplayer-skin-default *{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;white-space:normal;word-wrap:normal}.xgplayer-skin-default.xgplayer-rotate-fullscreen{position:absolute;top:0;left:100%;bottom:0;right:0;height:100vw!important;width:100vh!important;-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.xgplayer-skin-default.xgplayer-is-fullscreen{width:100%!important;height:100%!important;padding-top:0!important;z-index:9999}.xgplayer-skin-default.xgplayer-is-fullscreen.xgplayer-inactive{cursor:none}.xgplayer-skin-default video{width:100%;height:100%;outline:none}.xgplayer-skin-default .xgplayer-none{display:none}@-webkit-keyframes loadingRotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loadingRotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes loadingDashOffset{0%{stroke-dashoffset:236}to{stroke-dashoffset:0}}@keyframes loadingDashOffset{0%{stroke-dashoffset:236}to{stroke-dashoffset:0}}.xgplayer-skin-default .xgplayer-controls{display:-webkit-flex;display:-moz-box;display:flex;position:absolute;bottom:0;left:0;right:0;height:40px;background-image:linear-gradient(180deg,transparent,rgba(0,0,0,.37),rgba(0,0,0,.75),rgba(0,0,0,.75));z-index:10}.xgplayer-skin-default.xgplayer-inactive .xgplayer-controls,.xgplayer-skin-default.xgplayer-is-live .xgplayer-controls .xgplayer-progress,.xgplayer-skin-default.xgplayer-is-live .xgplayer-controls .xgplayer-time,.xgplayer-skin-default.xgplayer-no-controls .xgplayer-controls,.xgplayer-skin-default.xgplayer-nostart .xgplayer-controls{display:none}.xgplayer-skin-default.xgplayer-is-live .xgplayer-controls .xgplayer-live{display:block}.xgplayer-skin-default .xgplayer-live{display:block;font-size:12px;color:#fff;line-height:40px;-webkit-order:1;-moz-box-ordinal-group:2;order:1}.xgplayer-skin-default .xgplayer-icon{display:block;width:40px;height:40px;overflow:hidden;fill:#fff}.xgplayer-skin-default .xgplayer-icon svg{position:absolute}.xgplayer-skin-default .xgplayer-tips{background:rgba(0,0,0,.54);border-radius:1px;display:none;position:absolute;font-family:PingFangSC-Regular;font-size:11px;color:#fff;padding:2px 4px;text-align:center;top:-30px;left:50%;margin-left:-16px;width:auto;white-space:nowrap}.xgplayer-skin-default.xgplayer-mobile .xgplayer-tips{display:none!important}.xgplayer-skin-default .xgplayer-screen-container{display:block;width:100%}\", \"\"]);\n\n// exports\n","\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n // get current location\n var location = typeof window !== \"undefined\" && window.location;\n\n if (!location) {\n throw new Error(\"fixUrls requires window.location\");\n }\n\n\t// blank or null?\n\tif (!css || typeof css !== \"string\") {\n\t return css;\n }\n\n var baseUrl = location.protocol + \"//\" + location.host;\n var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\( = Match on the word \"url\" with any whitespace after it and then a parens\n\t ( = Start a capturing group\n\t (?: = Start a non-capturing group\n\t [^)(] = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t (?: = Start another non-capturing groups\n\t [^)(]+ = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t [^)(]* = Match anything that isn't a parentheses\n\t \\) = Match a end parentheses\n\t ) = End Group\n *\\) = Match anything and then a close parens\n ) = Close non-capturing group\n * = Match anything\n ) = Close capturing group\n\t \\) = Match a close parens\n\n\t /gi = Get all matches, not the first. Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\"(.*)\"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(unquotedOrigUrl)) {\n\t\t return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\"//\") === 0) {\n\t\t \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \"url(\" + JSON.stringify(newUrl) + \")\";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n","\nvar content = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./start.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./start.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./start.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-start{border-radius:50%;display:inline-block;width:70px;height:70px;background:rgba(0,0,0,.38);overflow:hidden;text-align:center;line-height:70px;vertical-align:middle;position:absolute;left:50%;top:50%;z-index:115;margin:-35px auto auto -35px;cursor:pointer}.xgplayer-skin-default .xgplayer-start div{position:absolute}.xgplayer-skin-default .xgplayer-start div svg{fill:hsla(0,0%,100%,.7)}.xgplayer-skin-default .xgplayer-start .xgplayer-icon-play{display:block}.xgplayer-skin-default .xgplayer-start .xgplayer-icon-pause{display:none}.xgplayer-skin-default .xgplayer-start:hover{opacity:.85}.xgplayer-skin-default.xgplayer-pause.xgplayer-start-hide .xgplayer-start,.xgplayer-skin-default.xgplayer-playing .xgplayer-start,.xgplayer-skin-default.xgplayer-playing .xgplayer-start .xgplayer-icon-play,.xgplayer-skin-default.xgplayer-start-hide .xgplayer-start{display:none}.xgplayer-skin-default.xgplayer-playing .xgplayer-start .xgplayer-icon-pause{display:block}.xgplayer-skin-default.xgplayer-pause .xgplayer-start{display:inline-block}.xgplayer-skin-default.xgplayer-pause .xgplayer-start .xgplayer-icon-play{display:block}.xgplayer-skin-default.xgplayer-is-replay .xgplayer-start,.xgplayer-skin-default.xgplayer-pause .xgplayer-start .xgplayer-icon-pause{display:none}.xgplayer-skin-default.xgplayer-is-replay .xgplayer-start .xgplayer-icon-play{display:block}.xgplayer-skin-default.xgplayer-is-replay .xgplayer-start .xgplayer-icon-pause{display:none}\", \"\"]);\n\n// exports\n","import { hasClass, addClass, removeClass, PresentationMode, checkWebkitSetPresentationMode } from '../utils/util'\n\nlet fullscreen = function () {\n let player = this\n let root = player.root\n\n function onFullscreenBtnClick () {\n if (player.config.rotateFullscreen) {\n if (hasClass(root, 'xgplayer-rotate-fullscreen')) {\n player.exitRotateFullscreen()\n } else {\n player.getRotateFullscreen()\n }\n } else {\n if (hasClass(root, 'xgplayer-is-fullscreen')) {\n player.exitFullscreen(root)\n } else {\n player.getFullscreen(root)\n }\n }\n }\n player.on('fullscreenBtnClick', onFullscreenBtnClick)\n\n function onFullscreenChange () {\n let fullscreenEl = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement\n if (fullscreenEl && fullscreenEl === root) {\n addClass(root, 'xgplayer-is-fullscreen')\n player.emit('requestFullscreen')\n } else if (hasClass(root, 'xgplayer-is-fullscreen')) {\n removeClass(root, 'xgplayer-is-fullscreen')\n player.emit('exitFullscreen')\n }\n if (player.danmu && typeof player.danmu.resize === 'function') {\n player.danmu.resize()\n }\n };\n ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'].forEach(item => {\n document.addEventListener(item, onFullscreenChange)\n })\n\n player.video.addEventListener('webkitbeginfullscreen', function () {\n addClass(root, 'xgplayer-is-fullscreen')\n player.emit('requestFullscreen')\n })\n\n player.video.addEventListener('webkitendfullscreen', function () {\n removeClass(root, 'xgplayer-is-fullscreen')\n player.emit('exitFullscreen')\n })\n\n function onWebkitpresentationmodechanged (e) {\n const mode = player.video.webkitPresentationMode\n // 非全屏模式 退出全屏\n if (mode !== PresentationMode.FULLSCREEN) {\n removeClass(root, 'xgplayer-is-fullscreen')\n player.emit('exitFullscreen')\n }\n }\n\n checkWebkitSetPresentationMode(player.video) &&\n player.video.addEventListener('webkitpresentationmodechanged', onWebkitpresentationmodechanged)\n\n function onDestroy () {\n player.off('fullscreenBtnClick', onFullscreenBtnClick);\n ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'].forEach(item => {\n document.removeEventListener(item, onFullscreenChange)\n })\n\n checkWebkitSetPresentationMode(player.video) &&\n player.video.removeEventListener('webkitpresentationmodechanged', onWebkitpresentationmodechanged)\n\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n\n player.getFullscreen = function (el) {\n let player = this\n if (el.requestFullscreen) {\n let fullscreenPromise = el.requestFullscreen()\n if (fullscreenPromise) {\n fullscreenPromise.catch(function () {\n player.emit('fullscreen error')\n })\n }\n } else if (el.mozRequestFullScreen) {\n el.mozRequestFullScreen()\n } else if (el.webkitRequestFullscreen) {\n el.webkitRequestFullscreen(window.Element.ALLOW_KEYBOARD_INPUT)\n } else if (player.video.webkitSupportsFullscreen) {\n player.video.webkitEnterFullscreen()\n } else if (el.msRequestFullscreen) {\n el.msRequestFullscreen()\n } else {\n addClass(el, 'xgplayer-is-cssfullscreen')\n }\n }\n\n player.exitFullscreen = function (el) {\n if (document.exitFullscreen) {\n document.exitFullscreen()\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen()\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen()\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen()\n }\n removeClass(el, 'xgplayer-is-cssfullscreen')\n }\n\n player.getRotateFullscreen = function () {\n let player = this\n document.documentElement.style.width = '100%'\n document.documentElement.style.height = '100%'\n if (player.config.fluid) {\n player.root.style['padding-top'] = ''\n player.root.style['max-width'] = 'unset'\n }\n if (player.root && !hasClass(player.root, 'xgplayer-rotate-fullscreen')) {\n addClass(player.root, 'xgplayer-rotate-fullscreen')\n }\n player.emit('getRotateFullscreen')\n }\n\n player.exitRotateFullscreen = function () {\n let player = this\n document.documentElement.style.width = 'unset'\n document.documentElement.style.height = 'unset'\n if (player.config.fluid) {\n player.root.style['width'] = '100%'\n player.root.style['height'] = '0'\n player.root.style['padding-top'] = `${player.config.height * 100 / player.config.width}%`\n player.root.style['max-width'] = '100%'\n }\n if (player.root && hasClass(player.root, 'xgplayer-rotate-fullscreen')) {\n removeClass(player.root, 'xgplayer-rotate-fullscreen')\n }\n player.emit('exitRotateFullscreen')\n }\n}\n\nexport default {\n name: 'fullscreen',\n method: fullscreen\n}\n","import { hasClass } from '../utils/util'\n\nlet play = function () {\n let player = this\n\n function onPlayBtnClick () {\n if (!player.config.allowPlayAfterEnded && player.ended) {\n return\n }\n if(hasClass(player.root, 'xgplayer-nostart')) {\n player.start()\n }\n if (player.paused) {\n let playPromise = player.play()\n if (playPromise !== undefined && playPromise) {\n playPromise.catch(err => {})\n }\n } else {\n player.pause()\n }\n }\n player.on('playBtnClick', onPlayBtnClick)\n\n function onDestroy () {\n player.off('playBtnClick', onPlayBtnClick)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'play',\n method: play\n}","import { addClass, removeClass } from '../utils/util'\n\nlet replay = function () {\n let player = this\n let root = player.root\n\n function onReplayBtnClick () {\n removeClass(root, 'xgplayer-is-replay')\n player.replay()\n }\n player.on('replayBtnClick', onReplayBtnClick)\n\n function onEnded () {\n if (!player.config.loop) {\n addClass(root, 'xgplayer-is-replay')\n }\n }\n player.on('ended', onEnded)\n\n function onDestroy () {\n player.off('replayBtnClick', onReplayBtnClick)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 'replay',\n method: replay\n}","import { createDom } from '../../utils/util'\nimport '../style/controls/poster.scss'\n\nlet s_poster = function () {\n let player = this\n let root = player.root\n if (!player.config.poster) {\n return\n }\n let poster = createDom('xg-poster', '', {}, 'xgplayer-poster')\n poster.style.backgroundImage = `url(${player.config.poster})`\n root.appendChild(poster)\n}\n\nexport default {\n name: 's_poster',\n method: s_poster\n}","import { createDom } from '../../utils/util'\nimport '../style/controls/placeholder.scss'\n\nlet s_flex = function () {\n let player = this\n let playceholder = createDom('xg-placeholder', '', {}, 'xgplayer-placeholder')\n player.controls.appendChild(playceholder)\n}\n\nexport default {\n name: 's_flex',\n method: s_flex\n}","import { createDom, addClass, removeClass, hasClass, toggleClass, typeOf, event, format, findDom } from '../../utils/util'\r\nimport sniffer from '../../utils/sniffer'\r\nimport '../style/controls/progress.scss'\r\n\r\nconst isRotateFullscreen = (player) => {\r\n return hasClass(player.root, 'xgplayer-rotate-fullscreen')\r\n}\r\n\r\nlet s_progress = function () {\r\n let player = this\r\n let container = createDom('xg-progress', `<xg-outer class=\"xgplayer-progress-outer\">\r\n <xg-cache class=\"xgplayer-progress-cache\"></xg-cache>\r\n <xg-played class=\"xgplayer-progress-played\">\r\n <xg-progress-btn class=\"xgplayer-progress-btn\"></xg-progress-btn>\r\n <xg-point class=\"xgplayer-progress-point xgplayer-tips\"></xg-point>\r\n <xg-thumbnail class=\"xgplayer-progress-thumbnail xgplayer-tips\"></xg-thumbnail>\r\n </xg-played>\r\n </xg-outer>`, {tabindex: 1}, 'xgplayer-progress')\r\n let containerWidth\r\n player.controls.appendChild(container)\r\n let progress = container.querySelector('.xgplayer-progress-played')\r\n let outer = container.querySelector('.xgplayer-progress-outer')\r\n let cache = container.querySelector('.xgplayer-progress-cache')\r\n let point = container.querySelector('.xgplayer-progress-point')\r\n let thumbnail = container.querySelector('.xgplayer-progress-thumbnail')\r\n player.dotArr = {}\r\n function dotEvent (dotItem, text) {\r\n dotItem.addEventListener('mouseenter', function (e) {\r\n if (text) {\r\n addClass(dotItem, 'xgplayer-progress-dot-show')\r\n addClass(container, 'xgplayer-progress-dot-active')\r\n }\r\n })\r\n dotItem.addEventListener('mouseleave', function (e) {\r\n if (text) {\r\n removeClass(dotItem, 'xgplayer-progress-dot-show')\r\n removeClass(container, 'xgplayer-progress-dot-active')\r\n }\r\n })\r\n dotItem.addEventListener('touchend', function (e) {\r\n // e.preventDefault()\r\n e.stopPropagation()\r\n if (text) {\r\n if (!hasClass(dotItem, 'xgplayer-progress-dot-show')) {\r\n Object.keys(player.dotArr).forEach(function (key) {\r\n if (player.dotArr[key]) {\r\n removeClass(player.dotArr[key], 'xgplayer-progress-dot-show')\r\n }\r\n })\r\n }\r\n toggleClass(dotItem, 'xgplayer-progress-dot-show')\r\n toggleClass(container, 'xgplayer-progress-dot-active')\r\n }\r\n })\r\n }\r\n function onCanplay () {\r\n if (player.config.progressDot && typeOf(player.config.progressDot) === 'Array') {\r\n player.config.progressDot.forEach(item => {\r\n if (item.time >= 0 && item.time <= player.duration) {\r\n let dot = createDom('xg-progress-dot', item.text ? `<span class=\"xgplayer-progress-tip\">${item.text}</span>` : '', {}, 'xgplayer-progress-dot')\r\n dot.style.left = (item.time / player.duration) * 100 + '%'\r\n if (item.duration >= 0) {\r\n dot.style.width = (Math.min(item.duration, player.duration - item.time) / player.duration) * 100 + '%'\r\n }\r\n if(item.style) {\r\n for(let k in item.style) {\r\n dot.style[k] = item.style[k]\r\n }\r\n }\r\n outer.appendChild(dot)\r\n player.dotArr[item.time] = dot\r\n dotEvent(dot, item.text)\r\n }\r\n })\r\n }\r\n }\r\n player.once('canplay', onCanplay)\r\n player.addProgressDot = function (time, text, duration, style) {\r\n if (player.dotArr[time]) {\r\n return\r\n }\r\n if (time >= 0 && time <= player.duration) {\r\n let dot = createDom('xg-progress-dot', text ? `<span class=\"xgplayer-progress-tip\">${text}</span>` : '', {}, 'xgplayer-progress-dot')\r\n dot.style.left = (time / player.duration) * 100 + '%'\r\n if (duration >= 0) {\r\n dot.style.width = (Math.min(duration, player.duration - time) / player.duration) * 100 + '%'\r\n }\r\n if(style) {\r\n for(let k in style) {\r\n dot.style[k] = style[k]\r\n }\r\n }\r\n outer.appendChild(dot)\r\n player.dotArr[time] = dot\r\n dotEvent(dot, text)\r\n }\r\n }\r\n player.removeProgressDot = function (time) {\r\n if (time >= 0 && time <= player.duration && player.dotArr[time]) {\r\n let dot = player.dotArr[time]\r\n dot.parentNode.removeChild(dot)\r\n dot = null\r\n player.dotArr[time] = null\r\n }\r\n }\r\n player.removeAllProgressDot = function () {\r\n Object.keys(player.dotArr).forEach(function (key) {\r\n if (player.dotArr[key]) {\r\n let dot = player.dotArr[key]\r\n dot.parentNode.removeChild(dot)\r\n dot = null\r\n player.dotArr[key] = null\r\n }\r\n })\r\n }\r\n let tnailPicNum = 0\r\n let tnailWidth = 0\r\n let tnailHeight = 0\r\n let tnailCol = 0\r\n let tnailRow = 0\r\n let interval = 0\r\n let tnailUrls = []\r\n let coverPreviewContainer, coverPreviewPoint, coverPreviewOuter\r\n let onLoadedmetadata = function() {\r\n if (player.config.thumbnail) {\r\n if(player.config.thumbnail.isShowCoverPreview && !coverPreviewContainer) {\r\n progress.removeChild(thumbnail)\r\n coverPreviewContainer = createDom('xg-coverpreview', `<xg-outer class=\"xgplayer-coverpreview-outer\">\r\n <xg-thumbnail class=\"xgplayer-coverpreview-thumbnail\"></xg-thumbnail>\r\n <xg-point class=\"xgplayer-coverpreview-point\"></xg-point>\r\n </xg-outer>`, {tabindex: 1}, 'xgplayer-coverpreview')\r\n coverPreviewOuter = coverPreviewContainer.querySelector('.xgplayer-coverpreview-outer')\r\n coverPreviewPoint = coverPreviewContainer.querySelector('.xgplayer-coverpreview-point')\r\n thumbnail = coverPreviewContainer.querySelector('.xgplayer-coverpreview-thumbnail')\r\n player.root.appendChild(coverPreviewContainer)\r\n }\r\n tnailPicNum = player.config.thumbnail.pic_num\r\n tnailWidth = player.config.thumbnail.width\r\n tnailHeight = player.config.thumbnail.height\r\n tnailCol = player.config.thumbnail.col\r\n tnailRow = player.config.thumbnail.row\r\n tnailUrls = player.config.thumbnail.urls\r\n thumbnail.style.width = `${tnailWidth}px`\r\n thumbnail.style.height = `${tnailHeight}px`\r\n };\r\n };\r\n player.on('loadedmetadata', onLoadedmetadata);\r\n\r\n if (typeof player.config.disableSwipeHandler === 'function' && typeof player.config.enableSwipeHandler === 'function') {\r\n player.root.addEventListener('touchmove', e => {\r\n e.preventDefault();\r\n // e.stopPropagation();\r\n if (!player.disableSwipe) {\r\n player.disableSwipe = true\r\n player.config.disableSwipeHandler.call(player);\r\n }\r\n });\r\n player.root.addEventListener('touchstart', e => {\r\n // e.preventDefault();\r\n player.disableSwipe = true\r\n player.config.disableSwipeHandler.call(player);\r\n });\r\n player.root.addEventListener('touchend', e => {\r\n // e.preventDefault();\r\n player.disableSwipe = false\r\n player.config.enableSwipeHandler.call(player);\r\n });\r\n };\r\n let events = ['touchstart', 'mousedown'];\r\n if (sniffer.device === 'mobile') {\r\n // 解决在移动端触发多次seeking问题\r\n events.pop()\r\n }\r\n events.forEach(item => {\r\n container.addEventListener(item, function (e) {\r\n if (player.config.disableProgress) return;\r\n // e.preventDefault()\r\n e.stopPropagation()\r\n event(e)\r\n if (e._target === point || (!player.config.allowSeekAfterEnded && player.ended)) {\r\n return true\r\n }\r\n\r\n container.focus()\r\n let {left} = progress.getBoundingClientRect()\r\n\r\n const isRotate = isRotateFullscreen(player)\r\n if (isRotate) {\r\n left = progress.getBoundingClientRect().top\r\n containerWidth = container.getBoundingClientRect().height\r\n } else {\r\n containerWidth = container.getBoundingClientRect().width\r\n left = progress.getBoundingClientRect().left\r\n }\r\n\r\n let move = function (e) {\r\n // e.preventDefault()\r\n e.stopPropagation()\r\n event(e)\r\n player.isProgressMoving = true\r\n let w = (isRotate ? e.clientY : e.clientX) - left\r\n if (w > containerWidth) {\r\n w = containerWidth\r\n }\r\n let now = w / containerWidth * player.duration\r\n if(now < 0) now = 0\r\n if(player.config.allowSeekPlayed && (Number(now).toFixed(1) > player.maxPlayedTime)) {}\r\n else {\r\n progress.style.width = `${w * 100 / containerWidth}%`\r\n\r\n if (player.videoConfig.mediaType === 'video' && !player.dash && !player.config.closeMoveSeek) {\r\n console.log('trigger touchmove')\r\n player.currentTime = Number(now).toFixed(1)\r\n } else {\r\n let time = findDom(player.controls, '.xgplayer-time')\r\n if (time) {\r\n time.innerHTML = `<span class=\"xgplayer-time-current\">${format(now || 0)}</span><span>${format(player.duration)}</span>`\r\n }\r\n }\r\n }\r\n\r\n if(player.config.thumbnail && player.config.thumbnail.isShowCoverPreview) {\r\n coverPreviewPoint.innerHTML = `<span>${format(now)}</span> / ${format(player.duration || 0)}`\r\n\r\n interval = player.duration / tnailPicNum\r\n let index = Math.floor(now / interval)\r\n thumbnail.style.backgroundImage = `url(${tnailUrls[Math.ceil((index + 1) / (tnailCol * tnailRow)) - 1]})`\r\n let indexInPage = index + 1 - (tnailCol * tnailRow) * (Math.ceil((index + 1) / (tnailCol * tnailRow)) - 1)\r\n let tnaiRowIndex = Math.ceil(indexInPage / tnailRow) - 1\r\n let tnaiColIndex = indexInPage - tnaiRowIndex * tnailRow - 1\r\n thumbnail.style['background-position'] = `-${tnaiColIndex * tnailWidth}px -${tnaiRowIndex * tnailHeight}px`\r\n coverPreviewContainer.style.display = 'block'\r\n }\r\n \r\n player.emit('focus')\r\n }\r\n let up = function (e) {\r\n console.log('up event', e)\r\n // e.preventDefault()\r\n e.stopPropagation()\r\n event(e)\r\n window.removeEventListener('mousemove', move)\r\n window.removeEventListener('touchmove', move, { passive: false })\r\n window.removeEventListener('mouseup', up)\r\n window.removeEventListener('touchend', up)\r\n if(sniffer.browser.indexOf('ie') < 0) {\r\n container.blur()\r\n }\r\n if (!player.isProgressMoving || (player.videoConfig && player.videoConfig.mediaType === 'audio') || player.dash || player.config.closeMoveSeek) {\r\n let w = (isRotate ? e.clientY : e.clientX) - left\r\n if (w > containerWidth) {\r\n w = containerWidth\r\n }\r\n let now = w / containerWidth * player.duration\r\n if(now < 0) now = 0\r\n if(player.config.allowSeekPlayed && (Number(now).toFixed(1) > player.maxPlayedTime)) {}\r\n else {\r\n progress.style.width = `${w * 100 / containerWidth}%`\r\n console.warn('trigger touchup')\r\n player.currentTime = Number(now).toFixed(1)\r\n }\r\n }\r\n if(player.config.thumbnail && player.config.thumbnail.isShowCoverPreview) {\r\n coverPreviewContainer.style.display = 'none'\r\n }\r\n player.emit('focus')\r\n player.isProgressMoving = false\r\n }\r\n // if (item === 'touchstart') {\r\n window.addEventListener('touchmove', move, { passive: false })\r\n window.addEventListener('touchend', up)\r\n // } else {\r\n window.addEventListener('mousemove', move)\r\n // console.warn('add envent mouseup')\r\n window.addEventListener('mouseup', up)\r\n // }\r\n return true\r\n })\r\n })\r\n\r\n container.addEventListener('mouseenter', function (e) {\r\n if (!player.config.allowSeekAfterEnded && player.ended) {\r\n return true\r\n }\r\n const isRotate = isRotateFullscreen(player)\r\n let containerLeft = isRotate ? container.getBoundingClientRect().top : container.getBoundingClientRect().left\r\n let containerWidth = isRotate ? container.getBoundingClientRect().height : container.getBoundingClientRect().width\r\n\r\n let compute = function (e) {\r\n let now = ((isRotate ? e.clientY : e.clientX) - containerLeft) / containerWidth * player.duration\r\n now = now < 0 ? 0 : now\r\n point.textContent = format(now)\r\n let pointWidth = point.getBoundingClientRect().width\r\n if (player.config.thumbnail && !player.config.thumbnail.isShowCoverPreview) {\r\n interval = player.duration / tnailPicNum\r\n let index = Math.floor(now / interval)\r\n thumbnail.style.backgroundImage = `url(${tnailUrls[Math.ceil((index + 1) / (tnailCol * tnailRow)) - 1]})`\r\n let indexInPage = index + 1 - (tnailCol * tnailRow) * (Math.ceil((index + 1) / (tnailCol * tnailRow)) - 1)\r\n let tnaiRowIndex = Math.ceil(indexInPage / tnailRow) - 1\r\n let tnaiColIndex = indexInPage - tnaiRowIndex * tnailRow - 1\r\n thumbnail.style['background-position'] = `-${tnaiColIndex * tnailWidth}px -${tnaiRowIndex * tnailHeight}px`\r\n let left = (isRotate ? e.clientY : e.clientX) - containerLeft - tnailWidth / 2\r\n left = left > 0 ? left : 0\r\n left = left < containerWidth - tnailWidth ? left : containerWidth - tnailWidth\r\n thumbnail.style.left = `${left}px`\r\n thumbnail.style.top = `${-10 - tnailHeight}px`\r\n thumbnail.style.display = 'block'\r\n point.style.left = `${left + tnailWidth / 2 - pointWidth / 2}px`\r\n } else {\r\n let left = e.clientX - containerLeft - pointWidth / 2\r\n left = left > 0 ? left : 0\r\n left = left > containerWidth - pointWidth ? containerWidth - pointWidth : left\r\n point.style.left = `${left}px`\r\n }\r\n if (hasClass(container, 'xgplayer-progress-dot-active')) {\r\n point.style.display = 'none'\r\n } else {\r\n point.style.display = 'block'\r\n }\r\n }\r\n let move = function (e) {\r\n compute(e)\r\n }\r\n let leave = function (e) {\r\n container.removeEventListener('mousemove', move, false)\r\n container.removeEventListener('mouseleave', leave, false)\r\n compute(e)\r\n point.style.display = 'none'\r\n if (player.config.thumbnail && !player.config.thumbnail.isShowCoverPreview) {\r\n thumbnail.style.display = 'none'\r\n }\r\n }\r\n container.addEventListener('mousemove', move, false)\r\n container.addEventListener('mouseleave', leave, false)\r\n compute(e)\r\n }, false)\r\n\r\n // let lastBtnLeft = false\r\n let onTimeupdate = function () {\r\n if(player.maxPlayedTime === undefined) player.maxPlayedTime = 0\r\n if(player.maxPlayedTime < player.currentTime) player.maxPlayedTime = player.currentTime\r\n if (!containerWidth && container) {\r\n containerWidth = container.getBoundingClientRect().width\r\n }\r\n if (!player.isProgressMoving && !player.isSeeking && !player.seeking) {\r\n const precent = player.currentTime / player.duration\r\n const prevPrecent = Number(progress.style.width.replace('%', '') || '0') / Number(container.style.width || '100');\r\n if (Math.abs(precent - prevPrecent) <= 1) {\r\n progress.style.width = `${player.currentTime * 100 / player.duration}%`\r\n }\r\n }\r\n }\r\n player.on('timeupdate', onTimeupdate)\r\n\r\n let onCurrentTimeChange = function (time) {\r\n progress.style.width = `${time * 100 / player.duration}%`\r\n }\r\n player.on('currentTimeChange', onCurrentTimeChange)\r\n\r\n let onSrcChange = function () {\r\n progress.style.width = '0%'\r\n }\r\n player.on('srcChange', onSrcChange)\r\n\r\n let onCacheUpdate = function () {\r\n let buffered = player.buffered\r\n if (buffered && buffered.length > 0) {\r\n let end = buffered.end(buffered.length - 1)\r\n for (let i = 0, len = buffered.length; i < len; i++) {\r\n if (player.currentTime >= buffered.start(i) && player.currentTime <= buffered.end(i)) {\r\n end = buffered.end(i)\r\n for (let j = i + 1; j < buffered.length; j++) {\r\n if (buffered.start(j) - buffered.end(j - 1) >= 2) {\r\n end = buffered.end(j - 1)\r\n break\r\n }\r\n }\r\n break\r\n }\r\n }\r\n cache.style.width = `${end / player.duration * 100}%`\r\n }\r\n }\r\n const cacheUpdateEvents = ['bufferedChange', 'cacheupdate', 'ended', 'timeupdate']\r\n cacheUpdateEvents.forEach(item => {\r\n player.on(item, onCacheUpdate)\r\n })\r\n\r\n function destroyFunc () {\r\n player.removeAllProgressDot()\r\n player.off('canplay', onCanplay)\r\n player.off('timeupdate', onTimeupdate)\r\n player.off('currentTimeChange', onCurrentTimeChange)\r\n player.off('srcChange', onSrcChange)\r\n player.off('loadedmetadata', onLoadedmetadata);\r\n cacheUpdateEvents.forEach(item => {\r\n player.off(item, onCacheUpdate)\r\n })\r\n player.off('destroy', destroyFunc)\r\n }\r\n player.once('destroy', destroyFunc)\r\n}\r\n\r\nexport default {\r\n name: 's_progress',\r\n method: s_progress\r\n}","import { createDom, format } from '../../utils/util'\nimport '../style/controls/time.scss'\n\nlet s_time = function () {\n let player = this\n let container = createDom('xg-time', `<span class=\"xgplayer-time-current\">${player.currentTime || format(0)}</span>\n <span>${player.duration || format(0)}</span>`, {}, 'xgplayer-time')\n player.once('ready', () => {\n if(player.controls) {\n player.controls.appendChild(container)\n }\n })\n let onTimeChange = function () {\n // let liveText = player.lang.LIVE\n // if(player.duration === Infinity) {\n // addClass(player.root, 'xgplayer-is-live')\n // if(!findDom(player.root, '.xgplayer-live')) {\n // const live = createDom('xg-live', liveText, {}, 'xgplayer-live')\n // player.controls.appendChild(live)\n // }\n // }\n if (player.videoConfig.mediaType !== 'audio' || !player.isProgressMoving || !player.dash) {\n container.innerHTML = `<span class=\"xgplayer-time-current\">${format(player.currentTime || 0)}</span>` + `<span>${format(player.duration)}</span>`\n }\n }\n player.on('durationchange', onTimeChange)\n player.on('timeupdate', onTimeChange)\n\n function onDestroy () {\n player.off('durationchange', onTimeChange)\n player.off('timeupdate', onTimeChange)\n player.off('destroy', onDestroy)\n }\n player.once('destroy', onDestroy)\n}\n\nexport default {\n name: 's_time',\n method: s_time\n}","import { createDom, createImgBtn } from '../../utils/util'\nimport PlayIcon from '../assets/play.svg'\nimport PauseIcon from '../assets/pause.svg'\nimport '../style/controls/play.scss'\n\nlet s_play = function () {\n let player = this\n let playBtn = player.config.playBtn ? player.config.playBtn : {}\n let btn\n if (playBtn.type === 'img') {\n btn = createImgBtn('play', playBtn.url.play, playBtn.width, playBtn.height)\n } else {\n btn = createDom('xg-play', `<xg-icon class=\"xgplayer-icon\">\n <div class=\"xgplayer-icon-play\">${PlayIcon}</div>\n <div class=\"xgplayer-icon-pause\">${PauseIcon}</div>\n </xg-icon>`, {}, 'xgplayer-play')\n }\n\n let tipsText = {}\n tipsText.play = player.lang.PLAY_TIPS\n tipsText.pause = player.lang.PAUSE_TIPS\n let tips = createDom('xg-tips', `<span class=\"xgplayer-tip-play\">${tipsText.play}</span>\n <span class=\"xgplayer-tip-pause\">${tipsText.pause}</span>`, {}, 'xgplayer-tips')\n btn.appendChild(tips)\n player.once('ready', () => {\n if(player.controls) {\n player.controls.appendChild(btn)\n }\n });\n\n ['click', 'touchend'].forEach(item => {\n btn.addEventListener(item, function (e) {\n e.preventDefault()\n e.stopPropagation()\n player.userGestureTrigEvent('playBtnClick')\n })\n })\n}\n\nexport default {\n name: 's_play',\n method: s_play\n}","import { createDom, createImgBtn } from '../../utils/util'\nimport RequestFullIcon from '../assets/requestFull.svg'\nimport ExitFullIcon from '../assets/exitFull.svg'\nimport '../style/controls/fullscreen.scss'\n\nlet s_fullscreen = function () {\n let player = this\n let fullscreenBtn = player.config.fullscreenBtn ? player.config.fullscreenBtn : {}\n let btn\n if (fullscreenBtn.type === 'img') {\n btn = createImgBtn('fullscreen', fullscreenBtn.url.request, fullscreenBtn.width, fullscreenBtn.height)\n } else {\n btn = createDom('xg-fullscreen', `<xg-icon class=\"xgplayer-icon\">\n <div class=\"xgplayer-icon-requestfull\">${RequestFullIcon}</div>\n <div class=\"xgplayer-icon-exitfull\">${ExitFullIcon}</div>\n </xg-icon>`, {}, 'xgplayer-fullscreen')\n }\n\n let tipsText = {}\n tipsText.requestfull = player.lang.FULLSCREEN_TIPS\n tipsText.exitfull = player.lang.EXITFULLSCREEN_TIPS\n let tips = createDom('xg-tips', `<span class=\"xgplayer-tip-requestfull\">${tipsText.requestfull}</span>\n <span class=\"xgplayer-tip-exitfull\">${tipsText.exitfull}</span>`, {}, 'xgplayer-tips')\n btn.appendChild(tips)\n player.once('ready', () => {\n if(player.controls) {\n player.controls.appendChild(btn)\n }\n });\n\n ['click', 'touchend'].forEach(item => {\n btn.addEventListener(item, function (e) {\n e.preventDefault()\n e.stopPropagation()\n player.userGestureTrigEvent('fullscreenBtnClick')\n })\n })\n}\n\nexport default {\n name: 's_fullscreen',\n method: s_fullscreen\n}","import { createDom } from '../../utils/util'\nimport Loading from '../assets/loading.svg'\nimport '../style/controls/loading.scss'\n\nlet s_loading = function () {\n let player = this\n let root = player.root\n let container = createDom('xg-loading', `${Loading}`, {}, 'xgplayer-loading')\n player.once('ready', () => {\n root.appendChild(container)\n })\n}\n\nexport default {\n name: 's_loading',\n method: s_loading\n}","import { createDom } from '../../utils/util'\nimport ReplayIcon from '../assets/replay.svg'\nimport '../style/controls/replay.scss'\n\nlet s_replay = function () {\n let player = this\n let root = player.root\n\n let replayText = player.lang.REPLAY\n let btn = createDom('xg-replay', `${ReplayIcon}\n <xg-replay-txt class=\"xgplayer-replay-txt\">${replayText}</xg-replay-txt>\n `, {}, 'xgplayer-replay')\n player.once('ready', () => {\n root.appendChild(btn)\n })\n\n function onEnded () {\n let path = btn.querySelector('path')\n if(path) {\n let transform = window.getComputedStyle(path).getPropertyValue('transform')\n if(typeof transform === 'string' && transform.indexOf('none') > -1) {\n return\n } else {\n path.setAttribute('transform', transform)\n }\n }\n }\n player.on('ended', onEnded)\n\n function onBtnClick (e) {\n e.preventDefault()\n e.stopPropagation()\n }\n btn.addEventListener('click', onBtnClick)\n\n let svg = btn.querySelector('svg');\n\n ['click', 'touchend'].forEach(item => {\n svg.addEventListener(item, function (e) {\n e.preventDefault()\n e.stopPropagation()\n player.userGestureTrigEvent('replayBtnClick')\n })\n })\n\n function destroyFunc () {\n player.off('ended', onEnded)\n player.off('destroy', destroyFunc)\n }\n player.once('destroy', destroyFunc)\n}\n\nexport default {\n name: 's_replay',\n method: s_replay\n}","\nvar content = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./play.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./play.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./play.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-play,.xgplayer-skin-default .xgplayer-play-img{width:40px;position:relative;-webkit-order:0;-moz-box-ordinal-group:1;order:0;display:block;cursor:pointer;margin-left:3px}.xgplayer-skin-default .xgplayer-play-img .xgplayer-icon,.xgplayer-skin-default .xgplayer-play .xgplayer-icon{margin-top:3px;width:32px}.xgplayer-skin-default .xgplayer-play-img .xgplayer-icon div,.xgplayer-skin-default .xgplayer-play .xgplayer-icon div{position:absolute}.xgplayer-skin-default .xgplayer-play-img .xgplayer-icon .xgplayer-icon-play,.xgplayer-skin-default .xgplayer-play .xgplayer-icon .xgplayer-icon-play{display:block}.xgplayer-skin-default .xgplayer-play-img .xgplayer-icon .xgplayer-icon-pause,.xgplayer-skin-default .xgplayer-play .xgplayer-icon .xgplayer-icon-pause{display:none}.xgplayer-skin-default .xgplayer-play-img .xgplayer-tips .xgplayer-tip-play,.xgplayer-skin-default .xgplayer-play .xgplayer-tips .xgplayer-tip-play{display:block}.xgplayer-skin-default .xgplayer-play-img .xgplayer-tips .xgplayer-tip-pause,.xgplayer-skin-default .xgplayer-play .xgplayer-tips .xgplayer-tip-pause{display:none}.xgplayer-skin-default .xgplayer-play-img:hover,.xgplayer-skin-default .xgplayer-play:hover{opacity:.85}.xgplayer-skin-default .xgplayer-play-img:hover .xgplayer-tips,.xgplayer-skin-default .xgplayer-play:hover .xgplayer-tips{display:block}.xgplayer-skin-default.xgplayer-playing .xgplayer-play-img .xgplayer-icon .xgplayer-icon-play,.xgplayer-skin-default.xgplayer-playing .xgplayer-play .xgplayer-icon .xgplayer-icon-play{display:none}.xgplayer-skin-default.xgplayer-playing .xgplayer-play-img .xgplayer-icon .xgplayer-icon-pause,.xgplayer-skin-default.xgplayer-playing .xgplayer-play .xgplayer-icon .xgplayer-icon-pause{display:block}.xgplayer-skin-default.xgplayer-playing .xgplayer-play-img .xgplayer-tips .xgplayer-tip-play,.xgplayer-skin-default.xgplayer-playing .xgplayer-play .xgplayer-tips .xgplayer-tip-play{display:none}.xgplayer-skin-default.xgplayer-pause .xgplayer-play-img .xgplayer-icon .xgplayer-icon-play,.xgplayer-skin-default.xgplayer-pause .xgplayer-play .xgplayer-icon .xgplayer-icon-play,.xgplayer-skin-default.xgplayer-playing .xgplayer-play-img .xgplayer-tips .xgplayer-tip-pause,.xgplayer-skin-default.xgplayer-playing .xgplayer-play .xgplayer-tips .xgplayer-tip-pause{display:block}.xgplayer-skin-default.xgplayer-pause .xgplayer-play-img .xgplayer-icon .xgplayer-icon-pause,.xgplayer-skin-default.xgplayer-pause .xgplayer-play .xgplayer-icon .xgplayer-icon-pause{display:none}.xgplayer-skin-default.xgplayer-pause .xgplayer-play-img .xgplayer-tips .xgplayer-tip-play,.xgplayer-skin-default.xgplayer-pause .xgplayer-play .xgplayer-tips .xgplayer-tip-play{display:block}.xgplayer-skin-default.xgplayer-pause .xgplayer-play-img .xgplayer-tips .xgplayer-tip-pause,.xgplayer-skin-default.xgplayer-pause .xgplayer-play .xgplayer-tips .xgplayer-tip-pause{display:none}\", \"\"]);\n\n// exports\n","\nvar content = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./poster.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./poster.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./poster.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-poster{display:none;position:absolute;left:0;top:0;width:100%;height:100%;z-index:100;background-size:cover;background-position:50%}.xgplayer-skin-default.xgplayer-nostart .xgplayer-poster{display:block}\", \"\"]);\n\n// exports\n","\nvar content = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./placeholder.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./placeholder.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./placeholder.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-placeholder{-webkit-flex:1;-moz-box-flex:1;flex:1;-webkit-order:3;-moz-box-ordinal-group:4;order:3;display:block}\", \"\"]);\n\n// exports\n","\nvar content = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./fullscreen.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./fullscreen.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./fullscreen.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-fullscreen,.xgplayer-skin-default .xgplayer-fullscreen-img{position:relative;-webkit-order:13;-moz-box-ordinal-group:14;order:13;display:block;cursor:pointer;margin-left:5px;margin-right:3px}.xgplayer-skin-default .xgplayer-fullscreen-img .xgplayer-icon,.xgplayer-skin-default .xgplayer-fullscreen .xgplayer-icon{margin-top:3px}.xgplayer-skin-default .xgplayer-fullscreen-img .xgplayer-icon div,.xgplayer-skin-default .xgplayer-fullscreen .xgplayer-icon div{position:absolute}.xgplayer-skin-default .xgplayer-fullscreen-img .xgplayer-icon .xgplayer-icon-requestfull,.xgplayer-skin-default .xgplayer-fullscreen .xgplayer-icon .xgplayer-icon-requestfull{display:block}.xgplayer-skin-default .xgplayer-fullscreen-img .xgplayer-icon .xgplayer-icon-exitfull,.xgplayer-skin-default .xgplayer-fullscreen .xgplayer-icon .xgplayer-icon-exitfull{display:none}.xgplayer-skin-default .xgplayer-fullscreen-img .xgplayer-tips,.xgplayer-skin-default .xgplayer-fullscreen .xgplayer-tips{position:absolute;right:0;left:auto}.xgplayer-skin-default .xgplayer-fullscreen-img .xgplayer-tips .xgplayer-tip-requestfull,.xgplayer-skin-default .xgplayer-fullscreen .xgplayer-tips .xgplayer-tip-requestfull{display:block}.xgplayer-skin-default .xgplayer-fullscreen-img .xgplayer-tips .xgplayer-tip-exitfull,.xgplayer-skin-default .xgplayer-fullscreen .xgplayer-tips .xgplayer-tip-exitfull{display:none}.xgplayer-skin-default .xgplayer-fullscreen-img:hover,.xgplayer-skin-default .xgplayer-fullscreen:hover{opacity:.85}.xgplayer-skin-default .xgplayer-fullscreen-img:hover .xgplayer-tips,.xgplayer-skin-default .xgplayer-fullscreen:hover .xgplayer-tips{display:block}.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen-img .xgplayer-icon .xgplayer-icon-requestfull,.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen .xgplayer-icon .xgplayer-icon-requestfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen-img .xgplayer-icon .xgplayer-icon-requestfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen .xgplayer-icon .xgplayer-icon-requestfull{display:none}.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen-img .xgplayer-icon .xgplayer-icon-exitfull,.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen .xgplayer-icon .xgplayer-icon-exitfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen-img .xgplayer-icon .xgplayer-icon-exitfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen .xgplayer-icon .xgplayer-icon-exitfull{display:block}.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen-img .xgplayer-tips .xgplayer-tip-requestfull,.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen .xgplayer-tips .xgplayer-tip-requestfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen-img .xgplayer-tips .xgplayer-tip-requestfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen .xgplayer-tips .xgplayer-tip-requestfull{display:none}.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen-img .xgplayer-tips .xgplayer-tip-exitfull,.xgplayer-skin-default.xgplayer-is-fullscreen .xgplayer-fullscreen .xgplayer-tips .xgplayer-tip-exitfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen-img .xgplayer-tips .xgplayer-tip-exitfull,.xgplayer-skin-default.xgplayer-rotate-fullscreen .xgplayer-fullscreen .xgplayer-tips .xgplayer-tip-exitfull{display:block}\", \"\"]);\n\n// exports\n","\nvar content = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./loading.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./loading.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./loading.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-loading{display:none;width:100px;height:100px;overflow:hidden;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7);position:absolute;left:50%;top:50%;margin:-50px auto auto -50px}.xgplayer-skin-default .xgplayer-loading svg{border-radius:50%;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-animation:loadingRotate 1s linear infinite;animation:loadingRotate 1s linear infinite}.xgplayer-skin-default .xgplayer-loading svg path{stroke:#ddd;stroke-dasharray:236;-webkit-animation:loadingDashOffset 2s linear infinite;animation:loadingDashOffset 2s linear infinite;animation-direction:alternate-reverse;fill:none;stroke-width:12px}.xgplayer-skin-default.xgplayer-nostart .xgplayer-loading{display:none}.xgplayer-skin-default.xgplayer-pause .xgplayer-loading{display:none!important}.xgplayer-skin-default.xgplayer-isloading .xgplayer-loading{display:block}\", \"\"]);\n\n// exports\n","\nvar content = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./progress.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./progress.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./progress.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-progress{display:block;position:absolute;height:20px;line-height:20px;left:12px;right:12px;outline:none;top:-15px;z-index:35}.xgplayer-skin-default .xgplayer-progress-outer{background:hsla(0,0%,100%,.3);display:block;height:3px;line-height:3px;margin-top:8.5px;width:100%;position:relative;cursor:pointer}.xgplayer-skin-default .xgplayer-progress-cache,.xgplayer-skin-default .xgplayer-progress-played{display:block;height:100%;line-height:1;position:absolute;left:0;top:0}.xgplayer-skin-default .xgplayer-progress-cache{width:0;background:hsla(0,0%,100%,.5)}.xgplayer-skin-default .xgplayer-progress-played{display:block;width:0;background-image:linear-gradient(-90deg,#fa1f41,#e31106);border-radius:0 1.5px 1.5px 0}.xgplayer-skin-default .xgplayer-progress-btn{display:none;position:absolute;left:0;top:-5px;width:13px;height:13px;border-radius:30px;background:#fff;box-shadow:0 0 2px 0 rgba(0,0,0,.26);left:100%;-webkit-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);z-index:36}.xgplayer-skin-default .xgplayer-progress-point{position:absolute}.xgplayer-skin-default .xgplayer-progress-point.xgplayer-tips{margin-left:0;top:-25px;display:none;z-index:100}.xgplayer-skin-default .xgplayer-progress-dot{display:inline-block;position:absolute;height:3px;width:5px;top:0;background:#fff;border-radius:6px;z-index:16}.xgplayer-skin-default .xgplayer-progress-dot .xgplayer-progress-tip{position:absolute;bottom:200%;right:50%;-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%);height:auto;line-height:30px;width:auto;background:rgba(0,0,0,.3);border-radius:6px;border:1px solid rgba(0,0,0,.8);cursor:default;white-space:nowrap;display:none}.xgplayer-skin-default .xgplayer-progress-dot-show .xgplayer-progress-tip{display:block}.xgplayer-skin-default .xgplayer-progress-thumbnail{position:absolute;-moz-box-sizing:border-box;box-sizing:border-box}.xgplayer-skin-default .xgplayer-progress-thumbnail.xgplayer-tips{margin-left:0;display:none;z-index:99}.xgplayer-skin-default .xgplayer-coverpreview{position:absolute;width:100%;height:100%;top:0;left:0;display:none}.xgplayer-skin-default .xgplayer-coverpreview .xgplayer-coverpreview-outer{position:absolute;display:block;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.xgplayer-skin-default .xgplayer-coverpreview .xgplayer-coverpreview-outer .xgplayer-coverpreview-thumbnail{display:block}.xgplayer-skin-default .xgplayer-coverpreview .xgplayer-coverpreview-outer .xgplayer-coverpreview-point{display:block;text-align:center;font-family:PingFangSC-Regular;font-size:11px;color:#ccc;padding:2px 4px}.xgplayer-skin-default .xgplayer-coverpreview .xgplayer-coverpreview-outer .xgplayer-coverpreview-point span{color:#fff}.xgplayer-skin-default .xgplayer-progress:focus .xgplayer-progress-outer,.xgplayer-skin-default .xgplayer-progress:hover .xgplayer-progress-outer{height:6px;margin-top:7px}.xgplayer-skin-default .xgplayer-progress:focus .xgplayer-progress-dot,.xgplayer-skin-default .xgplayer-progress:hover .xgplayer-progress-dot{height:6px}.xgplayer-skin-default .xgplayer-progress:focus .xgplayer-progress-btn,.xgplayer-skin-default .xgplayer-progress:hover .xgplayer-progress-btn{display:block;top:-3px}.xgplayer-skin-default.xgplayer-definition-active .xgplayer-progress,.xgplayer-skin-default.xgplayer-playbackrate-active .xgplayer-progress,.xgplayer-skin-default.xgplayer-texttrack-active .xgplayer-progress,.xgplayer-skin-default.xgplayer-volume-active .xgplayer-progress{z-index:15}.xgplayer-skin-default.xgplayer-mobile .xgplayer-progress-btn{display:block!important}.xgplayer-skin-default.xgplayer-mobile .xgplayer-progress:focus .xgplayer-progress-outer,.xgplayer-skin-default.xgplayer-mobile .xgplayer-progress:hover .xgplayer-progress-outer{height:3px!important;margin-top:8.5px!important}.xgplayer-skin-default.xgplayer-mobile .xgplayer-progress:focus .xgplayer-progress-btn,.xgplayer-skin-default.xgplayer-mobile .xgplayer-progress:hover .xgplayer-progress-btn{display:block!important;top:-5px!important}\", \"\"]);\n\n// exports\n","\nvar content = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./time.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./time.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./time.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-time{-webkit-order:2;-moz-box-ordinal-group:3;order:2;font-family:ArialMT;font-size:13px;color:#fff;line-height:40px;height:40px;text-align:center;display:inline-block;margin:auto 8px}.xgplayer-skin-default .xgplayer-time span{color:hsla(0,0%,100%,.5)}.xgplayer-skin-default .xgplayer-time .xgplayer-time-current{color:#fff}.xgplayer-skin-default .xgplayer-time .xgplayer-time-current:after{content:\\\"/\\\";display:inline-block;padding:0 3px}\", \"\"]);\n\n// exports\n","\nvar content = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./replay.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./replay.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../../../node_modules/css-loader/index.js??ref--5-1!../../../../../../node_modules/postcss-loader/lib/index.js!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--5-3!./replay.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".xgplayer-skin-default .xgplayer-replay{position:absolute;left:0;top:0;width:100%;height:100%;z-index:105;display:none;-webkit-justify-content:center;-moz-box-pack:center;justify-content:center;-webkit-align-items:center;-moz-box-align:center;align-items:center;background:rgba(0,0,0,.54);-webkit-flex-direction:column;-moz-box-orient:vertical;-moz-box-direction:normal;flex-direction:column}.xgplayer-skin-default .xgplayer-replay svg{background:rgba(0,0,0,.58);border-radius:100%;cursor:pointer}.xgplayer-skin-default .xgplayer-replay svg path{-webkit-transform:translate(20px,21px);-ms-transform:translate(20px,21px);transform:translate(20px,21px);fill:#ddd}.xgplayer-skin-default .xgplayer-replay svg:hover{background:rgba(0,0,0,.38)}.xgplayer-skin-default .xgplayer-replay svg:hover path{fill:#fff}.xgplayer-skin-default .xgplayer-replay .xgplayer-replay-txt{display:inline-block;font-family:PingFangSC-Regular;font-size:14px;color:#fff;line-height:34px}.xgplayer-skin-default.xgplayer.xgplayer-ended .xgplayer-controls{display:none}.xgplayer-skin-default.xgplayer.xgplayer-ended .xgplayer-replay{display:-webkit-flex;display:-moz-box;display:flex}\", \"\"]);\n\n// exports\n","import Player from './player'\n\nimport Flex from './skin/controls/flex'\nimport Fullscreen from './controls/fullscreen'\nimport S_fullscreen from './skin/controls/fullscreen'\nimport S_loading from './skin/controls/loading'\nimport Mobile from './controls/mobile'\nimport Pc from './controls/pc'\nimport Play from './controls/play'\nimport S_play from './skin/controls/play'\nimport S_progress from './skin/controls/progress'\nimport S_poster from './skin/controls/poster'\nimport S_time from './skin/controls/time'\nimport Start from './controls/start'\nimport S_start from './skin/controls/start'\nimport Replay from './controls/replay'\nimport S_replay from './skin/controls/replay'\n// import Volume from './controls/volume'\n// import S_volume from './skin/controls/volume'\n\nlet controlLst = [\n Flex,\n Fullscreen,\n S_fullscreen,\n S_loading,\n Mobile,\n Pc,\n Play,\n S_play,\n S_progress,\n S_poster,\n S_time,\n Start,\n S_start,\n Replay,\n S_replay\n]\ncontrolLst.forEach(function(control) {\n Player.install(control.name, control.method)\n})\n\nexport default Player\n"],"sourceRoot":""}
|