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.
Files changed (188) hide show
  1. package/browser/controls/danmu.js +3 -1
  2. package/browser/controls/errorRetry.js +1 -1
  3. package/browser/controls/nativeTextTrack.js +1 -1
  4. package/browser/core_player.js +1 -1
  5. package/browser/core_player.js.map +1 -1
  6. package/browser/index.js +7 -5
  7. package/browser/index.js.map +1 -1
  8. package/browser/simple_player.js +1 -1
  9. package/browser/simple_player.js.map +1 -1
  10. package/dist/controls/danmu.js +3 -1
  11. package/dist/controls/errorRetry.js +1 -1
  12. package/dist/controls/nativeTextTrack.js +1 -1
  13. package/dist/core_player.js +6 -7
  14. package/dist/core_player.js.map +1 -1
  15. package/dist/index.js +2881 -1887
  16. package/dist/index.js.map +1 -1
  17. package/dist/index.min.css +1 -0
  18. package/dist/index.min.js +2 -0
  19. package/dist/index.min.js.map +1 -0
  20. package/dist/simple_player.js +6 -7
  21. package/dist/simple_player.js.map +1 -1
  22. package/es/controls/danmu.js +3 -1
  23. package/es/controls/errorRetry.js +1 -1
  24. package/es/controls/nativeTextTrack.js +1 -1
  25. package/es/core_player.js +1 -1
  26. package/es/core_player.js.map +1 -1
  27. package/es/index.js +7 -5
  28. package/es/index.js.map +1 -1
  29. package/es/simple_player.js +1 -1
  30. package/es/simple_player.js.map +1 -1
  31. package/package.json +11 -2
  32. package/types/index.d.ts +0 -11
  33. package/postcss.config.js +0 -7
  34. package/src/bind/airplay.js +0 -10
  35. package/src/bind/cssFullscreen.js +0 -10
  36. package/src/bind/danmu.js +0 -10
  37. package/src/bind/definition.js +0 -10
  38. package/src/bind/download.js +0 -10
  39. package/src/bind/enter.js +0 -8
  40. package/src/bind/error.js +0 -8
  41. package/src/bind/errorRetry.js +0 -8
  42. package/src/bind/flex.js +0 -8
  43. package/src/bind/fullscreen.js +0 -10
  44. package/src/bind/i18n.js +0 -8
  45. package/src/bind/keyboard.js +0 -8
  46. package/src/bind/loading.js +0 -8
  47. package/src/bind/localPreview.js +0 -10
  48. package/src/bind/memoryPlay.js +0 -10
  49. package/src/bind/miniplayer.js +0 -10
  50. package/src/bind/mobile.js +0 -8
  51. package/src/bind/nativeTextTrack.js +0 -8
  52. package/src/bind/pc.js +0 -8
  53. package/src/bind/pip.js +0 -10
  54. package/src/bind/play.js +0 -10
  55. package/src/bind/playNext.js +0 -10
  56. package/src/bind/playbackRate.js +0 -8
  57. package/src/bind/poster.js +0 -8
  58. package/src/bind/progress.js +0 -8
  59. package/src/bind/reload.js +0 -10
  60. package/src/bind/replay.js +0 -10
  61. package/src/bind/rotate.js +0 -10
  62. package/src/bind/screenShot.js +0 -10
  63. package/src/bind/stallCheck.js +0 -8
  64. package/src/bind/start.js +0 -10
  65. package/src/bind/textTrack.js +0 -8
  66. package/src/bind/time.js +0 -8
  67. package/src/bind/volume.js +0 -10
  68. package/src/controls/airplay.js +0 -20
  69. package/src/controls/cssFullscreen.js +0 -49
  70. package/src/controls/danmu.js +0 -75
  71. package/src/controls/definition.js +0 -13
  72. package/src/controls/download.js +0 -28
  73. package/src/controls/errorRetry.js +0 -132
  74. package/src/controls/fullscreen.js +0 -145
  75. package/src/controls/keyboard.js +0 -214
  76. package/src/controls/localPreview.js +0 -32
  77. package/src/controls/memoryPlay.js +0 -14
  78. package/src/controls/miniplayer.js +0 -128
  79. package/src/controls/mobile.js +0 -100
  80. package/src/controls/pc.js +0 -123
  81. package/src/controls/pip.js +0 -52
  82. package/src/controls/play.js +0 -34
  83. package/src/controls/playNext.js +0 -29
  84. package/src/controls/reload.js +0 -24
  85. package/src/controls/replay.js +0 -30
  86. package/src/controls/rotate.js +0 -99
  87. package/src/controls/screenShot.js +0 -65
  88. package/src/controls/stallCheck.js +0 -38
  89. package/src/controls/start.js +0 -60
  90. package/src/controls/textTrack.js +0 -182
  91. package/src/controls/volume.js +0 -178
  92. package/src/controls.js +0 -36
  93. package/src/core_player.js +0 -13
  94. package/src/error.js +0 -74
  95. package/src/index.js +0 -57
  96. package/src/player.js +0 -553
  97. package/src/proxy.js +0 -495
  98. package/src/simple_player.js +0 -42
  99. package/src/skin/assets/airplay.svg +0 -1
  100. package/src/skin/assets/download.svg +0 -14
  101. package/src/skin/assets/exitCssFull.svg +0 -3
  102. package/src/skin/assets/exitFull.svg +0 -3
  103. package/src/skin/assets/loading.svg +0 -3
  104. package/src/skin/assets/panel.svg +0 -4
  105. package/src/skin/assets/pause.svg +0 -3
  106. package/src/skin/assets/play.svg +0 -3
  107. package/src/skin/assets/playNext.svg +0 -3
  108. package/src/skin/assets/reload.svg +0 -3
  109. package/src/skin/assets/replay.svg +0 -3
  110. package/src/skin/assets/requestCssFull.svg +0 -3
  111. package/src/skin/assets/requestFull.svg +0 -3
  112. package/src/skin/assets/rotate.svg +0 -11
  113. package/src/skin/assets/startPause.svg +0 -3
  114. package/src/skin/assets/startPlay.svg +0 -3
  115. package/src/skin/assets/volumeLarge.svg +0 -4
  116. package/src/skin/assets/volumeMuted.svg +0 -4
  117. package/src/skin/assets/volumeSmall.svg +0 -4
  118. package/src/skin/controls/airplay.js +0 -44
  119. package/src/skin/controls/cssFullscreen.js +0 -36
  120. package/src/skin/controls/danmu.js +0 -214
  121. package/src/skin/controls/definition.js +0 -251
  122. package/src/skin/controls/download.js +0 -29
  123. package/src/skin/controls/enter.js +0 -21
  124. package/src/skin/controls/error.js +0 -57
  125. package/src/skin/controls/flex.js +0 -13
  126. package/src/skin/controls/fullscreen.js +0 -43
  127. package/src/skin/controls/i18n.js +0 -168
  128. package/src/skin/controls/loading.js +0 -17
  129. package/src/skin/controls/localPreview.js +0 -18
  130. package/src/skin/controls/memoryPlay.js +0 -39
  131. package/src/skin/controls/miniplayer.js +0 -26
  132. package/src/skin/controls/nativeTextTrack.js +0 -153
  133. package/src/skin/controls/pip.js +0 -26
  134. package/src/skin/controls/play.js +0 -43
  135. package/src/skin/controls/playNext.js +0 -41
  136. package/src/skin/controls/playbackRate.js +0 -141
  137. package/src/skin/controls/poster.js +0 -18
  138. package/src/skin/controls/progress.js +0 -407
  139. package/src/skin/controls/reload.js +0 -29
  140. package/src/skin/controls/replay.js +0 -56
  141. package/src/skin/controls/rotate.js +0 -29
  142. package/src/skin/controls/screenShot.js +0 -27
  143. package/src/skin/controls/start.js +0 -62
  144. package/src/skin/controls/textTrack.js +0 -113
  145. package/src/skin/controls/time.js +0 -40
  146. package/src/skin/controls/volume.js +0 -63
  147. package/src/skin/index.js +0 -63
  148. package/src/skin/style/common/animation.scss +0 -16
  149. package/src/skin/style/common/svg-url.scss +0 -70
  150. package/src/skin/style/controls/airplay.scss +0 -35
  151. package/src/skin/style/controls/controls.scss +0 -40
  152. package/src/skin/style/controls/cssfullscreen.scss +0 -103
  153. package/src/skin/style/controls/danmu.scss +0 -333
  154. package/src/skin/style/controls/definition.scss +0 -76
  155. package/src/skin/style/controls/download.scss +0 -45
  156. package/src/skin/style/controls/enter.scss +0 -55
  157. package/src/skin/style/controls/error.scss +0 -34
  158. package/src/skin/style/controls/fullscreen.scss +0 -60
  159. package/src/skin/style/controls/icon.scss +0 -12
  160. package/src/skin/style/controls/live.scss +0 -9
  161. package/src/skin/style/controls/loading.scss +0 -44
  162. package/src/skin/style/controls/memoryPlay.scss +0 -28
  163. package/src/skin/style/controls/miniplayer.scss +0 -104
  164. package/src/skin/style/controls/pip.scss +0 -42
  165. package/src/skin/style/controls/placeholder.scss +0 -7
  166. package/src/skin/style/controls/play.scss +0 -79
  167. package/src/skin/style/controls/playNext.scss +0 -44
  168. package/src/skin/style/controls/playbackRate.scss +0 -82
  169. package/src/skin/style/controls/poster.scss +0 -19
  170. package/src/skin/style/controls/progress.scss +0 -182
  171. package/src/skin/style/controls/reload.scss +0 -43
  172. package/src/skin/style/controls/replay.scss +0 -46
  173. package/src/skin/style/controls/rotate.scss +0 -41
  174. package/src/skin/style/controls/screenShot.scss +0 -42
  175. package/src/skin/style/controls/start.scss +0 -78
  176. package/src/skin/style/controls/textTrack.scss +0 -87
  177. package/src/skin/style/controls/time.scss +0 -24
  178. package/src/skin/style/controls/tips.scss +0 -24
  179. package/src/skin/style/controls/videoProxy.scss +0 -6
  180. package/src/skin/style/controls/volume.scss +0 -143
  181. package/src/skin/style/index.scss +0 -88
  182. package/src/utils/sniffer.js +0 -47
  183. package/src/utils/url.js +0 -10
  184. package/src/utils/util.js +0 -358
  185. package/src/utils/xgplayerTimeRange.js +0 -17
  186. package/src/version.js +0 -7
  187. package/version.json +0 -3
  188. package/webpack.config.js +0 -168
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://Player/webpack/bootstrap","webpack://Player/./src/utils/util.js","webpack://Player/./node_modules/css-loader/lib/css-base.js","webpack://Player/./node_modules/style-loader/lib/addStyles.js","webpack://Player/./node_modules/es5-ext/object/is-value.js","webpack://Player/./src/error.js","webpack://Player/./src/utils/sniffer.js","webpack://Player/./node_modules/type/value/is.js","webpack://Player/./src/utils/xgplayerTimeRange.js","webpack://Player/./src/player.js","webpack://Player/./src/skin/controls/i18n.js","webpack://Player/./src/proxy.js","webpack://Player/./node_modules/event-emitter/index.js","webpack://Player/./node_modules/d/index.js","webpack://Player/./node_modules/type/plain-function/is.js","webpack://Player/./node_modules/type/function/is.js","webpack://Player/./node_modules/type/prototype/is.js","webpack://Player/./node_modules/type/object/is.js","webpack://Player/./node_modules/es5-ext/object/assign/index.js","webpack://Player/./node_modules/es5-ext/object/assign/is-implemented.js","webpack://Player/./node_modules/es5-ext/object/assign/shim.js","webpack://Player/./node_modules/es5-ext/object/keys/index.js","webpack://Player/./node_modules/es5-ext/object/keys/is-implemented.js","webpack://Player/./node_modules/es5-ext/object/keys/shim.js","webpack://Player/./node_modules/es5-ext/function/noop.js","webpack://Player/./node_modules/es5-ext/object/valid-value.js","webpack://Player/./node_modules/es5-ext/object/normalize-options.js","webpack://Player/./node_modules/es5-ext/string/#/contains/index.js","webpack://Player/./node_modules/es5-ext/string/#/contains/is-implemented.js","webpack://Player/./node_modules/es5-ext/string/#/contains/shim.js","webpack://Player/./node_modules/es5-ext/object/valid-callable.js","webpack://Player/./node_modules/event-emitter/all-off.js","webpack://Player/./node_modules/es5-ext/object/valid-object.js","webpack://Player/./node_modules/es5-ext/object/is-object.js","webpack://Player/./src/skin/style/index.scss?43d7","webpack://Player/./src/skin/style/index.scss","webpack://Player/./node_modules/style-loader/lib/urls.js","webpack://Player/./src/controls/mobile.js","webpack://Player/./src/controls/pc.js","webpack://Player/./src/controls/start.js","webpack://Player/./src/skin/controls/start.js","webpack://Player/./src/skin/assets/startPlay.svg","webpack://Player/./src/skin/assets/startPause.svg","webpack://Player/./src/skin/style/controls/start.scss?7b40","webpack://Player/./src/skin/style/controls/start.scss","webpack://Player/./src/controls/fullscreen.js","webpack://Player/./src/controls/play.js","webpack://Player/./src/controls/replay.js","webpack://Player/./src/skin/controls/play.js","webpack://Player/./src/skin/assets/play.svg","webpack://Player/./src/skin/assets/pause.svg","webpack://Player/./src/skin/style/controls/play.scss?80f8","webpack://Player/./src/skin/style/controls/play.scss","webpack://Player/./src/skin/controls/poster.js","webpack://Player/./src/skin/style/controls/poster.scss?b40b","webpack://Player/./src/skin/style/controls/poster.scss","webpack://Player/./src/skin/controls/flex.js","webpack://Player/./src/skin/style/controls/placeholder.scss?b5ec","webpack://Player/./src/skin/style/controls/placeholder.scss","webpack://Player/./src/skin/controls/fullscreen.js","webpack://Player/./src/skin/assets/requestFull.svg","webpack://Player/./src/skin/assets/exitFull.svg","webpack://Player/./src/skin/style/controls/fullscreen.scss?66dd","webpack://Player/./src/skin/style/controls/fullscreen.scss","webpack://Player/./src/skin/controls/loading.js","webpack://Player/./src/skin/assets/loading.svg","webpack://Player/./src/skin/style/controls/loading.scss?397a","webpack://Player/./src/skin/style/controls/loading.scss","webpack://Player/./src/skin/controls/progress.js","webpack://Player/./src/skin/style/controls/progress.scss?f0bf","webpack://Player/./src/skin/style/controls/progress.scss","webpack://Player/./src/skin/controls/time.js","webpack://Player/./src/skin/style/controls/time.scss?b72e","webpack://Player/./src/skin/style/controls/time.scss","webpack://Player/./src/skin/controls/replay.js","webpack://Player/./src/skin/assets/replay.svg","webpack://Player/./src/skin/style/controls/replay.scss?a918","webpack://Player/./src/skin/style/controls/replay.scss","webpack://Player/./src/simple_player.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","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","hasClass","addClass","removeClass","toggleClass","findDom","padStart","format","event","typeOf","deepCopy","getBgImage","copyDom","_setInterval","_clearInterval","createImgBtn","isWeiXin","isUc","computeWatchDur","offInDestroy","on","once","getBuffered2","checkIsBrowser","setStyle","checkWebkitSetPresentationMode","video","el","tpl","attrs","cname","dom","document","item","className","Array","some","RegExp","reg","sel","e","str","length","pad","charstr","String","len","maxlen","Math","chars","time","window","hour","minute","second","touch","obj","dst","src","url","a","back","node","context","eventName","intervalFunc","frequency","setInterval","clearInterval","imgUrl","width","height","btn","w","h","unit","Number","ua","played","arr","begin","end","j","b","watch_dur","fn","offEvent","_fn","data","vbuffered","maxHoleDuration","buffered","start","diff","buffered_2","buf2len","buf2end","XgplayerTimeRange","elem","style","error","PresentationMode","PIP","INLINE","FULLSCREEN","util","useSourceMap","list","toString","this","map","content","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","source","sourceRoot","concat","join","cssWithMappingToString","mediaQuery","alreadyImportedModules","id","push","memo","stylesInDom","isOldIE","all","atob","apply","arguments","getTarget","target","querySelector","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","indexOf","splice","createStyleElement","createElement","type","addAttrs","keys","forEach","setAttribute","update","remove","result","transform","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","link","rel","createLinkElement","updateLink","href","applyToTag","newObj","DEBUG","newList","mayRemove","textStore","replaceText","index","replacement","filter","Boolean","styleSheet","cssText","cssNode","createTextNode","childNodes","autoFixUrls","undefined","convertToAbsoluteUrls","blob","oldSrc","_undefined","require","val","ErrorTypes","network","code","msg","remark","mse","parse","decoder","runtime","timeout","other","errd","line","handle","version","errorCode","mediaError","arg","sniffer","navigator","ie","firfox","chrome","opera","safari","isWindowsPhone","test","isSymbian","isAndroid","isFireFox","isTablet","isPhone","isPc","bufferedList","Player","ignores","whitelist","lang","inactive","volume","controls","controlsList","unselectable","onselectstart","Errors","vid","console","s_i18n","self","fetch","method","headers","Accept","res","err","evName","evFunc","player","videoWidth","containerSize","videoHeight","setTimeout","nodeType","root","config","playPromise","isDelDom","_interval","classNameList","split","clearTimeout","keyShortcut","destroyFunc","_replay","param","defaultUserGestureEventHandler","userGestureEventMiddleware","descriptor","enablePausedInactive","k","controlLst","control","Proxy","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","autoplay","playsinline","airplay","tabindex","mediaType","textTrackDom","nativeTextTrack","track","styleStr","wrap","XgVideoProxy","constructor","videoConfig","getElementsByTagName","trackDoms","lastBuffer","defaultVideoEventHandler","Date","curBuffer","videoEventHandler","canPlayType","range","currentTime","bool","isTrue","isFinite","ended","status","en","cn","rate","posterUrl","poster","vol","off","emit","methods","descriptors","callable","Function","defineProperties","configurable","writable","listener","__eeOnceListener__","__ee__","listeners","candidate","args","slice","isValue","isPlainFunction","assign","normalizeOpts","contains","dscr","desc","gs","isFunction","classRe","functionToString","isPrototype","isObject","possibleTypes","foo","bar","trzy","max","dest","TypeError","process","opts1","searchString","emitter","function","locals","location","baseUrl","protocol","host","currentDir","pathname","replace","fullMatch","origUrl","newUrl","unquotedOrigUrl","trim","$1","clk","_click_","clickedTime","first","element","onTouch","fullscreen","Event","onCanPlay","StartPlayIcon","StartPauseIcon","onPlayerReady","fullscreenEl","fullscreenPromise","playBtn","PlayIcon","PauseIcon","tipsText","tips","playceholder","fullscreenBtn","RequestFullIcon","ExitFullIcon","container","Loading","isRotateFullscreen","containerWidth","progress","outer","cache","point","thumbnail","dotItem","dot","dotEvent","text","duration","tnailPicNum","tnailWidth","tnailHeight","tnailCol","tnailRow","interval","tnailUrls","coverPreviewContainer","coverPreviewPoint","onLoadedmetadata","coverPreviewOuter","events","isRotate","left","move","now","indexInPage","tnaiRowIndex","tnaiColIndex","up","passive","containerLeft","compute","pointWidth","leave","onTimeupdate","precent","prevPrecent","onCurrentTimeChange","onSrcChange","onCacheUpdate","cacheUpdateEvents","onTimeChange","replayText","ReplayIcon","path","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":[" \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 = 173);\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","\"use strict\";\n\nvar _undefined = require(\"../function/noop\")(); // Support ES3 engines\n\nmodule.exports = function (val) { return val !== _undefined && val !== null; };\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","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","\"use strict\";\n\n// ES3 safe\nvar _undefined = void 0;\n\nmodule.exports = function (value) { return value !== _undefined && value !== 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 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","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}","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","'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 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 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","\"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","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}","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"70\\\" height=\\\"70\\\" viewBox=\\\"0 0 70 70\\\">\\n <path transform=\\\"translate(15,15) scale(0.04,0.04)\\\" d=\\\"M576,363L810,512L576,661zM342,214L576,363L576,661L342,810z\\\"></path>\\n</svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"70\\\" height=\\\"70\\\" viewBox=\\\"0 0 70 70\\\">\\n <path transform=\\\"translate(15,15) scale(0.04 0.04)\\\" d=\\\"M598,214h170v596h-170v-596zM256 810v-596h170v596h-170z\\\"></path>\\n</svg>\\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, 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}","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"0 0 40 40\\\">\\n <path transform=\\\"translate(2,2) scale(0.0320625 0.0320625)\\\" d=\\\"M576,363L810,512L576,661zM342,214L576,363L576,661L342,810z\\\"></path>\\n</svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"0 0 40 40\\\">\\n <path transform=\\\"translate(2,2) scale(0.0320625 0.0320625)\\\" d=\\\"M598,214h170v596h-170v-596zM256 810v-596h170v596h-170z\\\"></path>\\n</svg>\\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","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}","\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","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}","\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","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}","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"0 0 40 40\\\">\\n <path transform=\\\"scale(0.0320625 0.0320625)\\\" d=\\\"M598 214h212v212h-84v-128h-128v-84zM726 726v-128h84v212h-212v-84h128zM214 426v-212h212v84h-128v128h-84zM298 598v128h128v84h-212v-212h84z\\\"></path>\\n</svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"0 0 40 40\\\">\\n <path transform=\\\"scale(0.0320625 0.0320625)\\\" d=\\\"M682 342h128v84h-212v-212h84v128zM598 810v-212h212v84h-128v128h-84zM342 342v-128h84v212h-212v-84h128zM214 682v-84h212v212h-84v-128h-128z\\\"></path>\\n</svg>\\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","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}","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100\\\" height=\\\"100\\\" viewbox=\\\"0 0 100 100\\\">\\n <path d=\\\"M100,50A50,50,0,1,1,50,0\\\"></path>\\n</svg>\\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","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}","\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","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}","\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","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}","export default \"<svg class=\\\"xgplayer-replay-svg\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"78\\\" height=\\\"78\\\" viewbox=\\\"0 0 78 78\\\">\\n <path d=\\\"M8.22708362,13.8757234 L11.2677371,12.6472196 C11.7798067,12.4403301 12.3626381,12.6877273 12.5695276,13.1997969 L12.9441342,14.1269807 C13.1510237,14.6390502 12.9036264,15.2218816 12.3915569,15.4287712 L6.8284538,17.6764107 L5.90126995,18.0510173 C5.38920044,18.2579068 4.80636901,18.0105096 4.5994795,17.49844 L1.97723335,11.0081531 C1.77034384,10.4960836 2.0177411,9.91325213 2.52981061,9.70636262 L3.45699446,9.33175602 C3.96906396,9.12486652 4.5518954,9.37226378 4.75878491,9.88433329 L5.67885163,12.1615783 C7.99551726,6.6766934 13.3983951,3 19.5,3 C27.7842712,3 34.5,9.71572875 34.5,18 C34.5,26.2842712 27.7842712,33 19.5,33 C15.4573596,33 11.6658607,31.3912946 8.87004692,28.5831991 C8.28554571,27.9961303 8.28762719,27.0463851 8.87469603,26.4618839 C9.46176488,25.8773827 10.4115101,25.8794641 10.9960113,26.466533 C13.2344327,28.7147875 16.263503,30 19.5,30 C26.127417,30 31.5,24.627417 31.5,18 C31.5,11.372583 26.127417,6 19.5,6 C14.4183772,6 9.94214483,9.18783811 8.22708362,13.8757234 Z\\\"></path>\\n</svg>\\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://Player/webpack/bootstrap","webpack://Player/./src/utils/util.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/css-loader/lib/css-base.js","webpack://Player/./node_modules/style-loader/lib/addStyles.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/is-value.js","webpack://Player/./src/error.js","webpack://Player/./src/utils/sniffer.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/type/value/is.js","webpack://Player/./src/utils/xgplayerTimeRange.js","webpack://Player/./src/player.js","webpack://Player/./src/skin/controls/i18n.js","webpack://Player/./src/proxy.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/event-emitter/index.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/d/index.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/type/plain-function/is.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/type/function/is.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/type/prototype/is.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/type/object/is.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/assign/index.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/assign/is-implemented.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/assign/shim.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/keys/index.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/keys/is-implemented.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/keys/shim.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/function/noop.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/valid-value.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/normalize-options.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/string/#/contains/index.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/string/#/contains/is-implemented.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/string/#/contains/shim.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/valid-callable.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/event-emitter/all-off.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/valid-object.js","webpack://Player//Users/bytedance/Documents/repository/__git__/bytedance/xgplayer/node_modules/es5-ext/object/is-object.js","webpack://Player/./src/skin/style/index.scss?8c1f","webpack://Player/./src/skin/style/index.scss","webpack://Player/./node_modules/style-loader/lib/urls.js","webpack://Player/./src/controls/mobile.js","webpack://Player/./src/controls/pc.js","webpack://Player/./src/controls/start.js","webpack://Player/./src/skin/controls/start.js","webpack://Player/./src/skin/assets/startPlay.svg","webpack://Player/./src/skin/assets/startPause.svg","webpack://Player/./src/skin/style/controls/start.scss?0c41","webpack://Player/./src/skin/style/controls/start.scss","webpack://Player/./src/controls/fullscreen.js","webpack://Player/./src/controls/play.js","webpack://Player/./src/controls/replay.js","webpack://Player/./src/skin/controls/play.js","webpack://Player/./src/skin/assets/play.svg","webpack://Player/./src/skin/assets/pause.svg","webpack://Player/./src/skin/style/controls/play.scss?e857","webpack://Player/./src/skin/style/controls/play.scss","webpack://Player/./src/skin/controls/poster.js","webpack://Player/./src/skin/style/controls/poster.scss?be24","webpack://Player/./src/skin/style/controls/poster.scss","webpack://Player/./src/skin/controls/flex.js","webpack://Player/./src/skin/style/controls/placeholder.scss?564a","webpack://Player/./src/skin/style/controls/placeholder.scss","webpack://Player/./src/skin/controls/fullscreen.js","webpack://Player/./src/skin/assets/requestFull.svg","webpack://Player/./src/skin/assets/exitFull.svg","webpack://Player/./src/skin/style/controls/fullscreen.scss?12bf","webpack://Player/./src/skin/style/controls/fullscreen.scss","webpack://Player/./src/skin/controls/loading.js","webpack://Player/./src/skin/assets/loading.svg","webpack://Player/./src/skin/style/controls/loading.scss?c41a","webpack://Player/./src/skin/style/controls/loading.scss","webpack://Player/./src/skin/controls/progress.js","webpack://Player/./src/skin/style/controls/progress.scss?23f1","webpack://Player/./src/skin/style/controls/progress.scss","webpack://Player/./src/skin/controls/time.js","webpack://Player/./src/skin/style/controls/time.scss?0cc8","webpack://Player/./src/skin/style/controls/time.scss","webpack://Player/./src/skin/controls/replay.js","webpack://Player/./src/skin/assets/replay.svg","webpack://Player/./src/skin/style/controls/replay.scss?041b","webpack://Player/./src/skin/style/controls/replay.scss","webpack://Player/./src/simple_player.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","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","hasClass","addClass","removeClass","toggleClass","findDom","padStart","format","event","typeOf","deepCopy","getBgImage","copyDom","_setInterval","_clearInterval","createImgBtn","isWeiXin","isUc","computeWatchDur","offInDestroy","on","once","getBuffered2","checkIsBrowser","setStyle","checkWebkitSetPresentationMode","video","el","tpl","attrs","cname","dom","document","item","className","Array","some","RegExp","reg","sel","e","str","length","pad","charstr","String","len","maxlen","Math","chars","time","window","hour","minute","second","touch","obj","dst","src","url","a","back","node","context","eventName","intervalFunc","frequency","setInterval","clearInterval","imgUrl","width","height","btn","w","h","unit","Number","ua","played","arr","begin","end","j","b","watch_dur","fn","offEvent","_fn","data","vbuffered","maxHoleDuration","buffered","start","diff","buffered_2","buf2len","buf2end","XgplayerTimeRange","elem","style","error","PresentationMode","PIP","INLINE","FULLSCREEN","util","useSourceMap","list","toString","this","map","content","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","source","sourceRoot","concat","join","cssWithMappingToString","mediaQuery","alreadyImportedModules","id","push","memo","stylesInDom","isOldIE","all","atob","apply","arguments","getTarget","target","querySelector","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","indexOf","splice","createStyleElement","createElement","type","addAttrs","keys","forEach","setAttribute","update","remove","result","transform","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","link","rel","createLinkElement","updateLink","href","applyToTag","newObj","DEBUG","newList","mayRemove","textStore","replaceText","index","replacement","filter","Boolean","styleSheet","cssText","cssNode","createTextNode","childNodes","autoFixUrls","undefined","convertToAbsoluteUrls","blob","oldSrc","_undefined","require","val","ErrorTypes","network","code","msg","remark","mse","parse","decoder","runtime","timeout","other","errd","line","handle","version","errorCode","mediaError","arg","sniffer","navigator","ie","firfox","chrome","opera","safari","isWindowsPhone","test","isSymbian","isAndroid","isFireFox","isTablet","isPhone","isPc","bufferedList","Player","ignores","whitelist","lang","inactive","volume","controls","controlsList","unselectable","onselectstart","Errors","vid","console","s_i18n","self","fetch","method","headers","Accept","res","err","evName","evFunc","player","videoWidth","containerSize","videoHeight","setTimeout","nodeType","root","config","playPromise","isDelDom","_interval","classNameList","split","clearTimeout","keyShortcut","destroyFunc","_replay","param","defaultUserGestureEventHandler","userGestureEventMiddleware","descriptor","enablePausedInactive","k","controlLst","control","Proxy","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","autoplay","playsinline","airplay","tabindex","mediaType","textTrackDom","nativeTextTrack","track","styleStr","wrap","XgVideoProxy","constructor","videoConfig","getElementsByTagName","trackDoms","lastBuffer","defaultVideoEventHandler","Date","curBuffer","videoEventHandler","canPlayType","range","currentTime","bool","isTrue","isFinite","ended","status","en","cn","rate","posterUrl","poster","vol","off","emit","methods","descriptors","callable","Function","defineProperties","configurable","writable","listener","__eeOnceListener__","__ee__","listeners","candidate","args","slice","isValue","isPlainFunction","assign","normalizeOpts","contains","dscr","desc","gs","isFunction","classRe","functionToString","isPrototype","isObject","possibleTypes","foo","bar","trzy","max","dest","TypeError","process","opts1","searchString","emitter","function","locals","location","baseUrl","protocol","host","currentDir","pathname","replace","fullMatch","origUrl","newUrl","unquotedOrigUrl","trim","$1","clk","_click_","clickedTime","first","element","onTouch","fullscreen","Event","onCanPlay","StartPlayIcon","StartPauseIcon","onPlayerReady","fullscreenEl","fullscreenPromise","playBtn","PlayIcon","PauseIcon","tipsText","tips","playceholder","fullscreenBtn","RequestFullIcon","ExitFullIcon","container","Loading","isRotateFullscreen","containerWidth","progress","outer","cache","point","thumbnail","dotItem","dot","dotEvent","text","duration","tnailPicNum","tnailWidth","tnailHeight","tnailCol","tnailRow","interval","tnailUrls","coverPreviewContainer","coverPreviewPoint","onLoadedmetadata","coverPreviewOuter","events","isRotate","left","move","now","indexInPage","tnaiRowIndex","tnaiColIndex","up","passive","containerLeft","compute","pointWidth","leave","onTimeupdate","precent","prevPrecent","onCurrentTimeChange","onSrcChange","onCacheUpdate","cacheUpdateEvents","onTimeChange","replayText","ReplayIcon","path","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":[" \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 = 172);\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","\"use strict\";\n\nvar _undefined = require(\"../function/noop\")(); // Support ES3 engines\n\nmodule.exports = function (val) { return val !== _undefined && val !== null; };\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","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","\"use strict\";\n\n// ES3 safe\nvar _undefined = void 0;\n\nmodule.exports = function (value) { return value !== _undefined && value !== 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 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","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}","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","'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 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 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","\"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","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}","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"70\\\" height=\\\"70\\\" viewBox=\\\"0 0 70 70\\\">\\n <path transform=\\\"translate(15,15) scale(0.04,0.04)\\\" d=\\\"M576,363L810,512L576,661zM342,214L576,363L576,661L342,810z\\\"></path>\\n</svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"70\\\" height=\\\"70\\\" viewBox=\\\"0 0 70 70\\\">\\n <path transform=\\\"translate(15,15) scale(0.04 0.04)\\\" d=\\\"M598,214h170v596h-170v-596zM256 810v-596h170v596h-170z\\\"></path>\\n</svg>\\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, 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}","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"0 0 40 40\\\">\\n <path transform=\\\"translate(2,2) scale(0.0320625 0.0320625)\\\" d=\\\"M576,363L810,512L576,661zM342,214L576,363L576,661L342,810z\\\"></path>\\n</svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"0 0 40 40\\\">\\n <path transform=\\\"translate(2,2) scale(0.0320625 0.0320625)\\\" d=\\\"M598,214h170v596h-170v-596zM256 810v-596h170v596h-170z\\\"></path>\\n</svg>\\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","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}","\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","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}","\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","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}","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"0 0 40 40\\\">\\n <path transform=\\\"scale(0.0320625 0.0320625)\\\" d=\\\"M598 214h212v212h-84v-128h-128v-84zM726 726v-128h84v212h-212v-84h128zM214 426v-212h212v84h-128v128h-84zM298 598v128h128v84h-212v-212h84z\\\"></path>\\n</svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"0 0 40 40\\\">\\n <path transform=\\\"scale(0.0320625 0.0320625)\\\" d=\\\"M682 342h128v84h-212v-212h84v128zM598 810v-212h212v84h-128v128h-84zM342 342v-128h84v212h-212v-84h128zM214 682v-84h212v212h-84v-128h-128z\\\"></path>\\n</svg>\\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","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}","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100\\\" height=\\\"100\\\" viewbox=\\\"0 0 100 100\\\">\\n <path d=\\\"M100,50A50,50,0,1,1,50,0\\\"></path>\\n</svg>\\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","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}","\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","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}","\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","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}","export default \"<svg class=\\\"xgplayer-replay-svg\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"78\\\" height=\\\"78\\\" viewbox=\\\"0 0 78 78\\\">\\n <path d=\\\"M8.22708362,13.8757234 L11.2677371,12.6472196 C11.7798067,12.4403301 12.3626381,12.6877273 12.5695276,13.1997969 L12.9441342,14.1269807 C13.1510237,14.6390502 12.9036264,15.2218816 12.3915569,15.4287712 L6.8284538,17.6764107 L5.90126995,18.0510173 C5.38920044,18.2579068 4.80636901,18.0105096 4.5994795,17.49844 L1.97723335,11.0081531 C1.77034384,10.4960836 2.0177411,9.91325213 2.52981061,9.70636262 L3.45699446,9.33175602 C3.96906396,9.12486652 4.5518954,9.37226378 4.75878491,9.88433329 L5.67885163,12.1615783 C7.99551726,6.6766934 13.3983951,3 19.5,3 C27.7842712,3 34.5,9.71572875 34.5,18 C34.5,26.2842712 27.7842712,33 19.5,33 C15.4573596,33 11.6658607,31.3912946 8.87004692,28.5831991 C8.28554571,27.9961303 8.28762719,27.0463851 8.87469603,26.4618839 C9.46176488,25.8773827 10.4115101,25.8794641 10.9960113,26.466533 C13.2344327,28.7147875 16.263503,30 19.5,30 C26.127417,30 31.5,24.627417 31.5,18 C31.5,11.372583 26.127417,6 19.5,6 C14.4183772,6 9.94214483,9.18783811 8.22708362,13.8757234 Z\\\"></path>\\n</svg>\\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":""}