xgplayer 3.0.0-next.6 → 3.0.0-next.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/es/player.js +9 -16
- package/es/plugins/dynamicBg/index.js +0 -1
- package/es/plugins/mobile/index.js +3 -2
- package/es/plugins/mobile/touch.d.ts +1 -0
- package/es/plugins/mobile/touch.js +9 -5
- package/es/plugins/start/index.js +2 -2
- package/es/version.js +1 -1
- package/package.json +1 -1
package/dist/index.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.min.js","sources":["../../../node_modules/core-js/internals/global.js","../../../node_modules/core-js/internals/fails.js","../../../node_modules/core-js/internals/descriptors.js","../../../node_modules/core-js/internals/object-property-is-enumerable.js","../../../node_modules/core-js/internals/engine-v8-version.js","../../../node_modules/core-js/internals/create-property-descriptor.js","../../../node_modules/core-js/internals/classof-raw.js","../../../node_modules/core-js/internals/indexed-object.js","../../../node_modules/core-js/internals/require-object-coercible.js","../../../node_modules/core-js/internals/to-indexed-object.js","../../../node_modules/core-js/internals/is-object.js","../../../node_modules/core-js/internals/get-built-in.js","../../../node_modules/core-js/internals/engine-user-agent.js","../../../node_modules/core-js/internals/native-symbol.js","../../../node_modules/core-js/internals/use-symbol-as-uid.js","../../../node_modules/core-js/internals/is-symbol.js","../../../node_modules/core-js/internals/ordinary-to-primitive.js","../../../node_modules/core-js/internals/set-global.js","../../../node_modules/core-js/internals/shared-store.js","../../../node_modules/core-js/internals/shared.js","../../../node_modules/core-js/internals/to-object.js","../../../node_modules/core-js/internals/has.js","../../../node_modules/core-js/internals/uid.js","../../../node_modules/core-js/internals/well-known-symbol.js","../../../node_modules/core-js/internals/to-primitive.js","../../../node_modules/core-js/internals/to-property-key.js","../../../node_modules/core-js/internals/document-create-element.js","../../../node_modules/core-js/internals/ie8-dom-define.js","../../../node_modules/core-js/internals/object-get-own-property-descriptor.js","../../../node_modules/core-js/internals/an-object.js","../../../node_modules/core-js/internals/object-define-property.js","../../../node_modules/core-js/internals/create-non-enumerable-property.js","../../../node_modules/core-js/internals/inspect-source.js","../../../node_modules/core-js/internals/internal-state.js","../../../node_modules/core-js/internals/native-weak-map.js","../../../node_modules/core-js/internals/shared-key.js","../../../node_modules/core-js/internals/hidden-keys.js","../../../node_modules/core-js/internals/redefine.js","../../../node_modules/core-js/internals/to-integer.js","../../../node_modules/core-js/internals/to-length.js","../../../node_modules/core-js/internals/to-absolute-index.js","../../../node_modules/core-js/internals/array-includes.js","../../../node_modules/core-js/internals/object-keys-internal.js","../../../node_modules/core-js/internals/enum-bug-keys.js","../../../node_modules/core-js/internals/object-get-own-property-names.js","../../../node_modules/core-js/internals/object-get-own-property-symbols.js","../../../node_modules/core-js/internals/own-keys.js","../../../node_modules/core-js/internals/object-create.js","../../../node_modules/core-js/internals/copy-constructor-properties.js","../../../node_modules/core-js/internals/is-forced.js","../../../node_modules/core-js/internals/export.js","../../../node_modules/core-js/internals/a-function.js","../../../node_modules/core-js/internals/object-keys.js","../../../node_modules/core-js/internals/object-define-properties.js","../../../node_modules/core-js/internals/html.js","../../../node_modules/core-js/internals/function-bind.js","../../../node_modules/core-js/modules/es.reflect.construct.js","../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../../node_modules/@babel/runtime/helpers/esm/inherits.js","../../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../node_modules/core-js/internals/is-array.js","../../../node_modules/core-js/internals/to-string.js","../../../node_modules/core-js/internals/object-get-own-property-names-external.js","../../../node_modules/core-js/internals/well-known-symbol-wrapped.js","../../../node_modules/core-js/internals/path.js","../../../node_modules/core-js/internals/define-well-known-symbol.js","../../../node_modules/core-js/internals/set-to-string-tag.js","../../../node_modules/core-js/internals/function-bind-context.js","../../../node_modules/core-js/internals/array-species-constructor.js","../../../node_modules/core-js/internals/array-species-create.js","../../../node_modules/core-js/internals/array-iteration.js","../../../node_modules/core-js/modules/es.symbol.js","../../../node_modules/core-js/modules/es.object.get-own-property-descriptor.js","../../../node_modules/core-js/internals/create-property.js","../../../node_modules/core-js/modules/es.object.get-own-property-descriptors.js","../../../node_modules/@babel/runtime/helpers/esm/createClass.js","../../../node_modules/@babel/runtime/helpers/esm/get.js","../../../node_modules/@babel/runtime/helpers/esm/superPropBase.js","../../../node_modules/core-js/internals/array-method-has-species-support.js","../../../node_modules/core-js/modules/es.array.map.js","../../../node_modules/core-js/modules/es.array.concat.js","../../../node_modules/core-js/modules/es.object.keys.js","../../../node_modules/core-js/modules/es.array.slice.js","../../../node_modules/core-js/internals/dom-iterables.js","../../../node_modules/core-js/internals/array-method-is-strict.js","../../../node_modules/core-js/internals/array-for-each.js","../../../node_modules/core-js/modules/web.dom-collections.for-each.js","../../../node_modules/core-js/internals/regexp-flags.js","../../../node_modules/core-js/internals/regexp-sticky-helpers.js","../../../node_modules/core-js/internals/regexp-unsupported-dot-all.js","../../../node_modules/core-js/internals/regexp-unsupported-ncg.js","../../../node_modules/core-js/internals/regexp-exec.js","../../../node_modules/core-js/modules/es.regexp.exec.js","../../../node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","../../../node_modules/core-js/internals/is-regexp.js","../../../node_modules/core-js/internals/species-constructor.js","../../../node_modules/core-js/internals/string-multibyte.js","../../../node_modules/core-js/internals/advance-string-index.js","../../../node_modules/core-js/internals/regexp-exec-abstract.js","../../../node_modules/core-js/modules/es.string.split.js","../../../node_modules/core-js/modules/es.array.join.js","../../../node_modules/core-js/modules/es.array.splice.js","../../../node_modules/core-js/internals/to-string-tag-support.js","../../../node_modules/core-js/internals/classof.js","../../../node_modules/core-js/internals/object-to-string.js","../../../node_modules/core-js/modules/es.object.to-string.js","../../../node_modules/core-js/internals/native-promise-constructor.js","../../../node_modules/core-js/internals/redefine-all.js","../../../node_modules/core-js/internals/a-possible-prototype.js","../../../node_modules/core-js/internals/object-set-prototype-of.js","../../../node_modules/core-js/internals/set-species.js","../../../node_modules/core-js/internals/iterators.js","../../../node_modules/core-js/internals/is-array-iterator-method.js","../../../node_modules/core-js/internals/get-iterator-method.js","../../../node_modules/core-js/internals/iterator-close.js","../../../node_modules/core-js/internals/iterate.js","../../../node_modules/core-js/internals/check-correctness-of-iteration.js","../../../node_modules/core-js/internals/task.js","../../../node_modules/core-js/internals/engine-is-ios.js","../../../node_modules/core-js/internals/engine-is-node.js","../../../node_modules/core-js/internals/microtask.js","../../../node_modules/core-js/internals/engine-is-ios-pebble.js","../../../node_modules/core-js/internals/engine-is-webos-webkit.js","../../../node_modules/core-js/internals/new-promise-capability.js","../../../node_modules/core-js/internals/promise-resolve.js","../../../node_modules/core-js/modules/es.promise.js","../../../node_modules/core-js/internals/host-report-errors.js","../../../node_modules/core-js/internals/engine-is-browser.js","../../../node_modules/core-js/internals/an-instance.js","../../../node_modules/core-js/internals/perform.js","../../../node_modules/core-js/modules/es.function.name.js","../../../node_modules/core-js/internals/inherit-if-required.js","../../../node_modules/core-js/internals/whitespaces.js","../../../node_modules/core-js/internals/string-trim.js","../../../node_modules/core-js/modules/es.number.constructor.js","../../../node_modules/core-js/modules/es.array.filter.js","../../../node_modules/core-js/internals/object-assign.js","../../../node_modules/core-js/modules/es.object.assign.js","../../../node_modules/eventemitter3/index.js","../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../../../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../../../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../../../node_modules/core-js/modules/es.string.match.js","../../../node_modules/core-js/modules/es.regexp.constructor.js","../../../node_modules/core-js/modules/es.regexp.to-string.js","../../../node_modules/core-js/internals/get-substitution.js","../../../node_modules/core-js/modules/es.string.replace.js","../../../node_modules/core-js/internals/string-trim-forced.js","../../../node_modules/core-js/modules/es.string.trim.js","../../../node_modules/core-js/internals/array-sort.js","../../../node_modules/core-js/internals/engine-ff-version.js","../../../node_modules/core-js/internals/engine-is-ie-or-edge.js","../../../node_modules/core-js/internals/engine-webkit-version.js","../../../node_modules/core-js/modules/es.array.sort.js","../src/utils/debug.js","../src/utils/xgplayerTimeRange.js","../src/utils/util.js","../src/utils/sniffer.js","../src/version.js","../src/error.js","../src/events.js","../src/proxy.js","../src/utils/database.js","../src/constant.js","../../../node_modules/core-js/internals/add-to-unscopables.js","../../../node_modules/core-js/modules/es.array.find.js","../src/plugin/hooksDescriptor.js","../src/plugin/basePlugin.js","../../../node_modules/delegate/src/closest.js","../../../node_modules/delegate/src/delegate.js","../src/plugin/plugin.js","../../../node_modules/core-js/internals/iterators-core.js","../../../node_modules/core-js/internals/correct-prototype-getter.js","../../../node_modules/core-js/internals/object-get-prototype-of.js","../../../node_modules/core-js/internals/create-iterator-constructor.js","../../../node_modules/core-js/internals/define-iterator.js","../../../node_modules/core-js/modules/es.array.iterator.js","../../../node_modules/core-js/modules/es.string.iterator.js","../../../node_modules/core-js/modules/web.dom-collections.iterator.js","../src/plugin/resizeObserver.js","../src/plugin/pluginsManager.js","../src/stateClassMap.js","../src/plugin/preset.js","../src/state.js","../src/plugins/controls/index.js","../src/lang/i18n.js","../src/lang/en.js","../src/player.js","../src/defaultConfig.js","../src/plugins/logger/index.js","../src/plugins/replay/index.js","../src/plugins/poster/index.js","../src/plugins/start/index.js","../src/plugins/enter/index.js","../src/plugins/miniScreen/miniScreenIcon.js","../src/utils/draggabilly.js","../src/plugins/miniScreen/index.js","../src/plugins/pc/index.js","../../../node_modules/core-js/internals/this-number-value.js","../../../node_modules/core-js/internals/string-repeat.js","../../../node_modules/core-js/modules/es.number.to-fixed.js","../src/plugins/mobile/touch.js","../src/plugins/mobile/index.js","../src/plugins/keyboard/index.js","../src/plugins/loading/index.js","../../../node_modules/core-js/modules/es.array.find-index.js","../src/plugins/progress/innerList.js","../src/plugins/progress/index.js","../src/plugins/play/index.js","../src/plugins/fullscreen/backicon.js","../src/plugins/fullscreen/index.js","../src/plugins/time/index.js","../src/plugins/volume/index.js","../src/plugins/rotate/index.js","../src/plugins/pip/index.js","../src/plugins/playNext/index.js","../../../node_modules/downloadjs/download.js","../src/plugins/download/index.js","../src/plugins/screenShot/index.js","../src/plugins/common/optionList.js","../src/plugins/common/optionsIcon.js","../src/plugins/definition/index.js","../src/plugins/playbackRate/index.js","../src/plugins/cssFullScreen/index.js","../src/plugins/error/index.js","../src/plugins/prompt/index.js","../src/plugins/progressPreview/dotsApi.js","../src/plugins/progressPreview/index.js","../src/plugins/common/thumbnail.js","../src/plugins/progress/miniProgress.js","../src/plugins/dynamicBg/index.js","../src/lang/zh-cn.js","../src/index.umd.js","../src/presets/default.js"],"sourcesContent":["var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] < 4 ? 1 : match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var getBuiltIn = require('../internals/get-built-in');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return typeof $Symbol == 'function' && Object(it) instanceof $Symbol;\n};\n","var isObject = require('../internals/is-object');\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (pref !== 'string' && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var global = require('../internals/global');\n\nmodule.exports = function (key, value) {\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.16.2',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var toObject = require('../internals/to-object');\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty.call(toObject(it), key);\n};\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n if (NATIVE_SYMBOL && has(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = input[TO_PRIMITIVE];\n var result;\n if (exoticToPrim !== undefined) {\n if (pref === undefined) pref = 'default';\n result = exoticToPrim.call(input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : String(key);\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n if (wmhas.call(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (objectHas(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","module.exports = {};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var state;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) {\n createNonEnumerableProperty(value, 'name', key);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\nvar aFunction = require('../internals/a-function');\nvar isObject = require('../internals/is-object');\n\nvar slice = [].slice;\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!(argsLength in factories)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func -- we have no proper alternatives, IE8- only\n factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = slice.call(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = partArgs.concat(slice.call(arguments));\n return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);\n };\n if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;\n return boundFunction;\n};\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar aFunction = require('../internals/a-function');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar bind = require('../internals/function-bind');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n nativeConstruct(function () { /* empty */ });\n});\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(arg) {\n return classof(arg) == 'Array';\n};\n","var isSymbol = require('../internals/is-symbol');\n\nmodule.exports = function (argument) {\n if (isSymbol(argument)) throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push.call(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push.call(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (has(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = nativePropertyIsEnumerable.call(this, P);\n if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n result.push(AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.es/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = $toString(key);\n if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.es/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = [it];\n var index = 1;\n var $replacer;\n while (arguments.length > index) args.push(arguments[index++]);\n $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return $stringify.apply(null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","import superPropBase from \"./superPropBase.js\";\nexport default function _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = toLength(E.length);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n}\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nexports.UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n","var fails = require('./fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n","var fails = require('./fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?<a>b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$<a>c') !== 'bc';\n});\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeExec = RegExp.prototype.exec;\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n // eslint-disable-next-line max-statements -- TODO\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = patchedExec.call(raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = regexpFlags.call(re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = flags.replace('y', '');\n if (flags.indexOf('g') === -1) {\n flags += 'g';\n }\n\n strCopy = str.slice(re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && str.charAt(re.lastIndex - 1) !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = match.input.slice(charsAdded);\n match[0] = match[0].slice(charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar redefine = require('../internals/redefine');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n FORCED\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n });\n\n redefine(String.prototype, KEY, methods[0]);\n redefine(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n","var toInteger = require('../internals/to-integer');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.codePointAt` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = toString(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return nativeSplit.call(string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(toString(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (string, limit) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n if (res.done) return res.value;\n\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (UNSUPPORTED_Y ? 'g' : 'y');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? S.slice(q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","'use strict';\nvar $ = require('../internals/export');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeJoin = [].join;\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n","/* eslint-disable no-proto -- safe */\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","module.exports = {};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var anObject = require('../internals/an-object');\n\nmodule.exports = function (iterator) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) {\n return anObject(returnMethod.call(iterator)).value;\n }\n};\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = toLength(iterable.length); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && result instanceof Result) return result;\n } return new Result(false);\n }\n iterator = iterFn.call(iterable);\n }\n\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n if (typeof result == 'object' && result && result instanceof Result) return result;\n } return new Result(false);\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar bind = require('../internals/function-bind-context');\nvar html = require('../internals/html');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n // eslint-disable-next-line no-prototype-builtins -- safe\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = [];\n var argumentsLength = arguments.length;\n var i = 1;\n while (argumentsLength > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func -- spec requirement\n (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n typeof postMessage == 'function' &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = promise.then;\n notify = function () {\n then.call(promise, flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","var userAgent = require('../internals/engine-user-agent');\nvar global = require('../internals/global');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","'use strict';\nvar aFunction = require('../internals/a-function');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar isObject = require('../internals/is-object');\nvar aFunction = require('../internals/a-function');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromiseConstructorPrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromiseConstructorPrototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = new PromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var index = 0;\n // variable length - can't use forEach\n while (chain.length > index) {\n var reaction = chain[index++];\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n }\n state.reactions = [];\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n then.call(value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromiseConstructor, PROMISE);\n aFunction(executor);\n Internal.call(this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n PromiseConstructorPrototype = PromiseConstructor.prototype;\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: [],\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromiseConstructorPrototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n state.parent = true;\n state.reactions.push(reaction);\n if (state.state != PENDING) notify(state, false);\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.es/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && typeof NativePromise == 'function' && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n nativeThen.call(that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\n redefine(NativePromisePrototype, 'catch', PromiseConstructorPrototype['catch'], { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromiseConstructorPrototype);\n }\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.es/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n capability.reject.call(undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.es/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.es/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n $promiseResolve.call(C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.es/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n iterate(iterable, function (promise) {\n $promiseResolve.call(C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length === 1 ? console.error(a) : console.error(a, b);\n }\n};\n","module.exports = typeof window == 'object';\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar FunctionPrototypeToString = FunctionPrototype.toString;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !(NAME in FunctionPrototype)) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return FunctionPrototypeToString.call(this).match(nameRE)[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","var isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n typeof (NewTarget = dummy.constructor) == 'function' &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof-raw');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar isSymbol = require('../internals/is-symbol');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\n\n// Opera ~12 has broken Object#toString\nvar BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER;\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n if (isSymbol(argument)) throw TypeError('Cannot convert a Symbol value to a number');\n var it = toPrimitive(argument, 'number');\n var first, third, radix, maxCode, digits, length, index, code;\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = it.charCodeAt(0);\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = it.slice(2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = digits.charCodeAt(index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var dummy = this;\n return dummy instanceof NumberWrapper\n // check on 1..constructor(foo) case\n && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classof(dummy) != NUMBER)\n ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it);\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,' +\n // ESNext\n 'fromString,range'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(NativeNumber, key = keys[j]) && !has(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = global.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\n// TODO: Use only propper RegExpIdentifierName\nvar IS_NCG = /^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar BASE_FORCED = DESCRIPTORS &&\n (!CORRECT_NEW || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';\n }));\n\nvar handleDotAll = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var brackets = false;\n var chr;\n for (; index <= length; index++) {\n chr = string.charAt(index);\n if (chr === '\\\\') {\n result += chr + string.charAt(++index);\n continue;\n }\n if (!brackets && chr === '.') {\n result += '[\\\\s\\\\S]';\n } else {\n if (chr === '[') {\n brackets = true;\n } else if (chr === ']') {\n brackets = false;\n } result += chr;\n }\n } return result;\n};\n\nvar handleNCG = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var named = [];\n var names = {};\n var brackets = false;\n var ncg = false;\n var groupid = 0;\n var groupname = '';\n var chr;\n for (; index <= length; index++) {\n chr = string.charAt(index);\n if (chr === '\\\\') {\n chr = chr + string.charAt(++index);\n } else if (chr === ']') {\n brackets = false;\n } else if (!brackets) switch (true) {\n case chr === '[':\n brackets = true;\n break;\n case chr === '(':\n if (IS_NCG.test(string.slice(index + 1))) {\n index += 2;\n ncg = true;\n }\n result += chr;\n groupid++;\n continue;\n case chr === '>' && ncg:\n if (groupname === '' || has(names, groupname)) {\n throw new SyntaxError('Invalid capture group name');\n }\n names[groupname] = true;\n named.push([groupname, groupid]);\n ncg = false;\n groupname = '';\n continue;\n }\n if (ncg) groupname += chr;\n else result += chr;\n } return [result, named];\n};\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (isForced('RegExp', BASE_FORCED)) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = this instanceof RegExpWrapper;\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var groups = [];\n var rawPattern = pattern;\n var rawFlags, dotAll, sticky, handled, result, state;\n\n if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {\n return pattern;\n }\n\n if (patternIsRegExp || pattern instanceof RegExpWrapper) {\n pattern = pattern.source;\n if (flagsAreUndefined) flags = 'flags' in rawPattern ? rawPattern.flags : getFlags.call(rawPattern);\n }\n\n pattern = pattern === undefined ? '' : toString(pattern);\n flags = flags === undefined ? '' : toString(flags);\n rawPattern = pattern;\n\n if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {\n dotAll = !!flags && flags.indexOf('s') > -1;\n if (dotAll) flags = flags.replace(/s/g, '');\n }\n\n rawFlags = flags;\n\n if (UNSUPPORTED_Y && 'sticky' in re1) {\n sticky = !!flags && flags.indexOf('y') > -1;\n if (sticky) flags = flags.replace(/y/g, '');\n }\n\n if (UNSUPPORTED_NCG) {\n handled = handleNCG(pattern);\n pattern = handled[0];\n groups = handled[1];\n }\n\n result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);\n\n if (dotAll || sticky || groups.length) {\n state = enforceInternalState(result);\n if (dotAll) {\n state.dotAll = true;\n state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);\n }\n if (sticky) state.sticky = true;\n if (groups.length) state.groups = groups;\n }\n\n if (pattern !== rawPattern) try {\n // fails in old engines, but we have no alternatives for unsupported regex syntax\n createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);\n } catch (error) { /* empty */ }\n\n return result;\n };\n\n var proxy = function (key) {\n key in RegExpWrapper || defineProperty(RegExpWrapper, key, {\n configurable: true,\n get: function () { return NativeRegExp[key]; },\n set: function (it) { NativeRegExp[key] = it; }\n });\n };\n\n for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {\n proxy(keys[index++]);\n }\n\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n redefine(global, 'RegExp', RegExpWrapper);\n}\n\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n","'use strict';\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar $toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar flags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = $toString(R.source);\n var rf = R.flags;\n var f = $toString(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","var toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar replace = ''.replace;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue === 'string' &&\n replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1 &&\n replaceValue.indexOf('$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = toString(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n results.push(result);\n if (!global) break;\n\n var matchStr = toString(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = toString(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = toString(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","// TODO: use something more complex like timsort?\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n mergeSort(array.slice(0, middle), comparefn),\n mergeSort(array.slice(middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n var result = [];\n\n while (lindex < llength || rindex < rlength) {\n if (lindex < llength && rindex < rlength) {\n result.push(comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]);\n } else {\n result.push(lindex < llength ? left[lindex++] : right[rindex++]);\n }\n } return result;\n};\n\nmodule.exports = mergeSort;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","var UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar nativeSort = test.sort;\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aFunction(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? nativeSort.call(array) : nativeSort.call(array, comparefn);\n\n var items = [];\n var arrayLength = toLength(array.length);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) items.push(array[index]);\n }\n\n items = internalSort(items, getSortCompare(comparefn));\n itemsLength = items.length;\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) delete array[index++];\n\n return array;\n }\n});\n","\nconst XG_DEBUG_OPEN = typeof (window) !== 'undefined' && window.location && window.location.href.indexOf('xgplayerdebugger=1') > -1\n\nconst STYLE = {\n info: 'color: #525252; background-color: #90ee90;',\n error: 'color: #525252; background-color: red;',\n warn: 'color: #525252; background-color: yellow; '\n}\n\nconst XGTAG = '%c[xgplayer]'\n\nconst XG_DEBUG = {\n config: {\n debug: XG_DEBUG_OPEN ? 3 : 1\n },\n\n logInfo: function (message, ...optionalParams) {\n this.config.debug >= 3 && console.log(XGTAG, STYLE.info, message, ...optionalParams)\n },\n\n logWarn: function (message, ...optionalParams) {\n this.config.debug >= 1 && console.warn(XGTAG, STYLE.warn, message, ...optionalParams)\n },\n\n logError: function (message, ...optionalParams) {\n if (this.config.debug < 1) {\n return\n }\n const _fun = this.config.debug >= 2 ? 'trace' : 'error'\n console[_fun](XGTAG, STYLE.error, message, ...optionalParams)\n }\n}\n\nfunction bindDebug (player) {\n player.logInfo = XG_DEBUG.logInfo.bind(player)\n player.logWarn = XG_DEBUG.logWarn.bind(player)\n player.logError = XG_DEBUG.logError.bind(player)\n}\n\nexport {\n XG_DEBUG as default,\n bindDebug\n}\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 XG_DEBUG from './debug'\nimport XgplayerTimeRange from './xgplayerTimeRange'\nconst util = {}\n\n/**\n *\n * @param { string } el\n * @param { string } [tpl=]\n * @param { {[propName: string]: any }} [attrs={}]\n * @param { string } [cname='']\n * @returns { HTMLElement | null }\n */\nutil.createDom = function (el = 'div', tpl = '', attrs = {}, cname = '') {\n const dom = document.createElement(el)\n dom.className = cname\n dom.innerHTML = tpl\n Object.keys(attrs).forEach(item => {\n const key = item\n const value = attrs[item]\n if (el === 'video' || el === 'audio' || el === 'live-video') {\n if (value) {\n dom.setAttribute(key, value)\n }\n } else {\n dom.setAttribute(key, value)\n }\n })\n return dom\n}\n\n/**\n *\n * @param { string } html\n * @param { string } [attrs={}]\n * @param { string } [classname=\"\"]\n * @returns { HTMLElement | null }\n */\nutil.createDomFromHtml = function (html, attrs = {}, classname = '') {\n try {\n let doc = document.createElement('div')\n doc.innerHTML = html\n let dom = doc.children\n doc = null\n if (dom.length > 0) {\n dom = dom[0]\n classname && util.addClass(dom, classname)\n if (attrs) {\n Object.keys(attrs).forEach(key => {\n dom.setAttribute(key, attrs[key])\n })\n }\n return dom\n }\n return null\n } catch (err) {\n XG_DEBUG.logError('util.createDomFromHtml', err)\n return null\n }\n}\n\n/**\n *\n * @param { HTMLElement } el\n * @param { string } className\n * @returns { boolean }\n */\nutil.hasClass = function (el, className) {\n if (!el || !className) {\n return false\n }\n try {\n return Array.prototype.some.call(el.classList, item => item === className)\n } catch (e) {\n const orgClassName = el.className && typeof el.className === 'object' ? el.getAttribute('class') : el.className\n return orgClassName && !!orgClassName.match(new RegExp('(\\\\s|^)' + className + '(\\\\s|$)'))\n }\n // if (el.classList) {\n // return Array.prototype.some.call(el.classList, item => item === className)\n // } else {\n // const orgClassName = el.className && typeof el.className === 'object' ? el.getAttribute('class') : el.className\n // return orgClassName && !!orgClassName.match(new RegExp('(\\\\s|^)' + className + '(\\\\s|$)'))\n // }\n}\n\n/**\n *\n * @param { HTMLElement } el\n * @param { string } className\n * @returns { void }\n */\nutil.addClass = function (el, className) {\n if (!el || !className) {\n return\n }\n try {\n className.replace(/(^\\s+|\\s+$)/g, '').split(/\\s+/g).forEach(item => {\n item && el.classList.add(item)\n })\n } catch (e) {\n if (!util.hasClass(el, className)) {\n if (el.className && typeof el.className === 'object') {\n el.setAttribute('class', el.getAttribute('class') + ' ' + className)\n } else {\n el.className += ' ' + className\n }\n }\n }\n}\n\n/**\n *\n * @param { HTMLElement } el\n * @param { string } className\n * @returns { void }\n */\nutil.removeClass = function (el, className) {\n if (!el || !className) {\n return\n }\n try {\n className.replace(/(^\\s+|\\s+$)/g, '').split(/\\s+/g).forEach(item => {\n item && el.classList.remove(item)\n })\n } catch (e) {\n if (util.hasClass(el, className)) {\n className.split(/\\s+/g).forEach(item => {\n const reg = new RegExp('(\\\\s|^)' + item + '(\\\\s|$)')\n if (el.className && typeof el.className === 'object') {\n el.setAttribute('class', el.getAttribute('class').replace(reg, ' '))\n } else {\n el.className = el.className.replace(reg, ' ')\n }\n })\n }\n }\n}\n\n/**\n *\n * @param { HTMLElement } el\n * @param { string } className\n * @returns { void }\n */\nutil.toggleClass = function (el, className) {\n if (!el) {\n return\n }\n\n className.split(/\\s+/g).forEach(item => {\n if (util.hasClass(el, item)) {\n util.removeClass(el, item)\n } else {\n util.addClass(el, item)\n }\n })\n}\n\n/**\n *\n * @param { string | Object } args0\n * @param { string } [className]\n * @returns { string }\n */\nutil.classNames = function () {\n const classname = []\n for (let i = 0; i < arguments.length; i++) {\n if (util.typeOf(arguments[i]) === 'String') {\n // classname += `${arguments[i]}`\n classname.push(arguments[i])\n } else if (util.typeOf(arguments[i]) === 'Object') {\n Object.keys(arguments[i]).map(key => {\n if (arguments[i][key]) {\n // classname += key\n classname.push(key)\n }\n })\n }\n // if (i < arguments.length - 1) {\n // classname += ' '\n // }\n }\n return classname.join(' ')\n}\n\n/**\n *\n * @param { HTMLElement } el\n * @param { string } sel\n * @returns { HTMLElement }\n */\nutil.findDom = function (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 XG_DEBUG.logError('util.findDom', e)\n if (sel.indexOf('#') === 0) {\n dom = el.getElementById(sel.slice(1))\n }\n }\n return dom\n}\n\n/**\n *\n * @param { HTMLElement } dom\n * @param { string } key\n * @returns { any }\n */\nutil.getCss = function (dom, key) {\n return dom.currentStyle ? dom.currentStyle[key] : document.defaultView.getComputedStyle(dom, false)[key]\n}\n\nutil.padStart = function (str, length, pad) {\n const charstr = String(pad)\n const len = length >> 0\n let maxlen = Math.ceil(len / charstr.length)\n const chars = []\n const r = String(str)\n while (maxlen--) {\n chars.push(charstr)\n }\n return chars.join('').substring(0, len - r.length) + r\n}\n\n/**\n *\n * @param { Number } time\n * @returns { string }\n */\nutil.format = function (time) {\n if (window.isNaN(time)) {\n return ''\n }\n time = Math.round(time)\n const hour = util.padStart(Math.floor(time / 3600), 2, 0)\n const minute = util.padStart(Math.floor((time - hour * 3600) / 60), 2, 0)\n const second = util.padStart(Math.floor((time - hour * 3600 - minute * 60)), 2, 0)\n return (hour === '00' ? [minute, second] : [hour, minute, second]).join(':')\n}\n\n/**\n *\n * @param { Object } e\n * @returns { Object }\n */\nutil.event = function (e) {\n if (e.touches) {\n const 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\n/**\n *\n * @param { any } obj\n * @returns { string }\n */\nutil.typeOf = function (obj) {\n return Object.prototype.toString.call(obj).match(/([^\\s.*]+)(?=]$)/g)[0]\n}\n\n/**\n *\n * @param { any } dst\n * @param { any } src\n * @returns { any }\n */\nutil.deepCopy = function (dst, src) {\n if (util.typeOf(src) === 'Object' && util.typeOf(dst) === 'Object') {\n Object.keys(src).forEach(key => {\n // eslint-disable-next-line no-undef\n if (util.typeOf(src[key]) === 'Object' && !(src[key] instanceof Node)) {\n if (dst[key] === undefined || dst[key] === undefined) {\n dst[key] = src[key]\n } else {\n util.deepCopy(dst[key], src[key])\n }\n } else if (util.typeOf(src[key]) === 'Array') {\n dst[key] = util.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}\n\n/**\n *\n * @param { any } dst\n * @param { any } src\n * @returns { any }\n */\nutil.deepMerge = function (dst, src) {\n Object.keys(src).map(key => {\n if (util.typeOf(src[key]) === 'Array' && util.typeOf(dst[key]) === 'Array') {\n if (util.typeOf(dst[key]) === 'Array') {\n dst[key].push(...src[key])\n }\n } else if (util.typeOf(dst[key]) === util.typeOf(src[key]) && dst[key] !== null && util.typeOf(dst[key]) === 'Object' && !(src[key] instanceof window.Node)) {\n util.deepMerge(dst[key], src[key])\n } else {\n src[key] !== null && (dst[key] = src[key])\n }\n })\n return dst\n}\n\nutil.getBgImage = function (el) {\n // fix: return current page url when url is none\n const url = (el.currentStyle || window.getComputedStyle(el, null)).backgroundImage\n if (!url || url === 'none') {\n return ''\n }\n const a = document.createElement('a')\n a.href = url.replace(/url\\(\"|\"\\)/g, '')\n return a.href\n}\n\n/**\n *\n * @param { HTMLElement } dom\n * @returns { HTMLElement | null }\n */\nutil.copyDom = function (dom) {\n if (dom && dom.nodeType === 1) {\n const 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\n/**\n *\n * @param { any } context\n * @param { string } eventName\n * @param { function } intervalFunc\n * @param { number } frequency\n */\nutil.setInterval = function (context, eventName, intervalFunc, frequency) {\n if (!context._interval[eventName]) {\n context._interval[eventName] = setInterval(intervalFunc.bind(context), frequency)\n }\n}\n\n/**\n *\n * @param { any } context\n * @param { string } eventName\n * @returns { void }\n */\nutil.clearInterval = function (context, eventName) {\n clearInterval(context._interval[eventName])\n context._interval[eventName] = null\n}\n\n/**\n *\n * @param { any } context\n * @param { function } fun\n * @param { number } time\n * @returns { number }\n */\nutil.setTimeout = function (context, fun, time) {\n if (!context._timers) {\n context._timers = []\n }\n const id = setTimeout(() => {\n fun()\n util.clearTimeout(context, id)\n }, time)\n context._timers.push(id)\n return id\n}\n\n/**\n *\n * @param { any } context\n * @param { number } id\n */\nutil.clearTimeout = function (context, id) {\n const { _timers } = context\n if (util.typeOf(_timers) === 'Array') {\n for (let i = 0; i < _timers.length; i++) {\n if (_timers[i] === id) {\n _timers.splice(i, 1)\n clearTimeout(id)\n break\n }\n }\n } else {\n clearTimeout(id)\n }\n}\n\n/**\n *\n * @param { any } context\n */\nutil.clearAllTimers = function (context) {\n const { _timers } = context\n if (util.typeOf(_timers) === 'Array') {\n _timers.map(item => {\n clearTimeout(item)\n })\n context._timerIds = []\n }\n}\n\n/**\n *\n * @param { string } name\n * @param { string } imgUrl\n * @param { number } [width]\n * @param { number } [height]\n * @returns { HTMLElement }\n */\nutil.createImgBtn = function (name, imgUrl, width, height) {\n const btn = util.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 = parseFloat(width.slice(0, width.indexOf(item)).trim())\n h = parseFloat(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\n/**\n *\n * @param { string } hex\n * @param { string | number } alpha\n * @returns { string }\n */\nutil.Hex2RGBA = function (hex, alpha) {\n const rgb = [] // 定义rgb数组\n // eslint-disable-next-line no-useless-escape\n if (/^\\#[0-9A-F]{3}$/i.test(hex)) {\n let sixHex = '#'\n hex.replace(/[0-9A-F]/ig, function (kw) {\n sixHex += kw + kw\n })\n hex = sixHex\n }\n if (/^#[0-9A-F]{6}$/i.test(hex)) {\n hex.replace(/[0-9A-F]{2}/ig, function (kw) {\n rgb.push(parseInt(kw, 16))\n })\n return `rgba(${rgb.join(',')}, ${alpha})`\n } else {\n return 'rgba(255, 255, 255, 0.1)'\n }\n}\n\n/**\n *\n * @returns { HTMLElement | null }\n */\nutil.getFullScreenEl = function () {\n return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement\n}\n\n/**\n * @param { any }\n * @returns { boolean }\n */\nutil.checkIsFunction = function (fun) {\n return fun && typeof fun === 'function'\n}\n\n/**\n * @param { any }\n * @returns { boolean }\n */\nutil.checkIsObject = function (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * @param { HTMLElement }\n */\nutil.hide = function (dom) {\n dom.style.display = 'none'\n}\n\n/**\n * @param { HTMLElement }\n * @param { block | flex | inline-block | inline-flex } [display]\n */\nutil.show = function (dom, display) {\n dom.style.display = display || 'block'\n}\n\n/**\n *\n * @param { any } val\n * @returns { boolean }\n */\nutil.isUndefined = function (val) {\n if (typeof val === 'undefined' || val === null) {\n return true\n }\n}\n\n/**\n *\n * @param { HTMLElement } dom\n * @param { string } [text]\n * @returns\n */\nutil.setStyleFromCsstext = function (dom, text) {\n // dom.setAttribute(style, text)\n if (!text) {\n return\n }\n if (util.typeOf(text) === 'String') {\n const styleArr = text.replace(/\\s+/g, '').split(';')\n styleArr.map(item => {\n if (item) {\n const arr = item.split(':')\n if (arr.length > 1) {\n dom.style[arr[0]] = arr[1]\n }\n }\n })\n } else {\n Object.keys(text).map(key => {\n dom.style[key] = text[key]\n })\n }\n}\n\n/**\n *\n * @param { string } key\n * @param { Array<any>} list\n * @returns { boolean }\n */\nfunction checkIsIn (key, list) {\n for (let i = 0, len = list.length; i < len; i++) {\n if (key.indexOf(list[i]) > -1) {\n return true\n }\n }\n return false\n}\n\n/**\n *\n * @param { HTMLElement } dom\n * @param { Array<string> } [list] attribute names to filter\n * @returns { {} | {[propName: string]: any;} }\n */\nutil.filterStyleFromText = function (dom, list = ['width', 'height', 'top', 'left', 'bottom', 'right', 'position', 'z-index', 'padding', 'margin', 'transform']) {\n const _cssText = dom.style.cssText\n if (!_cssText) {\n return {}\n }\n const styleArr = _cssText.replace(/\\s+/g, '').split(';')\n const ret = {}\n const remain = {}\n styleArr.map(item => {\n if (item) {\n const arr = item.split(':')\n if (arr.length > 1) {\n if (checkIsIn(arr[0], list)) {\n ret[arr[0]] = arr[1]\n // dom.style[arr[0]] = 'initial'\n } else {\n remain[arr[0]] = arr[1]\n }\n }\n }\n })\n dom.setAttribute('style', '')\n Object.keys(remain).map(key => {\n // netStyle += `${key}: ${remain[key]};`\n dom.style[key] = remain[key]\n })\n return ret\n}\n\n/**\n *\n * @param { HTMLElement } dom\n * @returns { {} | {[propName: string]: any;} }\n */\nutil.getStyleFromCsstext = function (dom) {\n const _cssText = dom.style.cssText\n if (!_cssText) {\n return {}\n }\n const styleArr = _cssText.replace(/\\s+/g, '').split(';')\n const ret = {}\n styleArr.map(item => {\n if (item) {\n const arr = item.split(':')\n if (arr.length > 1) {\n ret[arr[0]] = arr[1]\n }\n }\n })\n return ret\n}\n\nutil.preloadImg = (url, onload = () => {}, onerror = () => {}) => {\n let img = new window.Image()\n if (img.complete) {\n // 图片已经加载过了,可以使用图片\n // do something here\n // img = null\n onload && onload()\n } else {\n img.onload = (e) => {\n img = null\n onload && onload(e)\n }\n img.onerror = (e) => {\n img = null\n onerror && onerror(e)\n }\n }\n img.src = url\n}\n\nutil.stopPropagation = (e) => {\n if (e) {\n e.stopPropagation()\n e.cancelable && e.preventDefault()\n }\n}\n\nutil.scrollTop = function () {\n return window.pageYOffset ||\n document.documentElement.scrollTop ||\n document.body.scrollTop ||\n 0\n}\n\nutil.scrollLeft = function () {\n return window.pageXOffset ||\n document.documentElement.scrollLeft ||\n document.body.scrollLeft ||\n 0\n}\n\nutil.checkTouchSupport = function () {\n return 'ontouchstart' in window\n}\n\nutil.getBuffered2 = (vbuffered, maxHoleDuration = 0.5) => { // ref: hls.js\n const 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 const diff = a.start - b.start\n if (diff) {\n return diff\n } else {\n return b.end - a.end\n }\n })\n let buffered2 = []\n if (maxHoleDuration) {\n for (let i = 0; i < buffered.length; i++) {\n const buf2len = buffered2.length\n if (buf2len) {\n const buf2end = buffered2[buf2len - 1].end\n if ((buffered[i].start - buf2end) < maxHoleDuration) {\n if (buffered[i].end > buf2end) {\n buffered2[buf2len - 1].end = buffered[i].end\n }\n } else {\n buffered2.push(buffered[i])\n }\n } else {\n buffered2.push(buffered[i])\n }\n }\n } else {\n buffered2 = buffered\n }\n return new XgplayerTimeRange(buffered2)\n}\n\n/**\n * @description css中有zoom的时候,位移会等比缩放,但是元素的宽高不会等比缩放,所以通过该api做统一\n * https://bugs.chromium.org/p/chromium/issues/detail?id=429140#c8\n * @param {Events} e\n * @param {number} zoom\n * @returns\n */\nutil.getEventPos = function (e, zoom = 1) {\n return {\n x: e.x / zoom,\n y: e.y / zoom,\n clientX: e.clientX / zoom,\n clientY: e.clientY / zoom,\n offsetX: e.offsetX / zoom,\n offsetY: e.offsetY / zoom,\n pageX: e.pageX / zoom,\n pageY: e.pageY / zoom\n }\n}\n\nutil.requestAnimationFrame = function (callback) {\n const _fun = window.requestAnimationFrame ||\n // Older versions Chrome/Webkit\n window.webkitRequestAnimationFrame ||\n\n // Firefox < 23\n window.mozRequestAnimationFrame ||\n\n // opera\n window.oRequestAnimationFrame ||\n\n // ie\n window.msRequestAnimationFrame\n if (_fun) {\n return _fun(callback)\n }\n}\n\nutil.cancelAnimationFrame = function (frameId) {\n const _fun = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.cancelRequestAnimationFrame\n _fun && _fun(frameId)\n}\n\nexport default util\n","/**\n * @typedef {{\n * device: 'pc' | 'mobile',\n * browser: 'ie' | 'firefox' | 'chrome' | 'opera' | 'safari',\n * os: {\n * isTablet: boolean,\n * isPhone: boolean,\n * isIpad: boolean,\n * isIos: boolean,\n * isAndroid: boolean,\n * isPc: boolean,\n * isSymbian: boolean,\n * isWindowsPhone: boolean,\n * isFireFox: boolean\n * },\n * isWeixin: boolean\n * }} ISniffer\n */\n\nconst VERSION_REG = {\n android: /(Android)\\s([\\d.]+)/,\n ios: /(Version)\\/([\\d.]+)/\n}\n/**\n * @type ISniffer\n */\nconst sniffer = {\n get device () {\n const r = sniffer.os\n return r.isPc ? 'pc' : 'mobile'\n // return r.isPc ? 'pc' : r.isTablet ? 'tablet' : 'mobile'\n },\n get browser () {\n if (typeof navigator === 'undefined') {\n return ''\n }\n const ua = navigator.userAgent.toLowerCase()\n const reg = {\n ie: /rv:([\\d.]+)\\) like gecko/,\n firefox: /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 get os () {\n if (typeof navigator === 'undefined') {\n return {}\n }\n const ua = navigator.userAgent\n const isWindowsPhone = /(?:Windows Phone)/.test(ua)\n const isSymbian = /(?:SymbianOS)/.test(ua) || isWindowsPhone\n const isAndroid = /(?:Android)/.test(ua)\n const isFireFox = /(?:Firefox)/.test(ua)\n const isTablet = /(?:iPad|PlayBook)/.test(ua) || (isAndroid && !/(?:Mobile)/.test(ua)) || (isFireFox && /(?:Tablet)/.test(ua))\n const isPhone = /(?:iPhone)/.test(ua) && !isTablet\n const isPc = !isPhone && !isAndroid && !isSymbian && !isTablet\n const isIpad = /(?:iPad|PlayBook)/.test(ua)\n return {\n isTablet,\n isPhone,\n isIpad,\n isIos: isPhone || isIpad,\n isAndroid,\n isPc,\n isSymbian,\n isWindowsPhone,\n isFireFox\n }\n },\n\n get osVersion () {\n const ua = navigator.userAgent\n let reg = ''\n // ios\n if (/(?:iPhone)|(?:iPad|PlayBook)/.test(ua)) {\n reg = VERSION_REG.ios\n // android\n } else {\n reg = VERSION_REG.android\n }\n const _match = reg ? reg.exec(ua) : []\n if (_match && _match.length >= 3) {\n const version = _match[2].split('.')\n return version.length > 0 ? parseInt(version[0]) : 0\n }\n return 0\n },\n\n get isWeixin () {\n if (typeof navigator === 'undefined') {\n return false\n }\n const reg = /(micromessenger)\\/([\\d.]+)/\n const match = reg.exec(navigator.userAgent.toLocaleLowerCase())\n if (match) {\n return true\n }\n }\n}\n\nexport default sniffer\n","/**\n * @type {string}\n * */\nexport default __VERSION__\n","// eslint-disable-next-line no-undef\nimport version from './version'\n/**\n * @typedef { import ('./player').default } Player\n */\n\nconst ERROR_TYPE_MAP = {\n 1: 'network',\n 2: 'network',\n 3: 'decoder',\n 4: 'format'\n}\n\nconst ErrorTypes = {\n network: {\n code: 1\n },\n mse: {\n code: 2\n },\n parse: {\n code: 3\n },\n format: {\n code: 4\n },\n decoder: {\n code: 5\n },\n runtime: {\n code: 6\n },\n timeout: {\n code: 7\n },\n other: {\n code: 8\n }\n}\n\n/**\n * @typedef { {\n * playerVersion: string,\n * currentTime: number,\n * duration: number,\n * ended: boolean,\n * readyState: number,\n * networkState: number,\n * src: any,\n * errorType: string,\n * errorCode: number,\n * message: string,\n * mediaError?: {\n * code: number,\n * message?: string\n * },\n * originError?: any,\n * url?: any,\n * [propName: string]: any\n * } } IError\n */\n\n/**\n * @type { IError }\n */\nclass Errors {\n /**\n *\n * @param { Player } player\n * @param { {\n * errorType: string,\n * errorCode: number,\n * errorMessage: string,\n * originError: any,\n * ext: { [propName: string]: any; }\n * } } errorInfo\n * @returns\n */\n constructor (player, errorInfo = { errorType: '', errorCode: 0, errorMessage: '', originError: '', ext: {} }) {\n const ERROR_TYPES = player && player.i18n ? player.i18n.ERROR_TYPES : null\n if (player.video) {\n const mediaError = player.video.error || {}\n const { duration, currentTime, ended, src } = player\n const { readyState, networkState } = player.video\n const r = {\n playerVersion: version,\n currentTime,\n duration,\n ended,\n readyState,\n networkState,\n src,\n errorType: errorInfo.errorType,\n errorCode: errorInfo.errorCode || mediaError.code,\n message: errorInfo.errorMessage || mediaError.message,\n mediaError,\n originError: errorInfo.originError ? errorInfo.originError.stack : ''\n }\n errorInfo.ext && Object.keys(errorInfo.ext).map(key => {\n r[key] = errorInfo.ext[key]\n })\n return r\n } else {\n if (arguments.length > 1) {\n const r = {\n playerVersion: version,\n domain: document.domain\n }\n const arr = ['errorType', 'currentTime', 'duration', 'networkState', 'readyState', 'src', 'currentSrc', 'ended', 'errd', 'errorCode', 'mediaError']\n for (let i = 0; i < arguments.length; i++) {\n r[arr[i]] = arguments[i]\n }\n r.ex = ERROR_TYPES ? (ERROR_TYPES[arguments[0]] || {}).msg : ''// 补充信息\n return r\n }\n }\n }\n}\n\nexport {\n Errors as default,\n ErrorTypes,\n ERROR_TYPE_MAP\n}\n","export const PLAY = 'play'\nexport const PLAYING = 'playing'\nexport const ENDED = 'ended'\nexport const PAUSE = 'pause'\nexport const ERROR = 'error'\nexport const SEEKING = 'seeking'\nexport const SEEKED = 'seeked'\nexport const TIME_UPDATE = 'timeupdate'\nexport const WAITING = 'waiting'\nexport const CANPLAY = 'canplay'\nexport const CANPLAY_THROUGH = 'canplaythrough'\nexport const DURATION_CHANGE = 'durationchange'\nexport const VOLUME_CHANGE = 'volumechange'\nexport const LOADED_DATA = 'loadeddata'\nexport const RATE_CHANGE = 'ratechange'\nexport const PROGRESS = 'progress'\nexport const LOAD_START = 'loadstart'\nexport const EMPTIED = 'emptied'\nexport const STALLED = 'stalled'\nexport const SUSPEND = 'suspend'\nexport const ABORT = 'abort'\n\n// player events\nexport const BUFFER_CHANGE = 'bufferedChange'\nexport const PLAYER_FOCUS = 'focus'\nexport const PLAYER_BLUR = 'blur'\nexport const READY = 'ready'\nexport const URL_NULL = 'urlNull'\nexport const AUTOPLAY_STARTED = 'autoplay_started'\nexport const AUTOPLAY_PREVENTED = 'autoplay_was_prevented'\nexport const COMPLETE = 'complete'\nexport const REPLAY = 'replay'\nexport const DESTROY = 'destroy'\nexport const URL_CHANGE = 'urlchange'\n\n// screen change evnets\nexport const FULLSCREEN_CHANGE = 'fullscreen_change'\nexport const CSS_FULLSCREEN_CHANGE = 'cssFullscreen_change'\nexport const MINI_STATE_CHANGE = 'mini_state_change'\n\nexport const DEFINITION_CHANGE = 'definition_change'\nexport const BEFORE_DEFINITION_CHANGE = 'before_definition_change'\nexport const AFTER_DEFINITION_CHANGE = 'after_definition_change'\n\n// transmuxer events\nexport const SEI_PARSED = 'SEI_PARSED'\n\nexport const RETRY = 'retry'\n\n// 容器宽高变化\nexport const VIDEO_RESIZE = 'video_resize'\n\n// picture-in-picture状态变化\nexport const PIP_CHANGE = 'pip_change'\n\n// rotate change\nexport const ROTATE = 'rotate'\n\n// screenShot\nexport const SCREEN_SHOT = 'screenShot'\n\n// play next\nexport const PLAYNEXT = 'playnext'\n\nexport const SHORTCUT = 'shortcut'\n\nexport const XGLOG = 'xglog'\n\nexport const USER_ACTION = 'user_action'\n\nexport const USER_ACTION1 = 'user_action1'\n","import EventEmitter from 'eventemitter3'\nimport Util from './utils/util'\nimport Sniffer from './utils/sniffer'\nimport Errors, { ERROR_TYPE_MAP } from './error'\nimport { URL_CHANGE, DESTROY, WAITING } from './events'\n/**\n * @typedef { import ('eventemitter3') } EventEmitter\n */\n/**\n * @typedef { {\n * duration: number,\n * currentTime: number,\n * muted: boolean,\n * defaultMuted: boolean,\n * volume: number,\n * playbackRate: number,\n * defaultPlaybackRate: number,\n * autoplay: boolean,\n * readonly paused: boolean,\n * readonly ended: boolean,\n * readonly networkState: number,\n * readonly readyState: number,\n * readonly seeking: boolean,\n * src: any,\n * play: Function,\n * pause: Function,\n * } } IVideoProxy\n */\nconst VIDEO_EVENTS = ['play', 'playing', 'pause', 'ended', 'error', 'seeking', 'seeked',\n 'timeupdate', 'waiting', 'canplay', 'canplaythrough', 'durationchange', 'volumechange',\n 'loadeddata', 'loadstart', 'emptied', 'ratechange', 'progress', 'stalled', 'suspend', 'abort']\n\nfunction emitEvents (eventKey, e) {\n if (!this || !this.emit) {\n return\n }\n if (eventKey === 'error') {\n this.errorHandler(eventKey)\n } else {\n this.emit(eventKey, e)\n }\n}\n\nfunction getHandler (eventName, player) {\n const funName = `on${eventName.charAt(0).toUpperCase()}${eventName.slice(1)}`\n if (player[funName] && typeof player[funName] === 'function') {\n player.on(eventName, player[funName])\n }\n return (e) => {\n const eventKey = eventName\n e.player = player\n e.eventName = eventName\n\n if (eventKey === 'timeupdate') {\n player._currentTime = player.video && player.video.currentTime\n }\n\n if (eventName === 'durationchange') {\n player._duration = player.video.duration\n }\n\n // 执行video相关事件中间件能力\n if (player.videoEventMiddleware[eventName]) {\n const callback = emitEvents.bind(player)\n try {\n player.videoEventMiddleware[eventName].call(player, e, callback)\n } catch (e) {\n emitEvents.call(player, eventKey, e)\n throw e\n }\n } else {\n emitEvents.call(player, eventKey, e)\n }\n }\n}\n/**\n * @extends { EventEmitter }\n */\nclass VideoProxy extends EventEmitter {\n /**\n * @param {any} options\n */\n constructor (options) {\n super(options)\n /**\n * @private\n */\n this._hasStart = false\n /**\n * @private\n */\n this._currentTime = 0\n /**\n * @private\n */\n this._duration = 0\n /**\n * @description 初始化时添加在video上的属性集合\n * @type { {[propName: string]: any; } }\n */\n this.videoConfig = Object.assign({}, {\n controls: false,\n autoplay: options.autoplay,\n playsinline: options.playsinline,\n 'x5-playsinline': options.playsinline,\n 'webkit-playsinline': options.playsinline,\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 }, options.videoConfig, options.videoAttributes)\n /**\n * @description Compatible with WeChat webview\n * \"x5-playsinline' and 'x5-video-player-type' only one needs to exist\n * @doc https://x5.tencent.com/docs/video.html\n */\n const playerType = options['x5-video-player-type'] || options.x5VideoPlayerType\n if (Sniffer.isWeixin && Sniffer.os.isAndroid && playerType) {\n this.videoConfig['x5-video-player-type'] = playerType\n delete this.videoConfig.playsinline\n delete this.videoConfig['webkit-playsinline']\n delete this.videoConfig['x5-playsinline']\n }\n\n if (options.loop) {\n this.videoConfig.loop = 'loop'\n }\n\n /**\n * @type { HTMLVideoElement | HTMLAudioElement | HTMLElement | IVideoProxy | null }\n */\n this.video = Util.createDom(this.videoConfig.mediaType, '', this.videoConfig, '')\n\n if (options.defaultPlaybackRate) {\n this.video.defaultPlaybackRate = this.video.playbackRate = options.defaultPlaybackRate\n }\n\n if (Util.typeOf(options.volume) === 'Number') {\n this.volume = options.volume\n }\n\n if (options.autoplayMuted) {\n this.video.muted = true\n }\n if (options.autoplay) {\n this.video.autoplay = true\n }\n\n /**\n * @private\n */\n this._interval = {}\n /**\n * @readonly\n */\n this.videoEventMiddleware = {}\n this.attachVideoEvents()\n }\n\n /**\n * @description set middleware\n * @param { {[propName: string]: (e: {player: any, eventName: string}, callback: () => void) => any} } middlewares\n */\n setEventsMiddleware (middlewares) {\n Object.keys(middlewares).map(key => {\n this.videoEventMiddleware[key] = middlewares[key]\n })\n }\n\n /**\n * @description remove middleware\n * @param { { [propName: string]: (e: {player: any, eventName: string}, callback: () => void) => any} } middlewares\n */\n removeEventsMiddleware (middlewares) {\n Object.keys(middlewares).map(key => {\n delete this.videoEventMiddleware[key]\n })\n }\n\n /**\n * Add media eventListener to the video object\n * @param { any } [video]\n */\n attachVideoEvents (video) {\n if (!this.evHandlers) {\n /**\n * @private\n */\n this._evHandlers = VIDEO_EVENTS.map(item => {\n return {\n [item]: getHandler(item, this)\n }\n })\n }\n if (!video) {\n video = this.video\n }\n this._evHandlers.map(item => {\n const eventKey = Object.keys(item)[0]\n video.addEventListener(eventKey, item[eventKey], false)\n })\n }\n\n /**\n * @description remove media eventListener from the video object\n * @param { any } [video]\n */\n detachVideoEvents (video) {\n if (!video) {\n video = this.video\n }\n this._evHandlers.map(item => {\n const eventKey = Object.keys(item)[0]\n video.removeEventListener(Object.keys(item)[0], item[eventKey], false)\n })\n }\n\n /**\n * @description Media Error handler\n * @param { string } eventName\n */\n errorHandler (name, error = null) {\n if (this.video && (this.video.error || error)) {\n const _e = this.video.error || error\n const type = _e.code ? ERROR_TYPE_MAP[_e.code] : 'other'\n this.emit(name, new Errors(this, {\n errorType: type,\n errorCode: _e.code,\n errorMessage: _e.message || ''\n }))\n }\n }\n\n destroy () {\n if (this.video) {\n if (this.video.pause) {\n this.video.pause()\n this.video.muted = true\n }\n this.video.removeAttribute('src') // empty source\n this.video.load()\n }\n this._currentTime = 0\n this._duration = 0\n this.videoConfig = null\n for (const k in this._interval) {\n clearInterval(this._interval[k])\n this._interval[k] = null\n }\n this.emit(DESTROY)\n this.detachVideoEvents()\n this._evHandlers.map(item => {\n const eventKey = Object.keys(item)[0]\n const funName = `on${eventKey.charAt(0).toUpperCase()}${eventKey.slice(1)}`\n if (typeof this[funName] === 'function') {\n this.off(eventKey, this[funName])\n }\n })\n this._evHandlers = null\n this.video = null\n this.videoEventMiddleware = {}\n this.removeAllListeners()\n }\n\n /**\n *\n * @returns { Promise<void> | null }\n */\n play () {\n return this.video ? this.video.play() : null\n }\n\n pause () {\n this.video && this.video.pause()\n }\n\n /**\n *\n * @param { string } type\n * @returns { boolean }\n */\n canPlayType (type) {\n return this.video.canPlayType(type)\n }\n\n /**\n *\n * @param { any } [buffered]\n * @returns { Array<number> }\n */\n getBufferedRange (buffered) {\n const range = [0, 0]\n if (!this.video) {\n return range\n }\n if (!buffered) {\n buffered = this.video.buffered\n }\n const currentTime = this.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\n /**\n * @type { boolean }\n * @description 设置/返回 自动播放属性\n */\n set autoplay (isTrue) {\n this.video.autoplay = isTrue\n }\n\n get autoplay () {\n return this.video.autoplay\n }\n\n /**\n * @type { TimeRanges }\n * @description 返回当前缓冲的TimeRange对象集合\n */\n get buffered () {\n return this.video.buffered\n }\n\n /**\n * @type { Array<{start: number, end: number}> }\n * @description 返回当前自定义的缓存列表\n */\n get buffered2 () {\n return Util.getBuffered2(this.video.buffered)\n }\n\n /**\n * @type { {start: number, end: number} }\n */\n get bufferedPoint () {\n const _buffered = this.video.buffered\n const ret = {\n start: 0,\n end: 0\n }\n if (!_buffered || _buffered.length === 0) {\n return ret\n }\n for (let i = 0; i < _buffered.length; i++) {\n if ((_buffered.start(i) <= this.currentTime || _buffered.start(i) < 0.1) && _buffered.end(i) >= this.currentTime) {\n return {\n start: _buffered.start(i),\n end: _buffered.end(i)\n }\n }\n }\n return ret\n }\n\n /**\n * @type { string}\n * @description 设置/返回是否跨域\n * */\n get crossOrigin () {\n return this.video.crossOrigin\n }\n\n set crossOrigin (isTrue) {\n this.video.crossOrigin = isTrue\n }\n\n /**\n * @type { string }\n * @description 设置/返回视频播放地址\n * */\n get currentSrc () {\n return this.video.currentSrc\n }\n\n set currentSrc (src) {\n this.video.currentSrc = src\n }\n\n /**\n * @type { number }\n * @description 设置/返回视频当前播放时间\n * */\n get currentTime () {\n return this.video.currentTime !== undefined ? this.video.currentTime : this._currentTime\n }\n\n set currentTime (time) {\n this.video.currentTime = time\n }\n\n /**\n * @type { boolean }\n * 设置/返回视频默认静音\n * */\n get defaultMuted () {\n return this.video.defaultMuted\n }\n\n set defaultMuted (isTrue) {\n this.video.defaultMuted = isTrue\n }\n\n /**\n * @type { number }\n * @description 返回视频时长,单位:s\n * */\n get duration () {\n return this._duration\n }\n\n /**\n * @type { boolean }\n * @description 回视频是否播放结束\n * */\n get ended () {\n return this.video.ended\n }\n\n /**\n * @type { MediaError }\n * @description the player current error\n */\n get error () {\n return this.video.error\n }\n\n /**\n * @type { string }\n * @description return error description text\n */\n get errorNote () {\n const err = this.video.error\n if (!err) {\n return ''\n }\n const status = [\n 'MEDIA_ERR_ABORTED',\n 'MEDIA_ERR_NETWORK',\n 'MEDIA_ERR_DECODE',\n 'MEDIA_ERR_SRC_NOT_SUPPORTED'\n ]\n return status[err.code - 1]\n }\n\n /**\n * @type { boolean }\n * @description 否开启了循环播放\n */\n get loop () {\n return this.video.loop\n }\n\n set loop (isTrue) {\n this.video.loop = isTrue\n }\n\n /**\n * @type { boolean }\n * @description 静音\n */\n get muted () {\n return this.video.muted\n }\n\n set muted (isTrue) {\n this.video.muted = isTrue\n }\n\n /**\n * @type { number }\n * @description 返回视频的当前网络状态\n */\n get networkState () {\n return this.video.networkState\n }\n\n /**\n * @type { boolean }\n * @description 回当前视频是否是暂停状态\n */\n get paused () {\n return this.video.paused\n }\n\n /**\n * @type { number }\n * @description 返回/设置倍速\n */\n get playbackRate () {\n return this.video.playbackRate\n }\n\n set playbackRate (rate) {\n this.video.defaultPlaybackRate = rate\n this.video.playbackRate = rate\n }\n\n /**\n * @type { TimeRanges }\n */\n get played () {\n return this.video.played\n }\n\n /**\n * @type { boolean }\n */\n get preload () {\n return this.video.preload\n }\n\n set preload (isTrue) {\n this.video.preload = isTrue\n }\n\n /**\n * @type { string }\n * @description 回视频的就绪状态\n */\n get readyState () {\n return this.video.readyState\n }\n\n /**\n * @type { boolean }\n * @description 当前视频是否可以seek\n */\n get seekable () {\n return this.video.seekable\n }\n\n /**\n * @type { boolean }\n * @description 当前视频是否处于seeking状态下\n */\n get seeking () {\n return this.video.seeking\n }\n\n /**\n * @type { any }\n * @description 设置/返回当前视频的地址\n */\n get src () {\n return this.video.src\n }\n\n set src (url) {\n this.emit(URL_CHANGE, url)\n this.emit(WAITING)\n // this.video.pause()\n this._currentTime = 0\n this._duration = 0\n // Some firefox versions firefox Cannot recognize currentSrc of type Blob\n if (/^blob/.test(this.video.currentSrc) || /^blob/.test(this.video.src)) { // has transmuxer core\n this.onWaiting()\n return\n }\n this.video.src = url\n }\n\n /**\n * @type { number }\n * @description 设置/返回视频的音量\n */\n get volume () {\n return this.video.volume\n }\n\n set volume (vol) {\n this.video.volume = vol\n }\n\n /** ******************* 以下api只有申明作用,具体实现依赖EventEmitter ******************/\n\n /**\n *\n * @param { string } event\n * @param { any } [data]\n * @returns\n */\n emit (event, data, ...args) {\n super.emit(event, data, ...args)\n }\n\n /**\n *\n * @param { string } event\n * @param { (data?: any) => any } callback\n * @returns\n */\n on (event, callback, ...args) {\n super.on(event, callback, ...args)\n }\n\n /**\n *\n * @param { string } event\n * @param { (data?: any) => any } callback\n * @returns\n */\n once (event, callback, ...args) {\n super.once(event, callback, ...args)\n }\n\n /**\n *\n * @param { string } event\n * @param { (data?: any) => any } callback\n * @returns\n */\n off (event, callback, ...args) {\n super.off(event, callback, ...args)\n }\n\n offAll () {\n super.removeAllListeners()\n }\n}\n\nexport default VideoProxy\n","class INDEXDB {\n constructor (mydb = { name: 'xgplayer', version: 1, db: null, ojstore: { name: 'xg-m4a', keypath: 'vid' } }) {\n this.indexedDB = window.indexedDB || window.webkitindexedDB\n this.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange // 键范围\n this.myDB = mydb\n }\n\n openDB (callback) {\n // 建立或打开数据库,建立对象存储空间(ObjectStore)\n const self = this\n const version = this.myDB.version || 1\n const request = self.indexedDB.open(self.myDB.name, version)\n request.onerror = function (e) {\n // console.log('e.currentTarget.error.message')\n }\n request.onsuccess = e => {\n this.myDB.db = e.target.result\n // console.log('成功建立并打开数据库:' + this.myDB.name + ' version' + this.myDB.version)\n callback.call(self)\n }\n request.onupgradeneeded = e => {\n const db = e.target.result\n // eslint-disable-next-line no-unused-vars\n const transaction = e.target.transaction\n // eslint-disable-next-line no-unused-vars\n let store\n if (!db.objectStoreNames.contains(self.myDB.ojstore.name)) {\n // 没有该对象空间时创建该对象空间\n // eslint-disable-next-line no-unused-vars\n store = db.createObjectStore(self.myDB.ojstore.name, { keyPath: self.myDB.ojstore.keypath })\n // console.log('成功建立对象存储空间:' + this.myDB.ojstore.name)\n }\n }\n }\n\n deletedb () {\n // 删除数据库\n const self = this\n self.indexedDB.deleteDatabase(this.myDB.name)\n // console.log(this.myDB.name + '数据库已删除')\n }\n\n closeDB () {\n // 关闭数据库\n this.myDB.db.close()\n // console.log('数据库已关闭')\n }\n\n addData (storename, data) {\n // 添加数据,重复添加会报错\n const store = this.myDB.db.transaction(storename, 'readwrite').objectStore(storename)\n let request\n for (let i = 0; i < data.length; i++) {\n request = store.add(data[i])\n request.onerror = function () {\n // console.error('add添加数据库中已有该数据')\n }\n request.onsuccess = function () {\n // console.log('add添加数据已存入数据库')\n }\n }\n }\n\n putData (storename, data) {\n // 添加数据,重复添加会更新原有数据\n const store = this.myDB.db.transaction(storename, 'readwrite').objectStore(storename)\n let request\n for (let i = 0; i < data.length; i++) {\n request = store.put(data[i])\n request.onerror = function () {\n // console.error('put添加数据库中已有该数据')\n }\n request.onsuccess = function () {\n // console.log('put添加数据已存入数据库')\n }\n }\n }\n\n getDataByKey (storename, key, callback) {\n const self = this\n // 根据存储空间的键找到对应数据\n const store = this.myDB.db.transaction(storename, 'readwrite').objectStore(storename)\n const request = store.get(key)\n request.onerror = function () {\n // console.error('getDataByKey error')\n callback.call(self, null)\n }\n request.onsuccess = function (e) {\n const result = e.target.result\n // console.log('查找数据成功')\n callback.call(self, result)\n }\n }\n\n deleteData (storename, key) {\n // 删除某一条记录\n const store = this.myDB.db.transaction(storename, 'readwrite').objectStore(storename)\n store.delete(key)\n // console.log('已删除存储空间' + storename + '中' + key + '记录')\n }\n\n clearData (storename) {\n // 删除存储空间全部记录\n const store = this.myDB.db.transaction(storename, 'readwrite').objectStore(storename)\n store.clear()\n // console.log('已删除存储空间' + storename + '全部记录')\n }\n}\n\nexport default INDEXDB\n","export const FULLSCREEN_EVENTS = ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange']\n\nexport const GET_FULLSCREEN_API = ['requestFullscreen', 'webkitRequestFullscreen', 'mozRequestFullScreen', 'msRequestFullscreen']\n\nexport const EXIT_FULLSCREEN_API = ['exitFullscreen', 'webkitExitFullscreen', 'mozCancelFullScreen', 'msExitFullscreen']\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","function callHandler (obj, handler, next, ...args) {\n const ret = handler.call(obj, ...args)\n if (!next || typeof next !== 'function') {\n return\n }\n if (ret && ret.then) {\n ret.then((...args) => {\n next.call(obj, ...args)\n })\n } else {\n next.call(obj, ...args)\n }\n}\n\n/**\n * 给某个处理函数添加hook能力\n * @param { string } hookName\n * @param { Function } handler\n * @param { { pre?: any, next?:any } } preset\n * {\n * pre: () => { // run beafore hook},\n * next: () => { // run after hook return}\n * }\n */\nfunction hook (hookName, handler, preset = { pre: null, next: null }) {\n if (!this.__hooks) {\n this.__hooks = {}\n }\n !this.__hooks[hookName] && (this.__hooks[hookName] = null)\n return function () {\n if (preset.pre) {\n try {\n preset.pre.call(this, ...arguments)\n } catch (e) {\n e.message = `[pluginName: ${this.pluginName}:${hookName}:pre error] >> ${e.message}`\n throw e\n }\n }\n if (this.__hooks && this.__hooks[hookName]) {\n try {\n const preRet = this.__hooks[hookName].call(this, this, ...arguments)\n if (preRet) {\n if (preRet.then) {\n preRet.then((isContinue) => {\n if (isContinue !== false) {\n callHandler(this, handler, preset.next, ...arguments)\n // handler.call(this, ...arguments)\n }\n }).catch(e => {\n throw e\n })\n } else {\n callHandler(this, handler, preset.next, ...arguments)\n // handler.call(this, ...arguments)\n }\n } else if (preRet === undefined) {\n callHandler(this, handler, preset.next, ...arguments)\n }\n } catch (e) {\n e.message = `[pluginName: ${this.pluginName}:${hookName}] >> ${e.message}`\n throw e\n }\n } else {\n callHandler(this, handler, preset.next, ...arguments)\n }\n }.bind(this)\n}\n\n/**\n * add hooks\n * @param { string } hookName\n * @param { Function } handler\n */\nfunction useHooks (hookName, handler) {\n const { __hooks } = this\n if (!__hooks) {\n return\n }\n // eslint-disable-next-line no-prototype-builtins\n if (!__hooks.hasOwnProperty(hookName)) {\n console.warn(`has no supported hook which name [${hookName}]`)\n return false\n }\n __hooks && (__hooks[hookName] = handler)\n return true\n}\n\n/**\n * remove hook\n * @param { string } hookName\n * @param { (plugin: any, ..args) => {} } handler\n * @returns void\n */\nfunction removeHooks (hookName, handler) {\n const { __hooks } = this\n if (!__hooks) {\n return\n }\n __hooks[hookName] = null\n}\n\n/**\n * Add hooks to a plugin\n * @param { string } pluginName\n * @param {...any} args\n */\nfunction usePluginHooks (pluginName, ...args) {\n if (!this.plugins || !this.plugins[pluginName.toLowerCase()]) {\n return\n }\n const plugin = this.plugins[pluginName.toLowerCase()]\n return plugin.useHooks && plugin.useHooks(...args)\n}\n\n/**\n * hook decorator, add hooks props for for an instance\n * @param { any } instance\n * @param { Array<string> } [hookNames]\n */\nfunction hooksDescriptor (instance, presetHooks = []) {\n instance.__hooks = {}\n presetHooks && presetHooks.map(item => {\n instance.__hooks[item] = null\n })\n Object.defineProperty(instance, 'hooks', {\n get: () => {\n return instance.__hooks && Object.keys(instance.__hooks).map(key => {\n if (instance.__hooks[key]) {\n return key\n }\n })\n }\n })\n}\n\nfunction delHooksDescriptor (instance) {\n instance.__hooks = null\n}\n\nfunction runHooks (obj, hookName, handler, ...args) {\n if (obj.__hooks && obj.__hooks[hookName]) {\n const ret = obj.__hooks[hookName].call(obj, obj, ...args)\n if (ret && ret.then) {\n ret.then((data) => {\n return data === false ? null : handler.call(obj, obj, ...args)\n }).catch(e => {\n console.warn(`[runHooks]${hookName} reject`, e.message)\n })\n } else if (ret !== false) {\n return handler.call(obj, obj, ...args)\n }\n } else {\n return handler.call(obj, obj, ...args)\n }\n}\n\nexport {\n hooksDescriptor as default,\n hook,\n useHooks,\n usePluginHooks,\n removeHooks,\n delHooksDescriptor,\n runHooks\n}\n","import Util from '../utils/util'\nimport Sniffer from '../utils/sniffer'\nimport Errors from '../error'\nimport * as Events from '../events'\nimport XG_DEBUG from '../utils/debug'\nimport hooksDescriptor, { hook, useHooks, delHooksDescriptor } from '../plugin/hooksDescriptor'\n\nfunction showErrorMsg (pluginName, msg) {\n XG_DEBUG.logError(`[${pluginName}] event or callback cant be undefined or null when call ${msg}`)\n}\n\n/**\n * @typedef { import ('../player').default } Player\n */\n\n/**\n * @typedef { import ('../defaultConfig').IPlayerOptions } IPlayerOptions\n */\n\n/**\n * @typedef {{\n * index?: number,\n * player: Player,\n * pluginName: string,\n * config: {\n * [propName: string]: any\n * },\n * [propName: string]: any;\n * }} IBasePluginOptions\n */\nclass BasePlugin {\n static defineGetterOrSetter (Obj, map) {\n for (const key in map) {\n Object.defineProperty(Obj, key, map[key])\n }\n }\n\n /**\n * @type { { [propName: string]: any } }\n */\n static get defaultConfig () {\n return {}\n }\n\n /**\n * @type { string }\n */\n static get pluginName () {\n return 'pluginName'\n }\n\n /**\n * @param { IBasePluginOptions } args\n */\n constructor (args) {\n if (Util.checkIsFunction(this.beforeCreate)) {\n this.beforeCreate(args)\n }\n hooksDescriptor(this)\n /**\n * @private\n */\n this.__args = args\n /**\n * @private\n */\n this.__events = {}\n this.config = args.config || {}\n /**\n * @readonly\n * @type { Player }\n */\n this.player = null\n /**\n * @readonly\n * @type { IPlayerOptions }\n */\n this.playerConfig = {}\n /**\n * @readonly\n * @type {string}\n */\n this.pluginName = ''\n this.__init(args)\n }\n\n /**\n * @param { IBasePluginOptions } args\n */\n beforeCreate (args) {}\n afterCreate () {}\n beforePlayerInit () {}\n onPluginsReady () {}\n afterPlayerInit () {}\n destroy () {}\n\n /**\n * @private\n * @param { any } args\n */\n __init (args) {\n this.player = args.player\n this.playerConfig = args.player && args.player.config\n this.pluginName = args.pluginName ? args.pluginName.toLowerCase() : this.constructor.pluginName.toLowerCase()\n this.logger = args.player && args.player.logger\n }\n\n /**\n * 更新语言\n * @param { string } lang\n */\n updateLang (lang) {\n if (!lang) {\n lang = this.lang\n }\n }\n\n /**\n * @type { string }\n */\n get lang () {\n return this.player.lang\n }\n\n get i18n () {\n return this.player.i18n\n }\n\n get i18nKeys () {\n return this.player.i18nKeys\n }\n\n /**\n *\n * @param { string | Array<string> } event\n * @param { Function } callback\n * @returns\n */\n on (event, callback) {\n if (!event || !callback || !this.player) {\n showErrorMsg(this.pluginName, 'plugin.on(event, callback)')\n return\n }\n if (typeof event === 'string') {\n this.__events[event] = callback\n this.player.on(event, callback)\n } else if (Array.isArray(event)) {\n event.forEach((item) => {\n this.__events[item] = callback\n this.player.on(item, callback)\n })\n }\n }\n\n /**\n *\n * @param { string } event\n * @param { Function } callback\n * @returns\n */\n once (event, callback) {\n if (!event || !callback || !this.player) {\n showErrorMsg(this.pluginName, 'plugin.once(event, callback)')\n return\n }\n this.player.once(event, callback)\n }\n\n /**\n *\n * @param { string } event\n * @param { Function } callback\n * @returns\n */\n off (event, callback) {\n if (!event || !callback || !this.player) {\n showErrorMsg(this.pluginName, 'plugin.off(event, callback)')\n return\n }\n if (typeof event === 'string') {\n delete this.__events[event]\n this.player.off(event, callback)\n } else if (Array.isArray(event)) {\n event.forEach((item) => {\n delete this.__events[event]\n this.player.off(item, callback)\n })\n }\n }\n\n offAll () {\n Object.keys(this.__events).map(item => {\n this.__events[item] && this.off(item, this.__events[item])\n item && delete this.__events[item]\n })\n this.__events = {}\n }\n\n /**\n *\n * @param { string } event\n * @param { any } [res]\n * @returns\n */\n emit (event, res) {\n if (!this.player) {\n return\n }\n this.player.emit(event, res)\n }\n\n emitUserAction (event, action, props = [], ext = {}) {\n if (!action || !event) {\n return\n }\n const eventType = Util.typeOf(event) === 'String' ? event : (event.type || '')\n event = new Event(eventType)\n if (Util.typeOf(props) !== 'Array') {\n props = [props]\n }\n this.emit(Events.USER_ACTION, {\n action,\n pluginName: this.pluginName,\n currentTime: this.player.currentTime,\n duration: this.player.duration,\n ended: this.player.ended,\n event,\n props,\n ...ext\n })\n }\n\n /**\n * @param { string } hookName\n * @param { Function } handler\n * @param { {pre: Function| null , next: Function | null} } preset\n * @returns\n */\n hook (hookName, handler, preset = { pre: null, next: null }) {\n // eslint-disable-next-line no-return-assign\n return hook.call(this, ...arguments)\n }\n\n /**\n * @param { string } hookName\n * @param { (plugin: any, ...args) => boolean | Promise<any> } handler\n * @param {...any} args\n * @returns { boolean } isSuccess\n */\n useHooks (hookName, handler, ...args) {\n return useHooks.call(this, ...arguments)\n }\n\n /**\n * 注册子插件\n * @param { any } plugin\n * @param { any } [options]\n * @param { string } [name]\n * @returns { any }\n */\n registerPlugin (plugin, options = {}, name = '') {\n if (!this.player) {\n return\n }\n name && (options.pluginName = name)\n return this.player.registerPlugin({ plugin, options })\n }\n\n /**\n *\n * @param { string } name\n * @returns { any | null }\n */\n getPlugin (name) {\n return this.player ? this.player.getPlugin(name) : null\n }\n\n __destroy () {\n const player = this.player\n const pluginName = this.pluginName\n this.offAll()\n Util.clearAllTimers(this)\n if (Util.checkIsFunction(this.destroy)) {\n this.destroy()\n }\n\n ['player', 'playerConfig', 'pluginName', 'logger', '__args', '__hooks'].map(item => {\n this[item] = null\n })\n player.unRegisterPlugin(pluginName)\n delHooksDescriptor(this)\n }\n}\nexport {\n BasePlugin as default,\n Util,\n Sniffer,\n Errors,\n Events,\n XG_DEBUG\n}\n","var DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n","var closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n","/**\n* an ui Plugin class\n*\n**/\nimport BasePlugin, { Util, XG_DEBUG } from './basePlugin'\nimport delegate from 'delegate'\n\nconst ROOT_TYPES = {\n CONTROLS: 'controls',\n ROOT: 'root'\n}\n\nconst POSITIONS = {\n ROOT: 'root',\n ROOT_LEFT: 'rootLeft',\n ROOT_RIGHT: 'rootRight',\n ROOT_TOP: 'rootTop',\n CONTROLS_LEFT: 'controlsLeft',\n CONTROLS_RIGTH: 'controlsRight',\n CONTROLS_RIGHT: 'controlsRight',\n CONTROLS_CENTER: 'controlsCenter',\n CONTROLS: 'controls'\n}\n\n/**\n * Check if the url is a link address\n * @param { string } str\n */\nfunction isUrl (str) {\n if (!str) {\n return false\n }\n return str.indexOf && /^http/.test(str)\n}\n\nfunction mergeIconClass (icon, classname) {\n if (typeof icon === 'object' && icon.class && typeof icon.class === 'string') {\n return `${classname} ${icon.class}`\n }\n return classname\n}\n\nfunction mergeIconAttr (icon, attr) {\n if (typeof icon === 'object' && icon.attr && typeof icon.attr === 'object') {\n Object.keys(icon.attr).map(key => {\n attr[key] = icon.attr[key]\n })\n }\n return attr\n}\n\nfunction createIcon (icon, key, classname = '', attr = {}, pluginName = '') {\n let newIcon = null\n if (icon instanceof window.Element) {\n Util.addClass(icon, classname)\n Object.keys(attr).map(key => {\n icon.setAttribute(key, attr[key])\n })\n return icon\n }\n\n if (isUrl(icon) || isUrl(icon.url)) {\n attr.src = isUrl(icon) ? icon : (icon.url || '')\n newIcon = Util.createDom(icon.tag || 'img', '', attr, `xg-img ${classname}`)\n return newIcon\n }\n\n if (typeof icon === 'function') {\n try {\n newIcon = icon()\n if (newIcon instanceof window.Element) {\n Util.addClass(newIcon, classname)\n Object.keys(attr).map(key => {\n newIcon.setAttribute(key, attr[key])\n })\n return newIcon\n } else {\n XG_DEBUG.logWarn(`warn>>icons.${key} in config of plugin named [${pluginName}] is a function mast return an Element Object`)\n }\n return null\n } catch (e) {\n XG_DEBUG.logError(`Plugin named [${pluginName}]:createIcon`, e)\n return null\n }\n }\n\n if (typeof icon === 'string') {\n return Util.createDomFromHtml(icon, attr, classname)\n }\n XG_DEBUG.logWarn(`warn>>icons.${key} in config of plugin named [${pluginName}] is invalid`)\n return null\n}\n\nfunction registerIconsObj (iconsConfig, plugin) {\n const _icons = plugin.config.icons || plugin.playerConfig.icons\n Object.keys(iconsConfig).map(key => {\n const orgIcon = iconsConfig[key]\n let classname = orgIcon && orgIcon.class ? orgIcon.class : ''\n let attr = orgIcon && orgIcon.attr ? orgIcon.attr : {}\n let newIcon = null\n if (_icons && _icons[key]) {\n classname = mergeIconClass(_icons[key], classname)\n attr = mergeIconAttr(_icons[key], attr)\n newIcon = createIcon(_icons[key], key, classname, attr, plugin.pluginName)\n }\n if (!newIcon && orgIcon) {\n newIcon = createIcon((orgIcon.icon ? orgIcon.icon : orgIcon), attr, classname, {}, plugin.pluginName)\n }\n plugin.icons[key] = newIcon\n })\n}\n\nfunction registerTextObj (textConfig, plugin) {\n Object.keys(textConfig).map((key) => {\n Object.defineProperty(plugin.langText, key, {\n get: () => {\n const lang = plugin.lang\n return textConfig[key][lang] || textConfig[key].zh\n }\n })\n })\n}\n/**\n * @typedef { import ('../player').default } Player\n */\n\n/**\n * @typedef {{\n * index?: number,\n * player: Player,\n * pluginName: string,\n * config: {\n * [propName: string]: any\n * },\n * root?: HTMLElement,\n * position?: string,\n * [propName: string]: any\n * }} IPluginOptions\n*/\nclass Plugin extends BasePlugin {\n /**\n * 插入dom结构\n * @param { String | HTMLElement } html html字符串或者dom\n * @param { HTMLElement } parent\n * @param { number } index\n * @returns { HTMLElement }\n */\n static insert (html, parent, index = 0) {\n const len = parent.children.length\n const insertIdx = Number(index)\n const isDomElement = html instanceof window.Node\n\n if (len) {\n let i = 0\n let coordinate = null\n let mode = ''\n for (;i < len; i++) {\n coordinate = parent.children[i]\n const curIdx = Number(coordinate.getAttribute('data-index'))\n if (curIdx >= insertIdx) {\n mode = 'beforebegin'\n break\n } else if (curIdx < insertIdx) {\n mode = 'afterend'\n }\n }\n\n if (isDomElement) {\n if (mode === 'afterend') {\n // as last element\n parent.appendChild(html)\n } else {\n parent.insertBefore(html, coordinate)\n }\n } else {\n coordinate.insertAdjacentHTML(mode, html)\n }\n return mode === 'afterend' ? parent.children[parent.children.length - 1] : parent.children[i]\n } else {\n isDomElement ? parent.appendChild(html) : parent.insertAdjacentHTML('beforeend', html)\n return parent.children[parent.children.length - 1]\n }\n }\n\n static get defaultConfig () {\n return {}\n }\n\n /**\n *\n * @param { HTMLElement } root\n * @param { String } querySelector\n * @param { String | Array<String> } eventType\n * @param { Function } callback\n * @param { boolean } [capture=false]\n * @returns\n */\n static delegate (root, querySelector, eventType, callback, capture = false) {\n const dels = []\n if (root instanceof window.Node && typeof callback === 'function') {\n if (Array.isArray(eventType)) {\n eventType.forEach((item) => {\n const ret = delegate(root, querySelector, item, callback, capture)\n ret.key = `${querySelector}_${item}`\n dels.push(ret)\n })\n } else {\n const ret = delegate(root, querySelector, eventType, callback, capture)\n ret.key = `${querySelector}_${eventType}`\n dels.push(ret)\n }\n }\n return dels\n }\n\n static get ROOT_TYPES () {\n return ROOT_TYPES\n }\n\n static get POSITIONS () {\n return POSITIONS\n }\n\n /**\n * @param { IPluginOptions } args\n */\n constructor (args = {}) {\n super(args)\n /**\n * @private\n */\n this.__delegates = []\n }\n\n /**\n * @private\n */\n __init (args) {\n super.__init(args)\n if (!args.root) {\n return\n }\n const _parent = args.root\n let _el = null\n /**\n * @readonly\n */\n this.icons = {}\n /**\n * @readonly\n * @type { HTMLElement }\n */\n this.root = null\n /**\n * @readonly\n * @type { HTMLElement }\n */\n this.parent = null\n\n const _orgicons = this.registerIcons() || {}\n registerIconsObj(_orgicons, this)\n /**\n * @readonly\n */\n this.langText = {}\n const defaultTexConfig = this.registerLanguageTexts() || {}\n registerTextObj(defaultTexConfig, this)\n let renderStr = ''\n try {\n renderStr = this.render()\n } catch (e) {\n XG_DEBUG.logError(`Plugin:${this.pluginName}:render`, e)\n throw (new Error(`Plugin:${this.pluginName}:render:${e.message}`))\n }\n if (renderStr) {\n _el = Plugin.insert(renderStr, _parent, args.index)\n _el.setAttribute('data-index', args.index)\n } else if (args.tag) {\n _el = Util.createDom(args.tag, '', args.attr, args.name)\n _el.setAttribute('data-index', args.index)\n _parent.appendChild(_el)\n } else {\n return\n }\n\n this.root = _el\n this.parent = _parent\n\n // Plugin.defineGetterOrSetter(this, {\n // /**\n // * @readonly\n // * @type { HTMLElement }\n // */\n // root: {\n // get: () => {\n // return _el\n // },\n // configurable: true\n // },\n // /**\n // * @readonly\n // * @type { HTMLElement }\n // */\n // parent: {\n // get: () => {\n // return _parent\n // },\n // configurable: true\n // }\n // })\n\n const attr = this.config.attr || {}\n const style = this.config.style || {}\n\n this.setAttr(attr)\n this.setStyle(style)\n if (this.config.index) {\n this.root.setAttribute('data-index', this.config.index)\n }\n this.__registerChildren()\n }\n\n /**\n * @private\n */\n __registerChildren () {\n if (!this.root) {\n return\n }\n /**\n * @private\n */\n this._children = []\n const children = this.children()\n if (children && typeof children === 'object') {\n if (Object.keys(children).length > 0) {\n Object.keys(children).map(item => {\n const name = item\n const _plugin = children[name]\n const options = {\n root: this.root\n }\n // eslint-disable-next-line no-unused-vars\n let config, Plugin\n if (typeof _plugin === 'function') {\n config = this.config[name] || {}\n Plugin = _plugin\n } else if (typeof _plugin === 'object' && typeof _plugin.plugin === 'function') {\n config = _plugin.options ? Util.deepCopy((this.config[name] || {}), _plugin.options) : (this.config[name] || {})\n Plugin = _plugin.plugin\n }\n options.config = config\n config.index !== undefined && (options.index = config.index)\n config.root && (options.root = config.root)\n this.registerPlugin(Plugin, options, name)\n })\n }\n }\n }\n\n updateLang (lang) {\n if (!lang) {\n lang = this.lang\n }\n function checkChildren (node, callback) {\n for (let i = 0; i < node.children.length; i++) {\n if (node.children[i].children.length > 0) {\n checkChildren(node.children[i], callback)\n } else {\n callback(node.children[i])\n }\n }\n }\n const { root, i18n, langText } = this\n if (root) {\n checkChildren(root, (node) => {\n const langKey = node.getAttribute && node.getAttribute('lang-key')\n if (!langKey) {\n return\n }\n const langTextShow = i18n[langKey.toUpperCase()] || langText[langKey]\n if (langTextShow) {\n node.innerHTML = typeof langTextShow === 'function' ? langTextShow(lang) : langTextShow\n }\n })\n }\n }\n\n get lang () {\n return this.player.lang\n }\n\n changeLangTextKey (dom, key = '') {\n const i18n = this.i18n || {}\n const langText = this.langText\n dom.setAttribute && dom.setAttribute('lang-key', key)\n const text = i18n[key.toUpperCase()] || langText[key]\n if (text) {\n dom.innerHTML = text\n }\n }\n\n plugins () {\n return this._children\n }\n\n children () {\n return {}\n }\n\n registerPlugin (plugin, options = {}, name = '') {\n options.root = options.root || this.root\n const _c = super.registerPlugin(plugin, options, name)\n this._children.push(_c)\n return _c\n }\n\n registerIcons () {\n return {}\n }\n\n registerLanguageTexts () {\n return {}\n }\n\n /**\n *\n * @param { string } qs\n * @returns { HTMLElement | null }\n */\n find (qs) {\n if (!this.root) {\n return\n }\n return this.root.querySelector(qs)\n }\n\n /**\n * 绑定事件\n * @param { string | Array<string> } querySelector\n * @param { string | Function } eventType\n * @param { Function } [callback]\n */\n bind (querySelector, eventType, callback) {\n if (arguments.length < 3 && typeof eventType === 'function') {\n if (Array.isArray(querySelector)) {\n querySelector.forEach((item) => {\n this.bindEL(item, eventType)\n })\n } else {\n this.bindEL(querySelector, eventType)\n }\n } else {\n const ret = Plugin.delegate.call(this, this.root, querySelector, eventType, callback)\n this.__delegates = this.__delegates.concat(ret)\n }\n }\n\n /**\n * 绑定事件\n * @param { string | Array<string> } querySelector\n * @param { string | Function } eventType\n */\n unbind (querySelector, eventType) {\n if (arguments.length < 3 && typeof eventType === 'function') {\n if (Array.isArray(querySelector)) {\n querySelector.forEach((item) => {\n this.unbindEL(item, eventType)\n })\n } else {\n this.unbindEL(querySelector, eventType)\n }\n } else {\n const key = `${querySelector}_${eventType}`\n for (let i = 0; i < this.__delegates.length; i++) {\n if (this.__delegates[i].key === key) {\n this.__delegates[i].destroy()\n this.__delegates.splice(i, 1)\n break\n }\n }\n }\n }\n\n /**\n * 给插件设置样式\n * @param { string | {[propName: string]: any} } name\n * @param { ? | any } value\n * @returns\n */\n setStyle (name, value) {\n if (!this.root) {\n return\n }\n if (Util.typeOf(name) === 'String') {\n return (this.root.style[name] = value)\n } else if (Util.typeOf(name) === 'Object') {\n Object.keys(name).map(key => {\n this.root.style[key] = name[key]\n })\n }\n }\n\n /**\n * 给插件根节点设置属性\n * @param { string | {[propName: string]: any} } name\n * @param { ? | any } value\n * @returns\n */\n setAttr (name, value) {\n if (!this.root) {\n return\n }\n if (Util.typeOf(name) === 'String') {\n return this.root.setAttribute(name, value)\n } else if (Util.typeOf(name) === 'Object') {\n Object.keys(name).map(key => {\n this.root.setAttribute(key, name[key])\n })\n }\n }\n\n /**\n *\n * @param { string } htmlStr\n * @param { Function } [callback]\n * @returns\n */\n setHtml (htmlStr, callback) {\n if (!this.root) {\n return\n }\n this.root.innerHTML = htmlStr\n if (typeof callback === 'function') {\n callback()\n }\n }\n\n /**\n *\n * @param { string } event\n * @param { Function } eventHandle\n * @param { boolean } [isBubble=false]\n * @returns\n */\n bindEL (event, eventHandle, isBubble = false) {\n if (!this.root) {\n return\n }\n if (`on${event}` in this.root && typeof eventHandle === 'function') {\n this.root.addEventListener(event, eventHandle, isBubble)\n }\n }\n\n /**\n *\n * @param { string } event\n * @param { Function } eventHandle\n * @param { boolean } [isBubble]\n * @returns\n */\n unbindEL (event, eventHandle, isBubble = false) {\n if (!this.root) {\n return\n }\n if (`on${event}` in this.root && typeof eventHandle === 'function') {\n this.root.removeEventListener(event, eventHandle, isBubble)\n }\n }\n\n /**\n *\n * @param { string } [value]\n * @returns\n */\n show (value) {\n if (!this.root) {\n return\n }\n this.root.style.display = value !== undefined ? value : 'block'\n const cs = window.getComputedStyle(this.root, null)\n const cssDisplayValue = cs.getPropertyValue('display')\n if (cssDisplayValue === 'none') {\n return (this.root.style.display = 'block')\n }\n }\n\n hide () {\n this.root && (this.root.style.display = 'none')\n }\n\n /**\n *\n * @param { string | HTMLElement } pdom\n * @param { HTMLElement} child\n * @returns { HTMLElement | nul }\n */\n appendChild (pdom, child) {\n if (arguments.length < 2 && arguments[0] instanceof window.Element) {\n return this.root.appendChild(arguments[0])\n }\n if (!child || !(child instanceof window.Element)) {\n return null\n }\n try {\n if (typeof pdom === 'string') {\n return this.find(pdom).appendChild(child)\n } else {\n return pdom.appendChild(child)\n }\n } catch (err) {\n XG_DEBUG.logError('Plugin:appendChild', err)\n return null\n }\n }\n\n /**\n *\n * @returns { string | HTMLElement }\n */\n render () {\n return ''\n }\n\n destroy () {}\n\n __destroy () {\n const { player } = this\n this.__delegates.map(item => {\n item.destroy()\n })\n this.__delegates = []\n // destroy the sub-plugin instance\n if (this._children instanceof Array) {\n this._children.map(item => {\n player.unRegisterPlugin(item.pluginName)\n })\n this._children = null\n }\n if (this.root) {\n // eslint-disable-next-line no-prototype-builtins\n if (this.root.hasOwnProperty('remove')) {\n this.root.remove()\n } else if (this.root.parentNode) {\n this.root.parentNode.removeChild(this.root)\n }\n }\n\n super.__destroy()\n this.icons = {};\n ['root', 'parent'].map(item => {\n this[item] = null\n })\n }\n}\n\nexport {\n Plugin as default,\n ROOT_TYPES,\n POSITIONS\n}\n","'use strict';\nvar fails = require('../internals/fails');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n}\n","class ResizeObserver {\n constructor () {\n this.__handlers = []\n this.timeStamp = 0\n this.observer = null\n if (!window.ResizeObserver) {\n return\n }\n try {\n this.observer = new window.ResizeObserver((entries) => {\n const t = new Date().getTime()\n if (t - this.timeStamp < 100) {\n return\n }\n this.timeStamp = t\n this.__trigger(entries)\n })\n this.timeStamp = new Date().getTime()\n } catch (e) {\n console.error(e)\n }\n }\n\n addObserver (target, handler) {\n if (!this.observer) {\n return\n }\n this.observer && this.observer.observe(target)\n const { __handlers } = this\n let index = -1\n for (let i = 0; i < __handlers.length; i++) {\n if (__handlers[i] && target === __handlers[i].target) {\n index = i\n }\n }\n if (index > -1) {\n this.__handlers[index].handler = handler\n } else {\n this.__handlers.push({\n target,\n handler: handler\n })\n }\n }\n\n unObserver (target) {\n let i = -1\n this.__handlers.map((item, index) => {\n if (target === item.target) {\n i = index\n }\n })\n try {\n this.observer && this.observer.unobserve(target)\n } catch (e) {}\n this.observer && this.observer.unobserve(target)\n i > -1 && this.__handlers.splice(i, 1)\n }\n\n destroyObserver () {\n this.observer && this.observer.disconnect()\n this.observer = null\n this.__handlers = null\n }\n\n __runHandler (target) {\n const { __handlers } = this\n for (let i = 0; i < __handlers.length; i++) {\n if (__handlers[i] && target === __handlers[i].target) {\n try {\n __handlers[i].handler(target)\n } catch (error) {\n console.error(error)\n }\n return true\n }\n }\n return false\n }\n\n __trigger (entries) {\n for (let i = 0; i < entries.length; i++) {\n const ret = this.__runHandler(entries[i].target)\n if (ret) {\n break\n }\n }\n }\n}\n\nlet resizeObserver = null\n\nfunction addObserver (target, handler) {\n if (!resizeObserver) {\n resizeObserver = new ResizeObserver()\n }\n resizeObserver.addObserver(target, handler)\n return resizeObserver\n}\n\nfunction unObserver (target, handler) {\n resizeObserver.unObserver(target, handler)\n}\n\nfunction destroyObserver (target, handler) {\n resizeObserver.destroyObserver(target, handler)\n}\n\nexport {\n addObserver,\n unObserver,\n destroyObserver\n}\n","import { addObserver, unObserver } from './resizeObserver'\n\nfunction typeIsObject (obj) {\n return Object.prototype.toString.call(obj).match(/([^\\s.*]+)(?=]$)/g)[0] === 'Object'\n}\n\nfunction typeIsBoolean (obj) {\n return Object.prototype.toString.call(obj).match(/([^\\s.*]+)(?=]$)/g)[0] === 'Boolean'\n}\n\n/**\n* a plugins manager to register and search\n**/\n\nconst pluginsManager = {\n init (player) {\n // mark every player instance by _pluginInfoId\n let cgid = player._pluginInfoId\n if (!cgid) {\n cgid = new Date().getTime()\n player._pluginInfoId = cgid\n }\n\n if (!this.pluginGroup) {\n this.pluginGroup = {}\n }\n\n !player.config.closeResizeObserver && addObserver(player.root, () => {\n player.resize()\n })\n this.pluginGroup[cgid] = {\n _player: player,\n _originalOptions: player.config || {}\n }\n },\n\n /**\n * Check whether there is a player instance in the current dom\n * @param {Element} root\n */\n checkPlayerRoot (root) {\n if (this.pluginGroup) {\n const _keys = Object.keys(this.pluginGroup)\n for (let i = 0; i < _keys.length; i++) {\n const _p = this.pluginGroup[_keys[i]]._player\n if (_p.root === root) {\n return _p\n }\n }\n return null\n }\n return null\n },\n\n /**\n * register a lazy plugin\n * @param { any } player instance\n * @param { any } lazyPlugin config\n *\n */\n lazyRegister (player, lazyPlugin) {\n const timeout = lazyPlugin.timeout || 1500\n return Promise.race([\n lazyPlugin.loader().then((plugin) => {\n let result\n if (plugin && plugin.__esModule) {\n result = plugin.default\n } else {\n result = plugin\n }\n this.register(player, result, plugin.options)\n }),\n new Promise((resolve, reject) => {\n setTimeout(() => {\n reject(new Error('timeout'))\n }, timeout)\n })\n ])\n },\n /**\n * register a Plugin\n * @param { any } player the plugins register\n * @param { any } plugin the plugin contructor\n * @param { any } options the plugin configuration\n * @return { any } Plugin the plugin instance\n **/\n register (player, plugin, options = {}) {\n if (!player || !plugin || typeof plugin !== 'function' || plugin.prototype === undefined) {\n return\n }\n let cgid = player._pluginInfoId\n if (!cgid || !this.pluginGroup || !this.pluginGroup[cgid]) {\n this.init(player)\n cgid = player._pluginInfoId\n }\n if (!this.pluginGroup[cgid]._plugins) {\n this.pluginGroup[cgid]._plugins = []\n }\n const plugins = this.pluginGroup[cgid]._plugins\n const originalOptions = this.pluginGroup[cgid]._originalOptions\n options.player = this.pluginGroup[cgid]._player\n\n const pluginName = options.pluginName || plugin.pluginName\n if (!pluginName) {\n throw new Error('The property pluginName is necessary')\n }\n\n if (plugin.isSupported && !plugin.isSupported()) {\n console.warn(`not supported plugin [${pluginName}]`)\n return\n }\n\n if (!options.config) {\n options.config = {}\n }\n\n // get config items from player.config\n const keys = Object.keys(originalOptions)\n for (let i = 0; i < keys.length; i++) {\n if (pluginName.toLowerCase() === keys[i].toLowerCase()) {\n const config = originalOptions[keys[i]]\n if (typeIsObject(config)) {\n options.config = Object.assign({}, options.config, originalOptions[keys[i]])\n }\n if (typeIsBoolean(config)) {\n options.config.disable = !config\n }\n break\n }\n }\n\n // copy the default configuration items of the plugin\n if (plugin.defaultConfig) {\n Object.keys(plugin.defaultConfig).map(key => {\n if (typeof options.config[key] === 'undefined') {\n options.config[key] = plugin.defaultConfig[key]\n }\n })\n }\n\n // get the parent dom which added the plugin will be mounted\n if (!options.root) {\n options.root = player.root\n } else if (typeof options.root === 'string') {\n options.root = player[options.root]\n }\n\n options.index = options.config.index || 0\n try {\n // if there is already a plugin instance with the same pluginName, destroy it\n if (plugins[pluginName.toLowerCase()]) {\n this.unRegister(cgid, pluginName.toLowerCase())\n console.warn(`the is one plugin with same pluginName [${pluginName}] exist, destroy the old instance`)\n }\n // eslint-disable-next-line new-cap\n const _instance = new plugin(options)\n plugins[pluginName.toLowerCase()] = _instance\n plugins[pluginName.toLowerCase()].func = plugin\n if (_instance && typeof _instance.afterCreate === 'function') {\n _instance.afterCreate()\n }\n return _instance\n } catch (err) {\n console.error(err)\n throw (err)\n }\n },\n\n /**\n * Unregister a plugin from player instance\n * @param { string } cgid\n * @param { string } name\n */\n unRegister (cgid, name) {\n if (cgid._pluginInfoId) {\n cgid = cgid._pluginInfoId\n }\n name = name.toLowerCase()\n try {\n const plugin = this.pluginGroup[cgid]._plugins[name]\n if (plugin) {\n plugin.pluginName && plugin.__destroy()\n delete this.pluginGroup[cgid]._plugins[name]\n }\n } catch (e) {\n console.error(`[unRegister:${name}] cgid:[${cgid}] error`, e)\n }\n },\n\n /**\n * remove a plugin instance from the player plugin list\n * @param { any } player\n * @param { string } name\n */\n deletePlugin (player, name) {\n const cgid = player._pluginInfoId\n if (cgid && this.pluginGroup && this.pluginGroup[cgid] && this.pluginGroup[cgid]._plugins) {\n const _plugins = this.pluginGroup[cgid]._plugins\n delete _plugins[name]\n }\n },\n\n /**\n * get all plugin instance of player\n * @param { any } player\n */\n getPlugins (player) {\n const cgid = player._pluginInfoId\n return cgid ? this.pluginGroup[cgid]._plugins : {}\n },\n\n findPlugin (player, name) {\n const cgid = player._pluginInfoId\n if (!this.pluginGroup || !cgid) {\n return null\n }\n const cName = name.toLowerCase()\n return this.pluginGroup[cgid]._plugins[cName]\n },\n\n beforeInit (player) {\n function retPromise (fun) {\n if (!fun || !fun.then) {\n return new Promise((resolve) => {\n resolve()\n })\n } else {\n return fun\n }\n }\n return new Promise((resolve) => {\n if (!this.pluginGroup) {\n return\n }\n\n let prevTask\n if (player._loadingPlugins && player._loadingPlugins.length) {\n prevTask = Promise.all(player._loadingPlugins)\n } else {\n prevTask = Promise.resolve()\n }\n\n return prevTask.then(() => {\n const cgid = player._pluginInfoId\n if (!this.pluginGroup[cgid]) {\n resolve()\n return\n }\n const plugins = this.pluginGroup[cgid]._plugins\n const pluginsRet = []\n for (const item of Object.keys(plugins)) {\n if (plugins[item] && plugins[item].beforePlayerInit) {\n try {\n const ret = plugins[item].beforePlayerInit()\n pluginsRet.push(retPromise(ret))\n } catch (e) {\n pluginsRet.push(retPromise(null))\n throw e\n }\n }\n }\n\n Promise.all([...pluginsRet]).then(() => {\n resolve()\n }).catch((e) => {\n console.error(e)\n resolve()\n })\n })\n })\n },\n\n afterInit (player) {\n const cgid = player._pluginInfoId\n if (!this.pluginGroup || !cgid) {\n return\n }\n const plugins = this.pluginGroup[cgid]._plugins\n for (const item of Object.keys(plugins)) {\n if (plugins[item] && plugins[item].afterPlayerInit) {\n plugins[item].afterPlayerInit()\n }\n }\n },\n\n setLang (lang, player) {\n const cgid = player._pluginInfoId\n if (!this.pluginGroup || !cgid) {\n return\n }\n const plugins = this.pluginGroup[cgid]._plugins\n Object.keys(plugins).map(item => {\n if (plugins[item].updateLang) {\n plugins[item].updateLang(lang)\n } else {\n // 兼容旧版本通过set lang更新语言的问题\n try {\n plugins[item].lang = lang\n } catch (error) {\n console.warn(`${item} setLang`)\n }\n }\n })\n },\n\n reRender (player) {\n const cgid = player._pluginInfoId\n if (!cgid) {\n return\n }\n const pluginsMap = {}\n const plugins = this.pluginGroup[cgid]._plugins\n for (const item of Object.keys(plugins)) {\n pluginsMap[item] = {\n plugin: plugins[item].func,\n options: plugins[item]._args\n }\n this.unRegister(cgid, item)\n }\n for (const item of Object.keys(pluginsMap)) {\n this.register(cgid, item, pluginsMap[item].plugin, pluginsMap[item].options)\n }\n },\n\n onPluginsReady (player) {\n const cgid = player._pluginInfoId\n const plugins = this.pluginGroup[cgid]._plugins\n if (!cgid || !plugins) {\n return\n }\n Object.keys(plugins).map(key => {\n if (plugins[key].onPluginsReady && typeof plugins[key].onPluginsReady === 'function') {\n plugins[key].onPluginsReady()\n }\n })\n },\n\n destroy (player) {\n const cgid = player._pluginInfoId\n if (!this.pluginGroup[cgid]) {\n return\n }\n unObserver(player.root)\n const plugins = this.pluginGroup[cgid]._plugins\n for (const item of Object.keys(plugins)) {\n this.unRegister(cgid, item)\n }\n delete this.pluginGroup[cgid]\n delete player._pluginInfoId\n }\n}\n\nexport default pluginsManager\n","export default {\n DEFAULT: 'xgplayer',\n DEFAULT_SKIN: 'xgplayer-skin-default',\n ENTER: 'xgplayer-is-enter',\n PAUSED: 'xgplayer-pause',\n PLAYING: 'xgplayer-playing',\n ENDED: 'xgplayer-ended',\n CANPLAY: 'xgplayer-canplay',\n LOADING: 'xgplayer-isloading',\n ERROR: 'xgplayer-is-error',\n REPLAY: 'xgplayer-replay',\n NO_START: 'xgplayer-nostart',\n ACTIVE: 'xgplayer-inactive',\n FULLSCREEN: 'xgplayer-is-fullscreen',\n CSS_FULLSCREEN: 'xgplayer-is-cssfullscreen',\n PARENT_FULLSCREEN: 'xgplayer-fullscreen-parent',\n ROTATE_FULLSCREEN: 'xgplayer-rotate-fullscreen',\n PARENT_ROTATE_FULLSCREEN: 'xgplayer-rotate-parent',\n INNER_FULLSCREEN: 'xgplayer-inner-fullscreen',\n NO_CONTROLS: 'no-controls',\n FLEX_CONTROLS: 'flex-controls',\n CONTROLS_FOLLOW: 'controls-follow',\n AUTOHIDE: 'xgplayer_autohide',\n NOT_ALLOW_AUTOPLAY: 'not-allow-autoplay',\n SEEKING: 'seeking',\n PC: 'xgplayer-pc',\n MOBILE: 'xgplayer-mobile',\n MINI: 'xgplayer-mini' // mini screen play status\n}\n","export const usePreset = (player, Preset) => {\n let presetInst\n if (Preset.preset && Preset.options) {\n // eslint-disable-next-line new-cap\n presetInst = new (Preset.preset)(Preset.options, player.config)\n } else {\n presetInst = new Preset({}, player.config)\n }\n const { plugins = [], ignores = [], icons = {}, i18n = [] } = presetInst\n if (!player.config.plugins) {\n player.config.plugins = []\n }\n\n if (!player.config.ignores) {\n player.config.ignores = []\n }\n\n player.config.plugins.push(...plugins)\n player.config.ignores.push(...ignores)\n Object.keys(icons).map(key => {\n if (!player.config.icons[key]) {\n player.config.icons[key] = icons[key]\n }\n })\n player.config.i18n.push(...i18n)\n}\n","export const STATES = {\n ERROR: 0,\n INITIAL: 1,\n READY: 2,\n ATTACHING: 3,\n ATTACHED: 4,\n NOTALLOW: 5,\n RUNNING: 6,\n ENDED: 7,\n DESTROYED: 8\n}\n\nexport const STATE_ARRAY = [\n 'ERROR',\n 'INITIAL',\n 'READY',\n 'ATTACHING',\n 'ATTACHED',\n 'NOTALLOW',\n 'RUNNING',\n 'ENDED',\n 'DESTROYED'\n]\n","import Plugin, { Events, Util, POSITIONS, Sniffer, STATE_CLASS } from '../../plugin'\n\n/**\n * @typedef {{\n * disable?: boolean,\n * autoHide?: boolean,\n * mode?: \"flex\"|\"normal\"|\"bottom\",\n * initShow?: boolean,\n * [propName: string]: any\n * }} IControlsConfig\n */\n\nclass Controls extends Plugin {\n static get pluginName () {\n return 'controls'\n }\n\n /**\n * @type IControlsConfig\n */\n static get defaultConfig () {\n return {\n disable: false,\n autoHide: true, // Whether to hide automatically\n mode: '', // Display mode, flex/normal/bottom\n initShow: false // Display when player is initialized\n }\n }\n\n beforeCreate (args) {\n if (!args.config.mode && Sniffer.device === 'mobile') {\n args.config.mode = 'flex'\n }\n if (args.player.config.marginControls) {\n args.config.autoHide = false\n }\n }\n\n afterCreate () {\n const { disable, height, mode, autoHide } = this.config\n if (disable) {\n return\n }\n\n mode === 'flex' && this.player.addClass(STATE_CLASS.FLEX_CONTROLS)\n autoHide && this.player.addClass(STATE_CLASS.AUTOHIDE)\n const style = {\n height: `${height}px`\n }\n Object.keys(style).map(key => {\n this.root.style[key] = style[key]\n })\n /**\n * @type { HTMLElement}\n * @readonly\n */\n this.left = this.find('xg-left-grid')\n /**\n * @type { HTMLElement}\n * @readonly\n */\n this.center = this.find('xg-center-grid')\n /**\n * @type { HTMLElement}\n * @readonly\n */\n this.right = this.find('xg-right-grid')\n /**\n * @type { HTMLElement}\n * @readonly\n */\n this.innerRoot = this.find('xg-inner-controls')\n\n // The progress bar is switched synchronously when switching to the small window state\n this.on(Events.MINI_STATE_CHANGE, (isMini) => {\n isMini ? Util.addClass(this.root, 'mini-controls') : Util.removeClass(this.root, 'mini-controls')\n })\n if (Sniffer.device !== 'mobile') {\n this.bind('mouseenter', this.onMouseEnter)\n this.bind('mouseleave', this.onMouseLeave)\n }\n }\n\n onMouseEnter = (e) => {\n const { player } = this\n if (player.userTimer) {\n Util.clearTimeout(player, player.userTimer)\n clearTimeout(player.userTimer)\n }\n }\n\n onMouseLeave = () => {\n const { player, playerConfig } = this\n const hideDelay = !playerConfig.closeControlsBlur ? playerConfig.inactive : 200\n player.focus({ hideDelay })\n }\n\n focus () {\n this.player.focus({ autoHide: false })\n }\n\n unFocus () {\n this.player.focus({ autoHide: true })\n }\n\n blur () {\n this.player.blur({ ignorePaused: true })\n }\n\n recoverAutoHide () {\n this.config.autoHide && Util.addClass(this.root, 'control_autohide')\n }\n\n pauseAutoHide () {\n Util.removeClass(this.root, 'control_autohide')\n }\n\n show () {\n Util.addClass(this.root, 'show')\n }\n\n hide () {\n Util.removeClass(this.root, 'show')\n }\n\n /**\n * @type {string}\n */\n get mode () {\n return this.config.mode\n }\n\n /**\n *\n * @param {} plugin\n * @param { {config?: {[propName: string]: any}, position?:string, root?: HTMLElement, pluginName?: string}} options\n * @param { string } name\n * @returns { any }\n */\n registerPlugin (plugin, options = {}, name) {\n if (!this.root) {\n return\n }\n const defaultConfig = plugin.defaultConfig || {}\n if (!options.root) {\n const position = options.position ? options.position : options.config && options.config.position ? options.config.position : defaultConfig.position\n switch (position) {\n case POSITIONS.CONTROLS_LEFT:\n options.root = this.left\n break\n case POSITIONS.CONTROLS_RIGHT:\n options.root = this.right\n break\n case POSITIONS.CONTROLS_CENTER:\n options.root = this.center\n break\n case POSITIONS.CONTROLS:\n options.root = this.root\n break\n default:\n options.root = this.left\n }\n return super.registerPlugin(plugin, options, name)\n }\n }\n\n destroy () {\n if (Sniffer.device !== 'mobile') {\n this.unbind('mouseenter', this.onMouseEnter)\n this.unbind('mouseleave', this.onMouseLeave)\n }\n }\n\n render () {\n const { mode, autoHide, initShow, disable } = this.config\n if (disable) {\n return\n }\n const className = Util.classNames(\n { 'xgplayer-controls': true },\n { 'flex-controls': mode === 'flex' },\n { 'bottom-controls': mode === 'bottom' },\n { control_autohide: autoHide },\n { controls_permanent: !autoHide },\n { 'xgplayer-controls-initshow': initShow || !autoHide })\n return `<xg-controls class=\"${className}\" unselectable=\"on\" onselectstart=\"return false\">\n <xg-inner-controls class=\"xg-inner-controls xg-pos\">\n <xg-left-grid class=\"xg-left-grid\">\n </xg-left-grid>\n <xg-center-grid class=\"xg-center-grid\"></xg-center-grid>\n <xg-right-grid class=\"xg-right-grid\">\n </xg-right-grid>\n </xg-inner-controls>\n </xg-controls>`\n }\n}\n\nexport default Controls\n","import Util from '../utils/util'\nimport EN from './en'\n/**\n * @typedef { {\n * LANG: string,\n * TEXT: {\n * [propName: string]: string\n * }\n * } } IXGI18nText\n */\n\nconst XGI18nLang = {}\nconst XGI18nTextKeys = {}\nconst XGI18nLangKeys = []\nconst XGI18nLangPreExtends = {}\n\nfunction updateKeys () {\n Object.keys(XGI18nLang.en).map(key => {\n XGI18nTextKeys[key] = key.toLowerCase()\n })\n}\n\n/**\n * @param { Array<IXGI18nText> } XGI18nTexts\n */\nfunction extend (XGI18nText) {\n let ext = []\n if (Util.typeOf(XGI18nText) !== 'Array') {\n ext = Object.keys(XGI18nText).map(lang => {\n const keyLang = lang === 'zh' ? 'zh-cn' : lang\n return {\n LANG: keyLang,\n TEXT: XGI18nText[lang]\n }\n })\n } else {\n ext = XGI18nText\n }\n ext.map(item => {\n if (!XGI18nLang[item.LANG]) {\n XGI18nLangPreExtends[item.LANG] = item.TEXT\n } else {\n Util.deepMerge(XGI18nLang[item.LANG] || {}, item.TEXT || {})\n }\n })\n updateKeys()\n}\n\n/**\n * @param { IXGI18nText } langData\n */\nfunction use (langData) {\n const lang = langData.LANG\n const texts = langData.TEXT || {}\n if (!XGI18nLang[lang]) {\n XGI18nLangKeys.push(lang)\n }\n if (XGI18nLang[lang]) {\n Util.deepMerge(texts, XGI18nLang[lang])\n } else {\n XGI18nLang[lang] = texts\n }\n if (XGI18nLangPreExtends[lang]) {\n extend([{ LANG: lang, TEXT: XGI18nLangPreExtends[lang] }])\n delete XGI18nLangPreExtends[lang]\n }\n if (lang === 'zh-cn') {\n XGI18nLang.zh = XGI18nLang['zh-cn']\n }\n updateKeys()\n}\n\nuse(EN)\n\nconst I18N = {\n get textKeys () {\n return XGI18nTextKeys\n },\n /**\n * @description List of languages currently supported\n * @type { Array<string> }\n */\n get langKeys () {\n return XGI18nLangKeys\n },\n /**\n * @type {{\n * [propName: string]: {\n * [propName: string]: string\n * }\n * }}\n */\n get lang () {\n const ret = {}\n XGI18nLangKeys.map(key => {\n ret[key] = XGI18nLang[key]\n })\n ret.zh = XGI18nLang['zh-cn']\n return ret\n },\n /**\n * @type {(I18nText: IXGI18nText) => {}}\n */\n extend: extend,\n\n /**\n * @type {(lang: IXGI18nText) => {}}\n */\n use: use\n}\n\nexport default I18N\n","export default {\n LANG: 'en',\n TEXT: {\n ERROR_TYPES: {\n network: {\n code: 1,\n msg: 'video download error'\n },\n mse: {\n code: 2,\n msg: 'stream append error'\n },\n parse: {\n code: 3,\n msg: 'parsing error'\n },\n format: {\n code: 4,\n msg: 'wrong format'\n },\n decoder: {\n code: 5,\n msg: 'decoding error'\n },\n runtime: {\n code: 6,\n msg: 'grammatical errors'\n },\n timeout: {\n code: 7,\n msg: 'play timeout'\n },\n other: {\n code: 8,\n msg: 'other errors'\n }\n },\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 SCREENSHOT: 'Screenshot',\n LIVE: 'LIVE',\n OFF: 'Off',\n OPEN: 'Open',\n MINI_DRAG: 'Click and hold to drag',\n MINISCREEN: 'Miniscreen',\n REFRESH_TIPS: 'Please Try',\n REFRESH: 'Refresh',\n FORWARD: 'forward',\n LIVE_TIP: 'Live'\n }\n}\n","import VideoProxy from './proxy'\nimport Util from './utils/util'\nimport Sniffer from './utils/sniffer'\nimport Database from './utils/database'\nimport Errors from './error'\nimport * as Events from './events'\nimport { FULLSCREEN_EVENTS, GET_FULLSCREEN_API, EXIT_FULLSCREEN_API } from './constant'\nimport Plugin from './plugin/plugin'\nimport BasePlugin from './plugin/basePlugin'\nimport pluginsManager from './plugin/pluginsManager'\nimport STATE_CLASS from './stateClassMap'\nimport getDefaultConfig from './defaultConfig'\nimport { usePreset } from './plugin/preset'\nimport hooksDescriptor, { runHooks, useHooks, delHooksDescriptor, usePluginHooks, hook } from './plugin/hooksDescriptor'\nimport Controls from './plugins/controls/index'\nimport XG_DEBUG, { bindDebug } from './utils/debug'\nimport I18N from './lang/i18n'\nimport version from './version'\nimport { STATES, STATE_ARRAY } from './state'\n\n/**\n * @typedef { import ('./defaultConfig').IPlayerOptions } IPlayerOptions\n */\n\n/* eslint-disable camelcase */\nconst PlAYER_HOOKS = ['play', 'pause', 'replay', 'retry']\n\nclass Player extends VideoProxy {\n /**\n * @type {number}\n * @description set debugger level\n * 1 - only print error logs\n * 2 - print warn logs and error logs\n * 3 - print all debug logs and error stack logs\n */\n static set debugger (value) {\n XG_DEBUG.config.debug = value\n }\n\n static get debugger () {\n return XG_DEBUG.config.debug\n }\n\n /**\n * @param { IPlayerOptions } options\n */\n constructor (options) {\n const config = Util.deepMerge(getDefaultConfig(), options)\n super(config)\n hooksDescriptor(this, PlAYER_HOOKS)\n\n /**\n * @type { IPlayerOptions }\n * @description 当前播放器的配置信息\n */\n this.config = config\n bindDebug(this)\n // resolve default preset\n const defaultPreset = this.constructor.defaultPreset\n if (this.config.presets.length) {\n const defaultIdx = this.config.presets.indexOf('default')\n if (defaultIdx >= 0 && defaultPreset) {\n this.config.presets[defaultIdx] = defaultPreset\n }\n } else if (defaultPreset) {\n this.config.presets.push(defaultPreset)\n }\n\n // timer and flags\n this.userTimer = null\n /**\n * @private\n */\n this.waitTimer = null\n\n /**\n * @private\n */\n this._state = STATES.INITIAL\n\n /**\n * @private\n */\n this._hasStart = false\n /**\n * Whether the player is in the seeking state\n * @type { boolean }\n * @readonly\n */\n this.isSeeking = false\n\n /**\n * @type { boolean }\n * @readonly\n */\n this.isCanplay = false\n /**\n * @private\n * @readonly\n */\n this._runPending = false\n /**\n * @type { number }\n */\n this.rotateDeg = 0\n /**\n * Whether the player is focus\n * @type { boolean }\n * @readonly\n */\n this.isActive = false\n\n /**\n * @type { boolean }\n * @readonly\n */\n this.isCssfullScreen = false\n\n /**\n * Whether player is currently in fullscreen\n * @type { boolean }\n * @readonly\n */\n this.fullscreen = false\n\n /**\n * fullscreenElement\n * @type { HTMLElement | null }\n * @readonly\n */\n this._fullscreenEl = null\n\n /**\n * cssFullscreen target Element\n * @type { HTMLElement | null }\n * @readonly\n */\n this._cssfullscreenEl = null\n\n /**\n * @type { IDefinition | null }\n * @readonly\n */\n this.curDefinition = null\n /**\n * @private\n * @type { string }\n */\n this._orgCss = ''\n /**\n * @readonly\n * @type { number }\n */\n this._fullScreenOffset = null\n /**\n * @private\n * @type { number }\n */\n this._videoHeight = 0\n /**\n * @private\n * @type { number }\n */\n this._videoWidth = 0\n /**\n * @private\n * @type { { begin: number, end:number, acc: number } }\n */\n this._played = {\n begin: -1,\n end: -1,\n acc: 0\n }\n\n /**\n * @type { null | HTMLElement }\n * @readonly\n * @description 控制栏和video不同布局的时候内部容器\n */\n this.innerContainer = null\n\n /**\n * @type { null | Object }\n * @readonly\n * @description 控制栏插件\n */\n this.controls = null\n\n /**\n * @type { null | HTMLElement }\n * @readonly\n */\n this.topBar = null\n\n /**\n * @type { null | HTMLElement }\n * @readonly\n */\n this.topBar = null\n\n /**\n * @type { null | HTMLElement }\n * @readonly\n * @description 当前播放器根节点\n */\n this.root = null\n\n // android 6以下不支持自动播放\n if (Sniffer.os.isAndroid && Sniffer.osVersion > 0 && Sniffer.osVersion < 6) {\n this.config.autoplay = false\n }\n /**\n * @readonly\n * @type {any}\n */\n this.database = new Database()\n\n const rootInit = this._initDOM()\n if (!rootInit) {\n console.error(new Error(`can't find the dom which id is ${this.config.id} or this.config.el does not exist`))\n return\n }\n\n this._bindEvents()\n this._registerPresets()\n this._registerPlugins()\n pluginsManager.onPluginsReady(this)\n\n this.setState(STATES.READY)\n this.emit(Events.READY)\n this.onReady && this.onReady()\n\n // url为空的情况下 根据definition设置播放地址\n const { definition, url } = this.config\n if (!url && definition && definition.list && definition.list.length > 0 && definition.defaultDefinition) {\n definition.list.map(item => {\n if (item.definition === definition.defaultDefinition) {\n this.config.url = item.url\n this.curDefinition = item.definition\n }\n })\n }\n\n if (this.config.videoInit || this.config.autoplay) {\n if (!this.hasStart || this.state < STATES.ATTACHED) {\n this.start()\n }\n }\n }\n\n /**\n * init control domElement\n * @private\n */\n _initDOM () {\n this.root = this.config.id ? document.getElementById(this.config.id) : null\n if (!this.root) {\n const el = this.config.el\n if (el && el.nodeType === 1) {\n this.root = el\n } else {\n this.emit(Events.ERROR, new Errors('use', this.config.vid, {\n line: 32,\n handle: 'Constructor',\n msg: 'container id can\\'t be empty'\n }))\n console.error('this.confg.id or this.config.el can\\'t be empty')\n return false\n }\n }\n const ret = pluginsManager.checkPlayerRoot(this.root)\n if (ret) {\n XG_DEBUG.logWarn('The is an Player instance already exists in this.root, destroy it and reinitialize')\n ret.destroy()\n }\n this._initBaseDoms()\n\n // 允许自定义video对象的构造\n const XgVideoProxy = this.constructor.XgVideoProxy\n if (XgVideoProxy && this.videoConfig.mediaType === XgVideoProxy.mediaType) {\n const el = this.innerContainer || this.root\n this.detachVideoEvents(this.video)\n const _nVideo = new XgVideoProxy(el, this.config, this.videoConfig)\n this.attachVideoEvents(_nVideo)\n this.video = _nVideo\n }\n if (this.config.controls) {\n const controls = pluginsManager.register(this, Controls)\n this.controls = controls\n }\n const device = this.config.isMobileSimulateMode ? 'mobile' : Sniffer.device\n this.addClass(`${STATE_CLASS.DEFAULT} ${STATE_CLASS.ACTIVE} xgplayer-${device} ${this.config.controls ? '' : STATE_CLASS.NO_CONTROLS}`)\n if (this.config.autoplay) {\n this.addClass(STATE_CLASS.ENTER)\n } else {\n this.addClass(STATE_CLASS.NO_START)\n }\n if (this.config.fluid) {\n const style = {\n 'max-width': '100%',\n width: '100%',\n height: '0',\n 'padding-top': `${this.config.height * 100 / this.config.width}%`,\n position: 'position',\n top: '0',\n left: '0'\n }\n Object.keys(style).map(key => {\n this.root.style[key] = style[key]\n })\n } else {\n ['width', 'height'].map(key => {\n if (this.config[key]) {\n if (typeof this.config[key] !== 'number') {\n this.root.style[key] = this.config[key]\n } else {\n this.root.style[key] = `${this.config[key]}px`\n }\n }\n })\n }\n return true\n }\n\n /**\n * @private\n */\n _initBaseDoms () {\n /**\n * @readonly\n * @type { HTMLElement }\n */\n this.topBar = Util.createDom('xg-bar', '', { 'data-index': -1 }, 'xg-top-bar')\n /**\n * @readonly\n * @type { HTMLElement }\n */\n this.leftBar = Util.createDom('xg-bar', '', { 'data-index': -1 }, 'xg-left-bar')\n /**\n * @readonly\n * @type { HTMLElement }\n */\n this.rightBar = Util.createDom('xg-bar', '', { 'data-index': -1 }, 'xg-right-bar')\n if (this.config.marginControls) {\n this.innerContainer = Util.createDom('xg-video-container', '', { 'data-index': -1 }, 'xg-video-container')\n this.root.appendChild(this.innerContainer)\n }\n this.root.appendChild(this.topBar)\n this.root.appendChild(this.leftBar)\n this.root.appendChild(this.rightBar)\n }\n\n /**\n * @private\n */\n _bindEvents () {\n ['focus', 'blur'].forEach(item => {\n this.on(item, this['on' + item.charAt(0).toUpperCase() + item.slice(1)])\n })\n const resetFullState = () => {\n this.fullscreen = false\n this._fullScreenOffset = null\n }\n /**\n * @private\n */\n this.onFullscreenChange = (event, isFullScreen) => {\n const fullEl = Util.getFullScreenEl()\n if (this._fullActionFrom) {\n this._fullActionFrom = ''\n } else {\n // 快捷键触发\n this.emit(Events.USER_ACTION, {\n eventType: 'system',\n action: 'switch_fullscreen',\n pluginName: 'player',\n currentTime: this.currentTime,\n duration: this.duration,\n props: [{\n prop: 'fullscreen',\n from: true,\n to: false\n }]\n })\n }\n if (isFullScreen || (fullEl && (fullEl === this._fullscreenEl || fullEl.tagName === 'VIDEO'))) {\n Util.setTimeout(this, () => {\n this.resize()\n }, 100)\n this.video.focus()\n this.fullscreen = true\n // this.addClass(STATE_CLASS.FULLSCREEN)\n this.changeFullStyle(this.root, fullEl, STATE_CLASS.FULLSCREEN)\n this.emit(Events.FULLSCREEN_CHANGE, true, this._fullScreenOffset)\n if (this.isCssfullScreen) {\n this.exitCssFullscreen()\n }\n } else if (this.fullscreen) {\n Util.setTimeout(this, () => {\n this.resize()\n }, 100)\n const { _fullScreenOffset, config } = this\n if (config.needFullscreenScroll) {\n try {\n window.scrollTo(_fullScreenOffset.left, _fullScreenOffset.top)\n Util.setTimeout(this, () => {\n resetFullState()\n }, 50)\n } catch (e) {\n XG_DEBUG.logError(e)\n resetFullState()\n }\n } else {\n // 保证页面scroll的情况下退出全屏 页面定位在播放器位置\n this.video.focus()\n resetFullState()\n }\n if (!this.isCssfullScreen) {\n this.recoverFullStyle(this.root, this._fullscreenEl, STATE_CLASS.FULLSCREEN)\n } else {\n this.removeClass(STATE_CLASS.FULLSCREEN)\n }\n this._fullscreenEl = null\n // this.removeClass(STATE_CLASS.FULLSCREEN)\n this.emit(Events.FULLSCREEN_CHANGE, false)\n }\n }\n\n FULLSCREEN_EVENTS.forEach(item => {\n document && document.addEventListener(item, this.onFullscreenChange)\n })\n /**\n * @private\n */\n this.__webkitbeginfullscreen = (e) => {\n this._fullscreenEl = this.video\n this.onFullscreenChange(e, true)\n }\n /**\n * @private\n */\n this.__webkitendfullscreen = (e) => {\n this.onFullscreenChange(e, false)\n }\n if (Sniffer.os.isIos) {\n this.video.addEventListener('webkitbeginfullscreen', this.__webkitbeginfullscreen)\n this.video.addEventListener('webkitendfullscreen', this.__webkitendfullscreen)\n }\n this.once('loadeddata', this.resize)\n\n this.playFunc = () => {\n if (!this.config.closeFocusVideoFocus) {\n this.video.focus()\n }\n }\n this.once('play', this.playFunc)\n }\n\n /**\n * @private\n */\n _unbindEvents () {\n this.root.removeEventListener('mousemove', this.mousemoveFunc)\n FULLSCREEN_EVENTS.forEach(item => {\n document.removeEventListener(item, this.onFullscreenChange)\n })\n this.playFunc && this.off('play', this.playFunc)\n this.canPlayFunc && this.off('canplay', this.canPlayFunc)\n this.video.removeEventListener('webkitbeginfullscreen', this.__webkitbeginfullscreen)\n this.video.removeEventListener('webkitendfullscreen', this.__webkitendfullscreen)\n }\n\n /**\n *\n * @param { any } url\n * @returns\n */\n _startInit (url) {\n if (!this.video) {\n return\n }\n if (!url || url === '') {\n this.emit(Events.URL_NULL)\n XG_DEBUG.logWarn('config.url is null, please get url and run player._startInit(url)')\n if (this.config.nullUrlStart) {\n return\n }\n }\n this.canPlayFunc = () => {\n if (!this.config) {\n return\n }\n const { autoplay, startTime, defaultPlaybackRate } = this.config\n\n XG_DEBUG.logInfo('player', 'canPlayFunc', startTime)\n if (startTime) {\n this.currentTime = startTime > this.duration ? this.duration : startTime\n this.config.startTime = 0 // 仅仅使用一次\n }\n\n // 确保能生效\n if (defaultPlaybackRate !== 1) {\n this.playbackRate = defaultPlaybackRate\n }\n\n autoplay && this.videoPlay()\n this.off(Events.CANPLAY, this.canPlayFunc)\n this.removeClass(STATE_CLASS.ENTER)\n }\n\n if (Util.typeOf(url) === 'Array') {\n url.forEach(item => {\n this.video.appendChild(Util.createDom('source', '', {\n src: `${item.src}`,\n type: `${item.type || ''}`\n }))\n })\n this._attachSourceEvents(this.video)\n } else {\n this.video.src = url\n }\n\n if (Util.typeOf(this.config.volume) === 'Number') {\n this.volume = this.config.volume\n }\n\n this.loadeddataFunc && this.once('loadeddata', this.loadeddataFunc)\n const _root = this.innerContainer ? this.innerContainer : this.root\n if (this.video instanceof window.Element && !_root.contains(this.video)) {\n _root.insertBefore(this.video, _root.firstChild)\n }\n\n if (this.video.readyState >= 2) {\n this.canPlayFunc()\n } else {\n this.once(Events.CANPLAY, this.canPlayFunc)\n }\n\n XG_DEBUG.logInfo('_startInit')\n if (this.config.autoplay) {\n !(/^blob/.test(this.video.currentSrc) || /^blob/.test(this.video.src)) && this.load();\n // ios端无法自动播放的场景下,不调用play不会触发canplay loadeddata等事件\n (Sniffer.os.isIpad || Sniffer.os.isPhone) && this.videoPlay()\n }\n\n Util.setTimeout(this, () => {\n this.emit(Events.COMPLETE)\n }, 1)\n if (!this.hasStart || this.state < STATES.ATTACHED) {\n pluginsManager.afterInit(this)\n }\n this.hasStart = true\n this.setState(STATES.ATTACHED)\n }\n\n /**\n * 针对source列表播放方式添加错误监听\n * @doc https://stackoverflow.com/questions/47557135/html5-detect-the-type-of-error-when-trying-to-load-a-video-using-a-source-elem\n * @protected\n * @param { HTMLVideoElement | HTMLAudioElement } video\n */\n _attachSourceEvents (video) {\n const _c = video.children\n /**\n * @private\n */\n this._videoSourceCount = _c.length\n /**\n * @private\n */\n !this._sourceError && (this._sourceError = (e) => {\n this._videoSourceCount--\n if (this._videoSourceCount === 0) {\n if (this.videoEventMiddleware.error) {\n this.videoEventMiddleware.error.call(this, e, () => {\n this.errorHandler('error')\n })\n } else {\n this.errorHandler('error', { code: 4, message: 'sources load error' })\n }\n }\n })\n for (let i = 0; i < _c.length; i++) {\n _c[i].addEventListener('error', this._sourceError)\n }\n }\n\n /**\n * 移除source列表错误事件监听\n * @protected\n * @param { HTMLVideoElement | HTMLAudioElement } video\n */\n _detachSourceEvents (video) {\n const _c = video.children\n if (_c.length === 0 || !this._sourceError) {\n return\n }\n for (let i = 0; i < _c.length; i++) {\n _c[i].removeEventListener('error', this._sourceError)\n }\n }\n\n /**\n * 注册组件 组件列表config.plugins\n * @private\n */\n _registerPlugins () {\n /**\n * @private\n */\n this._loadingPlugins = []\n const ignores = this.config.ignores || []\n const plugins = this.config.plugins || []\n const i18n = this.config.i18n || []\n i18n.map(item => {\n I18N.use(item)\n })\n const ignoresStr = ignores.join('||').toLowerCase().split('||')\n plugins.map(plugin => {\n try {\n const pluginName = plugin.plugin ? plugin.plugin.pluginName : plugin.pluginName\n // 在ignores中的不做组装\n if (pluginName && ignoresStr.indexOf(pluginName.toLowerCase()) > -1) {\n return null\n }\n if (plugin.lazy && plugin.loader) {\n const loadingPlugin = pluginsManager.lazyRegister(this, plugin)\n if (plugin.forceBeforeInit) {\n loadingPlugin.then(() => {\n this._loadingPlugins.splice(this._loadingPlugins.indexOf(loadingPlugin), 1)\n }).catch((e) => {\n XG_DEBUG.logError('_registerPlugins:loadingPlugin', e)\n this._loadingPlugins.splice(this._loadingPlugins.indexOf(loadingPlugin), 1)\n })\n this._loadingPlugins.push(loadingPlugin)\n }\n\n return\n }\n return this.registerPlugin(plugin)\n } catch (err) {\n XG_DEBUG.logError('_registerPlugins:', err)\n return null\n }\n })\n }\n\n /**\n * @private\n */\n _registerPresets () {\n this.config.presets.forEach((preset) => {\n usePreset(this, preset)\n })\n }\n\n /**\n *\n * @param { {plugin: function, options:object} | function } plugin\n * @param { {[propName: string]: any;} } [config]\n * @returns { any } plugin\n */\n registerPlugin (plugin, config) {\n let PLUFGIN = null\n let options = null\n if (plugin.plugin && typeof plugin.plugin === 'function') {\n PLUFGIN = plugin.plugin\n options = plugin.options\n } else {\n PLUFGIN = plugin\n options = {}\n }\n if (config) {\n options.config = config\n }\n\n // 获取配置的position或者root\n const keys = Object.keys(this.config)\n for (let i = 0; i < keys.length; i++) {\n if (PLUFGIN.pluginName.toLowerCase() === keys[i].toLowerCase()) {\n const _pConfig = this.config[keys[i]]\n if (Util.typeOf(_pConfig) === 'Object') {\n _pConfig.root && (options.root = _pConfig.root)\n _pConfig.position && (options.position = _pConfig.position)\n }\n break\n }\n }\n\n const position = options.position ? options.position : (options.config && options.config.position) || (PLUFGIN.defaultConfig && PLUFGIN.defaultConfig.position)\n const { POSITIONS } = Plugin\n if (!options.root && typeof position === 'string' && position.indexOf('controls') > -1) {\n return this.controls && this.controls.registerPlugin(PLUFGIN, options, PLUFGIN.pluginName)\n }\n if (!options.root) {\n switch (position) {\n case POSITIONS.ROOT_RIGHT:\n options.root = this.rightBar\n break\n case POSITIONS.ROOT_LEFT:\n options.root = this.leftBar\n break\n case POSITIONS.ROOT_TOP:\n options.root = this.topBar\n break\n default:\n options.root = this.innerContainer || this.root\n break\n }\n }\n return pluginsManager.register(this, PLUFGIN, options)\n }\n\n /**\n *\n * @param { any } plugin\n */\n deregister (plugin) {\n if (typeof plugin === 'string') {\n pluginsManager.unRegister(this, plugin)\n } else if (plugin instanceof BasePlugin) {\n pluginsManager.unRegister(this, plugin.pluginName)\n }\n }\n\n /**\n *\n * @param { any } plugin\n */\n unRegisterPlugin (plugin) {\n this.deregister(plugin)\n }\n\n /**\n * 当前播放器挂载的插件实例列表\n * @type { {[propName: string]: any | null } }\n */\n get plugins () {\n return pluginsManager.getPlugins(this)\n }\n\n /**\n * get a plugin instance\n * @param { string } pluginName\n * @return { null | any } plugin\n */\n getPlugin (pluginName) {\n const plugin = pluginsManager.findPlugin(this, pluginName)\n return plugin && plugin.pluginName ? plugin : null\n }\n\n /**\n *\n * @param { string } className\n */\n addClass (className) {\n if (!this.root) {\n return\n }\n if (!Util.hasClass(this.root, className)) {\n Util.addClass(this.root, className)\n }\n }\n\n /**\n *\n * @param { string } className\n * @returns\n */\n removeClass (className) {\n if (!this.root) {\n return\n }\n Util.removeClass(this.root, className)\n }\n\n /**\n *\n * @param { string } className\n * @returns { boolean } has\n */\n hasClass (className) {\n if (!this.root) {\n return\n }\n return Util.hasClass(this.root, className)\n }\n\n /**\n *\n * @param { string } key\n * @param { any } value\n * @returns void\n */\n setAttribute (key, value) {\n if (!this.root) {\n return\n }\n this.root.setAttribute(key, value)\n }\n\n /**\n *\n * @param { string } key\n * @param { any } value\n * @returns void\n */\n removeAttribute (key, value) {\n if (!this.root) {\n return\n }\n this.root.removeAttribute(key, value)\n }\n\n /**\n *\n * @param { any } url\n * @returns { Promise<void> | void }\n * @description 启动播放器,start一般都是播放器内部隐式调用,主要功能是将video添加到DOM\n */\n start (url) {\n // 已经开始初始化播放了 则直接调用play\n if (this.hasStart || this.state >= STATES.ATTACHING) {\n return Promise.resolve()\n }\n this.hasStart = true\n this.setState(STATES.ATTACHING)\n\n return pluginsManager.beforeInit(this).then(() => {\n // this.config为空即已经销毁,不再执行后面的异步流程\n if (!this.config) {\n return\n }\n if (!url) {\n url = this.url || this.config.url\n }\n const ret = this._startInit(url)\n return ret\n }).catch((e) => {\n e.fileName = 'player'\n e.lineNumber = '236'\n XG_DEBUG.logError('start:beforeInit:', e)\n throw e\n })\n }\n\n /**\n * @param { string } url\n * @param { boolean } seamless\n */\n switchURL (url, seamless) {\n this.src = url\n }\n\n load () {\n this.video && this.video.load()\n }\n\n videoPlay () {\n if (!this.hasStart && this.state < STATES.ATTACHED) {\n this.removeClass(STATE_CLASS.NO_START)\n this.addClass(STATE_CLASS.ENTER)\n const ret = this.start()\n ret && ret.then(resolve => {\n !this.config.autoplay && this.videoPlay()\n })\n return\n }\n if (this.state < STATES.RUNNING) {\n this.removeClass(STATE_CLASS.NO_START)\n !this.isCanplay && this.addClass(STATE_CLASS.ENTER)\n }\n const playPromise = super.play()\n if (playPromise !== undefined && playPromise && playPromise.then) {\n playPromise.then(() => {\n this.removeClass(STATE_CLASS.NOT_ALLOW_AUTOPLAY)\n this.addClass(STATE_CLASS.PLAYING)\n if (this.state < STATES.RUNNING) {\n XG_DEBUG.logInfo('>>>>playPromise.then')\n this.setState(STATES.RUNNING)\n this.emit(Events.AUTOPLAY_STARTED)\n }\n }).catch((e) => {\n XG_DEBUG.logWarn('>>>>playPromise.catch', e.name)\n if (this.video && this.video.error) {\n this.onError()\n // this.errorHandler('error')\n this.removeClass(STATE_CLASS.ENTER)\n this.setState(STATES.ERROR)\n return\n }\n // 避免AUTOPLAY_PREVENTED先于playing和play触发\n if (e.name === 'NotAllowedError') {\n /**\n * @private\n */\n this._errorTimer = Util.setTimeout(this, () => {\n this._errorTimer = null\n this.emit(Events.AUTOPLAY_PREVENTED)\n this.addClass(STATE_CLASS.NOT_ALLOW_AUTOPLAY)\n this.removeClass(STATE_CLASS.ENTER)\n this.pause()\n this.setState(STATES.NOTALLOW)\n }, 0)\n }\n })\n } else {\n XG_DEBUG.logWarn('video.play not return promise')\n if (this.state < STATES.RUNNING) {\n this.setState(STATES.RUNNING)\n this.removeClass(STATE_CLASS.NOT_ALLOW_AUTOPLAY)\n this.removeClass(STATE_CLASS.NO_START)\n this.removeClass(STATE_CLASS.ENTER)\n this.addClass(STATE_CLASS.PLAYING)\n this.emit(Events.AUTOPLAY_STARTED)\n }\n }\n return playPromise\n }\n\n videoPause () {\n super.pause()\n }\n\n play () {\n this.removeClass(STATE_CLASS.PAUSED)\n runHooks(this, 'play', () => {\n this.videoPlay()\n })\n }\n\n pause () {\n runHooks(this, 'pause', () => {\n super.pause()\n })\n }\n\n /**\n *\n * @param { number } time\n * @returns\n */\n seek (time) {\n if (!this.video || isNaN(Number(time))) {\n return\n }\n const { isSeekedPlay, seekedStatus } = this.config\n const _status = isSeekedPlay ? 'play' : seekedStatus\n time = time < 0 ? 0 : time > this.duration ? parseInt(this.duration, 10) : time\n this.once(Events.CANPLAY, () => {\n this.removeClass(STATE_CLASS.ENTER)\n this.isSeeking = false\n switch (_status) {\n case 'play':\n this.play()\n break\n case 'pause':\n this.pause()\n break\n default:\n !this.paused && this.play()\n }\n })\n if (this.state < STATES.RUNNING) {\n this.removeClass(STATE_CLASS.NO_START)\n this.addClass(STATE_CLASS.ENTER)\n this.currentTime = time\n _status === 'play' && this.play()\n } else {\n this.currentTime = time\n }\n }\n\n /**\n * @typedef { {\n * url: any,\n * definition: any,\n * [propName: string]: any\n * } } definition\n */\n /**\n * @description change the definition of the current playback\n * @param { definition } to\n * @param { definition } [from]\n */\n changeDefinition (to, from) {\n this.emit(Events.DEFINITION_CHANGE, { from, to })\n const curTime = this.currentTime\n const isPaused = this.paused\n this.curDefinition = to.definition\n if (!this.hasStart) {\n this.config.url = to.url\n return\n }\n if (this.switchURL) {\n this.switchURL(to.url)\n } else {\n this.src = to.url\n }\n const _canplay = () => {\n this.currentTime = curTime\n if (!isPaused) {\n const playPromise = this.play()\n if (playPromise !== undefined && playPromise) {\n // eslint-disable-next-line handle-callback-err\n playPromise.catch(_err => {})\n }\n } else {\n this.pause()\n }\n this.emit(Events.AFTER_DEFINITION_CHANGE, { from, to })\n }\n if (Sniffer.os.isAndroid) {\n this.once('timeupdate', () => {\n _canplay()\n })\n } else {\n this.once('canplay', () => {\n _canplay()\n })\n }\n }\n\n reload () {\n this.load()\n /**\n * @private\n */\n this.reloadFunc = function () {\n this.play().catch(err => { console.log(err) })\n }\n this.once('loadeddata', this.reloadFunc)\n }\n\n resetState () {\n const { NOT_ALLOW_AUTOPLAY, PLAYING, NO_START, PAUSED, REPLAY, ENTER, ENDED, ERROR, LOADING } = STATE_CLASS\n const clsList = [NOT_ALLOW_AUTOPLAY, PLAYING, NO_START, PAUSED, REPLAY, ENTER, ENDED, ERROR, LOADING]\n this.hasStart = false\n this.videoPause()\n clsList.forEach((cls) => {\n this.removeClass(cls)\n })\n this.addClass(STATE_CLASS.ENTER)\n this.emit(Events.EMPTIED)\n }\n\n /**\n * @description destroy the player instance\n * @returns\n */\n destroy () {\n const { innerContainer, root, video } = this\n if (!root) {\n return\n }\n this._hasStart = false\n this._unbindEvents()\n this._detachSourceEvents(this.video)\n Util.clearAllTimers(this)\n pluginsManager.destroy(this)\n delHooksDescriptor(this)\n super.destroy()\n // 退出全屏\n if (this.fullscreen && this._fullscreenEl === this.root) {\n try {\n this.exitFullscreen()\n } catch (e) {}\n }\n\n if (innerContainer) {\n const _c = innerContainer.children\n for (let i = 0; i < _c.length; i++) {\n innerContainer.removeChild(_c[i])\n }\n }\n !innerContainer && root.contains(video) && root.removeChild(video);\n ['topBar', 'leftBar', 'rightBar', 'innerContainer'].map(item => {\n this[item] && root.removeChild(this[item])\n this[item] = null\n })\n const cList = root.className.split(' ')\n if (cList.length > 0) {\n root.className = cList.filter(name => name.indexOf('xgplayer') < 0).join(' ')\n } else {\n root.className = ''\n }\n this.removeAttribute('data-xgfill');\n\n ['isSeeking', 'isCanplay', 'isActive', 'isCssfullScreen', 'fullscreen'].map(key => {\n this[key] = false\n })\n }\n\n replay () {\n this.removeClass(STATE_CLASS.ENDED)\n this.currentTime = 0\n this.isSeeking = false\n runHooks(this, 'replay', () => {\n this.once(Events.CANPLAY, () => {\n const playPromise = this.videoPlay()\n if (playPromise && playPromise.catch) {\n playPromise.catch(err => {\n console.log(err)\n })\n }\n })\n this.play()\n this.emit(Events.REPLAY)\n this.onPlay()\n })\n }\n\n retry () {\n this.removeClass(STATE_CLASS.ERROR)\n this.addClass(STATE_CLASS.LOADING)\n runHooks(this, 'retry', () => {\n const cur = this.currentTime\n this.videoPause()\n this.src = this.config.url\n !this.config.isLive && (this.currentTime = cur)\n this.once(Events.CANPLAY, () => {\n this.videoPlay()\n })\n })\n }\n\n /**\n *\n * @param { HTMLElement } root\n * @param { HTMLElement } [el]\n * @param { string } [rootClass]\n * @param { string } [pClassName]\n */\n changeFullStyle (root, el, rootClass, pClassName) {\n if (!root) {\n return\n }\n if (!pClassName) {\n pClassName = STATE_CLASS.PARENT_FULLSCREEN\n }\n if (!this._orgCss) {\n this._orgCss = Util.filterStyleFromText(root)\n }\n Util.addClass(root, rootClass)\n if (el && el !== root && !this._orgPCss) {\n /**\n * @private\n */\n this._orgPCss = Util.filterStyleFromText(el)\n Util.addClass(el, pClassName)\n }\n }\n\n /**\n *\n * @param { HTMLElement } root\n * @param { HTMLElement } [el]\n * @param { string } [rootClass]\n * @param { string } [pClassName]\n */\n recoverFullStyle (root, el, rootClass, pClassName) {\n if (!pClassName) {\n pClassName = STATE_CLASS.PARENT_FULLSCREEN\n }\n if (this._orgCss) {\n Util.setStyleFromCsstext(root, this._orgCss)\n this._orgCss = ''\n }\n Util.removeClass(root, rootClass)\n if (el && el !== root && this._orgPCss) {\n Util.setStyleFromCsstext(el, this._orgPCss)\n this._orgPCss = ''\n Util.removeClass(el, pClassName)\n }\n }\n\n /**\n * @param { HTMLElement } [el]\n * @returns { Promise<void>; }\n */\n getFullscreen (el = this.config.fullscreenTarget) {\n const { root, video } = this\n if (!el) {\n el = root\n }\n this._fullScreenOffset = {\n top: Util.scrollTop(),\n left: Util.scrollLeft()\n }\n // if (root.getAttribute('style')) {\n // this._orgCss = root.style.cssText\n // root.removeAttribute('style')\n // }\n this._fullscreenEl = el\n /**\n * @private\n */\n this._fullActionFrom = 'get'\n const fullEl = Util.getFullScreenEl()\n if (fullEl === this._fullscreenEl) {\n this.onFullscreenChange()\n return\n }\n try {\n for (let i = 0; i < GET_FULLSCREEN_API.length; i++) {\n const key = GET_FULLSCREEN_API[i]\n if (el[key]) {\n const ret = key === 'webkitRequestFullscreen' ? el.webkitRequestFullscreen(window.Element.ALLOW_KEYBOARD_INPUT) : el[key]()\n if (ret && ret.then) {\n return ret\n } else {\n return Promise.resolve()\n }\n }\n }\n if (video.fullscreenEnabled || video.webkitSupportsFullscreen) {\n video.webkitEnterFullscreen()\n return Promise.resolve()\n }\n return Promise.reject(new Error('call getFullscreen fail'))\n } catch (e) {\n return Promise.reject(new Error('call getFullscreen fail'))\n }\n }\n\n /**\n * @param { HTMLElement } [el]\n * @returns { Promise<void>; }\n */\n exitFullscreen (el) {\n if (!this._fullscreenEl || !Util.getFullScreenEl()) {\n return\n }\n const { root, video } = this\n if (el) {\n el = root\n }\n this._fullActionFrom = 'exit'\n for (let i = 0; i < EXIT_FULLSCREEN_API.length; i++) {\n const key = EXIT_FULLSCREEN_API[i]\n if (document[key]) {\n const ret = document[key]()\n if (ret && ret.then) {\n return ret\n } else {\n return Promise.resolve()\n }\n }\n }\n if (video && video.webkitSupportsFullscreen) {\n video.webkitExitFullScreen()\n return Promise.resolve()\n }\n return Promise.reject(new Error('call exitFullscreen fail'))\n }\n\n /**\n * @param { HTMLElement } [el]\n * @returns\n */\n getCssFullscreen (el = this.config.fullscreenTarget) {\n if (this.fullscreen) {\n this.exitFullscreen()\n }\n this._cssfullscreenEl = el\n this.changeFullStyle(this.root, el, el ? STATE_CLASS.INNER_FULLSCREEN : STATE_CLASS.CSS_FULLSCREEN)\n this.isCssfullScreen = true\n this.emit(Events.CSS_FULLSCREEN_CHANGE, true)\n }\n\n /**\n * @param { HTMLElement } [el]\n * @returns\n */\n exitCssFullscreen () {\n const _class = this._cssfullscreenEl ? STATE_CLASS.INNER_FULLSCREEN : STATE_CLASS.CSS_FULLSCREEN\n if (!this.fullscreen) {\n this.recoverFullStyle(this.root, this._cssfullscreenEl, _class)\n } else {\n this.removeClass(_class)\n }\n this._cssfullscreenEl = null\n this.isCssfullScreen = false\n this.emit(Events.CSS_FULLSCREEN_CHANGE, false)\n }\n\n /**\n * @description 播放器焦点状态,控制栏显示\n * @param { {\n * autoHide?: boolean, // 是否可以自动隐藏\n * delay?: number // 自动隐藏的延迟时间,ms, 不传默认使用3000ms\n * } } [data]\n */\n focus (data = { autoHide: !this.config.closePlayerBlur, delay: this.config.inactive }) {\n if (this.isActive) {\n this.onFocus(data)\n return\n }\n this.emit(Events.PLAYER_FOCUS, {\n paused: this.paused,\n ended: this.ended,\n ...data\n })\n }\n\n /**\n * @description 取消播放器当前焦点状态\n * @param { { ignorePaused?: boolean } } [data]\n */\n blur (data = { ignorePaused: false }) {\n if (!this.isActive) {\n this.onBlur(data)\n return\n }\n this.emit(Events.PLAYER_BLUR, {\n paused: this.paused,\n ended: this.ended,\n ...data\n })\n }\n\n /**\n * @protected\n * @param { { autoHide?: boolean, delay?: number} } [data]\n * @returns\n */\n onFocus (data = { autoHide: true, delay: 3000 }) {\n this.isActive = true\n this.removeClass(STATE_CLASS.ACTIVE)\n if (this.userTimer) {\n Util.clearTimeout(this, this.userTimer)\n }\n if (data.autoHide === false) {\n return\n }\n const time = data && data.delay ? data.delay : this.config.inactive\n this.userTimer = Util.setTimeout(this, () => {\n this.blur()\n }, time)\n }\n\n /**\n * @protected\n * @param {{ ignorePaused?: boolean }} [data]\n * @returns\n */\n onBlur (data = { ignorePaused: false }) {\n if (!this.isActive) {\n return\n }\n const { closePauseVideoFocus } = this.config\n this.isActive = false\n if (data.ignorePaused || closePauseVideoFocus || (!this.paused && !this.ended)) {\n this.addClass(STATE_CLASS.ACTIVE)\n }\n }\n\n /**\n * @protected\n */\n onCanplay () {\n this.state >= STATES.RUNNING && this.removeClass(STATE_CLASS.ENTER)\n this.removeClass(STATE_CLASS.LOADING)\n this.isCanplay = true\n }\n\n /**\n * @protected\n */\n onPlay () {\n // this.addClass(STATE_CLASS.PLAYING)\n // this.removeClass(STATE_CLASS.NOT_ALLOW_AUTOPLAY)\n if (this.state === STATES.ENDED) {\n this.setState(STATES.RUNNING)\n }\n this.removeClass(STATE_CLASS.PAUSED)\n this.ended && this.removeClass(STATE_CLASS.ENDED)\n !this.config.closePlayVideoFocus && this.focus()\n }\n\n /**\n * @protected\n */\n onPause () {\n this.addClass(STATE_CLASS.PAUSED)\n if (!this.config.closePauseVideoFocus) {\n if (this.userTimer) {\n Util.clearTimeout(this, this.userTimer)\n }\n this.focus()\n }\n }\n\n /**\n * @protected\n */\n onEnded () {\n this.addClass(STATE_CLASS.ENDED)\n this.setState(STATES.ENDED)\n // this.removeClass(STATE_CLASS.PLAYING)\n }\n\n /**\n * @protected\n */\n onError () {\n this.setState(STATES.ERROR)\n this.removeClass(STATE_CLASS.NOT_ALLOW_AUTOPLAY)\n this.removeClass(STATE_CLASS.NO_START)\n this.removeClass(STATE_CLASS.ENTER)\n this.removeClass(STATE_CLASS.LOADING)\n this.addClass(STATE_CLASS.ERROR)\n }\n\n /**\n * @protected\n */\n onSeeking () {\n if (!this.isSeeking) {\n const { _played } = this\n _played.acc += _played.begin < _played.end && _played.end > -1 ? _played.end - _played.begin : 0\n _played.begin = parseInt(this.video.currentTime * 1000, 10)\n _played.end = -1\n }\n this.isSeeking = true\n this.addClass(STATE_CLASS.SEEKING)\n }\n\n /**\n * @protected\n */\n onSeeked () {\n this.isSeeking = false\n // for ie,playing fired before waiting\n if (this.waitTimer) {\n Util.clearTimeout(this, this.waitTimer)\n }\n this.removeClass(STATE_CLASS.LOADING)\n this.removeClass(STATE_CLASS.SEEKING)\n }\n\n /**\n * @protected\n */\n onWaiting () {\n if (this.waitTimer) {\n Util.clearTimeout(this, this.waitTimer)\n }\n this.waitTimer = Util.setTimeout(this, () => {\n this.addClass(STATE_CLASS.LOADING)\n Util.clearTimeout(this, this.waitTimer)\n this.waitTimer = null\n }, 200)\n }\n\n /**\n * @protected\n */\n onPlaying () {\n const { NO_START, PAUSED, ENDED, ERROR, REPLAY, LOADING } = STATE_CLASS\n const clsList = [NO_START, PAUSED, ENDED, ERROR, REPLAY, LOADING]\n clsList.forEach((cls) => {\n this.removeClass(cls)\n })\n }\n\n /**\n * @protected\n */\n onTimeupdate () {\n !this._videoHeight && this.resize()\n if ((this.waitTimer || this.hasClass(STATE_CLASS.LOADING)) && this.video.readyState > 2) {\n this.removeClass(STATE_CLASS.LOADING)\n Util.clearTimeout(this, this.waitTimer)\n this.waitTimer = null\n }\n\n if (this._played.begin < 0) {\n this._played.begin = parseInt(this.video.currentTime * 1000, 10)\n }\n this._played.end = parseInt(this.video.currentTime * 1000, 10)\n }\n\n onVolumechange () {\n Util.typeOf(this.config.volume) === 'Number' && (this.config.volume = this.volume)\n }\n\n onRatechange () {\n this.config.defaultPlaybackRate = this.playbackRate\n }\n\n /**\n *\n * @param { number } time\n * @returns { boolean }\n */\n checkBuffer (time) {\n const buffered = this.video.buffered\n if (!buffered || buffered.length === 0 || !this.duration) {\n return true\n }\n const currentTime = time || this.video.currentTime || 0.2\n const len = buffered.length\n for (let i = 0; i < len; i++) {\n if (buffered.start(i) <= currentTime && buffered.end(i) > currentTime) {\n return true\n }\n }\n return false\n }\n\n /**\n * @description position video/audio according to height ratio and y coordinate\n * @param { { h: number, y?: number, x?:number, w?:number} } pos\n * @returns\n */\n position (pos = { h: 0, y: 0, x: 0, w: 0 }) {\n if (!pos || !pos.h) {\n return\n }\n const rvH = 1 / pos.h\n let _transform = rvH !== 1 ? `scale(${rvH})` : ''\n let _tx = 0; let _ty = 0\n if (pos.y) {\n _ty = (100 - pos.h * 100) / 2 - pos.y * 100\n }\n if (pos.w && pos.x) {\n _tx = (100 - pos.w * 100) / 2 - pos.x * 100\n }\n _transform += ` translate(${_tx}%, ${_ty}%)`\n this.video.style.transform = _transform\n this.video.style.webkitTransform = _transform\n }\n\n resize () {\n const { videoWidth, videoHeight } = this.video\n const { fitVideoSize, videoFillMode } = this.config\n\n if (videoFillMode === 'fill' || videoFillMode === 'cover') {\n this.setAttribute('data-xgfill', videoFillMode)\n }\n\n if (!videoHeight || !videoWidth) {\n return\n }\n this._videoHeight = videoHeight\n this._videoWidth = videoWidth\n const containerSize = this.root.getBoundingClientRect()\n const controlsHeight = this.controls && this.innerContainer ? this.controls.root.getBoundingClientRect().height : 0\n const width = containerSize.width\n const height = containerSize.height - controlsHeight\n const videoFit = parseInt(videoWidth / videoHeight * 1000, 10)\n const fit = parseInt(width / height * 1000, 10)\n let rWidth = width\n let rHeight = height\n const _style = {}\n if ((fitVideoSize === 'auto' && fit > videoFit) || fitVideoSize === 'fixWidth') {\n rHeight = width / videoFit * 1000\n if (this.config.fluid) {\n _style.paddingTop = `${rHeight * 100 / rWidth}%`\n } else {\n _style.height = `${rHeight + controlsHeight}px`\n }\n } else if ((fitVideoSize === 'auto' && fit < videoFit) || fitVideoSize === 'fixHeight') {\n rWidth = videoFit * height / 1000\n _style.width = `${rWidth}px`\n }\n // 全屏不做行间css设置\n if (!this.fullscreen && !this.isCssfullScreen) {\n Object.keys(_style).map(key => {\n this.root.style[key] = _style[key]\n })\n }\n // video填充模式\n if ((videoFillMode === 'fillHeight' && fit < videoFit) || (videoFillMode === 'fillWidth' && fit > videoFit)) {\n this.setAttribute('data-xgfill', 'cover')\n }\n const data = { videoScale: videoFit, vWidth: rWidth, vHeight: rHeight, cWidth: rWidth, cHeight: rHeight + controlsHeight }\n this.emit(Events.VIDEO_RESIZE, data)\n }\n\n /**\n *\n * @param { number } left\n * @param { number } top\n * @returns\n */\n updateObjectPosition (left = 0, top = 0) {\n if (this.video.updateObjectPosition) {\n this.video.updateObjectPosition(left, top)\n return\n }\n this.video.style.objectPosition = `${left * 100}% ${top * 100}%`\n }\n\n /**\n * @protected\n * @param { number } newState\n */\n setState (newState) {\n XG_DEBUG.logInfo('setState', `state from:${STATE_ARRAY[this.state]} to:${STATE_ARRAY[newState]}`)\n this._state = newState\n }\n\n /**\n * @type { number }\n */\n get state () {\n return this._state\n }\n\n /**\n * @type { boolean }\n * @description 是否开始播放\n */\n get hasStart () {\n return this._hasStart\n }\n\n set hasStart (bool) {\n if (typeof bool === 'boolean') {\n this._hasStart = bool\n if (bool === false) {\n this._state = STATES.READY\n }\n this.emit('hasstart')\n }\n }\n\n /**\n * @typedef { {\n * url: any,\n * definition: any,\n * text?: string,\n * text?: string | { [propName: string]: any },\n * iconText?: string | { [propName: string]: any }\n * } } IDefinition\n */\n\n /**\n * @type { Array <IDefinition> }\n */\n set definitionList (list) {\n const { definition } = this.config\n definition.list = list\n this.emit('resourceReady', list)\n let cutTo = null\n let to = null\n list.map(item => {\n if (this.curDefinition === item.definition) {\n cutTo = item\n }\n if (definition.defaultDefinition === item.definition) {\n to = item\n }\n })\n if (!to && list.length > 0) {\n to = list[0]\n }\n cutTo ? this.changeDefinition(cutTo) : (to && this.changeDefinition(to))\n }\n\n get definitionList () {\n return this.config.definition.list || []\n }\n\n /**\n * @type { string }\n */\n set lang (lang) {\n const result = I18N.langKeys.filter(key => key === lang)\n if (result.length === 0 && lang !== 'zh') {\n console.error(`Sorry, set lang fail, because the language [${lang}] is not supported now, list of all supported languages is [${I18N.langKeys.join()}] `)\n return\n }\n this.config.lang = lang\n pluginsManager.setLang(lang, this)\n }\n\n get lang () {\n return this.config.lang\n }\n\n get i18n () {\n const { lang } = this.config\n return I18N.lang[lang] || I18N.lang.en\n }\n\n get i18nKeys () {\n return I18N.textKeys || {}\n }\n\n /**\n * @type { string }\n */\n get version () {\n return version\n }\n\n /**\n * @type { any }\n */\n set url (url) {\n /**\n * @private\n */\n this.__url = url\n }\n\n get url () {\n return this.__url || this.config.url\n }\n\n /**\n * @type { string }\n */\n set poster (posterUrl) {\n this.plugins.poster && this.plugins.poster.update(posterUrl)\n }\n\n get poster () {\n return this.plugins.poster ? this.plugins.poster.config.poster : this.config.poster\n }\n\n /**\n * @type { string }\n */\n get readyState () {\n const key = super.readyState\n return this.i18n[key] || key\n }\n\n get error () {\n const key = super.error\n return this.i18n[key] || key\n }\n\n get networkState () {\n const key = super.networkState\n return this.i18n[key] || key\n }\n\n /**\n * @type { boolean }\n */\n get fullscreenChanging () {\n return !(this._fullScreenOffset === null)\n }\n\n /**\n * 累计观看时长\n * @type number\n */\n get cumulateTime () {\n const { acc, end, begin } = this._played\n return begin > -1 && end > begin ? (acc + end - begin) / 1000 : acc / 1000\n }\n\n /**\n * @type { number }\n */\n get zoom () {\n return this.config.zoom\n }\n\n /**\n * @type { number }\n */\n set zoom (value) {\n this.config.zoom = value\n }\n\n /**\n * @param { string } hookName\n * @param { Function } handler\n * @param { {pre: Function| null , next: Function | null} } preset\n * @returns\n */\n hook (hookName, handler, preset = { pre: null, next: null }) {\n // eslint-disable-next-line no-return-assign\n return hook.call(this, ...arguments)\n }\n\n /**\n * @param { string } hookName\n * @param { (player: any, ...args) => boolean | Promise<any> } handler\n * @param {...any} args\n * @returns {boolean} isSuccess\n */\n useHooks (hookName, handler) {\n return useHooks.call(this, ...arguments)\n }\n\n /**\n *\n * @param { string } pluginName\n * @param { string } hookName\n * @param { (plugin: any, ...args) => boolean | Promise<any> } handler\n * @param {...any} args\n * @returns { boolean } isSuccess\n */\n usePluginHooks (pluginName, hookName, handler, ...args) {\n return usePluginHooks.call(this, ...arguments)\n }\n\n /***\n * @deprecated\n * 插件全部迁移完成再做删除\n */\n static install (name, descriptor) {\n if (!Player.plugins) {\n Player.plugins = {}\n }\n if (!Player.plugins[name]) {\n Player.plugins[name] = descriptor\n }\n }\n\n /***\n * @deprecated\n * 插件全部迁移完成再做删除\n */\n static use (name, descriptor) {\n if (!Player.plugins) {\n Player.plugins = {}\n }\n Player.plugins[name] = descriptor\n }\n\n static defaultPreset = null\n\n /**\n * @description 自定义media构造函数\n */\n static XgVideoProxy = null\n}\n\nexport {\n Player as default,\n Plugin,\n BasePlugin,\n Events,\n Errors,\n Sniffer,\n Util,\n STATE_CLASS,\n I18N\n}\n","/**\n * @typedef { {\n * id?: string,\n * el?: HTMLElement,\n * url?: any,\n * nullUrlStart?: boolean,\n * width?: number | string,\n * height?: number | string,\n * fluid?: boolean,\n * fitVideoSize?: 'fixWidth'|'fixHeight'|'fixed',\n * videoFillMode?: 'auto'|'fillHeight'|'fillWidth'|'fill'|'cover',\n * volume?: number | { [propName: string]: any },\n * autoplay?: boolean,\n * autoplayMuted?: boolean,\n * loop?: boolean,\n * isLive?: boolean,\n * zoom?: number,\n * videoInit?: boolean,\n * poster?: string | { [propName: string]: any },\n * isMobileSimulateMode?: 'mobile' | 'pc',\n * defaultPlaybackRate?: number,\n * execBeforePluginsCall?: () => any,\n * allowSeekAfterEnded?: boolean,\n * enableContextmenu?: boolean,\n * closeVideoClick?: boolean,\n * closeVideoDblclick?: boolean,\n * closePlayerBlur?: boolean,\n * closeDelayBlur?: boolean,\n * leavePlayerTime?: number,\n * closePlayVideoFocus?: boolean,\n * closePauseVideoFocus?: boolean,\n * closeFocusVideoFocus?: boolean,\n * closeControlsBlur?: boolean,\n * videoAttributes?: { [propName: string]: any },\n * startTime?: number,\n * seekedStatus?: 'play' | 'pause' | 'auto',\n * miniprogress?: boolean,\n * disableSwipeHandler?: () => any,\n * enableSwipeHandler?: () => any,\n * ignores?: Array<'cssfullscreen' | 'screenshot' | 'pip' | 'miniscreen' | 'keyboard' | 'download' | 'playbackrate' | 'time' | 'definition' | 'error' | 'fullscreen' | 'loading' | 'mobile' | 'pc' | 'play' | 'poster' | 'progress' | 'replay' | 'start' | 'volume' | string>,\n * inactive?: number,\n * lang?: string,\n * controls?: boolean | { [propName: string]: any },\n * marginControls?: boolean,\n * fullscreenTarget?: [HTMLElement], // 全屏作用的dom元素\n * screenShot?: boolean | { [propName: string]: any },\n * rotate?: boolean | { [propName: string]: any },\n * pip?: boolean | { [propName: string]: any },\n * download?: boolean | { [propName: string]: any },\n * mini?: boolean | { [propName: string]: any },\n * cssFullscreen?: boolean | { [propName: string]: any },\n * keyShortcut?: boolean,\n * presets?: any[],\n * plugins?: any[]\n * playbackRate?: number | Array<number> | { [propName: string]: any },\n * definition?: { list: Array<{ url: any, definition: any, [propName: string]: any }> , defaultDefinition?: any, [propName: string]: any},\n * playsinline?: boolean,\n * customDuration?: number,\n * timeOffset?: number,\n * icons?: { [propName: string]: string | HTMLElement | () => HTMLElement | string },\n * i18n?: Array<any>,\n * thumbnail?: {\n * urls: Array<string>,\n * pic_num: number,\n * col: number,\n * row: number,\n * height?: number,\n * width?: number,\n * },\n * videoConfig?: { [propName: string]: any },\n * commonStyle?: {\n * progressColor?: string,\n * playedColor?: string,\n * cachedColor?: string,\n * sliderBtnStyle?: { [propName: string]: any },\n * volumeColor?: string\n * },\n * [propName: string]: any;\n * } } IPlayerOptions\n */\n\n/**\n *\n * @returns { IPlayerOptions }\n */\nexport default function getDefaultConfig () {\n return {\n id: '', // container DOM id\n el: null, // container domElement\n url: '', // the url need to play\n nullUrlStart: false, // Whether to start broadcasting with empty url\n width: 600, // Width, unit px\n height: 337.5, // height, unit px\n fluid: false,\n fitVideoSize: 'fixed', // adaptation method of container width and height, fixWidth/fixHeight/fixed/auto\n videoFillMode: 'auto', // video screen fill mode, fillHeight/fillWidth/fill/auto/cover\n volume: 0.6, // default volume or config of plug-in volume\n autoplay: false,\n autoplayMuted: false, // whether to mute the start\n loop: false, // whether to loop\n isLive: false, // whether is live\n zoom: 1,\n videoInit: true, // whether to load the video/audio when initializing\n poster: '', // cover poster url or the configuration object for poster plugin\n isMobileSimulateMode: false, // simulation state, mobile/pc\n defaultPlaybackRate: 1, // default playback rate\n execBeforePluginsCall: null,\n allowSeekAfterEnded: true, // whether to allow seek after the playback ended\n enableContextmenu: false, // whether to allow the right-click function to be enabled\n closeVideoClick: false, // is to close the video’s click/touchend behavior to switch playback and pause\n closeVideoDblclick: false, // is to close the video`s double-click behavior to switch through full screen\n closePlayerBlur: false, // whether to close the behavior of calling player.blur() when the mouse moves out of the player area\n closeDelayBlur: false, // whether to close the automatic hide control bar behavior\n leavePlayerTime: 3000, // auto hide delay time when the mouse moves out of the player area\n closePlayVideoFocus: false, // whether to close the behavior of calling player.focus() in the play event callback\n closePauseVideoFocus: false, // whether to close the behavior of calling player.focus() in the pause event callback\n closeFocusVideoFocus: false, // whether to close the behavior of calling player.video.focus() when start play\n closeControlsBlur: false, // whether to close the behavior of calling player.focus() when the mouse moves out of the control bar area\n videoAttributes: {}, // video extended attributes\n startTime: 0, // auto play start time\n seekedStatus: 'play', // play state after seek ends play/pause/auto\n miniprogress: false, // whether to enable the mini progress bar\n disableSwipeHandler: () => {\n },\n enableSwipeHandler: () => {\n },\n ignores: [], // list of plug-in names to be disabled\n whitelist: [],\n inactive: 3000, // delay time for the control bar to disappear automatically\n lang: (document.documentElement.getAttribute('lang') || navigator.language || 'zh-cn').toLocaleLowerCase(),\n controls: true,\n marginControls: false, // Whether the control bar is located at the bottom of the video and does not overlap with the video\n fullscreenTarget: null,\n controlsList: [],\n screenShot: false, // whether to enable the screenshot plug-in\n rotate: false, // whether to enable the rotate plug-in\n pip: false, // whether to enable the picture-in-picture plug-in\n download: false, // whether to enable the download plug-in\n mini: false, // whether to enable the mini-screen plug-in\n cssFullscreen: true, // whether to enable the web page full-screen plug-in\n keyShortcut: true, // whether to open the shortcut key\n presets: [],\n plugins: [],\n playbackRate: 1,\n definition: { list: [] },\n playsinline: true,\n customDuration: 0, // User-defined duration\n timeOffset: 0, // currentTime offset\n icons: {},\n i18n: [],\n thumbnail: null, // Preview image configuration\n commonStyle: { // General style configuration\n progressColor: '', // Background color of progress bar\n playedColor: '', // The background color of played part in the progress bar\n cachedColor: '', // The background color of cached part in the progress bar\n sliderBtnStyle: {}, // progress bar slider style\n volumeColor: ''\n }\n }\n}\n","import BasePlugin, { Events, Util } from '../../plugin'\n\nfunction now () {\n return new Date().getTime()\n}\n\nexport default class Xglogger extends BasePlugin {\n static get pluginName () {\n return 'xgLogger'\n }\n\n static get defaultConfig () {\n return {}\n }\n\n afterCreate () {\n this._onReset()\n this.on(Events.LOAD_START, () => {\n // console.log('Events.LOAD_START')\n this.vt = this.pt = now()\n })\n this.on(Events.LOADED_DATA, () => {\n this.vt = now()\n this.fvt = this.vt - this.pt\n // console.log('Events.LOADED_DATA', this.fvt)\n this.emitLog('firstFrame', { fvt: this.fvt })\n })\n\n this.on(Events.WAITING, this._onWaiting)\n this.on(Events.SEEKING, this._onSeeking)\n this.on(Events.SEEKED, this._onSeeked)\n this.on(Events.PLAYING, this._onPlaying)\n this.on(Events.ERROR, this._onError)\n this.on(Events.EMPTIED, this._onReset)\n }\n\n _onReset = () => {\n this.vt = 0\n this.pt = 0\n this.fvt = 0\n this._isSeeking = false\n this.seekingStart = 0\n this.waitingStart = 0\n this._isWaiting = false\n this._waitTimer && Util.clearTimeout(this, this._waitTimer)\n this._waittTimer && Util.clearTimeout(this, this._waittTimer)\n this._waitTimer = null\n this._waittTimer = null\n this.stall = {\n costTime: 0,\n currentTime: 0\n }\n this.seekData = {\n costTime: 0,\n currentTime: 0\n }\n }\n\n _onSeeking = () => {\n if (this.seekingStart) {\n return\n }\n this.seekingStart = now()\n this.emitLog('seekStart', { start: now() })\n }\n\n _onSeeked = () => {\n this.suspendSeekingStatus('seeked')\n }\n\n _onWaiting = () => {\n if (this._isWaiting || this.seekingStart) {\n return\n }\n // 卡顿标记开始\n this._isWaiting = true\n this._waitTimer = Util.setTimeout(this, () => {\n if (this._isWaiting) {\n this.waitingStart = now()\n Util.clearTimeout(this, this._waitTimer)\n this._waitTimer = null\n this.emitLog('waitingStart', { start: this.waitingStart })\n }\n }, 200)\n }\n\n _onError = () => {\n this.suspendSeekingStatus('error')\n this.suspendWaitingStatus('error')\n }\n\n _startWaitTimeout () {\n this._waittTimer = Util.setTimeout(this, () => {\n this.suspendWaitingStatus('timeout')\n Util.clearTimeout(this, this._waittTimer)\n this._waittTimer = null\n }, 20000)\n }\n\n _onPlaying = () => {\n this.suspendWaitingStatus('playing')\n }\n\n suspendSeekingStatus (endType) {\n if (!this.seekingStart) {\n return\n }\n const _now = now()\n const _cost = _now - this.seekingStart\n // console.log('suspendSeekingStatus>>', `endType:${endType} costTime:${_cost}`)\n this.seekingStart = 0\n this.emitLog('seekEnd', { end: _now, costTime: _cost })\n }\n\n suspendWaitingStatus (endType) {\n if (this._waitTimer) {\n Util.clearTimeout(this, this._waitTimer)\n this._waitTimer = null\n }\n if (!this.waitingStart) {\n return\n }\n // console.log('suspendWaitingStatus>>', endType)\n const _now = now()\n const _cost = _now - this.waitingStart\n this._isWaiting = false\n this.waitingStart = 0\n // switch (endType) {\n // case 'timeout':\n // break\n // case 'playing':\n // this._isWaiting = false\n // this.waitingStart = false\n // break\n // }\n this.emitLog('waitingEnd', { endType, costTime: _cost })\n }\n\n emitLog (eventType, data) {\n const { player } = this\n // console.log('>>>emitLog', `eventType:${eventType}`, data)\n this.emit(Events.XGLOG, {\n eventType,\n currentTime: this.player.currentTime,\n readyState: player.video.readyState,\n networkState: player.video.networkState,\n ...data\n })\n }\n}\n","import Plugin, { Events, Util } from '../../plugin'\nimport ReplaySvg from '../assets/replay.svg'\n\nclass Replay extends Plugin {\n static get pluginName () {\n return 'replay'\n }\n\n static get defaultConfig () {\n return {\n disable: false\n }\n }\n\n registerIcons () {\n return {\n replay: ReplaySvg\n }\n }\n\n afterCreate () {\n Plugin.insert(this.icons.replay, this.root, 0)\n this.__handleReplay = this.hook('replayClick', () => {\n this.player.replay()\n }, {\n pre: (e) => {\n e.preventDefault()\n e.stopPropagation()\n }\n })\n\n // this.bind('.xgplayer-replay', ['click', 'touchend'], this.__handleReplay)\n this.bind('svg', ['click', 'touchend'], this.__handleReplay)\n this.bind('.xgplayer-replay-txt', ['click', 'touchend'], this.__handleReplay)\n\n this.on(Events.ENDED, () => {\n if (!this.playerConfig.loop) {\n Util.addClass(this.player.root, 'replay')\n }\n if (this.config.disable) {\n return\n }\n this.show()\n const path = this.root.querySelector('path')\n if (path) {\n const transform = window.getComputedStyle(path).getPropertyValue('transform')\n if (typeof transform === 'string' && transform.indexOf('none') > -1) {\n return null\n } else {\n path.setAttribute('transform', transform)\n }\n }\n })\n\n this.on(Events.PLAY, () => {\n this.hide()\n })\n }\n\n handleReplay (e) {\n e.preventDefault()\n e.stopPropagation()\n this.player.replay()\n Util.removeClass(this.player.root, 'replay')\n }\n\n show () {\n if (this.config.disable) {\n return\n }\n this.root.style.display = 'flex'\n }\n\n enable () {\n this.config.disable = false\n }\n\n disable () {\n this.config.disable = true\n this.hide()\n }\n\n destroy () {\n this.unbind('svg', ['click', 'touchend'], this.__handleReplay)\n this.unbind('.xgplayer-replay-txt', ['click', 'touchend'], this.__handleReplay)\n }\n\n render () {\n return `<xg-replay class=\"xgplayer-replay\">\n <xg-replay-txt class=\"xgplayer-replay-txt\" lang-key=\"${this.i18nKeys.REPLAY}\">${this.i18n.REPLAY}</xg-replay-txt>\n </xg-replay>`\n }\n}\nexport default Replay\n","import Plugin, { Events, Util } from '../../plugin'\n/**\n * @typedef {{\n * isEndedShow?: boolean, // 是否在播放结束之后显示\n * hideCanplay?: boolean, // cnaplay 时间大于1的时候才隐藏\n * poster?: string // 封面图地址\n * }} IPosterConfig\n */\nclass Poster extends Plugin {\n static get pluginName () {\n return 'poster'\n }\n\n /**\n * @type IPosterConfig\n */\n static get defaultConfig () {\n return {\n isEndedShow: true, // 是否在播放结束之后显示\n hideCanplay: false, // cnaplay 时间大于1的时候才隐藏\n poster: '' // 封面图地址\n }\n }\n\n set isEndedShow (value) {\n this.config.isEndedShow = value\n }\n\n get isEndedShow () {\n return this.config.isEndedShow\n }\n\n hide () {\n Util.addClass(this.root, 'hide')\n }\n\n show () {\n Util.removeClass(this.root, 'hide')\n }\n\n beforeCreate (args) {\n if (typeof args.player.config.poster === 'string') {\n args.config.poster = args.player.config.poster\n }\n }\n\n afterCreate () {\n this.on(Events.ENDED, () => {\n if (!this.isEndedShow) {\n Util.addClass(this.root, 'hide')\n }\n })\n\n if (this.config.hideCanplay) {\n this.once(Events.TIME_UPDATE, () => {\n this.onTimeUpdate()\n })\n this.on(Events.URL_CHANGE, () => {\n Util.removeClass(this.root, 'hide')\n Util.addClass(this.root, 'xg-showplay')\n this.once(Events.TIME_UPDATE, () => {\n this.onTimeUpdate()\n })\n })\n } else {\n this.on(Events.PLAY, () => {\n Util.addClass(this.root, 'hide')\n })\n }\n }\n\n onTimeUpdate () {\n if (!this.player.currentTime) {\n this.once(Events.TIME_UPDATE, () => {\n this.onTimeUpdate()\n })\n } else {\n Util.removeClass(this.root, 'xg-showplay')\n }\n }\n\n update (poster) {\n if (!poster) {\n return\n }\n this.config.poster = poster\n this.root.style.backgroundImage = `url(${poster})`\n }\n\n render () {\n const { poster, hideCanplay } = this.config\n const style = poster ? `background-image:url(${poster});` : ''\n return `<xg-poster class=\"xgplayer-poster ${hideCanplay ? 'xg-showplay' : ''}\" style=\"${style}\">\n </xg-poster>`\n }\n}\n\nexport default Poster\n","import Plugin, { Util, Events, STATES } from '../../plugin'\nimport PlaySvg from '../assets/play.svg'\nimport PauseSvg from '../assets/pause.svg'\n\n/**\n * @typedef {{\n * isShowPause?: boolean, // 暂停是否常驻\n * isShowEnd?: boolean, // 播放结束常驻\n * disableAnimate?: boolean, // 禁用点击动画\n * mode?: 'hide' | 'show' | 'auto' // 控制模式: hide 常驻: show 跟随:auto\n * [propName: string]: any\n * }} IStartConfig\n */\n\nconst AnimateMap = {}\nfunction addAnimate (key, seconds, callback = { start: null, end: null }) {\n if (AnimateMap[key]) {\n window.clearTimeout(AnimateMap[key].id)\n }\n AnimateMap[key] = {}\n callback.start && callback.start()\n AnimateMap[key].id = window.setTimeout(() => {\n callback.end && callback.end()\n window.clearTimeout(AnimateMap[key].id)\n delete AnimateMap[key]\n }, seconds)\n}\n\nfunction clearAnimation () {\n Object.keys(AnimateMap).map(key => {\n window.clearTimeout(AnimateMap[key].id)\n delete AnimateMap[key]\n })\n}\n\nclass Start extends Plugin {\n static get pluginName () {\n return 'start'\n }\n\n /**\n * @type IStartConfig\n */\n static get defaultConfig () {\n return {\n isShowPause: false, // 暂停是否常驻\n isShowEnd: false, // 播放结束常驻\n disableAnimate: false, // 禁用点击动画\n mode: 'hide' // 控制模式: hide 常驻: show 跟随:auto\n }\n }\n\n constructor (args) {\n super(args)\n this.autoPlayStart = false\n }\n\n afterCreate () {\n const { player, playerConfig } = this\n\n this.initIcons()\n this.once(Events.READY, () => {\n if (playerConfig) {\n if (playerConfig.lang && playerConfig.lang === 'en') {\n Util.addClass(player.root, 'lang-is-en')\n } else if (playerConfig.lang === 'jp') {\n Util.addClass(player.root, 'lang-is-jp')\n }\n }\n })\n\n this.on(Events.AUTOPLAY_STARTED, () => {\n const className = this.config.mode === 'auto' ? 'auto-hide' : 'hide'\n Util.addClass(this.root, className)\n this.autoPlayStart = true\n this.onPlayPause('play')\n })\n\n if (!playerConfig.autoplay) {\n this.show()\n }\n\n this.on(Events.AUTOPLAY_PREVENTED, () => {\n const className = this.config.mode === 'auto' ? 'auto-hide' : 'hide'\n this.setAttr('data-state', 'play')\n Util.removeClass(this.root, className)\n this.show()\n })\n\n this.on(Events.PLAY, () => {\n this.onPlayPause('play')\n })\n\n this.on(Events.PAUSE, () => {\n this.onPlayPause('pause')\n })\n\n this.clickHandler = this.hook('startClick', this.switchPausePlay, {\n pre: (e) => {\n e.preventDefault()\n e.stopPropagation()\n const { paused } = this.player\n this.emitUserAction(e, 'switch_play_pause', { props: 'paused', from: paused, to: !paused })\n }\n })\n\n this.bind(['click', 'touchend'], this.clickHandler)\n }\n\n preventDefault (e) {\n\n }\n\n registerIcons () {\n return {\n startPlay: { icon: PlaySvg, class: 'xg-icon-play' },\n startPause: { icon: PauseSvg, class: 'xg-icon-pause' }\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('xg-start-inner', icons.startPlay)\n this.appendChild('xg-start-inner', icons.startPause)\n }\n\n hide () {\n Util.addClass(this.root, 'hide')\n }\n\n show () {\n Util.removeClass(this.root, 'hide')\n }\n\n focusHide () {\n Util.addClass(this.root, 'focus-hide')\n }\n\n recover () {\n Util.removeClass(this.root, 'focus-hide')\n }\n\n switchStatus (isAnimate) {\n if (isAnimate) {\n this.setAttr('data-state', !this.player.paused ? 'play' : 'pause')\n } else {\n this.setAttr('data-state', this.player.paused ? 'play' : 'pause')\n }\n }\n\n animate (endShow) {\n addAnimate('pauseplay', 400, {\n start: () => {\n Util.addClass(this.root, 'interact')\n this.show()\n this.switchStatus(true)\n },\n end: () => {\n Util.removeClass(this.root, 'interact')\n !endShow && this.hide()\n }\n })\n }\n\n switchPausePlay (e) {\n const { player } = this\n e.preventDefault()\n e.stopPropagation()\n if (player.state < STATES.READY) {\n return\n }\n const paused = this.player.paused\n if (!paused && player.state === STATES.RUNNING) {\n player.pause()\n } else {\n player.play()\n }\n }\n\n onPlayPause (status) {\n const { config, player } = this\n if (player.state < STATES.RUNNING || !this.autoPlayStart) {\n return\n }\n // 一直显示\n if (config.mode === 'show') {\n this.switchStatus()\n this.show()\n return\n }\n\n // 跟随播放器的focus状态显示和隐藏\n if (config.mode === 'auto') {\n this.switchStatus()\n return\n }\n // 暂停/播放结束状态强制显示\n if ((config.isShowPause && player.paused && !player.ended) || (config.isShowEnd && player.ended)) {\n this.switchStatus()\n this.show()\n return\n }\n\n if (config.disableAnimate) {\n this.switchStatus()\n this.hide()\n return\n }\n\n if (status === 'play') {\n this.autoPlayStart ? this.animate() : this.hide()\n } else {\n if (!this.autoPlayStart) {\n return\n }\n this.animate()\n }\n }\n\n destroy () {\n this.unbind(['click', 'touchend'], this.clickHandler)\n clearAnimation()\n }\n\n render () {\n const className = this.playerConfig.autoplay ? (this.config.mode === 'auto' ? 'auto-hide' : 'hide') : ''\n return `\n <xg-start class=\"xgplayer-start ${className}\">\n <xg-start-inner></xg-start-inner>\n </xg-start>`\n }\n}\n\nexport default Start\n","import Plugin, { Util } from '../../plugin'\n\n/**\n * @typedef { {\n * innerHtml?: string,\n * [propName: string]: any\n * } } IEnterConfig\n */\n\nclass Enter extends Plugin {\n static get pluginName () {\n return 'enter'\n }\n\n /**\n * @type IEnterConfig\n */\n static get defaultConfig () {\n return {\n innerHtml: '',\n logo: ''\n }\n }\n\n render () {\n const { innerHtml } = this.config\n const root = Util.createDom('xg-enter', '', {}, 'xgplayer-enter')\n\n if (innerHtml && innerHtml instanceof window.HTMLElement) {\n root.appendChild(innerHtml)\n } else if (innerHtml && typeof innerHtml === 'string') {\n root.innerHTML = innerHtml\n } else {\n let barStr = ''\n for (let i = 1; i <= 12; i++) {\n barStr += `<div class=\"xgplayer-enter-bar${i}\"></div>`\n }\n root.innerHTML = `<div class=\"xgplayer-enter-spinner\">${barStr}</div>`\n }\n return root\n }\n}\n\nexport default Enter\n","import Plugin, { POSITIONS } from '../../plugin'\n\nclass MiniScreenIcon extends Plugin {\n static get pluginName () {\n return 'miniscreenIcon'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 10\n }\n }\n\n afterCreate () {\n this.getMini = this.getMini.bind(this)\n this.exitMini = this.exitMini.bind(this)\n this.bind('click', this.getMini)\n }\n\n getMini () {\n this.config.onClick && this.config.onClick()\n }\n\n exitMini () {\n this.config.onClick && this.config.onClick()\n }\n\n destroy () {\n this.unbind(['click', 'touchend'], this.getMini)\n }\n\n render () {\n const langKey = 'MINISCREEN'\n return `\n <xg-icon class=\"xgplayer-miniicon\">\n <div class=\"xgplayer-icon btn-text\"><span class=\"icon-text\" lang-key=\"${this.i18nKeys[langKey]}\">${this.i18n[langKey]}</span></div>\n </xg-icon>`\n }\n}\n\nexport default MiniScreenIcon\n","import EventEmitter from 'eventemitter3'\n\nfunction getStyleSize (value) {\n const num = parseFloat(value)\n // not a percent like '100%', and a number\n const isValid = value.indexOf('%') === -1 && !isNaN(num)\n return isValid && num\n}\n\nconst measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n]\n\nconst measurementsLength = measurements.length\n\nfunction getZeroSize () {\n const size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n }\n for (let i = 0; i < measurementsLength; i++) {\n const measurement = measurements[i]\n size[measurement] = 0\n }\n return size\n}\n\nfunction getStyle (elem) {\n const style = window.getComputedStyle(elem)\n // if ( !style ) {\n // logError( 'Style returned ' + style +\n // '. Are you running this code in a hidden iframe on Firefox? ' +\n // 'See http://bit.ly/getsizebug1' );\n // }\n return style\n}\n\nfunction getSize (elem) {\n // use querySeletor if elem is string\n if (typeof elem === 'string') {\n elem = document.querySelector(elem)\n }\n\n // do not proceed on non-objects\n if (!elem || typeof elem !== 'object' || !elem.nodeType) {\n return\n }\n\n const style = getStyle(elem)\n\n // if hidden, everything is 0\n if (style.display === 'none') {\n return getZeroSize()\n }\n\n const size = {}\n size.width = elem.offsetWidth\n size.height = elem.offsetHeight\n\n const isBorderBox = size.isBorderBox = style.boxSizing === 'border-box'\n\n // get all measurements\n for (let i = 0; i < measurementsLength; i++) {\n const measurement = measurements[i]\n const value = style[measurement]\n const num = parseFloat(value)\n // any 'auto', 'medium' value will be 0\n size[measurement] = !isNaN(num) ? num : 0\n }\n\n const paddingWidth = size.paddingLeft + size.paddingRight\n const paddingHeight = size.paddingTop + size.paddingBottom\n const marginWidth = size.marginLeft + size.marginRight\n const marginHeight = size.marginTop + size.marginBottom\n const borderWidth = size.borderLeftWidth + size.borderRightWidth\n const borderHeight = size.borderTopWidth + size.borderBottomWidth\n\n const isBorderBoxSizeOuter = isBorderBox// isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n const styleWidth = getStyleSize(style.width)\n if (styleWidth !== false) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n (isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth)\n }\n\n const styleHeight = getStyleSize(style.height)\n if (styleHeight !== false) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n (isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight)\n }\n\n size.innerWidth = size.width - (paddingWidth + borderWidth)\n size.innerHeight = size.height - (paddingHeight + borderHeight)\n\n size.outerWidth = size.width + marginWidth\n size.outerHeight = size.height + marginHeight\n\n return size\n}\n\nfunction getTouch (touches, dentifier) {\n for (let i = 0; i < touches.length; i++) {\n const touch = touches[i]\n if (touch.identifier === dentifier) {\n return touch\n }\n }\n};\n\nconst EVENTS = {\n START: 'dragStart',\n MOVE: 'dragMove',\n ENDED: 'dragEnded'\n}\n\nconst POST_START_EVENTS = {\n mousedown: ['mousemove', 'mouseup'],\n touchstart: ['touchmove', 'touchend', 'touchcancel'],\n pointerdown: ['pointermove', 'pointerup', 'pointercancel']\n}\n\nexport default class Draggabilly extends EventEmitter {\n constructor (root, options = {}) {\n super()\n this.isEnabled = true\n this.isDragging = false\n this.isDown = false\n this.position = {}\n this.downPoint = {}\n this.dragPoint = { x: 0, y: 0 }\n this.startPos = { x: 0, y: 0 }\n // eslint-disable-next-line no-undef\n this._root = root instanceof Element ? root : document.querySelector(root)\n // eslint-disable-next-line no-undef\n this._handlerDom = options.handle instanceof Element ? options.handle : document.querySelector(options.handle)\n if (!this._root || !this._handlerDom) {\n return\n }\n // ['onDown', 'onUp', 'onMove', 'onCancel', 'onDocUp'].map(key => {\n // this[key] = this[key].bind(this)\n // })\n\n // if ('ontouchstart' in window) {\n // this._handlerKeys = TOUCH_HANDLERS\n // this._startKey = 'touchstart'\n // this._endKey = 'touchend'\n // } else {\n // this._handlerKeys = HANDLERS\n // this._startKey = 'mousedown'\n // this._endKey = 'mouseup'\n // }\n // this._handlerDom.addEventListener(this._startKey, this.onDown)\n this._bindStartEvent()\n }\n\n _bindStartEvent () {\n if ('ontouchstart' in window) {\n this._startKey = 'touchstart'\n } else {\n this._startKey = 'mousedown'\n }\n this[`on${this._startKey}`] = this[`on${this._startKey}`].bind(this)\n this._handlerDom.addEventListener(this._startKey, this[`on${this._startKey}`])\n POST_START_EVENTS[this._startKey].map(key => {\n this[`on${key}`] = this[`on${key}`].bind(this)\n })\n }\n\n _unbindStartEvent () {\n this._handlerDom.removeEventListener(this._startKey, this[`on${this._startKey}`])\n }\n\n _bindPostStartEvents (event) {\n if (!event) {\n return\n }\n const events = POST_START_EVENTS[this._startKey]\n // bind events to node\n events.map(eventName => {\n window.addEventListener(eventName, this[`on${eventName}`])\n })\n // save these arguments\n this._boundPointerEvents = events\n }\n\n _unbindPostStartEvents () {\n if (!this._boundPointerEvents) {\n return\n }\n this._boundPointerEvents.map(eventName => {\n // console.log('eventName', eventName, this[`on${eventName}`])\n window.removeEventListener(eventName, this[`on${eventName}`])\n })\n\n delete this._boundPointerEvents\n }\n\n enable () {\n this.isEnabled = true\n }\n\n disable () {\n this.isEnabled = false\n if (this.isDragging) {\n this.onUp()\n }\n }\n\n onDocUp (e) {\n this.onUp()\n }\n\n animate () {\n // only render and animate if dragging\n if (!this.isDragging) {\n return\n }\n\n this.positionDrag()\n\n window.requestAnimationFrame(() => {\n this.animate()\n })\n }\n\n positionDrag () {\n // this._root.style.transform = 'translate3d( ' + this.dragPoint.x +\n // 'px, ' + this.dragPoint.y + 'px, 0)';\n const transform = `translate3d(${this.dragPoint.x}px, ${this.dragPoint.y}px, 0)`\n this._root.style.transform = transform\n this._root.style.webKitTransform = transform\n }\n\n setLeftTop () {\n this._root.style.left = this.position.x + 'px'\n this._root.style.top = this.position.y + 'px'\n }\n\n onmousedown (e) {\n this.dragStart(e, e)\n }\n\n onmousemove (e) {\n this.dragMove(e, e)\n }\n\n onmouseup (e) {\n this.dragEnd(e, e)\n }\n\n ontouchstart (e) {\n const touch = e.changedTouches[0]\n this.dragStart(e, touch)\n this.touchIdentifier = touch.pointerId !== undefined\n ? touch.pointerId\n : touch.identifier\n e.preventDefault()\n }\n\n ontouchmove (e) {\n const touch = getTouch(e.changedTouches, this.touchIdentifier)\n if (touch) {\n this.dragMove(e, touch)\n }\n }\n\n ontouchend (e) {\n const touch = getTouch(e.changedTouches, this.touchIdentifier)\n if (touch) {\n this.dragEnd(e, touch)\n }\n e.preventDefault()\n }\n\n ontouchcancel (e) {\n const touch = getTouch(e.changedTouches, this.touchIdentifier)\n if (touch) {\n this.dragCancel(e, touch)\n }\n }\n\n dragStart (e, pointer) {\n if (!this._root || this.isDown || !this.isEnabled) {\n return\n }\n this.downPoint = pointer\n this.dragPoint.x = 0\n this.dragPoint.y = 0\n\n this._getPosition()\n\n const size = getSize(this._root)\n\n this.startPos.x = this.position.x\n this.startPos.y = this.position.y\n this.startPos.maxY = window.innerHeight - size.height\n this.startPos.maxX = window.innerWidth - size.width\n this.setLeftTop()\n\n this.isDown = true\n this._bindPostStartEvents(e)\n }\n\n dragRealStart (e, pointer) {\n this.isDragging = true\n this.animate()\n this.emit(EVENTS.START, this.startPos)\n }\n\n dragEnd (e, pointer) {\n if (!this._root) {\n return\n }\n this._unbindPostStartEvents()\n if (this.isDragging) {\n this._root.style.transform = ''\n this.setLeftTop()\n this.emit(EVENTS.ENDED)\n }\n this.presetInfo()\n }\n\n _dragPointerMove (e, pointer) {\n const moveVector = {\n x: pointer.pageX - this.downPoint.pageX,\n y: pointer.pageY - this.downPoint.pageY\n }\n // 检测是否有移动\n if (!this.isDragging && this.hasDragStarted(moveVector)) {\n this.dragRealStart(e, pointer)\n }\n return moveVector\n }\n\n dragMove (e, pointer) {\n e = e || window.event\n if (!this.isDown) {\n return\n }\n const { x, y } = this.startPos\n const moveVector = this._dragPointerMove(e, pointer)\n let dragX = moveVector.x\n let dragY = moveVector.y\n dragX = this.checkContain('x', dragX, x)\n dragY = this.checkContain('y', dragY, y)\n this.position.x = x + dragX\n this.position.y = y + dragY\n this.dragPoint.x = dragX\n this.dragPoint.y = dragY\n this.emit(EVENTS.MOVE, this.position)\n }\n\n dragCancel (e, pointer) {\n this.dragEnd(e, pointer)\n }\n\n presetInfo () {\n this.isDragging = false\n this.startPos = {\n x: 0,\n y: 0\n }\n this.dragPoint = {\n x: 0,\n y: 0\n }\n this.isDown = false\n }\n\n destroy () {\n this._unbindStartEvent()\n this._unbindPostStartEvents()\n if (this.isDragging) {\n this.dragEnd()\n }\n this.removeAllListeners()\n this._handlerDom = null\n }\n\n hasDragStarted (moveVector) {\n return Math.abs(moveVector.x) > 3 || Math.abs(moveVector.y) > 3\n };\n\n checkContain (axis, drag, grid) {\n if (drag + grid < 0) {\n return 0 - grid\n }\n\n if (axis === 'x' && drag + grid > this.startPos.maxX) {\n return this.startPos.maxX - grid\n }\n if (axis === 'y' && drag + grid > this.startPos.maxY) {\n return this.startPos.maxY - grid\n }\n return drag\n }\n\n _getPosition () {\n const style = window.getComputedStyle(this._root)\n const x = this._getPositionCoord(style.left, 'width')\n const y = this._getPositionCoord(style.top, 'height')\n // clean up 'auto' or other non-integer values\n this.position.x = isNaN(x) ? 0 : x\n this.position.y = isNaN(y) ? 0 : y\n\n this._addTransformPosition(style)\n }\n\n _addTransformPosition (style) {\n const transform = style.transform\n // bail out if value is 'none'\n if (transform.indexOf('matrix') !== 0) {\n return\n }\n // split matrix(1, 0, 0, 1, x, y)\n const matrixValues = transform.split(',')\n // translate X value is in 12th or 4th position\n const xIndex = transform.indexOf('matrix3d') === 0 ? 12 : 4\n const translateX = parseInt(matrixValues[xIndex], 10)\n // translate Y value is in 13th or 5th position\n const translateY = parseInt(matrixValues[xIndex + 1], 10)\n this.position.x += translateX\n this.position.y += translateY\n }\n\n _getPositionCoord (styleSide, measure) {\n if (styleSide.indexOf('%') !== -1) {\n // convert percent into pixel for Safari, #75\n const parentSize = getSize(this._root.parentNode)\n // prevent not-in-DOM element throwing bug, #131\n return !parentSize\n ? 0\n : (parseFloat(styleSide) / 100) * parentSize[measure]\n }\n return parseInt(styleSide, 10)\n }\n}\n","import Plugin, { Util, Events } from '../../plugin'\nimport PlayIcon from '../assets/play.svg'\nimport PauseIcon from '../assets/pause.svg'\nimport MiniScreenIcon from './miniScreenIcon'\nimport Draggabilly from '../../utils/draggabilly'\n\n/**\n * @typedef {{\n * index?: number,\n * disable?: boolean,\n * width?: number,\n * height?: number,\n * left?: number, // 默认左下角\n * top?: number, // 默认左下角\n * isShowIcon?: boolean, // 是否显示icon\n * isScrollSwitch?: boolean, // 滚动自动切换自动切换\n * scrollTop?: number, // 触发滚动的高度\n * disableDrag?: boolean, // 禁用拖拽\n * [propName: string]: any\n * }} IMiniScreenConfig\n */\nclass MiniScreen extends Plugin {\n static get pluginName () {\n return 'miniscreen'\n }\n\n /**\n * @type IMiniScreenConfig\n */\n static get defaultConfig () {\n return {\n index: 10,\n disable: false,\n width: 320,\n height: 180,\n left: -1, // Default bottom left corner\n top: -1, // Default bottom left corner\n isShowIcon: false, // Whether to show icon\n isScrollSwitch: false,\n scrollTop: 0, // Height to trigger scroll\n disableDrag: false // Disable drag and drop\n }\n }\n\n constructor (args) {\n super(args)\n this.isMini = false\n this.isClose = false\n const { config } = this\n this.pos = {\n left: config.left < 0 ? window.innerWidth - config.width - 20 : config.left,\n top: config.top < 0 ? window.innerHeight - config.height - 20 : config.top,\n height: this.config.height,\n width: this.config.width,\n scrollY: window.scrollY || 0\n }\n this.lastStyle = null\n }\n\n beforeCreate (args) {\n if (typeof args.player.config.mini === 'boolean') {\n args.config.isShowIcon = args.player.config.mini\n }\n }\n\n afterCreate () {\n this.initIcons()\n this.on(Events.PAUSE, () => {\n this.setAttr('data-state', 'pause')\n })\n this.on(Events.PLAY, () => {\n this.setAttr('data-state', 'play')\n })\n }\n\n onPluginsReady () {\n const { player, config } = this\n if (config.disable) {\n return\n }\n if (this.config.isShowIcon) {\n const options = {\n config: {\n onClick: () => {\n this.getMini()\n }\n }\n }\n player.controls.registerPlugin(MiniScreenIcon, options, MiniScreenIcon.pluginName)\n }\n const eventName = Util.checkTouchSupport() ? 'touchend' : 'click'\n this.bind('.mini-cancel-btn', eventName, this.onCancelClick)\n this.bind('.play-icon', eventName, this.onCenterClick)\n if (!this.config.disableDrag) {\n this._draggabilly = new Draggabilly(this.player.root, {\n handle: this.root\n })\n }\n if (this.config.isScrollSwitch) {\n window.addEventListener('scroll', this.onScroll)\n }\n }\n\n registerIcons () {\n return {\n play: { icon: PlayIcon, class: 'xg-icon-play' },\n pause: { icon: PauseIcon, class: 'xg-icon-pause' }\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('.play-icon', icons.play)\n this.appendChild('.play-icon', icons.pause)\n }\n\n onCancelClick = (e) => {\n // e.preventDefault()\n // e.stopPropagation()\n this.exitMini()\n this.isClose = true\n }\n\n onCenterClick = (e) => {\n const { player } = this\n player.paused ? player.play() : player.pause()\n }\n\n onScroll = (e) => {\n if ((!window.scrollY && window.scrollY !== 0) || Math.abs(window.scrollY - this.pos.scrollY) < 50) {\n return\n }\n let scrollHeight = parseInt(Util.getCss(this.player.root, 'height'))\n scrollHeight += this.config.scrollTop\n this.pos.scrollY = window.scrollY\n if (window.scrollY > scrollHeight + 5) {\n !this.isMini && !this.isClose && this.getMini()\n } else if (window.scrollY <= scrollHeight) {\n this.isMini && this.exitMini()\n this.isClose = false\n }\n }\n\n getMini () {\n if (this.isMini) {\n return\n }\n const { player, playerConfig } = this\n const target = this.config.target || this.player.root\n this.lastStyle = {}\n Util.addClass(player.root, 'xgplayer-mini');\n ['width', 'height', 'top', 'left'].map(key => {\n this.lastStyle[key] = target.style[key]\n target.style[key] = `${this.pos[key]}px`\n })\n if (playerConfig.fluid) {\n target.style['padding-top'] = ''\n }\n this.emit(Events.MINI_STATE_CHANGE, true)\n player.isMini = this.isMini = true\n }\n\n exitMini () {\n if (!this.isMini) {\n return false\n }\n const { player, playerConfig } = this\n const target = this.config.target || this.player.root\n Util.removeClass(player.root, 'xgplayer-mini')\n if (this.lastStyle) {\n Object.keys(this.lastStyle).map(key => {\n target.style[key] = this.lastStyle[key]\n })\n }\n this.lastStyle = null\n if (playerConfig.fluid) {\n player.root.style.width = '100%'\n player.root.style.height = '0'\n player.root.style['padding-top'] = `${playerConfig.height * 100 / playerConfig.width}%`\n }\n this.emit(Events.MINI_STATE_CHANGE, false)\n this.isMini = player.isMini = false\n }\n\n destroy () {\n window.removeEventListener('scroll', this.onScroll)\n const eventName = Util.checkTouchSupport() ? 'touchend' : 'click'\n this.unbind('.mini-cancel-btn', eventName, this.onCancelClick)\n this.unbind('.play-icon', eventName, this.onCenterClick)\n this._draggabilly && this._draggabilly.destroy()\n this._draggabilly = null\n this.exitMini()\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n return `\n <xg-mini-layer class=\"xg-mini-layer\">\n <xg-mini-header class=\"xgplayer-mini-header\">\n <div lang-key=\"${this.i18nKeys.MINI_DRAG}\">${this.i18n.MINI_DRAG}</div>\n </xg-mini-header>\n <div class=\"mini-cancel-btn\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path fill=\"#fff\" fill-rule=\"evenodd\" d=\"M3.99 3.49a1 1 0 0 1 1.414 0L10 8.085l4.596-4.595a1 1 0 1 1 1.414 1.414L11.414 9.5l4.596 4.596a1 1 0 0 1 .084 1.32l-.084.094a1 1 0 0 1-1.414 0L10 10.914 5.404 15.51a1 1 0 0 1-1.414-1.414L8.585 9.5 3.99 4.904a1 1 0 0 1-.084-1.32z\"></path>\n </svg>\n </div>\n <div class=\"play-icon\">\n </div>\n </xg-mini-layer>`\n }\n}\n\nexport {\n MiniScreen as default,\n MiniScreenIcon\n}\n","import { BasePlugin, Sniffer } from '../../plugin'\nimport { runHooks } from '../../plugin/hooksDescriptor'\n\nconst MOUSE_EVENTS = {\n mouseenter: 'onMouseEnter',\n mouseleave: 'onMouseLeave',\n mousemove: 'onMouseMove'\n}\n\nconst HOOKS = ['videoClick', 'videoDbClick']\n\nexport default class PCPlugin extends BasePlugin {\n static get pluginName () {\n return 'pc'\n }\n\n static get defaultConfig () {\n return {\n disableContextmenu: true\n }\n }\n\n afterCreate () {\n this._clickCount = 0\n HOOKS.map(item => {\n this.__hooks[item] = null\n })\n const { enableContextmenu, isMobileSimulateMode } = this.playerConfig\n if (isMobileSimulateMode || (Sniffer.device === 'mobile' && !Sniffer.os.isIpad)) {\n return\n }\n this.config.disableContextmenu = !enableContextmenu\n this.initEvents()\n }\n\n initEvents () {\n const { video, root } = this.player\n\n root.addEventListener('click', this.onVideoClick, false)\n video.addEventListener('dblclick', this.onVideoDblClick, false)\n Object.keys(MOUSE_EVENTS).map(item => {\n root.addEventListener(item, this[MOUSE_EVENTS[item]], false)\n })\n this.config.disableContextmenu && video.addEventListener('contextmenu', this.onContextmenu, false)\n }\n\n switchPlayPause (e) {\n const { player } = this\n this.emitUserAction(e, 'switch_play_pause', { props: 'paused', from: player.paused, to: !player.paused })\n if (!player.ended) {\n player.paused ? player.play() : player.pause()\n } else {\n player.duration !== Infinity && player.duration > 0 && player.replay()\n }\n }\n\n onMouseMove = (e) => {\n const { player, playerConfig } = this\n if (!player.isActive) {\n player.focus({ autoHide: !playerConfig.closeDelayBlur })\n !playerConfig.closeFocusVideoFocus && player.video.focus()\n }\n }\n\n onMouseEnter = (e) => {\n const { playerConfig, player } = this\n !playerConfig.closeFocusVideoFocus && player.video.focus()\n if (playerConfig.closeDelayBlur) {\n player.focus({ autoHide: false })\n } else {\n player.focus()\n }\n }\n\n onMouseLeave = (e) => {\n const { closePlayerBlur, leavePlayerTime } = this.playerConfig\n if (!closePlayerBlur) {\n if (leavePlayerTime) {\n this.player.focus({ autoHide: true, hideDelay: leavePlayerTime })\n } else {\n this.player.blur()\n }\n }\n }\n\n onContextmenu (e) {\n e = e || window.event\n if (e.preventDefault) {\n e.preventDefault()\n }\n if (e.stopPropagation) {\n e.stopPropagation()\n } else {\n e.returnValue = false // 解决IE8右键弹出\n e.cancelBubble = true\n }\n }\n\n onVideoClick = (e) => {\n const { player, playerConfig } = this\n if (e.target && playerConfig.closeVideoClick) {\n return\n }\n if (e.target === player.root || e.target === player.video || e.target === player.innerContainer || e.target === player.video.__canvas) {\n e.preventDefault()\n if (!playerConfig.closeVideoStopPropagation) {\n e.stopPropagation()\n }\n this._clickCount++\n if (this.clickTimer) {\n clearTimeout(this.clickTimer)\n this.clickTimer = null\n }\n this.clickTimer = setTimeout(() => {\n if (!this._clickCount) {\n return\n }\n this._clickCount--\n runHooks(this, HOOKS[0], (plugin, data) => {\n this.switchPlayPause(data.e)\n }, { e, paused: player.paused })\n clearTimeout(this.clickTimer)\n this.clickTimer = null\n }, 300)\n }\n }\n\n onVideoDblClick = (e) => {\n const { player, playerConfig } = this\n if (!e.target || (e.target !== player.video && e.target !== player.video.__canvas) || playerConfig.closeVideoDblclick) {\n return\n }\n if (this._clickCount < 2) {\n this._clickCount = 0\n return\n }\n this._clickCount = 0\n if (this.clickTimer) {\n clearTimeout(this.clickTimer)\n this.clickTimer = null\n }\n e.preventDefault()\n e.stopPropagation()\n runHooks(this, HOOKS[1], (plugin, data) => {\n this.emitUserAction(data.e, 'switch_fullscreen', { props: 'fullscreen', from: player.fullscreen, to: !player.fullscreen })\n player.fullscreen ? player.exitFullscreen() : player.getFullscreen()\n }, { e, fullscreen: player.fullscreen })\n }\n\n destroy () {\n const { video, root } = this.player\n this.clickTimer && clearTimeout(this.clickTimer)\n root.removeEventListener('click', this.onVideoClick, false)\n video.removeEventListener('dblclick', this.onVideoDblClick, false)\n video.removeEventListener('contextmenu', this.onContextmenu, false)\n Object.keys(MOUSE_EVENTS).map(item => {\n root.removeEventListener(item, this[MOUSE_EVENTS[item]], false)\n })\n }\n}\n","var classof = require('../internals/classof-raw');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = function (value) {\n if (typeof value != 'number' && classof(value) != 'Number') {\n throw TypeError('Incorrect invocation');\n }\n return +value;\n};\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n var str = toString(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar toInteger = require('../internals/to-integer');\nvar thisNumberValue = require('../internals/this-number-value');\nvar repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar nativeToFixed = 1.0.toFixed;\nvar floor = Math.floor;\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar multiply = function (data, n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\n\nvar divide = function (data, n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\n\nvar dataToString = function (data) {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = String(data[index]);\n s = s === '' ? t : s + repeat.call('0', 7 - t.length) + t;\n }\n } return s;\n};\n\nvar FORCED = nativeToFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !fails(function () {\n // V8 ~ Android 4.3-\n nativeToFixed.call({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toInteger(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(data, 0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(data, 1e7, 0);\n j -= 7;\n }\n multiply(data, pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(data, 1 << 23);\n j -= 23;\n }\n divide(data, 1 << j);\n multiply(data, 1, 1);\n divide(data, 2);\n result = dataToString(data);\n } else {\n multiply(data, 0, z);\n multiply(data, 1 << -e, 0);\n result = dataToString(data) + repeat.call('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat.call('0', fractDigits - k) + result\n : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","\nconst EVENTS = {\n PRESS: 'press',\n PRESS_END: 'pressend',\n DOUBlE_CLICK: 'doubleclick',\n CLICK: 'click',\n TOUCH_MOVE: 'touchmove',\n TOUCH_START: 'touchstart',\n TOUCH_END: 'touchend'\n}\n\nconst TOUCHS = {\n start: 'touchstart',\n end: 'touchend',\n move: 'touchmove',\n cancel: 'touchcancel'\n}\n\nconst MOUSES = {\n start: 'mousedown',\n end: 'mouseup',\n move: 'mousemove',\n cancel: 'mouseleave'\n}\n\nfunction getTouch (touches) {\n if (touches && touches.length > 0) {\n return touches[touches.length - 1]\n } else {\n return null\n }\n}\n\nfunction preventToucheDefault (e) {\n const ua = navigator.userAgent;\n /(?:iPhone|iPad)/.test(ua) && e.cancelable && e.preventDefault()\n}\n\nfunction getDefaultConfig () {\n return {\n pressDelay: 600,\n dbClickDelay: 300,\n disablePress: false,\n disableDbClick: false,\n miniStep: 2\n }\n}\n\nclass Touche {\n constructor (dom, config = { eventType: 'touch' }) {\n this._pos = {\n moving: false,\n start: false,\n x: 0,\n y: 0\n }\n this.config = getDefaultConfig()\n Object.keys(config).map(key => {\n this.config[key] = config[key]\n })\n this.root = dom\n this.events = config.eventType === 'mouse' ? MOUSES : TOUCHS\n this.pressIntrvalId = null\n this.dbIntrvalId = null\n this.__handlers = {}\n this._initEvent()\n }\n\n _initEvent () {\n this.onTouchStart = this.onTouchStart.bind(this)\n this.onTouchMove = this.onTouchMove.bind(this)\n this.onTouchEnd = this.onTouchEnd.bind(this)\n this.onTouchCancel = this.onTouchCancel.bind(this)\n this.root.addEventListener(this.events.start, this.onTouchStart)\n }\n\n __setPress (e) {\n const { config } = this\n if (this.pressIntrvalId) {\n this.__clearPress()\n }\n this.pressIntrvalId = setTimeout(() => {\n this.trigger(EVENTS.PRESS, e)\n this._pos.press = true\n this.__clearPress()\n }, config.pressDelay)\n }\n\n __clearPress () {\n window.clearTimeout(this.pressIntrvalId)\n this.pressIntrvalId = null\n }\n\n __setDb (e) {\n const { config } = this\n if (this.dbIntrvalId) {\n this.__clearDb()\n this.trigger(EVENTS.DOUBlE_CLICK, e)\n return\n }\n this.dbIntrvalId = setTimeout(() => {\n this.__clearDb()\n if (!this._pos.start && !this._pos.press && !this._pos.moving) {\n this.trigger(EVENTS.CLICK, e)\n }\n }, config.dbClickDelay)\n }\n\n __clearDb () {\n clearTimeout(this.dbIntrvalId)\n this.dbIntrvalId = null\n }\n\n on (event, handler) {\n if (!this.__handlers[event]) {\n this.__handlers[event] = []\n }\n this.__handlers[event].push(handler)\n }\n\n off (event, handler) {\n if (!this.__handlers[event]) {\n return\n }\n const handlers = this.__handlers[event]\n let index = -1\n for (let i = 0; i < handlers.length; i++) {\n if (handlers[i] === handler) {\n index = i\n break\n }\n }\n if (index >= 0) {\n this.__handlers[event].splice(index, 1)\n }\n }\n\n trigger (event, e) {\n if (!this.__handlers[event]) {\n return\n }\n this.__handlers[event].map(handler => {\n try {\n handler(e)\n } catch (error) {\n console.error(`trigger>>:${event}`, error)\n }\n })\n }\n\n onTouchStart (e) {\n const { _pos, root } = this\n preventToucheDefault(e)\n const touch = getTouch(e.touches)\n _pos.x = touch ? parseInt(touch.pageX, 10) : e.pageX\n _pos.y = touch ? parseInt(touch.pageX, 10) : e.pageX\n _pos.start = true\n this.__setPress(e)\n root.addEventListener(this.events.end, this.onTouchEnd)\n root.addEventListener(this.events.cancel, this.onTouchCancel)\n root.addEventListener(this.events.move, this.onTouchMove)\n this.trigger(EVENTS.TOUCH_START, e)\n }\n\n onTouchCancel (e) {\n this.onTouchEnd(e)\n }\n\n onTouchEnd (e) {\n const { _pos, root } = this\n preventToucheDefault(e)\n this.__clearPress()\n root.removeEventListener(this.events.cancel, this.onTouchCancel)\n root.removeEventListener(this.events.end, this.onTouchEnd)\n root.removeEventListener(this.events.move, this.onTouchMove)\n e.moving = _pos.moving\n e.press = _pos.press\n _pos.press && this.trigger(EVENTS.PRESS_END, e)\n this.trigger(EVENTS.TOUCH_END, e)\n !_pos.press && !_pos.moving && this.__setDb(e)\n _pos.press = false\n _pos.start = false\n _pos.moving = false\n }\n\n onTouchMove (e) {\n const { _pos, config } = this\n const touch = getTouch(e.touches)\n const x = touch ? parseInt(touch.pageX, 10) : e.pageX\n const y = touch ? parseInt(touch.pageY, 10) : e.pageX\n const diffx = x - _pos.x\n const diffy = y - _pos.y\n if (Math.abs(diffy) < config.miniStep && Math.abs(diffx) < config.miniStep) {\n return\n }\n this.__clearPress()\n _pos.press && this.trigger(EVENTS.PRESS_END, e)\n _pos.press = false\n _pos.moving = true\n this.trigger(EVENTS.TOUCH_MOVE, e)\n }\n\n destroy () {\n const map = {\n touchend: 'onTouchEnd',\n touchmove: 'onTouchMove',\n touchstart: 'onTouchStart'\n }\n Object.keys(map).map(key => {\n this.root.removeEventListener('touchend', this[map[key]])\n })\n }\n}\n\nexport default Touche\n","import Plugin, { Events, Util, Sniffer, STATES } from '../../plugin'\nimport Touche from './touch'\nimport SeekTipIcon from '../assets/seekicon.svg'\n// import BackSvg from './back.svg'\n\n/**\n * @typedef {{\n * index?: number,\n * disableGesture?: boolean,\n * gestureX?: boolean,\n * gestureY?: boolean,\n * gradient?: 'normal' | 'none' | 'top' | 'bottom',\n * isTouchingSeek?: boolean,\n * miniMoveStep?: number,\n * miniYPer?: number,\n * scopeL?: number,\n * scopeR?: number,\n * pressRate?: number,\n * darkness?: boolean,\n * maxDarkness?: number,\n * disableActive?: boolean,\n * disableTimeProgress?: boolean,\n * hideControlsActive?: boolean,\n * hideControlsEnd?: boolean,\n * moveDuration?: number,\n * closedbClick?: boolean,\n * disablePress?: boolean,\n * disableSeekIcon?: boolean,\n * [propName: string]: any\n * }} IMobileConfig\n */\n\nconst ACTIONS = {\n AUTO: 'auto',\n SEEKING: 'seeking',\n PLAYBACK: 'playbackrate',\n LIGHT: ''\n}\n\nclass MobilePlugin extends Plugin {\n static get pluginName () {\n return 'mobile'\n }\n\n /**\n * @type IMobileConfig & { [propName: string]: any}\n */\n static get defaultConfig () {\n return {\n index: 0,\n disableGesture: false, // Whether to disable gestures\n gestureX: true, // Whether to enable horizontal gestures\n gestureY: true, // Whether to enable vertical gestures\n gradient: 'normal', // Gradient shadow, 'none'/'top'/'bottom'\n isTouchingSeek: false, // Whether to update currentTime at the same time as touchMove\n miniMoveStep: 5, // Minimum moving distance, used for move throttling\n miniYPer: 5, // Percentage of minimum displacement in y direction\n scopeL: 0.25, // Gesture range on the left\n scopeR: 0.25, // Gesture range on the right\n scopeM: 0.9, // Middle gesture range\n pressRate: 2, // playbackRate when long press\n darkness: true, // Whether to enable the dimming function on the right\n maxDarkness: 0.8, // Maximum darkness,maximum transparency of the mask\n disableActive: false, // Whether to disable the time prompt\n disableTimeProgress: false, // Whether to disable the time progress bar\n hideControlsActive: false, // Whether to hide the control bar when dragging by gesture\n hideControlsEnd: false, // Whether to hide the control bar when the gesture ended\n moveDuration: 60 * 6 * 1000, // The duration corresponding to the dragging width of the player\n closedbClick: false, // Whether to turn off the double tap gesture\n disablePress: true, // Whether to turn off the long press gesture\n disableSeekIcon: false // Disable seek prompt\n }\n }\n\n constructor (options) {\n super(options)\n /**\n * @readonly\n */\n this.pos = {\n isStart: false,\n x: 0,\n y: 0,\n time: 0,\n volume: 0,\n rate: 1,\n light: 0,\n width: 0,\n height: 0,\n scopeL: 0,\n scopeR: 0,\n scopeM1: 0,\n scopeM2: 0,\n scope: -1\n }\n /**\n * @private\n */\n this.timer = null\n }\n\n get duration () {\n return this.playerConfig.customDuration || this.player.duration\n }\n\n get timeOffset () {\n return this.playerConfig.timeOffset || 0\n }\n\n /**\n * @private\n * @returns {[propName: string]: any}\n */\n registerIcons () {\n return {\n seekTipIcon: { icon: SeekTipIcon, class: 'xg-seek-pre' }\n }\n }\n\n afterCreate () {\n const { playerConfig, config, player } = this\n if (playerConfig.closeVideoDblclick === true) {\n config.closedbClick = true\n }\n this.resetPos()\n if (!Util.isUndefined(playerConfig.disableGesture)) {\n config.disableGesture = !!playerConfig.disableGesture\n }\n this.appendChild('.xg-seek-icon', this.icons.seekTipIcon)\n\n this.xgMask = Util.createDom('xg-mask', '', {}, 'xgmask')\n player.root.appendChild(this.xgMask)\n\n this.initCustomStyle()\n\n this.registerThumbnail()\n\n const eventType = Sniffer.device !== 'mobile' ? 'mouse' : 'touch'\n this.touch = new Touche(this.root, { eventType })\n\n this.root.addEventListener('contextmenu', e => {\n e.preventDefault()\n })\n\n player.root.addEventListener('touchmove', this.onRootTouchMove, true)\n player.root.addEventListener('touchend', this.onRootTouchEnd, true)\n\n this.on(Events.DURATION_CHANGE, () => {\n const { player, config } = this\n if (player.duration * 1000 < config.moveDuration) {\n config.moveDuration = player.duration * 1000\n }\n })\n\n this.on([Events.CANPLAY, Events.ENDED], () => {\n const { time, isStart } = this.pos\n if (!isStart && time > 0) {\n this.pos.time = 0\n }\n })\n\n const eventsMap = {\n touchstart: 'onTouchStart',\n touchmove: 'onTouchMove',\n touchend: 'onTouchEnd',\n press: 'onPress',\n pressend: 'onPressEnd',\n click: 'onClick',\n doubleclick: 'onDbClick'\n }\n\n Object.keys(eventsMap).map(key => {\n this.touch.on(key, (e) => {\n this[eventsMap[key]](e)\n })\n })\n\n if (!config.disableActive) {\n // Add progress bar drag event callback\n const progressPlugin = player.plugins.progress\n if (progressPlugin) {\n progressPlugin.addCallBack('dragmove', (data) => {\n this.activeSeekNote(data.currentTime, data.forward)\n })\n progressPlugin.addCallBack('dragend', () => {\n this.changeAction(ACTIONS.AUTO)\n })\n }\n }\n }\n\n registerThumbnail () {\n const { player } = this\n const { thumbnail } = player.plugins\n if (thumbnail && thumbnail.usable) {\n this.thumbnail = thumbnail.createThumbnail(null, 'mobile-thumbnail')\n const timePreview = this.find('.time-preview')\n timePreview.insertBefore(this.thumbnail, timePreview.children[0])\n }\n }\n\n initCustomStyle () {\n const { commonStyle } = this.playerConfig || {}\n const { playedColor, progressColor } = commonStyle\n if (playedColor) {\n this.find('.xg-curbar').style.backgroundColor = playedColor\n this.find('.xg-cur').style.color = playedColor\n }\n if (progressColor) {\n this.find('.xg-bar').style.backgroundColor = progressColor\n this.find('.time-preview').style.color = progressColor\n }\n this.config.disableTimeProgress && Util.addClass(this.find('.xg-timebar'), 'hide')\n }\n\n resetPos (time = 0) {\n if (this.pos) {\n this.pos.isStart = false\n this.pos.scope = -1;\n ['x', 'y', 'width', 'height', 'scopeL', 'scopeR', 'scopeM1', 'scopeM2'].map(item => {\n this.pos[item] = 0\n })\n } else {\n this.pos = {\n isStart: false,\n x: 0,\n y: 0,\n volume: 0,\n rate: 1,\n light: 0,\n width: 0,\n height: 0,\n scopeL: 0,\n scopeR: 0,\n scopeM1: 0,\n scopeM2: 0,\n scope: -1,\n time: 0\n }\n }\n }\n\n changeAction (action) {\n const { player, root } = this\n root.setAttribute('data-xg-action', action)\n const startPlugin = player.plugins.start\n startPlugin && startPlugin.recover()\n }\n\n getTouche (e) {\n const rotateDeg = this.player.rotateDeg\n const touche = e.touches && e.touches.length > 0 ? e.touches[e.touches.length - 1] : e\n // if (touches && touches.length > 0) {\n // const touche = touches[touches.length - 1]\n // if (rotateDeg === 0) {\n // return {\n // pageX: touche.pageX,\n // pageY: touche.pageY\n // }\n // } else {\n // return {\n // pageX: touche.pageY,\n // pageY: touche.pageX\n // }\n // }\n // } else {\n // }\n return rotateDeg === 0\n ? {\n pageX: touche.pageX,\n pageY: touche.pageY\n }\n : {\n pageX: touche.pageX,\n pageY: touche.pageY\n }\n }\n\n /**\n * 校验具体的操作范围\n * @param { number } x 方向位移\n * @param { number } y 方向位移\n * @param { number } diffx 方向位移差\n * @param { number } diffy 方向位移差\n * @param { any } pos 当前操作区域位置信息 包含{width, height}\n * @return { number } scope 区域 0=>中间x方向滑动 1=>左侧上下滑动 2=>右侧上下滑动\n */\n checkScope (x, y, diffx, diffy, pos) {\n const { width } = pos\n let scope = -1\n if (x < 0 || x > width) {\n return scope\n }\n\n const mold = diffy === 0 ? Math.abs(diffx) : Math.abs(diffx / diffy)\n if (Math.abs(diffx) > 0 && mold >= 1.73 && x > pos.scopeM1 && x < pos.scopeM2) {\n scope = 0\n } else if (Math.abs(diffx) === 0 || mold <= 0.57) {\n scope = x < pos.scopeL ? 1 : (x > pos.scopeR ? 2 : 3)\n }\n return scope\n }\n\n /**\n * 根据位移和操作类型进行对应处理\n * @param {number} diffx x方向位移差\n * @param {number} diffy y方向位移差\n * @param {number} scope scope 区域 0=>中间x方向滑动 1=>左侧上下滑动 2=>右侧上下滑动\n * @param {number} width 总体宽度\n * @param {number} height 总高度\n */\n executeMove (diffx, diffy, scope, width, height) {\n switch (scope) {\n case 0:\n this.updateTime(diffx / width * this.config.scopeM)\n break\n case 1:\n this.updateBrightness(diffy / height)\n break\n case 2:\n // ios系统不支持音量调节\n if (!Sniffer.os.isIos) {\n this.updateVolume(diffy / height)\n }\n break\n default:\n }\n }\n\n /**\n * 结束手势操作\n * @param {number} scope 当前手势类型 区域 0=>中间x方向滑动 1=>左侧上下滑动 2=>右侧上下滑动\n * @param {number} lastScope 上一次手势类型\n */\n endLastMove (lastScope) {\n const { pos, player, config } = this\n const time = (pos.time - this.timeOffset) / 1000\n switch (lastScope) {\n case 0:\n player.seek(Number(time).toFixed(1))\n config.hideControlsEnd ? player.blur() : player.focus()\n this.timer = setTimeout(() => {\n this.pos.time = 0\n }, 500)\n break\n case 1:\n case 2:\n default:\n }\n this.changeAction(ACTIONS.AUTO)\n }\n\n onTouchStart = (e) => {\n const { player, config, pos, playerConfig } = this\n const touche = this.getTouche(e)\n if (touche && !config.disableGesture && this.duration > 0 && !player.ended) {\n pos.isStart = true\n // e.cancelable && e.preventDefault()\n Util.checkIsFunction(playerConfig.disableSwipeHandler) && playerConfig.disableSwipeHandler()\n this.find('.xg-dur').innerHTML = Util.format(this.duration)\n // pos.volume = player.volume * 100\n const rect = this.root.getBoundingClientRect()\n if (player.rotateDeg === 90) {\n pos.top = rect.left\n pos.left = rect.top\n pos.width = rect.height\n pos.height = rect.width\n } else {\n pos.top = rect.top\n pos.left = rect.left\n pos.width = rect.width\n pos.height = rect.height\n }\n pos.x = parseInt(touche.pageX - pos.left, 10)\n pos.y = parseInt(touche.pageY - pos.top, 10)\n pos.scopeL = config.scopeL * pos.width\n pos.scopeR = (1 - config.scopeR) * pos.width\n pos.scopeM1 = pos.width * (1 - config.scopeM) / 2\n pos.scopeM2 = pos.width - pos.scopeM1\n }\n }\n\n onTouchMove = (e) => {\n const touche = this.getTouche(e)\n const { pos, config, player } = this\n if (!touche || config.disableGesture || !this.duration || !pos.isStart) {\n return\n }\n const { miniMoveStep, hideControlsActive } = config\n const x = parseInt(touche.pageX - pos.left, 10)\n const y = parseInt(touche.pageY - pos.top, 10)\n if (Math.abs(x - pos.x) > miniMoveStep || Math.abs(y - pos.y) > miniMoveStep) {\n const diffx = x - pos.x\n const diffy = y - pos.y\n let scope = pos.scope\n if (scope === -1) {\n scope = this.checkScope(x, y, diffx, diffy, pos)\n // 手势为快进快退记录起始操作时间\n if (scope === 0) {\n !hideControlsActive ? player.focus({ autoHide: false }) : player.blur()\n !pos.time && (pos.time = parseInt(player.currentTime * 1000, 10) + this.timeOffset * 1000)\n }\n pos.scope = scope\n }\n if (scope === -1 || (scope > 0 && !config.gestureY) || (scope === 0 && !config.gestureX)) {\n return\n }\n e.cancelable && e.preventDefault()\n this.executeMove(diffx, diffy, scope, pos.width, pos.height)\n pos.x = x\n pos.y = y\n } else {\n // console.log('touche.pageX - pos.x', touche.pageX - pos.x)\n }\n }\n\n onTouchEnd = (e) => {\n const { player, pos, playerConfig } = this\n if (!pos.isStart) {\n return\n }\n if (pos.scope > -1) {\n e.cancelable && e.preventDefault()\n }\n this.endLastMove(pos.scope)\n setTimeout(() => {\n player.getPlugin('progress') && player.getPlugin('progress').resetSeekState()\n }, 10)\n pos.scope = -1\n this.resetPos()\n Util.checkIsFunction(playerConfig.enableSwipeHandler) && playerConfig.enableSwipeHandler()\n this.changeAction(ACTIONS.AUTO)\n }\n\n checkIsRootTarget (e) {\n const plugins = this.player.plugins || {}\n if (plugins.progress && plugins.progress.root.contains(e.target)) {\n return false\n }\n return (plugins.start && plugins.start.root.contains(e.target)) || (plugins.controls && plugins.controls.root.contains(e.target))\n }\n\n onRootTouchMove = (e) => {\n if (this.config.disableGesture || !this.config.gestureX) {\n return\n }\n if (this.checkIsRootTarget(e)) {\n e.stopPropagation()\n if (!this.pos.isStart) {\n this.onTouchStart(e)\n } else {\n this.onTouchMove(e)\n }\n }\n }\n\n onRootTouchEnd = (e) => {\n if (this.pos.isStart && this.checkIsRootTarget(e)) {\n e.stopPropagation()\n this.onTouchEnd(e)\n const { controls } = this.player\n controls && controls.recoverAutoHide()\n }\n }\n\n sendUseAction (event) {\n const { paused } = this.player\n this.emitUserAction(event, 'switch_play_pause', {\n prop: 'paused',\n from: paused,\n to: !paused\n })\n }\n\n onClick (e) {\n const { player, config, playerConfig } = this\n if (player.state < STATES.RUNNING) {\n if (!playerConfig.closeVideoClick) {\n this.sendUseAction(new Event('click'))\n player.play()\n }\n return\n }\n\n if (!config.closedbClick || playerConfig.closeVideoClick) {\n player.isActive ? player.blur() : player.focus()\n } else if (!playerConfig.closeVideoClick) {\n if (player.isActive) {\n this.sendUseAction(new Event('click'))\n this.switchPlayPause()\n }\n player.focus()\n }\n }\n\n onDbClick (e) {\n const { config, player } = this\n if (!config.closedbClick && player.state >= STATES.RUNNING) {\n this.sendUseAction(new Event('dblclick'))\n this.switchPlayPause()\n }\n }\n\n onPress (e) {\n const { pos, config, player } = this\n if (config.disablePress) {\n return\n }\n pos.rate = this.player.playbackRate\n this.emitUserAction('press', 'change_rate', {\n prop: 'playbackRate',\n from: player.playbackRate,\n to: config.pressRate\n })\n player.playbackRate = config.pressRate\n this.changeAction(ACTIONS.PLAYBACK)\n }\n\n onPressEnd (e) {\n const { pos, config, player } = this\n if (config.disablePress) {\n return\n }\n this.emitUserAction('pressend', 'change_rate', { prop: 'playbackRate', from: player.playbackRate, to: pos.rate })\n player.playbackRate = pos.rate\n pos.rate = 1\n this.changeAction(ACTIONS.AUTO)\n }\n\n updateTime (percent) {\n const { player, config } = this\n const { duration } = this.player\n percent = Number(percent.toFixed(4))\n let time = parseInt(percent * config.moveDuration, 10) + this.timeOffset\n time += this.pos.time\n time = time < 0 ? 0 : (time > duration * 1000 ? duration * 1000 - 200 : time)\n player.getPlugin('time') && player.getPlugin('time').updateTime(time / 1000)\n player.getPlugin('progress') && player.getPlugin('progress').updatePercent(time / 1000 / this.duration, true)\n this.activeSeekNote(time / 1000, percent > 0)\n // 在滑动的同时实时seek\n if (config.isTouchingSeek) {\n // player.currentTime = time / 1000\n player.seek(Number((time - this.timeOffset) / 1000).toFixed(1))\n }\n this.pos.time = time\n }\n\n updateVolume (percent) {\n if (this.player.rotateDeg) {\n percent = -percent\n }\n const { player, pos } = this\n percent = parseInt(percent * 100, 10)\n pos.volume += percent\n if (Math.abs(pos.volume) < 10) {\n return\n }\n let volume = parseInt(player.volume * 10, 10) - parseInt(pos.volume / 10, 10)\n volume = volume > 10 ? 10 : (volume < 1 ? 0 : volume)\n player.volume = volume / 10\n pos.volume = 0\n }\n\n updateBrightness (percent) {\n if (this.player.rotateDeg) {\n percent = -percent\n }\n const { pos, config, xgMask } = this\n let light = pos.light + (0.8 * percent)\n light = light > config.maxDarkness ? config.maxDarkness : (light < 0 ? 0 : light)\n if (xgMask) {\n xgMask.style.backgroundColor = `rgba(0,0,0,${light})`\n }\n pos.light = light\n }\n\n activeSeekNote (time, isForward = true) {\n const { player, config } = this\n const isLive = !(this.duration !== Infinity && this.duration > 0)\n if (!time || typeof time !== 'number' || isLive || config.disableActive) {\n return\n }\n if (time < 0) {\n time = 0\n } else if (time > player.duration) {\n time = player.duration - 0.2\n }\n this.changeAction(ACTIONS.SEEKING)\n\n const startPlugin = player.plugins.start\n startPlugin && startPlugin.focusHide()\n\n this.find('.xg-dur').innerHTML = Util.format(this.duration)\n this.find('.xg-cur').innerHTML = Util.format(time)\n this.find('.xg-curbar').style.width = `${time / this.duration * 100}%`\n if (isForward) {\n Util.removeClass(this.find('.xg-seek-show'), 'xg-back')\n } else {\n Util.addClass(this.find('.xg-seek-show'), 'xg-back')\n }\n this.updateThumbnails(time)\n // const {thumbnail} = player.plugins\n // this.thumbnailPlugin && thumbnail.update(time)\n }\n\n updateThumbnails (time) {\n const { player } = this\n const { thumbnail } = player.plugins\n if (thumbnail && thumbnail.usable) {\n this.thumbnail && thumbnail.update(this.thumbnail, time, 160, 90)\n // this.videothumbnail && thumbnail.update(this.videothumbnail, time, rect.width, rect.height)\n }\n }\n\n switchPlayPause () {\n const { player } = this\n if (!player.state < STATES.ATTACHED) {\n return false\n } else if (!player.ended) {\n if (player.paused) {\n player.play()\n } else {\n player.pause()\n }\n }\n }\n\n // 动态禁用手势\n disableGesture () {\n this.config.disableGesture = false\n }\n\n // 动态启用手势\n enableGesture () {\n this.config.disableGesture = true\n }\n\n destroy () {\n const { player } = this\n this.timer && clearTimeout(this.timer)\n this.thumbnail = null\n player.root.removeChild(this.xgMask)\n this.xgMask = null\n this.touch && this.touch.destroy()\n this.touch = null\n player.root.removeEventListener('touchmove', this.onRootTouchMove, true)\n player.root.removeEventListener('touchend', this.onRootTouchEnd, true)\n }\n\n render () {\n const className = this.config.gradient !== 'normal' ? `gradient ${this.config.gradient}` : 'gradient'\n return `\n <xg-trigger class=\"trigger\">\n <div class=\"${className}\"></div>\n <div class=\"time-preview\">\n <div class=\"xg-seek-show ${this.config.disableSeekIcon ? ' hide-seek-icon' : ''}\">\n <i class=\"xg-seek-icon\"></i>\n <span class=\"xg-cur\">00:00</span>\n <span>/</span>\n <span class=\"xg-dur\">00:00</span>\n </div>\n <div class=\"xg-bar xg-timebar\">\n <div class=\"xg-curbar\"></div>\n </div>\n </div>\n <div class=\"xg-playbackrate xg-top-note\">\n <span><i>${this.config.pressRate}X</i>${this.i18n.FORWARD}</span>\n </div>\n </xg-trigger>\n `\n }\n}\n\nexport default MobilePlugin\n","import { BasePlugin, Events } from '../../plugin'\n/**\n * @typedef {{\n * seekStep?: number,\n * checkVisible?: boolean,\n * disableBodyTrigger?: boolean,\n * keyCodeMap?: { [propName: string]: any },\n * disable: boolean,\n * [propName: string]: any\n * }} IKeyboardConfig\n */\n\nfunction preventDefault (e) {\n e.preventDefault()\n e.returnValue = false\n}\n\nfunction isDisableTag (el) {\n const tagName = el.tagName\n\n if (tagName === 'INPUT' || tagName === 'TEXTAREA' || el.isContentEditable) {\n return true\n }\n\n return false\n}\n\nclass Keyboard extends BasePlugin {\n static get pluginName () {\n return 'keyboard'\n }\n\n /**\n * @type IKeyboardConfig\n */\n static get defaultConfig () {\n return {\n seekStep: 10, // Left/right fast forward each operation time\n checkVisible: true, // Whether to check the visibility when the shortcut key takes effect\n disableBodyTrigger: false, // Whether to monitor the shortcut keys on the body\n isGlobalTrigger: false, // Whether the shortcut key needs to be triggered globally\n keyCodeMap: {},\n disable: false\n }\n }\n\n mergekeyCodeMap () {\n const extendkeyCodeMap = this.config.keyCodeMap\n if (extendkeyCodeMap) {\n Object.keys(extendkeyCodeMap).map(key => {\n if (!this.keyCodeMap[key]) {\n this.keyCodeMap[key] = extendkeyCodeMap[key]\n } else {\n ['keyCode', 'action', 'disable', 'isBodyTarget'].map(key1 => {\n extendkeyCodeMap[key][key1] && (this.keyCodeMap[key][key1] = extendkeyCodeMap[key][key1])\n })\n }\n })\n }\n }\n\n afterCreate () {\n this.config.disable = !this.playerConfig.keyShortcut\n const seekStep = typeof this.config.seekStep === 'function' ? this.config.seekStep(this.player) : this.config.seekStep\n if (!(!seekStep || typeof seekStep !== 'number')) {\n this.seekStep = seekStep\n }\n this.keyCodeMap = {\n space: {\n keyCode: 32,\n action: 'playPause',\n disable: false,\n noBodyTarget: false\n },\n up: {\n keyCode: 38,\n action: 'upVolume',\n disable: false,\n noBodyTarget: true\n },\n down: {\n keyCode: 40,\n action: 'downVolume',\n disable: false,\n noBodyTarget: true\n },\n left: {\n keyCode: 37,\n action: 'seekBack',\n disable: false\n },\n right: {\n keyCode: 39,\n action: 'seek',\n disable: false\n },\n esc: {\n keyCode: 27,\n action: 'exitFullscreen',\n disable: false\n }\n }\n this.mergekeyCodeMap()\n this.player.root.addEventListener('keydown', this.onKeydown)\n document.addEventListener('keydown', this.onBodyKeyDown)\n }\n\n checkIsVisible () {\n if (!this.config.checkVisible) {\n return true\n }\n const rec = this.player.root.getBoundingClientRect()\n const { height, top, bottom } = rec\n const h = window.innerHeight\n if ((top < 0 && top < 0 - height * 0.9) || (bottom > 0 && bottom - h > height * 0.9)) {\n return false\n }\n return true\n }\n\n checkCode (code, isBodyTarget) {\n let flag = false\n Object.keys(this.keyCodeMap).map(key => {\n if (this.keyCodeMap[key] && code === this.keyCodeMap[key].keyCode && !this.keyCodeMap[key].disable) {\n flag = !isBodyTarget || (isBodyTarget && !this.keyCodeMap[key].noBodyTarget)\n }\n })\n return flag\n }\n\n downVolume (event) {\n const { player } = this\n const val = parseFloat((player.volume - 0.1).toFixed(1))\n this.emitUserAction(event, 'change_volume', {\n prop: 'volume',\n from: player.volume,\n to: val\n })\n if (val >= 0) {\n player.volume = val\n } else {\n player.volume = 0\n }\n }\n\n upVolume (event) {\n const { player } = this\n const val = parseFloat((player.volume + 0.1).toFixed(1))\n this.emitUserAction(event, 'change_volume', {\n prop: 'volume',\n from: player.volume,\n to: val\n })\n if (val <= 1) {\n player.volume = val\n } else {\n player.volume = 1\n }\n }\n\n seek (event) {\n const { currentTime, duration } = this.player\n let _time = currentTime\n if (currentTime + this.seekStep <= duration) {\n _time = currentTime + this.seekStep\n } else {\n _time = duration - 1\n }\n this.emitUserAction(event, 'seek', {\n prop: 'currentTime',\n from: currentTime,\n to: _time\n })\n this.player.currentTime = _time\n }\n\n seekBack (event) {\n const { currentTime } = this.player\n let _time = 0\n if (currentTime - this.seekStep >= 0) {\n _time = currentTime - this.seekStep\n }\n this.emitUserAction(event, 'seek', { prop: 'currentTime', from: currentTime, to: _time })\n this.player.currentTime = _time\n }\n\n playPause (event) {\n const { player } = this\n this.emitUserAction(event, 'switch_play_pause', { prop: 'paused', from: player.paused, to: !player.paused })\n if (player.paused) {\n // eslint-disable-next-line handle-callback-err\n player.play()\n } else {\n player.pause()\n }\n }\n\n exitFullscreen (event) {\n console.log('exitFullscreen', event)\n const { player } = this\n const { isCssfullScreen, fullscreen } = player\n if (fullscreen) {\n this.emitUserAction('keyup', 'switch_fullscreen', {\n prop: 'fullscreen',\n from: fullscreen,\n to: !fullscreen\n })\n player.exitFullscreen()\n }\n if (isCssfullScreen) {\n this.emitUserAction('keyup', 'switch_css_fullscreen', {\n prop: 'cssfullscreen',\n from: isCssfullScreen,\n to: !isCssfullScreen\n })\n player.exitCssFullscreen()\n }\n }\n\n onBodyKeyDown = (event) => {\n const e = event || window.event\n if (this.config.disable || this.config.disableBodyTrigger || !this.checkIsVisible() || e.metaKey || e.altKey || e.ctrlKey) {\n return\n }\n const keyCode = e.keyCode\n if ((e.target === document.body || (this.config.isGlobalTrigger && !isDisableTag(e.target))) && this.checkCode(keyCode, true)) {\n preventDefault(e)\n this.handleKeyCode(keyCode, event)\n return false\n }\n return false\n }\n\n onKeydown = (event) => {\n const e = event || window.event\n if (this.config.disable || e.metaKey || e.altKey || e.ctrlKey) {\n return\n }\n if (e && (e.keyCode === 37 || this.checkCode(e.keyCode)) && (e.target === this.player.root || e.target === this.player.video || e.target === this.player.controls.el)) {\n preventDefault(e)\n } else {\n return true\n }\n this.handleKeyCode(e.keyCode, event)\n }\n\n handleKeyCode (curKeyCode, event) {\n Object.keys(this.keyCodeMap).map(key => {\n const { action, keyCode, disable } = this.keyCodeMap[key]\n if (keyCode === curKeyCode && !disable) {\n if (typeof action === 'function') {\n action(event, this.player)\n } else if (typeof action === 'string') {\n if (typeof this[action] === 'function') {\n this[action](event, this.player)\n }\n }\n this.emit(Events.SHORTCUT, {\n key: key,\n target: event.target,\n ...this.keyCodeMap[key]\n })\n }\n })\n }\n\n destroy () {\n this.player.root.removeEventListener('keydown', this.onKeydown)\n document.removeEventListener('keydown', this.onBodyKeyDown)\n }\n\n disable () {\n this.config.disable = true\n }\n\n enable () {\n this.config.disable = false\n }\n}\n\nexport default Keyboard\n","import Plugin, { POSITIONS } from '../../plugin/plugin'\nimport loadingIcon from '../assets/loading.svg'\n\nclass Loading extends Plugin {\n static get pluginName () {\n return 'loading'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.ROOT\n }\n }\n\n registerIcons () {\n return {\n loadingIcon: loadingIcon\n }\n }\n\n afterCreate () {\n this.appendChild('xg-loading-inner', this.icons.loadingIcon)\n }\n\n render () {\n return `\n <xg-loading class=\"xgplayer-loading\">\n <xg-loading-inner></xg-loading-inner>\n </xg-loading>`\n }\n}\n\nexport default Loading\n","'use strict';\nvar $ = require('../internals/export');\nvar $findIndex = require('../internals/array-iteration').findIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n","import { Util } from '../../plugin'\n\nconst TPL = [\n { tag: 'xg-cache', className: 'xgplayer-progress-cache', styleKey: 'cachedColor' },\n { tag: 'xg-played', className: 'xgplayer-progress-played', styleKey: 'playedColor' }\n]\n\nexport default class InnerList {\n constructor (args) {\n this.fragments = args.fragments || []\n this.focusClass = 'inner-focus'\n this.style = args.style || {\n playedColor: '',\n cachedColor: '',\n progressColor: ''\n }\n this.duration = 0\n this.cachedIndex = 0\n this.playedIndex = 0\n }\n\n updateDuration (duration) {\n this.duration = parseInt(duration * 1000)\n let start = 0\n const { fragments } = this\n this.fragments = fragments.map(item => {\n item.start = start\n item.end = start + item.percent * this.duration\n item.duration = item.percent * this.duration\n start += item.percent * this.duration\n return item\n })\n }\n\n updateProgress (type = 'played', data = { newIndex: 0, curIndex: 0, millisecond: 0 }) {\n const { progressList, fragments } = this\n const { newIndex, curIndex, millisecond } = data\n if (newIndex !== curIndex) {\n progressList.map((item, index) => {\n if (index < newIndex) {\n item[type].style.width = '100%'\n } else if (index > newIndex) {\n item[type].style.width = 0\n }\n })\n }\n const curPFrag = fragments[newIndex]\n const per = millisecond === 0 ? 0 : (millisecond - curPFrag.start) / curPFrag.duration\n progressList[newIndex][type].style.width = per < 0 ? 0 : `${per * 100}%`\n }\n\n update (data = { cached: 0, played: 0 }, duration) {\n if (!this.duration || parseInt(duration * 1000, 10) !== this.duration) {\n if (!duration && duration !== 0) {\n return\n }\n this.updateDuration(duration)\n }\n const { playedIndex, cachedIndex } = this\n if (Util.typeOf(data.played) !== 'Undefined') {\n const newPIndex = this.findIndex(data.played * 1000, playedIndex)\n this.updateProgress('played', {\n newIndex: newPIndex,\n curIndex: playedIndex,\n millisecond: parseInt(data.played * 1000, 10)\n })\n this.playedIndex = newPIndex\n }\n\n if (Util.typeOf(data.cached) !== 'Undefined') {\n const newCIndex = this.findIndex(data.cached * 1000, cachedIndex)\n this.updateProgress('cached', {\n newIndex: newCIndex,\n curIndex: cachedIndex,\n millisecond: parseInt(data.cached * 1000, 10)\n })\n this.cachedIndex = newCIndex\n }\n }\n\n findIndex (time, curIndex) {\n const { fragments } = this\n if (fragments.length === 1) {\n return 0\n }\n if (time > fragments[curIndex].start && time < fragments[curIndex].end) {\n return curIndex\n }\n this.fragments.map((item, index) => {\n if (time > item.start && time <= item.end) {\n curIndex = index\n }\n })\n return curIndex\n }\n\n findHightLight () {\n const children = this.root.children\n for (let i = 0; i < children.length; i++) {\n if (Util.hasClass(children[i], this.focusClass)) {\n return {\n dom: children[i],\n pos: children[i].getBoundingClientRect()\n }\n }\n }\n }\n\n // 根据索引获取进度条片段\n findFragment (index) {\n const children = this.root.children\n if (index < 0 || index >= children.length) {\n return null\n }\n return {\n dom: children[index],\n pos: children[index].getBoundingClientRect()\n }\n }\n\n unHightLight () {\n const children = this.root.children\n for (let i = 0; i < children.length; i++) {\n Util.removeClass(children[i], this.focusClass)\n }\n }\n\n setHightLight (index) {\n const children = this.root.children\n if (index < children.length) {\n Util.addClass(children[index], this.focusClass)\n return {\n dom: children[index],\n pos: children[index].getBoundingClientRect()\n }\n }\n }\n\n destroy () {\n this.progressList = null\n this.fragments = null\n this.root.innerHTML = ''\n }\n\n render () {\n const { progressColor } = this.style\n this.root = Util.createDom('xg-inners', '', {}, 'progress-list')\n if (this.fragments) {\n this.progressList = this.fragments.map((item) => {\n const inner = Util.createDom('xg-inner', '', {\n style: progressColor ? `background:${progressColor}; flex: ${item.percent}` : `flex: ${item.percent}`\n }, `${item.isFocus ? 'inner-focus' : ''} xgplayer-progress-inner`)\n\n this.root.appendChild(inner)\n\n TPL.map(item => {\n inner.appendChild(Util.createDom(item.tag, '', {\n style: item.styleKey ? `background: ${this.style[item.styleKey]}; width:0;` : 'width:0;'\n }, item.className))\n })\n\n return {\n cached: inner.children[0],\n played: inner.children[1]\n }\n })\n }\n return this.root\n }\n}\n","import Plugin, { Events, Util, POSITIONS, Sniffer, STATES } from '../../plugin'\nimport InnerList from './innerList'\n\n/**\n * @typedef {{\n * position?:string,\n * disable?: boolean,\n * isDragingSeek?: boolean, // 是否在拖拽的过程中更新currentTime\n * closeMoveSeek?: boolean, // 是否关闭滑块seek能力\n * isPauseMoving?: boolean, // 是否在move的时候暂停视频内容\n * isCloseClickSeek?: boolean, // 是否关闭点击进度条的时候seek\n * fragments?: Array<{percent: number}>,\n * miniMoveStep?: number,\n * miniStartStep?: number,\n * onMoveStart?: () => any, // 手势开始移动回调,\n * onMoveEnd?: () => any, // 手势移动结束回调\n * [propName: string]: any\n * }} IProgressConfig\n */\n/**\n * 进度条组件\n */\nclass Progress extends Plugin {\n static get pluginName () {\n return 'progress'\n }\n\n /**\n * @type IProgressConfig\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_CENTER,\n index: 0,\n disable: false,\n isDragingSeek: true, // 是否在拖拽的过程中更新currentTime\n closeMoveSeek: false, // 是否关闭滑块seek能力\n isPauseMoving: false, // 是否在move的时候暂停视频内容\n isCloseClickSeek: false, // 是否关闭点击进度条的时候seek\n fragments: [{ percent: 1 }],\n miniMoveStep: 5,\n miniStartStep: 2,\n onMoveStart: () => {\n }, // 手势开始移动回调\n onMoveEnd: () => {} // 手势移动结束回调\n }\n }\n\n constructor (args) {\n super(args)\n /**\n * @readonly\n */\n this.useable = false\n /**\n * @readonly\n */\n this.isProgressMoving = false\n\n /**\n * @private\n */\n this.__dragCallBacks = []\n /**\n * @private\n */\n this._state = {\n now: -1,\n direc: 0,\n time: 0\n }\n }\n\n get duration () {\n return this.playerConfig.customDuration || this.player.duration\n }\n\n get timeOffset () {\n return this.playerConfig.timeOffset || 0\n }\n\n changeState (useable = true) {\n this.useable = useable\n }\n\n /**\n * @description 创建内部进度条,并挂载到xg-outer上,\n * 并把一些对外API绑定在progress上供外部调用\n *\n */\n createInner () {\n this.innerList = new InnerList({\n fragments: this.config.fragments,\n style: this.playerConfig.commonStyle || {}\n })\n this.outer.insertBefore(this.innerList.render(), this.outer.children[0]);\n ['findHightLight', 'unHightLight', 'setHightLight', 'findFragment'].map(item => {\n this[item] = this.innerList[item].bind(this.innerList)\n })\n }\n\n afterCreate () {\n if (this.config.disable || this.playerConfig.isLive) {\n return\n }\n this.pos = {\n x: 0, // 水平方向位移\n y: 0, // 垂直方向位移\n moving: false, // 是否正在移动\n isDown: false, // 是否mouseDown\n isEnter: false // 是否触发了mouseEnter\n }\n this.outer = this.find('xg-outer')\n this.createInner()\n if (Sniffer.device === 'mobile') {\n this.config.isDragingSeek = false\n this.isMobile = true\n }\n\n this.progressBtn = this.find('.xgplayer-progress-btn')\n\n this.on(Events.TIME_UPDATE, () => {\n this.onTimeupdate()\n })\n\n this.on(Events.SEEKED, () => {\n this.onTimeupdate()\n this.onCacheUpdate()\n })\n\n this.on(Events.PROGRESS, () => {\n this.onCacheUpdate()\n })\n\n this.on(Events.ENDED, () => {\n this.onCacheUpdate()\n this._state.now = 0\n })\n\n this.on(Events.EMPTIED, () => {\n this.onReset()\n })\n\n this.bindDomEvents()\n this.initCustomStyle()\n }\n\n initCustomStyle () {\n const { commonStyle } = this.playerConfig || {}\n const { sliderBtnStyle } = commonStyle\n const { progressBtn } = this\n if (sliderBtnStyle) {\n if (typeof sliderBtnStyle === 'string') {\n progressBtn.style.boxShadow = sliderBtnStyle\n } else if (typeof sliderBtnStyle === 'object') {\n Object.keys(sliderBtnStyle).map(key => {\n progressBtn.style[key] = sliderBtnStyle[key]\n })\n }\n }\n }\n\n /**\n * 触发某一类回调监听\n * @param { string } type 类型 drag/dragend\n * @param { any} data 具体数据\n */\n triggerCallbacks (type, data) {\n if (this.__dragCallBacks.length > 0) {\n this.__dragCallBacks.map(item => {\n if (item && item.handler && item.type === type) {\n try {\n item.handler(data)\n } catch (error) {\n console.error(`[XGPLAYER][triggerCallbacks] ${item} error`, error)\n }\n }\n })\n }\n }\n\n /**\n * 供外部插件添加回调\n * @param {string} type 类型 drag/dragend\n * @param {function} handle 回调函数句柄\n */\n addCallBack (type, handle) {\n if (handle && typeof handle === 'function') {\n this.__dragCallBacks.push({ type: type, handler: handle })\n }\n }\n\n /**\n * 供外部插件移除回调\n * @param {string} type 类型 drag/dragend\n * @param {Function} event 回调函数句柄\n */\n removeCallBack (type, event) {\n const { __dragCallBacks } = this\n let _index = -1\n __dragCallBacks.map((item, index) => {\n if (item && item.type === type && item.handler === event) {\n _index = index\n }\n })\n if (_index > -1) {\n __dragCallBacks.splice(_index, 1)\n }\n }\n\n bindDomEvents () {\n const { controls, config } = this.player\n if (this.isMobile) {\n this.bind('touchstart', this.onMouseDown)\n if (controls) {\n controls.root && controls.root.addEventListener('touchmove', Util.stopPropagation)\n controls.center && controls.center.addEventListener('touchend', Util.stopPropagation)\n }\n } else {\n this.bind('mousedown', this.onMouseDown)\n !config.isMobileSimulateMode && this.bind('mouseenter', this.onMouseEnter)\n }\n }\n\n focus () {\n this.player.controls.pauseAutoHide()\n Util.addClass(this.root, 'active')\n }\n\n blur () {\n this.player.controls.recoverAutoHide()\n Util.removeClass(this.root, 'active')\n }\n\n onMoveOnly = (e) => {\n const { pos, config, player } = this\n Util.event(e)\n const _ePos = Util.getEventPos(e, player.zoom)\n const x = player.rotateDeg === 90 ? _ePos.clientY : _ePos.clientX\n if (pos.moving && Math.abs(pos.x - x) < config.miniMoveStep) {\n return\n }\n pos.moving = true\n pos.x = x\n const ret = this.computeTime(e)\n this.triggerCallbacks('dragmove', ret)\n }\n\n onBodyClick = (e) => {\n e.preventDefault()\n e.stopPropagation()\n }\n\n onMouseDown = (e) => {\n const { player, pos, config, playerConfig } = this\n const _ePos = Util.getEventPos(e, player.zoom)\n const x = player.rotateDeg === 90 ? _ePos.clientY : _ePos.clientX\n if (player.isMini || config.closeMoveSeek || (!playerConfig.allowSeekAfterEnded && player.ended)) {\n return\n }\n e.stopPropagation()\n e.preventDefault()\n this.focus()\n Util.checkIsFunction(playerConfig.disableSwipeHandler) && playerConfig.disableSwipeHandler()\n Util.checkIsFunction(config.onMoveStart) && config.onMoveStart()\n Util.event(e)\n pos.x = x\n pos.isDown = true\n pos.moving = false\n\n // 交互开始 禁止控制栏的自动隐藏功能\n player.focus({ autoHide: false })\n this.isProgressMoving = true\n Util.addClass(this.progressBtn, 'active')\n\n const ret = this.computeTime(e)\n this._state.time = ret.currentTime\n this.updateWidth(ret.currentTime, ret.percent, 0)\n\n if (this.isMobile) {\n this.bind('touchmove', this.onMouseMove)\n this.bind('touchend', this.onMouseUp)\n } else {\n this.unbind('mousemove', this.onMoveOnly)\n\n document.addEventListener('mousemove', this.onMouseMove, false)\n document.addEventListener('mouseup', this.onMouseUp, false)\n // 避免触发videoClick 暂停/播放切换\n player.root.addEventListener('click', this.onBodyClick, false)\n // this.bind('mouseup', this.onMouseUp, false)\n }\n return true\n }\n\n onMouseUp = (e) => {\n const { player, config, pos, playerConfig, _state } = this\n e.stopPropagation()\n e.preventDefault()\n Util.checkIsFunction(playerConfig.enableSwipeHandler) && playerConfig.enableSwipeHandler()\n Util.checkIsFunction(config.onMoveEnd) && config.onMoveEnd()\n Util.event(e)\n Util.removeClass(this.progressBtn, 'active')\n\n const ret = this.computeTime(e)\n if (pos.moving) {\n this.updateWidth(ret.currentTime, ret.percent, 2)\n this.triggerCallbacks('dragend', ret)\n } else {\n // this.updateWidth(ret.currentTime, ret.percent, 2)\n this.triggerCallbacks('click', ret)\n }\n\n pos.moving = false\n pos.isDown = false\n pos.x = 0\n pos.y = 0\n _state.time = 0\n if (this.isMobile) {\n this.unbind('touchmove', this.onMouseMove)\n this.unbind('touchend', this.onMouseUp)\n // 交互结束 恢复控制栏的隐藏流程\n this.blur()\n } else {\n document.removeEventListener('mousemove', this.onMouseMove, false)\n document.removeEventListener('mouseup', this.onMouseUp, false)\n player.root.removeEventListener('click', this.onBodyClick, false)\n if (!pos.isEnter) {\n this.onMouseLeave(e)\n } else {\n !playerConfig.isMobileSimulateMode && this.bind('mousemove', this.onMoveOnly)\n }\n }\n // 延迟复位,状态复位要在dom相关时间回调执行之后\n Util.setTimeout(this, () => {\n this.resetSeekState()\n }, 10)\n // 交互结束 恢复控制栏的隐藏流程\n player.focus()\n }\n\n onMouseMove = (e) => {\n const { pos, player, config, _state } = this\n if (this.isMobile) {\n e.stopPropagation()\n e.preventDefault()\n }\n Util.event(e)\n const _ePos = Util.getEventPos(e, player.zoom)\n const x = player.rotateDeg === 90 ? _ePos.clientY : _ePos.clientX\n const diff = Math.abs(pos.x - x)\n if ((pos.moving && diff < config.miniMoveStep) || (!pos.moving && diff < config.miniStartStep)) {\n return\n }\n pos.x = x\n const ret = this.computeTime(e)\n if (_state.time < ret.currentTime) {\n ret.forward = true\n } else {\n ret.forward = false\n }\n _state.time = ret.currentTime\n if (pos.isDown && !pos.moving) {\n pos.moving = true\n config.isPauseMoving && player.pause()\n this.triggerCallbacks('dragstart', ret)\n }\n this.updateWidth(ret.currentTime, ret.percent, 1)\n this.triggerCallbacks('dragmove', ret)\n }\n\n onMouseEnter = (e) => {\n const { player, pos } = this\n if (pos.isDown || pos.isEnter || player.isMini || (!player.config.allowSeekAfterEnded && player.ended)) {\n return\n }\n pos.isEnter = true\n this.bind('mousemove', this.onMoveOnly)\n this.bind('mouseleave', this.onMouseLeave)\n this.focus()\n }\n\n onMouseLeave = (e) => {\n const { player, pos } = this\n pos.isEnter = false\n if (player.isMini) {\n return\n }\n this.unbind('mousemove', this.onMoveOnly)\n if (pos.isDown) {\n this.unbind('mouseleave', this.onMouseLeave)\n return\n }\n this.blur()\n }\n\n /**\n * @description 根据currenTime和占用百分比更新进度条\n * @param {Number} currentTime 需要更新到的时间\n * @param {Number} percent 更新时间占比\n * @param {Int} type 触发类型 0-down 1-move 2-up\n */\n updateWidth (currentTime, percent, type) {\n const { config, player } = this\n if (config.isCloseClickSeek && type === 0) {\n return\n }\n const realTime = currentTime > player.duration ? player.duration - 0.2 : Number(currentTime).toFixed(1)\n // currentTime = currentTime > player.duration ? player.duration - 0.2 : Number(currentTime).toFixed(1)\n this.updatePercent(percent)\n this.updateTime(currentTime)\n if (type === 1 && (!config.isDragingSeek || player.videoConfig.mediaType === 'audio')) {\n return\n }\n this._state.now = realTime\n this._state.direc = realTime > player.currentTime ? 0 : 1\n player.seek(realTime)\n }\n\n computeTime (e) {\n const { player } = this\n const { width, height, top, left } = this.root.getBoundingClientRect()\n const _ePos = Util.getEventPos(e, player.zoom)\n let rWidth, rLeft, clientX\n if (player.rotateDeg === 90) {\n rWidth = height\n rLeft = top\n clientX = _ePos.clientY\n } else {\n rWidth = width\n rLeft = left\n clientX = _ePos.clientX\n }\n let offset = clientX - rLeft\n offset = offset > rWidth ? rWidth : (offset < 0 ? 0 : offset)\n\n let percent = offset / rWidth\n percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent)\n const currentTime = parseInt(percent * this.duration * 1000, 10) / 1000\n return {\n percent,\n currentTime,\n offset,\n width: rWidth,\n left: rLeft,\n e\n }\n }\n\n /**\n * @description 更新时间插件,在拖拽状态下要接管时间插件的更新状态\n * 本位置会和time插件交互\n * @param {number} time 根据拖拽距离计算出的时间\n */\n updateTime (time) {\n const { player, duration } = this\n if (time > duration) {\n time = duration\n } else if (time < 0) {\n time = 0\n }\n const timeIcon = player.plugins.time\n if (timeIcon) {\n timeIcon.updateTime(time)\n }\n }\n\n /**\n * @description 复位正在拖拽状态 ,拖拽的时候要避免timeupdate更新\n */\n resetSeekState () {\n this.isProgressMoving = false\n const timeIcon = this.player.plugins.time\n timeIcon && timeIcon.resetActive()\n }\n\n /**\n * @description 拖拽过程中更新UI\n * @param {number} percent 小于0的小数\n *\n */\n updatePercent (percent, notSeek) {\n this.isProgressMoving = true\n if (this.config.disable) {\n return\n }\n percent = percent > 1 ? 1 : (percent < 0 ? 0 : percent)\n this.progressBtn.style.left = `${percent * 100}%`\n this.innerList.update({ played: percent * this.duration }, this.duration)\n const { miniprogress } = this.player.plugins\n miniprogress && miniprogress.update({ played: percent * this.duration }, this.duration)\n }\n\n /**\n * @description 播放进度更新\n */\n onTimeupdate () {\n const { player, _state, duration } = this\n if (player.isSeeking || this.isProgressMoving || player.state < STATES.RUNNING) {\n return\n }\n if (_state.now > -1) {\n const abs = parseInt(_state.now * 1000, 10) - parseInt(player.currentTime * 1000, 10)\n if ((_state.direc === 0 && abs > 300) || (_state.direc === 1 && abs > -300)) {\n _state.now = -1\n return\n } else {\n _state.now = -1\n }\n }\n const time = this.timeOffset + player.currentTime\n this.innerList.update({ played: time }, duration)\n this.progressBtn.style.left = `${time / duration * 100}%`\n const { miniprogress } = this.player.plugins\n miniprogress && miniprogress.update({ played: time }, duration)\n }\n\n /**\n * @description 缓存进度更新\n */\n onCacheUpdate () {\n const { player, duration } = this\n const point = player.bufferedPoint\n this.innerList.update({ cached: point.end }, duration)\n const { miniprogress } = this.player.plugins\n miniprogress && miniprogress.update({ cached: point.end }, duration)\n }\n\n onReset () {\n this.innerList.update({ played: 0, cached: 0 }, 0)\n const { miniprogress } = this.player.plugins\n miniprogress && miniprogress.update({ cached: 0, played: 0 }, 0)\n }\n\n destroy () {\n const { player } = this\n const { controls } = player\n this.thumbnailPlugin = null\n this.innerList.destroy()\n this.innerList = null\n if (this.isMobile) {\n this.unbind('touchstart', this.onMouseDown)\n this.unbind('touchmove', this.onMouseMove)\n this.unbind('touchend', this.onMouseUp)\n if (controls) {\n controls.root && controls.root.removeEventListener('touchmove', Util.stopPropagation)\n controls.center && controls.center.removeEventListener('touchend', Util.stopPropagation)\n }\n } else {\n this.unbind('mousedown', this.onMouseDown)\n this.unbind('mouseenter', this.onMouseEnter)\n this.unbind('mousemove', this.onMoveOnly)\n document.removeEventListener('mousemove', this.onMouseMove, false)\n document.removeEventListener('mouseup', this.onMouseUp, false)\n player.root.removeEventListener('click', this.onBodyClick, false)\n }\n }\n\n render () {\n if (this.config.disable || this.playerConfig.isLive) {\n return\n }\n const controlsMode = this.player.controls ? this.player.controls.config.mode : ''\n const className = controlsMode === 'bottom' ? 'xgplayer-progress-bottom' : ''\n return `\n <xg-progress class=\"xgplayer-progress ${className}\">\n <xg-outer class=\"xgplayer-progress-outer\">\n <xg-progress-btn class=\"xgplayer-progress-btn\"></xg-progress-btn>\n </xg-outer>\n </xg-progress>\n `\n }\n}\n\nexport default Progress\n","import Plugin, { Events, POSITIONS } from '../../plugin'\nimport PlaySvg from '../assets/play.svg'\nimport PauseSvg from '../assets/pause.svg'\n\nclass Play extends Plugin {\n static get pluginName () {\n return 'play'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_LEFT,\n index: 0,\n disable: false\n }\n }\n\n afterCreate () {\n const { player, config } = this\n if (config.disable) {\n return\n }\n this.initIcons()\n this.btnClick = this.btnClick.bind(this)\n this.bind(['touchend', 'click'], this.btnClick)\n\n this.on(Events.PAUSE, () => {\n this.animate(player.paused)\n })\n this.on(Events.PLAY, () => {\n this.animate(player.paused)\n })\n this.animate(true)\n }\n\n registerIcons () {\n return {\n play: { icon: PlaySvg, class: 'xg-icon-play' },\n pause: { icon: PauseSvg, class: 'xg-icon-pause' }\n }\n }\n\n btnClick (e) {\n e.preventDefault()\n e.stopPropagation()\n const { player } = this\n this.emitUserAction(e, 'switch_play_pause', { prop: 'paused', from: player.paused, to: !player.paused })\n if (player.ended) {\n player.replay()\n } else if (player.paused) {\n player.play()\n this.animate(false)\n } else {\n player.pause()\n this.animate(true)\n }\n return false\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('.xgplayer-icon', icons.play)\n this.appendChild('.xgplayer-icon', icons.pause)\n }\n\n animate (paused) {\n const { i18nKeys } = this\n if (paused) {\n this.setAttr('data-state', 'pause')\n this.changeLangTextKey(this.find('.xg-tips'), i18nKeys.PLAY_TIPS)\n } else {\n this.setAttr('data-state', 'play')\n this.changeLangTextKey(this.find('.xg-tips'), i18nKeys.PAUSE_TIPS)\n }\n }\n\n destroy () {\n this.unbind(['touchend', 'click'], this.btnClick)\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n return `<xg-icon class=\"xgplayer-play\">\n <div class=\"xgplayer-icon\">\n </div>\n <div class=\"xg-tips\" lang-key=\"${this.i18nKeys.PLAY_TIPS}\">${this.i18n.PLAY_TIPS}</div>\n </xg-icon>`\n }\n}\nexport default Play\n","import Plugin, { POSITIONS, Util } from '../../plugin'\nimport BackSVG from '../assets/back.svg'\n\nexport default class TopBackIcon extends Plugin {\n static get pluginName () {\n return 'topbackicon'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.ROOT_TOP,\n index: 0\n }\n }\n\n afterCreate () {\n this.initIcons()\n this.onClick = (e) => {\n e.preventDefault()\n e.stopPropagation()\n this.config.onClick(e)\n }\n\n this.bind(['click', 'touchend'], this.onClick)\n }\n\n registerIcons () {\n return {\n screenBack: { icon: BackSVG, class: 'xg-fullscreen-back' }\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild(this.root, icons.screenBack)\n }\n\n show () {\n Util.addClass(this.root, 'show')\n }\n\n hide () {\n Util.removeClass(this.root, 'show')\n }\n\n render () {\n return `<xg-icon class=\"xgplayer-back\">\n </xg-icon>`\n }\n}\n","import Plugin, { Events, POSITIONS, Sniffer, STATE_CLASS, Util } from '../../plugin'\nimport TopBackIcon from './backicon'\nimport FullScreenSvg from '../assets/requestFull.svg'\nimport ExitFullScreenSvg from '../assets/exitFull.svg'\n\n/**\n * @typedef { {\n * position?: string,\n * index?: number,\n * useCssFullscreen?: boolean,\n * rotateFullscreen?: boolean,\n * switchCallback?: () => any,\n * target?: null | HTMLElement,\n * disable?: boolean,\n * needBackIcon?: boolean,\n * [propName: string]: any\n * } } IFullscreenConfig\n */\nexport default class Fullscreen extends Plugin {\n static get pluginName () {\n return 'fullscreen'\n }\n\n /**\n * @type IFullscreenConfig\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 0,\n useCssFullscreen: false, // Whether to use the page full screen\n rotateFullscreen: false, // Whether to enable rotating full screen\n switchCallback: null, // Custom switch function\n target: null, // Trigger Dom element\n disable: false,\n needBackIcon: false // Whether to enable the return button in the upper left corner of the full screen exit\n }\n }\n\n /**\n * @private\n */\n afterCreate () {\n const { config, playerConfig } = this\n if (config.disable) {\n return\n }\n\n if (config.target) {\n this.playerConfig.fullscreenTarget = this.config.target\n }\n\n const fullEl = Util.getFullScreenEl()\n\n if (playerConfig.fullscreenTarget === fullEl) {\n this.player.getFullscreen()\n }\n\n this.initIcons()\n\n this.handleFullscreen = this.hook('fullscreenChange', this.changeFullScreen, {\n pre: (e) => {\n const { fullscreen } = this.player\n this.emitUserAction(e, 'switch_fullscreen', {\n prop: 'fullscreen',\n from: fullscreen,\n to: !fullscreen\n })\n }\n })\n\n this.bind('.xgplayer-fullscreen', Sniffer.device === 'mobile' ? 'touchend' : 'click', this.handleFullscreen)\n\n this.on(Events.FULLSCREEN_CHANGE, (isFullScreen) => {\n this.changeLangTextKey(this.find('.xg-tips'), isFullScreen ? this.i18nKeys.EXITFULLSCREEN_TIPS : this.i18nKeys.FULLSCREEN_TIPS)\n this.animate(isFullScreen)\n if (this.config.needBackIcon) {\n this.show()\n }\n })\n if (this.config.needBackIcon) {\n this.topBackIcon = this.player.registerPlugin({\n plugin: TopBackIcon,\n options: {\n config: {\n onClick: (e) => {\n this.handleFullscreen(e)\n }\n }\n }\n })\n }\n if (Sniffer.device === 'mobile') {\n window.addEventListener('orientationchange', this._onOrientationChange)\n }\n }\n\n /**\n * @private\n */\n _onOrientationChange = (e) => {\n if (this.player.fullscreen && this.config.rotateFullscreen) {\n if (window.orientation === 90 || window.orientation === -90) {\n this.setRotateDeg(0)\n } else {\n this.setRotateDeg(90)\n }\n }\n }\n\n /**\n * @private\n */\n registerIcons () {\n return {\n fullscreen: { icon: FullScreenSvg, class: 'xg-get-fullscreen' },\n exitFullscreen: { icon: ExitFullScreenSvg, class: 'xg-exit-fullscreen' }\n }\n }\n\n destroy () {\n this.unbind('.xgplayer-icon', Sniffer.device === 'mobile' ? 'touchend' : 'click', this.handleFullscreen)\n if (Sniffer.device === 'mobile') {\n window.removeEventListener('orientationchange', this._onOrientationChange)\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('.xgplayer-icon', icons.fullscreen)\n this.appendChild('.xgplayer-icon', icons.exitFullscreen)\n }\n\n setRotateDeg (deg) {\n const { player } = this\n if (window.orientation === 90 || window.orientation === -90) {\n player.rotateDeg = 0\n } else {\n player.rotateDeg = deg\n }\n }\n\n /**\n * 进入旋转全屏\n * @param { HTMLElement } [el]\n */\n getRotateFullscreen (el) {\n const { player } = this\n if (player.isCssfullScreen) {\n player.exitCssFullscreen(el)\n }\n const _class = el ? STATE_CLASS.INNER_FULLSCREEN : STATE_CLASS.ROTATE_FULLSCREEN\n player._fullscreenEl = el || player.root\n player.changeFullStyle(player.root, el, _class, STATE_CLASS.PARENT_ROTATE_FULLSCREEN)\n player.fullscreen = true\n this.setRotateDeg(90)\n this.emit(Events.FULLSCREEN_CHANGE, true)\n }\n\n /**\n * 退出旋转全屏\n * @param { HTMLElement } [el]\n */\n exitRotateFullscreen (el) {\n const { player } = this\n player.fullscreen = false\n const _class = player._fullscreenEl !== player.root ? STATE_CLASS.INNER_FULLSCREEN : STATE_CLASS.ROTATE_FULLSCREEN\n player.recoverFullStyle(player.root, player._fullscreenEl, _class, STATE_CLASS.PARENT_ROTATE_FULLSCREEN)\n this.setRotateDeg(0)\n this.emit(Events.FULLSCREEN_CHANGE, false)\n }\n\n /**\n * 进入旋转全屏\n * @param { Event } [e]\n */\n changeFullScreen (e) {\n if (e) {\n e.preventDefault()\n e.stopPropagation()\n }\n const { player, config } = this\n let useCssFullscreen = false\n if (config.useCssFullscreen === true || (typeof config.useCssFullscreen === 'function' && config.useCssFullscreen())) {\n useCssFullscreen = true\n }\n if (useCssFullscreen) {\n if (player.fullscreen) {\n player.fullscreen = false\n player.exitCssFullscreen()\n this.emit(Events.FULLSCREEN_CHANGE, false)\n } else {\n player.fullscreen = true\n player.getCssFullscreen()\n this.emit(Events.FULLSCREEN_CHANGE, true)\n }\n this.animate(player.fullscreen)\n } else if (config.rotateFullscreen) {\n if (player.fullscreen) {\n this.exitRotateFullscreen()\n } else {\n this.getRotateFullscreen()\n }\n this.animate(player.fullscreen)\n } else {\n if (config.switchCallback && typeof config.switchCallback === 'function') {\n config.switchCallback(player.fullscreen)\n return\n }\n if (player.fullscreen) {\n player.exitFullscreen()\n } else {\n player.getFullscreen()\n }\n }\n }\n\n /**\n *\n * @param { boolean } isFullScreen\n */\n animate (isFullScreen) {\n isFullScreen ? this.setAttr('data-state', 'full') : this.setAttr('data-state', 'normal')\n if (this.topBackIcon) {\n if (isFullScreen) {\n this.topBackIcon.show()\n this.hide()\n } else {\n this.topBackIcon.hide()\n this.show()\n }\n }\n }\n\n show () {\n super.show()\n }\n\n hide () {\n super.hide()\n }\n\n /**\n * @private\n * @returns\n */\n render () {\n if (this.config.disable) {\n return\n }\n const langKey = 'FULLSCREEN_TIPS'\n return `<xg-icon class=\"xgplayer-fullscreen\">\n <div class=\"xgplayer-icon\">\n </div>\n <div class=\"xg-tips\" lang-key=\"${this.i18nKeys[langKey]}\">${this.i18n[langKey]}</div>\n </xg-icon>`\n }\n}\n","import Plugin, { Util, Events, POSITIONS, STATES } from '../../plugin'\n\nclass Time extends Plugin {\n static get pluginName () {\n return 'time'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_LEFT,\n index: 2,\n disable: false\n }\n }\n\n constructor (args) {\n super(args)\n this.isActiving = false\n }\n\n get duration () {\n return this.playerConfig.customDuration || this.player.duration\n }\n\n get timeOffset () {\n return this.playerConfig.timeOffset || 0\n }\n\n afterCreate () {\n const constrolsMode = this.player.controls.config.mode\n this.mode = constrolsMode === 'flex' ? 'flex' : 'normal'\n if (this.config.disable) {\n return\n }\n if (this.mode === 'flex') {\n this.createCenterTime()\n this.hide()\n }\n this.durationDom = this.find('.time-duration')\n this.timeDom = this.find('.time-current')\n this.on(Events.DURATION_CHANGE, () => {\n this.onTimeUpdate()\n })\n this.on(Events.TIME_UPDATE, () => {\n this.onTimeUpdate()\n })\n\n this.on(Events.EMPTIED, () => {\n this.onReset()\n })\n }\n\n show () {\n if (this.mode === 'flex') {\n return\n }\n super.show()\n }\n\n onTimeUpdate () {\n const { player, config } = this\n if (config.disable || this.isActiving || player.state < STATES.RUNNING) {\n return\n }\n const current = player.currentTime + this.timeOffset\n if (this.mode === 'flex') {\n this.centerCurDom.innerHTML = Util.format(current)\n if (this.duration !== Infinity && this.duration > 0) {\n this.centerDurDom.innerHTML = Util.format(this.duration)\n }\n } else {\n this.timeDom.innerHTML = Util.format(current)\n if (this.duration !== Infinity && this.duration > 0) {\n this.durationDom.innerHTML = Util.format(this.duration)\n }\n }\n }\n\n onReset () {\n if (this.mode === 'flex') {\n this.centerCurDom.innerHTML = Util.format(0)\n this.centerDurDom.innerHTML = Util.format(0)\n } else {\n this.timeDom.innerHTML = Util.format(0)\n this.durationDom.innerHTML = Util.format(0)\n }\n }\n\n createCenterTime () {\n const { player } = this\n if (!player.controls || !player.controls.center) {\n return\n }\n const center = player.controls.center\n this.centerCurDom = Util.createDom('xg-icon', '00:00', {}, 'xgplayer-time left')\n this.centerDurDom = Util.createDom('xg-icon', '00:00', {}, 'xgplayer-time right')\n center.children.length > 0 ? center.insertBefore(this.centerCurDom, center.children[0]) : center.appendChild(this.centerCurDom)\n center.appendChild(this.centerDurDom)\n }\n\n afterPlayerInit () {\n const { config } = this\n if (this.duration === Infinity || this.playerConfig.isLive) {\n Util.hide(this.durationDom)\n Util.hide(this.timeDom)\n Util.hide(this.find('.time-separator'))\n Util.show(this.find('.time-live-tag'))\n } else {\n Util.hide(this.find('.time-live-tag'))\n }\n if (config.hide) {\n this.hide()\n return\n }\n this.show()\n }\n\n changeLiveState (isLive) {\n if (isLive) {\n Util.hide(this.durationDom)\n Util.hide(this.timeDom)\n Util.hide(this.find('.time-separator'))\n Util.show(this.find('.time-live-tag'))\n } else {\n Util.hide(this.find('.time-live-tag'))\n Util.show(this.find('.time-separator'))\n Util.show(this.durationDom)\n Util.show(this.timeDom)\n }\n }\n\n updateTime (time) {\n this.isActiving = true\n if ((!time && time !== 0) || time > this.duration) {\n return\n }\n if (this.mode === 'flex') {\n this.centerCurDom.innerHTML = Util.format(time)\n return\n }\n this.timeDom.innerHTML = Util.format(time)\n }\n\n resetActive () {\n const { player } = this\n const updateState = () => {\n this.isActiving = false\n }\n this.off(Events.SEEKED, updateState)\n if (player.isSeeking) {\n this.once(Events.SEEKED, updateState)\n } else {\n this.isActiving = false\n }\n }\n\n destroy () {\n const { center } = this.player.controls\n this.centerCurDom && center.removeChild(this.centerCurDom)\n this.centerCurDom = null\n this.centerDurDom && center.removeChild(this.centerDurDom)\n this.centerDurDom = null\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n return `<xg-icon class=\"xgplayer-time\">\n <span class=\"time-current\">00:00</span>\n <span class=\"time-separator\">/</span>\n <span class=\"time-duration\">00:00</span>\n <span class=\"time-live-tag\">${this.i18n.LIVE_TIP}</span>\n </xg-icon>`\n }\n}\nexport default Time\n","import Plugin, { Util, Events, Sniffer, POSITIONS } from '../../plugin'\nimport volumeLargeSvg from '../assets/volumeLarge.svg'\nimport volumeSmallSvg from '../assets/volumeSmall.svg'\nimport volumeMutedSvg from '../assets/volumeMuted.svg'\n\n/**\n * @typedef {{\n * position?: string, // [可选]插件挂载的dom\n * index?: number // [可选]插件在播放器中挂载的位置\n * disable?: boolean, // [可选]是否禁用插件交互行为\n * showValueLabel?: boolean, // [可选]是否显示当前滑动的音量数值\n * default?: number // [可选]默认\n * [propName: string]: any\n * }} IVolumeConfig\n */\n\nclass Volume extends Plugin {\n static get pluginName () {\n return 'volume'\n }\n\n /**\n * @type IVolumeConfig\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT, // [可选]插件挂载的dom\n index: 1, // [可选]插件在播放器中挂载的位置\n disable: false, // [可选]是否禁用插件交互行为\n showValueLabel: false, // [可选]是否显示当前滑动的音量数值\n default: 0.6 // [可选]默认音量\n }\n }\n\n registerIcons () {\n return {\n volumeSmall: { icon: volumeSmallSvg, class: 'xg-volume-small' },\n volumeLarge: { icon: volumeLargeSvg, class: 'xg-volume' },\n volumeMuted: { icon: volumeMutedSvg, class: 'xg-volume-mute' }\n }\n }\n\n afterCreate () {\n if (this.config.disable) {\n return\n }\n\n this.initIcons()\n\n const { commonStyle, volume } = this.playerConfig\n if (commonStyle.volumeColor) {\n this.find('.xgplayer-drag').style.backgroundColor = commonStyle.volumeColor\n }\n this.changeMutedHandler = this.hook('mutedChange', (e) => {\n this.changeMuted(e)\n }, {\n pre: (e) => {\n e.preventDefault()\n e.stopPropagation()\n this.emitUserAction(e, 'change_muted', { prop: 'muted', from: this.player.muted, to: !this.player.muted })\n }\n })\n\n if (!(Sniffer.device === 'mobile') && !this.playerConfig.isMobileSimulateMode) {\n this.bind('mouseenter', this.onMouseenter)\n\n this.bind(['blur', 'mouseleave'], this.onMouseleave)\n\n this.bind('.xgplayer-slider', 'mousedown', this.onBarMousedown)\n }\n\n this.bind('.xgplayer-icon', Sniffer.device === 'mobile' ? 'touchend' : 'click', this.changeMutedHandler)\n\n this.on(Events.VOLUME_CHANGE, this.onVolumeChange)\n this.once(Events.LOADED_DATA, this.onVolumeChange)\n\n if (Util.typeOf(volume) !== 'Number') {\n this.player.volume = this.config.default\n }\n\n this.onVolumeChange()\n }\n\n onBarMousedown = (e) => {\n const { player } = this\n const slider = this.find('.xgplayer-slider')\n const bar = this.find('.xgplayer-bar')\n slider.focus()\n Util.event(e)\n\n const barRect = bar.getBoundingClientRect()\n const _ePos = Util.getEventPos(e, player.zoom)\n const pos = { x: _ePos.clientX, y: _ePos.clientY }\n const height = barRect.height - (_ePos.clientY - barRect.top)\n this.updateVolumePos(height, e)\n\n this.isMoving = false\n const onMove = (e) => {\n e.preventDefault()\n e.stopPropagation()\n Util.event(e)\n const _ePos = Util.getEventPos(e, player.zoom)\n this.isMoving = true\n const w = height - _ePos.clientY + pos.y\n if (w > barRect.height) {\n return\n }\n this.updateVolumePos(w, e)\n }\n\n const onUp = (e) => {\n e.preventDefault()\n e.stopPropagation()\n Util.event(e)\n window.removeEventListener('mousemove', onMove)\n window.removeEventListener('touchmove', onMove)\n window.removeEventListener('mouseup', onUp)\n window.removeEventListener('touchend', onUp)\n this.isMoving = false\n }\n window.addEventListener('mousemove', onMove)\n window.addEventListener('touchmove', onMove)\n window.addEventListener('mouseup', onUp)\n window.addEventListener('touchend', onUp)\n return false\n }\n\n updateVolumePos (height, event) {\n const { player } = this\n const drag = this.find('.xgplayer-drag')\n const bar = this.find('.xgplayer-bar')\n const now = height / bar.getBoundingClientRect().height\n drag.style.height = `${height}px`\n const _volume = Math.max(Math.min(now, 1), 0)\n this.emitUserAction(event, 'change_volume', [{\n prop: 'muted',\n from: true,\n to: false\n }, {\n prop: 'volume',\n from: player.volume,\n to: _volume\n }])\n player.volume = _volume\n player.muted = false\n\n if (this.config.showValueLabel) {\n this.updateVolumeValue()\n }\n }\n\n /**\n * 修改音量数值标签\n *\n * @memberof Volume\n */\n updateVolumeValue () {\n const { volume } = this.player\n const $labelValue = this.find('.xgplayer-value-label')\n const vol = Math.max(Math.min(volume, 1), 0)\n\n $labelValue.innerText = Math.ceil(vol * 100)\n }\n\n onMouseenter = (e) => {\n Util.addClass(this.root, 'slide-show')\n }\n\n onMouseleave = (e) => {\n Util.removeClass(this.root, 'slide-show')\n }\n\n changeMuted (e) {\n // e.preventDefault()\n e && e.stopPropagation()\n const { player } = this\n if (player.volume < 0.01) {\n player.volume = this.config.default\n } else {\n player.muted = !player.muted\n }\n }\n\n onVolumeChange = (e) => {\n const { muted, volume } = this.player\n if (!this.isMoving) {\n this.find('.xgplayer-drag').style.height = muted || volume === 0 ? '0px' : `${volume * 100}%`\n }\n this.animate(muted, volume)\n }\n\n animate (muted, volume) {\n if (muted || volume === 0) {\n this.setAttr('data-state', 'mute')\n } else if (volume < 0.5 && this.icons.volumeSmall) {\n this.setAttr('data-state', 'small')\n } else {\n this.setAttr('data-state', 'normal')\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('.xgplayer-icon', icons.volumeSmall)\n this.appendChild('.xgplayer-icon', icons.volumeLarge)\n this.appendChild('.xgplayer-icon', icons.volumeMuted)\n }\n\n destroy () {\n this.unbind('mouseenter', this.onMouseenter)\n\n this.unbind(['blur', 'mouseleave'], this.onMouseleave)\n\n this.unbind('.xgplayer-bar', 'mousedown', this.onBarMousedown)\n\n this.unbind('.xgplayer-icon', Sniffer.device === 'mobile' ? 'touchend' : 'click', this.changeMutedHandler)\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n const volume = this.config.default || this.player.volume\n const isShowVolumeValue = this.config.showValueLabel\n return `\n <xg-icon class=\"xgplayer-volume\" data-state=\"normal\">\n <div class=\"xgplayer-icon\">\n </div>\n <xg-slider class=\"xgplayer-slider\">\n ${isShowVolumeValue ? `<div class=\"xgplayer-value-label\">${volume * 100}</div>` : ''}\n <div class=\"xgplayer-bar\">\n <xg-drag class=\"xgplayer-drag\" style=\"height: ${volume * 100}%\"></xg-drag>\n </div>\n </xg-slider>\n </xg-icon>`\n }\n}\nexport default Volume\n","import Plugin, { POSITIONS, Util } from '../../plugin'\nimport { Events } from '../../plugin/basePlugin'\nimport RotateSvg from '../assets/rotate.svg'\n\nexport default class Rotate extends Plugin {\n static get pluginName () {\n return 'rotate'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 6,\n innerRotate: true, // true为只有画面旋转,false为整个播放器旋转\n clockwise: false,\n rotateDeg: 0, // 初始旋转角度\n disable: false\n }\n }\n\n constructor (args) {\n super(args)\n this.rotateDeg = this.config.rotateDeg || 0\n }\n\n afterCreate () {\n if (this.config.disable) {\n return\n }\n this.appendChild('.xgplayer-icon', this.icons.rotate)\n this.onBtnClick = this.onBtnClick.bind(this)\n this.bind('.xgplayer-icon', ['click', 'touchend'], this.onBtnClick)\n // 全屏/css全屏/容器宽高发生变化 需要重新计算\n this.on(Events.VIDEO_RESIZE, () => {\n // console.log('Events.VIDEO_RESIZE')\n if (this.rotateDeg) {\n Util.setTimeout(this, () => {\n this.updateRotateDeg(this.rotateDeg, this.config.innerRotate)\n }, 100)\n }\n })\n if (this.rotateDeg) {\n this.updateRotateDeg(this.rotateDeg, this.config.innerRotate)\n }\n }\n\n destroy () {\n this.unbind('.xgplayer-icon', ['click', 'touchend'], this.onBtnClick)\n }\n\n onBtnClick (e) {\n e.preventDefault()\n e.stopPropagation()\n this.emitUserAction(e, 'rotate')\n this.rotate(this.config.clockwise, this.config.innerRotate, 1)\n }\n\n updateRotateDeg (rotateDeg, innerRotate) {\n const player = this.player\n if (!rotateDeg) {\n rotateDeg = 0\n }\n const { root, innerContainer, video } = this.player\n const width = root.offsetWidth\n const height = innerContainer && innerRotate ? innerContainer.offsetHeight : root.offsetHeight\n let rWidth = '100%'\n let rHeight = '100%'\n let x = 0\n let y = 0\n if (rotateDeg === 0.75 || rotateDeg === 0.25) {\n rWidth = `${height}px`\n rHeight = `${width}px`\n x = -(height - width) / 2\n y = -(width - height) / 2\n }\n const _transform = `translate(${x}px,${y}px) rotate(${rotateDeg}turn)`\n const _styles = {\n transformOrigin: 'center center',\n transform: _transform,\n webKitTransform: _transform,\n height: rHeight,\n width: rWidth\n }\n\n const _target = innerRotate ? video : root\n const poster = innerRotate ? player.getPlugin('poster') : null\n Object.keys(_styles).map(key => {\n _target.style[key] = _styles[key]\n poster && poster.root && (poster.root.style[key] = _styles[key])\n })\n }\n\n rotate (clockwise = false, innerRotate = true, times = 1) {\n const player = this.player\n if (!this.rotateDeg) {\n this.rotateDeg = 0\n }\n const factor = clockwise ? 1 : -1\n\n this.rotateDeg = (this.rotateDeg + 1 + factor * 0.25 * times) % 1\n this.updateRotateDeg(this.rotateDeg, innerRotate)\n player.emit(Events.ROTATE, this.rotateDeg * 360)\n }\n\n registerIcons () {\n return {\n rotate: RotateSvg\n }\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n return `\n <xg-icon class=\"xgplayer-rotate\">\n <div class=\"xgplayer-icon\">\n </div>\n <div class=\"xg-tips\" lang-key=\"${this.i18nKeys.ROTATE_TIPS}\">\n ${this.i18n.ROTATE_TIPS}\n </div>\n </xg-icon>`\n }\n}\n","import Plugin, { Events, Util, POSITIONS } from '../../plugin'\nimport PipIcon from '../assets/pipIcon.svg'\nimport PipIconExit from '../assets/pipIconExit.svg'\n\n/**\n * @description picture-in-picture plugin\n * @doc https://www.w3.org/TR/picture-in-picture/\n * @doc https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n */\n\nconst PresentationMode = {\n PIP: 'picture-in-picture',\n INLINE: 'inline',\n FULLSCREEN: 'fullscreen'\n}\n\nclass PIP extends Plugin {\n static get pluginName () {\n return 'pip'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 6,\n showIcon: false\n }\n }\n\n static checkWebkitSetPresentationMode (video) {\n return typeof video.webkitSetPresentationMode === 'function'\n }\n\n beforeCreate (args) {\n if (typeof args.player.config.pip === 'boolean') {\n args.config.showIcon = args.player.config.pip\n }\n }\n\n afterCreate () {\n // 非可用状态不做初始化\n if (!this.isPIPAvailable()) {\n return\n }\n this.pMode = PresentationMode.INLINE\n this.initPipEvents()\n // 确认开启按钮的情况下才初始化按钮\n if (this.config.showIcon) {\n this.initIcons()\n }\n // video初始化之后再做判断是否显示\n this.once(Events.COMPLETE, () => {\n if (this.config.showIcon) {\n Util.removeClass(this.find('.xgplayer-icon'), 'xg-icon-disable')\n this.bind('click', this.switchPIP)\n }\n })\n }\n\n registerIcons () {\n return {\n pipIcon: { icon: PipIcon, class: 'xg-get-pip' },\n pipIconExit: { icon: PipIconExit, class: 'xg-exit-pip' }\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('.xgplayer-icon', icons.pipIcon)\n this.appendChild('.xgplayer-icon', icons.pipIconExit)\n }\n\n initPipEvents () {\n const { player } = this\n this.leavePIPCallback = () => {\n // 处理点击x关闭画中画的时候暂停问题\n const paused = player.paused\n Util.setTimeout(this, () => {\n // 使用videoPlay避免多次触发 playhooks\n !paused && player.videoPlay()\n }, 0)\n !paused && player.videoPlay()\n this.setAttr('data-state', 'normal')\n player.emit(Events.PIP_CHANGE, false)\n }\n\n this.enterPIPCallback = (e) => {\n player.emit(Events.PIP_CHANGE, true)\n this.pipWindow = e.pictureInPictureWindow\n this.setAttr('data-state', 'pip')\n }\n\n this.onWebkitpresentationmodechanged = (e) => {\n const mode = player.video.webkitPresentationMode\n // 如果在全屏下进入了该逻辑,调用退出全屏处理\n if (this.pMode === PresentationMode.FULLSCREEN && mode !== PresentationMode.FULLSCREEN) {\n player.onFullscreenChange(null, false)\n }\n this.pMode = mode\n if (mode === PresentationMode.PIP) {\n this.enterPIPCallback(e)\n } else if (mode === PresentationMode.INLINE) {\n this.leavePIPCallback(e)\n }\n }\n\n if (player.video) {\n player.video.addEventListener('enterpictureinpicture', this.enterPIPCallback)\n player.video.addEventListener('leavepictureinpicture', this.leavePIPCallback)\n PIP.checkWebkitSetPresentationMode(player.video) && player.video.addEventListener('webkitpresentationmodechanged', this.onWebkitpresentationmodechanged)\n }\n }\n\n switchPIP = (e) => {\n if (!this.isPIPAvailable()) {\n return false\n }\n e.stopPropagation()\n if (this.isPip) {\n this.exitPIP()\n this.emitUserAction(e, 'change_pip', { props: 'pip', from: true, to: false })\n this.setAttr('data-state', 'normal')\n } else if (this.player.video.readyState === 4) {\n this.requestPIP()\n this.emitUserAction(e, 'change_pip', { props: 'pip', from: false, to: true })\n this.setAttr('data-state', 'pip')\n }\n }\n\n /*\n * 进入画中画\n */\n requestPIP () {\n const { player, playerConfig } = this\n if (!this.isPIPAvailable() || this.isPip) {\n return\n }\n try {\n const { poster } = playerConfig\n if (poster) {\n player.video.poster = Util.typeOf(poster) === 'String' ? poster : poster.poster\n }\n PIP.checkWebkitSetPresentationMode(player.video) ? player.video.webkitSetPresentationMode('picture-in-picture') : player.video.requestPictureInPicture()\n return true\n } catch (reason) {\n console.error('requestPiP', reason)\n return false\n }\n }\n\n /**\n * 退出画中画\n */\n exitPIP () {\n const { player } = this\n try {\n if (this.isPIPAvailable() && this.isPip) {\n PIP.checkWebkitSetPresentationMode(player.video) ? player.video.webkitSetPresentationMode('inline') : document.exitPictureInPicture()\n }\n return true\n } catch (reason) {\n console.error('exitPIP', reason)\n return false\n }\n }\n\n get isPip () {\n const { player } = this\n return (document.pictureInPictureElement && document.pictureInPictureElement === player.video) || player.video.webkitPresentationMode === PresentationMode.PIP\n }\n\n isPIPAvailable () {\n const { video } = this.player\n return document.pictureInPictureEnabled &&\n ((Util.typeOf(video.disablePictureInPicture) === 'Boolean' && !video.disablePictureInPicture) ||\n (video.webkitSupportsPresentationMode && Util.typeOf(video.webkitSetPresentationMode) === 'Function'))\n }\n\n destroy () {\n const { player } = this\n player.video.removeEventListener('enterpictureinpicture', this.enterPIPCallback)\n player.video.removeEventListener('leavepictureinpicture', this.leavePIPCallback)\n this.exitPIP()\n this.unbind('click', this.btnClick)\n }\n\n render () {\n if (!this.config.showIcon && this.isPIPAvailable()) {\n return\n }\n return `<xg-icon class=\"xgplayer-pip\">\n <div class=\"xgplayer-icon xg-icon-disable\">\n </div>\n <div class=\"xg-tips\" lang-key=\"${this.i18nKeys.PIP}\">${this.i18n.PIP}</div>\n </xg-icon>`\n }\n}\nexport default PIP\n","/**\n * 下一个按钮组件\n */\nimport Plugin, { POSITIONS, Sniffer, Events } from '../../plugin'\nimport Next from '../assets/playNext.svg'\n\nexport default class PlayNextIcon extends Plugin {\n static get pluginName () {\n return 'playNext'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_LEFT,\n index: 1,\n url: null,\n urlList: []\n }\n }\n\n constructor (options) {\n super(options)\n this.idx = -1\n }\n\n afterCreate () {\n if (!this.config.urlList || this.config.urlList.length === 0) {\n return\n }\n this.appendChild('.xgplayer-icon', this.icons.playNext)\n this.initEvents()\n }\n\n registerIcons () {\n return {\n playNext: Next\n }\n }\n\n initEvents () {\n this.nextHandler = this.hook('nextClick', this.changeSrc)\n const event = Sniffer.device === 'mobile' ? 'touchend' : 'click'\n this.bind(event, this.playNext)\n this.show()\n }\n\n playNext = (e) => {\n const { player } = this\n e.preventDefault()\n e.stopPropagation()\n if (this.idx + 1 < this.config.urlList.length) {\n this.idx++\n player.emit(Events.PLAYNEXT, this.idx + 1)\n this.nextHandler(this.config.urlList[this.idx], this.idx)\n } else {\n this.nextHandler()\n player.emit(Events.PLAYNEXT)\n }\n }\n\n changeSrc (url) {\n const { player } = this\n if (!url) {\n return\n }\n player.pause()\n player.currentTime = 0\n player.autoplay = true\n player.src = url\n }\n\n destroy () {\n this.unbind(['touchend', 'click'], this.playNext)\n }\n\n render () {\n if (!this.config.urlList || this.config.urlList.length === 0) {\n return\n }\n return `\n <xg-icon class=\"xgplayer-playnext\">\n <div class=\"xgplayer-icon\">\n </div>\n <div class=\"xg-tips\" lang-key=\"PLAYNEXT_TIPS\">${this.i18n.PLAYNEXT_TIPS}</div>\n </xg-icon>\n `\n }\n}\n","//download.js v4.2, by dandavis; 2008-2016. [MIT] see http://danml.com/download.html for tests/usage\n// v1 landed a FF+Chrome compat way of downloading strings to local un-named files, upgraded to use a hidden frame and optional mime\n// v2 added named files via a[download], msSaveBlob, IE (10+) support, and window.URL support for larger+faster saves than dataURLs\n// v3 added dataURL and Blob Input, bind-toggle arity, and legacy dataURL fallback was improved with force-download mime and base64 support. 3.1 improved safari handling.\n// v4 adds AMD/UMD, commonJS, and plain browser support\n// v4.1 adds url download capability via solo URL argument (same domain/CORS only)\n// v4.2 adds semantic variable names, long (over 2MB) dataURL support, and hidden by default temp anchors\n// https://github.com/rndme/download\n\n(function (root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory();\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.download = factory();\n }\n}(this, function () {\n\n\treturn function download(data, strFileName, strMimeType) {\n\n\t\tvar self = window, // this script is only for browsers anyway...\n\t\t\tdefaultMime = \"application/octet-stream\", // this default mime also triggers iframe downloads\n\t\t\tmimeType = strMimeType || defaultMime,\n\t\t\tpayload = data,\n\t\t\turl = !strFileName && !strMimeType && payload,\n\t\t\tanchor = document.createElement(\"a\"),\n\t\t\ttoString = function(a){return String(a);},\n\t\t\tmyBlob = (self.Blob || self.MozBlob || self.WebKitBlob || toString),\n\t\t\tfileName = strFileName || \"download\",\n\t\t\tblob,\n\t\t\treader;\n\t\t\tmyBlob= myBlob.call ? myBlob.bind(self) : Blob ;\n\t \n\t\tif(String(this)===\"true\"){ //reverse arguments, allowing download.bind(true, \"text/xml\", \"export.xml\") to act as a callback\n\t\t\tpayload=[payload, mimeType];\n\t\t\tmimeType=payload[0];\n\t\t\tpayload=payload[1];\n\t\t}\n\n\n\t\tif(url && url.length< 2048){ // if no filename and no mime, assume a url was passed as the only argument\n\t\t\tfileName = url.split(\"/\").pop().split(\"?\")[0];\n\t\t\tanchor.href = url; // assign href prop to temp anchor\n\t\t \tif(anchor.href.indexOf(url) !== -1){ // if the browser determines that it's a potentially valid url path:\n \t\tvar ajax=new XMLHttpRequest();\n \t\tajax.open( \"GET\", url, true);\n \t\tajax.responseType = 'blob';\n \t\tajax.onload= function(e){ \n\t\t\t\t download(e.target.response, fileName, defaultMime);\n\t\t\t\t};\n \t\tsetTimeout(function(){ ajax.send();}, 0); // allows setting custom ajax headers using the return:\n\t\t\t return ajax;\n\t\t\t} // end if valid url?\n\t\t} // end if url?\n\n\n\t\t//go ahead and download dataURLs right away\n\t\tif(/^data:([\\w+-]+\\/[\\w+.-]+)?[,;]/.test(payload)){\n\t\t\n\t\t\tif(payload.length > (1024*1024*1.999) && myBlob !== toString ){\n\t\t\t\tpayload=dataUrlToBlob(payload);\n\t\t\t\tmimeType=payload.type || defaultMime;\n\t\t\t}else{\t\t\t\n\t\t\t\treturn navigator.msSaveBlob ? // IE10 can't do a[download], only Blobs:\n\t\t\t\t\tnavigator.msSaveBlob(dataUrlToBlob(payload), fileName) :\n\t\t\t\t\tsaver(payload) ; // everyone else can save dataURLs un-processed\n\t\t\t}\n\t\t\t\n\t\t}else{//not data url, is it a string with special needs?\n\t\t\tif(/([\\x80-\\xff])/.test(payload)){\t\t\t \n\t\t\t\tvar i=0, tempUiArr= new Uint8Array(payload.length), mx=tempUiArr.length;\n\t\t\t\tfor(i;i<mx;++i) tempUiArr[i]= payload.charCodeAt(i);\n\t\t\t \tpayload=new myBlob([tempUiArr], {type: mimeType});\n\t\t\t}\t\t \n\t\t}\n\t\tblob = payload instanceof myBlob ?\n\t\t\tpayload :\n\t\t\tnew myBlob([payload], {type: mimeType}) ;\n\n\n\t\tfunction dataUrlToBlob(strUrl) {\n\t\t\tvar parts= strUrl.split(/[:;,]/),\n\t\t\ttype= parts[1],\n\t\t\tdecoder= parts[2] == \"base64\" ? atob : decodeURIComponent,\n\t\t\tbinData= decoder( parts.pop() ),\n\t\t\tmx= binData.length,\n\t\t\ti= 0,\n\t\t\tuiArr= new Uint8Array(mx);\n\n\t\t\tfor(i;i<mx;++i) uiArr[i]= binData.charCodeAt(i);\n\n\t\t\treturn new myBlob([uiArr], {type: type});\n\t\t }\n\n\t\tfunction saver(url, winMode){\n\n\t\t\tif ('download' in anchor) { //html5 A[download]\n\t\t\t\tanchor.href = url;\n\t\t\t\tanchor.setAttribute(\"download\", fileName);\n\t\t\t\tanchor.className = \"download-js-link\";\n\t\t\t\tanchor.innerHTML = \"downloading...\";\n\t\t\t\tanchor.style.display = \"none\";\n\t\t\t\tdocument.body.appendChild(anchor);\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tanchor.click();\n\t\t\t\t\tdocument.body.removeChild(anchor);\n\t\t\t\t\tif(winMode===true){setTimeout(function(){ self.URL.revokeObjectURL(anchor.href);}, 250 );}\n\t\t\t\t}, 66);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// handle non-a[download] safari as best we can:\n\t\t\tif(/(Version)\\/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari\\//.test(navigator.userAgent)) {\n\t\t\t\tif(/^data:/.test(url))\turl=\"data:\"+url.replace(/^data:([\\w\\/\\-\\+]+)/, defaultMime);\n\t\t\t\tif(!window.open(url)){ // popup blocked, offer direct download:\n\t\t\t\t\tif(confirm(\"Displaying New Document\\n\\nUse Save As... to download, then click back to return to this page.\")){ location.href=url; }\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t//do iframe dataURL download (old ch+FF):\n\t\t\tvar f = document.createElement(\"iframe\");\n\t\t\tdocument.body.appendChild(f);\n\n\t\t\tif(!winMode && /^data:/.test(url)){ // force a mime that will download:\n\t\t\t\turl=\"data:\"+url.replace(/^data:([\\w\\/\\-\\+]+)/, defaultMime);\n\t\t\t}\n\t\t\tf.src=url;\n\t\t\tsetTimeout(function(){ document.body.removeChild(f); }, 333);\n\n\t\t}//end saver\n\n\n\n\n\t\tif (navigator.msSaveBlob) { // IE10+ : (has Blob, but not a[download] or URL)\n\t\t\treturn navigator.msSaveBlob(blob, fileName);\n\t\t}\n\n\t\tif(self.URL){ // simple fast and modern way using Blob and URL:\n\t\t\tsaver(self.URL.createObjectURL(blob), true);\n\t\t}else{\n\t\t\t// handle non-Blob()+non-URL browsers:\n\t\t\tif(typeof blob === \"string\" || blob.constructor===toString ){\n\t\t\t\ttry{\n\t\t\t\t\treturn saver( \"data:\" + mimeType + \";base64,\" + self.btoa(blob) );\n\t\t\t\t}catch(y){\n\t\t\t\t\treturn saver( \"data:\" + mimeType + \",\" + encodeURIComponent(blob) );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Blob but not URL support:\n\t\t\treader=new FileReader();\n\t\t\treader.onload=function(e){\n\t\t\t\tsaver(this.result);\n\t\t\t};\n\t\t\treader.readAsDataURL(blob);\n\t\t}\n\t\treturn true;\n\t}; /* end download() */\n}));\n","import downloadUtil from 'downloadjs'\nimport Plugin, { POSITIONS } from '../../plugin'\nimport DownloadSvg from '../assets/download.svg'\n/**\n * @typedef { {\n * position: string,\n * index: number,\n * disable: boolean,\n * [propName: string]: any\n * } } IDownloadConfig\n */\nexport default class Download extends Plugin {\n static get pluginName () {\n return 'download'\n }\n\n /**\n * @type IDownloadConfig\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 3,\n disable: true\n }\n }\n\n constructor (args) {\n super(args)\n this.timer = null\n this.isLock = false\n }\n\n afterCreate () {\n if (this.config.disable) {\n return\n }\n this.appendChild('.xgplayer-icon', this.icons.download)\n this.bind(['click', 'touchend'], this.download)\n }\n\n registerIcons () {\n return {\n download: DownloadSvg\n }\n }\n\n download = (e) => {\n if (this.isLock) {\n return\n }\n this.emitUserAction(e, 'download')\n const url = this.getAbsoluteURL(this.player.src)\n downloadUtil(url)\n this.isLock = true\n this.timer = window.setTimeout(() => {\n this.isLock = false\n window.clearTimeout(this.timer)\n this.timer = null\n }, 300)\n }\n\n getAbsoluteURL (url) {\n // Check if absolute URL\n if (!url.match(/^https?:\\/\\//)) {\n const div = document.createElement('div')\n div.innerHTML = `<a href=\"${url}\">x</a>`\n url = div.firstChild.href\n }\n return url\n }\n\n destroy () {\n this.unbind(['click', 'touchend'], this.download)\n window.clearTimeout(this.timer)\n this.timer = null\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n return `<xg-icon class=\"xgplayer-download\">\n <div class=\"xgplayer-icon\">\n </div>\n <div class=\"xg-tips\" lang-key=\"${this.i18nKeys.DOWNLOAD_TIPS}\">${this.i18n.DOWNLOAD_TIPS}</div>\n </xg-icon>`\n }\n}\n","import Plugin, { POSITIONS, Events } from '../../plugin'\n\nexport default class ScreenShot extends Plugin {\n static get pluginName () {\n return 'screenShot'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 5,\n quality: 0.92,\n type: 'image/png',\n format: '.png',\n width: 600,\n height: 337,\n fitVideo: true,\n disable: false,\n name: 'screenshot'\n }\n }\n\n beforeCreate (args) {\n if (typeof args.player.config.screenShot === 'boolean') {\n args.config.disable = !args.player.config.screenShot\n }\n }\n\n afterCreate () {\n this.appendChild('.xgplayer-icon', this.icons.screenshotIcon)\n const { config } = this\n this.initSize = (data) => {\n if (config.fitVideo) {\n config.width = data.vWidth\n config.height = data.vHeight\n }\n }\n this.once(Events.VIDEO_RESIZE, this.initSize)\n }\n\n onPluginsReady () {\n this.show()\n this.onClickBtn = this.onClickBtn.bind(this)\n this.bind(['click', 'touchend'], this.onClickBtn)\n }\n\n saveScreenShot (data, filename) {\n const saveLink = document.createElement('a')\n saveLink.href = data\n saveLink.download = filename\n const event = document.createEvent('MouseEvents')\n event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)\n saveLink.dispatchEvent(event)\n }\n\n createCanvans (width, height) {\n const canvas = document.createElement('canvas')\n this.canvasCtx = canvas.getContext('2d')\n this.canvas = canvas\n canvas.width = width || this.config.width\n canvas.height = height || this.config.height\n }\n\n onClickBtn (e) {\n e.preventDefault()\n e.stopPropagation()\n this.emitUserAction(e, 'shot')\n this.shot().then((data) => {\n this.emit(Events.SCREEN_SHOT, data)\n this.saveScreenShot(data, this.config.name + this.config.format)\n })\n }\n\n shot (width, height, option = { quality: 0.92, type: 'image/png' }) {\n const { config, player } = this\n const quality = option.quality || config.quality\n const type = option.type || config.type\n return new Promise((resolve, reject) => {\n if (!this.canvas) {\n this.createCanvans(width, height)\n } else {\n this.canvas.width = width || config.width\n this.canvas.height = height || config.height\n }\n this.canvasCtx.drawImage(player.video, 0, 0, width || config.width, height || config.height)\n let src = this.canvas.toDataURL(type, quality).replace(type, 'image/octet-stream')\n src = src.replace(/^data:image\\/[^;]+/, 'data:application/octet-stream')\n resolve(src)\n })\n }\n\n registerIcons () {\n return {\n screenshotIcon: null\n }\n }\n\n destroy () {\n this.unbind(['click', 'touchend'], this.onClickBtn)\n this.off(Events.VIDEO_RESIZE, this.initSize)\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n const className = this.icons.screenshotIcon ? 'xgplayer-icon' : 'xgplayer-icon btn-text'\n const langKey = 'SCREENSHOT'\n return `\n <xg-icon class=\"xgplayer-shot\">\n <div class=\"${className}\">\n ${this.icons.screenshotIcon ? '' : `<span lang-key=\"${this.i18nKeys[langKey]}\">${this.i18n[langKey]}</span>`} \n </div>\n </xg-icon>`\n }\n}\n","import Plugin, { Util, Sniffer } from '../../plugin'\n\nexport default class OptionList {\n constructor (args) {\n this.config = args.config\n this.parent = args.root\n this.root = Util.createDom('ul', '', {}, `xg-options-list ${this.config.className}`)\n args.root.appendChild(this.root)\n this.onItemClick = this.onItemClick.bind(this)\n this.renderItemList()\n const eventName = Sniffer.device === 'mobile' ? 'touchend' : 'click'\n this._delegates = Plugin.delegate.call(this, this.root, 'li', eventName, this.onItemClick)\n }\n\n renderItemList (data) {\n const { config, root } = this\n if (data) {\n config.data = data\n } else {\n data = config.data\n }\n\n if (config.style) {\n Object.keys(config.style).map(key => {\n root.style[key] = config[key]\n })\n }\n\n if (data.length > 0) {\n this.attrKeys = Object.keys(data[0])\n }\n\n this.root.innerHTML = ''\n\n data.map((item, index) => {\n const className = item.selected ? 'option-item selected' : 'option-item'\n item['data-index'] = index\n this.root.appendChild(Util.createDom('li', `<span>${item.showText}</span>`, item, className))\n })\n }\n\n onItemClick (e) {\n if (!e.delegateTarget) {\n e.delegateTarget = e.target\n }\n const target = e.delegateTarget\n if (target && Util.hasClass(target, 'selected')) {\n return false\n }\n const changeCallback = typeof this.config.onItemClick === 'function' ? this.config.onItemClick : null\n const curlSelected = this.root.querySelector('.selected')\n Util.addClass(target, 'selected')\n curlSelected && Util.removeClass(curlSelected, 'selected')\n changeCallback(e, {\n from: curlSelected ? this.getAttrObj(curlSelected, this.attrKeys) : null,\n to: this.getAttrObj(target, this.attrKeys)\n })\n }\n\n getAttrObj (dom, keys) {\n if (!dom || !keys) {\n return {}\n }\n const obj = {}\n keys.map(key => {\n obj[key] = dom.getAttribute(key)\n })\n const index = dom.getAttribute('data-index')\n if (index) {\n obj.index = Number(index)\n }\n return obj\n }\n\n show () {\n Util.removeClass(this.root, 'hide')\n Util.addClass(this.root, 'active')\n }\n\n hide () {\n Util.removeClass(this.root, 'active')\n Util.addClass(this.root, 'hide')\n }\n\n destroy () {\n if (this._delegates) {\n this._delegates.map(item => {\n item.destroy && item.destroy()\n })\n this._delegates = null\n }\n this.root.innerHTML = null\n this.parent.removeChild(this.root)\n this.root = null\n }\n}\n","\nimport Plugin, { Events, Util, Sniffer, POSITIONS } from '../../plugin'\nimport OptionList from './optionList'\n\n/**\n * @typedef {{\n * isShow?: boolean,\n * index?: number,\n * list?: Array<any>,\n * listType?: string,\n * hidePortrait?: boolean,\n * [propName: string]: any\n * }} IOptionsIconConfig\n */\n\nconst IS_MOBILE = Sniffer.device === 'mobile'\nexport default class OptionsIcon extends Plugin {\n static get pluginName () {\n return 'optionsIcon'\n }\n\n /**\n * @type { IOptionsIconConfig }\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 100,\n list: [],\n listType: 'middle', // 模式 rightSide-右侧边栏 middle-中间显示\n listStyle: {},\n hidePortrait: true\n }\n }\n\n constructor (args) {\n super(args)\n this.isActive = false\n this.curValue = null // 当前值\n this.curIndex = 0\n }\n\n updateLang (value) {\n this.renderItemList(this.config.list, this.curIndex)\n }\n\n afterCreate () {\n const { config } = this\n if (IS_MOBILE && config.listType !== 'middle') {\n config.listType = 'rightSide'\n }\n\n config.hidePortrait && Util.addClass(this.root, 'portrait')\n\n this.once(Events.CANPLAY, () => {\n if (config.list && config.list.length > 0) {\n this.renderItemList(config.list)\n this.show()\n }\n })\n // 移动端控制栏和列表互斥\n IS_MOBILE && this.on(Events.PLAYER_FOCUS, () => {\n if (!this.isActive) {\n return\n }\n this.optionsList && this.optionsList.hide()\n this.isActive = false\n })\n this.activeEvent = IS_MOBILE ? 'touchend' : 'mouseenter'\n this.onEnter = this.onEnter.bind(this)\n this.onLeave = this.onLeave.bind(this)\n this.bind(this.activeEvent, this.onEnter)\n this.bind('mouseleave', this.onLeave)\n }\n\n show () {\n if (!this.config.list || this.config.list.length < 2) {\n return\n }\n Util.addClass(this.root, 'show')\n }\n\n hide () {\n Util.removeClass(this.root, 'show')\n }\n\n getTextByLang (item, key, lang) {\n if (item === undefined) {\n return ''\n }\n const { list } = this.config\n !lang && (lang = this.player.lang)\n key = (!key || Util.isUndefined(item[key])) ? 'text' : key\n typeof item === 'number' && (item = list[item])\n try {\n if (typeof item[key] === 'object') {\n return item[key][lang] || item[key].zh\n } else {\n return item[key]\n }\n } catch (err) {\n console.warn(err)\n return ''\n }\n }\n\n onEnter (e) {\n e.preventDefault()\n e.stopPropagation()\n this.onToggle(true)\n }\n\n onLeave (e) {\n e.preventDefault()\n e.stopPropagation()\n this.isActive && this.onToggle(false)\n }\n\n // 状态切换\n onToggle (isActive) {\n if (isActive === this.isActive) return\n const { controls } = this.player\n const { listType } = this.config\n if (isActive) {\n listType === 'rightSide' ? controls.blur() : controls.focus()\n this.optionsList && this.optionsList.show()\n } else {\n listType === 'rightSide' ? controls.focus() : controls.unFocus()\n this.optionsList && this.optionsList.hide()\n }\n this.isActive = isActive\n }\n\n // 列表点击回调\n onItemClick (e, data) {\n e.preventDefault()\n e.stopPropagation()\n const { listType, list } = this.config;\n (IS_MOBILE || listType === 'rightSide') && this.onToggle(false)\n this.curIndex = data.to.index\n this.curItem = list[this.curIndex]\n this.changeCurrentText()\n }\n\n changeCurrentText () {\n const { list } = this.config\n const index = this.curIndex < list.length ? this.curIndex : 0\n const curItem = list[index]\n if (!curItem) return\n this.find('.icon-text').innerHTML = this.getTextByLang(curItem, 'iconText')\n }\n\n renderItemList (itemList, curIndex) {\n const { config, optionsList, player } = this\n if (typeof curIndex === 'number') {\n this.curIndex = curIndex\n this.curItem = config.list[curIndex]\n }\n\n if (optionsList) {\n optionsList.renderItemList(itemList)\n this.changeCurrentText()\n return\n }\n\n const options = {\n config: {\n data: itemList || [],\n className: config.listType === 'rightSide' ? 'right-side' : '',\n onItemClick: (e, data) => {\n this.onItemClick(e, data)\n }\n },\n root: config.listType === 'rightSide' ? player.root : this.root\n }\n\n this.optionsList = new OptionList(options)\n this.changeCurrentText()\n this.show()\n }\n\n destroy () {\n this.unbind(this.activeEvent, this.onToggle)\n this.unbind('mouseleave', this.onToggle)\n if (this.optionsList) {\n this.optionsList.destroy()\n this.optionsList = null\n }\n }\n\n render () {\n return `<xg-icon class=\"xg-options-icon ${this.config.className || ''}\">\n <div class=\"xgplayer-icon btn-text\">\n <span class=\"icon-text\"></span>\n </div>\n </xg-icon>`\n }\n}\n","import { Events, POSITIONS, Util } from '../../plugin'\nimport OptionsIcon from '../common/optionsIcon'\n/**\n * @typedef {{\n * text?: string,\n * definition?: any,\n * url: any,\n * text: string | {\n * [propName: string]: any\n * },\n * iconText: string | {\n * [propName: string]: any\n * }\n * }} IDefinition\n */\n\n/**\n * @typedef {{\n * position?: string,\n * index?: number,\n * list?: Array<IDefinition>,\n * defaultDefinition?: any,\n * disable?: any,\n * hidePortrait?: boolean,\n * className?: string\n * }} IDefinitionConfig\n */\nexport default class DefinitionIcon extends OptionsIcon {\n static get pluginName () {\n return 'definition'\n }\n\n /**\n * @type IDefinitionConfig\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 3,\n list: [],\n defaultDefinition: '',\n disable: false,\n hidePortrait: false, // Whether to hide in the vertical screen state of the mobile terminal\n className: 'xgplayer-definition'\n }\n }\n\n beforeCreate (args) {\n const { list } = args.config\n if (Array.isArray(list) && list.length > 0) {\n args.config.list = list.map(item => {\n if (!item.text && item.name) {\n item.text = item.name\n }\n if (!item.text) {\n item.text = item.definition\n }\n return item\n })\n }\n }\n\n constructor (args) {\n super(args)\n // 记录切换的时候的播放器状态\n this.curTime = 0\n this.isPaused = true\n }\n\n afterCreate () {\n super.afterCreate()\n this.on('resourceReady', (list) => {\n this.changeDefinitionList(list)\n })\n\n this.on(Events.DEFINITION_CHANGE, (data) => {\n this.renderItemList(data.to)\n })\n if (this.player.definitionList.length < 2) {\n this.hide()\n }\n }\n\n initDefinition () {\n const { list, defaultDefinition } = this.config\n if (list.length > 0) {\n let to = null\n list.map(item => {\n if (item.definition === defaultDefinition) {\n to = item\n }\n })\n if (!to) {\n to = list[0]\n }\n this.changeDefinition(to)\n }\n }\n\n renderItemList (to) {\n const { player } = this\n const { list } = this.config\n const currentSrc = to && to.url ? to.url : (player.currentSrc || player.src)\n const definition = to && to.definition ? to.definition : this.config.defaultDefinition\n if (to && !Array.isArray(to)) {\n list.forEach((item) => {\n item.selected = false\n })\n }\n let curIndex = 0\n const items = list.map((item, index) => {\n const showItem = {\n url: item.url,\n definition: item.definition || '',\n showText: this.getTextByLang(item) || item.definition,\n selected: false\n }\n if (item.selected || item.url === currentSrc || (!Util.isUndefined(item.definition) && item.definition === definition)) {\n showItem.selected = true\n curIndex = index\n }\n return showItem\n })\n super.renderItemList(items, curIndex)\n }\n\n // onCanplayChangeDefinition () {\n // const { player } = this\n // player.currentTime = this.curTime\n // if (!this.isPaused) {\n // const playPromise = player.play()\n // if (playPromise !== undefined && playPromise) {\n // // eslint-disable-next-line handle-callback-err\n // playPromise.catch(_err => {})\n // }\n // } else {\n // player.pause()\n // }\n // player.emit(Events.AFTER_DEFINITION_CHANGE)\n // }\n\n // onTimeupdateChangeDefinition () {\n // this.once('timeupdate', () => {\n // this.onCanplayChangeDefinition()\n // })\n // };\n\n // switchUrl (lastATag) {\n // const { player } = this\n // let curRUL = document.createElement('a');\n // ['mp4', 'hls', '__flv__', 'dash', 'hlsjs'].every(item => {\n // if (player[item]) {\n // if (player[item].url) {\n // curRUL.href = player[item].url\n // }\n // if (item === '__flv__') {\n // if (player[item]._options) {\n // curRUL.href = player[item]._options.url\n // } else {\n // curRUL.href = player[item]._mediaDataSource.url\n // }\n // }\n // if (item === 'hlsjs') {\n // curRUL.href = player[item].originUrl || player[item].url\n // }\n // return false\n // } else {\n // return true\n // }\n // })\n // if (lastATag && curRUL.href !== lastATag.url && !player.ended) {\n // player.switchURL(lastATag.url)\n // }\n // curRUL = null\n // }\n\n // 对外暴露 切换清晰度\n changeDefinitionList (list) {\n if (!Array.isArray(list)) {\n return\n }\n this.config.list = list.map(item => {\n if (!item.text && item.name) {\n item.text = item.name\n }\n if (!item.text) {\n item.text = item.definition\n }\n return item\n })\n this.renderItemList()\n this.config.list.length < 2 ? this.hide() : this.show()\n }\n\n changeDefinition (to, from) {\n const { player } = this\n if (player.switchURL) {\n player.switchUrl(to.url)\n } else {\n player.changeDefinition(to, from)\n }\n }\n\n onItemClick (e, data) {\n super.onItemClick(...arguments)\n // const { player } = this\n // const target = e.delegateTarget\n // const url = target.getAttribute('url')\n this.emitUserAction(e, 'change_definition', { from: data.from, to: data.to })\n // player.emit(Events.BEFORE_DEFINITION_CHANGE, url)\n this.player.changeDefinition(data.to, data.from)\n // player.emit(Events.DEFINITION_CHANGE, { from: data.from, to: data.to })\n }\n}\n","import { Events, POSITIONS } from '../../plugin'\nimport OptionsIcon from '../common/optionsIcon'\n\n/**\n * @typedef {{\n * position?: string,\n * index?: number,\n * list?: Array<number | { [propName: string]: any }>,\n * className?: string,\n * hidePortrait?: boolean,\n * [propName: string]: any\n * }} IPlaybackRateConfig\n */\n\nexport default class PlaybackRate extends OptionsIcon {\n static get pluginName () {\n return 'playbackRate'\n }\n\n /**\n * @type IPlaybackRateConfig\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 4,\n list: [2, 1.5, 1, 0.75, 0.5],\n className: 'xgplayer-playbackrate',\n hidePortrait: false\n }\n }\n\n constructor (args) {\n super(args)\n this.curRate = 1\n }\n\n beforeCreate (args) {\n const { playbackRate } = args.player.config\n const list = !playbackRate ? [] : Array.isArray(playbackRate) ? playbackRate : args.config.list\n if (Array.isArray(list)) {\n args.config.list = list.map(item => {\n if (typeof item === 'number') {\n item = {\n rate: item,\n text: `${item}x`\n }\n } else if (!item.text && item.rate) {\n item.text = `${item.rate}x`\n }\n return item\n })\n }\n }\n\n afterCreate () {\n super.afterCreate()\n this.on(Events.RATE_CHANGE, () => {\n if (this.curValue === this.player.playbackRate) {\n return\n }\n this.renderItemList()\n })\n this.renderItemList()\n }\n\n show () {\n if (!this.config.list || this.config.list.length === 0) {\n return\n }\n super.show()\n }\n\n onItemClick (e, data) {\n super.onItemClick(...arguments)\n const target = e.delegateTarget\n const rate = Number(target.getAttribute('rate'))\n if (!rate || rate === this.curValue) {\n return false\n }\n this.emitUserAction(e, 'change_rate', { props: 'playbackRate', from: this.player.playbackRate, to: rate })\n this.curValue = rate\n this.player.playbackRate = rate\n }\n\n renderItemList () {\n const playbackRate = this.player.playbackRate || 1\n this.curValue = playbackRate\n let curIndex = 0\n const items = this.config.list.map((item, index) => {\n const itemInfo = {\n rate: item.rate\n }\n if (itemInfo.rate === playbackRate) {\n itemInfo.selected = true\n curIndex = index\n }\n itemInfo.showText = this.getTextByLang(item)\n return itemInfo\n })\n super.renderItemList(items, curIndex)\n }\n\n destroy () {\n super.destroy()\n }\n}\n","import Plugin, { Events, POSITIONS } from '../../plugin'\nimport CssFullSceenSvg from '../assets/requestCssFull.svg'\nimport ExitCssFullSceenSvg from '../assets/exitCssFull.svg'\n\n/**\n * @typedef { {\n * position: string,\n * index: number,\n * disable: boolean,\n * target: null | HTMLElement,\n * [propName: string]: any\n * } } ICssConfig\n */\n\nexport default class CssFullScreen extends Plugin {\n static get pluginName () {\n return 'cssFullscreen'\n }\n\n /**\n * @type ICssConfig\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 1,\n disable: false,\n target: null\n }\n }\n\n afterCreate () {\n if (this.config.disable) {\n return\n }\n\n if (this.config.target) {\n this.playerConfig.fullscreenTarget = this.config.target\n }\n\n this.initIcons()\n this.on(Events.CSS_FULLSCREEN_CHANGE, (isCssfullScreen) => {\n this.animate(isCssfullScreen)\n })\n this.btnClick = this.btnClick.bind(this)\n this.bind(['click', 'touchend'], this.btnClick)\n }\n\n initIcons () {\n const { icons } = this\n const contentIcon = this.find('.xgplayer-icon')\n contentIcon.appendChild(icons.cssFullscreen)\n contentIcon.appendChild(icons.exitCssFullscreen)\n }\n\n btnClick (e) {\n e.preventDefault()\n e.stopPropagation()\n const { isCssfullScreen } = this.player\n this.emitUserAction(e, 'switch_css_fullscreen', {\n prop: 'cssfullscreen',\n from: isCssfullScreen,\n to: !isCssfullScreen\n })\n if (!isCssfullScreen) {\n this.player.getCssFullscreen()\n } else {\n this.player.exitCssFullscreen()\n }\n }\n\n animate (isFullScreen) {\n if (!this.root) {\n return\n }\n isFullScreen ? this.setAttr('data-state', 'full') : this.setAttr('data-state', 'normal')\n this.switchTips(isFullScreen)\n }\n\n switchTips (isFullScreen) {\n const { i18nKeys } = this\n this.changeLangTextKey(this.find('.xg-tips'), isFullScreen ? i18nKeys.EXITCSSFULLSCREEN_TIPS : i18nKeys.CSSFULLSCREEN_TIPS)\n }\n\n registerIcons () {\n return {\n cssFullscreen: { icon: CssFullSceenSvg, class: 'xg-get-cssfull' },\n exitCssFullscreen: { icon: ExitCssFullSceenSvg, class: 'xg-exit-cssfull' }\n }\n }\n\n destroy () {\n this.unbind(['click', 'touchend'], this.btnClick)\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n return `<xg-icon class='xgplayer-cssfullscreen'>\n <div class=\"xgplayer-icon\">\n </div>\n <div class=\"xg-tips\" lang-key=\"${this.i18nKeys.EXITCSSFULLSCREEN_TIPS}\">${this.i18n.CSSFULLSCREEN_TIPS}</div>\n </xg-icon>`\n }\n}\n","import Plugin, { Events, Util } from '../../plugin'\n\nexport default class ErrorPlugin extends Plugin {\n static get pluginName () {\n return 'error'\n }\n\n afterCreate () {\n this.clickHandler = this.hook('errorRetry', this.errorRetry, {\n pre: (e) => {\n e.preventDefault()\n e.stopPropagation()\n }\n })\n\n this.onError = this.hook('showError', this.handleError)\n\n this.bind('.xgplayer-error-refresh', 'click', this.clickHandler)\n this.on(Events.CANPLAY, () => {\n this.handleCanPlay()\n })\n\n this.on(Events.ERROR, (error) => {\n this.onError(error)\n })\n }\n\n errorRetry () {\n this.player.retry()\n }\n\n handleCanPlay () {\n Util.removeClass(this.player.root, 'xgplayer-is-error')\n }\n\n handleError (error = {}) {\n const { player } = this\n const type = error.errorType\n let errorNote = player.errorNote ? this.i18n[player.errorNote] : ''\n if (!errorNote) {\n switch (type) {\n case 'decoder':\n errorNote = this.i18n.MEDIA_ERR_DECODE\n break\n case 'network':\n errorNote = this.i18n.MEDIA_ERR_NETWORK\n break\n default:\n errorNote = this.i18n.MEDIA_ERR_SRC_NOT_SUPPORTED\n }\n }\n this.find('.xgplayer-error-text').innerHTML = errorNote\n this.find('.xgplayer-error-tips').innerHTML = `${this.i18n.REFRESH_TIPS}<span class=\"xgplayer-error-refresh\">${this.i18n.REFRESH}</span>`\n }\n\n destroy () {\n this.unbind('.xgplayer-error-refresh', 'click', this.clickHandler)\n }\n\n render () {\n return `<xg-error class=\"xgplayer-error\">\n <div class=\"xgplayer-errornote\">\n <span class=\"xgplayer-error-text\"></span>\n <span class=\"xgplayer-error-tips\"><em class=\"xgplayer-error-refresh\"></em></span>\n </div>\n </xg-error>`\n }\n}\n","import Plugin, { STATE_CLASS, Util } from '../../plugin'\n\n/**\n * 消息组件\n */\nclass Prompt extends Plugin {\n static get pluginName () {\n return 'prompt'\n }\n\n static get defaultConfig () {\n return {\n interval: 3000,\n style: {},\n mode: 'arrow',\n autoHide: true,\n detail: {\n text: '',\n highlight: ''\n },\n onClick: () => {\n }\n }\n }\n\n afterCreate () {\n this.intervalId = 0\n this.customConfig = null\n this.bind('.highlight', ['click', 'touchend'], (e) => {\n if (this.config.onClick || this.customOnClick) {\n e.preventDefault()\n e.stopPropagation()\n this.customOnClick ? this.customOnClick(e) : this.config.onClick(e)\n }\n })\n\n this.player.showPrompt = (...args) => {\n this.show(...args)\n }\n\n this.player.hidePrompt = () => {\n this.hide()\n }\n }\n\n setStyle (style) {\n Object.keys(style).map(key => {\n this.root.style[key] = style[key]\n })\n }\n\n show (detail, config = {}, onClick = () => {}) {\n if (!detail) {\n return\n }\n this.customOnClick = onClick\n const { interval } = this.config\n if (this.intervalId) {\n clearTimeout(this.intervalId)\n this.intervalId = null\n }\n Util.addClass(this.root, 'show')\n config.mode === 'arrow' && Util.addClass(this.root, 'arrow')\n if (typeof detail === 'string') {\n this.find('.xgplayer-prompt-detail').innerHTML = detail\n } else {\n this.find('.xgplayer-prompt-detail').innerHTML = `${detail.text || ''}` + `${detail.highlight ? `<i class=\"highlight\">${detail.highlight}</i>` : ''}`\n }\n\n config.style && this.setStyle(config.style)\n\n const autoHide = typeof config.autoHide === 'boolean' ? config.autoHide : this.config.autoHide\n if (autoHide) {\n const hideinterval = config.interval || interval\n this.intervalId = setTimeout(() => {\n this.hide()\n }, hideinterval)\n }\n }\n\n hide () {\n Util.removeClass(this.root, 'show')\n Util.removeClass(this.root, 'arrow')\n this.root.removeAttribute('style')\n this.customOnClick = null\n }\n\n render () {\n return `<xg-prompt class=\"xgplayer-prompt ${STATE_CLASS.CONTROLS_FOLLOW}\">\n <span class=\"xgplayer-prompt-detail\"></span>\n </xg-prompt>`\n }\n}\n\nexport default Prompt\n","import { Util, Events } from '../../plugin'\n\nconst ISPOT = {\n time: 0, // 进度条在此时间戳打点 单位为s\n text: '', // 打点处的自定义文案\n id: 1, // 标记唯一标识,用于删除的时候索引\n duration: 1, // 进度条标识点的时长 默认1s【可选】单位为s\n color: '#fff', // 进度条标识点的显示颜色【可选】\n style: {}, // 指定样式\n width: 6,\n height: 6\n}\n\nfunction mergeISPOT (iSpot) {\n Object.keys(ISPOT).map(key => {\n if (iSpot[key] === undefined) {\n iSpot[key] = ISPOT[key]\n }\n })\n}\n\nconst APIS = {\n initDots () {\n this._ispots.map(item => {\n this.createDot(item, false)\n })\n this._ispotsInit = true\n },\n /**\n * 创建一个故事点\n * @param { object } iSpot\n * @param { boolean } isNew\n */\n createDot (iSpot, isNew = true) {\n const { progress } = this.player.plugins\n if (!progress) {\n return\n }\n if (isNew) {\n mergeISPOT(iSpot)\n this._ispots.push(iSpot)\n }\n if (!this._ispotsInit && isNew) {\n return\n }\n const ret = this.calcuPosition(iSpot.time, iSpot.duration)\n const style = iSpot.style || {}\n style.left = `${ret.left}%`\n style.width = `${ret.width}%`\n let className = `xgspot_${iSpot.id} xgplayer-spot`\n ret.isMini && (className += ' mini')\n const dotDom = Util.createDom('xg-spot', '', {\n 'data-text': iSpot.text,\n 'data-time': iSpot.time,\n 'data-id': iSpot.id\n }, className)\n Object.keys(style).map(key => {\n dotDom.style[key] = style[key]\n })\n progress.outer && progress.outer.appendChild(dotDom)\n },\n\n /**\n * 根据id查找节点\n * @param {string} id\n */\n findDot (id) {\n if (!this.player.plugins.progress) {\n return\n }\n const ret = this._ispots.filter((cur, index) => {\n return cur.id === id\n })\n return ret.length > 0 ? ret[0] : null\n },\n\n /**\n * 更新故事点\n * @param {any} iSpot\n * @param {boolean} needShow\n */\n updateDot (iSpot, needShow = false) {\n const { progress } = this.player.plugins\n if (!progress) {\n return\n }\n const dot = this.findDot(iSpot.id)\n if (dot) {\n Object.keys(iSpot).map(key => {\n dot[key] = iSpot[key]\n })\n }\n if (!this._ispotsInit) {\n return\n }\n const dotDom = progress.find(`xg-spot[data-id=\"${iSpot.id}\"]`)\n if (!dotDom) {\n return\n }\n const ret = this.calcuPosition(iSpot.time, iSpot.duration)\n const style = iSpot.style || {}\n style.left = `${ret.left}%`\n style.width = `${ret.width}%`\n dotDom.setAttribute('data-text', iSpot.text)\n dotDom.setAttribute('data-time', iSpot.time)\n if (ret.isMini) {\n Util.addClass(dotDom, 'mini')\n } else {\n Util.removeClass(dotDom, 'mini')\n }\n Object.keys(style).map(key => {\n dotDom.style[key] = style[key]\n })\n if (needShow) {\n this.showDot(iSpot.id)\n }\n },\n\n /**\n * 删除某个故事点\n * @param {string | number } id\n */\n deleteDot (id) {\n const { _ispots } = this\n const { progress } = this.player.plugins\n if (!progress) {\n return\n }\n const del = []\n for (let i = 0; i < _ispots.length; i++) {\n if (_ispots[i].id === id) {\n del.push(i)\n }\n }\n const len = del.length\n for (let i = len - 1; i >= 0; i--) {\n _ispots.splice(del[i], 1)\n if (this._ispotsInit) {\n const dotDom = progress.find(`xg-spot[data-id=\"${id}\"]`)\n dotDom && dotDom.parentElement.removeChild(dotDom)\n }\n }\n },\n\n /**\n * 移除所有的故事点\n */\n deleteAllDots () {\n const { progress } = this.player.plugins\n if (!progress) {\n return\n }\n if (!this._ispotsInit) {\n this._ispots = []\n return\n }\n const dotDoms = progress.root.getElementsByTagName('xg-spot')\n for (let i = dotDoms.length - 1; i >= 0; i--) {\n progress.outer.removeChild(dotDoms[i])\n }\n this._ispots = []\n },\n /**\n * 批量全部更新当前故事点\n * @param {Array} iSpots\n */\n updateAllDots (iSpots = []) {\n const { progress } = this.player.plugins\n if (!progress) {\n return\n }\n if (!this._ispotsInit) {\n this._ispots = iSpots\n return\n }\n this._ispots = []\n const dotDoms = progress.root.getElementsByTagName('xg-spot')\n const len = dotDoms.length\n if (len > iSpots.length) {\n for (let i = len - 1; i > iSpots.length - 1; i--) {\n progress.outer.removeChild(dotDoms[i])\n }\n }\n iSpots.map((ispot, index) => {\n if (index < len) {\n dotDoms[index].setAttribute('data-id', `${ispot.id}`)\n this._ispots.push(ispot)\n this.updateDot(ispot)\n } else {\n this.createDot(ispot)\n }\n })\n }\n}\n\nexport default function initDotsAPI (plugin) {\n const { config, player } = plugin\n Object.keys(APIS).map(item => {\n plugin[item] = APIS[item].bind(plugin)\n })\n const ispots = player.config.progressDot || config.ispots || []\n plugin._ispots = ispots.map(item => {\n mergeISPOT(item)\n return item\n })\n plugin._ispotsInit = false\n player.once(Events.DURATION_CHANGE, () => {\n plugin.initDots()\n })\n}\n","import Plugin, { Util, Sniffer } from '../../plugin'\nimport initDotsAPI from './dotsApi'\n/**\n * @typedef {{\n * miniWidth?: number, // 故事点显示最小宽度\n * ispots?: Array<{ //故事点列表\n * time?: number, // 进度条在此时间戳打点 单位为s\n * text?: string, // 打点处的自定义文案\n * id?: number | string, // 标记唯一标识,用于删除的时候索引\n * duration:? number, // 进度条标识点的时长 默认1s【可选】单位为s\n * color?: string, // 进度条标识点的显示颜色【可选】\n * style?: { [propName: string]: any }, // 指定样式\n * width?: number,\n * height?: number\n * }>,\n * defaultText?: '', // 故事点hover默认文案\n * isFocusDots?: true, //\n * isShowThumbnail?: true, // 是否显示预览图\n * isShowCoverPreview?: false, // 进度条拖动时是否显示播放区域预览图\n * mode?: 'short' | 'production', // short // production\n * [propName: string]: any\n * }} IProgressPreviewConfig\n */\n\nconst CALLBACK_MAP = {\n dragmove: 'onProgressMove',\n dragstart: 'onProgressDragStart',\n dragend: 'onProgressDragEnd'\n}\n\n/** */\nexport default class ProgressPreview extends Plugin {\n constructor (args) {\n super(args)\n this._ispots = []\n this.videoPreview = null\n this.videothumbnail = null\n this.thumbnail = null\n this._state = {\n now: 0,\n f: false\n }\n }\n\n static get pluginName () {\n return 'progresspreview'\n }\n\n /**\n * @type IProgressPreviewConfig\n */\n static get defaultConfig () {\n return {\n index: 1,\n miniWidth: 6, // 故事点显示最小宽度\n ispots: [], // 故事点列表\n defaultText: '', // 故事点hover默认文案\n isFocusDots: true, //\n isShowThumbnail: true, // 是否显示预览图\n isShowCoverPreview: false, // 进度条拖动时是否显示播放区域预览图\n mode: '' // short // production\n }\n }\n\n beforeCreate (args) {\n const progress = args.player.plugins.progress\n if (progress) {\n args.root = progress.root\n }\n }\n\n onPluginsReady () {\n const { player } = this\n if (!player.plugins.progress) {\n return\n }\n this.previewLine = this.find('.xg-spot-line')\n this.timePoint = this.find('.xgplayer-progress-point')\n this.timeText = this.find('.xg-spot-time')\n this.tipText = this.find('.spot-inner-text')\n\n this._hasThumnail = false\n\n this.registerThumbnail()\n initDotsAPI(this)\n\n this.bindEvents()\n }\n\n bindEvents () {\n const { progress } = this.player.plugins\n if (Sniffer.device === 'mobile' || !progress) {\n return\n }\n Object.keys(CALLBACK_MAP).map(key => {\n this[CALLBACK_MAP[key]] = this[CALLBACK_MAP[key]].bind(this)\n progress.addCallBack(key, this[CALLBACK_MAP[key]])\n })\n\n this.bind('.xg-spot-info', 'mousemove', this.onMousemove)\n\n this.bind('.xg-spot-info', 'mousedown', this.onMousedown)\n\n const fun = this.hook('previewClick', (...args) => {\n // console.log('args', args)\n })\n\n this.handlerPreviewClick = (e) => {\n e.stopPropagation()\n fun(parseInt(this._state.now * 1000, 10) / 1000, e)\n }\n\n this.bind('.xg-spot-content', 'mouseup', this.handlerPreviewClick)\n }\n\n onMousemove = (e) => {\n if (this._state.f || Util.hasClass(e.target, 'xg-spot-content')) {\n Util.event(e)\n e.stopPropagation()\n }\n }\n\n onMousedown = (e) => {\n if (this._state.f || Util.hasClass(e.target, 'xg-spot-content')) {\n Util.event(e)\n e.stopPropagation()\n }\n }\n\n onProgressMove (data) {\n this.updatePosition(data.offset, data.width, data.currentTime, data.e)\n }\n\n onProgressDragStart (data) {\n this.isDrag = true\n this.videoPreview && Util.addClass(this.videoPreview, 'show')\n }\n\n onProgressDragEnd (data) {\n this.isDrag = false\n this.videoPreview && Util.removeClass(this.videoPreview, 'show')\n }\n\n updateLinePos (offset, cwidth) {\n const { root, previewLine, timePoint, player } = this\n const { mode } = player.controls\n const isflex = mode === 'flex'\n const lwidth = root.getBoundingClientRect().width\n const tWidth = timePoint.getBoundingClientRect().width\n let x = offset - lwidth / 2\n let _t, _tt\n if (x < 0 && !isflex) {\n x = 0\n _t = offset - lwidth / 2\n !this.thumbnail && (_tt = offset - lwidth / 2 - tWidth / 2)\n } else if (x > cwidth - lwidth && !isflex) {\n _t = x - (cwidth - lwidth)\n !this.thumbnail && (_tt = x - (cwidth - lwidth) - tWidth / 2)\n x = cwidth - lwidth\n } else {\n _t = 0\n !this.thumbnail && (_tt = -tWidth / 2)\n }\n _t !== undefined && (previewLine.style.transform = `translateX(${_t}px)`)\n _tt !== undefined && (timePoint.style.transform = `translateX(${_tt}px)`)\n root.style.transform = `translateX(${x}px)`\n }\n\n updateTimeText (timeStr) {\n const { timeText, timePoint } = this\n timeText.textContent = timeStr\n !this.thumbnail && (timePoint.textContent = timeStr)\n }\n\n updatePosition (offset, cwidth, time, e) {\n const { root, config, _state } = this\n if (!root) {\n return\n }\n\n this.updateLinePos(offset, cwidth)\n // let now = offset / cwidth * player.duration\n // now = now < 0 ? 0 : (now > player.duration ? player.duration : now)\n _state.now = time\n const timeStr = Util.format(time)\n if (e && e.target && Util.hasClass(e.target, 'xgplayer-spot')) {\n this.showTips(e.target.getAttribute('data-text'), false, timeStr)\n _state.f = true\n config.isFocusDots && _state.f && (_state.now = parseInt(e.target.getAttribute('data-time'), 10))\n } else if (config.defaultText) {\n _state.f = false\n this.showTips(config.defaultText, true, timeStr)\n } else {\n _state.f = false\n this.hideTips('')\n }\n this.updateTimeText(timeStr)\n this.updateThumbnails(_state.now)\n }\n\n updateThumbnails (time) {\n const { player, videoPreview } = this\n const { thumbnail } = player.plugins\n if (thumbnail && thumbnail.usable) {\n this.thumbnail && thumbnail.update(this.thumbnail, time, 160, 90)\n const rect = videoPreview && videoPreview.getBoundingClientRect()\n this.videothumbnail && thumbnail.update(this.videothumbnail, time, rect.width, rect.height)\n }\n }\n\n registerThumbnail (thumbnailConfig = {}) {\n if (Sniffer.device === 'mobile') {\n return\n }\n const { player, config } = this\n const thumbnail = player.getPlugin('thumbnail')\n if (thumbnail) {\n Object.keys(thumbnailConfig).map(key => {\n thumbnail.config[key] = thumbnailConfig[key]\n })\n }\n if (!thumbnail || !thumbnail.usable || !config.isShowThumbnail) {\n Util.addClass(this.root, 'short-line no-thumbnail')\n return\n } else {\n Util.removeClass(this.root, 'short-line no-thumbnail')\n }\n this._hasThumnail = true\n const tRoot = this.find('.xg-spot-thumbnail')\n this.thumbnail = thumbnail.createThumbnail(tRoot, 'progress-thumbnail')\n if (config.isShowCoverPreview) {\n this.videoPreview = Util.createDom('xg-video-preview', '', {}, 'xgvideo-preview')\n player.root.appendChild(this.videoPreview)\n this.videothumbnail = thumbnail.createThumbnail(this.videoPreview, 'xgvideo-thumbnail')\n }\n }\n\n calcuPosition (time, duration) {\n const { progress } = this.player.plugins\n const { player } = this\n const totalWidth = progress.root.getBoundingClientRect().width\n const widthPerSeconds = player.duration / totalWidth * 6\n const ret = {}\n if (time + duration > player.duration) {\n duration = player.duration - time\n }\n ret.left = time / player.duration * 100\n ret.width = duration / player.duration\n ret.isMini = widthPerSeconds > duration\n return {\n left: time / player.duration * 100,\n width: duration / player.duration * 100,\n isMini: duration < widthPerSeconds\n }\n }\n\n showDot (id) {\n const dot = this.findDot(id)\n if (dot) {\n const rect = this.root.getBoundingClientRect()\n const { width } = rect\n const offset = dot.time / this.player.duration * width\n this.updatePosition(offset, width, dot.time)\n }\n }\n\n showTips (text, isDefault, timeStr = '') {\n if (!text) {\n return\n }\n Util.addClass(this.root, 'no-timepoint')\n Util.addClass(this.find('.xg-spot-content'), 'show-text')\n if (isDefault && this.config.mode === 'production') {\n Util.addClass(this.root, 'product')\n this.tipText.textContent = text\n } else {\n Util.removeClass(this.root, 'product')\n this.tipText.textContent = this._hasThumnail ? text : `${timeStr} ${text}`\n }\n }\n\n hideTips () {\n Util.removeClass(this.root, 'no-timepoint')\n this.tipText.textContent = ''\n Util.removeClass(this.find('.xg-spot-content'), 'show-text')\n Util.removeClass(this.root, 'product')\n }\n\n destroy () {\n const { progress } = this.player.plugins\n progress && Object.keys(CALLBACK_MAP).map(key => {\n progress.removeCallBack(key, this[CALLBACK_MAP[key]])\n })\n this.videothumbnail = null\n this.thumbnail = null\n this.videoPreview && this.player.root.removeChild(this.videoPreview)\n this.unbind('.xg-spot-info', 'mousemove', this.onMousemove)\n this.unbind('.xg-spot-info', 'mousedown', this.onMousedown)\n this.unbind('.xg-spot-content', 'mouseup', this.handlerPreviewClick)\n }\n\n render () {\n if (Sniffer.device === 'mobile' || this.playerConfig.isMobileSimulateMode) {\n return ''\n }\n\n return `<div class=\"xg-spot-info ${this.config.mode === 'short' ? 'short-line' : ''}\">\n <div class=\"xg-spot-content\">\n <div class=\"xg-spot-thumbnail\">\n <span class=\"xg-spot-time\"></span>\n </div>\n <div class=\"xg-spot-text\"><span class=\"spot-inner-text\"></span></div>\n </div>\n <div class=\"xgplayer-progress-point\">00:00</div>\n <div class=\"xg-spot-line\"></div>\n </div>`\n }\n}\n","/* eslint-disable camelcase */\nimport BasePlugin, { Util } from '../../plugin'\n/**\n * @typedef {{\n * isShow?: boolean,\n * urls?: Array<string>, // 有多张大图就多个url\n * pic_num?: number, // 每张图含有几个雪碧图\n * col?: number, // 截图列数\n * row?: number, // 截图行数\n * height?: number, // 缩略图高度\n * width?: number, // 缩略图宽度\n * scale?: number, // 缩放\n * className?: string, // 额外添加在dom上的class\n * hidePortrait?: boolean, // 是否在竖屏的时候隐藏\n * [propName: string]: any\n * }} IThumbnailConfig\n */\nexport default class Thumbnail extends BasePlugin {\n static get pluginName () {\n return 'thumbnail'\n }\n\n /**\n * @type IThumbnailConfig\n */\n static get defaultConfig () {\n return {\n isShow: false,\n urls: [], // 有多张大图就多个url就好\n pic_num: 0, // 每张图含有几个雪碧图\n col: 0, // 截图列数\n row: 0, // 截图行数\n height: 90, // 缩略图高度\n width: 160, // 缩略图宽度\n scale: 1, // 缩放\n className: '', // 额外添加在dom上的class\n hidePortrait: false // 是否在竖屏的时候隐藏\n }\n }\n\n constructor (args) {\n super(args)\n this.ratio = 1\n this.interval = null\n this.preloadMark = {}\n }\n\n afterCreate () {\n if (this.usable) {\n this.initThumbnail()\n }\n }\n\n get usable () {\n const { urls, pic_num } = this.config\n return urls && urls.length > 0 && pic_num > 0\n }\n\n initThumbnail () {\n const { width, height, pic_num, interval } = this.config\n this.ratio = width / height * 100\n this.interval = interval || Math.round(this.player.duration / pic_num)\n this.preload(0)\n // this.preIndex = new Array(urls.length)\n // this.interval = interval || Math.round(this.player.duration / pic_num)\n // this.ratio = width / height * 100\n // className && Util.addClass(this.root, className)\n // hidePortrait && Util.addClass(this.root, 'portrait')\n // width && (this.root.style.width = `${width}px`)\n // height && (this.root.style.height = `${height}px`)\n // this.root.style.backgroundSize = `${width * col}px auto`\n }\n\n getUrlByIndex (index) {\n return index >= 0 && index < this.config.urls.length ? this.config.urls[index] : ''\n }\n\n preload (index) {\n const { urls } = this.config\n const len = urls.length\n const arr = [index - 1, index, index + 1, index + 2]\n arr.map(item => {\n if (!this.preloadMark[item] && item >= 0 && item < len) {\n Util.preloadImg(urls[item])\n this.preloadMark[item] = true\n }\n })\n }\n\n getPosition (now, containerWidth = 0, containerHeight = 0) {\n const { pic_num, row, col, width, height } = this.config\n this.interval = Math.round(this.player.duration / pic_num)\n let index = Math.ceil(now / this.interval) // 当前时间对应的图像索引\n index = index > pic_num ? pic_num : index\n const urlIndex = index < row * col ? 0 : (Math.ceil(index / (row * col)) - 1)// 当前图像所在的url索引\n const indexInPage = index - urlIndex * (col * row) // 当前图像在当前url中的索引\n const rowIndex = indexInPage > 0 ? Math.ceil(indexInPage / col) - 1 : 0// 当前图像在当前url中的行索引\n const colIndex = indexInPage > 0 ? indexInPage - rowIndex * col - 1 : 0 // 当前图像在当前url中的列索引\n let swidth = 0 // containerWidth || width\n let sHeight = 0 // swidth * height / width\n\n // 根据入参的宽高适配样式\n if (containerWidth && containerHeight) {\n const per = containerWidth / containerHeight\n if (per < width / height) {\n swidth = containerWidth\n sHeight = swidth / (width / height)\n } else {\n sHeight = containerHeight\n swidth = sHeight * (width / height)\n }\n } else {\n swidth = containerWidth || width\n sHeight = swidth / (width / height)\n }\n const url = this.getUrlByIndex(urlIndex)\n return {\n urlIndex,\n rowIndex,\n colIndex,\n url,\n height: sHeight,\n width: swidth,\n style: {\n backgroundImage: `url(${url})`,\n backgroundSize: `${swidth * col}px auto`,\n backgroundPosition: `-${colIndex * swidth}px -${rowIndex * sHeight}px`,\n width: `${swidth}px`,\n height: `${sHeight}px`\n }\n }\n }\n\n update (dom, now, containerWidth = 0, containerHeight = 0, customStyle = '') {\n const { pic_num, urls } = this.config\n if (pic_num <= 0 || !urls || urls.length === 0) {\n return\n }\n const pos = this.getPosition(now, containerWidth, containerHeight)\n this.preload(pos.urlIndex)\n\n Object.keys(pos.style).map((key) => {\n dom.style[key] = pos.style[key]\n })\n Object.keys(customStyle).map(key => {\n dom.style[key] = customStyle[key]\n })\n }\n\n createThumbnail (root, className) {\n const dom = Util.createDom('xg-thumbnail', '', {}, `thumbnail ${className}`)\n root && root.appendChild(dom)\n return dom\n }\n}\n","import Plugin from '../../plugin'\nclass MiniProgress extends Plugin {\n static get pluginName () {\n return 'MiniProgress'\n }\n\n static get defaultConfig () {\n return {}\n }\n\n afterCreate () {\n }\n\n update (data = { cached: 0, played: 0 }, duration) {\n if (!duration || !this.root) {\n return\n }\n if (data.cached) {\n this.find('xg-mini-progress-cache').style.width = `${data.cached / duration * 100}%`\n }\n if (data.played) {\n this.find('xg-mini-progress-played').style.width = `${data.played / duration * 100}%`\n }\n }\n\n render () {\n if (!this.playerConfig.progress || !this.playerConfig.miniprogress) {\n return\n }\n return `<xg-mini-progress class=\"xg-mini-progress\">\n <xg-mini-progress-cache class=\"xg-mini-progress-cache\"></xg-mini-progress-cache>\n <xg-mini-progress-played class=\"xg-mini-progress-played\"></xg-mini-progress-played>\n </xg-mini-progress>`\n }\n}\n\nexport default MiniProgress\n","import Plugin, { Events, Util, Sniffer } from '../../plugin'\nimport XG_DEBUG from '../../utils/debug'\n\nconst MODES = {\n REAL_TIME: 'realtime',\n FIRST_FRAME: 'firstframe',\n FRAME_RATE: 'framerate'\n}\n\nfunction nowTime () {\n try {\n return window.performance.now()\n } catch (e) {\n return new Date().getTime()\n }\n}\n/**\n * Check whether the current video object supports screenshots\n * @param { VideoElement } video\n * @returns\n */\nfunction checkVideoIsSupport (video) {\n if (Sniffer.browser === 'safari' && (/^blob/.test(video.currentSrc) || /^blob/.test(video.src))) {\n return false\n }\n\n return true\n}\n\n/**\n * Check whether the current environment supports canvas\n * @returns { Boolean }\n */\nfunction checkIsSupportCanvas () {\n try {\n const ctx = document.createElement('canvas').getContext\n if (ctx) {\n return true\n }\n return false\n } catch (e) {\n return false\n }\n}\n\n/**\n * @typedef { {\n * disable?: boolean,\n * mode?: \"realtime\" | \"firstframe\" | \"framerate\",\n * frameRate?: number\n * filter?: string,\n * addMask?: boolean,\n * maskBg?: string,\n * [propName: string]: any\n * } } IDynamicBgConfig\n */\n\nlet isSupportCanvas = null\nclass DynamicBg extends Plugin {\n static get pluginName () {\n return 'dynamicBg'\n }\n\n /**\n * @type IDynamicBgConfig\n */\n static get defaultConfig () {\n return {\n isInnerRender: false,\n disable: true,\n /**\n * Rendering method\n * realtime - Realtime rendering\n * firstframe - Render only the first frame\n * framerate - Render by frame\n */\n mode: 'framerate',\n frameRate: 10, // Frame rate when mode=framerate\n filter: 'blur(50px)', // Filter settings\n addMask: true, // Whether need a mask\n maskBg: 'rgba(0,0,0,0.7)' // Mask background color\n }\n }\n\n /**\n * @type {boolean}\n * @description Does the current environment support Canvas\n */\n static get isSupport () {\n if (typeof isSupportCanvas === 'boolean') {\n return isSupportCanvas\n }\n isSupportCanvas = checkIsSupportCanvas()\n return isSupportCanvas\n }\n\n static supportCanvasFilter () {\n return !(Sniffer.browser === 'safari' || Sniffer.browser === 'firefox')\n }\n\n afterCreate () {\n if (this.playerConfig.dynamicBg === true) {\n this.config.disable = false\n }\n if (!DynamicBg.isSupport) {\n this.config.disable = true\n }\n const { disable, mode } = this.config\n if (disable) {\n return\n }\n /**\n * @private\n */\n this._pos = {\n width: 0,\n height: 0,\n rwidth: 0,\n rheight: 0,\n x: 0,\n y: 0\n }\n /**\n * @readonly\n */\n this.isStart = false\n /**\n * @readonly\n */\n this.videoPI = 0\n /**\n * @readonly\n */\n this.preTime = 0\n /**\n * @readonly\n */\n this.interval = parseInt(1000 / this.config.frameRate, 10)\n\n /**\n * @readonly\n */\n this.canvas = null\n /**\n * @readonly\n */\n this.canvasCtx = null\n\n this.once(Events.COMPLETE, () => {\n this.init()\n !this.player.paused && this.start()\n })\n\n this.once(Events.LOADED_DATA, this.onLoadedData)\n this.on(Events.URL_CHANGE, () => {\n this.once(Events.LOADED_DATA, this.onLoadedData)\n })\n if (mode !== MODES.FIRST_FRAME) {\n this.on(Events.PLAY, () => {\n this.start()\n })\n this.on(Events.PAUSE, () => {\n this.stop()\n })\n }\n\n // First frame rendering\n if (mode === MODES.FIRST_FRAME) {\n this.once(Events.TIME_UPDATE, () => {\n const { video } = this.player\n video && checkVideoIsSupport(video) && video.videoWidth && this.update(video, video.videoWidth, video.videoHeight)\n })\n }\n }\n\n onLoadedData = () => {\n const { video } = this.player\n this.videoPI = parseInt(video.videoWidth / video.videoHeight * 100, 10)\n }\n\n /**\n * @private\n */\n init () {\n const { player, config } = this\n this.canvasFilter = DynamicBg.supportCanvasFilter()\n console.log('canvasFilter', this.canvasFilter)\n try {\n // 保证节点插入到video之前\n const parent = !this.config.isInnerRender ? player.root : (player.innerContainer || player.root)\n parent.insertAdjacentHTML('afterbegin',\n `<div class=\"xgplayer-dynamic-bg\"><canvas>\n </canvas><xgmask></xgmask></div>`)\n this.root = parent.children[0]\n this.canvas = this.find('canvas')\n // safari中canvas filter不生效\n if (!this.canvasFilter) {\n this.canvas.style.filter = config.filter\n this.canvas.style.webkitFilter = config.filter\n }\n this.mask = this.find('xgmask')\n config.addMask && (this.mask.style.background = config.maskBg)\n this.canvasCtx = this.canvas.getContext('2d')\n const { poster } = this.playerConfig\n if (poster) {\n const url = Util.typeOf(poster) === 'String' ? poster : (Util.typeOf(poster.poster) === 'String' ? poster.poster : null)\n this.updateImg(url)\n }\n } catch (e) {\n XG_DEBUG.logError('plugin:DynamicBg', e)\n }\n }\n\n start = () => {\n const { video } = this.player\n const _now = nowTime()\n if (!checkVideoIsSupport(video) || !this.canvasCtx) {\n return\n }\n this.stop()\n if (this.config.mode === MODES.REAL_TIME) {\n video && video.videoWidth && this.update(video, video.videoWidth, video.videoHeight)\n this.preTime = _now\n } else if (_now - this.preTime >= this.interval) {\n video && video.videoWidth && this.update(video, video.videoWidth, video.videoHeight)\n this.preTime = _now\n }\n this.frameId = Util.requestAnimationFrame(this.start)\n }\n\n stop = () => {\n if (this.frameId) {\n Util.cancelAnimationFrame(this.frameId)\n this.frameId = null\n }\n }\n\n updateImg (url) {\n if (!url) {\n return\n }\n // Render using the image\n const { width, height } = this.canvas.getBoundingClientRect()\n let image = new window.Image()\n image.onload = () => {\n if (!this.canvas) {\n return\n }\n this.canvas.height = height\n this.canvas.width = width\n this.update(image, image.width, image.height)\n image = null\n }\n image.src = url\n }\n\n update (video, videoWidth, videoHeight) {\n if (!this.canvas || !this.canvasCtx) {\n return\n }\n try {\n const { _pos, config } = this\n const { width, height } = this.canvas.getBoundingClientRect()\n this.videoPI = parseInt(videoWidth / videoHeight * 100, 10)\n if (width !== _pos.width || height !== _pos.height) {\n const pi = parseInt(width / height * 100, 10)\n _pos.width = this.canvas.width = width\n _pos.height = this.canvas.height = height\n let rheight = height\n let rwidth = width\n if (pi < this.videoPI) {\n rwidth = parseInt(height * this.videoPI / 100, 10)\n } else if (pi > this.videoPI) {\n rheight = parseInt(width * 100 / this.videoPI, 10)\n }\n if (pi < this.videoPI) {\n rwidth = parseInt(height * this.videoPI / 100, 10)\n } else if (pi > this.videoPI) {\n rheight = parseInt(width * 100 / this.videoPI, 10)\n }\n _pos.rwidth = rwidth * 1.2\n _pos.rheight = rheight * 1.2\n _pos.x = (width - _pos.rwidth) / 2\n _pos.y = (height - _pos.rheight) / 2\n }\n // console.log(`x:${_pos.x} y:${_pos.y} rwidth:${_pos.rwidth} rheight:${ _pos.rheight}`)\n this.canvasFilter && (this.canvasCtx.filter = config.filter)\n this.canvasCtx.drawImage(video, _pos.x, _pos.y, _pos.rwidth, _pos.rheight)\n } catch (e) {\n XG_DEBUG.logError('plugin:DynamicBg', e)\n }\n }\n\n destroy () {\n this.stop()\n this.canvasCtx = null\n this.canvas = null\n }\n\n render () {\n return ''\n }\n}\n\nexport default DynamicBg\n","export default {\n LANG: 'zh-cn',\n TEXT: {\n ERROR_TYPES: {\n network: {\n code: 1,\n msg: '视频下载错误'\n },\n mse: {\n code: 2,\n msg: '流追加错误'\n },\n parse: {\n code: 3,\n msg: '解析错误'\n },\n format: {\n code: 4,\n msg: '格式错误'\n },\n decoder: {\n code: 5,\n msg: '解码错误'\n },\n runtime: {\n code: 6,\n msg: '语法错误'\n },\n timeout: {\n code: 7,\n msg: '播放超时'\n },\n other: {\n code: 8,\n msg: '其他错误'\n }\n },\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 SCREENSHOT: '截图',\n LIVE: '正在直播',\n OFF: '关闭',\n OPEN: '开启',\n MINI_DRAG: '点击按住可拖动视频',\n MINISCREEN: '小屏幕',\n REFRESH_TIPS: '请试试',\n REFRESH: '刷新',\n FORWARD: '快进中',\n LIVE_TIP: '直播'\n }\n}\n","import Player from './player'\nimport Plugin from './plugin/plugin'\nimport BasePlugin from './plugin/basePlugin'\nimport * as Events from './events'\nimport STATE_CLASS from './stateClassMap'\nimport I18N from './lang/i18n'\nimport Errors from './error'\nimport Sniffer from './utils/sniffer'\nimport Util from './utils/util'\n\nimport defaultPreset from './presets/default'\n\nclass PresetPlayer extends Player {\n static defaultPreset = defaultPreset;\n static Util = Util;\n static Sniffer = Sniffer\n static Errors = Errors\n static Events = Events\n static Plugin = Plugin\n static BasePlugin = BasePlugin\n static I18N = I18N\n static STATE_CLASS = STATE_CLASS\n}\n\nexport default PresetPlayer\n","import sniffer from '../utils/sniffer'\n// import Danmu from '../plugins/danmu'\nimport Xglogger from '../plugins/logger'\nimport Replay from '../plugins/replay'\nimport Poster from '../plugins/poster'\nimport Start from '../plugins/start'\nimport Enter from '../plugins/enter'\nimport Miniscreen from '../plugins/miniScreen'\nimport PC from '../plugins/pc'\nimport Mobile from '../plugins/mobile'\nimport Keyboard from '../plugins/keyboard'\nimport Loading from '../plugins/loading'\nimport Progress from '../plugins/progress'\nimport PlayIcon from '../plugins/play'\nimport FullScreen from '../plugins/fullscreen'\nimport TimeIcon from '../plugins/time'\nimport Volume from '../plugins/volume'\nimport RotateIcon from '../plugins/rotate'\nimport PIPIcon from '../plugins/pip'\nimport PlayNextIcon from '../plugins/playNext'\nimport DownLoadIcon from '../plugins/download'\nimport ScreenShotIcon from '../plugins/screenShot'\nimport DefinitionIcon from '../plugins/definition'\nimport PlaybackRateIcon from '../plugins/playbackRate'\nimport CssFullScreen from '../plugins/cssFullScreen'\nimport Error from '../plugins/error'\nimport Prompt from '../plugins/prompt'\nimport ProgressPreview from '../plugins/progressPreview'\nimport Thumbnail from '../plugins/common/thumbnail'\nimport MiniProgress from '../plugins/progress/miniProgress'\nimport DynamicBg from '../plugins/dynamicBg'\nimport ZH from '../lang/zh-cn'\n\nexport default class DefaultPreset {\n constructor (options, playerConfig) {\n const simulateMode = playerConfig && playerConfig.isMobileSimulateMode\n const { isLive } = playerConfig\n const vodPlugins = isLive ? [] : [Progress, MiniProgress, ProgressPreview, TimeIcon]\n\n const contolsIcons = [...vodPlugins, PlayIcon, FullScreen,\n RotateIcon, PlayNextIcon, DefinitionIcon, PlaybackRateIcon, DownLoadIcon, ScreenShotIcon, Volume, PIPIcon]\n\n const layers = [Replay, Poster, Start, Loading, Enter, Error, Prompt, Thumbnail, Miniscreen]\n\n this.plugins = [Xglogger, ...contolsIcons, ...layers]\n const mode = simulateMode ? 'mobile' : sniffer.device\n switch (mode) {\n case 'pc':\n this.plugins.push(...[Keyboard, PC, CssFullScreen])\n break\n case 'mobile':\n this.plugins.push(...[Mobile])\n break\n default:\n this.plugins.push(...[Keyboard, PC, CssFullScreen])\n }\n if (sniffer.os.isIpad || mode === 'pc') {\n this.plugins.push(DynamicBg)\n }\n if (sniffer.os.isIpad) {\n this.plugins.push(PC)\n }\n this.ignores = []\n this.i18n = [ZH]\n }\n}\n"],"names":["check","it","Math","global","globalThis","window","self","this","Function","fails","exec","error","descriptors","require$$0","Object","defineProperty","get","$propertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","NASHORN_BUG","call","V","descriptor","enumerable","match","version","createPropertyDescriptor","bitmap","value","configurable","writable","toString","classofRaw","slice","classof","require$$1","split","indexedObject","requireObjectCoercible","undefined","TypeError","IndexedObject","toIndexedObject","isObject","aFunction","variable","getBuiltIn","namespace","method","arguments","length","engineUserAgent","userAgent","process","Deno","versions","v8","engineV8Version","V8_VERSION","nativeSymbol","getOwnPropertySymbols","symbol","Symbol","String","sham","useSymbolAsUid","iterator","isSymbol","$Symbol","setGlobal","key","SHARED","sharedStore","store","sharedModule","push","mode","copyright","toObject","argument","hasOwnProperty","has","hasOwn","id","postfix","random","uid","shared","require$$2","require$$3","NATIVE_SYMBOL","require$$4","USE_SYMBOL_AS_UID","require$$5","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","wellKnownSymbol","name","ordinaryToPrimitive","input","pref","fn","val","valueOf","TO_PRIMITIVE","toPrimitive","result","exoticToPrim","toPropertyKey","document","EXISTS","createElement","documentCreateElement","ie8DomDefine","a","DESCRIPTORS","propertyIsEnumerableModule","IE8_DOM_DEFINE","require$$6","$getOwnPropertyDescriptor","O","P","f","anObject","$defineProperty","Attributes","definePropertyModule","createNonEnumerableProperty","object","functionToString","inspectSource","set","WeakMap","nativeWeakMap","test","keys","sharedKey","hiddenKeys","NATIVE_WEAK_MAP","objectHas","require$$7","OBJECT_ALREADY_INITIALIZED","state","wmget","wmhas","wmset","metadata","facade","STATE","internalState","enforce","getterFor","TYPE","type","getInternalState","enforceInternalState","TEMPLATE","redefineModule","options","unsafe","simple","noTargetGet","source","join","prototype","ceil","floor","toInteger","isNaN","min","toLength","max","toAbsoluteIndex","index","integer","createMethod","IS_INCLUDES","$this","el","fromIndex","arrayIncludes","includes","indexOf","objectKeysInternal","names","i","enumBugKeys","internalObjectKeys","concat","getOwnPropertyNames","activeXDocument","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","ownKeys","getOwnPropertyDescriptorModule","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","replace","toLowerCase","isForced_1","redefine","copyConstructorProperties","target","_export","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","forced","objectKeys","objectDefineProperties","defineProperties","Properties","html","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","domain","style","display","appendChild","src","contentWindow","open","F","objectCreate","create","factories","construct","C","argsLength","args","list","functionBind","bind","that","partArgs","boundFunction","apply","$","nativeConstruct","NEW_TARGET_BUG","ARGS_BUG","FORCED","_classCallCheck","instance","Constructor","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_inherits","subClass","superClass","constructor","_typeof","obj","_assertThisInitialized","ReferenceError","_possibleConstructorReturn","assertThisInitialized","_getPrototypeOf","getPrototypeOf","_defineProperty","Target","newTarget","$args","proto","isArray","Array","arg","$getOwnPropertyNames","windowNames","getWindowNames","path","wrappedWellKnownSymbolModule","TO_STRING_TAG","setToStringTag","TAG","functionBindContext","b","c","SPECIES","arraySpeciesConstructor","originalArray","arraySpeciesCreate","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","callbackfn","specificCreate","arrayIteration","forEach","map","filter","some","every","find","findIndex","filterReject","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","$toString","require$$15","require$$16","nativeObjectCreate","require$$17","require$$18","require$$19","getOwnPropertyNamesExternal","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$29","require$$30","require$$31","require$$32","defineWellKnownSymbol","NAME","require$$34","InternalStateModule","require$$35","$forEach","require$$36","HIDDEN","require$$28","SYMBOL","setInternalState","ObjectPrototype","$stringify","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","wrap","tag","description","$defineProperties","properties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","setter","for","keyFor","sym","useSetter","useSimple","stringify","replacer","space","$replacer","FAILS_ON_PRIMITIVES","createProperty","propertyKey","_defineProperties","props","_createClass","protoProps","staticProps","_get","property","receiver","Reflect","base","superPropBase","desc","getOwnPropertyDescriptors","arrayMethodHasSpeciesSupport","METHOD_NAME","array","foo","Boolean","$map","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","k","len","E","A","n","nativeKeys","HAS_SPECIES_SUPPORT","nativeSlice","start","end","fin","domIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","arrayMethodIsStrict","DOMIterables","COLLECTION_NAME","Collection","CollectionPrototype","regexpFlags","ignoreCase","multiline","dotAll","unicode","sticky","$RegExp","RegExp","re","lastIndex","regexpUnsupportedDotAll","flags","regexpUnsupportedNcg","groups","stickyHelpers","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","nativeExec","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","re1","re2","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","reCopy","group","str","raw","charsAdded","strCopy","charAt","regexpExec","RegExpPrototype","fixRegexpWellKnownSymbolLogic","KEY","SHAM","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","methods","nativeMethod","regexp","arg2","forceStringMethod","$exec","done","MATCH","isRegexp","isRegExp","speciesConstructor","defaultConstructor","S","CONVERT_TO_STRING","pos","first","second","position","size","charCodeAt","stringMultibyte","codeAt","advanceStringIndex","regexpExecAbstract","R","fixRegExpWellKnownSymbolLogic","callRegExpExec","arrayPush","MAX_UINT32","SPLIT","nativeSplit","maybeCallNative","internalSplit","separator","limit","lim","lastLength","output","lastLastIndex","separatorCopy","splitter","rx","res","unicodeMatching","q","e","z","originalExec","nativeJoin","ES3_STRINGS","STRICT_METHOD","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","splice","deleteCount","insertCount","actualDeleteCount","from","to","actualStart","argumentsLength","toStringTagSupport","TO_STRING_TAG_SUPPORT","CORRECT_ARGUMENTS","tryGet","callee","objectToString","nativePromiseConstructor","Promise","aPossiblePrototype","objectSetPrototypeOf","CORRECT_SETTER","setSpecies","CONSTRUCTOR_NAME","iterators","Iterators","ITERATOR","ArrayPrototype","isArrayIteratorMethod","getIteratorMethod","iteratorClose","returnMethod","Result","stopped","SAFE_CLOSING","called","iteratorWithReturn","next","return","location","defer","channel","port","engineIsIos","engineIsNode","IS_IOS","IS_NODE","setImmediate","clear","clearImmediate","MessageChannel","Dispatch","counter","queue","ONREADYSTATECHANGE","run","runner","listener","event","post","postMessage","protocol","host","nextTick","now","port2","port1","onmessage","addEventListener","importScripts","removeChild","setTimeout","flush","head","last","notify","toggle","node","promise","then","task","engineIsIosPebble","Pebble","engineIsWebosWebkit","macrotask","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","parent","exit","enter","resolve","createTextNode","observe","characterData","microtask","PromiseCapability","reject","$$resolve","$$reject","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","newPromiseCapability","engineIsBrowser","NativePromise","redefineAll","anInstance","iterate","iterable","unboundFunction","iterFn","step","AS_ENTRIES","IS_ITERATOR","INTERRUPTED","stop","condition","callFn","checkCorrectnessOfIteration","SKIP_CLOSING","ITERATION_SUPPORT","promiseResolve","x","promiseCapability","hostReportErrors","console","newPromiseCapabilityModule","perform","IS_BROWSER","PROMISE","getInternalPromiseState","NativePromisePrototype","PromiseConstructor","PromiseConstructorPrototype","newGenericPromiseCapability","DISPATCH_EVENT","createEvent","dispatchEvent","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","UNHANDLED_REJECTION","SUBCLASSING","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","INCORRECT_ITERATION","all","isThenable","isReject","notified","chain","reactions","ok","exited","reaction","handler","fail","rejection","onHandleUnhandled","onUnhandled","reason","initEvent","isUnhandled","emit","unwrap","internalReject","internalResolve","wrapper","executor","onFulfilled","onRejected","catch","r","capability","$promiseResolve","values","remaining","alreadyCalled","race","FunctionPrototype","FunctionPrototypeToString","nameRE","inheritIfRequired","dummy","Wrapper","NewTarget","NewTargetPrototype","whitespaces","whitespace","ltrim","rtrim","stringTrim","trim","NUMBER","NativeNumber","NumberPrototype","BROKEN_CLASSOF","toNumber","third","radix","maxCode","digits","code","NaN","parseInt","NumberWrapper","j","$filter","$assign","assign","B","alphabet","chr","T","prefix","Events","EE","context","once","addListener","emitter","evt","_events","_eventsCount","clearEvent","EventEmitter","eventNames","events","listeners","handlers","l","ee","listenerCount","a1","a2","a3","a4","a5","removeListener","on","removeAllListeners","off","prefixed","module","_arrayLikeToArray","arr","arr2","_toConsumableArray","arrayLikeToArray","arrayWithoutHoles","iter","iterableToArray","minLen","unsupportedIterableToArray","nonIterableSpread","regExpExec","nativeMatch","matcher","fullUnicode","matchStr","getFlags","NativeRegExp","IS_NCG","CORRECT_NEW","BASE_FORCED","RegExpWrapper","pattern","rawFlags","handled","thisIsRegExp","patternIsRegExp","flagsAreUndefined","rawPattern","named","brackets","ncg","groupid","groupname","SyntaxError","handleNCG","handleDotAll","proxy","TO_STRING","nativeToString","NOT_GENERIC","INCORRECT_NAME","rf","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","getSubstitution","matched","captures","namedCaptures","tailPos","m","symbols","ch","capture","REPLACE","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","_","UNSAFE_SUBSTITUTE","searchValue","replaceValue","functionalReplace","results","accumulatedResult","nextSourcePosition","replacerArgs","$trim","forcedStringTrimMethod","mergeSort","comparefn","middle","insertionSort","merge","element","left","right","llength","rlength","lindex","rindex","arraySort","firefox","engineFfVersion","engineIsIeOrEdge","webkit","engineWebkitVersion","internalSort","FF","IE_OR_EDGE","V8","WEBKIT","nativeSort","sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STABLE_SORT","fromCharCode","v","itemsLength","items","arrayLength","y","getSortCompare","XG_DEBUG_OPEN","href","STYLE","info","warn","XGTAG","XG_DEBUG","config","debug","logInfo","message","optionalParams","log","logWarn","logError","_fun","XgplayerTimeRange","bufferedList","util","checkIsIn","createDom","tpl","attrs","cname","dom","className","innerHTML","item","setAttribute","createDomFromHtml","classname","doc","children","addClass","err","hasClass","classList","orgClassName","getAttribute","add","removeClass","remove","reg","toggleClass","classNames","typeOf","findDom","sel","querySelector","getElementById","getCss","currentStyle","defaultView","getComputedStyle","padStart","pad","charstr","maxlen","chars","substring","format","time","round","hour","minute","touches","touch","changedTouches","clientX","clientY","offsetX","pageX","offsetLeft","offsetY","pageY","offsetTop","_target","srcElement","deepCopy","dst","Node","deepMerge","getBgImage","url","backgroundImage","copyDom","nodeType","back","tagName","attributes","setInterval","eventName","intervalFunc","frequency","_interval","clearInterval","fun","_timers","clearTimeout","clearAllTimers","_timerIds","createImgBtn","imgUrl","width","height","w","h","unit","btn","parseFloat","backgroundSize","margin","Hex2RGBA","hex","alpha","rgb","sixHex","kw","getFullScreenEl","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","checkIsFunction","checkIsObject","hide","show","isUndefined","setStyleFromCsstext","text","filterStyleFromText","_cssText","cssText","styleArr","ret","remain","getStyleFromCsstext","preloadImg","onload","onerror","img","Image","complete","stopPropagation","cancelable","preventDefault","scrollTop","pageYOffset","documentElement","body","scrollLeft","pageXOffset","checkTouchSupport","getBuffered2","vbuffered","maxHoleDuration","buffered","diff","buffered2","buf2len","buf2end","getEventPos","zoom","requestAnimationFrame","callback","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","cancelAnimationFrame","frameId","mozCancelAnimationFrame","cancelRequestAnimationFrame","VERSION_REG","sniffer","os","isPc","navigator","ua","ie","chrome","opera","safari","isWindowsPhone","isSymbian","isAndroid","isFireFox","isTablet","isPhone","isIpad","isIos","_match","toLocaleLowerCase","ERROR_TYPE_MAP","Errors","player","errorInfo","errorType","errorCode","errorMessage","originError","ext","ERROR_TYPES","i18n","video","mediaError","duration","currentTime","ended","readyState","networkState","playerVersion","stack","ex","msg","PLAY","PLAYING","ENDED","PAUSE","ERROR","SEEKING","SEEKED","TIME_UPDATE","WAITING","CANPLAY","DURATION_CHANGE","VOLUME_CHANGE","LOADED_DATA","RATE_CHANGE","PROGRESS","LOAD_START","EMPTIED","PLAYER_FOCUS","PLAYER_BLUR","READY","URL_NULL","AUTOPLAY_STARTED","AUTOPLAY_PREVENTED","COMPLETE","REPLAY","DESTROY","URL_CHANGE","FULLSCREEN_CHANGE","CSS_FULLSCREEN_CHANGE","MINI_STATE_CHANGE","DEFINITION_CHANGE","AFTER_DEFINITION_CHANGE","VIDEO_RESIZE","PIP_CHANGE","ROTATE","SCREEN_SHOT","PLAYNEXT","SHORTCUT","XGLOG","USER_ACTION","VIDEO_EVENTS","emitEvents","eventKey","errorHandler","_hasStart","_currentTime","_duration","videoConfig","controls","autoplay","playsinline","x5VideoPlayerFullscreen","x5VideoOrientation","airplay","tabindex","mediaType","videoAttributes","playerType","x5VideoPlayerType","Sniffer","isWeixin","_this","loop","Util","defaultPlaybackRate","playbackRate","volume","autoplayMuted","muted","videoEventMiddleware","attachVideoEvents","middlewares","_this2","_this3","evHandlers","_evHandlers","_this4","funName","toUpperCase","removeEventListener","_e","pause","removeAttribute","load","detachVideoEvents","_this5","play","canPlayType","range","isTrue","_buffered","crossOrigin","currentSrc","defaultMuted","paused","rate","played","preload","seekable","seeking","onWaiting","vol","mydb","db","ojstore","keypath","indexedDB","webkitindexedDB","IDBKeyRange","webkitIDBKeyRange","myDB","request","onsuccess","onupgradeneeded","transaction","objectStoreNames","contains","createObjectStore","keyPath","deleteDatabase","storename","objectStore","put","delete","FULLSCREEN_EVENTS","GET_FULLSCREEN_API","EXIT_FULLSCREEN_API","UNSCOPABLES","addToUnscopables","$find","FIND","SKIPS_HOLES","callHandler","hook","hookName","preset","pre","__hooks","pluginName","preRet","isContinue","useHooks","usePluginHooks","plugins","plugin","hooksDescriptor","presetHooks","delHooksDescriptor","runHooks","showErrorMsg","BasePlugin","beforeCreate","__args","__events","playerConfig","__init","logger","lang","i18nKeys","action","eventType","Event","registerPlugin","getPlugin","offAll","destroy","unRegisterPlugin","Obj","Element","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","closest","selector","parentNode","_delegate","useCapture","listenerFn","delegateTarget","delegate_1","elements","querySelectorAll","ROOT_TYPES","CONTROLS","ROOT","POSITIONS","ROOT_LEFT","ROOT_RIGHT","ROOT_TOP","CONTROLS_LEFT","CONTROLS_RIGTH","CONTROLS_RIGHT","CONTROLS_CENTER","isUrl","createIcon","icon","attr","newIcon","registerIconsObj","iconsConfig","_icons","icons","orgIcon","class","mergeIconClass","mergeIconAttr","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","__delegates","root","_parent","_el","registerIcons","langText","textConfig","defaultTexConfig","registerLanguageTexts","zh","renderStr","render","Error","insert","setAttr","setStyle","__registerChildren","_children","_plugin","checkChildren","langKey","langTextShow","_c","qs","bindEL","delegate","unbindEL","_this6","htmlStr","eventHandle","isBubble","getPropertyValue","pdom","child","_this7","insertIdx","Number","isDomElement","coordinate","curIdx","insertBefore","insertAdjacentHTML","dels","correctPrototypeGetter","CORRECT_PROTOTYPE_GETTER","objectGetPrototypeOf","BUGGY_SAFARI_ITERATORS","iteratorsCore","returnThis","createIteratorConstructor","IteratorConstructor","KEYS","VALUES","ENTRIES","defineIterator","Iterable","DEFAULT","IS_SET","CurrentIteratorPrototype","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","ARRAY_ITERATOR","es_array_iterator","iterated","kind","Arguments","STRING_ITERATOR","point","ArrayIteratorMethods","ArrayValues","ResizeObserver","__handlers","timeStamp","observer","t","Date","getTime","__trigger","unobserve","disconnect","__runHandler","resizeObserver","typeIsObject","typeIsBoolean","init","cgid","_pluginInfoId","pluginGroup","closeResizeObserver","resize","addObserver","_player","_originalOptions","checkPlayerRoot","_keys","_p","lazyRegister","lazyPlugin","timeout","loader","__esModule","default","register","_plugins","originalOptions","isSupported","disable","defaultConfig","unRegister","_instance","func","afterCreate","__destroy","deletePlugin","getPlugins","findPlugin","cName","beforeInit","retPromise","_loadingPlugins","pluginsRet","beforePlayerInit","afterInit","afterPlayerInit","setLang","updateLang","reRender","pluginsMap","_args","onPluginsReady","unObserver","DEFAULT_SKIN","ENTER","PAUSED","LOADING","NO_START","ACTIVE","FULLSCREEN","CSS_FULLSCREEN","PARENT_FULLSCREEN","ROTATE_FULLSCREEN","PARENT_ROTATE_FULLSCREEN","INNER_FULLSCREEN","NO_CONTROLS","FLEX_CONTROLS","CONTROLS_FOLLOW","AUTOHIDE","NOT_ALLOW_AUTOPLAY","PC","MOBILE","MINI","STATES","STATE_ARRAY","userTimer","hideDelay","closeControlsBlur","inactive","focus","device","marginControls","autoHide","STATE_CLASS","center","innerRoot","isMini","onMouseEnter","onMouseLeave","blur","ignorePaused","unbind","initShow","control_autohide","controls_permanent","XGI18nLang","XGI18nTextKeys","XGI18nLangKeys","XGI18nLangPreExtends","updateKeys","en","extend","XGI18nText","LANG","TEXT","use","langData","texts","network","mse","parse","decoder","runtime","other","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","PLAY_TIPS","PAUSE_TIPS","PLAYNEXT_TIPS","DOWNLOAD_TIPS","ROTATE_TIPS","RELOAD_TIPS","FULLSCREEN_TIPS","EXITFULLSCREEN_TIPS","CSSFULLSCREEN_TIPS","EXITCSSFULLSCREEN_TIPS","TEXTTRACK","PIP","SCREENSHOT","LIVE","OFF","OPEN","MINI_DRAG","MINISCREEN","REFRESH_TIPS","REFRESH","FORWARD","LIVE_TIP","PlAYER_HOOKS","Player","nullUrlStart","fluid","fitVideoSize","videoFillMode","isLive","videoInit","poster","isMobileSimulateMode","execBeforePluginsCall","allowSeekAfterEnded","enableContextmenu","closeVideoClick","closeVideoDblclick","closePlayerBlur","closeDelayBlur","leavePlayerTime","closePlayVideoFocus","closePauseVideoFocus","closeFocusVideoFocus","startTime","seekedStatus","miniprogress","disableSwipeHandler","enableSwipeHandler","ignores","whitelist","language","fullscreenTarget","controlsList","screenShot","rotate","pip","download","mini","cssFullscreen","keyShortcut","presets","definition","customDuration","timeOffset","thumbnail","commonStyle","progressColor","playedColor","cachedColor","sliderBtnStyle","volumeColor","defaultPreset","defaultIdx","waitTimer","_state","isSeeking","isCanplay","_runPending","rotateDeg","isActive","isCssfullScreen","fullscreen","_fullscreenEl","_cssfullscreenEl","curDefinition","_orgCss","_fullScreenOffset","_videoHeight","_videoWidth","_played","begin","acc","innerContainer","topBar","osVersion","database","Database","_initDOM","_bindEvents","_registerPresets","_registerPlugins","pluginsManager","setState","onReady","defaultDefinition","hasStart","vid","line","handle","_initBaseDoms","XgVideoProxy","_nVideo","Controls","top","leftBar","rightBar","resetFullState","onFullscreenChange","isFullScreen","fullEl","_fullActionFrom","prop","changeFullStyle","exitCssFullscreen","needFullscreenScroll","scrollTo","recoverFullStyle","__webkitbeginfullscreen","__webkitendfullscreen","playFunc","mousemoveFunc","canPlayFunc","videoPlay","_attachSourceEvents","loadeddataFunc","_root","firstChild","_videoSourceCount","_sourceError","I18N","ignoresStr","lazy","loadingPlugin","forceBeforeInit","Preset","_this8","PLUFGIN","_pConfig","deregister","_this9","_startInit","fileName","lineNumber","seamless","playPromise","_this10","onError","_errorTimer","_this11","isSeekedPlay","_status","_this13","curTime","isPaused","switchURL","_canplay","_this14","_err","reloadFunc","clsList","videoPause","cls","_this15","_unbindEvents","_detachSourceEvents","exitFullscreen","_this16","cList","_this17","onPlay","cur","_this18","rootClass","pClassName","_orgPCss","webkitRequestFullscreen","ALLOW_KEYBOARD_INPUT","fullscreenEnabled","webkitSupportsFullscreen","webkitEnterFullscreen","webkitExitFullScreen","_class","delay","onFocus","onBlur","_this19","_this20","_this21","rvH","_transform","_tx","_ty","transform","webkitTransform","videoWidth","videoHeight","containerSize","getBoundingClientRect","controlsHeight","videoFit","fit","rWidth","rHeight","_style","paddingTop","_this22","videoScale","vWidth","vHeight","cWidth","cHeight","updateObjectPosition","objectPosition","newState","bool","cutTo","_this23","changeDefinition","langKeys","textKeys","__url","posterUrl","update","VideoProxy","Xglogger","vt","pt","fvt","_isSeeking","seekingStart","waitingStart","_isWaiting","_waitTimer","_waittTimer","stall","costTime","seekData","emitLog","suspendSeekingStatus","suspendWaitingStatus","_onReset","_onWaiting","_onSeeking","_onSeeked","_onPlaying","_onError","endType","_now","_cost","replay","ReplaySvg","__handleReplay","isEndedShow","hideCanplay","onTimeUpdate","AnimateMap","autoPlayStart","initIcons","onPlayPause","clickHandler","switchPausePlay","emitUserAction","startPlay","PlaySvg","startPause","PauseSvg","isAnimate","endShow","seconds","addAnimate","switchStatus","status","isShowPause","isShowEnd","disableAnimate","animate","innerHtml","HTMLElement","barStr","logo","getMini","exitMini","onClick","getStyleSize","num","measurements","measurementsLength","getSize","elem","getStyle","innerWidth","innerHeight","outerWidth","outerHeight","getZeroSize","offsetWidth","offsetHeight","isBorderBox","boxSizing","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderWidth","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","getTouch","dentifier","identifier","EVENTS","POST_START_EVENTS","mousedown","touchstart","pointerdown","Draggabilly","isEnabled","isDragging","isDown","downPoint","dragPoint","startPos","_handlerDom","_bindStartEvent","_startKey","_boundPointerEvents","onUp","positionDrag","webKitTransform","dragStart","dragMove","dragEnd","touchIdentifier","pointerId","dragCancel","pointer","_getPosition","maxY","maxX","setLeftTop","_bindPostStartEvents","_unbindPostStartEvents","presetInfo","moveVector","hasDragStarted","dragRealStart","_dragPointerMove","dragX","dragY","checkContain","_unbindStartEvent","abs","axis","drag","grid","_getPositionCoord","_addTransformPosition","matrixValues","xIndex","translateX","translateY","styleSide","measure","parentSize","MiniScreen","isClose","scrollY","scrollHeight","lastStyle","isShowIcon","MiniScreenIcon","onCancelClick","onCenterClick","disableDrag","_draggabilly","isScrollSwitch","onScroll","PlayIcon","PauseIcon","MOUSE_EVENTS","mouseenter","mouseleave","mousemove","HOOKS","PCPlugin","__canvas","closeVideoStopPropagation","_clickCount","clickTimer","switchPlayPause","getFullscreen","disableContextmenu","initEvents","onVideoClick","onVideoDblClick","onContextmenu","Infinity","returnValue","cancelBubble","thisNumberValue","repeat","count","RangeError","nativeToFixed","toFixed","pow","multiply","c2","divide","dataToString","s","fractionDigits","number","fractDigits","sign","x2","TOUCHS","move","cancel","MOUSES","preventToucheDefault","_pos","moving","pressDelay","dbClickDelay","disablePress","disableDbClick","miniStep","pressIntrvalId","dbIntrvalId","_initEvent","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel","__clearPress","trigger","press","__clearDb","__setPress","__setDb","diffx","diffy","touchend","touchmove","ACTIONS","touche","getTouche","disableGesture","isStart","rect","scopeL","scopeR","scopeM1","scopeM","scopeM2","miniMoveStep","hideControlsActive","scope","checkScope","gestureY","gestureX","executeMove","endLastMove","resetSeekState","resetPos","changeAction","checkIsRootTarget","recoverAutoHide","light","timer","seekTipIcon","SeekTipIcon","closedbClick","xgMask","initCustomStyle","registerThumbnail","Touche","onRootTouchMove","onRootTouchEnd","moveDuration","eventsMap","pressend","click","doubleclick","disableActive","progressPlugin","progress","addCallBack","activeSeekNote","forward","usable","createThumbnail","timePreview","backgroundColor","color","disableTimeProgress","startPlugin","recover","mold","updateTime","updateBrightness","updateVolume","lastScope","seek","hideControlsEnd","sendUseAction","pressRate","percent","updatePercent","isTouchingSeek","maxDarkness","isForward","focusHide","updateThumbnails","gradient","disableSeekIcon","miniYPer","darkness","isDisableTag","isContentEditable","disableBodyTrigger","checkIsVisible","metaKey","altKey","ctrlKey","keyCode","isGlobalTrigger","checkCode","handleKeyCode","extendkeyCodeMap","keyCodeMap","key1","seekStep","noBodyTarget","up","down","esc","mergekeyCodeMap","onKeydown","onBodyKeyDown","checkVisible","rec","bottom","isBodyTarget","flag","_time","curKeyCode","loadingIcon","$findIndex","FIND_INDEX","TPL","styleKey","InnerList","fragments","focusClass","cachedIndex","playedIndex","newIndex","curIndex","millisecond","progressList","curPFrag","per","cached","updateDuration","newPIndex","updateProgress","newCIndex","inner","isFocus","_ePos","computeTime","triggerCallbacks","closeMoveSeek","onMoveStart","isProgressMoving","progressBtn","updateWidth","isMobile","onMouseMove","onMouseUp","onMoveOnly","onBodyClick","onMoveEnd","isEnter","miniStartStep","isPauseMoving","useable","__dragCallBacks","direc","innerList","outer","createInner","isDragingSeek","onTimeupdate","onCacheUpdate","onReset","bindDomEvents","boxShadow","_index","onMouseDown","pauseAutoHide","isCloseClickSeek","realTime","rLeft","offset","timeIcon","resetActive","notSeek","bufferedPoint","thumbnailPlugin","controlsMode","btnClick","changeLangTextKey","TopBackIcon","screenBack","BackSVG","Fullscreen","rotateFullscreen","orientation","setRotateDeg","handleFullscreen","changeFullScreen","needBackIcon","topBackIcon","_onOrientationChange","FullScreenSvg","ExitFullScreenSvg","deg","useCssFullscreen","getCssFullscreen","exitRotateFullscreen","getRotateFullscreen","switchCallback","isActiving","constrolsMode","createCenterTime","durationDom","timeDom","current","centerCurDom","centerDurDom","updateState","slider","bar","barRect","updateVolumePos","isMoving","onMove","volumeSmall","volumeSmallSvg","volumeLarge","volumeLargeSvg","volumeMuted","volumeMutedSvg","changeMutedHandler","changeMuted","onMouseenter","onMouseleave","onBarMousedown","onVolumeChange","_volume","showValueLabel","updateVolumeValue","$labelValue","innerText","isShowVolumeValue","Rotate","onBtnClick","updateRotateDeg","innerRotate","clockwise","_styles","transformOrigin","times","factor","RotateSvg","PresentationMode","isPIPAvailable","isPip","exitPIP","requestPIP","showIcon","pMode","initPipEvents","switchPIP","pipIcon","PipIcon","pipIconExit","PipIconExit","leavePIPCallback","enterPIPCallback","pipWindow","pictureInPictureWindow","onWebkitpresentationmodechanged","webkitPresentationMode","checkWebkitSetPresentationMode","webkitSetPresentationMode","requestPictureInPicture","exitPictureInPicture","pictureInPictureElement","pictureInPictureEnabled","disablePictureInPicture","webkitSupportsPresentationMode","PlayNextIcon","idx","urlList","nextHandler","playNext","Next","changeSrc","strFileName","strMimeType","blob","reader","defaultMime","mimeType","payload","anchor","myBlob","Blob","MozBlob","WebKitBlob","pop","ajax","XMLHttpRequest","responseType","response","send","msSaveBlob","dataUrlToBlob","saver","tempUiArr","Uint8Array","mx","strUrl","parts","binData","atob","decodeURIComponent","uiArr","winMode","URL","revokeObjectURL","confirm","createObjectURL","btoa","encodeURIComponent","FileReader","readAsDataURL","Download","isLock","getAbsoluteURL","downloadUtil","DownloadSvg","div","ScreenShot","screenshotIcon","initSize","fitVideo","onClickBtn","filename","saveLink","initMouseEvent","canvas","canvasCtx","getContext","shot","saveScreenShot","option","quality","createCanvans","drawImage","toDataURL","OptionList","onItemClick","renderItemList","_delegates","attrKeys","selected","showText","changeCallback","curlSelected","getAttrObj","IS_MOBILE","OptionsIcon","curValue","listType","hidePortrait","optionsList","activeEvent","onEnter","onLeave","onToggle","unFocus","curItem","changeCurrentText","getTextByLang","itemList","listStyle","DefinitionIcon","changeDefinitionList","definitionList","showItem","switchUrl","PlaybackRate","curRate","itemInfo","CssFullScreen","contentIcon","switchTips","CssFullSceenSvg","ExitCssFullSceenSvg","ErrorPlugin","errorRetry","handleError","handleCanPlay","retry","errorNote","intervalId","customConfig","customOnClick","showPrompt","hidePrompt","detail","interval","highlight","hideinterval","ISPOT","mergeISPOT","iSpot","APIS","initDots","_ispots","createDot","_ispotsInit","isNew","calcuPosition","dotDom","findDot","updateDot","needShow","dot","showDot","deleteDot","del","parentElement","deleteAllDots","dotDoms","getElementsByTagName","updateAllDots","iSpots","ispot","CALLBACK_MAP","dragmove","dragstart","dragend","ProgressPreview","videoPreview","videothumbnail","previewLine","timePoint","timeText","tipText","_hasThumnail","ispots","progressDot","initDotsAPI","bindEvents","onMousemove","onMousedown","handlerPreviewClick","updatePosition","isDrag","cwidth","_t","_tt","isflex","lwidth","tWidth","timeStr","textContent","updateLinePos","showTips","isFocusDots","defaultText","hideTips","updateTimeText","thumbnailConfig","isShowThumbnail","tRoot","isShowCoverPreview","totalWidth","widthPerSeconds","isDefault","removeCallBack","miniWidth","Thumbnail","ratio","preloadMark","initThumbnail","urls","pic_num","containerWidth","containerHeight","row","col","urlIndex","indexInPage","rowIndex","colIndex","swidth","sHeight","getUrlByIndex","backgroundPosition","customStyle","getPosition","isShow","scale","MODES","nowTime","performance","checkVideoIsSupport","browser","isSupportCanvas","videoPI","preTime","dynamicBg","DynamicBg","isSupport","rwidth","rheight","frameRate","onLoadedData","canvasFilter","supportCanvasFilter","isInnerRender","webkitFilter","mask","addMask","background","maskBg","updateImg","image","pi","checkIsSupportCanvas","PresetPlayer","simulateMode","contolsIcons","Progress","MiniProgress","TimeIcon","FullScreen","RotateIcon","PlaybackRateIcon","DownLoadIcon","ScreenShotIcon","Volume","PIPIcon","layers","Replay","Poster","Start","Loading","Enter","Prompt","Miniscreen","Keyboard","Mobile","ZH"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.min.js","sources":["../../../node_modules/core-js/internals/global.js","../../../node_modules/core-js/internals/fails.js","../../../node_modules/core-js/internals/descriptors.js","../../../node_modules/core-js/internals/object-property-is-enumerable.js","../../../node_modules/core-js/internals/engine-v8-version.js","../../../node_modules/core-js/internals/create-property-descriptor.js","../../../node_modules/core-js/internals/classof-raw.js","../../../node_modules/core-js/internals/indexed-object.js","../../../node_modules/core-js/internals/require-object-coercible.js","../../../node_modules/core-js/internals/to-indexed-object.js","../../../node_modules/core-js/internals/is-object.js","../../../node_modules/core-js/internals/get-built-in.js","../../../node_modules/core-js/internals/engine-user-agent.js","../../../node_modules/core-js/internals/native-symbol.js","../../../node_modules/core-js/internals/use-symbol-as-uid.js","../../../node_modules/core-js/internals/is-symbol.js","../../../node_modules/core-js/internals/ordinary-to-primitive.js","../../../node_modules/core-js/internals/set-global.js","../../../node_modules/core-js/internals/shared-store.js","../../../node_modules/core-js/internals/shared.js","../../../node_modules/core-js/internals/to-object.js","../../../node_modules/core-js/internals/has.js","../../../node_modules/core-js/internals/uid.js","../../../node_modules/core-js/internals/well-known-symbol.js","../../../node_modules/core-js/internals/to-primitive.js","../../../node_modules/core-js/internals/to-property-key.js","../../../node_modules/core-js/internals/document-create-element.js","../../../node_modules/core-js/internals/ie8-dom-define.js","../../../node_modules/core-js/internals/object-get-own-property-descriptor.js","../../../node_modules/core-js/internals/an-object.js","../../../node_modules/core-js/internals/object-define-property.js","../../../node_modules/core-js/internals/create-non-enumerable-property.js","../../../node_modules/core-js/internals/inspect-source.js","../../../node_modules/core-js/internals/internal-state.js","../../../node_modules/core-js/internals/native-weak-map.js","../../../node_modules/core-js/internals/shared-key.js","../../../node_modules/core-js/internals/hidden-keys.js","../../../node_modules/core-js/internals/redefine.js","../../../node_modules/core-js/internals/to-integer.js","../../../node_modules/core-js/internals/to-length.js","../../../node_modules/core-js/internals/to-absolute-index.js","../../../node_modules/core-js/internals/array-includes.js","../../../node_modules/core-js/internals/object-keys-internal.js","../../../node_modules/core-js/internals/enum-bug-keys.js","../../../node_modules/core-js/internals/object-get-own-property-names.js","../../../node_modules/core-js/internals/object-get-own-property-symbols.js","../../../node_modules/core-js/internals/own-keys.js","../../../node_modules/core-js/internals/object-create.js","../../../node_modules/core-js/internals/copy-constructor-properties.js","../../../node_modules/core-js/internals/is-forced.js","../../../node_modules/core-js/internals/export.js","../../../node_modules/core-js/internals/a-function.js","../../../node_modules/core-js/internals/object-keys.js","../../../node_modules/core-js/internals/object-define-properties.js","../../../node_modules/core-js/internals/html.js","../../../node_modules/core-js/internals/function-bind.js","../../../node_modules/core-js/modules/es.reflect.construct.js","../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../../node_modules/@babel/runtime/helpers/esm/inherits.js","../../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../node_modules/core-js/internals/is-array.js","../../../node_modules/core-js/internals/to-string.js","../../../node_modules/core-js/internals/object-get-own-property-names-external.js","../../../node_modules/core-js/internals/well-known-symbol-wrapped.js","../../../node_modules/core-js/internals/path.js","../../../node_modules/core-js/internals/define-well-known-symbol.js","../../../node_modules/core-js/internals/set-to-string-tag.js","../../../node_modules/core-js/internals/function-bind-context.js","../../../node_modules/core-js/internals/array-species-constructor.js","../../../node_modules/core-js/internals/array-species-create.js","../../../node_modules/core-js/internals/array-iteration.js","../../../node_modules/core-js/modules/es.symbol.js","../../../node_modules/core-js/modules/es.object.get-own-property-descriptor.js","../../../node_modules/core-js/internals/create-property.js","../../../node_modules/core-js/modules/es.object.get-own-property-descriptors.js","../../../node_modules/@babel/runtime/helpers/esm/createClass.js","../../../node_modules/@babel/runtime/helpers/esm/get.js","../../../node_modules/@babel/runtime/helpers/esm/superPropBase.js","../../../node_modules/core-js/internals/array-method-has-species-support.js","../../../node_modules/core-js/modules/es.array.map.js","../../../node_modules/core-js/modules/es.array.concat.js","../../../node_modules/core-js/modules/es.object.keys.js","../../../node_modules/core-js/modules/es.array.slice.js","../../../node_modules/core-js/internals/dom-iterables.js","../../../node_modules/core-js/internals/array-method-is-strict.js","../../../node_modules/core-js/internals/array-for-each.js","../../../node_modules/core-js/modules/web.dom-collections.for-each.js","../../../node_modules/core-js/internals/regexp-flags.js","../../../node_modules/core-js/internals/regexp-sticky-helpers.js","../../../node_modules/core-js/internals/regexp-unsupported-dot-all.js","../../../node_modules/core-js/internals/regexp-unsupported-ncg.js","../../../node_modules/core-js/internals/regexp-exec.js","../../../node_modules/core-js/modules/es.regexp.exec.js","../../../node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","../../../node_modules/core-js/internals/is-regexp.js","../../../node_modules/core-js/internals/species-constructor.js","../../../node_modules/core-js/internals/string-multibyte.js","../../../node_modules/core-js/internals/advance-string-index.js","../../../node_modules/core-js/internals/regexp-exec-abstract.js","../../../node_modules/core-js/modules/es.string.split.js","../../../node_modules/core-js/modules/es.array.join.js","../../../node_modules/core-js/modules/es.array.splice.js","../../../node_modules/core-js/internals/to-string-tag-support.js","../../../node_modules/core-js/internals/classof.js","../../../node_modules/core-js/internals/object-to-string.js","../../../node_modules/core-js/modules/es.object.to-string.js","../../../node_modules/core-js/internals/native-promise-constructor.js","../../../node_modules/core-js/internals/redefine-all.js","../../../node_modules/core-js/internals/a-possible-prototype.js","../../../node_modules/core-js/internals/object-set-prototype-of.js","../../../node_modules/core-js/internals/set-species.js","../../../node_modules/core-js/internals/iterators.js","../../../node_modules/core-js/internals/is-array-iterator-method.js","../../../node_modules/core-js/internals/get-iterator-method.js","../../../node_modules/core-js/internals/iterator-close.js","../../../node_modules/core-js/internals/iterate.js","../../../node_modules/core-js/internals/check-correctness-of-iteration.js","../../../node_modules/core-js/internals/task.js","../../../node_modules/core-js/internals/engine-is-ios.js","../../../node_modules/core-js/internals/engine-is-node.js","../../../node_modules/core-js/internals/microtask.js","../../../node_modules/core-js/internals/engine-is-ios-pebble.js","../../../node_modules/core-js/internals/engine-is-webos-webkit.js","../../../node_modules/core-js/internals/new-promise-capability.js","../../../node_modules/core-js/internals/promise-resolve.js","../../../node_modules/core-js/modules/es.promise.js","../../../node_modules/core-js/internals/host-report-errors.js","../../../node_modules/core-js/internals/engine-is-browser.js","../../../node_modules/core-js/internals/an-instance.js","../../../node_modules/core-js/internals/perform.js","../../../node_modules/core-js/modules/es.function.name.js","../../../node_modules/core-js/internals/inherit-if-required.js","../../../node_modules/core-js/internals/whitespaces.js","../../../node_modules/core-js/internals/string-trim.js","../../../node_modules/core-js/modules/es.number.constructor.js","../../../node_modules/core-js/modules/es.array.filter.js","../../../node_modules/core-js/internals/object-assign.js","../../../node_modules/core-js/modules/es.object.assign.js","../../../node_modules/eventemitter3/index.js","../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../../../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../../../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../../../node_modules/core-js/modules/es.string.match.js","../../../node_modules/core-js/modules/es.regexp.constructor.js","../../../node_modules/core-js/modules/es.regexp.to-string.js","../../../node_modules/core-js/internals/get-substitution.js","../../../node_modules/core-js/modules/es.string.replace.js","../../../node_modules/core-js/internals/string-trim-forced.js","../../../node_modules/core-js/modules/es.string.trim.js","../../../node_modules/core-js/internals/array-sort.js","../../../node_modules/core-js/internals/engine-ff-version.js","../../../node_modules/core-js/internals/engine-is-ie-or-edge.js","../../../node_modules/core-js/internals/engine-webkit-version.js","../../../node_modules/core-js/modules/es.array.sort.js","../src/utils/debug.js","../src/utils/xgplayerTimeRange.js","../src/utils/util.js","../src/utils/sniffer.js","../src/version.js","../src/error.js","../src/events.js","../src/proxy.js","../src/utils/database.js","../src/constant.js","../../../node_modules/core-js/internals/add-to-unscopables.js","../../../node_modules/core-js/modules/es.array.find.js","../src/plugin/hooksDescriptor.js","../src/plugin/basePlugin.js","../../../node_modules/delegate/src/closest.js","../../../node_modules/delegate/src/delegate.js","../src/plugin/plugin.js","../../../node_modules/core-js/internals/iterators-core.js","../../../node_modules/core-js/internals/correct-prototype-getter.js","../../../node_modules/core-js/internals/object-get-prototype-of.js","../../../node_modules/core-js/internals/create-iterator-constructor.js","../../../node_modules/core-js/internals/define-iterator.js","../../../node_modules/core-js/modules/es.array.iterator.js","../../../node_modules/core-js/modules/es.string.iterator.js","../../../node_modules/core-js/modules/web.dom-collections.iterator.js","../src/plugin/resizeObserver.js","../src/plugin/pluginsManager.js","../src/stateClassMap.js","../src/plugin/preset.js","../src/state.js","../src/plugins/controls/index.js","../src/lang/i18n.js","../src/lang/en.js","../src/player.js","../src/defaultConfig.js","../src/plugins/logger/index.js","../src/plugins/replay/index.js","../src/plugins/poster/index.js","../src/plugins/start/index.js","../src/plugins/enter/index.js","../src/plugins/miniScreen/miniScreenIcon.js","../src/utils/draggabilly.js","../src/plugins/miniScreen/index.js","../src/plugins/pc/index.js","../../../node_modules/core-js/internals/this-number-value.js","../../../node_modules/core-js/internals/string-repeat.js","../../../node_modules/core-js/modules/es.number.to-fixed.js","../src/plugins/mobile/touch.js","../src/plugins/mobile/index.js","../src/plugins/keyboard/index.js","../src/plugins/loading/index.js","../../../node_modules/core-js/modules/es.array.find-index.js","../src/plugins/progress/innerList.js","../src/plugins/progress/index.js","../src/plugins/play/index.js","../src/plugins/fullscreen/backicon.js","../src/plugins/fullscreen/index.js","../src/plugins/time/index.js","../src/plugins/volume/index.js","../src/plugins/rotate/index.js","../src/plugins/pip/index.js","../src/plugins/playNext/index.js","../../../node_modules/downloadjs/download.js","../src/plugins/download/index.js","../src/plugins/screenShot/index.js","../src/plugins/common/optionList.js","../src/plugins/common/optionsIcon.js","../src/plugins/definition/index.js","../src/plugins/playbackRate/index.js","../src/plugins/cssFullScreen/index.js","../src/plugins/error/index.js","../src/plugins/prompt/index.js","../src/plugins/progressPreview/dotsApi.js","../src/plugins/progressPreview/index.js","../src/plugins/common/thumbnail.js","../src/plugins/progress/miniProgress.js","../src/plugins/dynamicBg/index.js","../src/lang/zh-cn.js","../src/index.umd.js","../src/presets/default.js"],"sourcesContent":["var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] < 4 ? 1 : match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var getBuiltIn = require('../internals/get-built-in');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return typeof $Symbol == 'function' && Object(it) instanceof $Symbol;\n};\n","var isObject = require('../internals/is-object');\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (pref !== 'string' && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var global = require('../internals/global');\n\nmodule.exports = function (key, value) {\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.16.2',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var toObject = require('../internals/to-object');\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty.call(toObject(it), key);\n};\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n if (NATIVE_SYMBOL && has(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = input[TO_PRIMITIVE];\n var result;\n if (exoticToPrim !== undefined) {\n if (pref === undefined) pref = 'default';\n result = exoticToPrim.call(input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : String(key);\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n if (wmhas.call(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (objectHas(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","module.exports = {};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var state;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) {\n createNonEnumerableProperty(value, 'name', key);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\nvar aFunction = require('../internals/a-function');\nvar isObject = require('../internals/is-object');\n\nvar slice = [].slice;\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!(argsLength in factories)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func -- we have no proper alternatives, IE8- only\n factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = slice.call(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = partArgs.concat(slice.call(arguments));\n return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);\n };\n if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;\n return boundFunction;\n};\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar aFunction = require('../internals/a-function');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar bind = require('../internals/function-bind');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n nativeConstruct(function () { /* empty */ });\n});\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(arg) {\n return classof(arg) == 'Array';\n};\n","var isSymbol = require('../internals/is-symbol');\n\nmodule.exports = function (argument) {\n if (isSymbol(argument)) throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push.call(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push.call(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (has(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = nativePropertyIsEnumerable.call(this, P);\n if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n result.push(AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.es/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = $toString(key);\n if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.es/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = [it];\n var index = 1;\n var $replacer;\n while (arguments.length > index) args.push(arguments[index++]);\n $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return $stringify.apply(null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","import superPropBase from \"./superPropBase.js\";\nexport default function _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = toLength(E.length);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n}\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nexports.UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n","var fails = require('./fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n","var fails = require('./fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?<a>b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$<a>c') !== 'bc';\n});\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeExec = RegExp.prototype.exec;\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n // eslint-disable-next-line max-statements -- TODO\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = patchedExec.call(raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = regexpFlags.call(re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = flags.replace('y', '');\n if (flags.indexOf('g') === -1) {\n flags += 'g';\n }\n\n strCopy = str.slice(re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && str.charAt(re.lastIndex - 1) !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = match.input.slice(charsAdded);\n match[0] = match[0].slice(charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar redefine = require('../internals/redefine');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n FORCED\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n });\n\n redefine(String.prototype, KEY, methods[0]);\n redefine(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n","var toInteger = require('../internals/to-integer');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.codePointAt` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = toString(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return nativeSplit.call(string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(toString(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (string, limit) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n if (res.done) return res.value;\n\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (UNSUPPORTED_Y ? 'g' : 'y');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? S.slice(q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","'use strict';\nvar $ = require('../internals/export');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeJoin = [].join;\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n","/* eslint-disable no-proto -- safe */\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","module.exports = {};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var anObject = require('../internals/an-object');\n\nmodule.exports = function (iterator) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) {\n return anObject(returnMethod.call(iterator)).value;\n }\n};\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = toLength(iterable.length); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && result instanceof Result) return result;\n } return new Result(false);\n }\n iterator = iterFn.call(iterable);\n }\n\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n if (typeof result == 'object' && result && result instanceof Result) return result;\n } return new Result(false);\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar bind = require('../internals/function-bind-context');\nvar html = require('../internals/html');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n // eslint-disable-next-line no-prototype-builtins -- safe\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = [];\n var argumentsLength = arguments.length;\n var i = 1;\n while (argumentsLength > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func -- spec requirement\n (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n typeof postMessage == 'function' &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = promise.then;\n notify = function () {\n then.call(promise, flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","var userAgent = require('../internals/engine-user-agent');\nvar global = require('../internals/global');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","'use strict';\nvar aFunction = require('../internals/a-function');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar isObject = require('../internals/is-object');\nvar aFunction = require('../internals/a-function');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromiseConstructorPrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromiseConstructorPrototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = new PromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var index = 0;\n // variable length - can't use forEach\n while (chain.length > index) {\n var reaction = chain[index++];\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n }\n state.reactions = [];\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n then.call(value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromiseConstructor, PROMISE);\n aFunction(executor);\n Internal.call(this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n PromiseConstructorPrototype = PromiseConstructor.prototype;\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: [],\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromiseConstructorPrototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n state.parent = true;\n state.reactions.push(reaction);\n if (state.state != PENDING) notify(state, false);\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.es/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && typeof NativePromise == 'function' && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n nativeThen.call(that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\n redefine(NativePromisePrototype, 'catch', PromiseConstructorPrototype['catch'], { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromiseConstructorPrototype);\n }\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.es/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n capability.reject.call(undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.es/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.es/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n $promiseResolve.call(C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.es/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n iterate(iterable, function (promise) {\n $promiseResolve.call(C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length === 1 ? console.error(a) : console.error(a, b);\n }\n};\n","module.exports = typeof window == 'object';\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar FunctionPrototypeToString = FunctionPrototype.toString;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !(NAME in FunctionPrototype)) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return FunctionPrototypeToString.call(this).match(nameRE)[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","var isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n typeof (NewTarget = dummy.constructor) == 'function' &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof-raw');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar isSymbol = require('../internals/is-symbol');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\n\n// Opera ~12 has broken Object#toString\nvar BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER;\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n if (isSymbol(argument)) throw TypeError('Cannot convert a Symbol value to a number');\n var it = toPrimitive(argument, 'number');\n var first, third, radix, maxCode, digits, length, index, code;\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = it.charCodeAt(0);\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = it.slice(2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = digits.charCodeAt(index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var dummy = this;\n return dummy instanceof NumberWrapper\n // check on 1..constructor(foo) case\n && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classof(dummy) != NUMBER)\n ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it);\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,' +\n // ESNext\n 'fromString,range'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(NativeNumber, key = keys[j]) && !has(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = global.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\n// TODO: Use only propper RegExpIdentifierName\nvar IS_NCG = /^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar BASE_FORCED = DESCRIPTORS &&\n (!CORRECT_NEW || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';\n }));\n\nvar handleDotAll = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var brackets = false;\n var chr;\n for (; index <= length; index++) {\n chr = string.charAt(index);\n if (chr === '\\\\') {\n result += chr + string.charAt(++index);\n continue;\n }\n if (!brackets && chr === '.') {\n result += '[\\\\s\\\\S]';\n } else {\n if (chr === '[') {\n brackets = true;\n } else if (chr === ']') {\n brackets = false;\n } result += chr;\n }\n } return result;\n};\n\nvar handleNCG = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var named = [];\n var names = {};\n var brackets = false;\n var ncg = false;\n var groupid = 0;\n var groupname = '';\n var chr;\n for (; index <= length; index++) {\n chr = string.charAt(index);\n if (chr === '\\\\') {\n chr = chr + string.charAt(++index);\n } else if (chr === ']') {\n brackets = false;\n } else if (!brackets) switch (true) {\n case chr === '[':\n brackets = true;\n break;\n case chr === '(':\n if (IS_NCG.test(string.slice(index + 1))) {\n index += 2;\n ncg = true;\n }\n result += chr;\n groupid++;\n continue;\n case chr === '>' && ncg:\n if (groupname === '' || has(names, groupname)) {\n throw new SyntaxError('Invalid capture group name');\n }\n names[groupname] = true;\n named.push([groupname, groupid]);\n ncg = false;\n groupname = '';\n continue;\n }\n if (ncg) groupname += chr;\n else result += chr;\n } return [result, named];\n};\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (isForced('RegExp', BASE_FORCED)) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = this instanceof RegExpWrapper;\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var groups = [];\n var rawPattern = pattern;\n var rawFlags, dotAll, sticky, handled, result, state;\n\n if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {\n return pattern;\n }\n\n if (patternIsRegExp || pattern instanceof RegExpWrapper) {\n pattern = pattern.source;\n if (flagsAreUndefined) flags = 'flags' in rawPattern ? rawPattern.flags : getFlags.call(rawPattern);\n }\n\n pattern = pattern === undefined ? '' : toString(pattern);\n flags = flags === undefined ? '' : toString(flags);\n rawPattern = pattern;\n\n if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {\n dotAll = !!flags && flags.indexOf('s') > -1;\n if (dotAll) flags = flags.replace(/s/g, '');\n }\n\n rawFlags = flags;\n\n if (UNSUPPORTED_Y && 'sticky' in re1) {\n sticky = !!flags && flags.indexOf('y') > -1;\n if (sticky) flags = flags.replace(/y/g, '');\n }\n\n if (UNSUPPORTED_NCG) {\n handled = handleNCG(pattern);\n pattern = handled[0];\n groups = handled[1];\n }\n\n result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);\n\n if (dotAll || sticky || groups.length) {\n state = enforceInternalState(result);\n if (dotAll) {\n state.dotAll = true;\n state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);\n }\n if (sticky) state.sticky = true;\n if (groups.length) state.groups = groups;\n }\n\n if (pattern !== rawPattern) try {\n // fails in old engines, but we have no alternatives for unsupported regex syntax\n createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);\n } catch (error) { /* empty */ }\n\n return result;\n };\n\n var proxy = function (key) {\n key in RegExpWrapper || defineProperty(RegExpWrapper, key, {\n configurable: true,\n get: function () { return NativeRegExp[key]; },\n set: function (it) { NativeRegExp[key] = it; }\n });\n };\n\n for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {\n proxy(keys[index++]);\n }\n\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n redefine(global, 'RegExp', RegExpWrapper);\n}\n\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n","'use strict';\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar $toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar flags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = $toString(R.source);\n var rf = R.flags;\n var f = $toString(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","var toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar replace = ''.replace;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue === 'string' &&\n replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1 &&\n replaceValue.indexOf('$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = toString(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n results.push(result);\n if (!global) break;\n\n var matchStr = toString(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = toString(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = toString(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","// TODO: use something more complex like timsort?\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n mergeSort(array.slice(0, middle), comparefn),\n mergeSort(array.slice(middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n var result = [];\n\n while (lindex < llength || rindex < rlength) {\n if (lindex < llength && rindex < rlength) {\n result.push(comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]);\n } else {\n result.push(lindex < llength ? left[lindex++] : right[rindex++]);\n }\n } return result;\n};\n\nmodule.exports = mergeSort;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","var UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar nativeSort = test.sort;\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aFunction(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? nativeSort.call(array) : nativeSort.call(array, comparefn);\n\n var items = [];\n var arrayLength = toLength(array.length);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) items.push(array[index]);\n }\n\n items = internalSort(items, getSortCompare(comparefn));\n itemsLength = items.length;\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) delete array[index++];\n\n return array;\n }\n});\n","\nconst XG_DEBUG_OPEN = typeof (window) !== 'undefined' && window.location && window.location.href.indexOf('xgplayerdebugger=1') > -1\n\nconst STYLE = {\n info: 'color: #525252; background-color: #90ee90;',\n error: 'color: #525252; background-color: red;',\n warn: 'color: #525252; background-color: yellow; '\n}\n\nconst XGTAG = '%c[xgplayer]'\n\nconst XG_DEBUG = {\n config: {\n debug: XG_DEBUG_OPEN ? 3 : 1\n },\n\n logInfo: function (message, ...optionalParams) {\n this.config.debug >= 3 && console.log(XGTAG, STYLE.info, message, ...optionalParams)\n },\n\n logWarn: function (message, ...optionalParams) {\n this.config.debug >= 1 && console.warn(XGTAG, STYLE.warn, message, ...optionalParams)\n },\n\n logError: function (message, ...optionalParams) {\n if (this.config.debug < 1) {\n return\n }\n const _fun = this.config.debug >= 2 ? 'trace' : 'error'\n console[_fun](XGTAG, STYLE.error, message, ...optionalParams)\n }\n}\n\nfunction bindDebug (player) {\n player.logInfo = XG_DEBUG.logInfo.bind(player)\n player.logWarn = XG_DEBUG.logWarn.bind(player)\n player.logError = XG_DEBUG.logError.bind(player)\n}\n\nexport {\n XG_DEBUG as default,\n bindDebug\n}\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 XG_DEBUG from './debug'\nimport XgplayerTimeRange from './xgplayerTimeRange'\nconst util = {}\n\n/**\n *\n * @param { string } el\n * @param { string } [tpl=]\n * @param { {[propName: string]: any }} [attrs={}]\n * @param { string } [cname='']\n * @returns { HTMLElement | null }\n */\nutil.createDom = function (el = 'div', tpl = '', attrs = {}, cname = '') {\n const dom = document.createElement(el)\n dom.className = cname\n dom.innerHTML = tpl\n Object.keys(attrs).forEach(item => {\n const key = item\n const value = attrs[item]\n if (el === 'video' || el === 'audio' || el === 'live-video') {\n if (value) {\n dom.setAttribute(key, value)\n }\n } else {\n dom.setAttribute(key, value)\n }\n })\n return dom\n}\n\n/**\n *\n * @param { string } html\n * @param { string } [attrs={}]\n * @param { string } [classname=\"\"]\n * @returns { HTMLElement | null }\n */\nutil.createDomFromHtml = function (html, attrs = {}, classname = '') {\n try {\n let doc = document.createElement('div')\n doc.innerHTML = html\n let dom = doc.children\n doc = null\n if (dom.length > 0) {\n dom = dom[0]\n classname && util.addClass(dom, classname)\n if (attrs) {\n Object.keys(attrs).forEach(key => {\n dom.setAttribute(key, attrs[key])\n })\n }\n return dom\n }\n return null\n } catch (err) {\n XG_DEBUG.logError('util.createDomFromHtml', err)\n return null\n }\n}\n\n/**\n *\n * @param { HTMLElement } el\n * @param { string } className\n * @returns { boolean }\n */\nutil.hasClass = function (el, className) {\n if (!el || !className) {\n return false\n }\n try {\n return Array.prototype.some.call(el.classList, item => item === className)\n } catch (e) {\n const orgClassName = el.className && typeof el.className === 'object' ? el.getAttribute('class') : el.className\n return orgClassName && !!orgClassName.match(new RegExp('(\\\\s|^)' + className + '(\\\\s|$)'))\n }\n // if (el.classList) {\n // return Array.prototype.some.call(el.classList, item => item === className)\n // } else {\n // const orgClassName = el.className && typeof el.className === 'object' ? el.getAttribute('class') : el.className\n // return orgClassName && !!orgClassName.match(new RegExp('(\\\\s|^)' + className + '(\\\\s|$)'))\n // }\n}\n\n/**\n *\n * @param { HTMLElement } el\n * @param { string } className\n * @returns { void }\n */\nutil.addClass = function (el, className) {\n if (!el || !className) {\n return\n }\n try {\n className.replace(/(^\\s+|\\s+$)/g, '').split(/\\s+/g).forEach(item => {\n item && el.classList.add(item)\n })\n } catch (e) {\n if (!util.hasClass(el, className)) {\n if (el.className && typeof el.className === 'object') {\n el.setAttribute('class', el.getAttribute('class') + ' ' + className)\n } else {\n el.className += ' ' + className\n }\n }\n }\n}\n\n/**\n *\n * @param { HTMLElement } el\n * @param { string } className\n * @returns { void }\n */\nutil.removeClass = function (el, className) {\n if (!el || !className) {\n return\n }\n try {\n className.replace(/(^\\s+|\\s+$)/g, '').split(/\\s+/g).forEach(item => {\n item && el.classList.remove(item)\n })\n } catch (e) {\n if (util.hasClass(el, className)) {\n className.split(/\\s+/g).forEach(item => {\n const reg = new RegExp('(\\\\s|^)' + item + '(\\\\s|$)')\n if (el.className && typeof el.className === 'object') {\n el.setAttribute('class', el.getAttribute('class').replace(reg, ' '))\n } else {\n el.className = el.className.replace(reg, ' ')\n }\n })\n }\n }\n}\n\n/**\n *\n * @param { HTMLElement } el\n * @param { string } className\n * @returns { void }\n */\nutil.toggleClass = function (el, className) {\n if (!el) {\n return\n }\n\n className.split(/\\s+/g).forEach(item => {\n if (util.hasClass(el, item)) {\n util.removeClass(el, item)\n } else {\n util.addClass(el, item)\n }\n })\n}\n\n/**\n *\n * @param { string | Object } args0\n * @param { string } [className]\n * @returns { string }\n */\nutil.classNames = function () {\n const classname = []\n for (let i = 0; i < arguments.length; i++) {\n if (util.typeOf(arguments[i]) === 'String') {\n // classname += `${arguments[i]}`\n classname.push(arguments[i])\n } else if (util.typeOf(arguments[i]) === 'Object') {\n Object.keys(arguments[i]).map(key => {\n if (arguments[i][key]) {\n // classname += key\n classname.push(key)\n }\n })\n }\n // if (i < arguments.length - 1) {\n // classname += ' '\n // }\n }\n return classname.join(' ')\n}\n\n/**\n *\n * @param { HTMLElement } el\n * @param { string } sel\n * @returns { HTMLElement }\n */\nutil.findDom = function (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 XG_DEBUG.logError('util.findDom', e)\n if (sel.indexOf('#') === 0) {\n dom = el.getElementById(sel.slice(1))\n }\n }\n return dom\n}\n\n/**\n *\n * @param { HTMLElement } dom\n * @param { string } key\n * @returns { any }\n */\nutil.getCss = function (dom, key) {\n return dom.currentStyle ? dom.currentStyle[key] : document.defaultView.getComputedStyle(dom, false)[key]\n}\n\nutil.padStart = function (str, length, pad) {\n const charstr = String(pad)\n const len = length >> 0\n let maxlen = Math.ceil(len / charstr.length)\n const chars = []\n const r = String(str)\n while (maxlen--) {\n chars.push(charstr)\n }\n return chars.join('').substring(0, len - r.length) + r\n}\n\n/**\n *\n * @param { Number } time\n * @returns { string }\n */\nutil.format = function (time) {\n if (window.isNaN(time)) {\n return ''\n }\n time = Math.round(time)\n const hour = util.padStart(Math.floor(time / 3600), 2, 0)\n const minute = util.padStart(Math.floor((time - hour * 3600) / 60), 2, 0)\n const second = util.padStart(Math.floor((time - hour * 3600 - minute * 60)), 2, 0)\n return (hour === '00' ? [minute, second] : [hour, minute, second]).join(':')\n}\n\n/**\n *\n * @param { Object } e\n * @returns { Object }\n */\nutil.event = function (e) {\n if (e.touches) {\n const 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\n/**\n *\n * @param { any } obj\n * @returns { string }\n */\nutil.typeOf = function (obj) {\n return Object.prototype.toString.call(obj).match(/([^\\s.*]+)(?=]$)/g)[0]\n}\n\n/**\n *\n * @param { any } dst\n * @param { any } src\n * @returns { any }\n */\nutil.deepCopy = function (dst, src) {\n if (util.typeOf(src) === 'Object' && util.typeOf(dst) === 'Object') {\n Object.keys(src).forEach(key => {\n // eslint-disable-next-line no-undef\n if (util.typeOf(src[key]) === 'Object' && !(src[key] instanceof Node)) {\n if (dst[key] === undefined || dst[key] === undefined) {\n dst[key] = src[key]\n } else {\n util.deepCopy(dst[key], src[key])\n }\n } else if (util.typeOf(src[key]) === 'Array') {\n dst[key] = util.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}\n\n/**\n *\n * @param { any } dst\n * @param { any } src\n * @returns { any }\n */\nutil.deepMerge = function (dst, src) {\n Object.keys(src).map(key => {\n if (util.typeOf(src[key]) === 'Array' && util.typeOf(dst[key]) === 'Array') {\n if (util.typeOf(dst[key]) === 'Array') {\n dst[key].push(...src[key])\n }\n } else if (util.typeOf(dst[key]) === util.typeOf(src[key]) && dst[key] !== null && util.typeOf(dst[key]) === 'Object' && !(src[key] instanceof window.Node)) {\n util.deepMerge(dst[key], src[key])\n } else {\n src[key] !== null && (dst[key] = src[key])\n }\n })\n return dst\n}\n\nutil.getBgImage = function (el) {\n // fix: return current page url when url is none\n const url = (el.currentStyle || window.getComputedStyle(el, null)).backgroundImage\n if (!url || url === 'none') {\n return ''\n }\n const a = document.createElement('a')\n a.href = url.replace(/url\\(\"|\"\\)/g, '')\n return a.href\n}\n\n/**\n *\n * @param { HTMLElement } dom\n * @returns { HTMLElement | null }\n */\nutil.copyDom = function (dom) {\n if (dom && dom.nodeType === 1) {\n const 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\n/**\n *\n * @param { any } context\n * @param { string } eventName\n * @param { function } intervalFunc\n * @param { number } frequency\n */\nutil.setInterval = function (context, eventName, intervalFunc, frequency) {\n if (!context._interval[eventName]) {\n context._interval[eventName] = setInterval(intervalFunc.bind(context), frequency)\n }\n}\n\n/**\n *\n * @param { any } context\n * @param { string } eventName\n * @returns { void }\n */\nutil.clearInterval = function (context, eventName) {\n clearInterval(context._interval[eventName])\n context._interval[eventName] = null\n}\n\n/**\n *\n * @param { any } context\n * @param { function } fun\n * @param { number } time\n * @returns { number }\n */\nutil.setTimeout = function (context, fun, time) {\n if (!context._timers) {\n context._timers = []\n }\n const id = setTimeout(() => {\n fun()\n util.clearTimeout(context, id)\n }, time)\n context._timers.push(id)\n return id\n}\n\n/**\n *\n * @param { any } context\n * @param { number } id\n */\nutil.clearTimeout = function (context, id) {\n const { _timers } = context\n if (util.typeOf(_timers) === 'Array') {\n for (let i = 0; i < _timers.length; i++) {\n if (_timers[i] === id) {\n _timers.splice(i, 1)\n clearTimeout(id)\n break\n }\n }\n } else {\n clearTimeout(id)\n }\n}\n\n/**\n *\n * @param { any } context\n */\nutil.clearAllTimers = function (context) {\n const { _timers } = context\n if (util.typeOf(_timers) === 'Array') {\n _timers.map(item => {\n clearTimeout(item)\n })\n context._timerIds = []\n }\n}\n\n/**\n *\n * @param { string } name\n * @param { string } imgUrl\n * @param { number } [width]\n * @param { number } [height]\n * @returns { HTMLElement }\n */\nutil.createImgBtn = function (name, imgUrl, width, height) {\n const btn = util.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 = parseFloat(width.slice(0, width.indexOf(item)).trim())\n h = parseFloat(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\n/**\n *\n * @param { string } hex\n * @param { string | number } alpha\n * @returns { string }\n */\nutil.Hex2RGBA = function (hex, alpha) {\n const rgb = [] // 定义rgb数组\n // eslint-disable-next-line no-useless-escape\n if (/^\\#[0-9A-F]{3}$/i.test(hex)) {\n let sixHex = '#'\n hex.replace(/[0-9A-F]/ig, function (kw) {\n sixHex += kw + kw\n })\n hex = sixHex\n }\n if (/^#[0-9A-F]{6}$/i.test(hex)) {\n hex.replace(/[0-9A-F]{2}/ig, function (kw) {\n rgb.push(parseInt(kw, 16))\n })\n return `rgba(${rgb.join(',')}, ${alpha})`\n } else {\n return 'rgba(255, 255, 255, 0.1)'\n }\n}\n\n/**\n *\n * @returns { HTMLElement | null }\n */\nutil.getFullScreenEl = function () {\n return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement\n}\n\n/**\n * @param { any }\n * @returns { boolean }\n */\nutil.checkIsFunction = function (fun) {\n return fun && typeof fun === 'function'\n}\n\n/**\n * @param { any }\n * @returns { boolean }\n */\nutil.checkIsObject = function (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * @param { HTMLElement }\n */\nutil.hide = function (dom) {\n dom.style.display = 'none'\n}\n\n/**\n * @param { HTMLElement }\n * @param { block | flex | inline-block | inline-flex } [display]\n */\nutil.show = function (dom, display) {\n dom.style.display = display || 'block'\n}\n\n/**\n *\n * @param { any } val\n * @returns { boolean }\n */\nutil.isUndefined = function (val) {\n if (typeof val === 'undefined' || val === null) {\n return true\n }\n}\n\n/**\n *\n * @param { HTMLElement } dom\n * @param { string } [text]\n * @returns\n */\nutil.setStyleFromCsstext = function (dom, text) {\n // dom.setAttribute(style, text)\n if (!text) {\n return\n }\n if (util.typeOf(text) === 'String') {\n const styleArr = text.replace(/\\s+/g, '').split(';')\n styleArr.map(item => {\n if (item) {\n const arr = item.split(':')\n if (arr.length > 1) {\n dom.style[arr[0]] = arr[1]\n }\n }\n })\n } else {\n Object.keys(text).map(key => {\n dom.style[key] = text[key]\n })\n }\n}\n\n/**\n *\n * @param { string } key\n * @param { Array<any>} list\n * @returns { boolean }\n */\nfunction checkIsIn (key, list) {\n for (let i = 0, len = list.length; i < len; i++) {\n if (key.indexOf(list[i]) > -1) {\n return true\n }\n }\n return false\n}\n\n/**\n *\n * @param { HTMLElement } dom\n * @param { Array<string> } [list] attribute names to filter\n * @returns { {} | {[propName: string]: any;} }\n */\nutil.filterStyleFromText = function (dom, list = ['width', 'height', 'top', 'left', 'bottom', 'right', 'position', 'z-index', 'padding', 'margin', 'transform']) {\n const _cssText = dom.style.cssText\n if (!_cssText) {\n return {}\n }\n const styleArr = _cssText.replace(/\\s+/g, '').split(';')\n const ret = {}\n const remain = {}\n styleArr.map(item => {\n if (item) {\n const arr = item.split(':')\n if (arr.length > 1) {\n if (checkIsIn(arr[0], list)) {\n ret[arr[0]] = arr[1]\n // dom.style[arr[0]] = 'initial'\n } else {\n remain[arr[0]] = arr[1]\n }\n }\n }\n })\n dom.setAttribute('style', '')\n Object.keys(remain).map(key => {\n // netStyle += `${key}: ${remain[key]};`\n dom.style[key] = remain[key]\n })\n return ret\n}\n\n/**\n *\n * @param { HTMLElement } dom\n * @returns { {} | {[propName: string]: any;} }\n */\nutil.getStyleFromCsstext = function (dom) {\n const _cssText = dom.style.cssText\n if (!_cssText) {\n return {}\n }\n const styleArr = _cssText.replace(/\\s+/g, '').split(';')\n const ret = {}\n styleArr.map(item => {\n if (item) {\n const arr = item.split(':')\n if (arr.length > 1) {\n ret[arr[0]] = arr[1]\n }\n }\n })\n return ret\n}\n\nutil.preloadImg = (url, onload = () => {}, onerror = () => {}) => {\n let img = new window.Image()\n if (img.complete) {\n // 图片已经加载过了,可以使用图片\n // do something here\n // img = null\n onload && onload()\n } else {\n img.onload = (e) => {\n img = null\n onload && onload(e)\n }\n img.onerror = (e) => {\n img = null\n onerror && onerror(e)\n }\n }\n img.src = url\n}\n\nutil.stopPropagation = (e) => {\n if (e) {\n e.stopPropagation()\n e.cancelable && e.preventDefault()\n }\n}\n\nutil.scrollTop = function () {\n return window.pageYOffset ||\n document.documentElement.scrollTop ||\n document.body.scrollTop ||\n 0\n}\n\nutil.scrollLeft = function () {\n return window.pageXOffset ||\n document.documentElement.scrollLeft ||\n document.body.scrollLeft ||\n 0\n}\n\nutil.checkTouchSupport = function () {\n return 'ontouchstart' in window\n}\n\nutil.getBuffered2 = (vbuffered, maxHoleDuration = 0.5) => { // ref: hls.js\n const 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 const diff = a.start - b.start\n if (diff) {\n return diff\n } else {\n return b.end - a.end\n }\n })\n let buffered2 = []\n if (maxHoleDuration) {\n for (let i = 0; i < buffered.length; i++) {\n const buf2len = buffered2.length\n if (buf2len) {\n const buf2end = buffered2[buf2len - 1].end\n if ((buffered[i].start - buf2end) < maxHoleDuration) {\n if (buffered[i].end > buf2end) {\n buffered2[buf2len - 1].end = buffered[i].end\n }\n } else {\n buffered2.push(buffered[i])\n }\n } else {\n buffered2.push(buffered[i])\n }\n }\n } else {\n buffered2 = buffered\n }\n return new XgplayerTimeRange(buffered2)\n}\n\n/**\n * @description css中有zoom的时候,位移会等比缩放,但是元素的宽高不会等比缩放,所以通过该api做统一\n * https://bugs.chromium.org/p/chromium/issues/detail?id=429140#c8\n * @param {Events} e\n * @param {number} zoom\n * @returns\n */\nutil.getEventPos = function (e, zoom = 1) {\n return {\n x: e.x / zoom,\n y: e.y / zoom,\n clientX: e.clientX / zoom,\n clientY: e.clientY / zoom,\n offsetX: e.offsetX / zoom,\n offsetY: e.offsetY / zoom,\n pageX: e.pageX / zoom,\n pageY: e.pageY / zoom\n }\n}\n\nutil.requestAnimationFrame = function (callback) {\n const _fun = window.requestAnimationFrame ||\n // Older versions Chrome/Webkit\n window.webkitRequestAnimationFrame ||\n\n // Firefox < 23\n window.mozRequestAnimationFrame ||\n\n // opera\n window.oRequestAnimationFrame ||\n\n // ie\n window.msRequestAnimationFrame\n if (_fun) {\n return _fun(callback)\n }\n}\n\nutil.cancelAnimationFrame = function (frameId) {\n const _fun = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.cancelRequestAnimationFrame\n _fun && _fun(frameId)\n}\n\nexport default util\n","/**\n * @typedef {{\n * device: 'pc' | 'mobile',\n * browser: 'ie' | 'firefox' | 'chrome' | 'opera' | 'safari',\n * os: {\n * isTablet: boolean,\n * isPhone: boolean,\n * isIpad: boolean,\n * isIos: boolean,\n * isAndroid: boolean,\n * isPc: boolean,\n * isSymbian: boolean,\n * isWindowsPhone: boolean,\n * isFireFox: boolean\n * },\n * isWeixin: boolean\n * }} ISniffer\n */\n\nconst VERSION_REG = {\n android: /(Android)\\s([\\d.]+)/,\n ios: /(Version)\\/([\\d.]+)/\n}\n/**\n * @type ISniffer\n */\nconst sniffer = {\n get device () {\n const r = sniffer.os\n return r.isPc ? 'pc' : 'mobile'\n // return r.isPc ? 'pc' : r.isTablet ? 'tablet' : 'mobile'\n },\n get browser () {\n if (typeof navigator === 'undefined') {\n return ''\n }\n const ua = navigator.userAgent.toLowerCase()\n const reg = {\n ie: /rv:([\\d.]+)\\) like gecko/,\n firefox: /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 get os () {\n if (typeof navigator === 'undefined') {\n return {}\n }\n const ua = navigator.userAgent\n const isWindowsPhone = /(?:Windows Phone)/.test(ua)\n const isSymbian = /(?:SymbianOS)/.test(ua) || isWindowsPhone\n const isAndroid = /(?:Android)/.test(ua)\n const isFireFox = /(?:Firefox)/.test(ua)\n const isTablet = /(?:iPad|PlayBook)/.test(ua) || (isAndroid && !/(?:Mobile)/.test(ua)) || (isFireFox && /(?:Tablet)/.test(ua))\n const isPhone = /(?:iPhone)/.test(ua) && !isTablet\n const isPc = !isPhone && !isAndroid && !isSymbian && !isTablet\n const isIpad = /(?:iPad|PlayBook)/.test(ua)\n return {\n isTablet,\n isPhone,\n isIpad,\n isIos: isPhone || isIpad,\n isAndroid,\n isPc,\n isSymbian,\n isWindowsPhone,\n isFireFox\n }\n },\n\n get osVersion () {\n const ua = navigator.userAgent\n let reg = ''\n // ios\n if (/(?:iPhone)|(?:iPad|PlayBook)/.test(ua)) {\n reg = VERSION_REG.ios\n // android\n } else {\n reg = VERSION_REG.android\n }\n const _match = reg ? reg.exec(ua) : []\n if (_match && _match.length >= 3) {\n const version = _match[2].split('.')\n return version.length > 0 ? parseInt(version[0]) : 0\n }\n return 0\n },\n\n get isWeixin () {\n if (typeof navigator === 'undefined') {\n return false\n }\n const reg = /(micromessenger)\\/([\\d.]+)/\n const match = reg.exec(navigator.userAgent.toLocaleLowerCase())\n if (match) {\n return true\n }\n }\n}\n\nexport default sniffer\n","/**\n * @type {string}\n * */\nexport default __VERSION__\n","// eslint-disable-next-line no-undef\nimport version from './version'\n/**\n * @typedef { import ('./player').default } Player\n */\n\nconst ERROR_TYPE_MAP = {\n 1: 'network',\n 2: 'network',\n 3: 'decoder',\n 4: 'format'\n}\n\nconst ErrorTypes = {\n network: {\n code: 1\n },\n mse: {\n code: 2\n },\n parse: {\n code: 3\n },\n format: {\n code: 4\n },\n decoder: {\n code: 5\n },\n runtime: {\n code: 6\n },\n timeout: {\n code: 7\n },\n other: {\n code: 8\n }\n}\n\n/**\n * @typedef { {\n * playerVersion: string,\n * currentTime: number,\n * duration: number,\n * ended: boolean,\n * readyState: number,\n * networkState: number,\n * src: any,\n * errorType: string,\n * errorCode: number,\n * message: string,\n * mediaError?: {\n * code: number,\n * message?: string\n * },\n * originError?: any,\n * url?: any,\n * [propName: string]: any\n * } } IError\n */\n\n/**\n * @type { IError }\n */\nclass Errors {\n /**\n *\n * @param { Player } player\n * @param { {\n * errorType: string,\n * errorCode: number,\n * errorMessage: string,\n * originError: any,\n * ext: { [propName: string]: any; }\n * } } errorInfo\n * @returns\n */\n constructor (player, errorInfo = { errorType: '', errorCode: 0, errorMessage: '', originError: '', ext: {} }) {\n const ERROR_TYPES = player && player.i18n ? player.i18n.ERROR_TYPES : null\n if (player.video) {\n const mediaError = player.video.error || {}\n const { duration, currentTime, ended, src } = player\n const { readyState, networkState } = player.video\n const r = {\n playerVersion: version,\n currentTime,\n duration,\n ended,\n readyState,\n networkState,\n src,\n errorType: errorInfo.errorType,\n errorCode: errorInfo.errorCode || mediaError.code,\n message: errorInfo.errorMessage || mediaError.message,\n mediaError,\n originError: errorInfo.originError ? errorInfo.originError.stack : ''\n }\n errorInfo.ext && Object.keys(errorInfo.ext).map(key => {\n r[key] = errorInfo.ext[key]\n })\n return r\n } else {\n if (arguments.length > 1) {\n const r = {\n playerVersion: version,\n domain: document.domain\n }\n const arr = ['errorType', 'currentTime', 'duration', 'networkState', 'readyState', 'src', 'currentSrc', 'ended', 'errd', 'errorCode', 'mediaError']\n for (let i = 0; i < arguments.length; i++) {\n r[arr[i]] = arguments[i]\n }\n r.ex = ERROR_TYPES ? (ERROR_TYPES[arguments[0]] || {}).msg : ''// 补充信息\n return r\n }\n }\n }\n}\n\nexport {\n Errors as default,\n ErrorTypes,\n ERROR_TYPE_MAP\n}\n","export const PLAY = 'play'\nexport const PLAYING = 'playing'\nexport const ENDED = 'ended'\nexport const PAUSE = 'pause'\nexport const ERROR = 'error'\nexport const SEEKING = 'seeking'\nexport const SEEKED = 'seeked'\nexport const TIME_UPDATE = 'timeupdate'\nexport const WAITING = 'waiting'\nexport const CANPLAY = 'canplay'\nexport const CANPLAY_THROUGH = 'canplaythrough'\nexport const DURATION_CHANGE = 'durationchange'\nexport const VOLUME_CHANGE = 'volumechange'\nexport const LOADED_DATA = 'loadeddata'\nexport const RATE_CHANGE = 'ratechange'\nexport const PROGRESS = 'progress'\nexport const LOAD_START = 'loadstart'\nexport const EMPTIED = 'emptied'\nexport const STALLED = 'stalled'\nexport const SUSPEND = 'suspend'\nexport const ABORT = 'abort'\n\n// player events\nexport const BUFFER_CHANGE = 'bufferedChange'\nexport const PLAYER_FOCUS = 'focus'\nexport const PLAYER_BLUR = 'blur'\nexport const READY = 'ready'\nexport const URL_NULL = 'urlNull'\nexport const AUTOPLAY_STARTED = 'autoplay_started'\nexport const AUTOPLAY_PREVENTED = 'autoplay_was_prevented'\nexport const COMPLETE = 'complete'\nexport const REPLAY = 'replay'\nexport const DESTROY = 'destroy'\nexport const URL_CHANGE = 'urlchange'\n\n// screen change evnets\nexport const FULLSCREEN_CHANGE = 'fullscreen_change'\nexport const CSS_FULLSCREEN_CHANGE = 'cssFullscreen_change'\nexport const MINI_STATE_CHANGE = 'mini_state_change'\n\nexport const DEFINITION_CHANGE = 'definition_change'\nexport const BEFORE_DEFINITION_CHANGE = 'before_definition_change'\nexport const AFTER_DEFINITION_CHANGE = 'after_definition_change'\n\n// transmuxer events\nexport const SEI_PARSED = 'SEI_PARSED'\n\nexport const RETRY = 'retry'\n\n// 容器宽高变化\nexport const VIDEO_RESIZE = 'video_resize'\n\n// picture-in-picture状态变化\nexport const PIP_CHANGE = 'pip_change'\n\n// rotate change\nexport const ROTATE = 'rotate'\n\n// screenShot\nexport const SCREEN_SHOT = 'screenShot'\n\n// play next\nexport const PLAYNEXT = 'playnext'\n\nexport const SHORTCUT = 'shortcut'\n\nexport const XGLOG = 'xglog'\n\nexport const USER_ACTION = 'user_action'\n\nexport const USER_ACTION1 = 'user_action1'\n","import EventEmitter from 'eventemitter3'\nimport Util from './utils/util'\nimport Sniffer from './utils/sniffer'\nimport Errors, { ERROR_TYPE_MAP } from './error'\nimport { URL_CHANGE, DESTROY, WAITING } from './events'\n/**\n * @typedef { import ('eventemitter3') } EventEmitter\n */\n/**\n * @typedef { {\n * duration: number,\n * currentTime: number,\n * muted: boolean,\n * defaultMuted: boolean,\n * volume: number,\n * playbackRate: number,\n * defaultPlaybackRate: number,\n * autoplay: boolean,\n * readonly paused: boolean,\n * readonly ended: boolean,\n * readonly networkState: number,\n * readonly readyState: number,\n * readonly seeking: boolean,\n * src: any,\n * play: Function,\n * pause: Function,\n * } } IVideoProxy\n */\nconst VIDEO_EVENTS = ['play', 'playing', 'pause', 'ended', 'error', 'seeking', 'seeked',\n 'timeupdate', 'waiting', 'canplay', 'canplaythrough', 'durationchange', 'volumechange',\n 'loadeddata', 'loadstart', 'emptied', 'ratechange', 'progress', 'stalled', 'suspend', 'abort']\n\nfunction emitEvents (eventKey, e) {\n if (!this || !this.emit) {\n return\n }\n if (eventKey === 'error') {\n this.errorHandler(eventKey)\n } else {\n this.emit(eventKey, e)\n }\n}\n\nfunction getHandler (eventName, player) {\n const funName = `on${eventName.charAt(0).toUpperCase()}${eventName.slice(1)}`\n if (player[funName] && typeof player[funName] === 'function') {\n player.on(eventName, player[funName])\n }\n return (e) => {\n const eventKey = eventName\n e.player = player\n e.eventName = eventName\n\n if (eventKey === 'timeupdate') {\n player._currentTime = player.video && player.video.currentTime\n }\n\n if (eventName === 'durationchange') {\n player._duration = player.video.duration\n }\n\n // 执行video相关事件中间件能力\n if (player.videoEventMiddleware[eventName]) {\n const callback = emitEvents.bind(player)\n try {\n player.videoEventMiddleware[eventName].call(player, e, callback)\n } catch (e) {\n emitEvents.call(player, eventKey, e)\n throw e\n }\n } else {\n emitEvents.call(player, eventKey, e)\n }\n }\n}\n/**\n * @extends { EventEmitter }\n */\nclass VideoProxy extends EventEmitter {\n /**\n * @param {any} options\n */\n constructor (options) {\n super(options)\n /**\n * @private\n */\n this._hasStart = false\n /**\n * @private\n */\n this._currentTime = 0\n /**\n * @private\n */\n this._duration = 0\n /**\n * @description 初始化时添加在video上的属性集合\n * @type { {[propName: string]: any; } }\n */\n this.videoConfig = Object.assign({}, {\n controls: false,\n autoplay: options.autoplay,\n playsinline: options.playsinline,\n 'x5-playsinline': options.playsinline,\n 'webkit-playsinline': options.playsinline,\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 }, options.videoConfig, options.videoAttributes)\n /**\n * @description Compatible with WeChat webview\n * \"x5-playsinline' and 'x5-video-player-type' only one needs to exist\n * @doc https://x5.tencent.com/docs/video.html\n */\n const playerType = options['x5-video-player-type'] || options.x5VideoPlayerType\n if (Sniffer.isWeixin && Sniffer.os.isAndroid && playerType) {\n this.videoConfig['x5-video-player-type'] = playerType\n delete this.videoConfig.playsinline\n delete this.videoConfig['webkit-playsinline']\n delete this.videoConfig['x5-playsinline']\n }\n\n if (options.loop) {\n this.videoConfig.loop = 'loop'\n }\n\n /**\n * @type { HTMLVideoElement | HTMLAudioElement | HTMLElement | IVideoProxy | null }\n */\n this.video = Util.createDom(this.videoConfig.mediaType, '', this.videoConfig, '')\n\n if (options.defaultPlaybackRate) {\n this.video.defaultPlaybackRate = this.video.playbackRate = options.defaultPlaybackRate\n }\n\n if (Util.typeOf(options.volume) === 'Number') {\n this.volume = options.volume\n }\n\n if (options.autoplayMuted) {\n this.video.muted = true\n }\n if (options.autoplay) {\n this.video.autoplay = true\n }\n\n /**\n * @private\n */\n this._interval = {}\n /**\n * @readonly\n */\n this.videoEventMiddleware = {}\n this.attachVideoEvents()\n }\n\n /**\n * @description set middleware\n * @param { {[propName: string]: (e: {player: any, eventName: string}, callback: () => void) => any} } middlewares\n */\n setEventsMiddleware (middlewares) {\n Object.keys(middlewares).map(key => {\n this.videoEventMiddleware[key] = middlewares[key]\n })\n }\n\n /**\n * @description remove middleware\n * @param { { [propName: string]: (e: {player: any, eventName: string}, callback: () => void) => any} } middlewares\n */\n removeEventsMiddleware (middlewares) {\n Object.keys(middlewares).map(key => {\n delete this.videoEventMiddleware[key]\n })\n }\n\n /**\n * Add media eventListener to the video object\n * @param { any } [video]\n */\n attachVideoEvents (video) {\n if (!this.evHandlers) {\n /**\n * @private\n */\n this._evHandlers = VIDEO_EVENTS.map(item => {\n return {\n [item]: getHandler(item, this)\n }\n })\n }\n if (!video) {\n video = this.video\n }\n this._evHandlers.map(item => {\n const eventKey = Object.keys(item)[0]\n video.addEventListener(eventKey, item[eventKey], false)\n })\n }\n\n /**\n * @description remove media eventListener from the video object\n * @param { any } [video]\n */\n detachVideoEvents (video) {\n if (!video) {\n video = this.video\n }\n this._evHandlers.map(item => {\n const eventKey = Object.keys(item)[0]\n video.removeEventListener(Object.keys(item)[0], item[eventKey], false)\n })\n }\n\n /**\n * @description Media Error handler\n * @param { string } eventName\n */\n errorHandler (name, error = null) {\n if (this.video && (this.video.error || error)) {\n const _e = this.video.error || error\n const type = _e.code ? ERROR_TYPE_MAP[_e.code] : 'other'\n this.emit(name, new Errors(this, {\n errorType: type,\n errorCode: _e.code,\n errorMessage: _e.message || ''\n }))\n }\n }\n\n destroy () {\n if (this.video) {\n if (this.video.pause) {\n this.video.pause()\n this.video.muted = true\n }\n this.video.removeAttribute('src') // empty source\n this.video.load()\n }\n this._currentTime = 0\n this._duration = 0\n this.videoConfig = null\n for (const k in this._interval) {\n clearInterval(this._interval[k])\n this._interval[k] = null\n }\n this.emit(DESTROY)\n this.detachVideoEvents()\n this._evHandlers.map(item => {\n const eventKey = Object.keys(item)[0]\n const funName = `on${eventKey.charAt(0).toUpperCase()}${eventKey.slice(1)}`\n if (typeof this[funName] === 'function') {\n this.off(eventKey, this[funName])\n }\n })\n this._evHandlers = null\n this.video = null\n this.videoEventMiddleware = {}\n this.removeAllListeners()\n }\n\n /**\n *\n * @returns { Promise<void> | null }\n */\n play () {\n return this.video ? this.video.play() : null\n }\n\n pause () {\n this.video && this.video.pause()\n }\n\n /**\n *\n * @param { string } type\n * @returns { boolean }\n */\n canPlayType (type) {\n return this.video.canPlayType(type)\n }\n\n /**\n *\n * @param { any } [buffered]\n * @returns { Array<number> }\n */\n getBufferedRange (buffered) {\n const range = [0, 0]\n if (!this.video) {\n return range\n }\n if (!buffered) {\n buffered = this.video.buffered\n }\n const currentTime = this.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\n /**\n * @type { boolean }\n * @description 设置/返回 自动播放属性\n */\n set autoplay (isTrue) {\n this.video.autoplay = isTrue\n }\n\n get autoplay () {\n return this.video.autoplay\n }\n\n /**\n * @type { TimeRanges }\n * @description 返回当前缓冲的TimeRange对象集合\n */\n get buffered () {\n return this.video.buffered\n }\n\n /**\n * @type { Array<{start: number, end: number}> }\n * @description 返回当前自定义的缓存列表\n */\n get buffered2 () {\n return Util.getBuffered2(this.video.buffered)\n }\n\n /**\n * @type { {start: number, end: number} }\n */\n get bufferedPoint () {\n const _buffered = this.video.buffered\n const ret = {\n start: 0,\n end: 0\n }\n if (!_buffered || _buffered.length === 0) {\n return ret\n }\n for (let i = 0; i < _buffered.length; i++) {\n if ((_buffered.start(i) <= this.currentTime || _buffered.start(i) < 0.1) && _buffered.end(i) >= this.currentTime) {\n return {\n start: _buffered.start(i),\n end: _buffered.end(i)\n }\n }\n }\n return ret\n }\n\n /**\n * @type { string}\n * @description 设置/返回是否跨域\n * */\n get crossOrigin () {\n return this.video.crossOrigin\n }\n\n set crossOrigin (isTrue) {\n this.video.crossOrigin = isTrue\n }\n\n /**\n * @type { string }\n * @description 设置/返回视频播放地址\n * */\n get currentSrc () {\n return this.video.currentSrc\n }\n\n set currentSrc (src) {\n this.video.currentSrc = src\n }\n\n /**\n * @type { number }\n * @description 设置/返回视频当前播放时间\n * */\n get currentTime () {\n return this.video.currentTime !== undefined ? this.video.currentTime : this._currentTime\n }\n\n set currentTime (time) {\n this.video.currentTime = time\n }\n\n /**\n * @type { boolean }\n * 设置/返回视频默认静音\n * */\n get defaultMuted () {\n return this.video.defaultMuted\n }\n\n set defaultMuted (isTrue) {\n this.video.defaultMuted = isTrue\n }\n\n /**\n * @type { number }\n * @description 返回视频时长,单位:s\n * */\n get duration () {\n return this._duration\n }\n\n /**\n * @type { boolean }\n * @description 回视频是否播放结束\n * */\n get ended () {\n return this.video.ended\n }\n\n /**\n * @type { MediaError }\n * @description the player current error\n */\n get error () {\n return this.video.error\n }\n\n /**\n * @type { string }\n * @description return error description text\n */\n get errorNote () {\n const err = this.video.error\n if (!err) {\n return ''\n }\n const status = [\n 'MEDIA_ERR_ABORTED',\n 'MEDIA_ERR_NETWORK',\n 'MEDIA_ERR_DECODE',\n 'MEDIA_ERR_SRC_NOT_SUPPORTED'\n ]\n return status[err.code - 1]\n }\n\n /**\n * @type { boolean }\n * @description 否开启了循环播放\n */\n get loop () {\n return this.video.loop\n }\n\n set loop (isTrue) {\n this.video.loop = isTrue\n }\n\n /**\n * @type { boolean }\n * @description 静音\n */\n get muted () {\n return this.video.muted\n }\n\n set muted (isTrue) {\n this.video.muted = isTrue\n }\n\n /**\n * @type { number }\n * @description 返回视频的当前网络状态\n */\n get networkState () {\n return this.video.networkState\n }\n\n /**\n * @type { boolean }\n * @description 回当前视频是否是暂停状态\n */\n get paused () {\n return this.video.paused\n }\n\n /**\n * @type { number }\n * @description 返回/设置倍速\n */\n get playbackRate () {\n return this.video.playbackRate\n }\n\n set playbackRate (rate) {\n this.video.defaultPlaybackRate = rate\n this.video.playbackRate = rate\n }\n\n /**\n * @type { TimeRanges }\n */\n get played () {\n return this.video.played\n }\n\n /**\n * @type { boolean }\n */\n get preload () {\n return this.video.preload\n }\n\n set preload (isTrue) {\n this.video.preload = isTrue\n }\n\n /**\n * @type { string }\n * @description 回视频的就绪状态\n */\n get readyState () {\n return this.video.readyState\n }\n\n /**\n * @type { boolean }\n * @description 当前视频是否可以seek\n */\n get seekable () {\n return this.video.seekable\n }\n\n /**\n * @type { boolean }\n * @description 当前视频是否处于seeking状态下\n */\n get seeking () {\n return this.video.seeking\n }\n\n /**\n * @type { any }\n * @description 设置/返回当前视频的地址\n */\n get src () {\n return this.video.src\n }\n\n set src (url) {\n this.emit(URL_CHANGE, url)\n this.emit(WAITING)\n // this.video.pause()\n this._currentTime = 0\n this._duration = 0\n // Some firefox versions firefox Cannot recognize currentSrc of type Blob\n if (/^blob/.test(this.video.currentSrc) || /^blob/.test(this.video.src)) { // has transmuxer core\n this.onWaiting()\n return\n }\n this.video.src = url\n }\n\n /**\n * @type { number }\n * @description 设置/返回视频的音量\n */\n get volume () {\n return this.video.volume\n }\n\n set volume (vol) {\n this.video.volume = vol\n }\n\n /** ******************* 以下api只有申明作用,具体实现依赖EventEmitter ******************/\n\n /**\n *\n * @param { string } event\n * @param { any } [data]\n * @returns\n */\n emit (event, data, ...args) {\n super.emit(event, data, ...args)\n }\n\n /**\n *\n * @param { string } event\n * @param { (data?: any) => any } callback\n * @returns\n */\n on (event, callback, ...args) {\n super.on(event, callback, ...args)\n }\n\n /**\n *\n * @param { string } event\n * @param { (data?: any) => any } callback\n * @returns\n */\n once (event, callback, ...args) {\n super.once(event, callback, ...args)\n }\n\n /**\n *\n * @param { string } event\n * @param { (data?: any) => any } callback\n * @returns\n */\n off (event, callback, ...args) {\n super.off(event, callback, ...args)\n }\n\n offAll () {\n super.removeAllListeners()\n }\n}\n\nexport default VideoProxy\n","class INDEXDB {\n constructor (mydb = { name: 'xgplayer', version: 1, db: null, ojstore: { name: 'xg-m4a', keypath: 'vid' } }) {\n this.indexedDB = window.indexedDB || window.webkitindexedDB\n this.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange // 键范围\n this.myDB = mydb\n }\n\n openDB (callback) {\n // 建立或打开数据库,建立对象存储空间(ObjectStore)\n const self = this\n const version = this.myDB.version || 1\n const request = self.indexedDB.open(self.myDB.name, version)\n request.onerror = function (e) {\n // console.log('e.currentTarget.error.message')\n }\n request.onsuccess = e => {\n this.myDB.db = e.target.result\n // console.log('成功建立并打开数据库:' + this.myDB.name + ' version' + this.myDB.version)\n callback.call(self)\n }\n request.onupgradeneeded = e => {\n const db = e.target.result\n // eslint-disable-next-line no-unused-vars\n const transaction = e.target.transaction\n // eslint-disable-next-line no-unused-vars\n let store\n if (!db.objectStoreNames.contains(self.myDB.ojstore.name)) {\n // 没有该对象空间时创建该对象空间\n // eslint-disable-next-line no-unused-vars\n store = db.createObjectStore(self.myDB.ojstore.name, { keyPath: self.myDB.ojstore.keypath })\n // console.log('成功建立对象存储空间:' + this.myDB.ojstore.name)\n }\n }\n }\n\n deletedb () {\n // 删除数据库\n const self = this\n self.indexedDB.deleteDatabase(this.myDB.name)\n // console.log(this.myDB.name + '数据库已删除')\n }\n\n closeDB () {\n // 关闭数据库\n this.myDB.db.close()\n // console.log('数据库已关闭')\n }\n\n addData (storename, data) {\n // 添加数据,重复添加会报错\n const store = this.myDB.db.transaction(storename, 'readwrite').objectStore(storename)\n let request\n for (let i = 0; i < data.length; i++) {\n request = store.add(data[i])\n request.onerror = function () {\n // console.error('add添加数据库中已有该数据')\n }\n request.onsuccess = function () {\n // console.log('add添加数据已存入数据库')\n }\n }\n }\n\n putData (storename, data) {\n // 添加数据,重复添加会更新原有数据\n const store = this.myDB.db.transaction(storename, 'readwrite').objectStore(storename)\n let request\n for (let i = 0; i < data.length; i++) {\n request = store.put(data[i])\n request.onerror = function () {\n // console.error('put添加数据库中已有该数据')\n }\n request.onsuccess = function () {\n // console.log('put添加数据已存入数据库')\n }\n }\n }\n\n getDataByKey (storename, key, callback) {\n const self = this\n // 根据存储空间的键找到对应数据\n const store = this.myDB.db.transaction(storename, 'readwrite').objectStore(storename)\n const request = store.get(key)\n request.onerror = function () {\n // console.error('getDataByKey error')\n callback.call(self, null)\n }\n request.onsuccess = function (e) {\n const result = e.target.result\n // console.log('查找数据成功')\n callback.call(self, result)\n }\n }\n\n deleteData (storename, key) {\n // 删除某一条记录\n const store = this.myDB.db.transaction(storename, 'readwrite').objectStore(storename)\n store.delete(key)\n // console.log('已删除存储空间' + storename + '中' + key + '记录')\n }\n\n clearData (storename) {\n // 删除存储空间全部记录\n const store = this.myDB.db.transaction(storename, 'readwrite').objectStore(storename)\n store.clear()\n // console.log('已删除存储空间' + storename + '全部记录')\n }\n}\n\nexport default INDEXDB\n","export const FULLSCREEN_EVENTS = ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange']\n\nexport const GET_FULLSCREEN_API = ['requestFullscreen', 'webkitRequestFullscreen', 'mozRequestFullScreen', 'msRequestFullscreen']\n\nexport const EXIT_FULLSCREEN_API = ['exitFullscreen', 'webkitExitFullscreen', 'mozCancelFullScreen', 'msExitFullscreen']\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","function callHandler (obj, handler, next, ...args) {\n const ret = handler.call(obj, ...args)\n if (!next || typeof next !== 'function') {\n return\n }\n if (ret && ret.then) {\n ret.then((...args) => {\n next.call(obj, ...args)\n })\n } else {\n next.call(obj, ...args)\n }\n}\n\n/**\n * 给某个处理函数添加hook能力\n * @param { string } hookName\n * @param { Function } handler\n * @param { { pre?: any, next?:any } } preset\n * {\n * pre: () => { // run beafore hook},\n * next: () => { // run after hook return}\n * }\n */\nfunction hook (hookName, handler, preset = { pre: null, next: null }) {\n if (!this.__hooks) {\n this.__hooks = {}\n }\n !this.__hooks[hookName] && (this.__hooks[hookName] = null)\n return function () {\n if (preset.pre) {\n try {\n preset.pre.call(this, ...arguments)\n } catch (e) {\n e.message = `[pluginName: ${this.pluginName}:${hookName}:pre error] >> ${e.message}`\n throw e\n }\n }\n if (this.__hooks && this.__hooks[hookName]) {\n try {\n const preRet = this.__hooks[hookName].call(this, this, ...arguments)\n if (preRet) {\n if (preRet.then) {\n preRet.then((isContinue) => {\n if (isContinue !== false) {\n callHandler(this, handler, preset.next, ...arguments)\n // handler.call(this, ...arguments)\n }\n }).catch(e => {\n throw e\n })\n } else {\n callHandler(this, handler, preset.next, ...arguments)\n // handler.call(this, ...arguments)\n }\n } else if (preRet === undefined) {\n callHandler(this, handler, preset.next, ...arguments)\n }\n } catch (e) {\n e.message = `[pluginName: ${this.pluginName}:${hookName}] >> ${e.message}`\n throw e\n }\n } else {\n callHandler(this, handler, preset.next, ...arguments)\n }\n }.bind(this)\n}\n\n/**\n * add hooks\n * @param { string } hookName\n * @param { Function } handler\n */\nfunction useHooks (hookName, handler) {\n const { __hooks } = this\n if (!__hooks) {\n return\n }\n // eslint-disable-next-line no-prototype-builtins\n if (!__hooks.hasOwnProperty(hookName)) {\n console.warn(`has no supported hook which name [${hookName}]`)\n return false\n }\n __hooks && (__hooks[hookName] = handler)\n return true\n}\n\n/**\n * remove hook\n * @param { string } hookName\n * @param { (plugin: any, ..args) => {} } handler\n * @returns void\n */\nfunction removeHooks (hookName, handler) {\n const { __hooks } = this\n if (!__hooks) {\n return\n }\n __hooks[hookName] = null\n}\n\n/**\n * Add hooks to a plugin\n * @param { string } pluginName\n * @param {...any} args\n */\nfunction usePluginHooks (pluginName, ...args) {\n if (!this.plugins || !this.plugins[pluginName.toLowerCase()]) {\n return\n }\n const plugin = this.plugins[pluginName.toLowerCase()]\n return plugin.useHooks && plugin.useHooks(...args)\n}\n\n/**\n * hook decorator, add hooks props for for an instance\n * @param { any } instance\n * @param { Array<string> } [hookNames]\n */\nfunction hooksDescriptor (instance, presetHooks = []) {\n instance.__hooks = {}\n presetHooks && presetHooks.map(item => {\n instance.__hooks[item] = null\n })\n Object.defineProperty(instance, 'hooks', {\n get: () => {\n return instance.__hooks && Object.keys(instance.__hooks).map(key => {\n if (instance.__hooks[key]) {\n return key\n }\n })\n }\n })\n}\n\nfunction delHooksDescriptor (instance) {\n instance.__hooks = null\n}\n\nfunction runHooks (obj, hookName, handler, ...args) {\n if (obj.__hooks && obj.__hooks[hookName]) {\n const ret = obj.__hooks[hookName].call(obj, obj, ...args)\n if (ret && ret.then) {\n ret.then((data) => {\n return data === false ? null : handler.call(obj, obj, ...args)\n }).catch(e => {\n console.warn(`[runHooks]${hookName} reject`, e.message)\n })\n } else if (ret !== false) {\n return handler.call(obj, obj, ...args)\n }\n } else {\n return handler.call(obj, obj, ...args)\n }\n}\n\nexport {\n hooksDescriptor as default,\n hook,\n useHooks,\n usePluginHooks,\n removeHooks,\n delHooksDescriptor,\n runHooks\n}\n","import Util from '../utils/util'\nimport Sniffer from '../utils/sniffer'\nimport Errors from '../error'\nimport * as Events from '../events'\nimport XG_DEBUG from '../utils/debug'\nimport hooksDescriptor, { hook, useHooks, delHooksDescriptor } from '../plugin/hooksDescriptor'\n\nfunction showErrorMsg (pluginName, msg) {\n XG_DEBUG.logError(`[${pluginName}] event or callback cant be undefined or null when call ${msg}`)\n}\n\n/**\n * @typedef { import ('../player').default } Player\n */\n\n/**\n * @typedef { import ('../defaultConfig').IPlayerOptions } IPlayerOptions\n */\n\n/**\n * @typedef {{\n * index?: number,\n * player: Player,\n * pluginName: string,\n * config: {\n * [propName: string]: any\n * },\n * [propName: string]: any;\n * }} IBasePluginOptions\n */\nclass BasePlugin {\n static defineGetterOrSetter (Obj, map) {\n for (const key in map) {\n Object.defineProperty(Obj, key, map[key])\n }\n }\n\n /**\n * @type { { [propName: string]: any } }\n */\n static get defaultConfig () {\n return {}\n }\n\n /**\n * @type { string }\n */\n static get pluginName () {\n return 'pluginName'\n }\n\n /**\n * @param { IBasePluginOptions } args\n */\n constructor (args) {\n if (Util.checkIsFunction(this.beforeCreate)) {\n this.beforeCreate(args)\n }\n hooksDescriptor(this)\n /**\n * @private\n */\n this.__args = args\n /**\n * @private\n */\n this.__events = {}\n this.config = args.config || {}\n /**\n * @readonly\n * @type { Player }\n */\n this.player = null\n /**\n * @readonly\n * @type { IPlayerOptions }\n */\n this.playerConfig = {}\n /**\n * @readonly\n * @type {string}\n */\n this.pluginName = ''\n this.__init(args)\n }\n\n /**\n * @param { IBasePluginOptions } args\n */\n beforeCreate (args) {}\n afterCreate () {}\n beforePlayerInit () {}\n onPluginsReady () {}\n afterPlayerInit () {}\n destroy () {}\n\n /**\n * @private\n * @param { any } args\n */\n __init (args) {\n this.player = args.player\n this.playerConfig = args.player && args.player.config\n this.pluginName = args.pluginName ? args.pluginName.toLowerCase() : this.constructor.pluginName.toLowerCase()\n this.logger = args.player && args.player.logger\n }\n\n /**\n * 更新语言\n * @param { string } lang\n */\n updateLang (lang) {\n if (!lang) {\n lang = this.lang\n }\n }\n\n /**\n * @type { string }\n */\n get lang () {\n return this.player.lang\n }\n\n get i18n () {\n return this.player.i18n\n }\n\n get i18nKeys () {\n return this.player.i18nKeys\n }\n\n /**\n *\n * @param { string | Array<string> } event\n * @param { Function } callback\n * @returns\n */\n on (event, callback) {\n if (!event || !callback || !this.player) {\n showErrorMsg(this.pluginName, 'plugin.on(event, callback)')\n return\n }\n if (typeof event === 'string') {\n this.__events[event] = callback\n this.player.on(event, callback)\n } else if (Array.isArray(event)) {\n event.forEach((item) => {\n this.__events[item] = callback\n this.player.on(item, callback)\n })\n }\n }\n\n /**\n *\n * @param { string } event\n * @param { Function } callback\n * @returns\n */\n once (event, callback) {\n if (!event || !callback || !this.player) {\n showErrorMsg(this.pluginName, 'plugin.once(event, callback)')\n return\n }\n this.player.once(event, callback)\n }\n\n /**\n *\n * @param { string } event\n * @param { Function } callback\n * @returns\n */\n off (event, callback) {\n if (!event || !callback || !this.player) {\n showErrorMsg(this.pluginName, 'plugin.off(event, callback)')\n return\n }\n if (typeof event === 'string') {\n delete this.__events[event]\n this.player.off(event, callback)\n } else if (Array.isArray(event)) {\n event.forEach((item) => {\n delete this.__events[event]\n this.player.off(item, callback)\n })\n }\n }\n\n offAll () {\n Object.keys(this.__events).map(item => {\n this.__events[item] && this.off(item, this.__events[item])\n item && delete this.__events[item]\n })\n this.__events = {}\n }\n\n /**\n *\n * @param { string } event\n * @param { any } [res]\n * @returns\n */\n emit (event, res) {\n if (!this.player) {\n return\n }\n this.player.emit(event, res)\n }\n\n emitUserAction (event, action, props = [], ext = {}) {\n if (!action || !event) {\n return\n }\n const eventType = Util.typeOf(event) === 'String' ? event : (event.type || '')\n event = new Event(eventType)\n if (Util.typeOf(props) !== 'Array') {\n props = [props]\n }\n this.emit(Events.USER_ACTION, {\n action,\n pluginName: this.pluginName,\n currentTime: this.player.currentTime,\n duration: this.player.duration,\n ended: this.player.ended,\n event,\n props,\n ...ext\n })\n }\n\n /**\n * @param { string } hookName\n * @param { Function } handler\n * @param { {pre: Function| null , next: Function | null} } preset\n * @returns\n */\n hook (hookName, handler, preset = { pre: null, next: null }) {\n // eslint-disable-next-line no-return-assign\n return hook.call(this, ...arguments)\n }\n\n /**\n * @param { string } hookName\n * @param { (plugin: any, ...args) => boolean | Promise<any> } handler\n * @param {...any} args\n * @returns { boolean } isSuccess\n */\n useHooks (hookName, handler, ...args) {\n return useHooks.call(this, ...arguments)\n }\n\n /**\n * 注册子插件\n * @param { any } plugin\n * @param { any } [options]\n * @param { string } [name]\n * @returns { any }\n */\n registerPlugin (plugin, options = {}, name = '') {\n if (!this.player) {\n return\n }\n name && (options.pluginName = name)\n return this.player.registerPlugin({ plugin, options })\n }\n\n /**\n *\n * @param { string } name\n * @returns { any | null }\n */\n getPlugin (name) {\n return this.player ? this.player.getPlugin(name) : null\n }\n\n __destroy () {\n const player = this.player\n const pluginName = this.pluginName\n this.offAll()\n Util.clearAllTimers(this)\n if (Util.checkIsFunction(this.destroy)) {\n this.destroy()\n }\n\n ['player', 'playerConfig', 'pluginName', 'logger', '__args', '__hooks'].map(item => {\n this[item] = null\n })\n player.unRegisterPlugin(pluginName)\n delHooksDescriptor(this)\n }\n}\nexport {\n BasePlugin as default,\n Util,\n Sniffer,\n Errors,\n Events,\n XG_DEBUG\n}\n","var DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n","var closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n","/**\n* an ui Plugin class\n*\n**/\nimport BasePlugin, { Util, XG_DEBUG } from './basePlugin'\nimport delegate from 'delegate'\n\nconst ROOT_TYPES = {\n CONTROLS: 'controls',\n ROOT: 'root'\n}\n\nconst POSITIONS = {\n ROOT: 'root',\n ROOT_LEFT: 'rootLeft',\n ROOT_RIGHT: 'rootRight',\n ROOT_TOP: 'rootTop',\n CONTROLS_LEFT: 'controlsLeft',\n CONTROLS_RIGTH: 'controlsRight',\n CONTROLS_RIGHT: 'controlsRight',\n CONTROLS_CENTER: 'controlsCenter',\n CONTROLS: 'controls'\n}\n\n/**\n * Check if the url is a link address\n * @param { string } str\n */\nfunction isUrl (str) {\n if (!str) {\n return false\n }\n return str.indexOf && /^http/.test(str)\n}\n\nfunction mergeIconClass (icon, classname) {\n if (typeof icon === 'object' && icon.class && typeof icon.class === 'string') {\n return `${classname} ${icon.class}`\n }\n return classname\n}\n\nfunction mergeIconAttr (icon, attr) {\n if (typeof icon === 'object' && icon.attr && typeof icon.attr === 'object') {\n Object.keys(icon.attr).map(key => {\n attr[key] = icon.attr[key]\n })\n }\n return attr\n}\n\nfunction createIcon (icon, key, classname = '', attr = {}, pluginName = '') {\n let newIcon = null\n if (icon instanceof window.Element) {\n Util.addClass(icon, classname)\n Object.keys(attr).map(key => {\n icon.setAttribute(key, attr[key])\n })\n return icon\n }\n\n if (isUrl(icon) || isUrl(icon.url)) {\n attr.src = isUrl(icon) ? icon : (icon.url || '')\n newIcon = Util.createDom(icon.tag || 'img', '', attr, `xg-img ${classname}`)\n return newIcon\n }\n\n if (typeof icon === 'function') {\n try {\n newIcon = icon()\n if (newIcon instanceof window.Element) {\n Util.addClass(newIcon, classname)\n Object.keys(attr).map(key => {\n newIcon.setAttribute(key, attr[key])\n })\n return newIcon\n } else {\n XG_DEBUG.logWarn(`warn>>icons.${key} in config of plugin named [${pluginName}] is a function mast return an Element Object`)\n }\n return null\n } catch (e) {\n XG_DEBUG.logError(`Plugin named [${pluginName}]:createIcon`, e)\n return null\n }\n }\n\n if (typeof icon === 'string') {\n return Util.createDomFromHtml(icon, attr, classname)\n }\n XG_DEBUG.logWarn(`warn>>icons.${key} in config of plugin named [${pluginName}] is invalid`)\n return null\n}\n\nfunction registerIconsObj (iconsConfig, plugin) {\n const _icons = plugin.config.icons || plugin.playerConfig.icons\n Object.keys(iconsConfig).map(key => {\n const orgIcon = iconsConfig[key]\n let classname = orgIcon && orgIcon.class ? orgIcon.class : ''\n let attr = orgIcon && orgIcon.attr ? orgIcon.attr : {}\n let newIcon = null\n if (_icons && _icons[key]) {\n classname = mergeIconClass(_icons[key], classname)\n attr = mergeIconAttr(_icons[key], attr)\n newIcon = createIcon(_icons[key], key, classname, attr, plugin.pluginName)\n }\n if (!newIcon && orgIcon) {\n newIcon = createIcon((orgIcon.icon ? orgIcon.icon : orgIcon), attr, classname, {}, plugin.pluginName)\n }\n plugin.icons[key] = newIcon\n })\n}\n\nfunction registerTextObj (textConfig, plugin) {\n Object.keys(textConfig).map((key) => {\n Object.defineProperty(plugin.langText, key, {\n get: () => {\n const lang = plugin.lang\n return textConfig[key][lang] || textConfig[key].zh\n }\n })\n })\n}\n/**\n * @typedef { import ('../player').default } Player\n */\n\n/**\n * @typedef {{\n * index?: number,\n * player: Player,\n * pluginName: string,\n * config: {\n * [propName: string]: any\n * },\n * root?: HTMLElement,\n * position?: string,\n * [propName: string]: any\n * }} IPluginOptions\n*/\nclass Plugin extends BasePlugin {\n /**\n * 插入dom结构\n * @param { String | HTMLElement } html html字符串或者dom\n * @param { HTMLElement } parent\n * @param { number } index\n * @returns { HTMLElement }\n */\n static insert (html, parent, index = 0) {\n const len = parent.children.length\n const insertIdx = Number(index)\n const isDomElement = html instanceof window.Node\n\n if (len) {\n let i = 0\n let coordinate = null\n let mode = ''\n for (;i < len; i++) {\n coordinate = parent.children[i]\n const curIdx = Number(coordinate.getAttribute('data-index'))\n if (curIdx >= insertIdx) {\n mode = 'beforebegin'\n break\n } else if (curIdx < insertIdx) {\n mode = 'afterend'\n }\n }\n\n if (isDomElement) {\n if (mode === 'afterend') {\n // as last element\n parent.appendChild(html)\n } else {\n parent.insertBefore(html, coordinate)\n }\n } else {\n coordinate.insertAdjacentHTML(mode, html)\n }\n return mode === 'afterend' ? parent.children[parent.children.length - 1] : parent.children[i]\n } else {\n isDomElement ? parent.appendChild(html) : parent.insertAdjacentHTML('beforeend', html)\n return parent.children[parent.children.length - 1]\n }\n }\n\n static get defaultConfig () {\n return {}\n }\n\n /**\n *\n * @param { HTMLElement } root\n * @param { String } querySelector\n * @param { String | Array<String> } eventType\n * @param { Function } callback\n * @param { boolean } [capture=false]\n * @returns\n */\n static delegate (root, querySelector, eventType, callback, capture = false) {\n const dels = []\n if (root instanceof window.Node && typeof callback === 'function') {\n if (Array.isArray(eventType)) {\n eventType.forEach((item) => {\n const ret = delegate(root, querySelector, item, callback, capture)\n ret.key = `${querySelector}_${item}`\n dels.push(ret)\n })\n } else {\n const ret = delegate(root, querySelector, eventType, callback, capture)\n ret.key = `${querySelector}_${eventType}`\n dels.push(ret)\n }\n }\n return dels\n }\n\n static get ROOT_TYPES () {\n return ROOT_TYPES\n }\n\n static get POSITIONS () {\n return POSITIONS\n }\n\n /**\n * @param { IPluginOptions } args\n */\n constructor (args = {}) {\n super(args)\n /**\n * @private\n */\n this.__delegates = []\n }\n\n /**\n * @private\n */\n __init (args) {\n super.__init(args)\n if (!args.root) {\n return\n }\n const _parent = args.root\n let _el = null\n /**\n * @readonly\n */\n this.icons = {}\n /**\n * @readonly\n * @type { HTMLElement }\n */\n this.root = null\n /**\n * @readonly\n * @type { HTMLElement }\n */\n this.parent = null\n\n const _orgicons = this.registerIcons() || {}\n registerIconsObj(_orgicons, this)\n /**\n * @readonly\n */\n this.langText = {}\n const defaultTexConfig = this.registerLanguageTexts() || {}\n registerTextObj(defaultTexConfig, this)\n let renderStr = ''\n try {\n renderStr = this.render()\n } catch (e) {\n XG_DEBUG.logError(`Plugin:${this.pluginName}:render`, e)\n throw (new Error(`Plugin:${this.pluginName}:render:${e.message}`))\n }\n if (renderStr) {\n _el = Plugin.insert(renderStr, _parent, args.index)\n _el.setAttribute('data-index', args.index)\n } else if (args.tag) {\n _el = Util.createDom(args.tag, '', args.attr, args.name)\n _el.setAttribute('data-index', args.index)\n _parent.appendChild(_el)\n } else {\n return\n }\n\n this.root = _el\n this.parent = _parent\n\n // Plugin.defineGetterOrSetter(this, {\n // /**\n // * @readonly\n // * @type { HTMLElement }\n // */\n // root: {\n // get: () => {\n // return _el\n // },\n // configurable: true\n // },\n // /**\n // * @readonly\n // * @type { HTMLElement }\n // */\n // parent: {\n // get: () => {\n // return _parent\n // },\n // configurable: true\n // }\n // })\n\n const attr = this.config.attr || {}\n const style = this.config.style || {}\n\n this.setAttr(attr)\n this.setStyle(style)\n if (this.config.index) {\n this.root.setAttribute('data-index', this.config.index)\n }\n this.__registerChildren()\n }\n\n /**\n * @private\n */\n __registerChildren () {\n if (!this.root) {\n return\n }\n /**\n * @private\n */\n this._children = []\n const children = this.children()\n if (children && typeof children === 'object') {\n if (Object.keys(children).length > 0) {\n Object.keys(children).map(item => {\n const name = item\n const _plugin = children[name]\n const options = {\n root: this.root\n }\n // eslint-disable-next-line no-unused-vars\n let config, Plugin\n if (typeof _plugin === 'function') {\n config = this.config[name] || {}\n Plugin = _plugin\n } else if (typeof _plugin === 'object' && typeof _plugin.plugin === 'function') {\n config = _plugin.options ? Util.deepCopy((this.config[name] || {}), _plugin.options) : (this.config[name] || {})\n Plugin = _plugin.plugin\n }\n options.config = config\n config.index !== undefined && (options.index = config.index)\n config.root && (options.root = config.root)\n this.registerPlugin(Plugin, options, name)\n })\n }\n }\n }\n\n updateLang (lang) {\n if (!lang) {\n lang = this.lang\n }\n function checkChildren (node, callback) {\n for (let i = 0; i < node.children.length; i++) {\n if (node.children[i].children.length > 0) {\n checkChildren(node.children[i], callback)\n } else {\n callback(node.children[i])\n }\n }\n }\n const { root, i18n, langText } = this\n if (root) {\n checkChildren(root, (node) => {\n const langKey = node.getAttribute && node.getAttribute('lang-key')\n if (!langKey) {\n return\n }\n const langTextShow = i18n[langKey.toUpperCase()] || langText[langKey]\n if (langTextShow) {\n node.innerHTML = typeof langTextShow === 'function' ? langTextShow(lang) : langTextShow\n }\n })\n }\n }\n\n get lang () {\n return this.player.lang\n }\n\n changeLangTextKey (dom, key = '') {\n const i18n = this.i18n || {}\n const langText = this.langText\n dom.setAttribute && dom.setAttribute('lang-key', key)\n const text = i18n[key.toUpperCase()] || langText[key]\n if (text) {\n dom.innerHTML = text\n }\n }\n\n plugins () {\n return this._children\n }\n\n children () {\n return {}\n }\n\n registerPlugin (plugin, options = {}, name = '') {\n options.root = options.root || this.root\n const _c = super.registerPlugin(plugin, options, name)\n this._children.push(_c)\n return _c\n }\n\n registerIcons () {\n return {}\n }\n\n registerLanguageTexts () {\n return {}\n }\n\n /**\n *\n * @param { string } qs\n * @returns { HTMLElement | null }\n */\n find (qs) {\n if (!this.root) {\n return\n }\n return this.root.querySelector(qs)\n }\n\n /**\n * 绑定事件\n * @param { string | Array<string> } querySelector\n * @param { string | Function } eventType\n * @param { Function } [callback]\n */\n bind (querySelector, eventType, callback) {\n if (arguments.length < 3 && typeof eventType === 'function') {\n if (Array.isArray(querySelector)) {\n querySelector.forEach((item) => {\n this.bindEL(item, eventType)\n })\n } else {\n this.bindEL(querySelector, eventType)\n }\n } else {\n const ret = Plugin.delegate.call(this, this.root, querySelector, eventType, callback)\n this.__delegates = this.__delegates.concat(ret)\n }\n }\n\n /**\n * 绑定事件\n * @param { string | Array<string> } querySelector\n * @param { string | Function } eventType\n */\n unbind (querySelector, eventType) {\n if (arguments.length < 3 && typeof eventType === 'function') {\n if (Array.isArray(querySelector)) {\n querySelector.forEach((item) => {\n this.unbindEL(item, eventType)\n })\n } else {\n this.unbindEL(querySelector, eventType)\n }\n } else {\n const key = `${querySelector}_${eventType}`\n for (let i = 0; i < this.__delegates.length; i++) {\n if (this.__delegates[i].key === key) {\n this.__delegates[i].destroy()\n this.__delegates.splice(i, 1)\n break\n }\n }\n }\n }\n\n /**\n * 给插件设置样式\n * @param { string | {[propName: string]: any} } name\n * @param { ? | any } value\n * @returns\n */\n setStyle (name, value) {\n if (!this.root) {\n return\n }\n if (Util.typeOf(name) === 'String') {\n return (this.root.style[name] = value)\n } else if (Util.typeOf(name) === 'Object') {\n Object.keys(name).map(key => {\n this.root.style[key] = name[key]\n })\n }\n }\n\n /**\n * 给插件根节点设置属性\n * @param { string | {[propName: string]: any} } name\n * @param { ? | any } value\n * @returns\n */\n setAttr (name, value) {\n if (!this.root) {\n return\n }\n if (Util.typeOf(name) === 'String') {\n return this.root.setAttribute(name, value)\n } else if (Util.typeOf(name) === 'Object') {\n Object.keys(name).map(key => {\n this.root.setAttribute(key, name[key])\n })\n }\n }\n\n /**\n *\n * @param { string } htmlStr\n * @param { Function } [callback]\n * @returns\n */\n setHtml (htmlStr, callback) {\n if (!this.root) {\n return\n }\n this.root.innerHTML = htmlStr\n if (typeof callback === 'function') {\n callback()\n }\n }\n\n /**\n *\n * @param { string } event\n * @param { Function } eventHandle\n * @param { boolean } [isBubble=false]\n * @returns\n */\n bindEL (event, eventHandle, isBubble = false) {\n if (!this.root) {\n return\n }\n if (`on${event}` in this.root && typeof eventHandle === 'function') {\n this.root.addEventListener(event, eventHandle, isBubble)\n }\n }\n\n /**\n *\n * @param { string } event\n * @param { Function } eventHandle\n * @param { boolean } [isBubble]\n * @returns\n */\n unbindEL (event, eventHandle, isBubble = false) {\n if (!this.root) {\n return\n }\n if (`on${event}` in this.root && typeof eventHandle === 'function') {\n this.root.removeEventListener(event, eventHandle, isBubble)\n }\n }\n\n /**\n *\n * @param { string } [value]\n * @returns\n */\n show (value) {\n if (!this.root) {\n return\n }\n this.root.style.display = value !== undefined ? value : 'block'\n const cs = window.getComputedStyle(this.root, null)\n const cssDisplayValue = cs.getPropertyValue('display')\n if (cssDisplayValue === 'none') {\n return (this.root.style.display = 'block')\n }\n }\n\n hide () {\n this.root && (this.root.style.display = 'none')\n }\n\n /**\n *\n * @param { string | HTMLElement } pdom\n * @param { HTMLElement} child\n * @returns { HTMLElement | nul }\n */\n appendChild (pdom, child) {\n if (arguments.length < 2 && arguments[0] instanceof window.Element) {\n return this.root.appendChild(arguments[0])\n }\n if (!child || !(child instanceof window.Element)) {\n return null\n }\n try {\n if (typeof pdom === 'string') {\n return this.find(pdom).appendChild(child)\n } else {\n return pdom.appendChild(child)\n }\n } catch (err) {\n XG_DEBUG.logError('Plugin:appendChild', err)\n return null\n }\n }\n\n /**\n *\n * @returns { string | HTMLElement }\n */\n render () {\n return ''\n }\n\n destroy () {}\n\n __destroy () {\n const { player } = this\n this.__delegates.map(item => {\n item.destroy()\n })\n this.__delegates = []\n // destroy the sub-plugin instance\n if (this._children instanceof Array) {\n this._children.map(item => {\n player.unRegisterPlugin(item.pluginName)\n })\n this._children = null\n }\n if (this.root) {\n // eslint-disable-next-line no-prototype-builtins\n if (this.root.hasOwnProperty('remove')) {\n this.root.remove()\n } else if (this.root.parentNode) {\n this.root.parentNode.removeChild(this.root)\n }\n }\n\n super.__destroy()\n this.icons = {};\n ['root', 'parent'].map(item => {\n this[item] = null\n })\n }\n}\n\nexport {\n Plugin as default,\n ROOT_TYPES,\n POSITIONS\n}\n","'use strict';\nvar fails = require('../internals/fails');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n}\n","class ResizeObserver {\n constructor () {\n this.__handlers = []\n this.timeStamp = 0\n this.observer = null\n if (!window.ResizeObserver) {\n return\n }\n try {\n this.observer = new window.ResizeObserver((entries) => {\n const t = new Date().getTime()\n if (t - this.timeStamp < 100) {\n return\n }\n this.timeStamp = t\n this.__trigger(entries)\n })\n this.timeStamp = new Date().getTime()\n } catch (e) {\n console.error(e)\n }\n }\n\n addObserver (target, handler) {\n if (!this.observer) {\n return\n }\n this.observer && this.observer.observe(target)\n const { __handlers } = this\n let index = -1\n for (let i = 0; i < __handlers.length; i++) {\n if (__handlers[i] && target === __handlers[i].target) {\n index = i\n }\n }\n if (index > -1) {\n this.__handlers[index].handler = handler\n } else {\n this.__handlers.push({\n target,\n handler: handler\n })\n }\n }\n\n unObserver (target) {\n let i = -1\n this.__handlers.map((item, index) => {\n if (target === item.target) {\n i = index\n }\n })\n try {\n this.observer && this.observer.unobserve(target)\n } catch (e) {}\n this.observer && this.observer.unobserve(target)\n i > -1 && this.__handlers.splice(i, 1)\n }\n\n destroyObserver () {\n this.observer && this.observer.disconnect()\n this.observer = null\n this.__handlers = null\n }\n\n __runHandler (target) {\n const { __handlers } = this\n for (let i = 0; i < __handlers.length; i++) {\n if (__handlers[i] && target === __handlers[i].target) {\n try {\n __handlers[i].handler(target)\n } catch (error) {\n console.error(error)\n }\n return true\n }\n }\n return false\n }\n\n __trigger (entries) {\n for (let i = 0; i < entries.length; i++) {\n const ret = this.__runHandler(entries[i].target)\n if (ret) {\n break\n }\n }\n }\n}\n\nlet resizeObserver = null\n\nfunction addObserver (target, handler) {\n if (!resizeObserver) {\n resizeObserver = new ResizeObserver()\n }\n resizeObserver.addObserver(target, handler)\n return resizeObserver\n}\n\nfunction unObserver (target, handler) {\n resizeObserver.unObserver(target, handler)\n}\n\nfunction destroyObserver (target, handler) {\n resizeObserver.destroyObserver(target, handler)\n}\n\nexport {\n addObserver,\n unObserver,\n destroyObserver\n}\n","import { addObserver, unObserver } from './resizeObserver'\n\nfunction typeIsObject (obj) {\n return Object.prototype.toString.call(obj).match(/([^\\s.*]+)(?=]$)/g)[0] === 'Object'\n}\n\nfunction typeIsBoolean (obj) {\n return Object.prototype.toString.call(obj).match(/([^\\s.*]+)(?=]$)/g)[0] === 'Boolean'\n}\n\n/**\n* a plugins manager to register and search\n**/\n\nconst pluginsManager = {\n init (player) {\n // mark every player instance by _pluginInfoId\n let cgid = player._pluginInfoId\n if (!cgid) {\n cgid = new Date().getTime()\n player._pluginInfoId = cgid\n }\n\n if (!this.pluginGroup) {\n this.pluginGroup = {}\n }\n\n !player.config.closeResizeObserver && addObserver(player.root, () => {\n player.resize()\n })\n this.pluginGroup[cgid] = {\n _player: player,\n _originalOptions: player.config || {}\n }\n },\n\n /**\n * Check whether there is a player instance in the current dom\n * @param {Element} root\n */\n checkPlayerRoot (root) {\n if (this.pluginGroup) {\n const _keys = Object.keys(this.pluginGroup)\n for (let i = 0; i < _keys.length; i++) {\n const _p = this.pluginGroup[_keys[i]]._player\n if (_p.root === root) {\n return _p\n }\n }\n return null\n }\n return null\n },\n\n /**\n * register a lazy plugin\n * @param { any } player instance\n * @param { any } lazyPlugin config\n *\n */\n lazyRegister (player, lazyPlugin) {\n const timeout = lazyPlugin.timeout || 1500\n return Promise.race([\n lazyPlugin.loader().then((plugin) => {\n let result\n if (plugin && plugin.__esModule) {\n result = plugin.default\n } else {\n result = plugin\n }\n this.register(player, result, plugin.options)\n }),\n new Promise((resolve, reject) => {\n setTimeout(() => {\n reject(new Error('timeout'))\n }, timeout)\n })\n ])\n },\n /**\n * register a Plugin\n * @param { any } player the plugins register\n * @param { any } plugin the plugin contructor\n * @param { any } options the plugin configuration\n * @return { any } Plugin the plugin instance\n **/\n register (player, plugin, options = {}) {\n if (!player || !plugin || typeof plugin !== 'function' || plugin.prototype === undefined) {\n return\n }\n let cgid = player._pluginInfoId\n if (!cgid || !this.pluginGroup || !this.pluginGroup[cgid]) {\n this.init(player)\n cgid = player._pluginInfoId\n }\n if (!this.pluginGroup[cgid]._plugins) {\n this.pluginGroup[cgid]._plugins = []\n }\n const plugins = this.pluginGroup[cgid]._plugins\n const originalOptions = this.pluginGroup[cgid]._originalOptions\n options.player = this.pluginGroup[cgid]._player\n\n const pluginName = options.pluginName || plugin.pluginName\n if (!pluginName) {\n throw new Error('The property pluginName is necessary')\n }\n\n if (plugin.isSupported && !plugin.isSupported()) {\n console.warn(`not supported plugin [${pluginName}]`)\n return\n }\n\n if (!options.config) {\n options.config = {}\n }\n\n // get config items from player.config\n const keys = Object.keys(originalOptions)\n for (let i = 0; i < keys.length; i++) {\n if (pluginName.toLowerCase() === keys[i].toLowerCase()) {\n const config = originalOptions[keys[i]]\n if (typeIsObject(config)) {\n options.config = Object.assign({}, options.config, originalOptions[keys[i]])\n }\n if (typeIsBoolean(config)) {\n options.config.disable = !config\n }\n break\n }\n }\n\n // copy the default configuration items of the plugin\n if (plugin.defaultConfig) {\n Object.keys(plugin.defaultConfig).map(key => {\n if (typeof options.config[key] === 'undefined') {\n options.config[key] = plugin.defaultConfig[key]\n }\n })\n }\n\n // get the parent dom which added the plugin will be mounted\n if (!options.root) {\n options.root = player.root\n } else if (typeof options.root === 'string') {\n options.root = player[options.root]\n }\n\n options.index = options.config.index || 0\n try {\n // if there is already a plugin instance with the same pluginName, destroy it\n if (plugins[pluginName.toLowerCase()]) {\n this.unRegister(cgid, pluginName.toLowerCase())\n console.warn(`the is one plugin with same pluginName [${pluginName}] exist, destroy the old instance`)\n }\n // eslint-disable-next-line new-cap\n const _instance = new plugin(options)\n plugins[pluginName.toLowerCase()] = _instance\n plugins[pluginName.toLowerCase()].func = plugin\n if (_instance && typeof _instance.afterCreate === 'function') {\n _instance.afterCreate()\n }\n return _instance\n } catch (err) {\n console.error(err)\n throw (err)\n }\n },\n\n /**\n * Unregister a plugin from player instance\n * @param { string } cgid\n * @param { string } name\n */\n unRegister (cgid, name) {\n if (cgid._pluginInfoId) {\n cgid = cgid._pluginInfoId\n }\n name = name.toLowerCase()\n try {\n const plugin = this.pluginGroup[cgid]._plugins[name]\n if (plugin) {\n plugin.pluginName && plugin.__destroy()\n delete this.pluginGroup[cgid]._plugins[name]\n }\n } catch (e) {\n console.error(`[unRegister:${name}] cgid:[${cgid}] error`, e)\n }\n },\n\n /**\n * remove a plugin instance from the player plugin list\n * @param { any } player\n * @param { string } name\n */\n deletePlugin (player, name) {\n const cgid = player._pluginInfoId\n if (cgid && this.pluginGroup && this.pluginGroup[cgid] && this.pluginGroup[cgid]._plugins) {\n const _plugins = this.pluginGroup[cgid]._plugins\n delete _plugins[name]\n }\n },\n\n /**\n * get all plugin instance of player\n * @param { any } player\n */\n getPlugins (player) {\n const cgid = player._pluginInfoId\n return cgid ? this.pluginGroup[cgid]._plugins : {}\n },\n\n findPlugin (player, name) {\n const cgid = player._pluginInfoId\n if (!this.pluginGroup || !cgid) {\n return null\n }\n const cName = name.toLowerCase()\n return this.pluginGroup[cgid]._plugins[cName]\n },\n\n beforeInit (player) {\n function retPromise (fun) {\n if (!fun || !fun.then) {\n return new Promise((resolve) => {\n resolve()\n })\n } else {\n return fun\n }\n }\n return new Promise((resolve) => {\n if (!this.pluginGroup) {\n return\n }\n\n let prevTask\n if (player._loadingPlugins && player._loadingPlugins.length) {\n prevTask = Promise.all(player._loadingPlugins)\n } else {\n prevTask = Promise.resolve()\n }\n\n return prevTask.then(() => {\n const cgid = player._pluginInfoId\n if (!this.pluginGroup[cgid]) {\n resolve()\n return\n }\n const plugins = this.pluginGroup[cgid]._plugins\n const pluginsRet = []\n for (const item of Object.keys(plugins)) {\n if (plugins[item] && plugins[item].beforePlayerInit) {\n try {\n const ret = plugins[item].beforePlayerInit()\n pluginsRet.push(retPromise(ret))\n } catch (e) {\n pluginsRet.push(retPromise(null))\n throw e\n }\n }\n }\n\n Promise.all([...pluginsRet]).then(() => {\n resolve()\n }).catch((e) => {\n console.error(e)\n resolve()\n })\n })\n })\n },\n\n afterInit (player) {\n const cgid = player._pluginInfoId\n if (!this.pluginGroup || !cgid) {\n return\n }\n const plugins = this.pluginGroup[cgid]._plugins\n for (const item of Object.keys(plugins)) {\n if (plugins[item] && plugins[item].afterPlayerInit) {\n plugins[item].afterPlayerInit()\n }\n }\n },\n\n setLang (lang, player) {\n const cgid = player._pluginInfoId\n if (!this.pluginGroup || !cgid) {\n return\n }\n const plugins = this.pluginGroup[cgid]._plugins\n Object.keys(plugins).map(item => {\n if (plugins[item].updateLang) {\n plugins[item].updateLang(lang)\n } else {\n // 兼容旧版本通过set lang更新语言的问题\n try {\n plugins[item].lang = lang\n } catch (error) {\n console.warn(`${item} setLang`)\n }\n }\n })\n },\n\n reRender (player) {\n const cgid = player._pluginInfoId\n if (!cgid) {\n return\n }\n const pluginsMap = {}\n const plugins = this.pluginGroup[cgid]._plugins\n for (const item of Object.keys(plugins)) {\n pluginsMap[item] = {\n plugin: plugins[item].func,\n options: plugins[item]._args\n }\n this.unRegister(cgid, item)\n }\n for (const item of Object.keys(pluginsMap)) {\n this.register(cgid, item, pluginsMap[item].plugin, pluginsMap[item].options)\n }\n },\n\n onPluginsReady (player) {\n const cgid = player._pluginInfoId\n const plugins = this.pluginGroup[cgid]._plugins\n if (!cgid || !plugins) {\n return\n }\n Object.keys(plugins).map(key => {\n if (plugins[key].onPluginsReady && typeof plugins[key].onPluginsReady === 'function') {\n plugins[key].onPluginsReady()\n }\n })\n },\n\n destroy (player) {\n const cgid = player._pluginInfoId\n if (!this.pluginGroup[cgid]) {\n return\n }\n unObserver(player.root)\n const plugins = this.pluginGroup[cgid]._plugins\n for (const item of Object.keys(plugins)) {\n this.unRegister(cgid, item)\n }\n delete this.pluginGroup[cgid]\n delete player._pluginInfoId\n }\n}\n\nexport default pluginsManager\n","export default {\n DEFAULT: 'xgplayer',\n DEFAULT_SKIN: 'xgplayer-skin-default',\n ENTER: 'xgplayer-is-enter',\n PAUSED: 'xgplayer-pause',\n PLAYING: 'xgplayer-playing',\n ENDED: 'xgplayer-ended',\n CANPLAY: 'xgplayer-canplay',\n LOADING: 'xgplayer-isloading',\n ERROR: 'xgplayer-is-error',\n REPLAY: 'xgplayer-replay',\n NO_START: 'xgplayer-nostart',\n ACTIVE: 'xgplayer-inactive',\n FULLSCREEN: 'xgplayer-is-fullscreen',\n CSS_FULLSCREEN: 'xgplayer-is-cssfullscreen',\n PARENT_FULLSCREEN: 'xgplayer-fullscreen-parent',\n ROTATE_FULLSCREEN: 'xgplayer-rotate-fullscreen',\n PARENT_ROTATE_FULLSCREEN: 'xgplayer-rotate-parent',\n INNER_FULLSCREEN: 'xgplayer-inner-fullscreen',\n NO_CONTROLS: 'no-controls',\n FLEX_CONTROLS: 'flex-controls',\n CONTROLS_FOLLOW: 'controls-follow',\n AUTOHIDE: 'xgplayer_autohide',\n NOT_ALLOW_AUTOPLAY: 'not-allow-autoplay',\n SEEKING: 'seeking',\n PC: 'xgplayer-pc',\n MOBILE: 'xgplayer-mobile',\n MINI: 'xgplayer-mini' // mini screen play status\n}\n","export const usePreset = (player, Preset) => {\n let presetInst\n if (Preset.preset && Preset.options) {\n // eslint-disable-next-line new-cap\n presetInst = new (Preset.preset)(Preset.options, player.config)\n } else {\n presetInst = new Preset({}, player.config)\n }\n const { plugins = [], ignores = [], icons = {}, i18n = [] } = presetInst\n if (!player.config.plugins) {\n player.config.plugins = []\n }\n\n if (!player.config.ignores) {\n player.config.ignores = []\n }\n\n player.config.plugins.push(...plugins)\n player.config.ignores.push(...ignores)\n Object.keys(icons).map(key => {\n if (!player.config.icons[key]) {\n player.config.icons[key] = icons[key]\n }\n })\n player.config.i18n.push(...i18n)\n}\n","export const STATES = {\n ERROR: 0,\n INITIAL: 1,\n READY: 2,\n ATTACHING: 3,\n ATTACHED: 4,\n NOTALLOW: 5,\n RUNNING: 6,\n ENDED: 7,\n DESTROYED: 8\n}\n\nexport const STATE_ARRAY = [\n 'ERROR',\n 'INITIAL',\n 'READY',\n 'ATTACHING',\n 'ATTACHED',\n 'NOTALLOW',\n 'RUNNING',\n 'ENDED',\n 'DESTROYED'\n]\n","import Plugin, { Events, Util, POSITIONS, Sniffer, STATE_CLASS } from '../../plugin'\n\n/**\n * @typedef {{\n * disable?: boolean,\n * autoHide?: boolean,\n * mode?: \"flex\"|\"normal\"|\"bottom\",\n * initShow?: boolean,\n * [propName: string]: any\n * }} IControlsConfig\n */\n\nclass Controls extends Plugin {\n static get pluginName () {\n return 'controls'\n }\n\n /**\n * @type IControlsConfig\n */\n static get defaultConfig () {\n return {\n disable: false,\n autoHide: true, // Whether to hide automatically\n mode: '', // Display mode, flex/normal/bottom\n initShow: false // Display when player is initialized\n }\n }\n\n beforeCreate (args) {\n if (!args.config.mode && Sniffer.device === 'mobile') {\n args.config.mode = 'flex'\n }\n if (args.player.config.marginControls) {\n args.config.autoHide = false\n }\n }\n\n afterCreate () {\n const { disable, height, mode, autoHide } = this.config\n if (disable) {\n return\n }\n\n mode === 'flex' && this.player.addClass(STATE_CLASS.FLEX_CONTROLS)\n autoHide && this.player.addClass(STATE_CLASS.AUTOHIDE)\n const style = {\n height: `${height}px`\n }\n Object.keys(style).map(key => {\n this.root.style[key] = style[key]\n })\n /**\n * @type { HTMLElement}\n * @readonly\n */\n this.left = this.find('xg-left-grid')\n /**\n * @type { HTMLElement}\n * @readonly\n */\n this.center = this.find('xg-center-grid')\n /**\n * @type { HTMLElement}\n * @readonly\n */\n this.right = this.find('xg-right-grid')\n /**\n * @type { HTMLElement}\n * @readonly\n */\n this.innerRoot = this.find('xg-inner-controls')\n\n // The progress bar is switched synchronously when switching to the small window state\n this.on(Events.MINI_STATE_CHANGE, (isMini) => {\n isMini ? Util.addClass(this.root, 'mini-controls') : Util.removeClass(this.root, 'mini-controls')\n })\n if (Sniffer.device !== 'mobile') {\n this.bind('mouseenter', this.onMouseEnter)\n this.bind('mouseleave', this.onMouseLeave)\n }\n }\n\n onMouseEnter = (e) => {\n const { player } = this\n if (player.userTimer) {\n Util.clearTimeout(player, player.userTimer)\n clearTimeout(player.userTimer)\n }\n }\n\n onMouseLeave = () => {\n const { player, playerConfig } = this\n const hideDelay = !playerConfig.closeControlsBlur ? playerConfig.inactive : 200\n player.focus({ hideDelay })\n }\n\n focus () {\n this.player.focus({ autoHide: false })\n }\n\n unFocus () {\n this.player.focus({ autoHide: true })\n }\n\n blur () {\n this.player.blur({ ignorePaused: true })\n }\n\n recoverAutoHide () {\n this.config.autoHide && Util.addClass(this.root, 'control_autohide')\n }\n\n pauseAutoHide () {\n Util.removeClass(this.root, 'control_autohide')\n }\n\n show () {\n Util.addClass(this.root, 'show')\n }\n\n hide () {\n Util.removeClass(this.root, 'show')\n }\n\n /**\n * @type {string}\n */\n get mode () {\n return this.config.mode\n }\n\n /**\n *\n * @param {} plugin\n * @param { {config?: {[propName: string]: any}, position?:string, root?: HTMLElement, pluginName?: string}} options\n * @param { string } name\n * @returns { any }\n */\n registerPlugin (plugin, options = {}, name) {\n if (!this.root) {\n return\n }\n const defaultConfig = plugin.defaultConfig || {}\n if (!options.root) {\n const position = options.position ? options.position : options.config && options.config.position ? options.config.position : defaultConfig.position\n switch (position) {\n case POSITIONS.CONTROLS_LEFT:\n options.root = this.left\n break\n case POSITIONS.CONTROLS_RIGHT:\n options.root = this.right\n break\n case POSITIONS.CONTROLS_CENTER:\n options.root = this.center\n break\n case POSITIONS.CONTROLS:\n options.root = this.root\n break\n default:\n options.root = this.left\n }\n return super.registerPlugin(plugin, options, name)\n }\n }\n\n destroy () {\n if (Sniffer.device !== 'mobile') {\n this.unbind('mouseenter', this.onMouseEnter)\n this.unbind('mouseleave', this.onMouseLeave)\n }\n }\n\n render () {\n const { mode, autoHide, initShow, disable } = this.config\n if (disable) {\n return\n }\n const className = Util.classNames(\n { 'xgplayer-controls': true },\n { 'flex-controls': mode === 'flex' },\n { 'bottom-controls': mode === 'bottom' },\n { control_autohide: autoHide },\n { controls_permanent: !autoHide },\n { 'xgplayer-controls-initshow': initShow || !autoHide })\n return `<xg-controls class=\"${className}\" unselectable=\"on\" onselectstart=\"return false\">\n <xg-inner-controls class=\"xg-inner-controls xg-pos\">\n <xg-left-grid class=\"xg-left-grid\">\n </xg-left-grid>\n <xg-center-grid class=\"xg-center-grid\"></xg-center-grid>\n <xg-right-grid class=\"xg-right-grid\">\n </xg-right-grid>\n </xg-inner-controls>\n </xg-controls>`\n }\n}\n\nexport default Controls\n","import Util from '../utils/util'\nimport EN from './en'\n/**\n * @typedef { {\n * LANG: string,\n * TEXT: {\n * [propName: string]: string\n * }\n * } } IXGI18nText\n */\n\nconst XGI18nLang = {}\nconst XGI18nTextKeys = {}\nconst XGI18nLangKeys = []\nconst XGI18nLangPreExtends = {}\n\nfunction updateKeys () {\n Object.keys(XGI18nLang.en).map(key => {\n XGI18nTextKeys[key] = key.toLowerCase()\n })\n}\n\n/**\n * @param { Array<IXGI18nText> } XGI18nTexts\n */\nfunction extend (XGI18nText) {\n let ext = []\n if (Util.typeOf(XGI18nText) !== 'Array') {\n ext = Object.keys(XGI18nText).map(lang => {\n const keyLang = lang === 'zh' ? 'zh-cn' : lang\n return {\n LANG: keyLang,\n TEXT: XGI18nText[lang]\n }\n })\n } else {\n ext = XGI18nText\n }\n ext.map(item => {\n if (!XGI18nLang[item.LANG]) {\n XGI18nLangPreExtends[item.LANG] = item.TEXT\n } else {\n Util.deepMerge(XGI18nLang[item.LANG] || {}, item.TEXT || {})\n }\n })\n updateKeys()\n}\n\n/**\n * @param { IXGI18nText } langData\n */\nfunction use (langData) {\n const lang = langData.LANG\n const texts = langData.TEXT || {}\n if (!XGI18nLang[lang]) {\n XGI18nLangKeys.push(lang)\n }\n if (XGI18nLang[lang]) {\n Util.deepMerge(texts, XGI18nLang[lang])\n } else {\n XGI18nLang[lang] = texts\n }\n if (XGI18nLangPreExtends[lang]) {\n extend([{ LANG: lang, TEXT: XGI18nLangPreExtends[lang] }])\n delete XGI18nLangPreExtends[lang]\n }\n if (lang === 'zh-cn') {\n XGI18nLang.zh = XGI18nLang['zh-cn']\n }\n updateKeys()\n}\n\nuse(EN)\n\nconst I18N = {\n get textKeys () {\n return XGI18nTextKeys\n },\n /**\n * @description List of languages currently supported\n * @type { Array<string> }\n */\n get langKeys () {\n return XGI18nLangKeys\n },\n /**\n * @type {{\n * [propName: string]: {\n * [propName: string]: string\n * }\n * }}\n */\n get lang () {\n const ret = {}\n XGI18nLangKeys.map(key => {\n ret[key] = XGI18nLang[key]\n })\n ret.zh = XGI18nLang['zh-cn']\n return ret\n },\n /**\n * @type {(I18nText: IXGI18nText) => {}}\n */\n extend: extend,\n\n /**\n * @type {(lang: IXGI18nText) => {}}\n */\n use: use\n}\n\nexport default I18N\n","export default {\n LANG: 'en',\n TEXT: {\n ERROR_TYPES: {\n network: {\n code: 1,\n msg: 'video download error'\n },\n mse: {\n code: 2,\n msg: 'stream append error'\n },\n parse: {\n code: 3,\n msg: 'parsing error'\n },\n format: {\n code: 4,\n msg: 'wrong format'\n },\n decoder: {\n code: 5,\n msg: 'decoding error'\n },\n runtime: {\n code: 6,\n msg: 'grammatical errors'\n },\n timeout: {\n code: 7,\n msg: 'play timeout'\n },\n other: {\n code: 8,\n msg: 'other errors'\n }\n },\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 SCREENSHOT: 'Screenshot',\n LIVE: 'LIVE',\n OFF: 'Off',\n OPEN: 'Open',\n MINI_DRAG: 'Click and hold to drag',\n MINISCREEN: 'Miniscreen',\n REFRESH_TIPS: 'Please Try',\n REFRESH: 'Refresh',\n FORWARD: 'forward',\n LIVE_TIP: 'Live'\n }\n}\n","import VideoProxy from './proxy'\nimport Util from './utils/util'\nimport Sniffer from './utils/sniffer'\nimport Database from './utils/database'\nimport Errors from './error'\nimport * as Events from './events'\nimport { FULLSCREEN_EVENTS, GET_FULLSCREEN_API, EXIT_FULLSCREEN_API } from './constant'\nimport Plugin from './plugin/plugin'\nimport BasePlugin from './plugin/basePlugin'\nimport pluginsManager from './plugin/pluginsManager'\nimport STATE_CLASS from './stateClassMap'\nimport getDefaultConfig from './defaultConfig'\nimport { usePreset } from './plugin/preset'\nimport hooksDescriptor, { runHooks, useHooks, delHooksDescriptor, usePluginHooks, hook } from './plugin/hooksDescriptor'\nimport Controls from './plugins/controls/index'\nimport XG_DEBUG, { bindDebug } from './utils/debug'\nimport I18N from './lang/i18n'\nimport version from './version'\nimport { STATES, STATE_ARRAY } from './state'\n\n/**\n * @typedef { import ('./defaultConfig').IPlayerOptions } IPlayerOptions\n */\n\n/* eslint-disable camelcase */\nconst PlAYER_HOOKS = ['play', 'pause', 'replay', 'retry']\n\nclass Player extends VideoProxy {\n /**\n * @type {number}\n * @description set debugger level\n * 1 - only print error logs\n * 2 - print warn logs and error logs\n * 3 - print all debug logs and error stack logs\n */\n static set debugger (value) {\n XG_DEBUG.config.debug = value\n }\n\n static get debugger () {\n return XG_DEBUG.config.debug\n }\n\n /**\n * @param { IPlayerOptions } options\n */\n constructor (options) {\n const config = Util.deepMerge(getDefaultConfig(), options)\n super(config)\n hooksDescriptor(this, PlAYER_HOOKS)\n\n /**\n * @type { IPlayerOptions }\n * @description 当前播放器的配置信息\n */\n this.config = config\n bindDebug(this)\n // resolve default preset\n const defaultPreset = this.constructor.defaultPreset\n if (this.config.presets.length) {\n const defaultIdx = this.config.presets.indexOf('default')\n if (defaultIdx >= 0 && defaultPreset) {\n this.config.presets[defaultIdx] = defaultPreset\n }\n } else if (defaultPreset) {\n this.config.presets.push(defaultPreset)\n }\n\n // timer and flags\n this.userTimer = null\n /**\n * @private\n */\n this.waitTimer = null\n\n /**\n * @private\n */\n this._state = STATES.INITIAL\n\n /**\n * @private\n */\n this._hasStart = false\n /**\n * Whether the player is in the seeking state\n * @type { boolean }\n * @readonly\n */\n this.isSeeking = false\n\n /**\n * @type { boolean }\n * @readonly\n */\n this.isCanplay = false\n /**\n * @private\n * @readonly\n */\n this._runPending = false\n /**\n * @type { number }\n */\n this.rotateDeg = 0\n /**\n * Whether the player is focus\n * @type { boolean }\n * @readonly\n */\n this.isActive = false\n\n /**\n * @type { boolean }\n * @readonly\n */\n this.isCssfullScreen = false\n\n /**\n * Whether player is currently in fullscreen\n * @type { boolean }\n * @readonly\n */\n this.fullscreen = false\n\n /**\n * fullscreenElement\n * @type { HTMLElement | null }\n * @readonly\n */\n this._fullscreenEl = null\n\n /**\n * cssFullscreen target Element\n * @type { HTMLElement | null }\n * @readonly\n */\n this._cssfullscreenEl = null\n\n /**\n * @type { IDefinition | null }\n * @readonly\n */\n this.curDefinition = null\n /**\n * @private\n * @type { string }\n */\n this._orgCss = ''\n /**\n * @readonly\n * @type { number }\n */\n this._fullScreenOffset = null\n /**\n * @private\n * @type { number }\n */\n this._videoHeight = 0\n /**\n * @private\n * @type { number }\n */\n this._videoWidth = 0\n /**\n * @private\n * @type { { begin: number, end:number, acc: number } }\n */\n this._played = {\n begin: -1,\n end: -1,\n acc: 0\n }\n\n /**\n * @type { null | HTMLElement }\n * @readonly\n * @description 控制栏和video不同布局的时候内部容器\n */\n this.innerContainer = null\n\n /**\n * @type { null | Object }\n * @readonly\n * @description 控制栏插件\n */\n this.controls = null\n\n /**\n * @type { null | HTMLElement }\n * @readonly\n */\n this.topBar = null\n\n /**\n * @type { null | HTMLElement }\n * @readonly\n */\n this.topBar = null\n\n /**\n * @type { null | HTMLElement }\n * @readonly\n * @description 当前播放器根节点\n */\n this.root = null\n\n // android 6以下不支持自动播放\n if (Sniffer.os.isAndroid && Sniffer.osVersion > 0 && Sniffer.osVersion < 6) {\n this.config.autoplay = false\n }\n /**\n * @readonly\n * @type {any}\n */\n this.database = new Database()\n\n const rootInit = this._initDOM()\n if (!rootInit) {\n console.error(new Error(`can't find the dom which id is ${this.config.id} or this.config.el does not exist`))\n return\n }\n\n this._bindEvents()\n this._registerPresets()\n this._registerPlugins()\n pluginsManager.onPluginsReady(this)\n\n this.setState(STATES.READY)\n this.emit(Events.READY)\n this.onReady && this.onReady()\n\n // url为空的情况下 根据definition设置播放地址\n const { definition, url } = this.config\n if (!url && definition && definition.list && definition.list.length > 0 && definition.defaultDefinition) {\n definition.list.map(item => {\n if (item.definition === definition.defaultDefinition) {\n this.config.url = item.url\n this.curDefinition = item.definition\n }\n })\n }\n\n if (this.config.videoInit || this.config.autoplay) {\n if (!this.hasStart || this.state < STATES.ATTACHED) {\n this.start()\n }\n }\n }\n\n /**\n * init control domElement\n * @private\n */\n _initDOM () {\n this.root = this.config.id ? document.getElementById(this.config.id) : null\n if (!this.root) {\n const el = this.config.el\n if (el && el.nodeType === 1) {\n this.root = el\n } else {\n this.emit(Events.ERROR, new Errors('use', this.config.vid, {\n line: 32,\n handle: 'Constructor',\n msg: 'container id can\\'t be empty'\n }))\n console.error('this.confg.id or this.config.el can\\'t be empty')\n return false\n }\n }\n const ret = pluginsManager.checkPlayerRoot(this.root)\n if (ret) {\n XG_DEBUG.logWarn('The is an Player instance already exists in this.root, destroy it and reinitialize')\n ret.destroy()\n }\n this._initBaseDoms()\n\n // 允许自定义video对象的构造\n const XgVideoProxy = this.constructor.XgVideoProxy\n if (XgVideoProxy && this.videoConfig.mediaType === XgVideoProxy.mediaType) {\n const el = this.innerContainer || this.root\n this.detachVideoEvents(this.video)\n const _nVideo = new XgVideoProxy(el, this.config, this.videoConfig)\n this.attachVideoEvents(_nVideo)\n this.video = _nVideo\n }\n if (this.config.controls) {\n const controls = pluginsManager.register(this, Controls)\n this.controls = controls\n }\n const device = this.config.isMobileSimulateMode ? 'mobile' : Sniffer.device\n this.addClass(`${STATE_CLASS.DEFAULT} ${STATE_CLASS.ACTIVE} xgplayer-${device} ${this.config.controls ? '' : STATE_CLASS.NO_CONTROLS}`)\n if (this.config.autoplay) {\n this.addClass(STATE_CLASS.ENTER)\n } else {\n this.addClass(STATE_CLASS.NO_START)\n }\n if (this.config.fluid) {\n const style = {\n 'max-width': '100%',\n width: '100%',\n height: '0',\n 'padding-top': `${this.config.height * 100 / this.config.width}%`,\n position: 'position',\n top: '0',\n left: '0'\n }\n Object.keys(style).map(key => {\n this.root.style[key] = style[key]\n })\n } else {\n ['width', 'height'].map(key => {\n if (this.config[key]) {\n if (typeof this.config[key] !== 'number') {\n this.root.style[key] = this.config[key]\n } else {\n this.root.style[key] = `${this.config[key]}px`\n }\n }\n })\n }\n return true\n }\n\n /**\n * @private\n */\n _initBaseDoms () {\n /**\n * @readonly\n * @type { HTMLElement }\n */\n this.topBar = Util.createDom('xg-bar', '', { 'data-index': -1 }, 'xg-top-bar')\n /**\n * @readonly\n * @type { HTMLElement }\n */\n this.leftBar = Util.createDom('xg-bar', '', { 'data-index': -1 }, 'xg-left-bar')\n /**\n * @readonly\n * @type { HTMLElement }\n */\n this.rightBar = Util.createDom('xg-bar', '', { 'data-index': -1 }, 'xg-right-bar')\n if (this.config.marginControls) {\n this.innerContainer = Util.createDom('xg-video-container', '', { 'data-index': -1 }, 'xg-video-container')\n this.root.appendChild(this.innerContainer)\n }\n this.root.appendChild(this.topBar)\n this.root.appendChild(this.leftBar)\n this.root.appendChild(this.rightBar)\n }\n\n /**\n * @private\n */\n _bindEvents () {\n ['focus', 'blur'].forEach(item => {\n this.on(item, this['on' + item.charAt(0).toUpperCase() + item.slice(1)])\n })\n const resetFullState = () => {\n this.fullscreen = false\n this._fullScreenOffset = null\n }\n /**\n * @private\n */\n this.onFullscreenChange = (event, isFullScreen) => {\n const fullEl = Util.getFullScreenEl()\n if (this._fullActionFrom) {\n this._fullActionFrom = ''\n } else {\n // 快捷键触发\n this.emit(Events.USER_ACTION, {\n eventType: 'system',\n action: 'switch_fullscreen',\n pluginName: 'player',\n currentTime: this.currentTime,\n duration: this.duration,\n props: [{\n prop: 'fullscreen',\n from: true,\n to: false\n }]\n })\n }\n if (isFullScreen || (fullEl && (fullEl === this._fullscreenEl || fullEl.tagName === 'VIDEO'))) {\n Util.setTimeout(this, () => {\n this.resize()\n }, 100)\n !this.config.closeFocusVideoFocus && this.video.focus()\n this.fullscreen = true\n // this.addClass(STATE_CLASS.FULLSCREEN)\n this.changeFullStyle(this.root, fullEl, STATE_CLASS.FULLSCREEN)\n this.emit(Events.FULLSCREEN_CHANGE, true, this._fullScreenOffset)\n if (this.isCssfullScreen) {\n this.exitCssFullscreen()\n }\n } else if (this.fullscreen) {\n Util.setTimeout(this, () => {\n this.resize()\n }, 100)\n const { _fullScreenOffset, config } = this\n if (config.needFullscreenScroll) {\n try {\n window.scrollTo(_fullScreenOffset.left, _fullScreenOffset.top)\n Util.setTimeout(this, () => {\n resetFullState()\n }, 50)\n } catch (e) {\n XG_DEBUG.logError(e)\n resetFullState()\n }\n } else {\n // 保证页面scroll的情况下退出全屏 页面定位在播放器位置\n !this.config.closeFocusVideoFocus && this.video.focus()\n resetFullState()\n }\n if (!this.isCssfullScreen) {\n this.recoverFullStyle(this.root, this._fullscreenEl, STATE_CLASS.FULLSCREEN)\n } else {\n this.removeClass(STATE_CLASS.FULLSCREEN)\n }\n this._fullscreenEl = null\n // this.removeClass(STATE_CLASS.FULLSCREEN)\n this.emit(Events.FULLSCREEN_CHANGE, false)\n }\n }\n\n FULLSCREEN_EVENTS.forEach(item => {\n document && document.addEventListener(item, this.onFullscreenChange)\n })\n /**\n * @private\n */\n this.__webkitbeginfullscreen = (e) => {\n this._fullscreenEl = this.video\n this.onFullscreenChange(e, true)\n }\n /**\n * @private\n */\n this.__webkitendfullscreen = (e) => {\n this.onFullscreenChange(e, false)\n }\n if (Sniffer.os.isIos) {\n this.video.addEventListener('webkitbeginfullscreen', this.__webkitbeginfullscreen)\n this.video.addEventListener('webkitendfullscreen', this.__webkitendfullscreen)\n }\n this.once('loadeddata', this.resize)\n\n this.playFunc = () => {\n if (!this.config.closeFocusVideoFocus) {\n this.video.focus()\n }\n }\n this.once('play', this.playFunc)\n }\n\n /**\n * @private\n */\n _unbindEvents () {\n this.root.removeEventListener('mousemove', this.mousemoveFunc)\n FULLSCREEN_EVENTS.forEach(item => {\n document.removeEventListener(item, this.onFullscreenChange)\n })\n this.playFunc && this.off('play', this.playFunc)\n this.canPlayFunc && this.off('canplay', this.canPlayFunc)\n this.video.removeEventListener('webkitbeginfullscreen', this.__webkitbeginfullscreen)\n this.video.removeEventListener('webkitendfullscreen', this.__webkitendfullscreen)\n }\n\n /**\n *\n * @param { any } url\n * @returns\n */\n _startInit (url) {\n if (!this.video) {\n return\n }\n if (!url || url === '') {\n this.emit(Events.URL_NULL)\n XG_DEBUG.logWarn('config.url is null, please get url and run player._startInit(url)')\n if (this.config.nullUrlStart) {\n return\n }\n }\n this.canPlayFunc = () => {\n if (!this.config) {\n return\n }\n const { autoplay, startTime, defaultPlaybackRate } = this.config\n\n XG_DEBUG.logInfo('player', 'canPlayFunc', startTime)\n if (startTime) {\n this.currentTime = startTime > this.duration ? this.duration : startTime\n this.config.startTime = 0 // 仅仅使用一次\n }\n\n // 确保能生效\n if (defaultPlaybackRate !== 1) {\n this.playbackRate = defaultPlaybackRate\n }\n\n autoplay && this.videoPlay()\n this.off(Events.CANPLAY, this.canPlayFunc)\n this.removeClass(STATE_CLASS.ENTER)\n }\n\n if (Util.typeOf(url) === 'Array') {\n url.forEach(item => {\n this.video.appendChild(Util.createDom('source', '', {\n src: `${item.src}`,\n type: `${item.type || ''}`\n }))\n })\n this._attachSourceEvents(this.video)\n } else {\n this.video.src = url\n }\n\n if (Util.typeOf(this.config.volume) === 'Number') {\n this.volume = this.config.volume\n }\n\n this.loadeddataFunc && this.once('loadeddata', this.loadeddataFunc)\n const _root = this.innerContainer ? this.innerContainer : this.root\n if (this.video instanceof window.Element && !_root.contains(this.video)) {\n _root.insertBefore(this.video, _root.firstChild)\n }\n\n if (this.video.readyState >= 2) {\n this.canPlayFunc()\n } else {\n this.once(Events.CANPLAY, this.canPlayFunc)\n }\n\n XG_DEBUG.logInfo('_startInit')\n if (this.config.autoplay) {\n !(/^blob/.test(this.video.currentSrc) || /^blob/.test(this.video.src)) && this.load();\n // ios端无法自动播放的场景下,不调用play不会触发canplay loadeddata等事件\n (Sniffer.os.isIpad || Sniffer.os.isPhone) && this.videoPlay()\n }\n\n Util.setTimeout(this, () => {\n this.emit(Events.COMPLETE)\n }, 1)\n if (!this.hasStart || this.state < STATES.ATTACHED) {\n pluginsManager.afterInit(this)\n }\n this.hasStart = true\n this.setState(STATES.ATTACHED)\n }\n\n /**\n * 针对source列表播放方式添加错误监听\n * @doc https://stackoverflow.com/questions/47557135/html5-detect-the-type-of-error-when-trying-to-load-a-video-using-a-source-elem\n * @protected\n * @param { HTMLVideoElement | HTMLAudioElement } video\n */\n _attachSourceEvents (video) {\n const _c = video.children\n /**\n * @private\n */\n this._videoSourceCount = _c.length\n /**\n * @private\n */\n !this._sourceError && (this._sourceError = (e) => {\n this._videoSourceCount--\n if (this._videoSourceCount === 0) {\n if (this.videoEventMiddleware.error) {\n this.videoEventMiddleware.error.call(this, e, () => {\n this.errorHandler('error')\n })\n } else {\n this.errorHandler('error', { code: 4, message: 'sources load error' })\n }\n }\n })\n for (let i = 0; i < _c.length; i++) {\n _c[i].addEventListener('error', this._sourceError)\n }\n }\n\n /**\n * 移除source列表错误事件监听\n * @protected\n * @param { HTMLVideoElement | HTMLAudioElement } video\n */\n _detachSourceEvents (video) {\n const _c = video.children\n if (_c.length === 0 || !this._sourceError) {\n return\n }\n for (let i = 0; i < _c.length; i++) {\n _c[i].removeEventListener('error', this._sourceError)\n }\n }\n\n /**\n * 注册组件 组件列表config.plugins\n * @private\n */\n _registerPlugins () {\n /**\n * @private\n */\n this._loadingPlugins = []\n const ignores = this.config.ignores || []\n const plugins = this.config.plugins || []\n const i18n = this.config.i18n || []\n i18n.map(item => {\n I18N.use(item)\n })\n const ignoresStr = ignores.join('||').toLowerCase().split('||')\n plugins.map(plugin => {\n try {\n const pluginName = plugin.plugin ? plugin.plugin.pluginName : plugin.pluginName\n // 在ignores中的不做组装\n if (pluginName && ignoresStr.indexOf(pluginName.toLowerCase()) > -1) {\n return null\n }\n if (plugin.lazy && plugin.loader) {\n const loadingPlugin = pluginsManager.lazyRegister(this, plugin)\n if (plugin.forceBeforeInit) {\n loadingPlugin.then(() => {\n this._loadingPlugins.splice(this._loadingPlugins.indexOf(loadingPlugin), 1)\n }).catch((e) => {\n XG_DEBUG.logError('_registerPlugins:loadingPlugin', e)\n this._loadingPlugins.splice(this._loadingPlugins.indexOf(loadingPlugin), 1)\n })\n this._loadingPlugins.push(loadingPlugin)\n }\n\n return\n }\n return this.registerPlugin(plugin)\n } catch (err) {\n XG_DEBUG.logError('_registerPlugins:', err)\n return null\n }\n })\n }\n\n /**\n * @private\n */\n _registerPresets () {\n this.config.presets.forEach((preset) => {\n usePreset(this, preset)\n })\n }\n\n /**\n *\n * @param { {plugin: function, options:object} | function } plugin\n * @param { {[propName: string]: any;} } [config]\n * @returns { any } plugin\n */\n registerPlugin (plugin, config) {\n let PLUFGIN = null\n let options = null\n if (plugin.plugin && typeof plugin.plugin === 'function') {\n PLUFGIN = plugin.plugin\n options = plugin.options\n } else {\n PLUFGIN = plugin\n options = {}\n }\n if (config) {\n options.config = config\n }\n\n // 获取配置的position或者root\n const keys = Object.keys(this.config)\n for (let i = 0; i < keys.length; i++) {\n if (PLUFGIN.pluginName.toLowerCase() === keys[i].toLowerCase()) {\n const _pConfig = this.config[keys[i]]\n if (Util.typeOf(_pConfig) === 'Object') {\n _pConfig.root && (options.root = _pConfig.root)\n _pConfig.position && (options.position = _pConfig.position)\n }\n break\n }\n }\n\n const position = options.position ? options.position : (options.config && options.config.position) || (PLUFGIN.defaultConfig && PLUFGIN.defaultConfig.position)\n const { POSITIONS } = Plugin\n if (!options.root && typeof position === 'string' && position.indexOf('controls') > -1) {\n return this.controls && this.controls.registerPlugin(PLUFGIN, options, PLUFGIN.pluginName)\n }\n if (!options.root) {\n switch (position) {\n case POSITIONS.ROOT_RIGHT:\n options.root = this.rightBar\n break\n case POSITIONS.ROOT_LEFT:\n options.root = this.leftBar\n break\n case POSITIONS.ROOT_TOP:\n options.root = this.topBar\n break\n default:\n options.root = this.innerContainer || this.root\n break\n }\n }\n return pluginsManager.register(this, PLUFGIN, options)\n }\n\n /**\n *\n * @param { any } plugin\n */\n deregister (plugin) {\n if (typeof plugin === 'string') {\n pluginsManager.unRegister(this, plugin)\n } else if (plugin instanceof BasePlugin) {\n pluginsManager.unRegister(this, plugin.pluginName)\n }\n }\n\n /**\n *\n * @param { any } plugin\n */\n unRegisterPlugin (plugin) {\n this.deregister(plugin)\n }\n\n /**\n * 当前播放器挂载的插件实例列表\n * @type { {[propName: string]: any | null } }\n */\n get plugins () {\n return pluginsManager.getPlugins(this)\n }\n\n /**\n * get a plugin instance\n * @param { string } pluginName\n * @return { null | any } plugin\n */\n getPlugin (pluginName) {\n const plugin = pluginsManager.findPlugin(this, pluginName)\n return plugin && plugin.pluginName ? plugin : null\n }\n\n /**\n *\n * @param { string } className\n */\n addClass (className) {\n if (!this.root) {\n return\n }\n if (!Util.hasClass(this.root, className)) {\n Util.addClass(this.root, className)\n }\n }\n\n /**\n *\n * @param { string } className\n * @returns\n */\n removeClass (className) {\n if (!this.root) {\n return\n }\n Util.removeClass(this.root, className)\n }\n\n /**\n *\n * @param { string } className\n * @returns { boolean } has\n */\n hasClass (className) {\n if (!this.root) {\n return\n }\n return Util.hasClass(this.root, className)\n }\n\n /**\n *\n * @param { string } key\n * @param { any } value\n * @returns void\n */\n setAttribute (key, value) {\n if (!this.root) {\n return\n }\n this.root.setAttribute(key, value)\n }\n\n /**\n *\n * @param { string } key\n * @param { any } value\n * @returns void\n */\n removeAttribute (key, value) {\n if (!this.root) {\n return\n }\n this.root.removeAttribute(key, value)\n }\n\n /**\n *\n * @param { any } url\n * @returns { Promise<void> | void }\n * @description 启动播放器,start一般都是播放器内部隐式调用,主要功能是将video添加到DOM\n */\n start (url) {\n // 已经开始初始化播放了 则直接调用play\n if (this.hasStart || this.state >= STATES.ATTACHING) {\n return Promise.resolve()\n }\n this.hasStart = true\n this.setState(STATES.ATTACHING)\n\n return pluginsManager.beforeInit(this).then(() => {\n // this.config为空即已经销毁,不再执行后面的异步流程\n if (!this.config) {\n return\n }\n if (!url) {\n url = this.url || this.config.url\n }\n const ret = this._startInit(url)\n return ret\n }).catch((e) => {\n e.fileName = 'player'\n e.lineNumber = '236'\n XG_DEBUG.logError('start:beforeInit:', e)\n throw e\n })\n }\n\n /**\n * @param { string } url\n * @param { boolean } seamless\n */\n switchURL (url, seamless) {\n this.src = url\n }\n\n load () {\n this.video && this.video.load()\n }\n\n videoPlay () {\n if (!this.hasStart && this.state < STATES.ATTACHED) {\n this.removeClass(STATE_CLASS.NO_START)\n this.addClass(STATE_CLASS.ENTER)\n const ret = this.start()\n ret && ret.then(resolve => {\n !this.config.autoplay && this.videoPlay()\n })\n return\n }\n if (this.state < STATES.RUNNING) {\n this.removeClass(STATE_CLASS.NO_START)\n !this.isCanplay && this.addClass(STATE_CLASS.ENTER)\n }\n const playPromise = super.play()\n if (playPromise !== undefined && playPromise && playPromise.then) {\n playPromise.then(() => {\n this.removeClass(STATE_CLASS.NOT_ALLOW_AUTOPLAY)\n this.addClass(STATE_CLASS.PLAYING)\n if (this.state < STATES.RUNNING) {\n XG_DEBUG.logInfo('>>>>playPromise.then')\n this.setState(STATES.RUNNING)\n this.emit(Events.AUTOPLAY_STARTED)\n }\n }).catch((e) => {\n XG_DEBUG.logWarn('>>>>playPromise.catch', e.name)\n if (this.video && this.video.error) {\n this.onError()\n // this.errorHandler('error')\n this.removeClass(STATE_CLASS.ENTER)\n this.setState(STATES.ERROR)\n return\n }\n // 避免AUTOPLAY_PREVENTED先于playing和play触发\n if (e.name === 'NotAllowedError') {\n /**\n * @private\n */\n this._errorTimer = Util.setTimeout(this, () => {\n this._errorTimer = null\n this.emit(Events.AUTOPLAY_PREVENTED)\n this.addClass(STATE_CLASS.NOT_ALLOW_AUTOPLAY)\n this.removeClass(STATE_CLASS.ENTER)\n this.pause()\n this.setState(STATES.NOTALLOW)\n }, 0)\n }\n })\n } else {\n XG_DEBUG.logWarn('video.play not return promise')\n if (this.state < STATES.RUNNING) {\n this.setState(STATES.RUNNING)\n this.removeClass(STATE_CLASS.NOT_ALLOW_AUTOPLAY)\n this.removeClass(STATE_CLASS.NO_START)\n this.removeClass(STATE_CLASS.ENTER)\n this.addClass(STATE_CLASS.PLAYING)\n this.emit(Events.AUTOPLAY_STARTED)\n }\n }\n return playPromise\n }\n\n videoPause () {\n super.pause()\n }\n\n play () {\n this.removeClass(STATE_CLASS.PAUSED)\n runHooks(this, 'play', () => {\n this.videoPlay()\n })\n }\n\n pause () {\n runHooks(this, 'pause', () => {\n super.pause()\n })\n }\n\n /**\n *\n * @param { number } time\n * @returns\n */\n seek (time) {\n if (!this.video || isNaN(Number(time))) {\n return\n }\n const { isSeekedPlay, seekedStatus } = this.config\n const _status = isSeekedPlay ? 'play' : seekedStatus\n time = time < 0 ? 0 : time > this.duration ? parseInt(this.duration, 10) : time\n this.once(Events.CANPLAY, () => {\n this.removeClass(STATE_CLASS.ENTER)\n this.isSeeking = false\n switch (_status) {\n case 'play':\n this.play()\n break\n case 'pause':\n this.pause()\n break\n default:\n !this.paused && this.play()\n }\n })\n if (this.state < STATES.RUNNING) {\n this.removeClass(STATE_CLASS.NO_START)\n this.addClass(STATE_CLASS.ENTER)\n this.currentTime = time\n _status === 'play' && this.play()\n } else {\n this.currentTime = time\n }\n }\n\n /**\n * @typedef { {\n * url: any,\n * definition: any,\n * [propName: string]: any\n * } } definition\n */\n /**\n * @description change the definition of the current playback\n * @param { definition } to\n * @param { definition } [from]\n */\n changeDefinition (to, from) {\n this.emit(Events.DEFINITION_CHANGE, { from, to })\n const curTime = this.currentTime\n const isPaused = this.paused\n this.curDefinition = to.definition\n if (!this.hasStart) {\n this.config.url = to.url\n return\n }\n if (this.switchURL) {\n this.switchURL(to.url)\n } else {\n this.src = to.url\n }\n const _canplay = () => {\n this.currentTime = curTime\n this.emit(Events.AFTER_DEFINITION_CHANGE, { from, to })\n }\n if (Sniffer.os.isAndroid) {\n this.once('timeupdate', () => {\n _canplay()\n })\n } else {\n this.once('canplay', () => {\n _canplay()\n })\n }\n if (!isPaused) {\n this.play()\n } else {\n this.pause()\n }\n }\n\n reload () {\n this.load()\n /**\n * @private\n */\n this.reloadFunc = function () {\n this.play().catch(err => { console.log(err) })\n }\n this.once('loadeddata', this.reloadFunc)\n }\n\n resetState () {\n const { NOT_ALLOW_AUTOPLAY, PLAYING, NO_START, PAUSED, REPLAY, ENTER, ENDED, ERROR, LOADING } = STATE_CLASS\n const clsList = [NOT_ALLOW_AUTOPLAY, PLAYING, NO_START, PAUSED, REPLAY, ENTER, ENDED, ERROR, LOADING]\n this.hasStart = false\n this.videoPause()\n clsList.forEach((cls) => {\n this.removeClass(cls)\n })\n this.addClass(STATE_CLASS.ENTER)\n this.emit(Events.EMPTIED)\n }\n\n /**\n * @description destroy the player instance\n * @returns\n */\n destroy () {\n const { innerContainer, root, video } = this\n if (!root) {\n return\n }\n this._hasStart = false\n this._unbindEvents()\n this._detachSourceEvents(this.video)\n Util.clearAllTimers(this)\n pluginsManager.destroy(this)\n delHooksDescriptor(this)\n super.destroy()\n // 退出全屏\n if (this.fullscreen && this._fullscreenEl === this.root) {\n try {\n this.exitFullscreen()\n } catch (e) {}\n }\n\n if (innerContainer) {\n const _c = innerContainer.children\n for (let i = 0; i < _c.length; i++) {\n innerContainer.removeChild(_c[i])\n }\n }\n !innerContainer && root.contains(video) && root.removeChild(video);\n ['topBar', 'leftBar', 'rightBar', 'innerContainer'].map(item => {\n this[item] && root.removeChild(this[item])\n this[item] = null\n })\n const cList = root.className.split(' ')\n if (cList.length > 0) {\n root.className = cList.filter(name => name.indexOf('xgplayer') < 0).join(' ')\n } else {\n root.className = ''\n }\n this.removeAttribute('data-xgfill');\n\n ['isSeeking', 'isCanplay', 'isActive', 'isCssfullScreen', 'fullscreen'].map(key => {\n this[key] = false\n })\n }\n\n replay () {\n this.removeClass(STATE_CLASS.ENDED)\n this.currentTime = 0\n this.isSeeking = false\n runHooks(this, 'replay', () => {\n this.once(Events.CANPLAY, () => {\n const playPromise = this.videoPlay()\n if (playPromise && playPromise.catch) {\n playPromise.catch(err => {\n console.log(err)\n })\n }\n })\n this.play()\n this.emit(Events.REPLAY)\n this.onPlay()\n })\n }\n\n retry () {\n this.removeClass(STATE_CLASS.ERROR)\n this.addClass(STATE_CLASS.LOADING)\n runHooks(this, 'retry', () => {\n const cur = this.currentTime\n this.videoPause()\n this.src = this.config.url\n !this.config.isLive && (this.currentTime = cur)\n this.once(Events.CANPLAY, () => {\n this.videoPlay()\n })\n })\n }\n\n /**\n *\n * @param { HTMLElement } root\n * @param { HTMLElement } [el]\n * @param { string } [rootClass]\n * @param { string } [pClassName]\n */\n changeFullStyle (root, el, rootClass, pClassName) {\n if (!root) {\n return\n }\n if (!pClassName) {\n pClassName = STATE_CLASS.PARENT_FULLSCREEN\n }\n if (!this._orgCss) {\n this._orgCss = Util.filterStyleFromText(root)\n }\n Util.addClass(root, rootClass)\n if (el && el !== root && !this._orgPCss) {\n /**\n * @private\n */\n this._orgPCss = Util.filterStyleFromText(el)\n Util.addClass(el, pClassName)\n }\n }\n\n /**\n *\n * @param { HTMLElement } root\n * @param { HTMLElement } [el]\n * @param { string } [rootClass]\n * @param { string } [pClassName]\n */\n recoverFullStyle (root, el, rootClass, pClassName) {\n if (!pClassName) {\n pClassName = STATE_CLASS.PARENT_FULLSCREEN\n }\n if (this._orgCss) {\n Util.setStyleFromCsstext(root, this._orgCss)\n this._orgCss = ''\n }\n Util.removeClass(root, rootClass)\n if (el && el !== root && this._orgPCss) {\n Util.setStyleFromCsstext(el, this._orgPCss)\n this._orgPCss = ''\n Util.removeClass(el, pClassName)\n }\n }\n\n /**\n * @param { HTMLElement } [el]\n * @returns { Promise<void>; }\n */\n getFullscreen (el = this.config.fullscreenTarget) {\n const { root, video } = this\n if (!el) {\n el = root\n }\n this._fullScreenOffset = {\n top: Util.scrollTop(),\n left: Util.scrollLeft()\n }\n // if (root.getAttribute('style')) {\n // this._orgCss = root.style.cssText\n // root.removeAttribute('style')\n // }\n this._fullscreenEl = el\n /**\n * @private\n */\n this._fullActionFrom = 'get'\n const fullEl = Util.getFullScreenEl()\n if (fullEl === this._fullscreenEl) {\n this.onFullscreenChange()\n return\n }\n try {\n for (let i = 0; i < GET_FULLSCREEN_API.length; i++) {\n const key = GET_FULLSCREEN_API[i]\n if (el[key]) {\n const ret = key === 'webkitRequestFullscreen' ? el.webkitRequestFullscreen(window.Element.ALLOW_KEYBOARD_INPUT) : el[key]()\n if (ret && ret.then) {\n return ret\n } else {\n return Promise.resolve()\n }\n }\n }\n if (video.fullscreenEnabled || video.webkitSupportsFullscreen) {\n video.webkitEnterFullscreen()\n return Promise.resolve()\n }\n return Promise.reject(new Error('call getFullscreen fail'))\n } catch (e) {\n return Promise.reject(new Error('call getFullscreen fail'))\n }\n }\n\n /**\n * @param { HTMLElement } [el]\n * @returns { Promise<void>; }\n */\n exitFullscreen (el) {\n if (!this._fullscreenEl || !Util.getFullScreenEl()) {\n return\n }\n const { root, video } = this\n if (el) {\n el = root\n }\n this._fullActionFrom = 'exit'\n for (let i = 0; i < EXIT_FULLSCREEN_API.length; i++) {\n const key = EXIT_FULLSCREEN_API[i]\n if (document[key]) {\n const ret = document[key]()\n if (ret && ret.then) {\n return ret\n } else {\n return Promise.resolve()\n }\n }\n }\n if (video && video.webkitSupportsFullscreen) {\n video.webkitExitFullScreen()\n return Promise.resolve()\n }\n return Promise.reject(new Error('call exitFullscreen fail'))\n }\n\n /**\n * @param { HTMLElement } [el]\n * @returns\n */\n getCssFullscreen (el = this.config.fullscreenTarget) {\n if (this.fullscreen) {\n this.exitFullscreen()\n }\n this._cssfullscreenEl = el\n this.changeFullStyle(this.root, el, el ? STATE_CLASS.INNER_FULLSCREEN : STATE_CLASS.CSS_FULLSCREEN)\n this.isCssfullScreen = true\n this.emit(Events.CSS_FULLSCREEN_CHANGE, true)\n }\n\n /**\n * @param { HTMLElement } [el]\n * @returns\n */\n exitCssFullscreen () {\n const _class = this._cssfullscreenEl ? STATE_CLASS.INNER_FULLSCREEN : STATE_CLASS.CSS_FULLSCREEN\n if (!this.fullscreen) {\n this.recoverFullStyle(this.root, this._cssfullscreenEl, _class)\n } else {\n this.removeClass(_class)\n }\n this._cssfullscreenEl = null\n this.isCssfullScreen = false\n this.emit(Events.CSS_FULLSCREEN_CHANGE, false)\n }\n\n /**\n * @description 播放器焦点状态,控制栏显示\n * @param { {\n * autoHide?: boolean, // 是否可以自动隐藏\n * delay?: number // 自动隐藏的延迟时间,ms, 不传默认使用3000ms\n * } } [data]\n */\n focus (data = { autoHide: !this.config.closePlayerBlur, delay: this.config.inactive }) {\n if (this.isActive) {\n this.onFocus(data)\n return\n }\n this.emit(Events.PLAYER_FOCUS, {\n paused: this.paused,\n ended: this.ended,\n ...data\n })\n }\n\n /**\n * @description 取消播放器当前焦点状态\n * @param { { ignorePaused?: boolean } } [data]\n */\n blur (data = { ignorePaused: false }) {\n if (!this.isActive) {\n this.onBlur(data)\n return\n }\n this.emit(Events.PLAYER_BLUR, {\n paused: this.paused,\n ended: this.ended,\n ...data\n })\n }\n\n /**\n * @protected\n * @param { { autoHide?: boolean, delay?: number} } [data]\n * @returns\n */\n onFocus (data = { autoHide: true, delay: 3000 }) {\n this.isActive = true\n this.removeClass(STATE_CLASS.ACTIVE)\n if (this.userTimer) {\n Util.clearTimeout(this, this.userTimer)\n }\n if (data.autoHide === false) {\n return\n }\n const time = data && data.delay ? data.delay : this.config.inactive\n this.userTimer = Util.setTimeout(this, () => {\n this.blur()\n }, time)\n }\n\n /**\n * @protected\n * @param {{ ignorePaused?: boolean }} [data]\n * @returns\n */\n onBlur (data = { ignorePaused: false }) {\n if (!this.isActive) {\n return\n }\n const { closePauseVideoFocus } = this.config\n this.isActive = false\n if (data.ignorePaused || closePauseVideoFocus || (!this.paused && !this.ended)) {\n this.addClass(STATE_CLASS.ACTIVE)\n }\n }\n\n /**\n * @protected\n */\n onCanplay () {\n this.state >= STATES.RUNNING && this.removeClass(STATE_CLASS.ENTER)\n this.removeClass(STATE_CLASS.LOADING)\n this.isCanplay = true\n this.waitTimer && Util.clearTimeout(this, this.waitTimer)\n }\n\n /**\n * @protected\n */\n onPlay () {\n // this.addClass(STATE_CLASS.PLAYING)\n // this.removeClass(STATE_CLASS.NOT_ALLOW_AUTOPLAY)\n if (this.state === STATES.ENDED) {\n this.setState(STATES.RUNNING)\n }\n this.removeClass(STATE_CLASS.PAUSED)\n this.ended && this.removeClass(STATE_CLASS.ENDED)\n !this.config.closePlayVideoFocus && this.focus()\n }\n\n /**\n * @protected\n */\n onPause () {\n this.addClass(STATE_CLASS.PAUSED)\n if (!this.config.closePauseVideoFocus) {\n if (this.userTimer) {\n Util.clearTimeout(this, this.userTimer)\n }\n this.focus()\n }\n }\n\n /**\n * @protected\n */\n onEnded () {\n this.addClass(STATE_CLASS.ENDED)\n this.setState(STATES.ENDED)\n // this.removeClass(STATE_CLASS.PLAYING)\n }\n\n /**\n * @protected\n */\n onError () {\n this.setState(STATES.ERROR)\n this.removeClass(STATE_CLASS.NOT_ALLOW_AUTOPLAY)\n this.removeClass(STATE_CLASS.NO_START)\n this.removeClass(STATE_CLASS.ENTER)\n this.removeClass(STATE_CLASS.LOADING)\n this.addClass(STATE_CLASS.ERROR)\n }\n\n /**\n * @protected\n */\n onSeeking () {\n if (!this.isSeeking) {\n const { _played } = this\n _played.acc += _played.begin < _played.end && _played.end > -1 ? _played.end - _played.begin : 0\n _played.begin = parseInt(this.video.currentTime * 1000, 10)\n _played.end = -1\n }\n this.isSeeking = true\n this.addClass(STATE_CLASS.SEEKING)\n }\n\n /**\n * @protected\n */\n onSeeked () {\n this.isSeeking = false\n // for ie,playing fired before waiting\n if (this.waitTimer) {\n Util.clearTimeout(this, this.waitTimer)\n }\n this.removeClass(STATE_CLASS.LOADING)\n this.removeClass(STATE_CLASS.SEEKING)\n }\n\n /**\n * @protected\n */\n onWaiting () {\n if (this.waitTimer) {\n Util.clearTimeout(this, this.waitTimer)\n }\n this.waitTimer = Util.setTimeout(this, () => {\n this.addClass(STATE_CLASS.LOADING)\n Util.clearTimeout(this, this.waitTimer)\n this.waitTimer = null\n }, 200)\n }\n\n /**\n * @protected\n */\n onPlaying () {\n const { NO_START, PAUSED, ENDED, ERROR, REPLAY, LOADING } = STATE_CLASS\n const clsList = [NO_START, PAUSED, ENDED, ERROR, REPLAY, LOADING]\n clsList.forEach((cls) => {\n this.removeClass(cls)\n })\n }\n\n /**\n * @protected\n */\n onTimeupdate () {\n !this._videoHeight && this.resize()\n if ((this.waitTimer || this.hasClass(STATE_CLASS.LOADING)) && this.video.readyState > 2) {\n this.removeClass(STATE_CLASS.LOADING)\n Util.clearTimeout(this, this.waitTimer)\n this.waitTimer = null\n }\n\n if (this._played.begin < 0) {\n this._played.begin = parseInt(this.video.currentTime * 1000, 10)\n }\n this._played.end = parseInt(this.video.currentTime * 1000, 10)\n }\n\n onVolumechange () {\n Util.typeOf(this.config.volume) === 'Number' && (this.config.volume = this.volume)\n }\n\n onRatechange () {\n this.config.defaultPlaybackRate = this.playbackRate\n }\n\n /**\n *\n * @param { number } time\n * @returns { boolean }\n */\n checkBuffer (time) {\n const buffered = this.video.buffered\n if (!buffered || buffered.length === 0 || !this.duration) {\n return true\n }\n const currentTime = time || this.video.currentTime || 0.2\n const len = buffered.length\n for (let i = 0; i < len; i++) {\n if (buffered.start(i) <= currentTime && buffered.end(i) > currentTime) {\n return true\n }\n }\n return false\n }\n\n /**\n * @description position video/audio according to height ratio and y coordinate\n * @param { { h: number, y?: number, x?:number, w?:number} } pos\n * @returns\n */\n position (pos = { h: 0, y: 0, x: 0, w: 0 }) {\n if (!pos || !pos.h) {\n return\n }\n const rvH = 1 / pos.h\n let _transform = rvH !== 1 ? `scale(${rvH})` : ''\n let _tx = 0; let _ty = 0\n if (pos.y) {\n _ty = (100 - pos.h * 100) / 2 - pos.y * 100\n }\n if (pos.w && pos.x) {\n _tx = (100 - pos.w * 100) / 2 - pos.x * 100\n }\n _transform += ` translate(${_tx}%, ${_ty}%)`\n this.video.style.transform = _transform\n this.video.style.webkitTransform = _transform\n }\n\n resize () {\n const { videoWidth, videoHeight } = this.video\n const { fitVideoSize, videoFillMode } = this.config\n\n if (videoFillMode === 'fill' || videoFillMode === 'cover') {\n this.setAttribute('data-xgfill', videoFillMode)\n }\n\n if (!videoHeight || !videoWidth) {\n return\n }\n this._videoHeight = videoHeight\n this._videoWidth = videoWidth\n const containerSize = this.root.getBoundingClientRect()\n const controlsHeight = this.controls && this.innerContainer ? this.controls.root.getBoundingClientRect().height : 0\n const width = containerSize.width\n const height = containerSize.height - controlsHeight\n const videoFit = parseInt(videoWidth / videoHeight * 1000, 10)\n const fit = parseInt(width / height * 1000, 10)\n let rWidth = width\n let rHeight = height\n const _style = {}\n if ((fitVideoSize === 'auto' && fit > videoFit) || fitVideoSize === 'fixWidth') {\n rHeight = width / videoFit * 1000\n if (this.config.fluid) {\n _style.paddingTop = `${rHeight * 100 / rWidth}%`\n } else {\n _style.height = `${rHeight + controlsHeight}px`\n }\n } else if ((fitVideoSize === 'auto' && fit < videoFit) || fitVideoSize === 'fixHeight') {\n rWidth = videoFit * height / 1000\n _style.width = `${rWidth}px`\n }\n // 全屏不做行间css设置\n if (!this.fullscreen && !this.isCssfullScreen) {\n Object.keys(_style).map(key => {\n this.root.style[key] = _style[key]\n })\n }\n // video填充模式\n if ((videoFillMode === 'fillHeight' && fit < videoFit) || (videoFillMode === 'fillWidth' && fit > videoFit)) {\n this.setAttribute('data-xgfill', 'cover')\n }\n const data = { videoScale: videoFit, vWidth: rWidth, vHeight: rHeight, cWidth: rWidth, cHeight: rHeight + controlsHeight }\n this.emit(Events.VIDEO_RESIZE, data)\n }\n\n /**\n *\n * @param { number } left\n * @param { number } top\n * @returns\n */\n updateObjectPosition (left = 0, top = 0) {\n if (this.video.updateObjectPosition) {\n this.video.updateObjectPosition(left, top)\n return\n }\n this.video.style.objectPosition = `${left * 100}% ${top * 100}%`\n }\n\n /**\n * @protected\n * @param { number } newState\n */\n setState (newState) {\n XG_DEBUG.logInfo('setState', `state from:${STATE_ARRAY[this.state]} to:${STATE_ARRAY[newState]}`)\n this._state = newState\n }\n\n /**\n * @type { number }\n */\n get state () {\n return this._state\n }\n\n /**\n * @type { boolean }\n * @description 是否开始播放\n */\n get hasStart () {\n return this._hasStart\n }\n\n set hasStart (bool) {\n if (typeof bool === 'boolean') {\n this._hasStart = bool\n if (bool === false) {\n this._state = STATES.READY\n }\n this.emit('hasstart')\n }\n }\n\n /**\n * @typedef { {\n * url: any,\n * definition: any,\n * text?: string,\n * text?: string | { [propName: string]: any },\n * iconText?: string | { [propName: string]: any }\n * } } IDefinition\n */\n\n /**\n * @type { Array <IDefinition> }\n */\n set definitionList (list) {\n const { definition } = this.config\n definition.list = list\n this.emit('resourceReady', list)\n let cutTo = null\n let to = null\n list.map(item => {\n if (this.curDefinition === item.definition) {\n cutTo = item\n }\n if (definition.defaultDefinition === item.definition) {\n to = item\n }\n })\n if (!to && list.length > 0) {\n to = list[0]\n }\n cutTo ? this.changeDefinition(cutTo) : (to && this.changeDefinition(to))\n }\n\n get definitionList () {\n return this.config.definition.list || []\n }\n\n /**\n * @type { string }\n */\n set lang (lang) {\n const result = I18N.langKeys.filter(key => key === lang)\n if (result.length === 0 && lang !== 'zh') {\n console.error(`Sorry, set lang fail, because the language [${lang}] is not supported now, list of all supported languages is [${I18N.langKeys.join()}] `)\n return\n }\n this.config.lang = lang\n pluginsManager.setLang(lang, this)\n }\n\n get lang () {\n return this.config.lang\n }\n\n get i18n () {\n const { lang } = this.config\n return I18N.lang[lang] || I18N.lang.en\n }\n\n get i18nKeys () {\n return I18N.textKeys || {}\n }\n\n /**\n * @type { string }\n */\n get version () {\n return version\n }\n\n /**\n * @type { any }\n */\n set url (url) {\n /**\n * @private\n */\n this.__url = url\n }\n\n get url () {\n return this.__url || this.config.url\n }\n\n /**\n * @type { string }\n */\n set poster (posterUrl) {\n this.plugins.poster && this.plugins.poster.update(posterUrl)\n }\n\n get poster () {\n return this.plugins.poster ? this.plugins.poster.config.poster : this.config.poster\n }\n\n /**\n * @type { string }\n */\n get readyState () {\n const key = super.readyState\n return this.i18n[key] || key\n }\n\n get error () {\n const key = super.error\n return this.i18n[key] || key\n }\n\n get networkState () {\n const key = super.networkState\n return this.i18n[key] || key\n }\n\n /**\n * @type { boolean }\n */\n get fullscreenChanging () {\n return !(this._fullScreenOffset === null)\n }\n\n /**\n * 累计观看时长\n * @type number\n */\n get cumulateTime () {\n const { acc, end, begin } = this._played\n return begin > -1 && end > begin ? (acc + end - begin) / 1000 : acc / 1000\n }\n\n /**\n * @type { number }\n */\n get zoom () {\n return this.config.zoom\n }\n\n /**\n * @type { number }\n */\n set zoom (value) {\n this.config.zoom = value\n }\n\n /**\n * @param { string } hookName\n * @param { Function } handler\n * @param { {pre: Function| null , next: Function | null} } preset\n * @returns\n */\n hook (hookName, handler, preset = { pre: null, next: null }) {\n // eslint-disable-next-line no-return-assign\n return hook.call(this, ...arguments)\n }\n\n /**\n * @param { string } hookName\n * @param { (player: any, ...args) => boolean | Promise<any> } handler\n * @param {...any} args\n * @returns {boolean} isSuccess\n */\n useHooks (hookName, handler) {\n return useHooks.call(this, ...arguments)\n }\n\n /**\n *\n * @param { string } pluginName\n * @param { string } hookName\n * @param { (plugin: any, ...args) => boolean | Promise<any> } handler\n * @param {...any} args\n * @returns { boolean } isSuccess\n */\n usePluginHooks (pluginName, hookName, handler, ...args) {\n return usePluginHooks.call(this, ...arguments)\n }\n\n /***\n * @deprecated\n * 插件全部迁移完成再做删除\n */\n static install (name, descriptor) {\n if (!Player.plugins) {\n Player.plugins = {}\n }\n if (!Player.plugins[name]) {\n Player.plugins[name] = descriptor\n }\n }\n\n /***\n * @deprecated\n * 插件全部迁移完成再做删除\n */\n static use (name, descriptor) {\n if (!Player.plugins) {\n Player.plugins = {}\n }\n Player.plugins[name] = descriptor\n }\n\n static defaultPreset = null\n\n /**\n * @description 自定义media构造函数\n */\n static XgVideoProxy = null\n}\n\nexport {\n Player as default,\n Plugin,\n BasePlugin,\n Events,\n Errors,\n Sniffer,\n Util,\n STATE_CLASS,\n I18N\n}\n","/**\n * @typedef { {\n * id?: string,\n * el?: HTMLElement,\n * url?: any,\n * nullUrlStart?: boolean,\n * width?: number | string,\n * height?: number | string,\n * fluid?: boolean,\n * fitVideoSize?: 'fixWidth'|'fixHeight'|'fixed',\n * videoFillMode?: 'auto'|'fillHeight'|'fillWidth'|'fill'|'cover',\n * volume?: number | { [propName: string]: any },\n * autoplay?: boolean,\n * autoplayMuted?: boolean,\n * loop?: boolean,\n * isLive?: boolean,\n * zoom?: number,\n * videoInit?: boolean,\n * poster?: string | { [propName: string]: any },\n * isMobileSimulateMode?: 'mobile' | 'pc',\n * defaultPlaybackRate?: number,\n * execBeforePluginsCall?: () => any,\n * allowSeekAfterEnded?: boolean,\n * enableContextmenu?: boolean,\n * closeVideoClick?: boolean,\n * closeVideoDblclick?: boolean,\n * closePlayerBlur?: boolean,\n * closeDelayBlur?: boolean,\n * leavePlayerTime?: number,\n * closePlayVideoFocus?: boolean,\n * closePauseVideoFocus?: boolean,\n * closeFocusVideoFocus?: boolean,\n * closeControlsBlur?: boolean,\n * videoAttributes?: { [propName: string]: any },\n * startTime?: number,\n * seekedStatus?: 'play' | 'pause' | 'auto',\n * miniprogress?: boolean,\n * disableSwipeHandler?: () => any,\n * enableSwipeHandler?: () => any,\n * ignores?: Array<'cssfullscreen' | 'screenshot' | 'pip' | 'miniscreen' | 'keyboard' | 'download' | 'playbackrate' | 'time' | 'definition' | 'error' | 'fullscreen' | 'loading' | 'mobile' | 'pc' | 'play' | 'poster' | 'progress' | 'replay' | 'start' | 'volume' | string>,\n * inactive?: number,\n * lang?: string,\n * controls?: boolean | { [propName: string]: any },\n * marginControls?: boolean,\n * fullscreenTarget?: [HTMLElement], // 全屏作用的dom元素\n * screenShot?: boolean | { [propName: string]: any },\n * rotate?: boolean | { [propName: string]: any },\n * pip?: boolean | { [propName: string]: any },\n * download?: boolean | { [propName: string]: any },\n * mini?: boolean | { [propName: string]: any },\n * cssFullscreen?: boolean | { [propName: string]: any },\n * keyShortcut?: boolean,\n * presets?: any[],\n * plugins?: any[]\n * playbackRate?: number | Array<number> | { [propName: string]: any },\n * definition?: { list: Array<{ url: any, definition: any, [propName: string]: any }> , defaultDefinition?: any, [propName: string]: any},\n * playsinline?: boolean,\n * customDuration?: number,\n * timeOffset?: number,\n * icons?: { [propName: string]: string | HTMLElement | () => HTMLElement | string },\n * i18n?: Array<any>,\n * thumbnail?: {\n * urls: Array<string>,\n * pic_num: number,\n * col: number,\n * row: number,\n * height?: number,\n * width?: number,\n * },\n * videoConfig?: { [propName: string]: any },\n * commonStyle?: {\n * progressColor?: string,\n * playedColor?: string,\n * cachedColor?: string,\n * sliderBtnStyle?: { [propName: string]: any },\n * volumeColor?: string\n * },\n * [propName: string]: any;\n * } } IPlayerOptions\n */\n\n/**\n *\n * @returns { IPlayerOptions }\n */\nexport default function getDefaultConfig () {\n return {\n id: '', // container DOM id\n el: null, // container domElement\n url: '', // the url need to play\n nullUrlStart: false, // Whether to start broadcasting with empty url\n width: 600, // Width, unit px\n height: 337.5, // height, unit px\n fluid: false,\n fitVideoSize: 'fixed', // adaptation method of container width and height, fixWidth/fixHeight/fixed/auto\n videoFillMode: 'auto', // video screen fill mode, fillHeight/fillWidth/fill/auto/cover\n volume: 0.6, // default volume or config of plug-in volume\n autoplay: false,\n autoplayMuted: false, // whether to mute the start\n loop: false, // whether to loop\n isLive: false, // whether is live\n zoom: 1,\n videoInit: true, // whether to load the video/audio when initializing\n poster: '', // cover poster url or the configuration object for poster plugin\n isMobileSimulateMode: false, // simulation state, mobile/pc\n defaultPlaybackRate: 1, // default playback rate\n execBeforePluginsCall: null,\n allowSeekAfterEnded: true, // whether to allow seek after the playback ended\n enableContextmenu: false, // whether to allow the right-click function to be enabled\n closeVideoClick: false, // is to close the video’s click/touchend behavior to switch playback and pause\n closeVideoDblclick: false, // is to close the video`s double-click behavior to switch through full screen\n closePlayerBlur: false, // whether to close the behavior of calling player.blur() when the mouse moves out of the player area\n closeDelayBlur: false, // whether to close the automatic hide control bar behavior\n leavePlayerTime: 3000, // auto hide delay time when the mouse moves out of the player area\n closePlayVideoFocus: false, // whether to close the behavior of calling player.focus() in the play event callback\n closePauseVideoFocus: false, // whether to close the behavior of calling player.focus() in the pause event callback\n closeFocusVideoFocus: false, // whether to close the behavior of calling player.video.focus() when start play\n closeControlsBlur: false, // whether to close the behavior of calling player.focus() when the mouse moves out of the control bar area\n videoAttributes: {}, // video extended attributes\n startTime: 0, // auto play start time\n seekedStatus: 'play', // play state after seek ends play/pause/auto\n miniprogress: false, // whether to enable the mini progress bar\n disableSwipeHandler: () => {\n },\n enableSwipeHandler: () => {\n },\n ignores: [], // list of plug-in names to be disabled\n whitelist: [],\n inactive: 3000, // delay time for the control bar to disappear automatically\n lang: (document.documentElement.getAttribute('lang') || navigator.language || 'zh-cn').toLocaleLowerCase(),\n controls: true,\n marginControls: false, // Whether the control bar is located at the bottom of the video and does not overlap with the video\n fullscreenTarget: null,\n controlsList: [],\n screenShot: false, // whether to enable the screenshot plug-in\n rotate: false, // whether to enable the rotate plug-in\n pip: false, // whether to enable the picture-in-picture plug-in\n download: false, // whether to enable the download plug-in\n mini: false, // whether to enable the mini-screen plug-in\n cssFullscreen: true, // whether to enable the web page full-screen plug-in\n keyShortcut: true, // whether to open the shortcut key\n presets: [],\n plugins: [],\n playbackRate: 1,\n definition: { list: [] },\n playsinline: true,\n customDuration: 0, // User-defined duration\n timeOffset: 0, // currentTime offset\n icons: {},\n i18n: [],\n thumbnail: null, // Preview image configuration\n commonStyle: { // General style configuration\n progressColor: '', // Background color of progress bar\n playedColor: '', // The background color of played part in the progress bar\n cachedColor: '', // The background color of cached part in the progress bar\n sliderBtnStyle: {}, // progress bar slider style\n volumeColor: ''\n }\n }\n}\n","import BasePlugin, { Events, Util } from '../../plugin'\n\nfunction now () {\n return new Date().getTime()\n}\n\nexport default class Xglogger extends BasePlugin {\n static get pluginName () {\n return 'xgLogger'\n }\n\n static get defaultConfig () {\n return {}\n }\n\n afterCreate () {\n this._onReset()\n this.on(Events.LOAD_START, () => {\n // console.log('Events.LOAD_START')\n this.vt = this.pt = now()\n })\n this.on(Events.LOADED_DATA, () => {\n this.vt = now()\n this.fvt = this.vt - this.pt\n // console.log('Events.LOADED_DATA', this.fvt)\n this.emitLog('firstFrame', { fvt: this.fvt })\n })\n\n this.on(Events.WAITING, this._onWaiting)\n this.on(Events.SEEKING, this._onSeeking)\n this.on(Events.SEEKED, this._onSeeked)\n this.on(Events.PLAYING, this._onPlaying)\n this.on(Events.ERROR, this._onError)\n this.on(Events.EMPTIED, this._onReset)\n }\n\n _onReset = () => {\n this.vt = 0\n this.pt = 0\n this.fvt = 0\n this._isSeeking = false\n this.seekingStart = 0\n this.waitingStart = 0\n this._isWaiting = false\n this._waitTimer && Util.clearTimeout(this, this._waitTimer)\n this._waittTimer && Util.clearTimeout(this, this._waittTimer)\n this._waitTimer = null\n this._waittTimer = null\n this.stall = {\n costTime: 0,\n currentTime: 0\n }\n this.seekData = {\n costTime: 0,\n currentTime: 0\n }\n }\n\n _onSeeking = () => {\n if (this.seekingStart) {\n return\n }\n this.seekingStart = now()\n this.emitLog('seekStart', { start: now() })\n }\n\n _onSeeked = () => {\n this.suspendSeekingStatus('seeked')\n }\n\n _onWaiting = () => {\n if (this._isWaiting || this.seekingStart) {\n return\n }\n // 卡顿标记开始\n this._isWaiting = true\n this._waitTimer = Util.setTimeout(this, () => {\n if (this._isWaiting) {\n this.waitingStart = now()\n Util.clearTimeout(this, this._waitTimer)\n this._waitTimer = null\n this.emitLog('waitingStart', { start: this.waitingStart })\n }\n }, 200)\n }\n\n _onError = () => {\n this.suspendSeekingStatus('error')\n this.suspendWaitingStatus('error')\n }\n\n _startWaitTimeout () {\n this._waittTimer = Util.setTimeout(this, () => {\n this.suspendWaitingStatus('timeout')\n Util.clearTimeout(this, this._waittTimer)\n this._waittTimer = null\n }, 20000)\n }\n\n _onPlaying = () => {\n this.suspendWaitingStatus('playing')\n }\n\n suspendSeekingStatus (endType) {\n if (!this.seekingStart) {\n return\n }\n const _now = now()\n const _cost = _now - this.seekingStart\n // console.log('suspendSeekingStatus>>', `endType:${endType} costTime:${_cost}`)\n this.seekingStart = 0\n this.emitLog('seekEnd', { end: _now, costTime: _cost })\n }\n\n suspendWaitingStatus (endType) {\n if (this._waitTimer) {\n Util.clearTimeout(this, this._waitTimer)\n this._waitTimer = null\n }\n if (!this.waitingStart) {\n return\n }\n // console.log('suspendWaitingStatus>>', endType)\n const _now = now()\n const _cost = _now - this.waitingStart\n this._isWaiting = false\n this.waitingStart = 0\n // switch (endType) {\n // case 'timeout':\n // break\n // case 'playing':\n // this._isWaiting = false\n // this.waitingStart = false\n // break\n // }\n this.emitLog('waitingEnd', { endType, costTime: _cost })\n }\n\n emitLog (eventType, data) {\n const { player } = this\n // console.log('>>>emitLog', `eventType:${eventType}`, data)\n this.emit(Events.XGLOG, {\n eventType,\n currentTime: this.player.currentTime,\n readyState: player.video.readyState,\n networkState: player.video.networkState,\n ...data\n })\n }\n}\n","import Plugin, { Events, Util } from '../../plugin'\nimport ReplaySvg from '../assets/replay.svg'\n\nclass Replay extends Plugin {\n static get pluginName () {\n return 'replay'\n }\n\n static get defaultConfig () {\n return {\n disable: false\n }\n }\n\n registerIcons () {\n return {\n replay: ReplaySvg\n }\n }\n\n afterCreate () {\n Plugin.insert(this.icons.replay, this.root, 0)\n this.__handleReplay = this.hook('replayClick', () => {\n this.player.replay()\n }, {\n pre: (e) => {\n e.preventDefault()\n e.stopPropagation()\n }\n })\n\n // this.bind('.xgplayer-replay', ['click', 'touchend'], this.__handleReplay)\n this.bind('svg', ['click', 'touchend'], this.__handleReplay)\n this.bind('.xgplayer-replay-txt', ['click', 'touchend'], this.__handleReplay)\n\n this.on(Events.ENDED, () => {\n if (!this.playerConfig.loop) {\n Util.addClass(this.player.root, 'replay')\n }\n if (this.config.disable) {\n return\n }\n this.show()\n const path = this.root.querySelector('path')\n if (path) {\n const transform = window.getComputedStyle(path).getPropertyValue('transform')\n if (typeof transform === 'string' && transform.indexOf('none') > -1) {\n return null\n } else {\n path.setAttribute('transform', transform)\n }\n }\n })\n\n this.on(Events.PLAY, () => {\n this.hide()\n })\n }\n\n handleReplay (e) {\n e.preventDefault()\n e.stopPropagation()\n this.player.replay()\n Util.removeClass(this.player.root, 'replay')\n }\n\n show () {\n if (this.config.disable) {\n return\n }\n this.root.style.display = 'flex'\n }\n\n enable () {\n this.config.disable = false\n }\n\n disable () {\n this.config.disable = true\n this.hide()\n }\n\n destroy () {\n this.unbind('svg', ['click', 'touchend'], this.__handleReplay)\n this.unbind('.xgplayer-replay-txt', ['click', 'touchend'], this.__handleReplay)\n }\n\n render () {\n return `<xg-replay class=\"xgplayer-replay\">\n <xg-replay-txt class=\"xgplayer-replay-txt\" lang-key=\"${this.i18nKeys.REPLAY}\">${this.i18n.REPLAY}</xg-replay-txt>\n </xg-replay>`\n }\n}\nexport default Replay\n","import Plugin, { Events, Util } from '../../plugin'\n/**\n * @typedef {{\n * isEndedShow?: boolean, // 是否在播放结束之后显示\n * hideCanplay?: boolean, // cnaplay 时间大于1的时候才隐藏\n * poster?: string // 封面图地址\n * }} IPosterConfig\n */\nclass Poster extends Plugin {\n static get pluginName () {\n return 'poster'\n }\n\n /**\n * @type IPosterConfig\n */\n static get defaultConfig () {\n return {\n isEndedShow: true, // 是否在播放结束之后显示\n hideCanplay: false, // cnaplay 时间大于1的时候才隐藏\n poster: '' // 封面图地址\n }\n }\n\n set isEndedShow (value) {\n this.config.isEndedShow = value\n }\n\n get isEndedShow () {\n return this.config.isEndedShow\n }\n\n hide () {\n Util.addClass(this.root, 'hide')\n }\n\n show () {\n Util.removeClass(this.root, 'hide')\n }\n\n beforeCreate (args) {\n if (typeof args.player.config.poster === 'string') {\n args.config.poster = args.player.config.poster\n }\n }\n\n afterCreate () {\n this.on(Events.ENDED, () => {\n if (!this.isEndedShow) {\n Util.addClass(this.root, 'hide')\n }\n })\n\n if (this.config.hideCanplay) {\n this.once(Events.TIME_UPDATE, () => {\n this.onTimeUpdate()\n })\n this.on(Events.URL_CHANGE, () => {\n Util.removeClass(this.root, 'hide')\n Util.addClass(this.root, 'xg-showplay')\n this.once(Events.TIME_UPDATE, () => {\n this.onTimeUpdate()\n })\n })\n } else {\n this.on(Events.PLAY, () => {\n Util.addClass(this.root, 'hide')\n })\n }\n }\n\n onTimeUpdate () {\n if (!this.player.currentTime) {\n this.once(Events.TIME_UPDATE, () => {\n this.onTimeUpdate()\n })\n } else {\n Util.removeClass(this.root, 'xg-showplay')\n }\n }\n\n update (poster) {\n if (!poster) {\n return\n }\n this.config.poster = poster\n this.root.style.backgroundImage = `url(${poster})`\n }\n\n render () {\n const { poster, hideCanplay } = this.config\n const style = poster ? `background-image:url(${poster});` : ''\n return `<xg-poster class=\"xgplayer-poster ${hideCanplay ? 'xg-showplay' : ''}\" style=\"${style}\">\n </xg-poster>`\n }\n}\n\nexport default Poster\n","import Plugin, { Util, Events, STATES } from '../../plugin'\nimport PlaySvg from '../assets/play.svg'\nimport PauseSvg from '../assets/pause.svg'\n\n/**\n * @typedef {{\n * isShowPause?: boolean, // 暂停是否常驻\n * isShowEnd?: boolean, // 播放结束常驻\n * disableAnimate?: boolean, // 禁用点击动画\n * mode?: 'hide' | 'show' | 'auto' // 控制模式: hide 常驻: show 跟随:auto\n * [propName: string]: any\n * }} IStartConfig\n */\n\nconst AnimateMap = {}\nfunction addAnimate (key, seconds, callback = { start: null, end: null }) {\n if (AnimateMap[key]) {\n window.clearTimeout(AnimateMap[key].id)\n }\n AnimateMap[key] = {}\n callback.start && callback.start()\n AnimateMap[key].id = window.setTimeout(() => {\n callback.end && callback.end()\n window.clearTimeout(AnimateMap[key].id)\n delete AnimateMap[key]\n }, seconds)\n}\n\nfunction clearAnimation () {\n Object.keys(AnimateMap).map(key => {\n window.clearTimeout(AnimateMap[key].id)\n delete AnimateMap[key]\n })\n}\n\nclass Start extends Plugin {\n static get pluginName () {\n return 'start'\n }\n\n /**\n * @type IStartConfig\n */\n static get defaultConfig () {\n return {\n isShowPause: false, // 暂停是否常驻\n isShowEnd: false, // 播放结束常驻\n disableAnimate: false, // 禁用点击动画\n mode: 'hide' // 控制模式: hide 常驻: show 跟随:auto\n }\n }\n\n constructor (args) {\n super(args)\n this.autoPlayStart = false\n }\n\n afterCreate () {\n const { player, playerConfig } = this\n\n this.initIcons()\n this.once(Events.READY, () => {\n if (playerConfig) {\n if (playerConfig.lang && playerConfig.lang === 'en') {\n Util.addClass(player.root, 'lang-is-en')\n } else if (playerConfig.lang === 'jp') {\n Util.addClass(player.root, 'lang-is-jp')\n }\n }\n })\n\n this.on(Events.AUTOPLAY_STARTED, () => {\n const className = this.config.mode === 'auto' ? 'auto-hide' : 'hide'\n Util.addClass(this.root, className)\n this.autoPlayStart = true\n this.onPlayPause('play')\n })\n\n if (!playerConfig.autoplay) {\n this.show()\n }\n\n this.on(Events.AUTOPLAY_PREVENTED, () => {\n const className = this.config.mode === 'auto' ? 'auto-hide' : 'hide'\n this.setAttr('data-state', 'play')\n Util.removeClass(this.root, className)\n this.show()\n })\n\n this.on(Events.PLAY, () => {\n this.onPlayPause('play')\n })\n\n this.on(Events.PAUSE, () => {\n this.onPlayPause('pause')\n })\n\n this.clickHandler = this.hook('startClick', this.switchPausePlay, {\n pre: (e) => {\n e.cancelable && e.preventDefault()\n e.stopPropagation()\n const { paused } = this.player\n this.emitUserAction(e, 'switch_play_pause', { props: 'paused', from: paused, to: !paused })\n }\n })\n\n this.bind(['click', 'touchend'], this.clickHandler)\n }\n\n preventDefault (e) {\n\n }\n\n registerIcons () {\n return {\n startPlay: { icon: PlaySvg, class: 'xg-icon-play' },\n startPause: { icon: PauseSvg, class: 'xg-icon-pause' }\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('xg-start-inner', icons.startPlay)\n this.appendChild('xg-start-inner', icons.startPause)\n }\n\n hide () {\n Util.addClass(this.root, 'hide')\n }\n\n show () {\n Util.removeClass(this.root, 'hide')\n }\n\n focusHide () {\n Util.addClass(this.root, 'focus-hide')\n }\n\n recover () {\n Util.removeClass(this.root, 'focus-hide')\n }\n\n switchStatus (isAnimate) {\n if (isAnimate) {\n this.setAttr('data-state', !this.player.paused ? 'play' : 'pause')\n } else {\n this.setAttr('data-state', this.player.paused ? 'play' : 'pause')\n }\n }\n\n animate (endShow) {\n addAnimate('pauseplay', 400, {\n start: () => {\n Util.addClass(this.root, 'interact')\n this.show()\n this.switchStatus(true)\n },\n end: () => {\n Util.removeClass(this.root, 'interact')\n !endShow && this.hide()\n }\n })\n }\n\n switchPausePlay (e) {\n const { player } = this\n e.cancelable && e.preventDefault()\n e.stopPropagation()\n if (player.state < STATES.READY) {\n return\n }\n const paused = this.player.paused\n if (!paused && player.state === STATES.RUNNING) {\n player.pause()\n } else {\n player.play()\n }\n }\n\n onPlayPause (status) {\n const { config, player } = this\n if (player.state < STATES.RUNNING || !this.autoPlayStart) {\n return\n }\n // 一直显示\n if (config.mode === 'show') {\n this.switchStatus()\n this.show()\n return\n }\n\n // 跟随播放器的focus状态显示和隐藏\n if (config.mode === 'auto') {\n this.switchStatus()\n return\n }\n // 暂停/播放结束状态强制显示\n if ((config.isShowPause && player.paused && !player.ended) || (config.isShowEnd && player.ended)) {\n this.switchStatus()\n this.show()\n return\n }\n\n if (config.disableAnimate) {\n this.switchStatus()\n this.hide()\n return\n }\n\n if (status === 'play') {\n this.autoPlayStart ? this.animate() : this.hide()\n } else {\n if (!this.autoPlayStart) {\n return\n }\n this.animate()\n }\n }\n\n destroy () {\n this.unbind(['click', 'touchend'], this.clickHandler)\n clearAnimation()\n }\n\n render () {\n const className = this.playerConfig.autoplay ? (this.config.mode === 'auto' ? 'auto-hide' : 'hide') : ''\n return `\n <xg-start class=\"xgplayer-start ${className}\">\n <xg-start-inner></xg-start-inner>\n </xg-start>`\n }\n}\n\nexport default Start\n","import Plugin, { Util } from '../../plugin'\n\n/**\n * @typedef { {\n * innerHtml?: string,\n * [propName: string]: any\n * } } IEnterConfig\n */\n\nclass Enter extends Plugin {\n static get pluginName () {\n return 'enter'\n }\n\n /**\n * @type IEnterConfig\n */\n static get defaultConfig () {\n return {\n innerHtml: '',\n logo: ''\n }\n }\n\n render () {\n const { innerHtml } = this.config\n const root = Util.createDom('xg-enter', '', {}, 'xgplayer-enter')\n\n if (innerHtml && innerHtml instanceof window.HTMLElement) {\n root.appendChild(innerHtml)\n } else if (innerHtml && typeof innerHtml === 'string') {\n root.innerHTML = innerHtml\n } else {\n let barStr = ''\n for (let i = 1; i <= 12; i++) {\n barStr += `<div class=\"xgplayer-enter-bar${i}\"></div>`\n }\n root.innerHTML = `<div class=\"xgplayer-enter-spinner\">${barStr}</div>`\n }\n return root\n }\n}\n\nexport default Enter\n","import Plugin, { POSITIONS } from '../../plugin'\n\nclass MiniScreenIcon extends Plugin {\n static get pluginName () {\n return 'miniscreenIcon'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 10\n }\n }\n\n afterCreate () {\n this.getMini = this.getMini.bind(this)\n this.exitMini = this.exitMini.bind(this)\n this.bind('click', this.getMini)\n }\n\n getMini () {\n this.config.onClick && this.config.onClick()\n }\n\n exitMini () {\n this.config.onClick && this.config.onClick()\n }\n\n destroy () {\n this.unbind(['click', 'touchend'], this.getMini)\n }\n\n render () {\n const langKey = 'MINISCREEN'\n return `\n <xg-icon class=\"xgplayer-miniicon\">\n <div class=\"xgplayer-icon btn-text\"><span class=\"icon-text\" lang-key=\"${this.i18nKeys[langKey]}\">${this.i18n[langKey]}</span></div>\n </xg-icon>`\n }\n}\n\nexport default MiniScreenIcon\n","import EventEmitter from 'eventemitter3'\n\nfunction getStyleSize (value) {\n const num = parseFloat(value)\n // not a percent like '100%', and a number\n const isValid = value.indexOf('%') === -1 && !isNaN(num)\n return isValid && num\n}\n\nconst measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n]\n\nconst measurementsLength = measurements.length\n\nfunction getZeroSize () {\n const size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n }\n for (let i = 0; i < measurementsLength; i++) {\n const measurement = measurements[i]\n size[measurement] = 0\n }\n return size\n}\n\nfunction getStyle (elem) {\n const style = window.getComputedStyle(elem)\n // if ( !style ) {\n // logError( 'Style returned ' + style +\n // '. Are you running this code in a hidden iframe on Firefox? ' +\n // 'See http://bit.ly/getsizebug1' );\n // }\n return style\n}\n\nfunction getSize (elem) {\n // use querySeletor if elem is string\n if (typeof elem === 'string') {\n elem = document.querySelector(elem)\n }\n\n // do not proceed on non-objects\n if (!elem || typeof elem !== 'object' || !elem.nodeType) {\n return\n }\n\n const style = getStyle(elem)\n\n // if hidden, everything is 0\n if (style.display === 'none') {\n return getZeroSize()\n }\n\n const size = {}\n size.width = elem.offsetWidth\n size.height = elem.offsetHeight\n\n const isBorderBox = size.isBorderBox = style.boxSizing === 'border-box'\n\n // get all measurements\n for (let i = 0; i < measurementsLength; i++) {\n const measurement = measurements[i]\n const value = style[measurement]\n const num = parseFloat(value)\n // any 'auto', 'medium' value will be 0\n size[measurement] = !isNaN(num) ? num : 0\n }\n\n const paddingWidth = size.paddingLeft + size.paddingRight\n const paddingHeight = size.paddingTop + size.paddingBottom\n const marginWidth = size.marginLeft + size.marginRight\n const marginHeight = size.marginTop + size.marginBottom\n const borderWidth = size.borderLeftWidth + size.borderRightWidth\n const borderHeight = size.borderTopWidth + size.borderBottomWidth\n\n const isBorderBoxSizeOuter = isBorderBox// isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n const styleWidth = getStyleSize(style.width)\n if (styleWidth !== false) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n (isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth)\n }\n\n const styleHeight = getStyleSize(style.height)\n if (styleHeight !== false) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n (isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight)\n }\n\n size.innerWidth = size.width - (paddingWidth + borderWidth)\n size.innerHeight = size.height - (paddingHeight + borderHeight)\n\n size.outerWidth = size.width + marginWidth\n size.outerHeight = size.height + marginHeight\n\n return size\n}\n\nfunction getTouch (touches, dentifier) {\n for (let i = 0; i < touches.length; i++) {\n const touch = touches[i]\n if (touch.identifier === dentifier) {\n return touch\n }\n }\n};\n\nconst EVENTS = {\n START: 'dragStart',\n MOVE: 'dragMove',\n ENDED: 'dragEnded'\n}\n\nconst POST_START_EVENTS = {\n mousedown: ['mousemove', 'mouseup'],\n touchstart: ['touchmove', 'touchend', 'touchcancel'],\n pointerdown: ['pointermove', 'pointerup', 'pointercancel']\n}\n\nexport default class Draggabilly extends EventEmitter {\n constructor (root, options = {}) {\n super()\n this.isEnabled = true\n this.isDragging = false\n this.isDown = false\n this.position = {}\n this.downPoint = {}\n this.dragPoint = { x: 0, y: 0 }\n this.startPos = { x: 0, y: 0 }\n // eslint-disable-next-line no-undef\n this._root = root instanceof Element ? root : document.querySelector(root)\n // eslint-disable-next-line no-undef\n this._handlerDom = options.handle instanceof Element ? options.handle : document.querySelector(options.handle)\n if (!this._root || !this._handlerDom) {\n return\n }\n // ['onDown', 'onUp', 'onMove', 'onCancel', 'onDocUp'].map(key => {\n // this[key] = this[key].bind(this)\n // })\n\n // if ('ontouchstart' in window) {\n // this._handlerKeys = TOUCH_HANDLERS\n // this._startKey = 'touchstart'\n // this._endKey = 'touchend'\n // } else {\n // this._handlerKeys = HANDLERS\n // this._startKey = 'mousedown'\n // this._endKey = 'mouseup'\n // }\n // this._handlerDom.addEventListener(this._startKey, this.onDown)\n this._bindStartEvent()\n }\n\n _bindStartEvent () {\n if ('ontouchstart' in window) {\n this._startKey = 'touchstart'\n } else {\n this._startKey = 'mousedown'\n }\n this[`on${this._startKey}`] = this[`on${this._startKey}`].bind(this)\n this._handlerDom.addEventListener(this._startKey, this[`on${this._startKey}`])\n POST_START_EVENTS[this._startKey].map(key => {\n this[`on${key}`] = this[`on${key}`].bind(this)\n })\n }\n\n _unbindStartEvent () {\n this._handlerDom.removeEventListener(this._startKey, this[`on${this._startKey}`])\n }\n\n _bindPostStartEvents (event) {\n if (!event) {\n return\n }\n const events = POST_START_EVENTS[this._startKey]\n // bind events to node\n events.map(eventName => {\n window.addEventListener(eventName, this[`on${eventName}`])\n })\n // save these arguments\n this._boundPointerEvents = events\n }\n\n _unbindPostStartEvents () {\n if (!this._boundPointerEvents) {\n return\n }\n this._boundPointerEvents.map(eventName => {\n // console.log('eventName', eventName, this[`on${eventName}`])\n window.removeEventListener(eventName, this[`on${eventName}`])\n })\n\n delete this._boundPointerEvents\n }\n\n enable () {\n this.isEnabled = true\n }\n\n disable () {\n this.isEnabled = false\n if (this.isDragging) {\n this.onUp()\n }\n }\n\n onDocUp (e) {\n this.onUp()\n }\n\n animate () {\n // only render and animate if dragging\n if (!this.isDragging) {\n return\n }\n\n this.positionDrag()\n\n window.requestAnimationFrame(() => {\n this.animate()\n })\n }\n\n positionDrag () {\n // this._root.style.transform = 'translate3d( ' + this.dragPoint.x +\n // 'px, ' + this.dragPoint.y + 'px, 0)';\n const transform = `translate3d(${this.dragPoint.x}px, ${this.dragPoint.y}px, 0)`\n this._root.style.transform = transform\n this._root.style.webKitTransform = transform\n }\n\n setLeftTop () {\n this._root.style.left = this.position.x + 'px'\n this._root.style.top = this.position.y + 'px'\n }\n\n onmousedown (e) {\n this.dragStart(e, e)\n }\n\n onmousemove (e) {\n this.dragMove(e, e)\n }\n\n onmouseup (e) {\n this.dragEnd(e, e)\n }\n\n ontouchstart (e) {\n const touch = e.changedTouches[0]\n this.dragStart(e, touch)\n this.touchIdentifier = touch.pointerId !== undefined\n ? touch.pointerId\n : touch.identifier\n e.preventDefault()\n }\n\n ontouchmove (e) {\n const touch = getTouch(e.changedTouches, this.touchIdentifier)\n if (touch) {\n this.dragMove(e, touch)\n }\n }\n\n ontouchend (e) {\n const touch = getTouch(e.changedTouches, this.touchIdentifier)\n if (touch) {\n this.dragEnd(e, touch)\n }\n e.preventDefault()\n }\n\n ontouchcancel (e) {\n const touch = getTouch(e.changedTouches, this.touchIdentifier)\n if (touch) {\n this.dragCancel(e, touch)\n }\n }\n\n dragStart (e, pointer) {\n if (!this._root || this.isDown || !this.isEnabled) {\n return\n }\n this.downPoint = pointer\n this.dragPoint.x = 0\n this.dragPoint.y = 0\n\n this._getPosition()\n\n const size = getSize(this._root)\n\n this.startPos.x = this.position.x\n this.startPos.y = this.position.y\n this.startPos.maxY = window.innerHeight - size.height\n this.startPos.maxX = window.innerWidth - size.width\n this.setLeftTop()\n\n this.isDown = true\n this._bindPostStartEvents(e)\n }\n\n dragRealStart (e, pointer) {\n this.isDragging = true\n this.animate()\n this.emit(EVENTS.START, this.startPos)\n }\n\n dragEnd (e, pointer) {\n if (!this._root) {\n return\n }\n this._unbindPostStartEvents()\n if (this.isDragging) {\n this._root.style.transform = ''\n this.setLeftTop()\n this.emit(EVENTS.ENDED)\n }\n this.presetInfo()\n }\n\n _dragPointerMove (e, pointer) {\n const moveVector = {\n x: pointer.pageX - this.downPoint.pageX,\n y: pointer.pageY - this.downPoint.pageY\n }\n // 检测是否有移动\n if (!this.isDragging && this.hasDragStarted(moveVector)) {\n this.dragRealStart(e, pointer)\n }\n return moveVector\n }\n\n dragMove (e, pointer) {\n e = e || window.event\n if (!this.isDown) {\n return\n }\n const { x, y } = this.startPos\n const moveVector = this._dragPointerMove(e, pointer)\n let dragX = moveVector.x\n let dragY = moveVector.y\n dragX = this.checkContain('x', dragX, x)\n dragY = this.checkContain('y', dragY, y)\n this.position.x = x + dragX\n this.position.y = y + dragY\n this.dragPoint.x = dragX\n this.dragPoint.y = dragY\n this.emit(EVENTS.MOVE, this.position)\n }\n\n dragCancel (e, pointer) {\n this.dragEnd(e, pointer)\n }\n\n presetInfo () {\n this.isDragging = false\n this.startPos = {\n x: 0,\n y: 0\n }\n this.dragPoint = {\n x: 0,\n y: 0\n }\n this.isDown = false\n }\n\n destroy () {\n this._unbindStartEvent()\n this._unbindPostStartEvents()\n if (this.isDragging) {\n this.dragEnd()\n }\n this.removeAllListeners()\n this._handlerDom = null\n }\n\n hasDragStarted (moveVector) {\n return Math.abs(moveVector.x) > 3 || Math.abs(moveVector.y) > 3\n };\n\n checkContain (axis, drag, grid) {\n if (drag + grid < 0) {\n return 0 - grid\n }\n\n if (axis === 'x' && drag + grid > this.startPos.maxX) {\n return this.startPos.maxX - grid\n }\n if (axis === 'y' && drag + grid > this.startPos.maxY) {\n return this.startPos.maxY - grid\n }\n return drag\n }\n\n _getPosition () {\n const style = window.getComputedStyle(this._root)\n const x = this._getPositionCoord(style.left, 'width')\n const y = this._getPositionCoord(style.top, 'height')\n // clean up 'auto' or other non-integer values\n this.position.x = isNaN(x) ? 0 : x\n this.position.y = isNaN(y) ? 0 : y\n\n this._addTransformPosition(style)\n }\n\n _addTransformPosition (style) {\n const transform = style.transform\n // bail out if value is 'none'\n if (transform.indexOf('matrix') !== 0) {\n return\n }\n // split matrix(1, 0, 0, 1, x, y)\n const matrixValues = transform.split(',')\n // translate X value is in 12th or 4th position\n const xIndex = transform.indexOf('matrix3d') === 0 ? 12 : 4\n const translateX = parseInt(matrixValues[xIndex], 10)\n // translate Y value is in 13th or 5th position\n const translateY = parseInt(matrixValues[xIndex + 1], 10)\n this.position.x += translateX\n this.position.y += translateY\n }\n\n _getPositionCoord (styleSide, measure) {\n if (styleSide.indexOf('%') !== -1) {\n // convert percent into pixel for Safari, #75\n const parentSize = getSize(this._root.parentNode)\n // prevent not-in-DOM element throwing bug, #131\n return !parentSize\n ? 0\n : (parseFloat(styleSide) / 100) * parentSize[measure]\n }\n return parseInt(styleSide, 10)\n }\n}\n","import Plugin, { Util, Events } from '../../plugin'\nimport PlayIcon from '../assets/play.svg'\nimport PauseIcon from '../assets/pause.svg'\nimport MiniScreenIcon from './miniScreenIcon'\nimport Draggabilly from '../../utils/draggabilly'\n\n/**\n * @typedef {{\n * index?: number,\n * disable?: boolean,\n * width?: number,\n * height?: number,\n * left?: number, // 默认左下角\n * top?: number, // 默认左下角\n * isShowIcon?: boolean, // 是否显示icon\n * isScrollSwitch?: boolean, // 滚动自动切换自动切换\n * scrollTop?: number, // 触发滚动的高度\n * disableDrag?: boolean, // 禁用拖拽\n * [propName: string]: any\n * }} IMiniScreenConfig\n */\nclass MiniScreen extends Plugin {\n static get pluginName () {\n return 'miniscreen'\n }\n\n /**\n * @type IMiniScreenConfig\n */\n static get defaultConfig () {\n return {\n index: 10,\n disable: false,\n width: 320,\n height: 180,\n left: -1, // Default bottom left corner\n top: -1, // Default bottom left corner\n isShowIcon: false, // Whether to show icon\n isScrollSwitch: false,\n scrollTop: 0, // Height to trigger scroll\n disableDrag: false // Disable drag and drop\n }\n }\n\n constructor (args) {\n super(args)\n this.isMini = false\n this.isClose = false\n const { config } = this\n this.pos = {\n left: config.left < 0 ? window.innerWidth - config.width - 20 : config.left,\n top: config.top < 0 ? window.innerHeight - config.height - 20 : config.top,\n height: this.config.height,\n width: this.config.width,\n scrollY: window.scrollY || 0\n }\n this.lastStyle = null\n }\n\n beforeCreate (args) {\n if (typeof args.player.config.mini === 'boolean') {\n args.config.isShowIcon = args.player.config.mini\n }\n }\n\n afterCreate () {\n this.initIcons()\n this.on(Events.PAUSE, () => {\n this.setAttr('data-state', 'pause')\n })\n this.on(Events.PLAY, () => {\n this.setAttr('data-state', 'play')\n })\n }\n\n onPluginsReady () {\n const { player, config } = this\n if (config.disable) {\n return\n }\n if (this.config.isShowIcon) {\n const options = {\n config: {\n onClick: () => {\n this.getMini()\n }\n }\n }\n player.controls.registerPlugin(MiniScreenIcon, options, MiniScreenIcon.pluginName)\n }\n const eventName = Util.checkTouchSupport() ? 'touchend' : 'click'\n this.bind('.mini-cancel-btn', eventName, this.onCancelClick)\n this.bind('.play-icon', eventName, this.onCenterClick)\n if (!this.config.disableDrag) {\n this._draggabilly = new Draggabilly(this.player.root, {\n handle: this.root\n })\n }\n if (this.config.isScrollSwitch) {\n window.addEventListener('scroll', this.onScroll)\n }\n }\n\n registerIcons () {\n return {\n play: { icon: PlayIcon, class: 'xg-icon-play' },\n pause: { icon: PauseIcon, class: 'xg-icon-pause' }\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('.play-icon', icons.play)\n this.appendChild('.play-icon', icons.pause)\n }\n\n onCancelClick = (e) => {\n // e.preventDefault()\n // e.stopPropagation()\n this.exitMini()\n this.isClose = true\n }\n\n onCenterClick = (e) => {\n const { player } = this\n player.paused ? player.play() : player.pause()\n }\n\n onScroll = (e) => {\n if ((!window.scrollY && window.scrollY !== 0) || Math.abs(window.scrollY - this.pos.scrollY) < 50) {\n return\n }\n let scrollHeight = parseInt(Util.getCss(this.player.root, 'height'))\n scrollHeight += this.config.scrollTop\n this.pos.scrollY = window.scrollY\n if (window.scrollY > scrollHeight + 5) {\n !this.isMini && !this.isClose && this.getMini()\n } else if (window.scrollY <= scrollHeight) {\n this.isMini && this.exitMini()\n this.isClose = false\n }\n }\n\n getMini () {\n if (this.isMini) {\n return\n }\n const { player, playerConfig } = this\n const target = this.config.target || this.player.root\n this.lastStyle = {}\n Util.addClass(player.root, 'xgplayer-mini');\n ['width', 'height', 'top', 'left'].map(key => {\n this.lastStyle[key] = target.style[key]\n target.style[key] = `${this.pos[key]}px`\n })\n if (playerConfig.fluid) {\n target.style['padding-top'] = ''\n }\n this.emit(Events.MINI_STATE_CHANGE, true)\n player.isMini = this.isMini = true\n }\n\n exitMini () {\n if (!this.isMini) {\n return false\n }\n const { player, playerConfig } = this\n const target = this.config.target || this.player.root\n Util.removeClass(player.root, 'xgplayer-mini')\n if (this.lastStyle) {\n Object.keys(this.lastStyle).map(key => {\n target.style[key] = this.lastStyle[key]\n })\n }\n this.lastStyle = null\n if (playerConfig.fluid) {\n player.root.style.width = '100%'\n player.root.style.height = '0'\n player.root.style['padding-top'] = `${playerConfig.height * 100 / playerConfig.width}%`\n }\n this.emit(Events.MINI_STATE_CHANGE, false)\n this.isMini = player.isMini = false\n }\n\n destroy () {\n window.removeEventListener('scroll', this.onScroll)\n const eventName = Util.checkTouchSupport() ? 'touchend' : 'click'\n this.unbind('.mini-cancel-btn', eventName, this.onCancelClick)\n this.unbind('.play-icon', eventName, this.onCenterClick)\n this._draggabilly && this._draggabilly.destroy()\n this._draggabilly = null\n this.exitMini()\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n return `\n <xg-mini-layer class=\"xg-mini-layer\">\n <xg-mini-header class=\"xgplayer-mini-header\">\n <div lang-key=\"${this.i18nKeys.MINI_DRAG}\">${this.i18n.MINI_DRAG}</div>\n </xg-mini-header>\n <div class=\"mini-cancel-btn\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path fill=\"#fff\" fill-rule=\"evenodd\" d=\"M3.99 3.49a1 1 0 0 1 1.414 0L10 8.085l4.596-4.595a1 1 0 1 1 1.414 1.414L11.414 9.5l4.596 4.596a1 1 0 0 1 .084 1.32l-.084.094a1 1 0 0 1-1.414 0L10 10.914 5.404 15.51a1 1 0 0 1-1.414-1.414L8.585 9.5 3.99 4.904a1 1 0 0 1-.084-1.32z\"></path>\n </svg>\n </div>\n <div class=\"play-icon\">\n </div>\n </xg-mini-layer>`\n }\n}\n\nexport {\n MiniScreen as default,\n MiniScreenIcon\n}\n","import { BasePlugin, Sniffer } from '../../plugin'\nimport { runHooks } from '../../plugin/hooksDescriptor'\n\nconst MOUSE_EVENTS = {\n mouseenter: 'onMouseEnter',\n mouseleave: 'onMouseLeave',\n mousemove: 'onMouseMove'\n}\n\nconst HOOKS = ['videoClick', 'videoDbClick']\n\nexport default class PCPlugin extends BasePlugin {\n static get pluginName () {\n return 'pc'\n }\n\n static get defaultConfig () {\n return {\n disableContextmenu: true\n }\n }\n\n afterCreate () {\n this._clickCount = 0\n HOOKS.map(item => {\n this.__hooks[item] = null\n })\n const { enableContextmenu, isMobileSimulateMode } = this.playerConfig\n if (isMobileSimulateMode || (Sniffer.device === 'mobile' && !Sniffer.os.isIpad)) {\n return\n }\n this.config.disableContextmenu = !enableContextmenu\n this.initEvents()\n }\n\n initEvents () {\n const { video, root } = this.player\n\n root.addEventListener('click', this.onVideoClick, false)\n video.addEventListener('dblclick', this.onVideoDblClick, false)\n Object.keys(MOUSE_EVENTS).map(item => {\n root.addEventListener(item, this[MOUSE_EVENTS[item]], false)\n })\n this.config.disableContextmenu && video.addEventListener('contextmenu', this.onContextmenu, false)\n }\n\n switchPlayPause (e) {\n const { player } = this\n this.emitUserAction(e, 'switch_play_pause', { props: 'paused', from: player.paused, to: !player.paused })\n if (!player.ended) {\n player.paused ? player.play() : player.pause()\n } else {\n player.duration !== Infinity && player.duration > 0 && player.replay()\n }\n }\n\n onMouseMove = (e) => {\n const { player, playerConfig } = this\n if (!player.isActive) {\n player.focus({ autoHide: !playerConfig.closeDelayBlur })\n !playerConfig.closeFocusVideoFocus && player.video.focus()\n }\n }\n\n onMouseEnter = (e) => {\n const { playerConfig, player } = this\n !playerConfig.closeFocusVideoFocus && player.video.focus()\n if (playerConfig.closeDelayBlur) {\n player.focus({ autoHide: false })\n } else {\n player.focus()\n }\n }\n\n onMouseLeave = (e) => {\n const { closePlayerBlur, leavePlayerTime } = this.playerConfig\n if (!closePlayerBlur) {\n if (leavePlayerTime) {\n this.player.focus({ autoHide: true, hideDelay: leavePlayerTime })\n } else {\n this.player.blur()\n }\n }\n }\n\n onContextmenu (e) {\n e = e || window.event\n if (e.preventDefault) {\n e.preventDefault()\n }\n if (e.stopPropagation) {\n e.stopPropagation()\n } else {\n e.returnValue = false // 解决IE8右键弹出\n e.cancelBubble = true\n }\n }\n\n onVideoClick = (e) => {\n const { player, playerConfig } = this\n if (e.target && playerConfig.closeVideoClick) {\n return\n }\n if (e.target === player.root || e.target === player.video || e.target === player.innerContainer || e.target === player.video.__canvas) {\n e.preventDefault()\n if (!playerConfig.closeVideoStopPropagation) {\n e.stopPropagation()\n }\n this._clickCount++\n if (this.clickTimer) {\n clearTimeout(this.clickTimer)\n this.clickTimer = null\n }\n this.clickTimer = setTimeout(() => {\n if (!this._clickCount) {\n return\n }\n this._clickCount--\n runHooks(this, HOOKS[0], (plugin, data) => {\n this.switchPlayPause(data.e)\n }, { e, paused: player.paused })\n clearTimeout(this.clickTimer)\n this.clickTimer = null\n }, 300)\n }\n }\n\n onVideoDblClick = (e) => {\n const { player, playerConfig } = this\n if (!e.target || (e.target !== player.video && e.target !== player.video.__canvas) || playerConfig.closeVideoDblclick) {\n return\n }\n if (this._clickCount < 2) {\n this._clickCount = 0\n return\n }\n this._clickCount = 0\n if (this.clickTimer) {\n clearTimeout(this.clickTimer)\n this.clickTimer = null\n }\n e.preventDefault()\n e.stopPropagation()\n runHooks(this, HOOKS[1], (plugin, data) => {\n this.emitUserAction(data.e, 'switch_fullscreen', { props: 'fullscreen', from: player.fullscreen, to: !player.fullscreen })\n player.fullscreen ? player.exitFullscreen() : player.getFullscreen()\n }, { e, fullscreen: player.fullscreen })\n }\n\n destroy () {\n const { video, root } = this.player\n this.clickTimer && clearTimeout(this.clickTimer)\n root.removeEventListener('click', this.onVideoClick, false)\n video.removeEventListener('dblclick', this.onVideoDblClick, false)\n video.removeEventListener('contextmenu', this.onContextmenu, false)\n Object.keys(MOUSE_EVENTS).map(item => {\n root.removeEventListener(item, this[MOUSE_EVENTS[item]], false)\n })\n }\n}\n","var classof = require('../internals/classof-raw');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = function (value) {\n if (typeof value != 'number' && classof(value) != 'Number') {\n throw TypeError('Incorrect invocation');\n }\n return +value;\n};\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n var str = toString(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar toInteger = require('../internals/to-integer');\nvar thisNumberValue = require('../internals/this-number-value');\nvar repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar nativeToFixed = 1.0.toFixed;\nvar floor = Math.floor;\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar multiply = function (data, n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\n\nvar divide = function (data, n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\n\nvar dataToString = function (data) {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = String(data[index]);\n s = s === '' ? t : s + repeat.call('0', 7 - t.length) + t;\n }\n } return s;\n};\n\nvar FORCED = nativeToFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !fails(function () {\n // V8 ~ Android 4.3-\n nativeToFixed.call({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toInteger(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(data, 0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(data, 1e7, 0);\n j -= 7;\n }\n multiply(data, pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(data, 1 << 23);\n j -= 23;\n }\n divide(data, 1 << j);\n multiply(data, 1, 1);\n divide(data, 2);\n result = dataToString(data);\n } else {\n multiply(data, 0, z);\n multiply(data, 1 << -e, 0);\n result = dataToString(data) + repeat.call('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat.call('0', fractDigits - k) + result\n : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","\nconst EVENTS = {\n PRESS: 'press',\n PRESS_END: 'pressend',\n DOUBlE_CLICK: 'doubleclick',\n CLICK: 'click',\n TOUCH_MOVE: 'touchmove',\n TOUCH_START: 'touchstart',\n TOUCH_END: 'touchend'\n}\n\nconst TOUCHS = {\n start: 'touchstart',\n end: 'touchend',\n move: 'touchmove',\n cancel: 'touchcancel'\n}\n\nconst MOUSES = {\n start: 'mousedown',\n end: 'mouseup',\n move: 'mousemove',\n cancel: 'mouseleave'\n}\n\nfunction getTouch (touches) {\n if (touches && touches.length > 0) {\n return touches[touches.length - 1]\n } else {\n return null\n }\n}\n\nfunction preventToucheDefault (e) {\n console.log('preventToucheDefault')\n const ua = navigator.userAgent;\n /(?:iPhone|iPad)/.test(ua) && e.cancelable && e.preventDefault()\n}\n\nfunction getDefaultConfig () {\n return {\n pressDelay: 600,\n dbClickDelay: 300,\n disablePress: false,\n disableDbClick: false,\n miniStep: 2,\n needPreventDefault: true\n }\n}\n\nclass Touche {\n constructor (dom, config = { eventType: 'touch' }) {\n this._pos = {\n moving: false,\n start: false,\n x: 0,\n y: 0\n }\n this.config = getDefaultConfig()\n Object.keys(config).map(key => {\n this.config[key] = config[key]\n })\n this.root = dom\n this.events = config.eventType === 'mouse' ? MOUSES : TOUCHS\n this.pressIntrvalId = null\n this.dbIntrvalId = null\n this.__handlers = {}\n this._initEvent()\n }\n\n _initEvent () {\n this.onTouchStart = this.onTouchStart.bind(this)\n this.onTouchMove = this.onTouchMove.bind(this)\n this.onTouchEnd = this.onTouchEnd.bind(this)\n this.onTouchCancel = this.onTouchCancel.bind(this)\n this.root.addEventListener(this.events.start, this.onTouchStart)\n }\n\n __setPress (e) {\n const { config } = this\n if (this.pressIntrvalId) {\n this.__clearPress()\n }\n this.pressIntrvalId = setTimeout(() => {\n this.trigger(EVENTS.PRESS, e)\n this._pos.press = true\n this.__clearPress()\n }, config.pressDelay)\n }\n\n __clearPress () {\n window.clearTimeout(this.pressIntrvalId)\n this.pressIntrvalId = null\n }\n\n __setDb (e) {\n const { config } = this\n if (this.dbIntrvalId) {\n this.__clearDb()\n this.trigger(EVENTS.DOUBlE_CLICK, e)\n return\n }\n this.dbIntrvalId = setTimeout(() => {\n this.__clearDb()\n if (!this._pos.start && !this._pos.press && !this._pos.moving) {\n this.trigger(EVENTS.CLICK, e)\n }\n }, config.dbClickDelay)\n }\n\n __clearDb () {\n clearTimeout(this.dbIntrvalId)\n this.dbIntrvalId = null\n }\n\n on (event, handler) {\n if (!this.__handlers[event]) {\n this.__handlers[event] = []\n }\n this.__handlers[event].push(handler)\n }\n\n off (event, handler) {\n if (!this.__handlers[event]) {\n return\n }\n const handlers = this.__handlers[event]\n let index = -1\n for (let i = 0; i < handlers.length; i++) {\n if (handlers[i] === handler) {\n index = i\n break\n }\n }\n if (index >= 0) {\n this.__handlers[event].splice(index, 1)\n }\n }\n\n trigger (event, e) {\n if (!this.__handlers[event]) {\n return\n }\n this.__handlers[event].map(handler => {\n try {\n handler(e)\n } catch (error) {\n console.error(`trigger>>:${event}`, error)\n }\n })\n }\n\n onTouchStart (e) {\n const { _pos, root, config } = this\n config.needPreventDefault && preventToucheDefault(e)\n const touch = getTouch(e.touches)\n _pos.x = touch ? parseInt(touch.pageX, 10) : e.pageX\n _pos.y = touch ? parseInt(touch.pageX, 10) : e.pageX\n _pos.start = true\n this.__setPress(e)\n root.addEventListener(this.events.end, this.onTouchEnd)\n root.addEventListener(this.events.cancel, this.onTouchCancel)\n root.addEventListener(this.events.move, this.onTouchMove)\n this.trigger(EVENTS.TOUCH_START, e)\n }\n\n onTouchCancel (e) {\n this.onTouchEnd(e)\n }\n\n onTouchEnd (e) {\n const { _pos, root, config } = this\n config.needPreventDefault && preventToucheDefault(e)\n this.__clearPress()\n root.removeEventListener(this.events.cancel, this.onTouchCancel)\n root.removeEventListener(this.events.end, this.onTouchEnd)\n root.removeEventListener(this.events.move, this.onTouchMove)\n e.moving = _pos.moving\n e.press = _pos.press\n _pos.press && this.trigger(EVENTS.PRESS_END, e)\n this.trigger(EVENTS.TOUCH_END, e)\n !_pos.press && !_pos.moving && this.__setDb(e)\n _pos.press = false\n _pos.start = false\n _pos.moving = false\n }\n\n onTouchMove (e) {\n const { _pos, config } = this\n const touch = getTouch(e.touches)\n const x = touch ? parseInt(touch.pageX, 10) : e.pageX\n const y = touch ? parseInt(touch.pageY, 10) : e.pageX\n const diffx = x - _pos.x\n const diffy = y - _pos.y\n if (Math.abs(diffy) < config.miniStep && Math.abs(diffx) < config.miniStep) {\n return\n }\n this.__clearPress()\n _pos.press && this.trigger(EVENTS.PRESS_END, e)\n _pos.press = false\n _pos.moving = true\n this.trigger(EVENTS.TOUCH_MOVE, e)\n }\n\n destroy () {\n const map = {\n touchend: 'onTouchEnd',\n touchmove: 'onTouchMove',\n touchstart: 'onTouchStart'\n }\n Object.keys(map).map(key => {\n this.root.removeEventListener('touchend', this[map[key]])\n })\n }\n}\n\nexport default Touche\n","import Plugin, { Events, Util, Sniffer, STATES } from '../../plugin'\nimport Touche from './touch'\nimport SeekTipIcon from '../assets/seekicon.svg'\n// import BackSvg from './back.svg'\n\n/**\n * @typedef {{\n * index?: number,\n * disableGesture?: boolean,\n * gestureX?: boolean,\n * gestureY?: boolean,\n * gradient?: 'normal' | 'none' | 'top' | 'bottom',\n * isTouchingSeek?: boolean,\n * miniMoveStep?: number,\n * miniYPer?: number,\n * scopeL?: number,\n * scopeR?: number,\n * pressRate?: number,\n * darkness?: boolean,\n * maxDarkness?: number,\n * disableActive?: boolean,\n * disableTimeProgress?: boolean,\n * hideControlsActive?: boolean,\n * hideControlsEnd?: boolean,\n * moveDuration?: number,\n * closedbClick?: boolean,\n * disablePress?: boolean,\n * disableSeekIcon?: boolean,\n * [propName: string]: any\n * }} IMobileConfig\n */\n\nconst ACTIONS = {\n AUTO: 'auto',\n SEEKING: 'seeking',\n PLAYBACK: 'playbackrate',\n LIGHT: ''\n}\n\nclass MobilePlugin extends Plugin {\n static get pluginName () {\n return 'mobile'\n }\n\n /**\n * @type IMobileConfig & { [propName: string]: any}\n */\n static get defaultConfig () {\n return {\n index: 0,\n disableGesture: false, // Whether to disable gestures\n gestureX: true, // Whether to enable horizontal gestures\n gestureY: true, // Whether to enable vertical gestures\n gradient: 'normal', // Gradient shadow, 'none'/'top'/'bottom'\n isTouchingSeek: false, // Whether to update currentTime at the same time as touchMove\n miniMoveStep: 5, // Minimum moving distance, used for move throttling\n miniYPer: 5, // Percentage of minimum displacement in y direction\n scopeL: 0.25, // Gesture range on the left\n scopeR: 0.25, // Gesture range on the right\n scopeM: 0.9, // Middle gesture range\n pressRate: 2, // playbackRate when long press\n darkness: true, // Whether to enable the dimming function on the right\n maxDarkness: 0.8, // Maximum darkness,maximum transparency of the mask\n disableActive: false, // Whether to disable the time prompt\n disableTimeProgress: false, // Whether to disable the time progress bar\n hideControlsActive: false, // Whether to hide the control bar when dragging by gesture\n hideControlsEnd: false, // Whether to hide the control bar when the gesture ended\n moveDuration: 60 * 6 * 1000, // The duration corresponding to the dragging width of the player\n closedbClick: false, // Whether to turn off the double tap gesture\n disablePress: true, // Whether to turn off the long press gesture\n disableSeekIcon: false // Disable seek prompt\n }\n }\n\n constructor (options) {\n super(options)\n /**\n * @readonly\n */\n this.pos = {\n isStart: false,\n x: 0,\n y: 0,\n time: 0,\n volume: 0,\n rate: 1,\n light: 0,\n width: 0,\n height: 0,\n scopeL: 0,\n scopeR: 0,\n scopeM1: 0,\n scopeM2: 0,\n scope: -1\n }\n /**\n * @private\n */\n this.timer = null\n }\n\n get duration () {\n return this.playerConfig.customDuration || this.player.duration\n }\n\n get timeOffset () {\n return this.playerConfig.timeOffset || 0\n }\n\n /**\n * @private\n * @returns {[propName: string]: any}\n */\n registerIcons () {\n return {\n seekTipIcon: { icon: SeekTipIcon, class: 'xg-seek-pre' }\n }\n }\n\n afterCreate () {\n const { playerConfig, config, player } = this\n if (playerConfig.closeVideoDblclick === true) {\n config.closedbClick = true\n }\n this.resetPos()\n if (!Util.isUndefined(playerConfig.disableGesture)) {\n config.disableGesture = !!playerConfig.disableGesture\n }\n this.appendChild('.xg-seek-icon', this.icons.seekTipIcon)\n\n this.xgMask = Util.createDom('xg-mask', '', {}, 'xgmask')\n player.root.appendChild(this.xgMask)\n\n this.initCustomStyle()\n\n this.registerThumbnail()\n\n const eventType = Sniffer.device !== 'mobile' ? 'mouse' : 'touch'\n this.touch = new Touche(this.root, { eventType, needPreventDefault: !this.config.disableGesture })\n\n this.root.addEventListener('contextmenu', e => {\n e.preventDefault()\n })\n\n player.root.addEventListener('touchmove', this.onRootTouchMove, true)\n player.root.addEventListener('touchend', this.onRootTouchEnd, true)\n\n this.on(Events.DURATION_CHANGE, () => {\n const { player, config } = this\n if (player.duration * 1000 < config.moveDuration) {\n config.moveDuration = player.duration * 1000\n }\n })\n\n this.on([Events.CANPLAY, Events.ENDED], () => {\n const { time, isStart } = this.pos\n if (!isStart && time > 0) {\n this.pos.time = 0\n }\n })\n\n const eventsMap = {\n touchstart: 'onTouchStart',\n touchmove: 'onTouchMove',\n touchend: 'onTouchEnd',\n press: 'onPress',\n pressend: 'onPressEnd',\n click: 'onClick',\n doubleclick: 'onDbClick'\n }\n\n Object.keys(eventsMap).map(key => {\n this.touch.on(key, (e) => {\n this[eventsMap[key]](e)\n })\n })\n\n if (!config.disableActive) {\n // Add progress bar drag event callback\n const progressPlugin = player.plugins.progress\n if (progressPlugin) {\n progressPlugin.addCallBack('dragmove', (data) => {\n this.activeSeekNote(data.currentTime, data.forward)\n })\n progressPlugin.addCallBack('dragend', () => {\n this.changeAction(ACTIONS.AUTO)\n })\n }\n }\n }\n\n registerThumbnail () {\n const { player } = this\n const { thumbnail } = player.plugins\n if (thumbnail && thumbnail.usable) {\n this.thumbnail = thumbnail.createThumbnail(null, 'mobile-thumbnail')\n const timePreview = this.find('.time-preview')\n timePreview.insertBefore(this.thumbnail, timePreview.children[0])\n }\n }\n\n initCustomStyle () {\n const { commonStyle } = this.playerConfig || {}\n const { playedColor, progressColor } = commonStyle\n if (playedColor) {\n this.find('.xg-curbar').style.backgroundColor = playedColor\n this.find('.xg-cur').style.color = playedColor\n }\n if (progressColor) {\n this.find('.xg-bar').style.backgroundColor = progressColor\n this.find('.time-preview').style.color = progressColor\n }\n this.config.disableTimeProgress && Util.addClass(this.find('.xg-timebar'), 'hide')\n }\n\n resetPos (time = 0) {\n if (this.pos) {\n this.pos.isStart = false\n this.pos.scope = -1;\n ['x', 'y', 'width', 'height', 'scopeL', 'scopeR', 'scopeM1', 'scopeM2'].map(item => {\n this.pos[item] = 0\n })\n } else {\n this.pos = {\n isStart: false,\n x: 0,\n y: 0,\n volume: 0,\n rate: 1,\n light: 0,\n width: 0,\n height: 0,\n scopeL: 0,\n scopeR: 0,\n scopeM1: 0,\n scopeM2: 0,\n scope: -1,\n time: 0\n }\n }\n }\n\n changeAction (action) {\n const { player, root } = this\n root.setAttribute('data-xg-action', action)\n const startPlugin = player.plugins.start\n startPlugin && startPlugin.recover()\n }\n\n getTouche (e) {\n const rotateDeg = this.player.rotateDeg\n const touche = e.touches && e.touches.length > 0 ? e.touches[e.touches.length - 1] : e\n // if (touches && touches.length > 0) {\n // const touche = touches[touches.length - 1]\n // if (rotateDeg === 0) {\n // return {\n // pageX: touche.pageX,\n // pageY: touche.pageY\n // }\n // } else {\n // return {\n // pageX: touche.pageY,\n // pageY: touche.pageX\n // }\n // }\n // } else {\n // }\n return rotateDeg === 0\n ? {\n pageX: touche.pageX,\n pageY: touche.pageY\n }\n : {\n pageX: touche.pageX,\n pageY: touche.pageY\n }\n }\n\n /**\n * 校验具体的操作范围\n * @param { number } x 方向位移\n * @param { number } y 方向位移\n * @param { number } diffx 方向位移差\n * @param { number } diffy 方向位移差\n * @param { any } pos 当前操作区域位置信息 包含{width, height}\n * @return { number } scope 区域 0=>中间x方向滑动 1=>左侧上下滑动 2=>右侧上下滑动\n */\n checkScope (x, y, diffx, diffy, pos) {\n const { width } = pos\n let scope = -1\n if (x < 0 || x > width) {\n return scope\n }\n\n const mold = diffy === 0 ? Math.abs(diffx) : Math.abs(diffx / diffy)\n if (Math.abs(diffx) > 0 && mold >= 1.73 && x > pos.scopeM1 && x < pos.scopeM2) {\n scope = 0\n } else if (Math.abs(diffx) === 0 || mold <= 0.57) {\n scope = x < pos.scopeL ? 1 : (x > pos.scopeR ? 2 : 3)\n }\n return scope\n }\n\n /**\n * 根据位移和操作类型进行对应处理\n * @param {number} diffx x方向位移差\n * @param {number} diffy y方向位移差\n * @param {number} scope scope 区域 0=>中间x方向滑动 1=>左侧上下滑动 2=>右侧上下滑动\n * @param {number} width 总体宽度\n * @param {number} height 总高度\n */\n executeMove (diffx, diffy, scope, width, height) {\n switch (scope) {\n case 0:\n this.updateTime(diffx / width * this.config.scopeM)\n break\n case 1:\n this.updateBrightness(diffy / height)\n break\n case 2:\n // ios系统不支持音量调节\n if (!Sniffer.os.isIos) {\n this.updateVolume(diffy / height)\n }\n break\n default:\n }\n }\n\n /**\n * 结束手势操作\n * @param {number} scope 当前手势类型 区域 0=>中间x方向滑动 1=>左侧上下滑动 2=>右侧上下滑动\n * @param {number} lastScope 上一次手势类型\n */\n endLastMove (lastScope) {\n const { pos, player, config } = this\n const time = (pos.time - this.timeOffset) / 1000\n switch (lastScope) {\n case 0:\n player.seek(Number(time).toFixed(1))\n config.hideControlsEnd ? player.blur() : player.focus()\n this.timer = setTimeout(() => {\n this.pos.time = 0\n }, 500)\n break\n case 1:\n case 2:\n default:\n }\n this.changeAction(ACTIONS.AUTO)\n }\n\n onTouchStart = (e) => {\n const { player, config, pos, playerConfig } = this\n const touche = this.getTouche(e)\n if (touche && !config.disableGesture && this.duration > 0 && !player.ended) {\n pos.isStart = true\n // e.cancelable && e.preventDefault()\n Util.checkIsFunction(playerConfig.disableSwipeHandler) && playerConfig.disableSwipeHandler()\n this.find('.xg-dur').innerHTML = Util.format(this.duration)\n // pos.volume = player.volume * 100\n const rect = this.root.getBoundingClientRect()\n if (player.rotateDeg === 90) {\n pos.top = rect.left\n pos.left = rect.top\n pos.width = rect.height\n pos.height = rect.width\n } else {\n pos.top = rect.top\n pos.left = rect.left\n pos.width = rect.width\n pos.height = rect.height\n }\n pos.x = parseInt(touche.pageX - pos.left, 10)\n pos.y = parseInt(touche.pageY - pos.top, 10)\n pos.scopeL = config.scopeL * pos.width\n pos.scopeR = (1 - config.scopeR) * pos.width\n pos.scopeM1 = pos.width * (1 - config.scopeM) / 2\n pos.scopeM2 = pos.width - pos.scopeM1\n }\n }\n\n onTouchMove = (e) => {\n const touche = this.getTouche(e)\n const { pos, config, player } = this\n if (!touche || config.disableGesture || !this.duration || !pos.isStart) {\n return\n }\n const { miniMoveStep, hideControlsActive } = config\n const x = parseInt(touche.pageX - pos.left, 10)\n const y = parseInt(touche.pageY - pos.top, 10)\n if (Math.abs(x - pos.x) > miniMoveStep || Math.abs(y - pos.y) > miniMoveStep) {\n const diffx = x - pos.x\n const diffy = y - pos.y\n let scope = pos.scope\n if (scope === -1) {\n scope = this.checkScope(x, y, diffx, diffy, pos)\n // 手势为快进快退记录起始操作时间\n if (scope === 0) {\n !hideControlsActive ? player.focus({ autoHide: false }) : player.blur()\n !pos.time && (pos.time = parseInt(player.currentTime * 1000, 10) + this.timeOffset * 1000)\n }\n pos.scope = scope\n }\n if (scope === -1 || (scope > 0 && !config.gestureY) || (scope === 0 && !config.gestureX)) {\n return\n }\n e.cancelable && e.preventDefault()\n this.executeMove(diffx, diffy, scope, pos.width, pos.height)\n pos.x = x\n pos.y = y\n } else {\n // console.log('touche.pageX - pos.x', touche.pageX - pos.x)\n }\n }\n\n onTouchEnd = (e) => {\n const { player, pos, playerConfig } = this\n if (!pos.isStart) {\n return\n }\n if (pos.scope > -1) {\n e.cancelable && e.preventDefault()\n }\n this.endLastMove(pos.scope)\n setTimeout(() => {\n player.getPlugin('progress') && player.getPlugin('progress').resetSeekState()\n }, 10)\n pos.scope = -1\n this.resetPos()\n Util.checkIsFunction(playerConfig.enableSwipeHandler) && playerConfig.enableSwipeHandler()\n this.changeAction(ACTIONS.AUTO)\n }\n\n checkIsRootTarget (e) {\n const plugins = this.player.plugins || {}\n if (plugins.progress && plugins.progress.root.contains(e.target)) {\n return false\n }\n return (plugins.start && plugins.start.root.contains(e.target)) || (plugins.controls && plugins.controls.root.contains(e.target))\n }\n\n onRootTouchMove = (e) => {\n if (this.config.disableGesture || !this.config.gestureX) {\n return\n }\n if (this.checkIsRootTarget(e)) {\n e.stopPropagation()\n if (!this.pos.isStart) {\n this.onTouchStart(e)\n } else {\n this.onTouchMove(e)\n }\n }\n }\n\n onRootTouchEnd = (e) => {\n if (this.pos.isStart && this.checkIsRootTarget(e)) {\n e.stopPropagation()\n this.onTouchEnd(e)\n const { controls } = this.player\n controls && controls.recoverAutoHide()\n }\n }\n\n sendUseAction (event) {\n const { paused } = this.player\n this.emitUserAction(event, 'switch_play_pause', {\n prop: 'paused',\n from: paused,\n to: !paused\n })\n }\n\n onClick (e) {\n const { player, config, playerConfig } = this\n if (player.state < STATES.RUNNING) {\n if (!playerConfig.closeVideoClick) {\n this.sendUseAction(new Event('click'))\n player.play()\n }\n return\n }\n\n if (!config.closedbClick || playerConfig.closeVideoClick) {\n player.isActive ? player.blur() : player.focus()\n } else if (!playerConfig.closeVideoClick) {\n if (player.isActive) {\n this.sendUseAction(new Event('click'))\n this.switchPlayPause()\n }\n player.focus()\n }\n }\n\n onDbClick (e) {\n const { config, player } = this\n if (!config.closedbClick && player.state >= STATES.RUNNING) {\n this.sendUseAction(new Event('dblclick'))\n this.switchPlayPause()\n }\n }\n\n onPress (e) {\n const { pos, config, player } = this\n if (config.disablePress) {\n return\n }\n pos.rate = this.player.playbackRate\n this.emitUserAction('press', 'change_rate', {\n prop: 'playbackRate',\n from: player.playbackRate,\n to: config.pressRate\n })\n player.playbackRate = config.pressRate\n this.changeAction(ACTIONS.PLAYBACK)\n }\n\n onPressEnd (e) {\n const { pos, config, player } = this\n if (config.disablePress) {\n return\n }\n this.emitUserAction('pressend', 'change_rate', { prop: 'playbackRate', from: player.playbackRate, to: pos.rate })\n player.playbackRate = pos.rate\n pos.rate = 1\n this.changeAction(ACTIONS.AUTO)\n }\n\n updateTime (percent) {\n const { player, config } = this\n const { duration } = this.player\n percent = Number(percent.toFixed(4))\n let time = parseInt(percent * config.moveDuration, 10) + this.timeOffset\n time += this.pos.time\n time = time < 0 ? 0 : (time > duration * 1000 ? duration * 1000 - 200 : time)\n player.getPlugin('time') && player.getPlugin('time').updateTime(time / 1000)\n player.getPlugin('progress') && player.getPlugin('progress').updatePercent(time / 1000 / this.duration, true)\n this.activeSeekNote(time / 1000, percent > 0)\n // 在滑动的同时实时seek\n if (config.isTouchingSeek) {\n // player.currentTime = time / 1000\n player.seek(Number((time - this.timeOffset) / 1000).toFixed(1))\n }\n this.pos.time = time\n }\n\n updateVolume (percent) {\n if (this.player.rotateDeg) {\n percent = -percent\n }\n const { player, pos } = this\n percent = parseInt(percent * 100, 10)\n pos.volume += percent\n if (Math.abs(pos.volume) < 10) {\n return\n }\n let volume = parseInt(player.volume * 10, 10) - parseInt(pos.volume / 10, 10)\n volume = volume > 10 ? 10 : (volume < 1 ? 0 : volume)\n player.volume = volume / 10\n pos.volume = 0\n }\n\n updateBrightness (percent) {\n if (this.player.rotateDeg) {\n percent = -percent\n }\n const { pos, config, xgMask } = this\n let light = pos.light + (0.8 * percent)\n light = light > config.maxDarkness ? config.maxDarkness : (light < 0 ? 0 : light)\n if (xgMask) {\n xgMask.style.backgroundColor = `rgba(0,0,0,${light})`\n }\n pos.light = light\n }\n\n activeSeekNote (time, isForward = true) {\n const { player, config } = this\n const isLive = !(this.duration !== Infinity && this.duration > 0)\n if (!time || typeof time !== 'number' || isLive || config.disableActive) {\n return\n }\n if (time < 0) {\n time = 0\n } else if (time > player.duration) {\n time = player.duration - 0.2\n }\n this.changeAction(ACTIONS.SEEKING)\n\n const startPlugin = player.plugins.start\n startPlugin && startPlugin.focusHide()\n\n this.find('.xg-dur').innerHTML = Util.format(this.duration)\n this.find('.xg-cur').innerHTML = Util.format(time)\n this.find('.xg-curbar').style.width = `${time / this.duration * 100}%`\n if (isForward) {\n Util.removeClass(this.find('.xg-seek-show'), 'xg-back')\n } else {\n Util.addClass(this.find('.xg-seek-show'), 'xg-back')\n }\n this.updateThumbnails(time)\n // const {thumbnail} = player.plugins\n // this.thumbnailPlugin && thumbnail.update(time)\n }\n\n updateThumbnails (time) {\n const { player } = this\n const { thumbnail } = player.plugins\n if (thumbnail && thumbnail.usable) {\n this.thumbnail && thumbnail.update(this.thumbnail, time, 160, 90)\n // this.videothumbnail && thumbnail.update(this.videothumbnail, time, rect.width, rect.height)\n }\n }\n\n switchPlayPause () {\n const { player } = this\n if (player.state < STATES.ATTACHED) {\n return false\n } else if (!player.ended) {\n if (player.paused) {\n player.play()\n } else {\n player.pause()\n }\n }\n }\n\n // 动态禁用手势\n disableGesture () {\n this.config.disableGesture = false\n }\n\n // 动态启用手势\n enableGesture () {\n this.config.disableGesture = true\n }\n\n destroy () {\n const { player } = this\n this.timer && clearTimeout(this.timer)\n this.thumbnail = null\n player.root.removeChild(this.xgMask)\n this.xgMask = null\n this.touch && this.touch.destroy()\n this.touch = null\n player.root.removeEventListener('touchmove', this.onRootTouchMove, true)\n player.root.removeEventListener('touchend', this.onRootTouchEnd, true)\n }\n\n render () {\n const className = this.config.gradient !== 'normal' ? `gradient ${this.config.gradient}` : 'gradient'\n return `\n <xg-trigger class=\"trigger\">\n <div class=\"${className}\"></div>\n <div class=\"time-preview\">\n <div class=\"xg-seek-show ${this.config.disableSeekIcon ? ' hide-seek-icon' : ''}\">\n <i class=\"xg-seek-icon\"></i>\n <span class=\"xg-cur\">00:00</span>\n <span>/</span>\n <span class=\"xg-dur\">00:00</span>\n </div>\n <div class=\"xg-bar xg-timebar\">\n <div class=\"xg-curbar\"></div>\n </div>\n </div>\n <div class=\"xg-playbackrate xg-top-note\">\n <span><i>${this.config.pressRate}X</i>${this.i18n.FORWARD}</span>\n </div>\n </xg-trigger>\n `\n }\n}\n\nexport default MobilePlugin\n","import { BasePlugin, Events } from '../../plugin'\n/**\n * @typedef {{\n * seekStep?: number,\n * checkVisible?: boolean,\n * disableBodyTrigger?: boolean,\n * keyCodeMap?: { [propName: string]: any },\n * disable: boolean,\n * [propName: string]: any\n * }} IKeyboardConfig\n */\n\nfunction preventDefault (e) {\n e.preventDefault()\n e.returnValue = false\n}\n\nfunction isDisableTag (el) {\n const tagName = el.tagName\n\n if (tagName === 'INPUT' || tagName === 'TEXTAREA' || el.isContentEditable) {\n return true\n }\n\n return false\n}\n\nclass Keyboard extends BasePlugin {\n static get pluginName () {\n return 'keyboard'\n }\n\n /**\n * @type IKeyboardConfig\n */\n static get defaultConfig () {\n return {\n seekStep: 10, // Left/right fast forward each operation time\n checkVisible: true, // Whether to check the visibility when the shortcut key takes effect\n disableBodyTrigger: false, // Whether to monitor the shortcut keys on the body\n isGlobalTrigger: false, // Whether the shortcut key needs to be triggered globally\n keyCodeMap: {},\n disable: false\n }\n }\n\n mergekeyCodeMap () {\n const extendkeyCodeMap = this.config.keyCodeMap\n if (extendkeyCodeMap) {\n Object.keys(extendkeyCodeMap).map(key => {\n if (!this.keyCodeMap[key]) {\n this.keyCodeMap[key] = extendkeyCodeMap[key]\n } else {\n ['keyCode', 'action', 'disable', 'isBodyTarget'].map(key1 => {\n extendkeyCodeMap[key][key1] && (this.keyCodeMap[key][key1] = extendkeyCodeMap[key][key1])\n })\n }\n })\n }\n }\n\n afterCreate () {\n this.config.disable = !this.playerConfig.keyShortcut\n const seekStep = typeof this.config.seekStep === 'function' ? this.config.seekStep(this.player) : this.config.seekStep\n if (!(!seekStep || typeof seekStep !== 'number')) {\n this.seekStep = seekStep\n }\n this.keyCodeMap = {\n space: {\n keyCode: 32,\n action: 'playPause',\n disable: false,\n noBodyTarget: false\n },\n up: {\n keyCode: 38,\n action: 'upVolume',\n disable: false,\n noBodyTarget: true\n },\n down: {\n keyCode: 40,\n action: 'downVolume',\n disable: false,\n noBodyTarget: true\n },\n left: {\n keyCode: 37,\n action: 'seekBack',\n disable: false\n },\n right: {\n keyCode: 39,\n action: 'seek',\n disable: false\n },\n esc: {\n keyCode: 27,\n action: 'exitFullscreen',\n disable: false\n }\n }\n this.mergekeyCodeMap()\n this.player.root.addEventListener('keydown', this.onKeydown)\n document.addEventListener('keydown', this.onBodyKeyDown)\n }\n\n checkIsVisible () {\n if (!this.config.checkVisible) {\n return true\n }\n const rec = this.player.root.getBoundingClientRect()\n const { height, top, bottom } = rec\n const h = window.innerHeight\n if ((top < 0 && top < 0 - height * 0.9) || (bottom > 0 && bottom - h > height * 0.9)) {\n return false\n }\n return true\n }\n\n checkCode (code, isBodyTarget) {\n let flag = false\n Object.keys(this.keyCodeMap).map(key => {\n if (this.keyCodeMap[key] && code === this.keyCodeMap[key].keyCode && !this.keyCodeMap[key].disable) {\n flag = !isBodyTarget || (isBodyTarget && !this.keyCodeMap[key].noBodyTarget)\n }\n })\n return flag\n }\n\n downVolume (event) {\n const { player } = this\n const val = parseFloat((player.volume - 0.1).toFixed(1))\n this.emitUserAction(event, 'change_volume', {\n prop: 'volume',\n from: player.volume,\n to: val\n })\n if (val >= 0) {\n player.volume = val\n } else {\n player.volume = 0\n }\n }\n\n upVolume (event) {\n const { player } = this\n const val = parseFloat((player.volume + 0.1).toFixed(1))\n this.emitUserAction(event, 'change_volume', {\n prop: 'volume',\n from: player.volume,\n to: val\n })\n if (val <= 1) {\n player.volume = val\n } else {\n player.volume = 1\n }\n }\n\n seek (event) {\n const { currentTime, duration } = this.player\n let _time = currentTime\n if (currentTime + this.seekStep <= duration) {\n _time = currentTime + this.seekStep\n } else {\n _time = duration - 1\n }\n this.emitUserAction(event, 'seek', {\n prop: 'currentTime',\n from: currentTime,\n to: _time\n })\n this.player.currentTime = _time\n }\n\n seekBack (event) {\n const { currentTime } = this.player\n let _time = 0\n if (currentTime - this.seekStep >= 0) {\n _time = currentTime - this.seekStep\n }\n this.emitUserAction(event, 'seek', { prop: 'currentTime', from: currentTime, to: _time })\n this.player.currentTime = _time\n }\n\n playPause (event) {\n const { player } = this\n this.emitUserAction(event, 'switch_play_pause', { prop: 'paused', from: player.paused, to: !player.paused })\n if (player.paused) {\n // eslint-disable-next-line handle-callback-err\n player.play()\n } else {\n player.pause()\n }\n }\n\n exitFullscreen (event) {\n console.log('exitFullscreen', event)\n const { player } = this\n const { isCssfullScreen, fullscreen } = player\n if (fullscreen) {\n this.emitUserAction('keyup', 'switch_fullscreen', {\n prop: 'fullscreen',\n from: fullscreen,\n to: !fullscreen\n })\n player.exitFullscreen()\n }\n if (isCssfullScreen) {\n this.emitUserAction('keyup', 'switch_css_fullscreen', {\n prop: 'cssfullscreen',\n from: isCssfullScreen,\n to: !isCssfullScreen\n })\n player.exitCssFullscreen()\n }\n }\n\n onBodyKeyDown = (event) => {\n const e = event || window.event\n if (this.config.disable || this.config.disableBodyTrigger || !this.checkIsVisible() || e.metaKey || e.altKey || e.ctrlKey) {\n return\n }\n const keyCode = e.keyCode\n if ((e.target === document.body || (this.config.isGlobalTrigger && !isDisableTag(e.target))) && this.checkCode(keyCode, true)) {\n preventDefault(e)\n this.handleKeyCode(keyCode, event)\n return false\n }\n return false\n }\n\n onKeydown = (event) => {\n const e = event || window.event\n if (this.config.disable || e.metaKey || e.altKey || e.ctrlKey) {\n return\n }\n if (e && (e.keyCode === 37 || this.checkCode(e.keyCode)) && (e.target === this.player.root || e.target === this.player.video || e.target === this.player.controls.el)) {\n preventDefault(e)\n } else {\n return true\n }\n this.handleKeyCode(e.keyCode, event)\n }\n\n handleKeyCode (curKeyCode, event) {\n Object.keys(this.keyCodeMap).map(key => {\n const { action, keyCode, disable } = this.keyCodeMap[key]\n if (keyCode === curKeyCode && !disable) {\n if (typeof action === 'function') {\n action(event, this.player)\n } else if (typeof action === 'string') {\n if (typeof this[action] === 'function') {\n this[action](event, this.player)\n }\n }\n this.emit(Events.SHORTCUT, {\n key: key,\n target: event.target,\n ...this.keyCodeMap[key]\n })\n }\n })\n }\n\n destroy () {\n this.player.root.removeEventListener('keydown', this.onKeydown)\n document.removeEventListener('keydown', this.onBodyKeyDown)\n }\n\n disable () {\n this.config.disable = true\n }\n\n enable () {\n this.config.disable = false\n }\n}\n\nexport default Keyboard\n","import Plugin, { POSITIONS } from '../../plugin/plugin'\nimport loadingIcon from '../assets/loading.svg'\n\nclass Loading extends Plugin {\n static get pluginName () {\n return 'loading'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.ROOT\n }\n }\n\n registerIcons () {\n return {\n loadingIcon: loadingIcon\n }\n }\n\n afterCreate () {\n this.appendChild('xg-loading-inner', this.icons.loadingIcon)\n }\n\n render () {\n return `\n <xg-loading class=\"xgplayer-loading\">\n <xg-loading-inner></xg-loading-inner>\n </xg-loading>`\n }\n}\n\nexport default Loading\n","'use strict';\nvar $ = require('../internals/export');\nvar $findIndex = require('../internals/array-iteration').findIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n","import { Util } from '../../plugin'\n\nconst TPL = [\n { tag: 'xg-cache', className: 'xgplayer-progress-cache', styleKey: 'cachedColor' },\n { tag: 'xg-played', className: 'xgplayer-progress-played', styleKey: 'playedColor' }\n]\n\nexport default class InnerList {\n constructor (args) {\n this.fragments = args.fragments || []\n this.focusClass = 'inner-focus'\n this.style = args.style || {\n playedColor: '',\n cachedColor: '',\n progressColor: ''\n }\n this.duration = 0\n this.cachedIndex = 0\n this.playedIndex = 0\n }\n\n updateDuration (duration) {\n this.duration = parseInt(duration * 1000)\n let start = 0\n const { fragments } = this\n this.fragments = fragments.map(item => {\n item.start = start\n item.end = start + item.percent * this.duration\n item.duration = item.percent * this.duration\n start += item.percent * this.duration\n return item\n })\n }\n\n updateProgress (type = 'played', data = { newIndex: 0, curIndex: 0, millisecond: 0 }) {\n const { progressList, fragments } = this\n const { newIndex, curIndex, millisecond } = data\n if (newIndex !== curIndex) {\n progressList.map((item, index) => {\n if (index < newIndex) {\n item[type].style.width = '100%'\n } else if (index > newIndex) {\n item[type].style.width = 0\n }\n })\n }\n const curPFrag = fragments[newIndex]\n const per = millisecond === 0 ? 0 : (millisecond - curPFrag.start) / curPFrag.duration\n progressList[newIndex][type].style.width = per < 0 ? 0 : `${per * 100}%`\n }\n\n update (data = { cached: 0, played: 0 }, duration) {\n if (!this.duration || parseInt(duration * 1000, 10) !== this.duration) {\n if (!duration && duration !== 0) {\n return\n }\n this.updateDuration(duration)\n }\n const { playedIndex, cachedIndex } = this\n if (Util.typeOf(data.played) !== 'Undefined') {\n const newPIndex = this.findIndex(data.played * 1000, playedIndex)\n this.updateProgress('played', {\n newIndex: newPIndex,\n curIndex: playedIndex,\n millisecond: parseInt(data.played * 1000, 10)\n })\n this.playedIndex = newPIndex\n }\n\n if (Util.typeOf(data.cached) !== 'Undefined') {\n const newCIndex = this.findIndex(data.cached * 1000, cachedIndex)\n this.updateProgress('cached', {\n newIndex: newCIndex,\n curIndex: cachedIndex,\n millisecond: parseInt(data.cached * 1000, 10)\n })\n this.cachedIndex = newCIndex\n }\n }\n\n findIndex (time, curIndex) {\n const { fragments } = this\n if (fragments.length === 1) {\n return 0\n }\n if (time > fragments[curIndex].start && time < fragments[curIndex].end) {\n return curIndex\n }\n this.fragments.map((item, index) => {\n if (time > item.start && time <= item.end) {\n curIndex = index\n }\n })\n return curIndex\n }\n\n findHightLight () {\n const children = this.root.children\n for (let i = 0; i < children.length; i++) {\n if (Util.hasClass(children[i], this.focusClass)) {\n return {\n dom: children[i],\n pos: children[i].getBoundingClientRect()\n }\n }\n }\n }\n\n // 根据索引获取进度条片段\n findFragment (index) {\n const children = this.root.children\n if (index < 0 || index >= children.length) {\n return null\n }\n return {\n dom: children[index],\n pos: children[index].getBoundingClientRect()\n }\n }\n\n unHightLight () {\n const children = this.root.children\n for (let i = 0; i < children.length; i++) {\n Util.removeClass(children[i], this.focusClass)\n }\n }\n\n setHightLight (index) {\n const children = this.root.children\n if (index < children.length) {\n Util.addClass(children[index], this.focusClass)\n return {\n dom: children[index],\n pos: children[index].getBoundingClientRect()\n }\n }\n }\n\n destroy () {\n this.progressList = null\n this.fragments = null\n this.root.innerHTML = ''\n }\n\n render () {\n const { progressColor } = this.style\n this.root = Util.createDom('xg-inners', '', {}, 'progress-list')\n if (this.fragments) {\n this.progressList = this.fragments.map((item) => {\n const inner = Util.createDom('xg-inner', '', {\n style: progressColor ? `background:${progressColor}; flex: ${item.percent}` : `flex: ${item.percent}`\n }, `${item.isFocus ? 'inner-focus' : ''} xgplayer-progress-inner`)\n\n this.root.appendChild(inner)\n\n TPL.map(item => {\n inner.appendChild(Util.createDom(item.tag, '', {\n style: item.styleKey ? `background: ${this.style[item.styleKey]}; width:0;` : 'width:0;'\n }, item.className))\n })\n\n return {\n cached: inner.children[0],\n played: inner.children[1]\n }\n })\n }\n return this.root\n }\n}\n","import Plugin, { Events, Util, POSITIONS, Sniffer, STATES } from '../../plugin'\nimport InnerList from './innerList'\n\n/**\n * @typedef {{\n * position?:string,\n * disable?: boolean,\n * isDragingSeek?: boolean, // 是否在拖拽的过程中更新currentTime\n * closeMoveSeek?: boolean, // 是否关闭滑块seek能力\n * isPauseMoving?: boolean, // 是否在move的时候暂停视频内容\n * isCloseClickSeek?: boolean, // 是否关闭点击进度条的时候seek\n * fragments?: Array<{percent: number}>,\n * miniMoveStep?: number,\n * miniStartStep?: number,\n * onMoveStart?: () => any, // 手势开始移动回调,\n * onMoveEnd?: () => any, // 手势移动结束回调\n * [propName: string]: any\n * }} IProgressConfig\n */\n/**\n * 进度条组件\n */\nclass Progress extends Plugin {\n static get pluginName () {\n return 'progress'\n }\n\n /**\n * @type IProgressConfig\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_CENTER,\n index: 0,\n disable: false,\n isDragingSeek: true, // 是否在拖拽的过程中更新currentTime\n closeMoveSeek: false, // 是否关闭滑块seek能力\n isPauseMoving: false, // 是否在move的时候暂停视频内容\n isCloseClickSeek: false, // 是否关闭点击进度条的时候seek\n fragments: [{ percent: 1 }],\n miniMoveStep: 5,\n miniStartStep: 2,\n onMoveStart: () => {\n }, // 手势开始移动回调\n onMoveEnd: () => {} // 手势移动结束回调\n }\n }\n\n constructor (args) {\n super(args)\n /**\n * @readonly\n */\n this.useable = false\n /**\n * @readonly\n */\n this.isProgressMoving = false\n\n /**\n * @private\n */\n this.__dragCallBacks = []\n /**\n * @private\n */\n this._state = {\n now: -1,\n direc: 0,\n time: 0\n }\n }\n\n get duration () {\n return this.playerConfig.customDuration || this.player.duration\n }\n\n get timeOffset () {\n return this.playerConfig.timeOffset || 0\n }\n\n changeState (useable = true) {\n this.useable = useable\n }\n\n /**\n * @description 创建内部进度条,并挂载到xg-outer上,\n * 并把一些对外API绑定在progress上供外部调用\n *\n */\n createInner () {\n this.innerList = new InnerList({\n fragments: this.config.fragments,\n style: this.playerConfig.commonStyle || {}\n })\n this.outer.insertBefore(this.innerList.render(), this.outer.children[0]);\n ['findHightLight', 'unHightLight', 'setHightLight', 'findFragment'].map(item => {\n this[item] = this.innerList[item].bind(this.innerList)\n })\n }\n\n afterCreate () {\n if (this.config.disable || this.playerConfig.isLive) {\n return\n }\n this.pos = {\n x: 0, // 水平方向位移\n y: 0, // 垂直方向位移\n moving: false, // 是否正在移动\n isDown: false, // 是否mouseDown\n isEnter: false // 是否触发了mouseEnter\n }\n this.outer = this.find('xg-outer')\n this.createInner()\n if (Sniffer.device === 'mobile') {\n this.config.isDragingSeek = false\n this.isMobile = true\n }\n\n this.progressBtn = this.find('.xgplayer-progress-btn')\n\n this.on(Events.TIME_UPDATE, () => {\n this.onTimeupdate()\n })\n\n this.on(Events.SEEKED, () => {\n this.onTimeupdate()\n this.onCacheUpdate()\n })\n\n this.on(Events.PROGRESS, () => {\n this.onCacheUpdate()\n })\n\n this.on(Events.ENDED, () => {\n this.onCacheUpdate()\n this._state.now = 0\n })\n\n this.on(Events.EMPTIED, () => {\n this.onReset()\n })\n\n this.bindDomEvents()\n this.initCustomStyle()\n }\n\n initCustomStyle () {\n const { commonStyle } = this.playerConfig || {}\n const { sliderBtnStyle } = commonStyle\n const { progressBtn } = this\n if (sliderBtnStyle) {\n if (typeof sliderBtnStyle === 'string') {\n progressBtn.style.boxShadow = sliderBtnStyle\n } else if (typeof sliderBtnStyle === 'object') {\n Object.keys(sliderBtnStyle).map(key => {\n progressBtn.style[key] = sliderBtnStyle[key]\n })\n }\n }\n }\n\n /**\n * 触发某一类回调监听\n * @param { string } type 类型 drag/dragend\n * @param { any} data 具体数据\n */\n triggerCallbacks (type, data) {\n if (this.__dragCallBacks.length > 0) {\n this.__dragCallBacks.map(item => {\n if (item && item.handler && item.type === type) {\n try {\n item.handler(data)\n } catch (error) {\n console.error(`[XGPLAYER][triggerCallbacks] ${item} error`, error)\n }\n }\n })\n }\n }\n\n /**\n * 供外部插件添加回调\n * @param {string} type 类型 drag/dragend\n * @param {function} handle 回调函数句柄\n */\n addCallBack (type, handle) {\n if (handle && typeof handle === 'function') {\n this.__dragCallBacks.push({ type: type, handler: handle })\n }\n }\n\n /**\n * 供外部插件移除回调\n * @param {string} type 类型 drag/dragend\n * @param {Function} event 回调函数句柄\n */\n removeCallBack (type, event) {\n const { __dragCallBacks } = this\n let _index = -1\n __dragCallBacks.map((item, index) => {\n if (item && item.type === type && item.handler === event) {\n _index = index\n }\n })\n if (_index > -1) {\n __dragCallBacks.splice(_index, 1)\n }\n }\n\n bindDomEvents () {\n const { controls, config } = this.player\n if (this.isMobile) {\n this.bind('touchstart', this.onMouseDown)\n if (controls) {\n controls.root && controls.root.addEventListener('touchmove', Util.stopPropagation)\n controls.center && controls.center.addEventListener('touchend', Util.stopPropagation)\n }\n } else {\n this.bind('mousedown', this.onMouseDown)\n !config.isMobileSimulateMode && this.bind('mouseenter', this.onMouseEnter)\n }\n }\n\n focus () {\n this.player.controls.pauseAutoHide()\n Util.addClass(this.root, 'active')\n }\n\n blur () {\n this.player.controls.recoverAutoHide()\n Util.removeClass(this.root, 'active')\n }\n\n onMoveOnly = (e) => {\n const { pos, config, player } = this\n Util.event(e)\n const _ePos = Util.getEventPos(e, player.zoom)\n const x = player.rotateDeg === 90 ? _ePos.clientY : _ePos.clientX\n if (pos.moving && Math.abs(pos.x - x) < config.miniMoveStep) {\n return\n }\n pos.moving = true\n pos.x = x\n const ret = this.computeTime(e)\n this.triggerCallbacks('dragmove', ret)\n }\n\n onBodyClick = (e) => {\n e.preventDefault()\n e.stopPropagation()\n }\n\n onMouseDown = (e) => {\n const { player, pos, config, playerConfig } = this\n const _ePos = Util.getEventPos(e, player.zoom)\n const x = player.rotateDeg === 90 ? _ePos.clientY : _ePos.clientX\n if (player.isMini || config.closeMoveSeek || (!playerConfig.allowSeekAfterEnded && player.ended)) {\n return\n }\n e.stopPropagation()\n e.preventDefault()\n this.focus()\n Util.checkIsFunction(playerConfig.disableSwipeHandler) && playerConfig.disableSwipeHandler()\n Util.checkIsFunction(config.onMoveStart) && config.onMoveStart()\n Util.event(e)\n pos.x = x\n pos.isDown = true\n pos.moving = false\n\n // 交互开始 禁止控制栏的自动隐藏功能\n player.focus({ autoHide: false })\n this.isProgressMoving = true\n Util.addClass(this.progressBtn, 'active')\n\n const ret = this.computeTime(e)\n this._state.time = ret.currentTime\n this.updateWidth(ret.currentTime, ret.percent, 0)\n\n if (this.isMobile) {\n this.bind('touchmove', this.onMouseMove)\n this.bind('touchend', this.onMouseUp)\n } else {\n this.unbind('mousemove', this.onMoveOnly)\n\n document.addEventListener('mousemove', this.onMouseMove, false)\n document.addEventListener('mouseup', this.onMouseUp, false)\n // 避免触发videoClick 暂停/播放切换\n player.root.addEventListener('click', this.onBodyClick, false)\n // this.bind('mouseup', this.onMouseUp, false)\n }\n return true\n }\n\n onMouseUp = (e) => {\n const { player, config, pos, playerConfig, _state } = this\n e.stopPropagation()\n e.preventDefault()\n Util.checkIsFunction(playerConfig.enableSwipeHandler) && playerConfig.enableSwipeHandler()\n Util.checkIsFunction(config.onMoveEnd) && config.onMoveEnd()\n Util.event(e)\n Util.removeClass(this.progressBtn, 'active')\n\n const ret = this.computeTime(e)\n if (pos.moving) {\n this.updateWidth(ret.currentTime, ret.percent, 2)\n this.triggerCallbacks('dragend', ret)\n } else {\n // this.updateWidth(ret.currentTime, ret.percent, 2)\n this.triggerCallbacks('click', ret)\n }\n\n pos.moving = false\n pos.isDown = false\n pos.x = 0\n pos.y = 0\n _state.time = 0\n if (this.isMobile) {\n this.unbind('touchmove', this.onMouseMove)\n this.unbind('touchend', this.onMouseUp)\n // 交互结束 恢复控制栏的隐藏流程\n this.blur()\n } else {\n document.removeEventListener('mousemove', this.onMouseMove, false)\n document.removeEventListener('mouseup', this.onMouseUp, false)\n player.root.removeEventListener('click', this.onBodyClick, false)\n if (!pos.isEnter) {\n this.onMouseLeave(e)\n } else {\n !playerConfig.isMobileSimulateMode && this.bind('mousemove', this.onMoveOnly)\n }\n }\n // 延迟复位,状态复位要在dom相关时间回调执行之后\n Util.setTimeout(this, () => {\n this.resetSeekState()\n }, 10)\n // 交互结束 恢复控制栏的隐藏流程\n player.focus()\n }\n\n onMouseMove = (e) => {\n const { pos, player, config, _state } = this\n if (this.isMobile) {\n e.stopPropagation()\n e.preventDefault()\n }\n Util.event(e)\n const _ePos = Util.getEventPos(e, player.zoom)\n const x = player.rotateDeg === 90 ? _ePos.clientY : _ePos.clientX\n const diff = Math.abs(pos.x - x)\n if ((pos.moving && diff < config.miniMoveStep) || (!pos.moving && diff < config.miniStartStep)) {\n return\n }\n pos.x = x\n const ret = this.computeTime(e)\n if (_state.time < ret.currentTime) {\n ret.forward = true\n } else {\n ret.forward = false\n }\n _state.time = ret.currentTime\n if (pos.isDown && !pos.moving) {\n pos.moving = true\n config.isPauseMoving && player.pause()\n this.triggerCallbacks('dragstart', ret)\n }\n this.updateWidth(ret.currentTime, ret.percent, 1)\n this.triggerCallbacks('dragmove', ret)\n }\n\n onMouseEnter = (e) => {\n const { player, pos } = this\n if (pos.isDown || pos.isEnter || player.isMini || (!player.config.allowSeekAfterEnded && player.ended)) {\n return\n }\n pos.isEnter = true\n this.bind('mousemove', this.onMoveOnly)\n this.bind('mouseleave', this.onMouseLeave)\n this.focus()\n }\n\n onMouseLeave = (e) => {\n const { player, pos } = this\n pos.isEnter = false\n if (player.isMini) {\n return\n }\n this.unbind('mousemove', this.onMoveOnly)\n if (pos.isDown) {\n this.unbind('mouseleave', this.onMouseLeave)\n return\n }\n this.blur()\n }\n\n /**\n * @description 根据currenTime和占用百分比更新进度条\n * @param {Number} currentTime 需要更新到的时间\n * @param {Number} percent 更新时间占比\n * @param {Int} type 触发类型 0-down 1-move 2-up\n */\n updateWidth (currentTime, percent, type) {\n const { config, player } = this\n if (config.isCloseClickSeek && type === 0) {\n return\n }\n const realTime = currentTime > player.duration ? player.duration - 0.2 : Number(currentTime).toFixed(1)\n // currentTime = currentTime > player.duration ? player.duration - 0.2 : Number(currentTime).toFixed(1)\n this.updatePercent(percent)\n this.updateTime(currentTime)\n if (type === 1 && (!config.isDragingSeek || player.videoConfig.mediaType === 'audio')) {\n return\n }\n this._state.now = realTime\n this._state.direc = realTime > player.currentTime ? 0 : 1\n player.seek(realTime)\n }\n\n computeTime (e) {\n const { player } = this\n const { width, height, top, left } = this.root.getBoundingClientRect()\n const _ePos = Util.getEventPos(e, player.zoom)\n let rWidth, rLeft, clientX\n if (player.rotateDeg === 90) {\n rWidth = height\n rLeft = top\n clientX = _ePos.clientY\n } else {\n rWidth = width\n rLeft = left\n clientX = _ePos.clientX\n }\n let offset = clientX - rLeft\n offset = offset > rWidth ? rWidth : (offset < 0 ? 0 : offset)\n\n let percent = offset / rWidth\n percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent)\n const currentTime = parseInt(percent * this.duration * 1000, 10) / 1000\n return {\n percent,\n currentTime,\n offset,\n width: rWidth,\n left: rLeft,\n e\n }\n }\n\n /**\n * @description 更新时间插件,在拖拽状态下要接管时间插件的更新状态\n * 本位置会和time插件交互\n * @param {number} time 根据拖拽距离计算出的时间\n */\n updateTime (time) {\n const { player, duration } = this\n if (time > duration) {\n time = duration\n } else if (time < 0) {\n time = 0\n }\n const timeIcon = player.plugins.time\n if (timeIcon) {\n timeIcon.updateTime(time)\n }\n }\n\n /**\n * @description 复位正在拖拽状态 ,拖拽的时候要避免timeupdate更新\n */\n resetSeekState () {\n this.isProgressMoving = false\n const timeIcon = this.player.plugins.time\n timeIcon && timeIcon.resetActive()\n }\n\n /**\n * @description 拖拽过程中更新UI\n * @param {number} percent 小于0的小数\n *\n */\n updatePercent (percent, notSeek) {\n this.isProgressMoving = true\n if (this.config.disable) {\n return\n }\n percent = percent > 1 ? 1 : (percent < 0 ? 0 : percent)\n this.progressBtn.style.left = `${percent * 100}%`\n this.innerList.update({ played: percent * this.duration }, this.duration)\n const { miniprogress } = this.player.plugins\n miniprogress && miniprogress.update({ played: percent * this.duration }, this.duration)\n }\n\n /**\n * @description 播放进度更新\n */\n onTimeupdate () {\n const { player, _state, duration } = this\n if (player.isSeeking || this.isProgressMoving || player.state < STATES.RUNNING) {\n return\n }\n if (_state.now > -1) {\n const abs = parseInt(_state.now * 1000, 10) - parseInt(player.currentTime * 1000, 10)\n if ((_state.direc === 0 && abs > 300) || (_state.direc === 1 && abs > -300)) {\n _state.now = -1\n return\n } else {\n _state.now = -1\n }\n }\n const time = this.timeOffset + player.currentTime\n this.innerList.update({ played: time }, duration)\n this.progressBtn.style.left = `${time / duration * 100}%`\n const { miniprogress } = this.player.plugins\n miniprogress && miniprogress.update({ played: time }, duration)\n }\n\n /**\n * @description 缓存进度更新\n */\n onCacheUpdate () {\n const { player, duration } = this\n const point = player.bufferedPoint\n this.innerList.update({ cached: point.end }, duration)\n const { miniprogress } = this.player.plugins\n miniprogress && miniprogress.update({ cached: point.end }, duration)\n }\n\n onReset () {\n this.innerList.update({ played: 0, cached: 0 }, 0)\n const { miniprogress } = this.player.plugins\n miniprogress && miniprogress.update({ cached: 0, played: 0 }, 0)\n }\n\n destroy () {\n const { player } = this\n const { controls } = player\n this.thumbnailPlugin = null\n this.innerList.destroy()\n this.innerList = null\n if (this.isMobile) {\n this.unbind('touchstart', this.onMouseDown)\n this.unbind('touchmove', this.onMouseMove)\n this.unbind('touchend', this.onMouseUp)\n if (controls) {\n controls.root && controls.root.removeEventListener('touchmove', Util.stopPropagation)\n controls.center && controls.center.removeEventListener('touchend', Util.stopPropagation)\n }\n } else {\n this.unbind('mousedown', this.onMouseDown)\n this.unbind('mouseenter', this.onMouseEnter)\n this.unbind('mousemove', this.onMoveOnly)\n document.removeEventListener('mousemove', this.onMouseMove, false)\n document.removeEventListener('mouseup', this.onMouseUp, false)\n player.root.removeEventListener('click', this.onBodyClick, false)\n }\n }\n\n render () {\n if (this.config.disable || this.playerConfig.isLive) {\n return\n }\n const controlsMode = this.player.controls ? this.player.controls.config.mode : ''\n const className = controlsMode === 'bottom' ? 'xgplayer-progress-bottom' : ''\n return `\n <xg-progress class=\"xgplayer-progress ${className}\">\n <xg-outer class=\"xgplayer-progress-outer\">\n <xg-progress-btn class=\"xgplayer-progress-btn\"></xg-progress-btn>\n </xg-outer>\n </xg-progress>\n `\n }\n}\n\nexport default Progress\n","import Plugin, { Events, POSITIONS } from '../../plugin'\nimport PlaySvg from '../assets/play.svg'\nimport PauseSvg from '../assets/pause.svg'\n\nclass Play extends Plugin {\n static get pluginName () {\n return 'play'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_LEFT,\n index: 0,\n disable: false\n }\n }\n\n afterCreate () {\n const { player, config } = this\n if (config.disable) {\n return\n }\n this.initIcons()\n this.btnClick = this.btnClick.bind(this)\n this.bind(['touchend', 'click'], this.btnClick)\n\n this.on(Events.PAUSE, () => {\n this.animate(player.paused)\n })\n this.on(Events.PLAY, () => {\n this.animate(player.paused)\n })\n this.animate(true)\n }\n\n registerIcons () {\n return {\n play: { icon: PlaySvg, class: 'xg-icon-play' },\n pause: { icon: PauseSvg, class: 'xg-icon-pause' }\n }\n }\n\n btnClick (e) {\n e.preventDefault()\n e.stopPropagation()\n const { player } = this\n this.emitUserAction(e, 'switch_play_pause', { prop: 'paused', from: player.paused, to: !player.paused })\n if (player.ended) {\n player.replay()\n } else if (player.paused) {\n player.play()\n this.animate(false)\n } else {\n player.pause()\n this.animate(true)\n }\n return false\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('.xgplayer-icon', icons.play)\n this.appendChild('.xgplayer-icon', icons.pause)\n }\n\n animate (paused) {\n const { i18nKeys } = this\n if (paused) {\n this.setAttr('data-state', 'pause')\n this.changeLangTextKey(this.find('.xg-tips'), i18nKeys.PLAY_TIPS)\n } else {\n this.setAttr('data-state', 'play')\n this.changeLangTextKey(this.find('.xg-tips'), i18nKeys.PAUSE_TIPS)\n }\n }\n\n destroy () {\n this.unbind(['touchend', 'click'], this.btnClick)\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n return `<xg-icon class=\"xgplayer-play\">\n <div class=\"xgplayer-icon\">\n </div>\n <div class=\"xg-tips\" lang-key=\"${this.i18nKeys.PLAY_TIPS}\">${this.i18n.PLAY_TIPS}</div>\n </xg-icon>`\n }\n}\nexport default Play\n","import Plugin, { POSITIONS, Util } from '../../plugin'\nimport BackSVG from '../assets/back.svg'\n\nexport default class TopBackIcon extends Plugin {\n static get pluginName () {\n return 'topbackicon'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.ROOT_TOP,\n index: 0\n }\n }\n\n afterCreate () {\n this.initIcons()\n this.onClick = (e) => {\n e.preventDefault()\n e.stopPropagation()\n this.config.onClick(e)\n }\n\n this.bind(['click', 'touchend'], this.onClick)\n }\n\n registerIcons () {\n return {\n screenBack: { icon: BackSVG, class: 'xg-fullscreen-back' }\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild(this.root, icons.screenBack)\n }\n\n show () {\n Util.addClass(this.root, 'show')\n }\n\n hide () {\n Util.removeClass(this.root, 'show')\n }\n\n render () {\n return `<xg-icon class=\"xgplayer-back\">\n </xg-icon>`\n }\n}\n","import Plugin, { Events, POSITIONS, Sniffer, STATE_CLASS, Util } from '../../plugin'\nimport TopBackIcon from './backicon'\nimport FullScreenSvg from '../assets/requestFull.svg'\nimport ExitFullScreenSvg from '../assets/exitFull.svg'\n\n/**\n * @typedef { {\n * position?: string,\n * index?: number,\n * useCssFullscreen?: boolean,\n * rotateFullscreen?: boolean,\n * switchCallback?: () => any,\n * target?: null | HTMLElement,\n * disable?: boolean,\n * needBackIcon?: boolean,\n * [propName: string]: any\n * } } IFullscreenConfig\n */\nexport default class Fullscreen extends Plugin {\n static get pluginName () {\n return 'fullscreen'\n }\n\n /**\n * @type IFullscreenConfig\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 0,\n useCssFullscreen: false, // Whether to use the page full screen\n rotateFullscreen: false, // Whether to enable rotating full screen\n switchCallback: null, // Custom switch function\n target: null, // Trigger Dom element\n disable: false,\n needBackIcon: false // Whether to enable the return button in the upper left corner of the full screen exit\n }\n }\n\n /**\n * @private\n */\n afterCreate () {\n const { config, playerConfig } = this\n if (config.disable) {\n return\n }\n\n if (config.target) {\n this.playerConfig.fullscreenTarget = this.config.target\n }\n\n const fullEl = Util.getFullScreenEl()\n\n if (playerConfig.fullscreenTarget === fullEl) {\n this.player.getFullscreen()\n }\n\n this.initIcons()\n\n this.handleFullscreen = this.hook('fullscreenChange', this.changeFullScreen, {\n pre: (e) => {\n const { fullscreen } = this.player\n this.emitUserAction(e, 'switch_fullscreen', {\n prop: 'fullscreen',\n from: fullscreen,\n to: !fullscreen\n })\n }\n })\n\n this.bind('.xgplayer-fullscreen', Sniffer.device === 'mobile' ? 'touchend' : 'click', this.handleFullscreen)\n\n this.on(Events.FULLSCREEN_CHANGE, (isFullScreen) => {\n this.changeLangTextKey(this.find('.xg-tips'), isFullScreen ? this.i18nKeys.EXITFULLSCREEN_TIPS : this.i18nKeys.FULLSCREEN_TIPS)\n this.animate(isFullScreen)\n if (this.config.needBackIcon) {\n this.show()\n }\n })\n if (this.config.needBackIcon) {\n this.topBackIcon = this.player.registerPlugin({\n plugin: TopBackIcon,\n options: {\n config: {\n onClick: (e) => {\n this.handleFullscreen(e)\n }\n }\n }\n })\n }\n if (Sniffer.device === 'mobile') {\n window.addEventListener('orientationchange', this._onOrientationChange)\n }\n }\n\n /**\n * @private\n */\n _onOrientationChange = (e) => {\n if (this.player.fullscreen && this.config.rotateFullscreen) {\n if (window.orientation === 90 || window.orientation === -90) {\n this.setRotateDeg(0)\n } else {\n this.setRotateDeg(90)\n }\n }\n }\n\n /**\n * @private\n */\n registerIcons () {\n return {\n fullscreen: { icon: FullScreenSvg, class: 'xg-get-fullscreen' },\n exitFullscreen: { icon: ExitFullScreenSvg, class: 'xg-exit-fullscreen' }\n }\n }\n\n destroy () {\n this.unbind('.xgplayer-icon', Sniffer.device === 'mobile' ? 'touchend' : 'click', this.handleFullscreen)\n if (Sniffer.device === 'mobile') {\n window.removeEventListener('orientationchange', this._onOrientationChange)\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('.xgplayer-icon', icons.fullscreen)\n this.appendChild('.xgplayer-icon', icons.exitFullscreen)\n }\n\n setRotateDeg (deg) {\n const { player } = this\n if (window.orientation === 90 || window.orientation === -90) {\n player.rotateDeg = 0\n } else {\n player.rotateDeg = deg\n }\n }\n\n /**\n * 进入旋转全屏\n * @param { HTMLElement } [el]\n */\n getRotateFullscreen (el) {\n const { player } = this\n if (player.isCssfullScreen) {\n player.exitCssFullscreen(el)\n }\n const _class = el ? STATE_CLASS.INNER_FULLSCREEN : STATE_CLASS.ROTATE_FULLSCREEN\n player._fullscreenEl = el || player.root\n player.changeFullStyle(player.root, el, _class, STATE_CLASS.PARENT_ROTATE_FULLSCREEN)\n player.fullscreen = true\n this.setRotateDeg(90)\n this.emit(Events.FULLSCREEN_CHANGE, true)\n }\n\n /**\n * 退出旋转全屏\n * @param { HTMLElement } [el]\n */\n exitRotateFullscreen (el) {\n const { player } = this\n player.fullscreen = false\n const _class = player._fullscreenEl !== player.root ? STATE_CLASS.INNER_FULLSCREEN : STATE_CLASS.ROTATE_FULLSCREEN\n player.recoverFullStyle(player.root, player._fullscreenEl, _class, STATE_CLASS.PARENT_ROTATE_FULLSCREEN)\n this.setRotateDeg(0)\n this.emit(Events.FULLSCREEN_CHANGE, false)\n }\n\n /**\n * 进入旋转全屏\n * @param { Event } [e]\n */\n changeFullScreen (e) {\n if (e) {\n e.preventDefault()\n e.stopPropagation()\n }\n const { player, config } = this\n let useCssFullscreen = false\n if (config.useCssFullscreen === true || (typeof config.useCssFullscreen === 'function' && config.useCssFullscreen())) {\n useCssFullscreen = true\n }\n if (useCssFullscreen) {\n if (player.fullscreen) {\n player.fullscreen = false\n player.exitCssFullscreen()\n this.emit(Events.FULLSCREEN_CHANGE, false)\n } else {\n player.fullscreen = true\n player.getCssFullscreen()\n this.emit(Events.FULLSCREEN_CHANGE, true)\n }\n this.animate(player.fullscreen)\n } else if (config.rotateFullscreen) {\n if (player.fullscreen) {\n this.exitRotateFullscreen()\n } else {\n this.getRotateFullscreen()\n }\n this.animate(player.fullscreen)\n } else {\n if (config.switchCallback && typeof config.switchCallback === 'function') {\n config.switchCallback(player.fullscreen)\n return\n }\n if (player.fullscreen) {\n player.exitFullscreen()\n } else {\n player.getFullscreen()\n }\n }\n }\n\n /**\n *\n * @param { boolean } isFullScreen\n */\n animate (isFullScreen) {\n isFullScreen ? this.setAttr('data-state', 'full') : this.setAttr('data-state', 'normal')\n if (this.topBackIcon) {\n if (isFullScreen) {\n this.topBackIcon.show()\n this.hide()\n } else {\n this.topBackIcon.hide()\n this.show()\n }\n }\n }\n\n show () {\n super.show()\n }\n\n hide () {\n super.hide()\n }\n\n /**\n * @private\n * @returns\n */\n render () {\n if (this.config.disable) {\n return\n }\n const langKey = 'FULLSCREEN_TIPS'\n return `<xg-icon class=\"xgplayer-fullscreen\">\n <div class=\"xgplayer-icon\">\n </div>\n <div class=\"xg-tips\" lang-key=\"${this.i18nKeys[langKey]}\">${this.i18n[langKey]}</div>\n </xg-icon>`\n }\n}\n","import Plugin, { Util, Events, POSITIONS, STATES } from '../../plugin'\n\nclass Time extends Plugin {\n static get pluginName () {\n return 'time'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_LEFT,\n index: 2,\n disable: false\n }\n }\n\n constructor (args) {\n super(args)\n this.isActiving = false\n }\n\n get duration () {\n return this.playerConfig.customDuration || this.player.duration\n }\n\n get timeOffset () {\n return this.playerConfig.timeOffset || 0\n }\n\n afterCreate () {\n const constrolsMode = this.player.controls.config.mode\n this.mode = constrolsMode === 'flex' ? 'flex' : 'normal'\n if (this.config.disable) {\n return\n }\n if (this.mode === 'flex') {\n this.createCenterTime()\n this.hide()\n }\n this.durationDom = this.find('.time-duration')\n this.timeDom = this.find('.time-current')\n this.on(Events.DURATION_CHANGE, () => {\n this.onTimeUpdate()\n })\n this.on(Events.TIME_UPDATE, () => {\n this.onTimeUpdate()\n })\n\n this.on(Events.EMPTIED, () => {\n this.onReset()\n })\n }\n\n show () {\n if (this.mode === 'flex') {\n return\n }\n super.show()\n }\n\n onTimeUpdate () {\n const { player, config } = this\n if (config.disable || this.isActiving || player.state < STATES.RUNNING) {\n return\n }\n const current = player.currentTime + this.timeOffset\n if (this.mode === 'flex') {\n this.centerCurDom.innerHTML = Util.format(current)\n if (this.duration !== Infinity && this.duration > 0) {\n this.centerDurDom.innerHTML = Util.format(this.duration)\n }\n } else {\n this.timeDom.innerHTML = Util.format(current)\n if (this.duration !== Infinity && this.duration > 0) {\n this.durationDom.innerHTML = Util.format(this.duration)\n }\n }\n }\n\n onReset () {\n if (this.mode === 'flex') {\n this.centerCurDom.innerHTML = Util.format(0)\n this.centerDurDom.innerHTML = Util.format(0)\n } else {\n this.timeDom.innerHTML = Util.format(0)\n this.durationDom.innerHTML = Util.format(0)\n }\n }\n\n createCenterTime () {\n const { player } = this\n if (!player.controls || !player.controls.center) {\n return\n }\n const center = player.controls.center\n this.centerCurDom = Util.createDom('xg-icon', '00:00', {}, 'xgplayer-time left')\n this.centerDurDom = Util.createDom('xg-icon', '00:00', {}, 'xgplayer-time right')\n center.children.length > 0 ? center.insertBefore(this.centerCurDom, center.children[0]) : center.appendChild(this.centerCurDom)\n center.appendChild(this.centerDurDom)\n }\n\n afterPlayerInit () {\n const { config } = this\n if (this.duration === Infinity || this.playerConfig.isLive) {\n Util.hide(this.durationDom)\n Util.hide(this.timeDom)\n Util.hide(this.find('.time-separator'))\n Util.show(this.find('.time-live-tag'))\n } else {\n Util.hide(this.find('.time-live-tag'))\n }\n if (config.hide) {\n this.hide()\n return\n }\n this.show()\n }\n\n changeLiveState (isLive) {\n if (isLive) {\n Util.hide(this.durationDom)\n Util.hide(this.timeDom)\n Util.hide(this.find('.time-separator'))\n Util.show(this.find('.time-live-tag'))\n } else {\n Util.hide(this.find('.time-live-tag'))\n Util.show(this.find('.time-separator'))\n Util.show(this.durationDom)\n Util.show(this.timeDom)\n }\n }\n\n updateTime (time) {\n this.isActiving = true\n if ((!time && time !== 0) || time > this.duration) {\n return\n }\n if (this.mode === 'flex') {\n this.centerCurDom.innerHTML = Util.format(time)\n return\n }\n this.timeDom.innerHTML = Util.format(time)\n }\n\n resetActive () {\n const { player } = this\n const updateState = () => {\n this.isActiving = false\n }\n this.off(Events.SEEKED, updateState)\n if (player.isSeeking) {\n this.once(Events.SEEKED, updateState)\n } else {\n this.isActiving = false\n }\n }\n\n destroy () {\n const { center } = this.player.controls\n this.centerCurDom && center.removeChild(this.centerCurDom)\n this.centerCurDom = null\n this.centerDurDom && center.removeChild(this.centerDurDom)\n this.centerDurDom = null\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n return `<xg-icon class=\"xgplayer-time\">\n <span class=\"time-current\">00:00</span>\n <span class=\"time-separator\">/</span>\n <span class=\"time-duration\">00:00</span>\n <span class=\"time-live-tag\">${this.i18n.LIVE_TIP}</span>\n </xg-icon>`\n }\n}\nexport default Time\n","import Plugin, { Util, Events, Sniffer, POSITIONS } from '../../plugin'\nimport volumeLargeSvg from '../assets/volumeLarge.svg'\nimport volumeSmallSvg from '../assets/volumeSmall.svg'\nimport volumeMutedSvg from '../assets/volumeMuted.svg'\n\n/**\n * @typedef {{\n * position?: string, // [可选]插件挂载的dom\n * index?: number // [可选]插件在播放器中挂载的位置\n * disable?: boolean, // [可选]是否禁用插件交互行为\n * showValueLabel?: boolean, // [可选]是否显示当前滑动的音量数值\n * default?: number // [可选]默认\n * [propName: string]: any\n * }} IVolumeConfig\n */\n\nclass Volume extends Plugin {\n static get pluginName () {\n return 'volume'\n }\n\n /**\n * @type IVolumeConfig\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT, // [可选]插件挂载的dom\n index: 1, // [可选]插件在播放器中挂载的位置\n disable: false, // [可选]是否禁用插件交互行为\n showValueLabel: false, // [可选]是否显示当前滑动的音量数值\n default: 0.6 // [可选]默认音量\n }\n }\n\n registerIcons () {\n return {\n volumeSmall: { icon: volumeSmallSvg, class: 'xg-volume-small' },\n volumeLarge: { icon: volumeLargeSvg, class: 'xg-volume' },\n volumeMuted: { icon: volumeMutedSvg, class: 'xg-volume-mute' }\n }\n }\n\n afterCreate () {\n if (this.config.disable) {\n return\n }\n\n this.initIcons()\n\n const { commonStyle, volume } = this.playerConfig\n if (commonStyle.volumeColor) {\n this.find('.xgplayer-drag').style.backgroundColor = commonStyle.volumeColor\n }\n this.changeMutedHandler = this.hook('mutedChange', (e) => {\n this.changeMuted(e)\n }, {\n pre: (e) => {\n e.preventDefault()\n e.stopPropagation()\n this.emitUserAction(e, 'change_muted', { prop: 'muted', from: this.player.muted, to: !this.player.muted })\n }\n })\n\n if (!(Sniffer.device === 'mobile') && !this.playerConfig.isMobileSimulateMode) {\n this.bind('mouseenter', this.onMouseenter)\n\n this.bind(['blur', 'mouseleave'], this.onMouseleave)\n\n this.bind('.xgplayer-slider', 'mousedown', this.onBarMousedown)\n }\n\n this.bind('.xgplayer-icon', Sniffer.device === 'mobile' ? 'touchend' : 'click', this.changeMutedHandler)\n\n this.on(Events.VOLUME_CHANGE, this.onVolumeChange)\n this.once(Events.LOADED_DATA, this.onVolumeChange)\n\n if (Util.typeOf(volume) !== 'Number') {\n this.player.volume = this.config.default\n }\n\n this.onVolumeChange()\n }\n\n onBarMousedown = (e) => {\n const { player } = this\n const slider = this.find('.xgplayer-slider')\n const bar = this.find('.xgplayer-bar')\n slider.focus()\n Util.event(e)\n\n const barRect = bar.getBoundingClientRect()\n const _ePos = Util.getEventPos(e, player.zoom)\n const pos = { x: _ePos.clientX, y: _ePos.clientY }\n const height = barRect.height - (_ePos.clientY - barRect.top)\n this.updateVolumePos(height, e)\n\n this.isMoving = false\n const onMove = (e) => {\n e.preventDefault()\n e.stopPropagation()\n Util.event(e)\n const _ePos = Util.getEventPos(e, player.zoom)\n this.isMoving = true\n const w = height - _ePos.clientY + pos.y\n if (w > barRect.height) {\n return\n }\n this.updateVolumePos(w, e)\n }\n\n const onUp = (e) => {\n e.preventDefault()\n e.stopPropagation()\n Util.event(e)\n window.removeEventListener('mousemove', onMove)\n window.removeEventListener('touchmove', onMove)\n window.removeEventListener('mouseup', onUp)\n window.removeEventListener('touchend', onUp)\n this.isMoving = false\n }\n window.addEventListener('mousemove', onMove)\n window.addEventListener('touchmove', onMove)\n window.addEventListener('mouseup', onUp)\n window.addEventListener('touchend', onUp)\n return false\n }\n\n updateVolumePos (height, event) {\n const { player } = this\n const drag = this.find('.xgplayer-drag')\n const bar = this.find('.xgplayer-bar')\n const now = height / bar.getBoundingClientRect().height\n drag.style.height = `${height}px`\n const _volume = Math.max(Math.min(now, 1), 0)\n this.emitUserAction(event, 'change_volume', [{\n prop: 'muted',\n from: true,\n to: false\n }, {\n prop: 'volume',\n from: player.volume,\n to: _volume\n }])\n player.volume = _volume\n player.muted = false\n\n if (this.config.showValueLabel) {\n this.updateVolumeValue()\n }\n }\n\n /**\n * 修改音量数值标签\n *\n * @memberof Volume\n */\n updateVolumeValue () {\n const { volume } = this.player\n const $labelValue = this.find('.xgplayer-value-label')\n const vol = Math.max(Math.min(volume, 1), 0)\n\n $labelValue.innerText = Math.ceil(vol * 100)\n }\n\n onMouseenter = (e) => {\n Util.addClass(this.root, 'slide-show')\n }\n\n onMouseleave = (e) => {\n Util.removeClass(this.root, 'slide-show')\n }\n\n changeMuted (e) {\n // e.preventDefault()\n e && e.stopPropagation()\n const { player } = this\n if (player.volume < 0.01) {\n player.volume = this.config.default\n } else {\n player.muted = !player.muted\n }\n }\n\n onVolumeChange = (e) => {\n const { muted, volume } = this.player\n if (!this.isMoving) {\n this.find('.xgplayer-drag').style.height = muted || volume === 0 ? '0px' : `${volume * 100}%`\n }\n this.animate(muted, volume)\n }\n\n animate (muted, volume) {\n if (muted || volume === 0) {\n this.setAttr('data-state', 'mute')\n } else if (volume < 0.5 && this.icons.volumeSmall) {\n this.setAttr('data-state', 'small')\n } else {\n this.setAttr('data-state', 'normal')\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('.xgplayer-icon', icons.volumeSmall)\n this.appendChild('.xgplayer-icon', icons.volumeLarge)\n this.appendChild('.xgplayer-icon', icons.volumeMuted)\n }\n\n destroy () {\n this.unbind('mouseenter', this.onMouseenter)\n\n this.unbind(['blur', 'mouseleave'], this.onMouseleave)\n\n this.unbind('.xgplayer-bar', 'mousedown', this.onBarMousedown)\n\n this.unbind('.xgplayer-icon', Sniffer.device === 'mobile' ? 'touchend' : 'click', this.changeMutedHandler)\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n const volume = this.config.default || this.player.volume\n const isShowVolumeValue = this.config.showValueLabel\n return `\n <xg-icon class=\"xgplayer-volume\" data-state=\"normal\">\n <div class=\"xgplayer-icon\">\n </div>\n <xg-slider class=\"xgplayer-slider\">\n ${isShowVolumeValue ? `<div class=\"xgplayer-value-label\">${volume * 100}</div>` : ''}\n <div class=\"xgplayer-bar\">\n <xg-drag class=\"xgplayer-drag\" style=\"height: ${volume * 100}%\"></xg-drag>\n </div>\n </xg-slider>\n </xg-icon>`\n }\n}\nexport default Volume\n","import Plugin, { POSITIONS, Util } from '../../plugin'\nimport { Events } from '../../plugin/basePlugin'\nimport RotateSvg from '../assets/rotate.svg'\n\nexport default class Rotate extends Plugin {\n static get pluginName () {\n return 'rotate'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 6,\n innerRotate: true, // true为只有画面旋转,false为整个播放器旋转\n clockwise: false,\n rotateDeg: 0, // 初始旋转角度\n disable: false\n }\n }\n\n constructor (args) {\n super(args)\n this.rotateDeg = this.config.rotateDeg || 0\n }\n\n afterCreate () {\n if (this.config.disable) {\n return\n }\n this.appendChild('.xgplayer-icon', this.icons.rotate)\n this.onBtnClick = this.onBtnClick.bind(this)\n this.bind('.xgplayer-icon', ['click', 'touchend'], this.onBtnClick)\n // 全屏/css全屏/容器宽高发生变化 需要重新计算\n this.on(Events.VIDEO_RESIZE, () => {\n // console.log('Events.VIDEO_RESIZE')\n if (this.rotateDeg) {\n Util.setTimeout(this, () => {\n this.updateRotateDeg(this.rotateDeg, this.config.innerRotate)\n }, 100)\n }\n })\n if (this.rotateDeg) {\n this.updateRotateDeg(this.rotateDeg, this.config.innerRotate)\n }\n }\n\n destroy () {\n this.unbind('.xgplayer-icon', ['click', 'touchend'], this.onBtnClick)\n }\n\n onBtnClick (e) {\n e.preventDefault()\n e.stopPropagation()\n this.emitUserAction(e, 'rotate')\n this.rotate(this.config.clockwise, this.config.innerRotate, 1)\n }\n\n updateRotateDeg (rotateDeg, innerRotate) {\n const player = this.player\n if (!rotateDeg) {\n rotateDeg = 0\n }\n const { root, innerContainer, video } = this.player\n const width = root.offsetWidth\n const height = innerContainer && innerRotate ? innerContainer.offsetHeight : root.offsetHeight\n let rWidth = '100%'\n let rHeight = '100%'\n let x = 0\n let y = 0\n if (rotateDeg === 0.75 || rotateDeg === 0.25) {\n rWidth = `${height}px`\n rHeight = `${width}px`\n x = -(height - width) / 2\n y = -(width - height) / 2\n }\n const _transform = `translate(${x}px,${y}px) rotate(${rotateDeg}turn)`\n const _styles = {\n transformOrigin: 'center center',\n transform: _transform,\n webKitTransform: _transform,\n height: rHeight,\n width: rWidth\n }\n\n const _target = innerRotate ? video : root\n const poster = innerRotate ? player.getPlugin('poster') : null\n Object.keys(_styles).map(key => {\n _target.style[key] = _styles[key]\n poster && poster.root && (poster.root.style[key] = _styles[key])\n })\n }\n\n rotate (clockwise = false, innerRotate = true, times = 1) {\n const player = this.player\n if (!this.rotateDeg) {\n this.rotateDeg = 0\n }\n const factor = clockwise ? 1 : -1\n\n this.rotateDeg = (this.rotateDeg + 1 + factor * 0.25 * times) % 1\n this.updateRotateDeg(this.rotateDeg, innerRotate)\n player.emit(Events.ROTATE, this.rotateDeg * 360)\n }\n\n registerIcons () {\n return {\n rotate: RotateSvg\n }\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n return `\n <xg-icon class=\"xgplayer-rotate\">\n <div class=\"xgplayer-icon\">\n </div>\n <div class=\"xg-tips\" lang-key=\"${this.i18nKeys.ROTATE_TIPS}\">\n ${this.i18n.ROTATE_TIPS}\n </div>\n </xg-icon>`\n }\n}\n","import Plugin, { Events, Util, POSITIONS } from '../../plugin'\nimport PipIcon from '../assets/pipIcon.svg'\nimport PipIconExit from '../assets/pipIconExit.svg'\n\n/**\n * @description picture-in-picture plugin\n * @doc https://www.w3.org/TR/picture-in-picture/\n * @doc https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n */\n\nconst PresentationMode = {\n PIP: 'picture-in-picture',\n INLINE: 'inline',\n FULLSCREEN: 'fullscreen'\n}\n\nclass PIP extends Plugin {\n static get pluginName () {\n return 'pip'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 6,\n showIcon: false\n }\n }\n\n static checkWebkitSetPresentationMode (video) {\n return typeof video.webkitSetPresentationMode === 'function'\n }\n\n beforeCreate (args) {\n if (typeof args.player.config.pip === 'boolean') {\n args.config.showIcon = args.player.config.pip\n }\n }\n\n afterCreate () {\n // 非可用状态不做初始化\n if (!this.isPIPAvailable()) {\n return\n }\n this.pMode = PresentationMode.INLINE\n this.initPipEvents()\n // 确认开启按钮的情况下才初始化按钮\n if (this.config.showIcon) {\n this.initIcons()\n }\n // video初始化之后再做判断是否显示\n this.once(Events.COMPLETE, () => {\n if (this.config.showIcon) {\n Util.removeClass(this.find('.xgplayer-icon'), 'xg-icon-disable')\n this.bind('click', this.switchPIP)\n }\n })\n }\n\n registerIcons () {\n return {\n pipIcon: { icon: PipIcon, class: 'xg-get-pip' },\n pipIconExit: { icon: PipIconExit, class: 'xg-exit-pip' }\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('.xgplayer-icon', icons.pipIcon)\n this.appendChild('.xgplayer-icon', icons.pipIconExit)\n }\n\n initPipEvents () {\n const { player } = this\n this.leavePIPCallback = () => {\n // 处理点击x关闭画中画的时候暂停问题\n const paused = player.paused\n Util.setTimeout(this, () => {\n // 使用videoPlay避免多次触发 playhooks\n !paused && player.videoPlay()\n }, 0)\n !paused && player.videoPlay()\n this.setAttr('data-state', 'normal')\n player.emit(Events.PIP_CHANGE, false)\n }\n\n this.enterPIPCallback = (e) => {\n player.emit(Events.PIP_CHANGE, true)\n this.pipWindow = e.pictureInPictureWindow\n this.setAttr('data-state', 'pip')\n }\n\n this.onWebkitpresentationmodechanged = (e) => {\n const mode = player.video.webkitPresentationMode\n // 如果在全屏下进入了该逻辑,调用退出全屏处理\n if (this.pMode === PresentationMode.FULLSCREEN && mode !== PresentationMode.FULLSCREEN) {\n player.onFullscreenChange(null, false)\n }\n this.pMode = mode\n if (mode === PresentationMode.PIP) {\n this.enterPIPCallback(e)\n } else if (mode === PresentationMode.INLINE) {\n this.leavePIPCallback(e)\n }\n }\n\n if (player.video) {\n player.video.addEventListener('enterpictureinpicture', this.enterPIPCallback)\n player.video.addEventListener('leavepictureinpicture', this.leavePIPCallback)\n PIP.checkWebkitSetPresentationMode(player.video) && player.video.addEventListener('webkitpresentationmodechanged', this.onWebkitpresentationmodechanged)\n }\n }\n\n switchPIP = (e) => {\n if (!this.isPIPAvailable()) {\n return false\n }\n e.stopPropagation()\n if (this.isPip) {\n this.exitPIP()\n this.emitUserAction(e, 'change_pip', { props: 'pip', from: true, to: false })\n this.setAttr('data-state', 'normal')\n } else if (this.player.video.readyState === 4) {\n this.requestPIP()\n this.emitUserAction(e, 'change_pip', { props: 'pip', from: false, to: true })\n this.setAttr('data-state', 'pip')\n }\n }\n\n /*\n * 进入画中画\n */\n requestPIP () {\n const { player, playerConfig } = this\n if (!this.isPIPAvailable() || this.isPip) {\n return\n }\n try {\n const { poster } = playerConfig\n if (poster) {\n player.video.poster = Util.typeOf(poster) === 'String' ? poster : poster.poster\n }\n PIP.checkWebkitSetPresentationMode(player.video) ? player.video.webkitSetPresentationMode('picture-in-picture') : player.video.requestPictureInPicture()\n return true\n } catch (reason) {\n console.error('requestPiP', reason)\n return false\n }\n }\n\n /**\n * 退出画中画\n */\n exitPIP () {\n const { player } = this\n try {\n if (this.isPIPAvailable() && this.isPip) {\n PIP.checkWebkitSetPresentationMode(player.video) ? player.video.webkitSetPresentationMode('inline') : document.exitPictureInPicture()\n }\n return true\n } catch (reason) {\n console.error('exitPIP', reason)\n return false\n }\n }\n\n get isPip () {\n const { player } = this\n return (document.pictureInPictureElement && document.pictureInPictureElement === player.video) || player.video.webkitPresentationMode === PresentationMode.PIP\n }\n\n isPIPAvailable () {\n const { video } = this.player\n return document.pictureInPictureEnabled &&\n ((Util.typeOf(video.disablePictureInPicture) === 'Boolean' && !video.disablePictureInPicture) ||\n (video.webkitSupportsPresentationMode && Util.typeOf(video.webkitSetPresentationMode) === 'Function'))\n }\n\n destroy () {\n const { player } = this\n player.video.removeEventListener('enterpictureinpicture', this.enterPIPCallback)\n player.video.removeEventListener('leavepictureinpicture', this.leavePIPCallback)\n this.exitPIP()\n this.unbind('click', this.btnClick)\n }\n\n render () {\n if (!this.config.showIcon && this.isPIPAvailable()) {\n return\n }\n return `<xg-icon class=\"xgplayer-pip\">\n <div class=\"xgplayer-icon xg-icon-disable\">\n </div>\n <div class=\"xg-tips\" lang-key=\"${this.i18nKeys.PIP}\">${this.i18n.PIP}</div>\n </xg-icon>`\n }\n}\nexport default PIP\n","/**\n * 下一个按钮组件\n */\nimport Plugin, { POSITIONS, Sniffer, Events } from '../../plugin'\nimport Next from '../assets/playNext.svg'\n\nexport default class PlayNextIcon extends Plugin {\n static get pluginName () {\n return 'playNext'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_LEFT,\n index: 1,\n url: null,\n urlList: []\n }\n }\n\n constructor (options) {\n super(options)\n this.idx = -1\n }\n\n afterCreate () {\n if (!this.config.urlList || this.config.urlList.length === 0) {\n return\n }\n this.appendChild('.xgplayer-icon', this.icons.playNext)\n this.initEvents()\n }\n\n registerIcons () {\n return {\n playNext: Next\n }\n }\n\n initEvents () {\n this.nextHandler = this.hook('nextClick', this.changeSrc)\n const event = Sniffer.device === 'mobile' ? 'touchend' : 'click'\n this.bind(event, this.playNext)\n this.show()\n }\n\n playNext = (e) => {\n const { player } = this\n e.preventDefault()\n e.stopPropagation()\n if (this.idx + 1 < this.config.urlList.length) {\n this.idx++\n player.emit(Events.PLAYNEXT, this.idx + 1)\n this.nextHandler(this.config.urlList[this.idx], this.idx)\n } else {\n this.nextHandler()\n player.emit(Events.PLAYNEXT)\n }\n }\n\n changeSrc (url) {\n const { player } = this\n if (!url) {\n return\n }\n player.pause()\n player.currentTime = 0\n player.autoplay = true\n player.src = url\n }\n\n destroy () {\n this.unbind(['touchend', 'click'], this.playNext)\n }\n\n render () {\n if (!this.config.urlList || this.config.urlList.length === 0) {\n return\n }\n return `\n <xg-icon class=\"xgplayer-playnext\">\n <div class=\"xgplayer-icon\">\n </div>\n <div class=\"xg-tips\" lang-key=\"PLAYNEXT_TIPS\">${this.i18n.PLAYNEXT_TIPS}</div>\n </xg-icon>\n `\n }\n}\n","//download.js v4.2, by dandavis; 2008-2016. [MIT] see http://danml.com/download.html for tests/usage\n// v1 landed a FF+Chrome compat way of downloading strings to local un-named files, upgraded to use a hidden frame and optional mime\n// v2 added named files via a[download], msSaveBlob, IE (10+) support, and window.URL support for larger+faster saves than dataURLs\n// v3 added dataURL and Blob Input, bind-toggle arity, and legacy dataURL fallback was improved with force-download mime and base64 support. 3.1 improved safari handling.\n// v4 adds AMD/UMD, commonJS, and plain browser support\n// v4.1 adds url download capability via solo URL argument (same domain/CORS only)\n// v4.2 adds semantic variable names, long (over 2MB) dataURL support, and hidden by default temp anchors\n// https://github.com/rndme/download\n\n(function (root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory();\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.download = factory();\n }\n}(this, function () {\n\n\treturn function download(data, strFileName, strMimeType) {\n\n\t\tvar self = window, // this script is only for browsers anyway...\n\t\t\tdefaultMime = \"application/octet-stream\", // this default mime also triggers iframe downloads\n\t\t\tmimeType = strMimeType || defaultMime,\n\t\t\tpayload = data,\n\t\t\turl = !strFileName && !strMimeType && payload,\n\t\t\tanchor = document.createElement(\"a\"),\n\t\t\ttoString = function(a){return String(a);},\n\t\t\tmyBlob = (self.Blob || self.MozBlob || self.WebKitBlob || toString),\n\t\t\tfileName = strFileName || \"download\",\n\t\t\tblob,\n\t\t\treader;\n\t\t\tmyBlob= myBlob.call ? myBlob.bind(self) : Blob ;\n\t \n\t\tif(String(this)===\"true\"){ //reverse arguments, allowing download.bind(true, \"text/xml\", \"export.xml\") to act as a callback\n\t\t\tpayload=[payload, mimeType];\n\t\t\tmimeType=payload[0];\n\t\t\tpayload=payload[1];\n\t\t}\n\n\n\t\tif(url && url.length< 2048){ // if no filename and no mime, assume a url was passed as the only argument\n\t\t\tfileName = url.split(\"/\").pop().split(\"?\")[0];\n\t\t\tanchor.href = url; // assign href prop to temp anchor\n\t\t \tif(anchor.href.indexOf(url) !== -1){ // if the browser determines that it's a potentially valid url path:\n \t\tvar ajax=new XMLHttpRequest();\n \t\tajax.open( \"GET\", url, true);\n \t\tajax.responseType = 'blob';\n \t\tajax.onload= function(e){ \n\t\t\t\t download(e.target.response, fileName, defaultMime);\n\t\t\t\t};\n \t\tsetTimeout(function(){ ajax.send();}, 0); // allows setting custom ajax headers using the return:\n\t\t\t return ajax;\n\t\t\t} // end if valid url?\n\t\t} // end if url?\n\n\n\t\t//go ahead and download dataURLs right away\n\t\tif(/^data:([\\w+-]+\\/[\\w+.-]+)?[,;]/.test(payload)){\n\t\t\n\t\t\tif(payload.length > (1024*1024*1.999) && myBlob !== toString ){\n\t\t\t\tpayload=dataUrlToBlob(payload);\n\t\t\t\tmimeType=payload.type || defaultMime;\n\t\t\t}else{\t\t\t\n\t\t\t\treturn navigator.msSaveBlob ? // IE10 can't do a[download], only Blobs:\n\t\t\t\t\tnavigator.msSaveBlob(dataUrlToBlob(payload), fileName) :\n\t\t\t\t\tsaver(payload) ; // everyone else can save dataURLs un-processed\n\t\t\t}\n\t\t\t\n\t\t}else{//not data url, is it a string with special needs?\n\t\t\tif(/([\\x80-\\xff])/.test(payload)){\t\t\t \n\t\t\t\tvar i=0, tempUiArr= new Uint8Array(payload.length), mx=tempUiArr.length;\n\t\t\t\tfor(i;i<mx;++i) tempUiArr[i]= payload.charCodeAt(i);\n\t\t\t \tpayload=new myBlob([tempUiArr], {type: mimeType});\n\t\t\t}\t\t \n\t\t}\n\t\tblob = payload instanceof myBlob ?\n\t\t\tpayload :\n\t\t\tnew myBlob([payload], {type: mimeType}) ;\n\n\n\t\tfunction dataUrlToBlob(strUrl) {\n\t\t\tvar parts= strUrl.split(/[:;,]/),\n\t\t\ttype= parts[1],\n\t\t\tdecoder= parts[2] == \"base64\" ? atob : decodeURIComponent,\n\t\t\tbinData= decoder( parts.pop() ),\n\t\t\tmx= binData.length,\n\t\t\ti= 0,\n\t\t\tuiArr= new Uint8Array(mx);\n\n\t\t\tfor(i;i<mx;++i) uiArr[i]= binData.charCodeAt(i);\n\n\t\t\treturn new myBlob([uiArr], {type: type});\n\t\t }\n\n\t\tfunction saver(url, winMode){\n\n\t\t\tif ('download' in anchor) { //html5 A[download]\n\t\t\t\tanchor.href = url;\n\t\t\t\tanchor.setAttribute(\"download\", fileName);\n\t\t\t\tanchor.className = \"download-js-link\";\n\t\t\t\tanchor.innerHTML = \"downloading...\";\n\t\t\t\tanchor.style.display = \"none\";\n\t\t\t\tdocument.body.appendChild(anchor);\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tanchor.click();\n\t\t\t\t\tdocument.body.removeChild(anchor);\n\t\t\t\t\tif(winMode===true){setTimeout(function(){ self.URL.revokeObjectURL(anchor.href);}, 250 );}\n\t\t\t\t}, 66);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// handle non-a[download] safari as best we can:\n\t\t\tif(/(Version)\\/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari\\//.test(navigator.userAgent)) {\n\t\t\t\tif(/^data:/.test(url))\turl=\"data:\"+url.replace(/^data:([\\w\\/\\-\\+]+)/, defaultMime);\n\t\t\t\tif(!window.open(url)){ // popup blocked, offer direct download:\n\t\t\t\t\tif(confirm(\"Displaying New Document\\n\\nUse Save As... to download, then click back to return to this page.\")){ location.href=url; }\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t//do iframe dataURL download (old ch+FF):\n\t\t\tvar f = document.createElement(\"iframe\");\n\t\t\tdocument.body.appendChild(f);\n\n\t\t\tif(!winMode && /^data:/.test(url)){ // force a mime that will download:\n\t\t\t\turl=\"data:\"+url.replace(/^data:([\\w\\/\\-\\+]+)/, defaultMime);\n\t\t\t}\n\t\t\tf.src=url;\n\t\t\tsetTimeout(function(){ document.body.removeChild(f); }, 333);\n\n\t\t}//end saver\n\n\n\n\n\t\tif (navigator.msSaveBlob) { // IE10+ : (has Blob, but not a[download] or URL)\n\t\t\treturn navigator.msSaveBlob(blob, fileName);\n\t\t}\n\n\t\tif(self.URL){ // simple fast and modern way using Blob and URL:\n\t\t\tsaver(self.URL.createObjectURL(blob), true);\n\t\t}else{\n\t\t\t// handle non-Blob()+non-URL browsers:\n\t\t\tif(typeof blob === \"string\" || blob.constructor===toString ){\n\t\t\t\ttry{\n\t\t\t\t\treturn saver( \"data:\" + mimeType + \";base64,\" + self.btoa(blob) );\n\t\t\t\t}catch(y){\n\t\t\t\t\treturn saver( \"data:\" + mimeType + \",\" + encodeURIComponent(blob) );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Blob but not URL support:\n\t\t\treader=new FileReader();\n\t\t\treader.onload=function(e){\n\t\t\t\tsaver(this.result);\n\t\t\t};\n\t\t\treader.readAsDataURL(blob);\n\t\t}\n\t\treturn true;\n\t}; /* end download() */\n}));\n","import downloadUtil from 'downloadjs'\nimport Plugin, { POSITIONS } from '../../plugin'\nimport DownloadSvg from '../assets/download.svg'\n/**\n * @typedef { {\n * position: string,\n * index: number,\n * disable: boolean,\n * [propName: string]: any\n * } } IDownloadConfig\n */\nexport default class Download extends Plugin {\n static get pluginName () {\n return 'download'\n }\n\n /**\n * @type IDownloadConfig\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 3,\n disable: true\n }\n }\n\n constructor (args) {\n super(args)\n this.timer = null\n this.isLock = false\n }\n\n afterCreate () {\n if (this.config.disable) {\n return\n }\n this.appendChild('.xgplayer-icon', this.icons.download)\n this.bind(['click', 'touchend'], this.download)\n }\n\n registerIcons () {\n return {\n download: DownloadSvg\n }\n }\n\n download = (e) => {\n if (this.isLock) {\n return\n }\n this.emitUserAction(e, 'download')\n const url = this.getAbsoluteURL(this.player.src)\n downloadUtil(url)\n this.isLock = true\n this.timer = window.setTimeout(() => {\n this.isLock = false\n window.clearTimeout(this.timer)\n this.timer = null\n }, 300)\n }\n\n getAbsoluteURL (url) {\n // Check if absolute URL\n if (!url.match(/^https?:\\/\\//)) {\n const div = document.createElement('div')\n div.innerHTML = `<a href=\"${url}\">x</a>`\n url = div.firstChild.href\n }\n return url\n }\n\n destroy () {\n this.unbind(['click', 'touchend'], this.download)\n window.clearTimeout(this.timer)\n this.timer = null\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n return `<xg-icon class=\"xgplayer-download\">\n <div class=\"xgplayer-icon\">\n </div>\n <div class=\"xg-tips\" lang-key=\"${this.i18nKeys.DOWNLOAD_TIPS}\">${this.i18n.DOWNLOAD_TIPS}</div>\n </xg-icon>`\n }\n}\n","import Plugin, { POSITIONS, Events } from '../../plugin'\n\nexport default class ScreenShot extends Plugin {\n static get pluginName () {\n return 'screenShot'\n }\n\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 5,\n quality: 0.92,\n type: 'image/png',\n format: '.png',\n width: 600,\n height: 337,\n fitVideo: true,\n disable: false,\n name: 'screenshot'\n }\n }\n\n beforeCreate (args) {\n if (typeof args.player.config.screenShot === 'boolean') {\n args.config.disable = !args.player.config.screenShot\n }\n }\n\n afterCreate () {\n this.appendChild('.xgplayer-icon', this.icons.screenshotIcon)\n const { config } = this\n this.initSize = (data) => {\n if (config.fitVideo) {\n config.width = data.vWidth\n config.height = data.vHeight\n }\n }\n this.once(Events.VIDEO_RESIZE, this.initSize)\n }\n\n onPluginsReady () {\n this.show()\n this.onClickBtn = this.onClickBtn.bind(this)\n this.bind(['click', 'touchend'], this.onClickBtn)\n }\n\n saveScreenShot (data, filename) {\n const saveLink = document.createElement('a')\n saveLink.href = data\n saveLink.download = filename\n const event = document.createEvent('MouseEvents')\n event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)\n saveLink.dispatchEvent(event)\n }\n\n createCanvans (width, height) {\n const canvas = document.createElement('canvas')\n this.canvasCtx = canvas.getContext('2d')\n this.canvas = canvas\n canvas.width = width || this.config.width\n canvas.height = height || this.config.height\n }\n\n onClickBtn (e) {\n e.preventDefault()\n e.stopPropagation()\n this.emitUserAction(e, 'shot')\n this.shot().then((data) => {\n this.emit(Events.SCREEN_SHOT, data)\n this.saveScreenShot(data, this.config.name + this.config.format)\n })\n }\n\n shot (width, height, option = { quality: 0.92, type: 'image/png' }) {\n const { config, player } = this\n const quality = option.quality || config.quality\n const type = option.type || config.type\n return new Promise((resolve, reject) => {\n if (!this.canvas) {\n this.createCanvans(width, height)\n } else {\n this.canvas.width = width || config.width\n this.canvas.height = height || config.height\n }\n this.canvasCtx.drawImage(player.video, 0, 0, width || config.width, height || config.height)\n let src = this.canvas.toDataURL(type, quality).replace(type, 'image/octet-stream')\n src = src.replace(/^data:image\\/[^;]+/, 'data:application/octet-stream')\n resolve(src)\n })\n }\n\n registerIcons () {\n return {\n screenshotIcon: null\n }\n }\n\n destroy () {\n this.unbind(['click', 'touchend'], this.onClickBtn)\n this.off(Events.VIDEO_RESIZE, this.initSize)\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n const className = this.icons.screenshotIcon ? 'xgplayer-icon' : 'xgplayer-icon btn-text'\n const langKey = 'SCREENSHOT'\n return `\n <xg-icon class=\"xgplayer-shot\">\n <div class=\"${className}\">\n ${this.icons.screenshotIcon ? '' : `<span lang-key=\"${this.i18nKeys[langKey]}\">${this.i18n[langKey]}</span>`} \n </div>\n </xg-icon>`\n }\n}\n","import Plugin, { Util, Sniffer } from '../../plugin'\n\nexport default class OptionList {\n constructor (args) {\n this.config = args.config\n this.parent = args.root\n this.root = Util.createDom('ul', '', {}, `xg-options-list ${this.config.className}`)\n args.root.appendChild(this.root)\n this.onItemClick = this.onItemClick.bind(this)\n this.renderItemList()\n const eventName = Sniffer.device === 'mobile' ? 'touchend' : 'click'\n this._delegates = Plugin.delegate.call(this, this.root, 'li', eventName, this.onItemClick)\n }\n\n renderItemList (data) {\n const { config, root } = this\n if (data) {\n config.data = data\n } else {\n data = config.data\n }\n\n if (config.style) {\n Object.keys(config.style).map(key => {\n root.style[key] = config[key]\n })\n }\n\n if (data.length > 0) {\n this.attrKeys = Object.keys(data[0])\n }\n\n this.root.innerHTML = ''\n\n data.map((item, index) => {\n const className = item.selected ? 'option-item selected' : 'option-item'\n item['data-index'] = index\n this.root.appendChild(Util.createDom('li', `<span>${item.showText}</span>`, item, className))\n })\n }\n\n onItemClick (e) {\n if (!e.delegateTarget) {\n e.delegateTarget = e.target\n }\n const target = e.delegateTarget\n if (target && Util.hasClass(target, 'selected')) {\n return false\n }\n const changeCallback = typeof this.config.onItemClick === 'function' ? this.config.onItemClick : null\n const curlSelected = this.root.querySelector('.selected')\n Util.addClass(target, 'selected')\n curlSelected && Util.removeClass(curlSelected, 'selected')\n changeCallback(e, {\n from: curlSelected ? this.getAttrObj(curlSelected, this.attrKeys) : null,\n to: this.getAttrObj(target, this.attrKeys)\n })\n }\n\n getAttrObj (dom, keys) {\n if (!dom || !keys) {\n return {}\n }\n const obj = {}\n keys.map(key => {\n obj[key] = dom.getAttribute(key)\n })\n const index = dom.getAttribute('data-index')\n if (index) {\n obj.index = Number(index)\n }\n return obj\n }\n\n show () {\n Util.removeClass(this.root, 'hide')\n Util.addClass(this.root, 'active')\n }\n\n hide () {\n Util.removeClass(this.root, 'active')\n Util.addClass(this.root, 'hide')\n }\n\n destroy () {\n if (this._delegates) {\n this._delegates.map(item => {\n item.destroy && item.destroy()\n })\n this._delegates = null\n }\n this.root.innerHTML = null\n this.parent.removeChild(this.root)\n this.root = null\n }\n}\n","\nimport Plugin, { Events, Util, Sniffer, POSITIONS } from '../../plugin'\nimport OptionList from './optionList'\n\n/**\n * @typedef {{\n * isShow?: boolean,\n * index?: number,\n * list?: Array<any>,\n * listType?: string,\n * hidePortrait?: boolean,\n * [propName: string]: any\n * }} IOptionsIconConfig\n */\n\nconst IS_MOBILE = Sniffer.device === 'mobile'\nexport default class OptionsIcon extends Plugin {\n static get pluginName () {\n return 'optionsIcon'\n }\n\n /**\n * @type { IOptionsIconConfig }\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 100,\n list: [],\n listType: 'middle', // 模式 rightSide-右侧边栏 middle-中间显示\n listStyle: {},\n hidePortrait: true\n }\n }\n\n constructor (args) {\n super(args)\n this.isActive = false\n this.curValue = null // 当前值\n this.curIndex = 0\n }\n\n updateLang (value) {\n this.renderItemList(this.config.list, this.curIndex)\n }\n\n afterCreate () {\n const { config } = this\n if (IS_MOBILE && config.listType !== 'middle') {\n config.listType = 'rightSide'\n }\n\n config.hidePortrait && Util.addClass(this.root, 'portrait')\n\n this.once(Events.CANPLAY, () => {\n if (config.list && config.list.length > 0) {\n this.renderItemList(config.list)\n this.show()\n }\n })\n // 移动端控制栏和列表互斥\n IS_MOBILE && this.on(Events.PLAYER_FOCUS, () => {\n if (!this.isActive) {\n return\n }\n this.optionsList && this.optionsList.hide()\n this.isActive = false\n })\n this.activeEvent = IS_MOBILE ? 'touchend' : 'mouseenter'\n this.onEnter = this.onEnter.bind(this)\n this.onLeave = this.onLeave.bind(this)\n this.bind(this.activeEvent, this.onEnter)\n this.bind('mouseleave', this.onLeave)\n }\n\n show () {\n if (!this.config.list || this.config.list.length < 2) {\n return\n }\n Util.addClass(this.root, 'show')\n }\n\n hide () {\n Util.removeClass(this.root, 'show')\n }\n\n getTextByLang (item, key, lang) {\n if (item === undefined) {\n return ''\n }\n const { list } = this.config\n !lang && (lang = this.player.lang)\n key = (!key || Util.isUndefined(item[key])) ? 'text' : key\n typeof item === 'number' && (item = list[item])\n try {\n if (typeof item[key] === 'object') {\n return item[key][lang] || item[key].zh\n } else {\n return item[key]\n }\n } catch (err) {\n console.warn(err)\n return ''\n }\n }\n\n onEnter (e) {\n e.preventDefault()\n e.stopPropagation()\n this.onToggle(true)\n }\n\n onLeave (e) {\n e.preventDefault()\n e.stopPropagation()\n this.isActive && this.onToggle(false)\n }\n\n // 状态切换\n onToggle (isActive) {\n if (isActive === this.isActive) return\n const { controls } = this.player\n const { listType } = this.config\n if (isActive) {\n listType === 'rightSide' ? controls.blur() : controls.focus()\n this.optionsList && this.optionsList.show()\n } else {\n listType === 'rightSide' ? controls.focus() : controls.unFocus()\n this.optionsList && this.optionsList.hide()\n }\n this.isActive = isActive\n }\n\n // 列表点击回调\n onItemClick (e, data) {\n e.preventDefault()\n e.stopPropagation()\n const { listType, list } = this.config;\n (IS_MOBILE || listType === 'rightSide') && this.onToggle(false)\n this.curIndex = data.to.index\n this.curItem = list[this.curIndex]\n this.changeCurrentText()\n }\n\n changeCurrentText () {\n const { list } = this.config\n const index = this.curIndex < list.length ? this.curIndex : 0\n const curItem = list[index]\n if (!curItem) return\n this.find('.icon-text').innerHTML = this.getTextByLang(curItem, 'iconText')\n }\n\n renderItemList (itemList, curIndex) {\n const { config, optionsList, player } = this\n if (typeof curIndex === 'number') {\n this.curIndex = curIndex\n this.curItem = config.list[curIndex]\n }\n\n if (optionsList) {\n optionsList.renderItemList(itemList)\n this.changeCurrentText()\n return\n }\n\n const options = {\n config: {\n data: itemList || [],\n className: config.listType === 'rightSide' ? 'right-side' : '',\n onItemClick: (e, data) => {\n this.onItemClick(e, data)\n }\n },\n root: config.listType === 'rightSide' ? player.root : this.root\n }\n\n this.optionsList = new OptionList(options)\n this.changeCurrentText()\n this.show()\n }\n\n destroy () {\n this.unbind(this.activeEvent, this.onToggle)\n this.unbind('mouseleave', this.onToggle)\n if (this.optionsList) {\n this.optionsList.destroy()\n this.optionsList = null\n }\n }\n\n render () {\n return `<xg-icon class=\"xg-options-icon ${this.config.className || ''}\">\n <div class=\"xgplayer-icon btn-text\">\n <span class=\"icon-text\"></span>\n </div>\n </xg-icon>`\n }\n}\n","import { Events, POSITIONS, Util } from '../../plugin'\nimport OptionsIcon from '../common/optionsIcon'\n/**\n * @typedef {{\n * text?: string,\n * definition?: any,\n * url: any,\n * text: string | {\n * [propName: string]: any\n * },\n * iconText: string | {\n * [propName: string]: any\n * }\n * }} IDefinition\n */\n\n/**\n * @typedef {{\n * position?: string,\n * index?: number,\n * list?: Array<IDefinition>,\n * defaultDefinition?: any,\n * disable?: any,\n * hidePortrait?: boolean,\n * className?: string\n * }} IDefinitionConfig\n */\nexport default class DefinitionIcon extends OptionsIcon {\n static get pluginName () {\n return 'definition'\n }\n\n /**\n * @type IDefinitionConfig\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 3,\n list: [],\n defaultDefinition: '',\n disable: false,\n hidePortrait: false, // Whether to hide in the vertical screen state of the mobile terminal\n className: 'xgplayer-definition'\n }\n }\n\n beforeCreate (args) {\n const { list } = args.config\n if (Array.isArray(list) && list.length > 0) {\n args.config.list = list.map(item => {\n if (!item.text && item.name) {\n item.text = item.name\n }\n if (!item.text) {\n item.text = item.definition\n }\n return item\n })\n }\n }\n\n constructor (args) {\n super(args)\n // 记录切换的时候的播放器状态\n this.curTime = 0\n this.isPaused = true\n }\n\n afterCreate () {\n super.afterCreate()\n this.on('resourceReady', (list) => {\n this.changeDefinitionList(list)\n })\n\n this.on(Events.DEFINITION_CHANGE, (data) => {\n this.renderItemList(data.to)\n })\n if (this.player.definitionList.length < 2) {\n this.hide()\n }\n }\n\n initDefinition () {\n const { list, defaultDefinition } = this.config\n if (list.length > 0) {\n let to = null\n list.map(item => {\n if (item.definition === defaultDefinition) {\n to = item\n }\n })\n if (!to) {\n to = list[0]\n }\n this.changeDefinition(to)\n }\n }\n\n renderItemList (to) {\n const { player } = this\n const { list } = this.config\n const currentSrc = to && to.url ? to.url : (player.currentSrc || player.src)\n const definition = to && to.definition ? to.definition : this.config.defaultDefinition\n if (to && !Array.isArray(to)) {\n list.forEach((item) => {\n item.selected = false\n })\n }\n let curIndex = 0\n const items = list.map((item, index) => {\n const showItem = {\n url: item.url,\n definition: item.definition || '',\n showText: this.getTextByLang(item) || item.definition,\n selected: false\n }\n if (item.selected || item.url === currentSrc || (!Util.isUndefined(item.definition) && item.definition === definition)) {\n showItem.selected = true\n curIndex = index\n }\n return showItem\n })\n super.renderItemList(items, curIndex)\n }\n\n // onCanplayChangeDefinition () {\n // const { player } = this\n // player.currentTime = this.curTime\n // if (!this.isPaused) {\n // const playPromise = player.play()\n // if (playPromise !== undefined && playPromise) {\n // // eslint-disable-next-line handle-callback-err\n // playPromise.catch(_err => {})\n // }\n // } else {\n // player.pause()\n // }\n // player.emit(Events.AFTER_DEFINITION_CHANGE)\n // }\n\n // onTimeupdateChangeDefinition () {\n // this.once('timeupdate', () => {\n // this.onCanplayChangeDefinition()\n // })\n // };\n\n // switchUrl (lastATag) {\n // const { player } = this\n // let curRUL = document.createElement('a');\n // ['mp4', 'hls', '__flv__', 'dash', 'hlsjs'].every(item => {\n // if (player[item]) {\n // if (player[item].url) {\n // curRUL.href = player[item].url\n // }\n // if (item === '__flv__') {\n // if (player[item]._options) {\n // curRUL.href = player[item]._options.url\n // } else {\n // curRUL.href = player[item]._mediaDataSource.url\n // }\n // }\n // if (item === 'hlsjs') {\n // curRUL.href = player[item].originUrl || player[item].url\n // }\n // return false\n // } else {\n // return true\n // }\n // })\n // if (lastATag && curRUL.href !== lastATag.url && !player.ended) {\n // player.switchURL(lastATag.url)\n // }\n // curRUL = null\n // }\n\n // 对外暴露 切换清晰度\n changeDefinitionList (list) {\n if (!Array.isArray(list)) {\n return\n }\n this.config.list = list.map(item => {\n if (!item.text && item.name) {\n item.text = item.name\n }\n if (!item.text) {\n item.text = item.definition\n }\n return item\n })\n this.renderItemList()\n this.config.list.length < 2 ? this.hide() : this.show()\n }\n\n changeDefinition (to, from) {\n const { player } = this\n if (player.switchURL) {\n player.switchUrl(to.url)\n } else {\n player.changeDefinition(to, from)\n }\n }\n\n onItemClick (e, data) {\n super.onItemClick(...arguments)\n // const { player } = this\n // const target = e.delegateTarget\n // const url = target.getAttribute('url')\n this.emitUserAction(e, 'change_definition', { from: data.from, to: data.to })\n // player.emit(Events.BEFORE_DEFINITION_CHANGE, url)\n this.player.changeDefinition(data.to, data.from)\n // player.emit(Events.DEFINITION_CHANGE, { from: data.from, to: data.to })\n }\n}\n","import { Events, POSITIONS } from '../../plugin'\nimport OptionsIcon from '../common/optionsIcon'\n\n/**\n * @typedef {{\n * position?: string,\n * index?: number,\n * list?: Array<number | { [propName: string]: any }>,\n * className?: string,\n * hidePortrait?: boolean,\n * [propName: string]: any\n * }} IPlaybackRateConfig\n */\n\nexport default class PlaybackRate extends OptionsIcon {\n static get pluginName () {\n return 'playbackRate'\n }\n\n /**\n * @type IPlaybackRateConfig\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 4,\n list: [2, 1.5, 1, 0.75, 0.5],\n className: 'xgplayer-playbackrate',\n hidePortrait: false\n }\n }\n\n constructor (args) {\n super(args)\n this.curRate = 1\n }\n\n beforeCreate (args) {\n const { playbackRate } = args.player.config\n const list = !playbackRate ? [] : Array.isArray(playbackRate) ? playbackRate : args.config.list\n if (Array.isArray(list)) {\n args.config.list = list.map(item => {\n if (typeof item === 'number') {\n item = {\n rate: item,\n text: `${item}x`\n }\n } else if (!item.text && item.rate) {\n item.text = `${item.rate}x`\n }\n return item\n })\n }\n }\n\n afterCreate () {\n super.afterCreate()\n this.on(Events.RATE_CHANGE, () => {\n if (this.curValue === this.player.playbackRate) {\n return\n }\n this.renderItemList()\n })\n this.renderItemList()\n }\n\n show () {\n if (!this.config.list || this.config.list.length === 0) {\n return\n }\n super.show()\n }\n\n onItemClick (e, data) {\n super.onItemClick(...arguments)\n const target = e.delegateTarget\n const rate = Number(target.getAttribute('rate'))\n if (!rate || rate === this.curValue) {\n return false\n }\n this.emitUserAction(e, 'change_rate', { props: 'playbackRate', from: this.player.playbackRate, to: rate })\n this.curValue = rate\n this.player.playbackRate = rate\n }\n\n renderItemList () {\n const playbackRate = this.player.playbackRate || 1\n this.curValue = playbackRate\n let curIndex = 0\n const items = this.config.list.map((item, index) => {\n const itemInfo = {\n rate: item.rate\n }\n if (itemInfo.rate === playbackRate) {\n itemInfo.selected = true\n curIndex = index\n }\n itemInfo.showText = this.getTextByLang(item)\n return itemInfo\n })\n super.renderItemList(items, curIndex)\n }\n\n destroy () {\n super.destroy()\n }\n}\n","import Plugin, { Events, POSITIONS } from '../../plugin'\nimport CssFullSceenSvg from '../assets/requestCssFull.svg'\nimport ExitCssFullSceenSvg from '../assets/exitCssFull.svg'\n\n/**\n * @typedef { {\n * position: string,\n * index: number,\n * disable: boolean,\n * target: null | HTMLElement,\n * [propName: string]: any\n * } } ICssConfig\n */\n\nexport default class CssFullScreen extends Plugin {\n static get pluginName () {\n return 'cssFullscreen'\n }\n\n /**\n * @type ICssConfig\n */\n static get defaultConfig () {\n return {\n position: POSITIONS.CONTROLS_RIGHT,\n index: 1,\n disable: false,\n target: null\n }\n }\n\n afterCreate () {\n if (this.config.disable) {\n return\n }\n\n if (this.config.target) {\n this.playerConfig.fullscreenTarget = this.config.target\n }\n\n this.initIcons()\n this.on(Events.CSS_FULLSCREEN_CHANGE, (isCssfullScreen) => {\n this.animate(isCssfullScreen)\n })\n this.btnClick = this.btnClick.bind(this)\n this.bind(['click', 'touchend'], this.btnClick)\n }\n\n initIcons () {\n const { icons } = this\n const contentIcon = this.find('.xgplayer-icon')\n contentIcon.appendChild(icons.cssFullscreen)\n contentIcon.appendChild(icons.exitCssFullscreen)\n }\n\n btnClick (e) {\n e.preventDefault()\n e.stopPropagation()\n const { isCssfullScreen } = this.player\n this.emitUserAction(e, 'switch_css_fullscreen', {\n prop: 'cssfullscreen',\n from: isCssfullScreen,\n to: !isCssfullScreen\n })\n if (!isCssfullScreen) {\n this.player.getCssFullscreen()\n } else {\n this.player.exitCssFullscreen()\n }\n }\n\n animate (isFullScreen) {\n if (!this.root) {\n return\n }\n isFullScreen ? this.setAttr('data-state', 'full') : this.setAttr('data-state', 'normal')\n this.switchTips(isFullScreen)\n }\n\n switchTips (isFullScreen) {\n const { i18nKeys } = this\n this.changeLangTextKey(this.find('.xg-tips'), isFullScreen ? i18nKeys.EXITCSSFULLSCREEN_TIPS : i18nKeys.CSSFULLSCREEN_TIPS)\n }\n\n registerIcons () {\n return {\n cssFullscreen: { icon: CssFullSceenSvg, class: 'xg-get-cssfull' },\n exitCssFullscreen: { icon: ExitCssFullSceenSvg, class: 'xg-exit-cssfull' }\n }\n }\n\n destroy () {\n this.unbind(['click', 'touchend'], this.btnClick)\n }\n\n render () {\n if (this.config.disable) {\n return\n }\n return `<xg-icon class='xgplayer-cssfullscreen'>\n <div class=\"xgplayer-icon\">\n </div>\n <div class=\"xg-tips\" lang-key=\"${this.i18nKeys.EXITCSSFULLSCREEN_TIPS}\">${this.i18n.CSSFULLSCREEN_TIPS}</div>\n </xg-icon>`\n }\n}\n","import Plugin, { Events, Util } from '../../plugin'\n\nexport default class ErrorPlugin extends Plugin {\n static get pluginName () {\n return 'error'\n }\n\n afterCreate () {\n this.clickHandler = this.hook('errorRetry', this.errorRetry, {\n pre: (e) => {\n e.preventDefault()\n e.stopPropagation()\n }\n })\n\n this.onError = this.hook('showError', this.handleError)\n\n this.bind('.xgplayer-error-refresh', 'click', this.clickHandler)\n this.on(Events.CANPLAY, () => {\n this.handleCanPlay()\n })\n\n this.on(Events.ERROR, (error) => {\n this.onError(error)\n })\n }\n\n errorRetry () {\n this.player.retry()\n }\n\n handleCanPlay () {\n Util.removeClass(this.player.root, 'xgplayer-is-error')\n }\n\n handleError (error = {}) {\n const { player } = this\n const type = error.errorType\n let errorNote = player.errorNote ? this.i18n[player.errorNote] : ''\n if (!errorNote) {\n switch (type) {\n case 'decoder':\n errorNote = this.i18n.MEDIA_ERR_DECODE\n break\n case 'network':\n errorNote = this.i18n.MEDIA_ERR_NETWORK\n break\n default:\n errorNote = this.i18n.MEDIA_ERR_SRC_NOT_SUPPORTED\n }\n }\n this.find('.xgplayer-error-text').innerHTML = errorNote\n this.find('.xgplayer-error-tips').innerHTML = `${this.i18n.REFRESH_TIPS}<span class=\"xgplayer-error-refresh\">${this.i18n.REFRESH}</span>`\n }\n\n destroy () {\n this.unbind('.xgplayer-error-refresh', 'click', this.clickHandler)\n }\n\n render () {\n return `<xg-error class=\"xgplayer-error\">\n <div class=\"xgplayer-errornote\">\n <span class=\"xgplayer-error-text\"></span>\n <span class=\"xgplayer-error-tips\"><em class=\"xgplayer-error-refresh\"></em></span>\n </div>\n </xg-error>`\n }\n}\n","import Plugin, { STATE_CLASS, Util } from '../../plugin'\n\n/**\n * 消息组件\n */\nclass Prompt extends Plugin {\n static get pluginName () {\n return 'prompt'\n }\n\n static get defaultConfig () {\n return {\n interval: 3000,\n style: {},\n mode: 'arrow',\n autoHide: true,\n detail: {\n text: '',\n highlight: ''\n },\n onClick: () => {\n }\n }\n }\n\n afterCreate () {\n this.intervalId = 0\n this.customConfig = null\n this.bind('.highlight', ['click', 'touchend'], (e) => {\n if (this.config.onClick || this.customOnClick) {\n e.preventDefault()\n e.stopPropagation()\n this.customOnClick ? this.customOnClick(e) : this.config.onClick(e)\n }\n })\n\n this.player.showPrompt = (...args) => {\n this.show(...args)\n }\n\n this.player.hidePrompt = () => {\n this.hide()\n }\n }\n\n setStyle (style) {\n Object.keys(style).map(key => {\n this.root.style[key] = style[key]\n })\n }\n\n show (detail, config = {}, onClick = () => {}) {\n if (!detail) {\n return\n }\n this.customOnClick = onClick\n const { interval } = this.config\n if (this.intervalId) {\n clearTimeout(this.intervalId)\n this.intervalId = null\n }\n Util.addClass(this.root, 'show')\n config.mode === 'arrow' && Util.addClass(this.root, 'arrow')\n if (typeof detail === 'string') {\n this.find('.xgplayer-prompt-detail').innerHTML = detail\n } else {\n this.find('.xgplayer-prompt-detail').innerHTML = `${detail.text || ''}` + `${detail.highlight ? `<i class=\"highlight\">${detail.highlight}</i>` : ''}`\n }\n\n config.style && this.setStyle(config.style)\n\n const autoHide = typeof config.autoHide === 'boolean' ? config.autoHide : this.config.autoHide\n if (autoHide) {\n const hideinterval = config.interval || interval\n this.intervalId = setTimeout(() => {\n this.hide()\n }, hideinterval)\n }\n }\n\n hide () {\n Util.removeClass(this.root, 'show')\n Util.removeClass(this.root, 'arrow')\n this.root.removeAttribute('style')\n this.customOnClick = null\n }\n\n render () {\n return `<xg-prompt class=\"xgplayer-prompt ${STATE_CLASS.CONTROLS_FOLLOW}\">\n <span class=\"xgplayer-prompt-detail\"></span>\n </xg-prompt>`\n }\n}\n\nexport default Prompt\n","import { Util, Events } from '../../plugin'\n\nconst ISPOT = {\n time: 0, // 进度条在此时间戳打点 单位为s\n text: '', // 打点处的自定义文案\n id: 1, // 标记唯一标识,用于删除的时候索引\n duration: 1, // 进度条标识点的时长 默认1s【可选】单位为s\n color: '#fff', // 进度条标识点的显示颜色【可选】\n style: {}, // 指定样式\n width: 6,\n height: 6\n}\n\nfunction mergeISPOT (iSpot) {\n Object.keys(ISPOT).map(key => {\n if (iSpot[key] === undefined) {\n iSpot[key] = ISPOT[key]\n }\n })\n}\n\nconst APIS = {\n initDots () {\n this._ispots.map(item => {\n this.createDot(item, false)\n })\n this._ispotsInit = true\n },\n /**\n * 创建一个故事点\n * @param { object } iSpot\n * @param { boolean } isNew\n */\n createDot (iSpot, isNew = true) {\n const { progress } = this.player.plugins\n if (!progress) {\n return\n }\n if (isNew) {\n mergeISPOT(iSpot)\n this._ispots.push(iSpot)\n }\n if (!this._ispotsInit && isNew) {\n return\n }\n const ret = this.calcuPosition(iSpot.time, iSpot.duration)\n const style = iSpot.style || {}\n style.left = `${ret.left}%`\n style.width = `${ret.width}%`\n let className = `xgspot_${iSpot.id} xgplayer-spot`\n ret.isMini && (className += ' mini')\n const dotDom = Util.createDom('xg-spot', '', {\n 'data-text': iSpot.text,\n 'data-time': iSpot.time,\n 'data-id': iSpot.id\n }, className)\n Object.keys(style).map(key => {\n dotDom.style[key] = style[key]\n })\n progress.outer && progress.outer.appendChild(dotDom)\n },\n\n /**\n * 根据id查找节点\n * @param {string} id\n */\n findDot (id) {\n if (!this.player.plugins.progress) {\n return\n }\n const ret = this._ispots.filter((cur, index) => {\n return cur.id === id\n })\n return ret.length > 0 ? ret[0] : null\n },\n\n /**\n * 更新故事点\n * @param {any} iSpot\n * @param {boolean} needShow\n */\n updateDot (iSpot, needShow = false) {\n const { progress } = this.player.plugins\n if (!progress) {\n return\n }\n const dot = this.findDot(iSpot.id)\n if (dot) {\n Object.keys(iSpot).map(key => {\n dot[key] = iSpot[key]\n })\n }\n if (!this._ispotsInit) {\n return\n }\n const dotDom = progress.find(`xg-spot[data-id=\"${iSpot.id}\"]`)\n if (!dotDom) {\n return\n }\n const ret = this.calcuPosition(iSpot.time, iSpot.duration)\n const style = iSpot.style || {}\n style.left = `${ret.left}%`\n style.width = `${ret.width}%`\n dotDom.setAttribute('data-text', iSpot.text)\n dotDom.setAttribute('data-time', iSpot.time)\n if (ret.isMini) {\n Util.addClass(dotDom, 'mini')\n } else {\n Util.removeClass(dotDom, 'mini')\n }\n Object.keys(style).map(key => {\n dotDom.style[key] = style[key]\n })\n if (needShow) {\n this.showDot(iSpot.id)\n }\n },\n\n /**\n * 删除某个故事点\n * @param {string | number } id\n */\n deleteDot (id) {\n const { _ispots } = this\n const { progress } = this.player.plugins\n if (!progress) {\n return\n }\n const del = []\n for (let i = 0; i < _ispots.length; i++) {\n if (_ispots[i].id === id) {\n del.push(i)\n }\n }\n const len = del.length\n for (let i = len - 1; i >= 0; i--) {\n _ispots.splice(del[i], 1)\n if (this._ispotsInit) {\n const dotDom = progress.find(`xg-spot[data-id=\"${id}\"]`)\n dotDom && dotDom.parentElement.removeChild(dotDom)\n }\n }\n },\n\n /**\n * 移除所有的故事点\n */\n deleteAllDots () {\n const { progress } = this.player.plugins\n if (!progress) {\n return\n }\n if (!this._ispotsInit) {\n this._ispots = []\n return\n }\n const dotDoms = progress.root.getElementsByTagName('xg-spot')\n for (let i = dotDoms.length - 1; i >= 0; i--) {\n progress.outer.removeChild(dotDoms[i])\n }\n this._ispots = []\n },\n /**\n * 批量全部更新当前故事点\n * @param {Array} iSpots\n */\n updateAllDots (iSpots = []) {\n const { progress } = this.player.plugins\n if (!progress) {\n return\n }\n if (!this._ispotsInit) {\n this._ispots = iSpots\n return\n }\n this._ispots = []\n const dotDoms = progress.root.getElementsByTagName('xg-spot')\n const len = dotDoms.length\n if (len > iSpots.length) {\n for (let i = len - 1; i > iSpots.length - 1; i--) {\n progress.outer.removeChild(dotDoms[i])\n }\n }\n iSpots.map((ispot, index) => {\n if (index < len) {\n dotDoms[index].setAttribute('data-id', `${ispot.id}`)\n this._ispots.push(ispot)\n this.updateDot(ispot)\n } else {\n this.createDot(ispot)\n }\n })\n }\n}\n\nexport default function initDotsAPI (plugin) {\n const { config, player } = plugin\n Object.keys(APIS).map(item => {\n plugin[item] = APIS[item].bind(plugin)\n })\n const ispots = player.config.progressDot || config.ispots || []\n plugin._ispots = ispots.map(item => {\n mergeISPOT(item)\n return item\n })\n plugin._ispotsInit = false\n player.once(Events.DURATION_CHANGE, () => {\n plugin.initDots()\n })\n}\n","import Plugin, { Util, Sniffer } from '../../plugin'\nimport initDotsAPI from './dotsApi'\n/**\n * @typedef {{\n * miniWidth?: number, // 故事点显示最小宽度\n * ispots?: Array<{ //故事点列表\n * time?: number, // 进度条在此时间戳打点 单位为s\n * text?: string, // 打点处的自定义文案\n * id?: number | string, // 标记唯一标识,用于删除的时候索引\n * duration:? number, // 进度条标识点的时长 默认1s【可选】单位为s\n * color?: string, // 进度条标识点的显示颜色【可选】\n * style?: { [propName: string]: any }, // 指定样式\n * width?: number,\n * height?: number\n * }>,\n * defaultText?: '', // 故事点hover默认文案\n * isFocusDots?: true, //\n * isShowThumbnail?: true, // 是否显示预览图\n * isShowCoverPreview?: false, // 进度条拖动时是否显示播放区域预览图\n * mode?: 'short' | 'production', // short // production\n * [propName: string]: any\n * }} IProgressPreviewConfig\n */\n\nconst CALLBACK_MAP = {\n dragmove: 'onProgressMove',\n dragstart: 'onProgressDragStart',\n dragend: 'onProgressDragEnd'\n}\n\n/** */\nexport default class ProgressPreview extends Plugin {\n constructor (args) {\n super(args)\n this._ispots = []\n this.videoPreview = null\n this.videothumbnail = null\n this.thumbnail = null\n this._state = {\n now: 0,\n f: false\n }\n }\n\n static get pluginName () {\n return 'progresspreview'\n }\n\n /**\n * @type IProgressPreviewConfig\n */\n static get defaultConfig () {\n return {\n index: 1,\n miniWidth: 6, // 故事点显示最小宽度\n ispots: [], // 故事点列表\n defaultText: '', // 故事点hover默认文案\n isFocusDots: true, //\n isShowThumbnail: true, // 是否显示预览图\n isShowCoverPreview: false, // 进度条拖动时是否显示播放区域预览图\n mode: '' // short // production\n }\n }\n\n beforeCreate (args) {\n const progress = args.player.plugins.progress\n if (progress) {\n args.root = progress.root\n }\n }\n\n onPluginsReady () {\n const { player } = this\n if (!player.plugins.progress) {\n return\n }\n this.previewLine = this.find('.xg-spot-line')\n this.timePoint = this.find('.xgplayer-progress-point')\n this.timeText = this.find('.xg-spot-time')\n this.tipText = this.find('.spot-inner-text')\n\n this._hasThumnail = false\n\n this.registerThumbnail()\n initDotsAPI(this)\n\n this.bindEvents()\n }\n\n bindEvents () {\n const { progress } = this.player.plugins\n if (Sniffer.device === 'mobile' || !progress) {\n return\n }\n Object.keys(CALLBACK_MAP).map(key => {\n this[CALLBACK_MAP[key]] = this[CALLBACK_MAP[key]].bind(this)\n progress.addCallBack(key, this[CALLBACK_MAP[key]])\n })\n\n this.bind('.xg-spot-info', 'mousemove', this.onMousemove)\n\n this.bind('.xg-spot-info', 'mousedown', this.onMousedown)\n\n const fun = this.hook('previewClick', (...args) => {\n // console.log('args', args)\n })\n\n this.handlerPreviewClick = (e) => {\n e.stopPropagation()\n fun(parseInt(this._state.now * 1000, 10) / 1000, e)\n }\n\n this.bind('.xg-spot-content', 'mouseup', this.handlerPreviewClick)\n }\n\n onMousemove = (e) => {\n if (this._state.f || Util.hasClass(e.target, 'xg-spot-content')) {\n Util.event(e)\n e.stopPropagation()\n }\n }\n\n onMousedown = (e) => {\n if (this._state.f || Util.hasClass(e.target, 'xg-spot-content')) {\n Util.event(e)\n e.stopPropagation()\n }\n }\n\n onProgressMove (data) {\n this.updatePosition(data.offset, data.width, data.currentTime, data.e)\n }\n\n onProgressDragStart (data) {\n this.isDrag = true\n this.videoPreview && Util.addClass(this.videoPreview, 'show')\n }\n\n onProgressDragEnd (data) {\n this.isDrag = false\n this.videoPreview && Util.removeClass(this.videoPreview, 'show')\n }\n\n updateLinePos (offset, cwidth) {\n const { root, previewLine, timePoint, player } = this\n const { mode } = player.controls\n const isflex = mode === 'flex'\n const lwidth = root.getBoundingClientRect().width\n const tWidth = timePoint.getBoundingClientRect().width\n let x = offset - lwidth / 2\n let _t, _tt\n if (x < 0 && !isflex) {\n x = 0\n _t = offset - lwidth / 2\n !this.thumbnail && (_tt = offset - lwidth / 2 - tWidth / 2)\n } else if (x > cwidth - lwidth && !isflex) {\n _t = x - (cwidth - lwidth)\n !this.thumbnail && (_tt = x - (cwidth - lwidth) - tWidth / 2)\n x = cwidth - lwidth\n } else {\n _t = 0\n !this.thumbnail && (_tt = -tWidth / 2)\n }\n _t !== undefined && (previewLine.style.transform = `translateX(${_t}px)`)\n _tt !== undefined && (timePoint.style.transform = `translateX(${_tt}px)`)\n root.style.transform = `translateX(${x}px)`\n }\n\n updateTimeText (timeStr) {\n const { timeText, timePoint } = this\n timeText.textContent = timeStr\n !this.thumbnail && (timePoint.textContent = timeStr)\n }\n\n updatePosition (offset, cwidth, time, e) {\n const { root, config, _state } = this\n if (!root) {\n return\n }\n\n this.updateLinePos(offset, cwidth)\n // let now = offset / cwidth * player.duration\n // now = now < 0 ? 0 : (now > player.duration ? player.duration : now)\n _state.now = time\n const timeStr = Util.format(time)\n if (e && e.target && Util.hasClass(e.target, 'xgplayer-spot')) {\n this.showTips(e.target.getAttribute('data-text'), false, timeStr)\n _state.f = true\n config.isFocusDots && _state.f && (_state.now = parseInt(e.target.getAttribute('data-time'), 10))\n } else if (config.defaultText) {\n _state.f = false\n this.showTips(config.defaultText, true, timeStr)\n } else {\n _state.f = false\n this.hideTips('')\n }\n this.updateTimeText(timeStr)\n this.updateThumbnails(_state.now)\n }\n\n updateThumbnails (time) {\n const { player, videoPreview } = this\n const { thumbnail } = player.plugins\n if (thumbnail && thumbnail.usable) {\n this.thumbnail && thumbnail.update(this.thumbnail, time, 160, 90)\n const rect = videoPreview && videoPreview.getBoundingClientRect()\n this.videothumbnail && thumbnail.update(this.videothumbnail, time, rect.width, rect.height)\n }\n }\n\n registerThumbnail (thumbnailConfig = {}) {\n if (Sniffer.device === 'mobile') {\n return\n }\n const { player, config } = this\n const thumbnail = player.getPlugin('thumbnail')\n if (thumbnail) {\n Object.keys(thumbnailConfig).map(key => {\n thumbnail.config[key] = thumbnailConfig[key]\n })\n }\n if (!thumbnail || !thumbnail.usable || !config.isShowThumbnail) {\n Util.addClass(this.root, 'short-line no-thumbnail')\n return\n } else {\n Util.removeClass(this.root, 'short-line no-thumbnail')\n }\n this._hasThumnail = true\n const tRoot = this.find('.xg-spot-thumbnail')\n this.thumbnail = thumbnail.createThumbnail(tRoot, 'progress-thumbnail')\n if (config.isShowCoverPreview) {\n this.videoPreview = Util.createDom('xg-video-preview', '', {}, 'xgvideo-preview')\n player.root.appendChild(this.videoPreview)\n this.videothumbnail = thumbnail.createThumbnail(this.videoPreview, 'xgvideo-thumbnail')\n }\n }\n\n calcuPosition (time, duration) {\n const { progress } = this.player.plugins\n const { player } = this\n const totalWidth = progress.root.getBoundingClientRect().width\n const widthPerSeconds = player.duration / totalWidth * 6\n const ret = {}\n if (time + duration > player.duration) {\n duration = player.duration - time\n }\n ret.left = time / player.duration * 100\n ret.width = duration / player.duration\n ret.isMini = widthPerSeconds > duration\n return {\n left: time / player.duration * 100,\n width: duration / player.duration * 100,\n isMini: duration < widthPerSeconds\n }\n }\n\n showDot (id) {\n const dot = this.findDot(id)\n if (dot) {\n const rect = this.root.getBoundingClientRect()\n const { width } = rect\n const offset = dot.time / this.player.duration * width\n this.updatePosition(offset, width, dot.time)\n }\n }\n\n showTips (text, isDefault, timeStr = '') {\n if (!text) {\n return\n }\n Util.addClass(this.root, 'no-timepoint')\n Util.addClass(this.find('.xg-spot-content'), 'show-text')\n if (isDefault && this.config.mode === 'production') {\n Util.addClass(this.root, 'product')\n this.tipText.textContent = text\n } else {\n Util.removeClass(this.root, 'product')\n this.tipText.textContent = this._hasThumnail ? text : `${timeStr} ${text}`\n }\n }\n\n hideTips () {\n Util.removeClass(this.root, 'no-timepoint')\n this.tipText.textContent = ''\n Util.removeClass(this.find('.xg-spot-content'), 'show-text')\n Util.removeClass(this.root, 'product')\n }\n\n destroy () {\n const { progress } = this.player.plugins\n progress && Object.keys(CALLBACK_MAP).map(key => {\n progress.removeCallBack(key, this[CALLBACK_MAP[key]])\n })\n this.videothumbnail = null\n this.thumbnail = null\n this.videoPreview && this.player.root.removeChild(this.videoPreview)\n this.unbind('.xg-spot-info', 'mousemove', this.onMousemove)\n this.unbind('.xg-spot-info', 'mousedown', this.onMousedown)\n this.unbind('.xg-spot-content', 'mouseup', this.handlerPreviewClick)\n }\n\n render () {\n if (Sniffer.device === 'mobile' || this.playerConfig.isMobileSimulateMode) {\n return ''\n }\n\n return `<div class=\"xg-spot-info ${this.config.mode === 'short' ? 'short-line' : ''}\">\n <div class=\"xg-spot-content\">\n <div class=\"xg-spot-thumbnail\">\n <span class=\"xg-spot-time\"></span>\n </div>\n <div class=\"xg-spot-text\"><span class=\"spot-inner-text\"></span></div>\n </div>\n <div class=\"xgplayer-progress-point\">00:00</div>\n <div class=\"xg-spot-line\"></div>\n </div>`\n }\n}\n","/* eslint-disable camelcase */\nimport BasePlugin, { Util } from '../../plugin'\n/**\n * @typedef {{\n * isShow?: boolean,\n * urls?: Array<string>, // 有多张大图就多个url\n * pic_num?: number, // 每张图含有几个雪碧图\n * col?: number, // 截图列数\n * row?: number, // 截图行数\n * height?: number, // 缩略图高度\n * width?: number, // 缩略图宽度\n * scale?: number, // 缩放\n * className?: string, // 额外添加在dom上的class\n * hidePortrait?: boolean, // 是否在竖屏的时候隐藏\n * [propName: string]: any\n * }} IThumbnailConfig\n */\nexport default class Thumbnail extends BasePlugin {\n static get pluginName () {\n return 'thumbnail'\n }\n\n /**\n * @type IThumbnailConfig\n */\n static get defaultConfig () {\n return {\n isShow: false,\n urls: [], // 有多张大图就多个url就好\n pic_num: 0, // 每张图含有几个雪碧图\n col: 0, // 截图列数\n row: 0, // 截图行数\n height: 90, // 缩略图高度\n width: 160, // 缩略图宽度\n scale: 1, // 缩放\n className: '', // 额外添加在dom上的class\n hidePortrait: false // 是否在竖屏的时候隐藏\n }\n }\n\n constructor (args) {\n super(args)\n this.ratio = 1\n this.interval = null\n this.preloadMark = {}\n }\n\n afterCreate () {\n if (this.usable) {\n this.initThumbnail()\n }\n }\n\n get usable () {\n const { urls, pic_num } = this.config\n return urls && urls.length > 0 && pic_num > 0\n }\n\n initThumbnail () {\n const { width, height, pic_num, interval } = this.config\n this.ratio = width / height * 100\n this.interval = interval || Math.round(this.player.duration / pic_num)\n this.preload(0)\n // this.preIndex = new Array(urls.length)\n // this.interval = interval || Math.round(this.player.duration / pic_num)\n // this.ratio = width / height * 100\n // className && Util.addClass(this.root, className)\n // hidePortrait && Util.addClass(this.root, 'portrait')\n // width && (this.root.style.width = `${width}px`)\n // height && (this.root.style.height = `${height}px`)\n // this.root.style.backgroundSize = `${width * col}px auto`\n }\n\n getUrlByIndex (index) {\n return index >= 0 && index < this.config.urls.length ? this.config.urls[index] : ''\n }\n\n preload (index) {\n const { urls } = this.config\n const len = urls.length\n const arr = [index - 1, index, index + 1, index + 2]\n arr.map(item => {\n if (!this.preloadMark[item] && item >= 0 && item < len) {\n Util.preloadImg(urls[item])\n this.preloadMark[item] = true\n }\n })\n }\n\n getPosition (now, containerWidth = 0, containerHeight = 0) {\n const { pic_num, row, col, width, height } = this.config\n this.interval = Math.round(this.player.duration / pic_num)\n let index = Math.ceil(now / this.interval) // 当前时间对应的图像索引\n index = index > pic_num ? pic_num : index\n const urlIndex = index < row * col ? 0 : (Math.ceil(index / (row * col)) - 1)// 当前图像所在的url索引\n const indexInPage = index - urlIndex * (col * row) // 当前图像在当前url中的索引\n const rowIndex = indexInPage > 0 ? Math.ceil(indexInPage / col) - 1 : 0// 当前图像在当前url中的行索引\n const colIndex = indexInPage > 0 ? indexInPage - rowIndex * col - 1 : 0 // 当前图像在当前url中的列索引\n let swidth = 0 // containerWidth || width\n let sHeight = 0 // swidth * height / width\n\n // 根据入参的宽高适配样式\n if (containerWidth && containerHeight) {\n const per = containerWidth / containerHeight\n if (per < width / height) {\n swidth = containerWidth\n sHeight = swidth / (width / height)\n } else {\n sHeight = containerHeight\n swidth = sHeight * (width / height)\n }\n } else {\n swidth = containerWidth || width\n sHeight = swidth / (width / height)\n }\n const url = this.getUrlByIndex(urlIndex)\n return {\n urlIndex,\n rowIndex,\n colIndex,\n url,\n height: sHeight,\n width: swidth,\n style: {\n backgroundImage: `url(${url})`,\n backgroundSize: `${swidth * col}px auto`,\n backgroundPosition: `-${colIndex * swidth}px -${rowIndex * sHeight}px`,\n width: `${swidth}px`,\n height: `${sHeight}px`\n }\n }\n }\n\n update (dom, now, containerWidth = 0, containerHeight = 0, customStyle = '') {\n const { pic_num, urls } = this.config\n if (pic_num <= 0 || !urls || urls.length === 0) {\n return\n }\n const pos = this.getPosition(now, containerWidth, containerHeight)\n this.preload(pos.urlIndex)\n\n Object.keys(pos.style).map((key) => {\n dom.style[key] = pos.style[key]\n })\n Object.keys(customStyle).map(key => {\n dom.style[key] = customStyle[key]\n })\n }\n\n createThumbnail (root, className) {\n const dom = Util.createDom('xg-thumbnail', '', {}, `thumbnail ${className}`)\n root && root.appendChild(dom)\n return dom\n }\n}\n","import Plugin from '../../plugin'\nclass MiniProgress extends Plugin {\n static get pluginName () {\n return 'MiniProgress'\n }\n\n static get defaultConfig () {\n return {}\n }\n\n afterCreate () {\n }\n\n update (data = { cached: 0, played: 0 }, duration) {\n if (!duration || !this.root) {\n return\n }\n if (data.cached) {\n this.find('xg-mini-progress-cache').style.width = `${data.cached / duration * 100}%`\n }\n if (data.played) {\n this.find('xg-mini-progress-played').style.width = `${data.played / duration * 100}%`\n }\n }\n\n render () {\n if (!this.playerConfig.progress || !this.playerConfig.miniprogress) {\n return\n }\n return `<xg-mini-progress class=\"xg-mini-progress\">\n <xg-mini-progress-cache class=\"xg-mini-progress-cache\"></xg-mini-progress-cache>\n <xg-mini-progress-played class=\"xg-mini-progress-played\"></xg-mini-progress-played>\n </xg-mini-progress>`\n }\n}\n\nexport default MiniProgress\n","import Plugin, { Events, Util, Sniffer } from '../../plugin'\nimport XG_DEBUG from '../../utils/debug'\n\nconst MODES = {\n REAL_TIME: 'realtime',\n FIRST_FRAME: 'firstframe',\n FRAME_RATE: 'framerate'\n}\n\nfunction nowTime () {\n try {\n return window.performance.now()\n } catch (e) {\n return new Date().getTime()\n }\n}\n/**\n * Check whether the current video object supports screenshots\n * @param { VideoElement } video\n * @returns\n */\nfunction checkVideoIsSupport (video) {\n if (Sniffer.browser === 'safari' && (/^blob/.test(video.currentSrc) || /^blob/.test(video.src))) {\n return false\n }\n\n return true\n}\n\n/**\n * Check whether the current environment supports canvas\n * @returns { Boolean }\n */\nfunction checkIsSupportCanvas () {\n try {\n const ctx = document.createElement('canvas').getContext\n if (ctx) {\n return true\n }\n return false\n } catch (e) {\n return false\n }\n}\n\n/**\n * @typedef { {\n * disable?: boolean,\n * mode?: \"realtime\" | \"firstframe\" | \"framerate\",\n * frameRate?: number\n * filter?: string,\n * addMask?: boolean,\n * maskBg?: string,\n * [propName: string]: any\n * } } IDynamicBgConfig\n */\n\nlet isSupportCanvas = null\nclass DynamicBg extends Plugin {\n static get pluginName () {\n return 'dynamicBg'\n }\n\n /**\n * @type IDynamicBgConfig\n */\n static get defaultConfig () {\n return {\n isInnerRender: false,\n disable: true,\n /**\n * Rendering method\n * realtime - Realtime rendering\n * firstframe - Render only the first frame\n * framerate - Render by frame\n */\n mode: 'framerate',\n frameRate: 10, // Frame rate when mode=framerate\n filter: 'blur(50px)', // Filter settings\n addMask: true, // Whether need a mask\n maskBg: 'rgba(0,0,0,0.7)' // Mask background color\n }\n }\n\n /**\n * @type {boolean}\n * @description Does the current environment support Canvas\n */\n static get isSupport () {\n if (typeof isSupportCanvas === 'boolean') {\n return isSupportCanvas\n }\n isSupportCanvas = checkIsSupportCanvas()\n return isSupportCanvas\n }\n\n static supportCanvasFilter () {\n return !(Sniffer.browser === 'safari' || Sniffer.browser === 'firefox')\n }\n\n afterCreate () {\n if (this.playerConfig.dynamicBg === true) {\n this.config.disable = false\n }\n if (!DynamicBg.isSupport) {\n this.config.disable = true\n }\n const { disable, mode } = this.config\n if (disable) {\n return\n }\n /**\n * @private\n */\n this._pos = {\n width: 0,\n height: 0,\n rwidth: 0,\n rheight: 0,\n x: 0,\n y: 0\n }\n /**\n * @readonly\n */\n this.isStart = false\n /**\n * @readonly\n */\n this.videoPI = 0\n /**\n * @readonly\n */\n this.preTime = 0\n /**\n * @readonly\n */\n this.interval = parseInt(1000 / this.config.frameRate, 10)\n\n /**\n * @readonly\n */\n this.canvas = null\n /**\n * @readonly\n */\n this.canvasCtx = null\n\n this.once(Events.COMPLETE, () => {\n this.init()\n !this.player.paused && this.start()\n })\n\n this.once(Events.LOADED_DATA, this.onLoadedData)\n this.on(Events.URL_CHANGE, () => {\n this.once(Events.LOADED_DATA, this.onLoadedData)\n })\n if (mode !== MODES.FIRST_FRAME) {\n this.on(Events.PLAY, () => {\n this.start()\n })\n this.on(Events.PAUSE, () => {\n this.stop()\n })\n }\n\n // First frame rendering\n if (mode === MODES.FIRST_FRAME) {\n this.once(Events.TIME_UPDATE, () => {\n const { video } = this.player\n video && checkVideoIsSupport(video) && video.videoWidth && this.update(video, video.videoWidth, video.videoHeight)\n })\n }\n }\n\n onLoadedData = () => {\n const { video } = this.player\n this.videoPI = parseInt(video.videoWidth / video.videoHeight * 100, 10)\n }\n\n /**\n * @private\n */\n init () {\n const { player, config } = this\n this.canvasFilter = DynamicBg.supportCanvasFilter()\n try {\n // 保证节点插入到video之前\n const parent = !this.config.isInnerRender ? player.root : (player.innerContainer || player.root)\n parent.insertAdjacentHTML('afterbegin',\n `<div class=\"xgplayer-dynamic-bg\"><canvas>\n </canvas><xgmask></xgmask></div>`)\n this.root = parent.children[0]\n this.canvas = this.find('canvas')\n // safari中canvas filter不生效\n if (!this.canvasFilter) {\n this.canvas.style.filter = config.filter\n this.canvas.style.webkitFilter = config.filter\n }\n this.mask = this.find('xgmask')\n config.addMask && (this.mask.style.background = config.maskBg)\n this.canvasCtx = this.canvas.getContext('2d')\n const { poster } = this.playerConfig\n if (poster) {\n const url = Util.typeOf(poster) === 'String' ? poster : (Util.typeOf(poster.poster) === 'String' ? poster.poster : null)\n this.updateImg(url)\n }\n } catch (e) {\n XG_DEBUG.logError('plugin:DynamicBg', e)\n }\n }\n\n start = () => {\n const { video } = this.player\n const _now = nowTime()\n if (!checkVideoIsSupport(video) || !this.canvasCtx) {\n return\n }\n this.stop()\n if (this.config.mode === MODES.REAL_TIME) {\n video && video.videoWidth && this.update(video, video.videoWidth, video.videoHeight)\n this.preTime = _now\n } else if (_now - this.preTime >= this.interval) {\n video && video.videoWidth && this.update(video, video.videoWidth, video.videoHeight)\n this.preTime = _now\n }\n this.frameId = Util.requestAnimationFrame(this.start)\n }\n\n stop = () => {\n if (this.frameId) {\n Util.cancelAnimationFrame(this.frameId)\n this.frameId = null\n }\n }\n\n updateImg (url) {\n if (!url) {\n return\n }\n // Render using the image\n const { width, height } = this.canvas.getBoundingClientRect()\n let image = new window.Image()\n image.onload = () => {\n if (!this.canvas) {\n return\n }\n this.canvas.height = height\n this.canvas.width = width\n this.update(image, image.width, image.height)\n image = null\n }\n image.src = url\n }\n\n update (video, videoWidth, videoHeight) {\n if (!this.canvas || !this.canvasCtx) {\n return\n }\n try {\n const { _pos, config } = this\n const { width, height } = this.canvas.getBoundingClientRect()\n this.videoPI = parseInt(videoWidth / videoHeight * 100, 10)\n if (width !== _pos.width || height !== _pos.height) {\n const pi = parseInt(width / height * 100, 10)\n _pos.width = this.canvas.width = width\n _pos.height = this.canvas.height = height\n let rheight = height\n let rwidth = width\n if (pi < this.videoPI) {\n rwidth = parseInt(height * this.videoPI / 100, 10)\n } else if (pi > this.videoPI) {\n rheight = parseInt(width * 100 / this.videoPI, 10)\n }\n if (pi < this.videoPI) {\n rwidth = parseInt(height * this.videoPI / 100, 10)\n } else if (pi > this.videoPI) {\n rheight = parseInt(width * 100 / this.videoPI, 10)\n }\n _pos.rwidth = rwidth * 1.2\n _pos.rheight = rheight * 1.2\n _pos.x = (width - _pos.rwidth) / 2\n _pos.y = (height - _pos.rheight) / 2\n }\n // console.log(`x:${_pos.x} y:${_pos.y} rwidth:${_pos.rwidth} rheight:${ _pos.rheight}`)\n this.canvasFilter && (this.canvasCtx.filter = config.filter)\n this.canvasCtx.drawImage(video, _pos.x, _pos.y, _pos.rwidth, _pos.rheight)\n } catch (e) {\n XG_DEBUG.logError('plugin:DynamicBg', e)\n }\n }\n\n destroy () {\n this.stop()\n this.canvasCtx = null\n this.canvas = null\n }\n\n render () {\n return ''\n }\n}\n\nexport default DynamicBg\n","export default {\n LANG: 'zh-cn',\n TEXT: {\n ERROR_TYPES: {\n network: {\n code: 1,\n msg: '视频下载错误'\n },\n mse: {\n code: 2,\n msg: '流追加错误'\n },\n parse: {\n code: 3,\n msg: '解析错误'\n },\n format: {\n code: 4,\n msg: '格式错误'\n },\n decoder: {\n code: 5,\n msg: '解码错误'\n },\n runtime: {\n code: 6,\n msg: '语法错误'\n },\n timeout: {\n code: 7,\n msg: '播放超时'\n },\n other: {\n code: 8,\n msg: '其他错误'\n }\n },\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 SCREENSHOT: '截图',\n LIVE: '正在直播',\n OFF: '关闭',\n OPEN: '开启',\n MINI_DRAG: '点击按住可拖动视频',\n MINISCREEN: '小屏幕',\n REFRESH_TIPS: '请试试',\n REFRESH: '刷新',\n FORWARD: '快进中',\n LIVE_TIP: '直播'\n }\n}\n","import Player from './player'\nimport Plugin from './plugin/plugin'\nimport BasePlugin from './plugin/basePlugin'\nimport * as Events from './events'\nimport STATE_CLASS from './stateClassMap'\nimport I18N from './lang/i18n'\nimport Errors from './error'\nimport Sniffer from './utils/sniffer'\nimport Util from './utils/util'\n\nimport defaultPreset from './presets/default'\n\nclass PresetPlayer extends Player {\n static defaultPreset = defaultPreset;\n static Util = Util;\n static Sniffer = Sniffer\n static Errors = Errors\n static Events = Events\n static Plugin = Plugin\n static BasePlugin = BasePlugin\n static I18N = I18N\n static STATE_CLASS = STATE_CLASS\n}\n\nexport default PresetPlayer\n","import sniffer from '../utils/sniffer'\n// import Danmu from '../plugins/danmu'\nimport Xglogger from '../plugins/logger'\nimport Replay from '../plugins/replay'\nimport Poster from '../plugins/poster'\nimport Start from '../plugins/start'\nimport Enter from '../plugins/enter'\nimport Miniscreen from '../plugins/miniScreen'\nimport PC from '../plugins/pc'\nimport Mobile from '../plugins/mobile'\nimport Keyboard from '../plugins/keyboard'\nimport Loading from '../plugins/loading'\nimport Progress from '../plugins/progress'\nimport PlayIcon from '../plugins/play'\nimport FullScreen from '../plugins/fullscreen'\nimport TimeIcon from '../plugins/time'\nimport Volume from '../plugins/volume'\nimport RotateIcon from '../plugins/rotate'\nimport PIPIcon from '../plugins/pip'\nimport PlayNextIcon from '../plugins/playNext'\nimport DownLoadIcon from '../plugins/download'\nimport ScreenShotIcon from '../plugins/screenShot'\nimport DefinitionIcon from '../plugins/definition'\nimport PlaybackRateIcon from '../plugins/playbackRate'\nimport CssFullScreen from '../plugins/cssFullScreen'\nimport Error from '../plugins/error'\nimport Prompt from '../plugins/prompt'\nimport ProgressPreview from '../plugins/progressPreview'\nimport Thumbnail from '../plugins/common/thumbnail'\nimport MiniProgress from '../plugins/progress/miniProgress'\nimport DynamicBg from '../plugins/dynamicBg'\nimport ZH from '../lang/zh-cn'\n\nexport default class DefaultPreset {\n constructor (options, playerConfig) {\n const simulateMode = playerConfig && playerConfig.isMobileSimulateMode\n const { isLive } = playerConfig\n const vodPlugins = isLive ? [] : [Progress, MiniProgress, ProgressPreview, TimeIcon]\n\n const contolsIcons = [...vodPlugins, PlayIcon, FullScreen,\n RotateIcon, PlayNextIcon, DefinitionIcon, PlaybackRateIcon, DownLoadIcon, ScreenShotIcon, Volume, PIPIcon]\n\n const layers = [Replay, Poster, Start, Loading, Enter, Error, Prompt, Thumbnail, Miniscreen]\n\n this.plugins = [Xglogger, ...contolsIcons, ...layers]\n const mode = simulateMode ? 'mobile' : sniffer.device\n switch (mode) {\n case 'pc':\n this.plugins.push(...[Keyboard, PC, CssFullScreen])\n break\n case 'mobile':\n this.plugins.push(...[Mobile])\n break\n default:\n this.plugins.push(...[Keyboard, PC, CssFullScreen])\n }\n if (sniffer.os.isIpad || mode === 'pc') {\n this.plugins.push(DynamicBg)\n }\n if (sniffer.os.isIpad) {\n this.plugins.push(PC)\n }\n this.ignores = []\n this.i18n = [ZH]\n }\n}\n"],"names":["check","it","Math","global","globalThis","window","self","this","Function","fails","exec","error","descriptors","require$$0","Object","defineProperty","get","$propertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","NASHORN_BUG","call","V","descriptor","enumerable","match","version","createPropertyDescriptor","bitmap","value","configurable","writable","toString","classofRaw","slice","classof","require$$1","split","indexedObject","requireObjectCoercible","undefined","TypeError","IndexedObject","toIndexedObject","isObject","aFunction","variable","getBuiltIn","namespace","method","arguments","length","engineUserAgent","userAgent","process","Deno","versions","v8","engineV8Version","V8_VERSION","nativeSymbol","getOwnPropertySymbols","symbol","Symbol","String","sham","useSymbolAsUid","iterator","isSymbol","$Symbol","setGlobal","key","SHARED","sharedStore","store","sharedModule","push","mode","copyright","toObject","argument","hasOwnProperty","has","hasOwn","id","postfix","random","uid","shared","require$$2","require$$3","NATIVE_SYMBOL","require$$4","USE_SYMBOL_AS_UID","require$$5","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","wellKnownSymbol","name","ordinaryToPrimitive","input","pref","fn","val","valueOf","TO_PRIMITIVE","toPrimitive","result","exoticToPrim","toPropertyKey","document","EXISTS","createElement","documentCreateElement","ie8DomDefine","a","DESCRIPTORS","propertyIsEnumerableModule","IE8_DOM_DEFINE","require$$6","$getOwnPropertyDescriptor","O","P","f","anObject","$defineProperty","Attributes","definePropertyModule","createNonEnumerableProperty","object","functionToString","inspectSource","set","WeakMap","nativeWeakMap","test","keys","sharedKey","hiddenKeys","NATIVE_WEAK_MAP","objectHas","require$$7","OBJECT_ALREADY_INITIALIZED","state","wmget","wmhas","wmset","metadata","facade","STATE","internalState","enforce","getterFor","TYPE","type","getInternalState","enforceInternalState","TEMPLATE","redefineModule","options","unsafe","simple","noTargetGet","source","join","prototype","ceil","floor","toInteger","isNaN","min","toLength","max","toAbsoluteIndex","index","integer","createMethod","IS_INCLUDES","$this","el","fromIndex","arrayIncludes","includes","indexOf","objectKeysInternal","names","i","enumBugKeys","internalObjectKeys","concat","getOwnPropertyNames","activeXDocument","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","ownKeys","getOwnPropertyDescriptorModule","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","replace","toLowerCase","isForced_1","redefine","copyConstructorProperties","target","_export","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","forced","objectKeys","objectDefineProperties","defineProperties","Properties","html","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","domain","style","display","appendChild","src","contentWindow","open","F","objectCreate","create","factories","construct","C","argsLength","args","list","functionBind","bind","that","partArgs","boundFunction","apply","$","nativeConstruct","NEW_TARGET_BUG","ARGS_BUG","FORCED","_classCallCheck","instance","Constructor","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_inherits","subClass","superClass","constructor","_typeof","obj","_assertThisInitialized","ReferenceError","_possibleConstructorReturn","assertThisInitialized","_getPrototypeOf","getPrototypeOf","_defineProperty","Target","newTarget","$args","proto","isArray","Array","arg","$getOwnPropertyNames","windowNames","getWindowNames","path","wrappedWellKnownSymbolModule","TO_STRING_TAG","setToStringTag","TAG","functionBindContext","b","c","SPECIES","arraySpeciesConstructor","originalArray","arraySpeciesCreate","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","callbackfn","specificCreate","arrayIteration","forEach","map","filter","some","every","find","findIndex","filterReject","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","$toString","require$$15","require$$16","nativeObjectCreate","require$$17","require$$18","require$$19","getOwnPropertyNamesExternal","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$29","require$$30","require$$31","require$$32","defineWellKnownSymbol","NAME","require$$34","InternalStateModule","require$$35","$forEach","require$$36","HIDDEN","require$$28","SYMBOL","setInternalState","ObjectPrototype","$stringify","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","wrap","tag","description","$defineProperties","properties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","setter","for","keyFor","sym","useSetter","useSimple","stringify","replacer","space","$replacer","FAILS_ON_PRIMITIVES","createProperty","propertyKey","_defineProperties","props","_createClass","protoProps","staticProps","_get","property","receiver","Reflect","base","superPropBase","desc","getOwnPropertyDescriptors","arrayMethodHasSpeciesSupport","METHOD_NAME","array","foo","Boolean","$map","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","k","len","E","A","n","nativeKeys","HAS_SPECIES_SUPPORT","nativeSlice","start","end","fin","domIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","arrayMethodIsStrict","DOMIterables","COLLECTION_NAME","Collection","CollectionPrototype","regexpFlags","ignoreCase","multiline","dotAll","unicode","sticky","$RegExp","RegExp","re","lastIndex","regexpUnsupportedDotAll","flags","regexpUnsupportedNcg","groups","stickyHelpers","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","nativeExec","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","re1","re2","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","reCopy","group","str","raw","charsAdded","strCopy","charAt","regexpExec","RegExpPrototype","fixRegexpWellKnownSymbolLogic","KEY","SHAM","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","methods","nativeMethod","regexp","arg2","forceStringMethod","$exec","done","MATCH","isRegexp","isRegExp","speciesConstructor","defaultConstructor","S","CONVERT_TO_STRING","pos","first","second","position","size","charCodeAt","stringMultibyte","codeAt","advanceStringIndex","regexpExecAbstract","R","fixRegExpWellKnownSymbolLogic","callRegExpExec","arrayPush","MAX_UINT32","SPLIT","nativeSplit","maybeCallNative","internalSplit","separator","limit","lim","lastLength","output","lastLastIndex","separatorCopy","splitter","rx","res","unicodeMatching","q","e","z","originalExec","nativeJoin","ES3_STRINGS","STRICT_METHOD","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","splice","deleteCount","insertCount","actualDeleteCount","from","to","actualStart","argumentsLength","toStringTagSupport","TO_STRING_TAG_SUPPORT","CORRECT_ARGUMENTS","tryGet","callee","objectToString","nativePromiseConstructor","Promise","aPossiblePrototype","objectSetPrototypeOf","CORRECT_SETTER","setSpecies","CONSTRUCTOR_NAME","iterators","Iterators","ITERATOR","ArrayPrototype","isArrayIteratorMethod","getIteratorMethod","iteratorClose","returnMethod","Result","stopped","SAFE_CLOSING","called","iteratorWithReturn","next","return","location","defer","channel","port","engineIsIos","engineIsNode","IS_IOS","IS_NODE","setImmediate","clear","clearImmediate","MessageChannel","Dispatch","counter","queue","ONREADYSTATECHANGE","run","runner","listener","event","post","postMessage","protocol","host","nextTick","now","port2","port1","onmessage","addEventListener","importScripts","removeChild","setTimeout","flush","head","last","notify","toggle","node","promise","then","task","engineIsIosPebble","Pebble","engineIsWebosWebkit","macrotask","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","parent","exit","enter","resolve","createTextNode","observe","characterData","microtask","PromiseCapability","reject","$$resolve","$$reject","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","newPromiseCapability","engineIsBrowser","NativePromise","redefineAll","anInstance","iterate","iterable","unboundFunction","iterFn","step","AS_ENTRIES","IS_ITERATOR","INTERRUPTED","stop","condition","callFn","checkCorrectnessOfIteration","SKIP_CLOSING","ITERATION_SUPPORT","promiseResolve","x","promiseCapability","hostReportErrors","console","newPromiseCapabilityModule","perform","IS_BROWSER","PROMISE","getInternalPromiseState","NativePromisePrototype","PromiseConstructor","PromiseConstructorPrototype","newGenericPromiseCapability","DISPATCH_EVENT","createEvent","dispatchEvent","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","UNHANDLED_REJECTION","SUBCLASSING","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","INCORRECT_ITERATION","all","isThenable","isReject","notified","chain","reactions","ok","exited","reaction","handler","fail","rejection","onHandleUnhandled","onUnhandled","reason","initEvent","isUnhandled","emit","unwrap","internalReject","internalResolve","wrapper","executor","onFulfilled","onRejected","catch","r","capability","$promiseResolve","values","remaining","alreadyCalled","race","FunctionPrototype","FunctionPrototypeToString","nameRE","inheritIfRequired","dummy","Wrapper","NewTarget","NewTargetPrototype","whitespaces","whitespace","ltrim","rtrim","stringTrim","trim","NUMBER","NativeNumber","NumberPrototype","BROKEN_CLASSOF","toNumber","third","radix","maxCode","digits","code","NaN","parseInt","NumberWrapper","j","$filter","$assign","assign","B","alphabet","chr","T","prefix","Events","EE","context","once","addListener","emitter","evt","_events","_eventsCount","clearEvent","EventEmitter","eventNames","events","listeners","handlers","l","ee","listenerCount","a1","a2","a3","a4","a5","removeListener","on","removeAllListeners","off","prefixed","module","_arrayLikeToArray","arr","arr2","_toConsumableArray","arrayLikeToArray","arrayWithoutHoles","iter","iterableToArray","minLen","unsupportedIterableToArray","nonIterableSpread","regExpExec","nativeMatch","matcher","fullUnicode","matchStr","getFlags","NativeRegExp","IS_NCG","CORRECT_NEW","BASE_FORCED","RegExpWrapper","pattern","rawFlags","handled","thisIsRegExp","patternIsRegExp","flagsAreUndefined","rawPattern","named","brackets","ncg","groupid","groupname","SyntaxError","handleNCG","handleDotAll","proxy","TO_STRING","nativeToString","NOT_GENERIC","INCORRECT_NAME","rf","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","getSubstitution","matched","captures","namedCaptures","tailPos","m","symbols","ch","capture","REPLACE","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","_","UNSAFE_SUBSTITUTE","searchValue","replaceValue","functionalReplace","results","accumulatedResult","nextSourcePosition","replacerArgs","$trim","forcedStringTrimMethod","mergeSort","comparefn","middle","insertionSort","merge","element","left","right","llength","rlength","lindex","rindex","arraySort","firefox","engineFfVersion","engineIsIeOrEdge","webkit","engineWebkitVersion","internalSort","FF","IE_OR_EDGE","V8","WEBKIT","nativeSort","sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STABLE_SORT","fromCharCode","v","itemsLength","items","arrayLength","y","getSortCompare","XG_DEBUG_OPEN","href","STYLE","info","warn","XGTAG","XG_DEBUG","config","debug","logInfo","message","optionalParams","log","logWarn","logError","_fun","XgplayerTimeRange","bufferedList","util","checkIsIn","createDom","tpl","attrs","cname","dom","className","innerHTML","item","setAttribute","createDomFromHtml","classname","doc","children","addClass","err","hasClass","classList","orgClassName","getAttribute","add","removeClass","remove","reg","toggleClass","classNames","typeOf","findDom","sel","querySelector","getElementById","getCss","currentStyle","defaultView","getComputedStyle","padStart","pad","charstr","maxlen","chars","substring","format","time","round","hour","minute","touches","touch","changedTouches","clientX","clientY","offsetX","pageX","offsetLeft","offsetY","pageY","offsetTop","_target","srcElement","deepCopy","dst","Node","deepMerge","getBgImage","url","backgroundImage","copyDom","nodeType","back","tagName","attributes","setInterval","eventName","intervalFunc","frequency","_interval","clearInterval","fun","_timers","clearTimeout","clearAllTimers","_timerIds","createImgBtn","imgUrl","width","height","w","h","unit","btn","parseFloat","backgroundSize","margin","Hex2RGBA","hex","alpha","rgb","sixHex","kw","getFullScreenEl","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","checkIsFunction","checkIsObject","hide","show","isUndefined","setStyleFromCsstext","text","filterStyleFromText","_cssText","cssText","styleArr","ret","remain","getStyleFromCsstext","preloadImg","onload","onerror","img","Image","complete","stopPropagation","cancelable","preventDefault","scrollTop","pageYOffset","documentElement","body","scrollLeft","pageXOffset","checkTouchSupport","getBuffered2","vbuffered","maxHoleDuration","buffered","diff","buffered2","buf2len","buf2end","getEventPos","zoom","requestAnimationFrame","callback","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","cancelAnimationFrame","frameId","mozCancelAnimationFrame","cancelRequestAnimationFrame","VERSION_REG","sniffer","os","isPc","navigator","ua","ie","chrome","opera","safari","isWindowsPhone","isSymbian","isAndroid","isFireFox","isTablet","isPhone","isIpad","isIos","_match","toLocaleLowerCase","ERROR_TYPE_MAP","Errors","player","errorInfo","errorType","errorCode","errorMessage","originError","ext","ERROR_TYPES","i18n","video","mediaError","duration","currentTime","ended","readyState","networkState","playerVersion","stack","ex","msg","PLAY","PLAYING","ENDED","PAUSE","ERROR","SEEKING","SEEKED","TIME_UPDATE","WAITING","CANPLAY","DURATION_CHANGE","VOLUME_CHANGE","LOADED_DATA","RATE_CHANGE","PROGRESS","LOAD_START","EMPTIED","PLAYER_FOCUS","PLAYER_BLUR","READY","URL_NULL","AUTOPLAY_STARTED","AUTOPLAY_PREVENTED","COMPLETE","REPLAY","DESTROY","URL_CHANGE","FULLSCREEN_CHANGE","CSS_FULLSCREEN_CHANGE","MINI_STATE_CHANGE","DEFINITION_CHANGE","AFTER_DEFINITION_CHANGE","VIDEO_RESIZE","PIP_CHANGE","ROTATE","SCREEN_SHOT","PLAYNEXT","SHORTCUT","XGLOG","USER_ACTION","VIDEO_EVENTS","emitEvents","eventKey","errorHandler","_hasStart","_currentTime","_duration","videoConfig","controls","autoplay","playsinline","x5VideoPlayerFullscreen","x5VideoOrientation","airplay","tabindex","mediaType","videoAttributes","playerType","x5VideoPlayerType","Sniffer","isWeixin","_this","loop","Util","defaultPlaybackRate","playbackRate","volume","autoplayMuted","muted","videoEventMiddleware","attachVideoEvents","middlewares","_this2","_this3","evHandlers","_evHandlers","_this4","funName","toUpperCase","removeEventListener","_e","pause","removeAttribute","load","detachVideoEvents","_this5","play","canPlayType","range","isTrue","_buffered","crossOrigin","currentSrc","defaultMuted","paused","rate","played","preload","seekable","seeking","onWaiting","vol","mydb","db","ojstore","keypath","indexedDB","webkitindexedDB","IDBKeyRange","webkitIDBKeyRange","myDB","request","onsuccess","onupgradeneeded","transaction","objectStoreNames","contains","createObjectStore","keyPath","deleteDatabase","storename","objectStore","put","delete","FULLSCREEN_EVENTS","GET_FULLSCREEN_API","EXIT_FULLSCREEN_API","UNSCOPABLES","addToUnscopables","$find","FIND","SKIPS_HOLES","callHandler","hook","hookName","preset","pre","__hooks","pluginName","preRet","isContinue","useHooks","usePluginHooks","plugins","plugin","hooksDescriptor","presetHooks","delHooksDescriptor","runHooks","showErrorMsg","BasePlugin","beforeCreate","__args","__events","playerConfig","__init","logger","lang","i18nKeys","action","eventType","Event","registerPlugin","getPlugin","offAll","destroy","unRegisterPlugin","Obj","Element","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","closest","selector","parentNode","_delegate","useCapture","listenerFn","delegateTarget","delegate_1","elements","querySelectorAll","ROOT_TYPES","CONTROLS","ROOT","POSITIONS","ROOT_LEFT","ROOT_RIGHT","ROOT_TOP","CONTROLS_LEFT","CONTROLS_RIGTH","CONTROLS_RIGHT","CONTROLS_CENTER","isUrl","createIcon","icon","attr","newIcon","registerIconsObj","iconsConfig","_icons","icons","orgIcon","class","mergeIconClass","mergeIconAttr","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","__delegates","root","_parent","_el","registerIcons","langText","textConfig","defaultTexConfig","registerLanguageTexts","zh","renderStr","render","Error","insert","setAttr","setStyle","__registerChildren","_children","_plugin","checkChildren","langKey","langTextShow","_c","qs","bindEL","delegate","unbindEL","_this6","htmlStr","eventHandle","isBubble","getPropertyValue","pdom","child","_this7","insertIdx","Number","isDomElement","coordinate","curIdx","insertBefore","insertAdjacentHTML","dels","correctPrototypeGetter","CORRECT_PROTOTYPE_GETTER","objectGetPrototypeOf","BUGGY_SAFARI_ITERATORS","iteratorsCore","returnThis","createIteratorConstructor","IteratorConstructor","KEYS","VALUES","ENTRIES","defineIterator","Iterable","DEFAULT","IS_SET","CurrentIteratorPrototype","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","ARRAY_ITERATOR","es_array_iterator","iterated","kind","Arguments","STRING_ITERATOR","point","ArrayIteratorMethods","ArrayValues","ResizeObserver","__handlers","timeStamp","observer","t","Date","getTime","__trigger","unobserve","disconnect","__runHandler","resizeObserver","typeIsObject","typeIsBoolean","init","cgid","_pluginInfoId","pluginGroup","closeResizeObserver","resize","addObserver","_player","_originalOptions","checkPlayerRoot","_keys","_p","lazyRegister","lazyPlugin","timeout","loader","__esModule","default","register","_plugins","originalOptions","isSupported","disable","defaultConfig","unRegister","_instance","func","afterCreate","__destroy","deletePlugin","getPlugins","findPlugin","cName","beforeInit","retPromise","_loadingPlugins","pluginsRet","beforePlayerInit","afterInit","afterPlayerInit","setLang","updateLang","reRender","pluginsMap","_args","onPluginsReady","unObserver","DEFAULT_SKIN","ENTER","PAUSED","LOADING","NO_START","ACTIVE","FULLSCREEN","CSS_FULLSCREEN","PARENT_FULLSCREEN","ROTATE_FULLSCREEN","PARENT_ROTATE_FULLSCREEN","INNER_FULLSCREEN","NO_CONTROLS","FLEX_CONTROLS","CONTROLS_FOLLOW","AUTOHIDE","NOT_ALLOW_AUTOPLAY","PC","MOBILE","MINI","STATES","STATE_ARRAY","userTimer","hideDelay","closeControlsBlur","inactive","focus","device","marginControls","autoHide","STATE_CLASS","center","innerRoot","isMini","onMouseEnter","onMouseLeave","blur","ignorePaused","unbind","initShow","control_autohide","controls_permanent","XGI18nLang","XGI18nTextKeys","XGI18nLangKeys","XGI18nLangPreExtends","updateKeys","en","extend","XGI18nText","LANG","TEXT","use","langData","texts","network","mse","parse","decoder","runtime","other","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","PLAY_TIPS","PAUSE_TIPS","PLAYNEXT_TIPS","DOWNLOAD_TIPS","ROTATE_TIPS","RELOAD_TIPS","FULLSCREEN_TIPS","EXITFULLSCREEN_TIPS","CSSFULLSCREEN_TIPS","EXITCSSFULLSCREEN_TIPS","TEXTTRACK","PIP","SCREENSHOT","LIVE","OFF","OPEN","MINI_DRAG","MINISCREEN","REFRESH_TIPS","REFRESH","FORWARD","LIVE_TIP","PlAYER_HOOKS","Player","nullUrlStart","fluid","fitVideoSize","videoFillMode","isLive","videoInit","poster","isMobileSimulateMode","execBeforePluginsCall","allowSeekAfterEnded","enableContextmenu","closeVideoClick","closeVideoDblclick","closePlayerBlur","closeDelayBlur","leavePlayerTime","closePlayVideoFocus","closePauseVideoFocus","closeFocusVideoFocus","startTime","seekedStatus","miniprogress","disableSwipeHandler","enableSwipeHandler","ignores","whitelist","language","fullscreenTarget","controlsList","screenShot","rotate","pip","download","mini","cssFullscreen","keyShortcut","presets","definition","customDuration","timeOffset","thumbnail","commonStyle","progressColor","playedColor","cachedColor","sliderBtnStyle","volumeColor","defaultPreset","defaultIdx","waitTimer","_state","isSeeking","isCanplay","_runPending","rotateDeg","isActive","isCssfullScreen","fullscreen","_fullscreenEl","_cssfullscreenEl","curDefinition","_orgCss","_fullScreenOffset","_videoHeight","_videoWidth","_played","begin","acc","innerContainer","topBar","osVersion","database","Database","_initDOM","_bindEvents","_registerPresets","_registerPlugins","pluginsManager","setState","onReady","defaultDefinition","hasStart","vid","line","handle","_initBaseDoms","XgVideoProxy","_nVideo","Controls","top","leftBar","rightBar","resetFullState","onFullscreenChange","isFullScreen","fullEl","_fullActionFrom","prop","changeFullStyle","exitCssFullscreen","needFullscreenScroll","scrollTo","recoverFullStyle","__webkitbeginfullscreen","__webkitendfullscreen","playFunc","mousemoveFunc","canPlayFunc","videoPlay","_attachSourceEvents","loadeddataFunc","_root","firstChild","_videoSourceCount","_sourceError","I18N","ignoresStr","lazy","loadingPlugin","forceBeforeInit","Preset","_this8","PLUFGIN","_pConfig","deregister","_this9","_startInit","fileName","lineNumber","seamless","playPromise","_this10","onError","_errorTimer","_this11","isSeekedPlay","_status","_this13","curTime","isPaused","switchURL","_canplay","_this14","reloadFunc","clsList","videoPause","cls","_this15","_unbindEvents","_detachSourceEvents","exitFullscreen","_this16","cList","_this17","onPlay","cur","_this18","rootClass","pClassName","_orgPCss","webkitRequestFullscreen","ALLOW_KEYBOARD_INPUT","fullscreenEnabled","webkitSupportsFullscreen","webkitEnterFullscreen","webkitExitFullScreen","_class","delay","onFocus","onBlur","_this19","_this20","_this21","rvH","_transform","_tx","_ty","transform","webkitTransform","videoWidth","videoHeight","containerSize","getBoundingClientRect","controlsHeight","videoFit","fit","rWidth","rHeight","_style","paddingTop","_this22","videoScale","vWidth","vHeight","cWidth","cHeight","updateObjectPosition","objectPosition","newState","bool","cutTo","_this23","changeDefinition","langKeys","textKeys","__url","posterUrl","update","VideoProxy","Xglogger","vt","pt","fvt","_isSeeking","seekingStart","waitingStart","_isWaiting","_waitTimer","_waittTimer","stall","costTime","seekData","emitLog","suspendSeekingStatus","suspendWaitingStatus","_onReset","_onWaiting","_onSeeking","_onSeeked","_onPlaying","_onError","endType","_now","_cost","replay","ReplaySvg","__handleReplay","isEndedShow","hideCanplay","onTimeUpdate","AnimateMap","autoPlayStart","initIcons","onPlayPause","clickHandler","switchPausePlay","emitUserAction","startPlay","PlaySvg","startPause","PauseSvg","isAnimate","endShow","seconds","addAnimate","switchStatus","status","isShowPause","isShowEnd","disableAnimate","animate","innerHtml","HTMLElement","barStr","logo","getMini","exitMini","onClick","getStyleSize","num","measurements","measurementsLength","getSize","elem","getStyle","innerWidth","innerHeight","outerWidth","outerHeight","getZeroSize","offsetWidth","offsetHeight","isBorderBox","boxSizing","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderWidth","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","getTouch","dentifier","identifier","EVENTS","POST_START_EVENTS","mousedown","touchstart","pointerdown","Draggabilly","isEnabled","isDragging","isDown","downPoint","dragPoint","startPos","_handlerDom","_bindStartEvent","_startKey","_boundPointerEvents","onUp","positionDrag","webKitTransform","dragStart","dragMove","dragEnd","touchIdentifier","pointerId","dragCancel","pointer","_getPosition","maxY","maxX","setLeftTop","_bindPostStartEvents","_unbindPostStartEvents","presetInfo","moveVector","hasDragStarted","dragRealStart","_dragPointerMove","dragX","dragY","checkContain","_unbindStartEvent","abs","axis","drag","grid","_getPositionCoord","_addTransformPosition","matrixValues","xIndex","translateX","translateY","styleSide","measure","parentSize","MiniScreen","isClose","scrollY","scrollHeight","lastStyle","isShowIcon","MiniScreenIcon","onCancelClick","onCenterClick","disableDrag","_draggabilly","isScrollSwitch","onScroll","PlayIcon","PauseIcon","MOUSE_EVENTS","mouseenter","mouseleave","mousemove","HOOKS","PCPlugin","__canvas","closeVideoStopPropagation","_clickCount","clickTimer","switchPlayPause","getFullscreen","disableContextmenu","initEvents","onVideoClick","onVideoDblClick","onContextmenu","Infinity","returnValue","cancelBubble","thisNumberValue","repeat","count","RangeError","nativeToFixed","toFixed","pow","multiply","c2","divide","dataToString","s","fractionDigits","number","fractDigits","sign","x2","TOUCHS","move","cancel","MOUSES","preventToucheDefault","_pos","moving","pressDelay","dbClickDelay","disablePress","disableDbClick","miniStep","needPreventDefault","pressIntrvalId","dbIntrvalId","_initEvent","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel","__clearPress","trigger","press","__clearDb","__setPress","__setDb","diffx","diffy","touchend","touchmove","ACTIONS","touche","getTouche","disableGesture","isStart","rect","scopeL","scopeR","scopeM1","scopeM","scopeM2","miniMoveStep","hideControlsActive","scope","checkScope","gestureY","gestureX","executeMove","endLastMove","resetSeekState","resetPos","changeAction","checkIsRootTarget","recoverAutoHide","light","timer","seekTipIcon","SeekTipIcon","closedbClick","xgMask","initCustomStyle","registerThumbnail","Touche","onRootTouchMove","onRootTouchEnd","moveDuration","eventsMap","pressend","click","doubleclick","disableActive","progressPlugin","progress","addCallBack","activeSeekNote","forward","usable","createThumbnail","timePreview","backgroundColor","color","disableTimeProgress","startPlugin","recover","mold","updateTime","updateBrightness","updateVolume","lastScope","seek","hideControlsEnd","sendUseAction","pressRate","percent","updatePercent","isTouchingSeek","maxDarkness","isForward","focusHide","updateThumbnails","gradient","disableSeekIcon","miniYPer","darkness","isDisableTag","isContentEditable","disableBodyTrigger","checkIsVisible","metaKey","altKey","ctrlKey","keyCode","isGlobalTrigger","checkCode","handleKeyCode","extendkeyCodeMap","keyCodeMap","key1","seekStep","noBodyTarget","up","down","esc","mergekeyCodeMap","onKeydown","onBodyKeyDown","checkVisible","rec","bottom","isBodyTarget","flag","_time","curKeyCode","loadingIcon","$findIndex","FIND_INDEX","TPL","styleKey","InnerList","fragments","focusClass","cachedIndex","playedIndex","newIndex","curIndex","millisecond","progressList","curPFrag","per","cached","updateDuration","newPIndex","updateProgress","newCIndex","inner","isFocus","_ePos","computeTime","triggerCallbacks","closeMoveSeek","onMoveStart","isProgressMoving","progressBtn","updateWidth","isMobile","onMouseMove","onMouseUp","onMoveOnly","onBodyClick","onMoveEnd","isEnter","miniStartStep","isPauseMoving","useable","__dragCallBacks","direc","innerList","outer","createInner","isDragingSeek","onTimeupdate","onCacheUpdate","onReset","bindDomEvents","boxShadow","_index","onMouseDown","pauseAutoHide","isCloseClickSeek","realTime","rLeft","offset","timeIcon","resetActive","notSeek","bufferedPoint","thumbnailPlugin","controlsMode","btnClick","changeLangTextKey","TopBackIcon","screenBack","BackSVG","Fullscreen","rotateFullscreen","orientation","setRotateDeg","handleFullscreen","changeFullScreen","needBackIcon","topBackIcon","_onOrientationChange","FullScreenSvg","ExitFullScreenSvg","deg","useCssFullscreen","getCssFullscreen","exitRotateFullscreen","getRotateFullscreen","switchCallback","isActiving","constrolsMode","createCenterTime","durationDom","timeDom","current","centerCurDom","centerDurDom","updateState","slider","bar","barRect","updateVolumePos","isMoving","onMove","volumeSmall","volumeSmallSvg","volumeLarge","volumeLargeSvg","volumeMuted","volumeMutedSvg","changeMutedHandler","changeMuted","onMouseenter","onMouseleave","onBarMousedown","onVolumeChange","_volume","showValueLabel","updateVolumeValue","$labelValue","innerText","isShowVolumeValue","Rotate","onBtnClick","updateRotateDeg","innerRotate","clockwise","_styles","transformOrigin","times","factor","RotateSvg","PresentationMode","isPIPAvailable","isPip","exitPIP","requestPIP","showIcon","pMode","initPipEvents","switchPIP","pipIcon","PipIcon","pipIconExit","PipIconExit","leavePIPCallback","enterPIPCallback","pipWindow","pictureInPictureWindow","onWebkitpresentationmodechanged","webkitPresentationMode","checkWebkitSetPresentationMode","webkitSetPresentationMode","requestPictureInPicture","exitPictureInPicture","pictureInPictureElement","pictureInPictureEnabled","disablePictureInPicture","webkitSupportsPresentationMode","PlayNextIcon","idx","urlList","nextHandler","playNext","Next","changeSrc","strFileName","strMimeType","blob","reader","defaultMime","mimeType","payload","anchor","myBlob","Blob","MozBlob","WebKitBlob","pop","ajax","XMLHttpRequest","responseType","response","send","msSaveBlob","dataUrlToBlob","saver","tempUiArr","Uint8Array","mx","strUrl","parts","binData","atob","decodeURIComponent","uiArr","winMode","URL","revokeObjectURL","confirm","createObjectURL","btoa","encodeURIComponent","FileReader","readAsDataURL","Download","isLock","getAbsoluteURL","downloadUtil","DownloadSvg","div","ScreenShot","screenshotIcon","initSize","fitVideo","onClickBtn","filename","saveLink","initMouseEvent","canvas","canvasCtx","getContext","shot","saveScreenShot","option","quality","createCanvans","drawImage","toDataURL","OptionList","onItemClick","renderItemList","_delegates","attrKeys","selected","showText","changeCallback","curlSelected","getAttrObj","IS_MOBILE","OptionsIcon","curValue","listType","hidePortrait","optionsList","activeEvent","onEnter","onLeave","onToggle","unFocus","curItem","changeCurrentText","getTextByLang","itemList","listStyle","DefinitionIcon","changeDefinitionList","definitionList","showItem","switchUrl","PlaybackRate","curRate","itemInfo","CssFullScreen","contentIcon","switchTips","CssFullSceenSvg","ExitCssFullSceenSvg","ErrorPlugin","errorRetry","handleError","handleCanPlay","retry","errorNote","intervalId","customConfig","customOnClick","showPrompt","hidePrompt","detail","interval","highlight","hideinterval","ISPOT","mergeISPOT","iSpot","APIS","initDots","_ispots","createDot","_ispotsInit","isNew","calcuPosition","dotDom","findDot","updateDot","needShow","dot","showDot","deleteDot","del","parentElement","deleteAllDots","dotDoms","getElementsByTagName","updateAllDots","iSpots","ispot","CALLBACK_MAP","dragmove","dragstart","dragend","ProgressPreview","videoPreview","videothumbnail","previewLine","timePoint","timeText","tipText","_hasThumnail","ispots","progressDot","initDotsAPI","bindEvents","onMousemove","onMousedown","handlerPreviewClick","updatePosition","isDrag","cwidth","_t","_tt","isflex","lwidth","tWidth","timeStr","textContent","updateLinePos","showTips","isFocusDots","defaultText","hideTips","updateTimeText","thumbnailConfig","isShowThumbnail","tRoot","isShowCoverPreview","totalWidth","widthPerSeconds","isDefault","removeCallBack","miniWidth","Thumbnail","ratio","preloadMark","initThumbnail","urls","pic_num","containerWidth","containerHeight","row","col","urlIndex","indexInPage","rowIndex","colIndex","swidth","sHeight","getUrlByIndex","backgroundPosition","customStyle","getPosition","isShow","scale","MODES","nowTime","performance","checkVideoIsSupport","browser","isSupportCanvas","videoPI","preTime","dynamicBg","DynamicBg","isSupport","rwidth","rheight","frameRate","onLoadedData","canvasFilter","supportCanvasFilter","isInnerRender","webkitFilter","mask","addMask","background","maskBg","updateImg","image","pi","checkIsSupportCanvas","PresetPlayer","simulateMode","contolsIcons","Progress","MiniProgress","TimeIcon","FullScreen","RotateIcon","PlaybackRateIcon","DownLoadIcon","ScreenShotIcon","Volume","PIPIcon","layers","Replay","Poster","Start","Loading","Enter","Prompt","Miniscreen","Keyboard","Mobile","ZH"],"mappings":"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"}
|