/
clappr.plainhtml5.min.js.map
1 lines (1 loc) · 613 KB
/
clappr.plainhtml5.min.js.map
1
{"version":3,"file":"clappr.plainhtml5.min.js","sources":["../node_modules/@clappr/core/dist/clappr-core.esm.js","../node_modules/@clappr/plugins/dist/clappr-plugins.esm.js","../src/base_bundle.js"],"sourcesContent":["function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _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}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _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}\n\nfunction _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\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}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _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}\n\nfunction _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++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _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}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function () {};\n\n return {\n s: F,\n n: function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function (e) {\n throw e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function () {\n it = o[Symbol.iterator]();\n },\n n: function () {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function (e) {\n didErr = true;\n err = e;\n },\n f: function () {\n try {\n if (!normalCompletion && it.return != null) it.return();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\n// Copyright 2014 Globo.com Player authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n/* istanbul ignore file */\n\n/**\n * Array.prototype.find\n *\n * Original source : https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * See also : https://tc39.github.io/ecma262/#sec-array.prototype.find\n */\nif (!Array.prototype.find) {\n // eslint-disable-next-line\n Object.defineProperty(Array.prototype, 'find', {\n // Note: ES6 arrow function syntax is not used on purpose to avoid this to be undefined\n value: function value(predicate) {\n // 1. Let O be ? ToObject(this value).\n if (this == null) throw new TypeError('\"this\" is null or not defined');\n var o = Object(this); // 2. Let len be ? ToLength(? Get(O, \"length\")).\n\n var len = o.length >>> 0; // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n\n if (typeof predicate !== 'function') throw new TypeError('predicate must be a function'); // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n\n var thisArg = arguments[1]; // 5. Let k be 0.\n\n var k = 0; // 6. Repeat, while k < len\n\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n // d. If testResult is true, return kValue.\n var kValue = o[k];\n if (predicate.call(thisArg, kValue, k, o)) return kValue; // e. Increase k by 1.\n\n k++;\n } // 7. Return undefined.\n\n\n return undefined;\n }\n });\n} // polyfills for smart TVs\n\n\nif (!Object.entries) {\n Object.entries = function (obj) {\n var ownProps = Object.keys(obj),\n i = ownProps.length,\n resArray = new Array(i); // preallocate the Array\n\n while (i--) {\n resArray[i] = [ownProps[i], obj[ownProps[i]]];\n }\n\n return resArray;\n };\n}\n\nif (!Object.values) {\n Object.values = function (obj) {\n var ownProps = Object.keys(obj),\n i = ownProps.length,\n resArray = new Array(i); // preallocate the Array\n\n while (i--) {\n resArray[i] = obj[ownProps[i]];\n }\n\n return resArray;\n };\n}\n/**\n * Object.assign\n * This polyfill doesn't support symbol properties, since ES5 doesn't have symbols anyway\n *\n * Original source : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\n\n\nif (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, 'assign', {\n // length of function is 2.\n value: function assign(target, varArgs) {\n\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) {\n // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n\n return to;\n },\n writable: true,\n configurable: true\n });\n} // https://tc39.github.io/ecma262/#sec-array.prototype.findindex\n\n\nif (!Array.prototype.findIndex) {\n Object.defineProperty(Array.prototype, 'findIndex', {\n value: function value(predicate) {\n // 1. Let O be ? ToObject(this value).\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n var o = Object(this); // 2. Let len be ? ToLength(? Get(O, \"length\")).\n\n var len = o.length >>> 0; // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n } // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n\n\n var thisArg = arguments[1]; // 5. Let k be 0.\n\n var k = 0; // 6. Repeat, while k < len\n\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n // d. If testResult is true, return k.\n var kValue = o[k];\n\n if (predicate.call(thisArg, kValue, k, o)) {\n return k;\n } // e. Increase k by 1.\n\n\n k++;\n } // 7. Return -1.\n\n\n return -1;\n },\n configurable: true,\n writable: true\n });\n}\n\n/* istanbul ignore file */\n// https://github.com/mathiasbynens/small\nvar mp4 = 'data:video/mp4;base64,AAAAHGZ0eXBpc29tAAACAGlzb21pc28ybXA0MQAAAAhmcmVlAAAC721kYXQhEAUgpBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcCEQBSCkG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAsJtb292AAAAbG12aGQAAAAAAAAAAAAAAAAAAAPoAAAALwABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAB7HRyYWsAAABcdGtoZAAAAAMAAAAAAAAAAAAAAAIAAAAAAAAALwAAAAAAAAAAAAAAAQEAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAAC8AAAAAAAEAAAAAAWRtZGlhAAAAIG1kaGQAAAAAAAAAAAAAAAAAAKxEAAAIAFXEAAAAAAAtaGRscgAAAAAAAAAAc291bgAAAAAAAAAAAAAAAFNvdW5kSGFuZGxlcgAAAAEPbWluZgAAABBzbWhkAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAADTc3RibAAAAGdzdHNkAAAAAAAAAAEAAABXbXA0YQAAAAAAAAABAAAAAAAAAAAAAgAQAAAAAKxEAAAAAAAzZXNkcwAAAAADgICAIgACAASAgIAUQBUAAAAAAfQAAAHz+QWAgIACEhAGgICAAQIAAAAYc3R0cwAAAAAAAAABAAAAAgAABAAAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAIAAAABAAAAHHN0c3oAAAAAAAAAAAAAAAIAAAFzAAABdAAAABRzdGNvAAAAAAAAAAEAAAAsAAAAYnVkdGEAAABabWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWRpcmFwcGwAAAAAAAAAAAAAAAAtaWxzdAAAACWpdG9vAAAAHWRhdGEAAAABAAAAAExhdmY1Ni40MC4xMDE=';\nvar Media = {\n mp4: mp4\n};\n\n/* Zepto v1.2.0 - zepto ajax callbacks deferred event ie selector - zeptojs.com/license */\nvar Zepto = function () {\n var undefined$1,\n key,\n $,\n classList,\n emptyArray = [],\n concat = emptyArray.concat,\n filter = emptyArray.filter,\n slice = emptyArray.slice,\n document = window.document,\n elementDisplay = {},\n classCache = {},\n cssNumber = {\n 'column-count': 1,\n 'columns': 1,\n 'font-weight': 1,\n 'line-height': 1,\n 'opacity': 1,\n 'z-index': 1,\n 'zoom': 1\n },\n fragmentRE = /^\\s*<(\\w+|!)[^>]*>/,\n singleTagRE = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n rootNodeRE = /^(?:body|html)$/i,\n capitalRE = /([A-Z])/g,\n // special attributes that should be get/set via method calls\n methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],\n adjacencyOperators = ['after', 'prepend', 'before', 'append'],\n table = document.createElement('table'),\n tableRow = document.createElement('tr'),\n containers = {\n 'tr': document.createElement('tbody'),\n 'tbody': table,\n 'thead': table,\n 'tfoot': table,\n 'td': tableRow,\n 'th': tableRow,\n '*': document.createElement('div')\n },\n readyRE = /complete|loaded|interactive/,\n simpleSelectorRE = /^[\\w-]*$/,\n class2type = {},\n toString = class2type.toString,\n zepto = {},\n camelize,\n uniq,\n tempParent = document.createElement('div'),\n propMap = {\n 'tabindex': 'tabIndex',\n 'readonly': 'readOnly',\n 'for': 'htmlFor',\n 'class': 'className',\n 'maxlength': 'maxLength',\n 'cellspacing': 'cellSpacing',\n 'cellpadding': 'cellPadding',\n 'rowspan': 'rowSpan',\n 'colspan': 'colSpan',\n 'usemap': 'useMap',\n 'frameborder': 'frameBorder',\n 'contenteditable': 'contentEditable'\n },\n isArray = Array.isArray || function (object) {\n return object instanceof Array;\n };\n\n zepto.matches = function (element, selector) {\n if (!selector || !element || element.nodeType !== 1) return false;\n var matchesSelector = element.matches || element.webkitMatchesSelector || element.mozMatchesSelector || element.oMatchesSelector || element.matchesSelector;\n if (matchesSelector) return matchesSelector.call(element, selector); // fall back to performing a selector:\n\n var match,\n parent = element.parentNode,\n temp = !parent;\n if (temp) (parent = tempParent).appendChild(element);\n match = ~zepto.qsa(parent, selector).indexOf(element);\n temp && tempParent.removeChild(element);\n return match;\n };\n\n function type(obj) {\n return obj == null ? String(obj) : class2type[toString.call(obj)] || \"object\";\n }\n\n function isFunction(value) {\n return type(value) == \"function\";\n }\n\n function isWindow(obj) {\n return obj != null && obj == obj.window;\n }\n\n function isDocument(obj) {\n return obj != null && obj.nodeType == obj.DOCUMENT_NODE;\n }\n\n function isObject(obj) {\n return type(obj) == \"object\";\n }\n\n function isPlainObject(obj) {\n return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype;\n }\n\n function likeArray(obj) {\n var length = !!obj && 'length' in obj && obj.length,\n type = $.type(obj);\n return 'function' != type && !isWindow(obj) && ('array' == type || length === 0 || typeof length == 'number' && length > 0 && length - 1 in obj);\n }\n\n function compact(array) {\n return filter.call(array, function (item) {\n return item != null;\n });\n }\n\n function flatten(array) {\n return array.length > 0 ? $.fn.concat.apply([], array) : array;\n }\n\n camelize = function (str) {\n return str.replace(/-+(.)?/g, function (match, chr) {\n return chr ? chr.toUpperCase() : '';\n });\n };\n\n function dasherize(str) {\n return str.replace(/::/g, '/').replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2').replace(/([a-z\\d])([A-Z])/g, '$1_$2').replace(/_/g, '-').toLowerCase();\n }\n\n uniq = function (array) {\n return filter.call(array, function (item, idx) {\n return array.indexOf(item) == idx;\n });\n };\n\n function classRE(name) {\n return name in classCache ? classCache[name] : classCache[name] = new RegExp('(^|\\\\s)' + name + '(\\\\s|$)');\n }\n\n function maybeAddPx(name, value) {\n return typeof value == \"number\" && !cssNumber[dasherize(name)] ? value + \"px\" : value;\n }\n\n function defaultDisplay(nodeName) {\n var element, display;\n\n if (!elementDisplay[nodeName]) {\n element = document.createElement(nodeName);\n document.body.appendChild(element);\n display = getComputedStyle(element, '').getPropertyValue(\"display\");\n element.parentNode.removeChild(element);\n display == \"none\" && (display = \"block\");\n elementDisplay[nodeName] = display;\n }\n\n return elementDisplay[nodeName];\n }\n\n function children(element) {\n return 'children' in element ? slice.call(element.children) : $.map(element.childNodes, function (node) {\n if (node.nodeType == 1) return node;\n });\n }\n\n function Z(dom, selector) {\n var i,\n len = dom ? dom.length : 0;\n\n for (i = 0; i < len; i++) this[i] = dom[i];\n\n this.length = len;\n this.selector = selector || '';\n } // `$.zepto.fragment` takes a html string and an optional tag name\n // to generate DOM nodes from the given html string.\n // The generated DOM nodes are returned as an array.\n // This function can be overridden in plugins for example to make\n // it compatible with browsers that don't support the DOM fully.\n\n\n zepto.fragment = function (html, name, properties) {\n var dom, nodes, container; // A special case optimization for a single tag\n\n if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1));\n\n if (!dom) {\n if (html.replace) html = html.replace(tagExpanderRE, \"<$1></$2>\");\n if (name === undefined$1) name = fragmentRE.test(html) && RegExp.$1;\n if (!(name in containers)) name = '*';\n container = containers[name];\n container.innerHTML = '' + html;\n dom = $.each(slice.call(container.childNodes), function () {\n container.removeChild(this);\n });\n }\n\n if (isPlainObject(properties)) {\n nodes = $(dom);\n $.each(properties, function (key, value) {\n if (methodAttributes.indexOf(key) > -1) nodes[key](value);else nodes.attr(key, value);\n });\n }\n\n return dom;\n }; // `$.zepto.Z` swaps out the prototype of the given `dom` array\n // of nodes with `$.fn` and thus supplying all the Zepto functions\n // to the array. This method can be overridden in plugins.\n\n\n zepto.Z = function (dom, selector) {\n return new Z(dom, selector);\n }; // `$.zepto.isZ` should return `true` if the given object is a Zepto\n // collection. This method can be overridden in plugins.\n\n\n zepto.isZ = function (object) {\n return object instanceof zepto.Z;\n }; // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and\n // takes a CSS selector and an optional context (and handles various\n // special cases).\n // This method can be overridden in plugins.\n\n\n zepto.init = function (selector, context) {\n var dom; // If nothing given, return an empty Zepto collection\n\n if (!selector) return zepto.Z(); // Optimize for string selectors\n else if (typeof selector == 'string') {\n selector = selector.trim(); // If it's a html fragment, create nodes from it\n // Note: In both Chrome 21 and Firefox 15, DOM error 12\n // is thrown if the fragment doesn't begin with <\n\n if (selector[0] == '<' && fragmentRE.test(selector)) dom = zepto.fragment(selector, RegExp.$1, context), selector = null; // If there's a context, create a collection on that context first, and select\n // nodes from there\n else if (context !== undefined$1) return $(context).find(selector); // If it's a CSS selector, use it to select nodes.\n else dom = zepto.qsa(document, selector);\n } // If a function is given, call it when the DOM is ready\n else if (isFunction(selector)) return $(document).ready(selector); // If a Zepto collection is given, just return it\n else if (zepto.isZ(selector)) return selector;else {\n // normalize array if an array of nodes is given\n if (isArray(selector)) dom = compact(selector); // Wrap DOM nodes.\n else if (isObject(selector)) dom = [selector], selector = null; // If it's a html fragment, create nodes from it\n else if (fragmentRE.test(selector)) dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null; // If there's a context, create a collection on that context first, and select\n // nodes from there\n else if (context !== undefined$1) return $(context).find(selector); // And last but no least, if it's a CSS selector, use it to select nodes.\n else dom = zepto.qsa(document, selector);\n } // create a new Zepto collection from the nodes found\n\n return zepto.Z(dom, selector);\n }; // `$` will be the base `Zepto` object. When calling this\n // function just call `$.zepto.init, which makes the implementation\n // details of selecting nodes and creating Zepto collections\n // patchable in plugins.\n\n\n $ = function (selector, context) {\n return zepto.init(selector, context);\n };\n\n function extend(target, source, deep) {\n for (key in source) if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n if (isPlainObject(source[key]) && !isPlainObject(target[key])) target[key] = {};\n if (isArray(source[key]) && !isArray(target[key])) target[key] = [];\n extend(target[key], source[key], deep);\n } else if (source[key] !== undefined$1) target[key] = source[key];\n } // Copy all but undefined properties from one or more\n // objects to the `target` object.\n\n\n $.extend = function (target) {\n var deep,\n args = slice.call(arguments, 1);\n\n if (typeof target == 'boolean') {\n deep = target;\n target = args.shift();\n }\n\n args.forEach(function (arg) {\n extend(target, arg, deep);\n });\n return target;\n }; // `$.zepto.qsa` is Zepto's CSS selector implementation which\n // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.\n // This method can be overridden in plugins.\n\n\n zepto.qsa = function (element, selector) {\n var found,\n maybeID = selector[0] == '#',\n maybeClass = !maybeID && selector[0] == '.',\n nameOnly = maybeID || maybeClass ? selector.slice(1) : selector,\n // Ensure that a 1 char tag name still gets checked\n isSimple = simpleSelectorRE.test(nameOnly);\n return element.getElementById && isSimple && maybeID ? // Safari DocumentFragment doesn't have getElementById\n (found = element.getElementById(nameOnly)) ? [found] : [] : element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11 ? [] : slice.call(isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn't have getElementsByClassName/TagName\n maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class\n element.getElementsByTagName(selector) : // Or a tag\n element.querySelectorAll(selector) // Or it's not simple, and we need to query all\n );\n };\n\n function filtered(nodes, selector) {\n return selector == null ? $(nodes) : $(nodes).filter(selector);\n }\n\n $.contains = document.documentElement.contains ? function (parent, node) {\n return parent !== node && parent.contains(node);\n } : function (parent, node) {\n while (node && (node = node.parentNode)) if (node === parent) return true;\n\n return false;\n };\n\n function funcArg(context, arg, idx, payload) {\n return isFunction(arg) ? arg.call(context, idx, payload) : arg;\n }\n\n function setAttribute(node, name, value) {\n value == null ? node.removeAttribute(name) : node.setAttribute(name, value);\n } // access className property while respecting SVGAnimatedString\n\n\n function className(node, value) {\n var klass = node.className || '',\n svg = klass && klass.baseVal !== undefined$1;\n if (value === undefined$1) return svg ? klass.baseVal : klass;\n svg ? klass.baseVal = value : node.className = value;\n } // \"true\" => true\n // \"false\" => false\n // \"null\" => null\n // \"42\" => 42\n // \"42.5\" => 42.5\n // \"08\" => \"08\"\n // JSON => parse if valid\n // String => self\n\n\n function deserializeValue(value) {\n try {\n return value ? value == \"true\" || (value == \"false\" ? false : value == \"null\" ? null : +value + \"\" == value ? +value : /^[\\[\\{]/.test(value) ? $.parseJSON(value) : value) : value;\n } catch (e) {\n return value;\n }\n }\n\n $.type = type;\n $.isFunction = isFunction;\n $.isWindow = isWindow;\n $.isArray = isArray;\n $.isPlainObject = isPlainObject;\n\n $.isEmptyObject = function (obj) {\n var name;\n\n for (name in obj) return false;\n\n return true;\n };\n\n $.isNumeric = function (val) {\n var num = Number(val),\n type = typeof val;\n return val != null && type != 'boolean' && (type != 'string' || val.length) && !isNaN(num) && isFinite(num) || false;\n };\n\n $.inArray = function (elem, array, i) {\n return emptyArray.indexOf.call(array, elem, i);\n };\n\n $.camelCase = camelize;\n\n $.trim = function (str) {\n return str == null ? \"\" : String.prototype.trim.call(str);\n }; // plugin compatibility\n\n\n $.uuid = 0;\n $.support = {};\n $.expr = {};\n\n $.noop = function () {};\n\n $.map = function (elements, callback) {\n var value,\n values = [],\n i,\n key;\n if (likeArray(elements)) for (i = 0; i < elements.length; i++) {\n value = callback(elements[i], i);\n if (value != null) values.push(value);\n } else for (key in elements) {\n value = callback(elements[key], key);\n if (value != null) values.push(value);\n }\n return flatten(values);\n };\n\n $.each = function (elements, callback) {\n var i, key;\n\n if (likeArray(elements)) {\n for (i = 0; i < elements.length; i++) if (callback.call(elements[i], i, elements[i]) === false) return elements;\n } else {\n for (key in elements) if (callback.call(elements[key], key, elements[key]) === false) return elements;\n }\n\n return elements;\n };\n\n $.grep = function (elements, callback) {\n return filter.call(elements, callback);\n };\n\n if (window.JSON) $.parseJSON = JSON.parse; // Populate the class2type map\n\n $.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function (i, name) {\n class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n }); // Define methods that will be available on all\n // Zepto collections\n\n $.fn = {\n constructor: zepto.Z,\n length: 0,\n // Because a collection acts like an array\n // copy over these useful array functions.\n forEach: emptyArray.forEach,\n reduce: emptyArray.reduce,\n push: emptyArray.push,\n sort: emptyArray.sort,\n splice: emptyArray.splice,\n indexOf: emptyArray.indexOf,\n concat: function () {\n var i,\n value,\n args = [];\n\n for (i = 0; i < arguments.length; i++) {\n value = arguments[i];\n args[i] = zepto.isZ(value) ? value.toArray() : value;\n }\n\n return concat.apply(zepto.isZ(this) ? this.toArray() : this, args);\n },\n // `map` and `slice` in the jQuery API work differently\n // from their array counterparts\n map: function (fn) {\n return $($.map(this, function (el, i) {\n return fn.call(el, i, el);\n }));\n },\n slice: function () {\n return $(slice.apply(this, arguments));\n },\n ready: function (callback) {\n // need to check if document.body exists for IE as that browser reports\n // document ready when it hasn't yet created the body element\n if (readyRE.test(document.readyState) && document.body) callback($);else document.addEventListener('DOMContentLoaded', function () {\n callback($);\n }, false);\n return this;\n },\n get: function (idx) {\n return idx === undefined$1 ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length];\n },\n toArray: function () {\n return this.get();\n },\n size: function () {\n return this.length;\n },\n remove: function () {\n return this.each(function () {\n if (this.parentNode != null) this.parentNode.removeChild(this);\n });\n },\n each: function (callback) {\n emptyArray.every.call(this, function (el, idx) {\n return callback.call(el, idx, el) !== false;\n });\n return this;\n },\n filter: function (selector) {\n if (isFunction(selector)) return this.not(this.not(selector));\n return $(filter.call(this, function (element) {\n return zepto.matches(element, selector);\n }));\n },\n add: function (selector, context) {\n return $(uniq(this.concat($(selector, context))));\n },\n is: function (selector) {\n return this.length > 0 && zepto.matches(this[0], selector);\n },\n not: function (selector) {\n var nodes = [];\n if (isFunction(selector) && selector.call !== undefined$1) this.each(function (idx) {\n if (!selector.call(this, idx)) nodes.push(this);\n });else {\n var excludes = typeof selector == 'string' ? this.filter(selector) : likeArray(selector) && isFunction(selector.item) ? slice.call(selector) : $(selector);\n this.forEach(function (el) {\n if (excludes.indexOf(el) < 0) nodes.push(el);\n });\n }\n return $(nodes);\n },\n has: function (selector) {\n return this.filter(function () {\n return isObject(selector) ? $.contains(this, selector) : $(this).find(selector).size();\n });\n },\n eq: function (idx) {\n return idx === -1 ? this.slice(idx) : this.slice(idx, +idx + 1);\n },\n first: function () {\n var el = this[0];\n return el && !isObject(el) ? el : $(el);\n },\n last: function () {\n var el = this[this.length - 1];\n return el && !isObject(el) ? el : $(el);\n },\n find: function (selector) {\n var result,\n $this = this;\n if (!selector) result = $();else if (typeof selector == 'object') result = $(selector).filter(function () {\n var node = this;\n return emptyArray.some.call($this, function (parent) {\n return $.contains(parent, node);\n });\n });else if (this.length == 1) result = $(zepto.qsa(this[0], selector));else result = this.map(function () {\n return zepto.qsa(this, selector);\n });\n return result;\n },\n closest: function (selector, context) {\n var nodes = [],\n collection = typeof selector == 'object' && $(selector);\n this.each(function (_, node) {\n while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector))) node = node !== context && !isDocument(node) && node.parentNode;\n\n if (node && nodes.indexOf(node) < 0) nodes.push(node);\n });\n return $(nodes);\n },\n parents: function (selector) {\n var ancestors = [],\n nodes = this;\n\n while (nodes.length > 0) nodes = $.map(nodes, function (node) {\n if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {\n ancestors.push(node);\n return node;\n }\n });\n\n return filtered(ancestors, selector);\n },\n parent: function (selector) {\n return filtered(uniq(this.pluck('parentNode')), selector);\n },\n children: function (selector) {\n return filtered(this.map(function () {\n return children(this);\n }), selector);\n },\n contents: function () {\n return this.map(function () {\n return this.contentDocument || slice.call(this.childNodes);\n });\n },\n siblings: function (selector) {\n return filtered(this.map(function (i, el) {\n return filter.call(children(el.parentNode), function (child) {\n return child !== el;\n });\n }), selector);\n },\n empty: function () {\n return this.each(function () {\n this.innerHTML = '';\n });\n },\n // `pluck` is borrowed from Prototype.js\n pluck: function (property) {\n return $.map(this, function (el) {\n return el[property];\n });\n },\n show: function () {\n return this.each(function () {\n this.style.display == \"none\" && (this.style.display = '');\n if (getComputedStyle(this, '').getPropertyValue(\"display\") == \"none\") this.style.display = defaultDisplay(this.nodeName);\n });\n },\n replaceWith: function (newContent) {\n return this.before(newContent).remove();\n },\n wrap: function (structure) {\n var func = isFunction(structure);\n if (this[0] && !func) var dom = $(structure).get(0),\n clone = dom.parentNode || this.length > 1;\n return this.each(function (index) {\n $(this).wrapAll(func ? structure.call(this, index) : clone ? dom.cloneNode(true) : dom);\n });\n },\n wrapAll: function (structure) {\n if (this[0]) {\n $(this[0]).before(structure = $(structure));\n var children; // drill down to the inmost element\n\n while ((children = structure.children()).length) structure = children.first();\n\n $(structure).append(this);\n }\n\n return this;\n },\n wrapInner: function (structure) {\n var func = isFunction(structure);\n return this.each(function (index) {\n var self = $(this),\n contents = self.contents(),\n dom = func ? structure.call(this, index) : structure;\n contents.length ? contents.wrapAll(dom) : self.append(dom);\n });\n },\n unwrap: function () {\n this.parent().each(function () {\n $(this).replaceWith($(this).children());\n });\n return this;\n },\n clone: function () {\n return this.map(function () {\n return this.cloneNode(true);\n });\n },\n hide: function () {\n return this.css(\"display\", \"none\");\n },\n toggle: function (setting) {\n return this.each(function () {\n var el = $(this);\n (setting === undefined$1 ? el.css(\"display\") == \"none\" : setting) ? el.show() : el.hide();\n });\n },\n prev: function (selector) {\n return $(this.pluck('previousElementSibling')).filter(selector || '*');\n },\n next: function (selector) {\n return $(this.pluck('nextElementSibling')).filter(selector || '*');\n },\n html: function (html) {\n return 0 in arguments ? this.each(function (idx) {\n var originHtml = this.innerHTML;\n $(this).empty().append(funcArg(this, html, idx, originHtml));\n }) : 0 in this ? this[0].innerHTML : null;\n },\n text: function (text) {\n return 0 in arguments ? this.each(function (idx) {\n var newText = funcArg(this, text, idx, this.textContent);\n this.textContent = newText == null ? '' : '' + newText;\n }) : 0 in this ? this.pluck('textContent').join(\"\") : null;\n },\n attr: function (name, value) {\n var result;\n return typeof name == 'string' && !(1 in arguments) ? 0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined$1 : this.each(function (idx) {\n if (this.nodeType !== 1) return;\n if (isObject(name)) for (key in name) setAttribute(this, key, name[key]);else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)));\n });\n },\n removeAttr: function (name) {\n return this.each(function () {\n this.nodeType === 1 && name.split(' ').forEach(function (attribute) {\n setAttribute(this, attribute);\n }, this);\n });\n },\n prop: function (name, value) {\n name = propMap[name] || name;\n return 1 in arguments ? this.each(function (idx) {\n this[name] = funcArg(this, value, idx, this[name]);\n }) : this[0] && this[0][name];\n },\n removeProp: function (name) {\n name = propMap[name] || name;\n return this.each(function () {\n delete this[name];\n });\n },\n data: function (name, value) {\n var attrName = 'data-' + name.replace(capitalRE, '-$1').toLowerCase();\n var data = 1 in arguments ? this.attr(attrName, value) : this.attr(attrName);\n return data !== null ? deserializeValue(data) : undefined$1;\n },\n val: function (value) {\n if (0 in arguments) {\n if (value == null) value = \"\";\n return this.each(function (idx) {\n this.value = funcArg(this, value, idx, this.value);\n });\n } else {\n return this[0] && (this[0].multiple ? $(this[0]).find('option').filter(function () {\n return this.selected;\n }).pluck('value') : this[0].value);\n }\n },\n offset: function (coordinates) {\n if (coordinates) return this.each(function (index) {\n var $this = $(this),\n coords = funcArg(this, coordinates, index, $this.offset()),\n parentOffset = $this.offsetParent().offset(),\n props = {\n top: coords.top - parentOffset.top,\n left: coords.left - parentOffset.left\n };\n if ($this.css('position') == 'static') props['position'] = 'relative';\n $this.css(props);\n });\n if (!this.length) return null;\n if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0])) return {\n top: 0,\n left: 0\n };\n var obj = this[0].getBoundingClientRect();\n return {\n left: obj.left + window.pageXOffset,\n top: obj.top + window.pageYOffset,\n width: Math.round(obj.width),\n height: Math.round(obj.height)\n };\n },\n css: function (property, value) {\n if (arguments.length < 2) {\n var element = this[0];\n\n if (typeof property == 'string') {\n if (!element) return;\n return element.style[camelize(property)] || getComputedStyle(element, '').getPropertyValue(property);\n } else if (isArray(property)) {\n if (!element) return;\n var props = {};\n var computedStyle = getComputedStyle(element, '');\n $.each(property, function (_, prop) {\n props[prop] = element.style[camelize(prop)] || computedStyle.getPropertyValue(prop);\n });\n return props;\n }\n }\n\n var css = '';\n\n if (type(property) == 'string') {\n if (!value && value !== 0) this.each(function () {\n this.style.removeProperty(dasherize(property));\n });else css = dasherize(property) + \":\" + maybeAddPx(property, value);\n } else {\n for (key in property) if (!property[key] && property[key] !== 0) this.each(function () {\n this.style.removeProperty(dasherize(key));\n });else css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';';\n }\n\n return this.each(function () {\n this.style.cssText += ';' + css;\n });\n },\n index: function (element) {\n return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0]);\n },\n hasClass: function (name) {\n if (!name) return false;\n return emptyArray.some.call(this, function (el) {\n return this.test(className(el));\n }, classRE(name));\n },\n addClass: function (name) {\n if (!name) return this;\n return this.each(function (idx) {\n if (!('className' in this)) return;\n classList = [];\n var cls = className(this),\n newName = funcArg(this, name, idx, cls);\n newName.split(/\\s+/g).forEach(function (klass) {\n if (!$(this).hasClass(klass)) classList.push(klass);\n }, this);\n classList.length && className(this, cls + (cls ? \" \" : \"\") + classList.join(\" \"));\n });\n },\n removeClass: function (name) {\n return this.each(function (idx) {\n if (!('className' in this)) return;\n if (name === undefined$1) return className(this, '');\n classList = className(this);\n funcArg(this, name, idx, classList).split(/\\s+/g).forEach(function (klass) {\n classList = classList.replace(classRE(klass), \" \");\n });\n className(this, classList.trim());\n });\n },\n toggleClass: function (name, when) {\n if (!name) return this;\n return this.each(function (idx) {\n var $this = $(this),\n names = funcArg(this, name, idx, className(this));\n names.split(/\\s+/g).forEach(function (klass) {\n (when === undefined$1 ? !$this.hasClass(klass) : when) ? $this.addClass(klass) : $this.removeClass(klass);\n });\n });\n },\n scrollTop: function (value) {\n if (!this.length) return;\n var hasScrollTop = ('scrollTop' in this[0]);\n if (value === undefined$1) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset;\n return this.each(hasScrollTop ? function () {\n this.scrollTop = value;\n } : function () {\n this.scrollTo(this.scrollX, value);\n });\n },\n scrollLeft: function (value) {\n if (!this.length) return;\n var hasScrollLeft = ('scrollLeft' in this[0]);\n if (value === undefined$1) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset;\n return this.each(hasScrollLeft ? function () {\n this.scrollLeft = value;\n } : function () {\n this.scrollTo(value, this.scrollY);\n });\n },\n position: function () {\n if (!this.length) return;\n var elem = this[0],\n // Get *real* offsetParent\n offsetParent = this.offsetParent(),\n // Get correct offsets\n offset = this.offset(),\n parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? {\n top: 0,\n left: 0\n } : offsetParent.offset(); // Subtract element margins\n // note: when an element has margin: auto the offsetLeft and marginLeft\n // are the same in Safari causing offset.left to incorrectly be 0\n\n offset.top -= parseFloat($(elem).css('margin-top')) || 0;\n offset.left -= parseFloat($(elem).css('margin-left')) || 0; // Add offsetParent borders\n\n parentOffset.top += parseFloat($(offsetParent[0]).css('border-top-width')) || 0;\n parentOffset.left += parseFloat($(offsetParent[0]).css('border-left-width')) || 0; // Subtract the two offsets\n\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n };\n },\n offsetParent: function () {\n return this.map(function () {\n var parent = this.offsetParent || document.body;\n\n while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css(\"position\") == \"static\") parent = parent.offsetParent;\n\n return parent;\n });\n }\n }; // for now\n\n $.fn.detach = $.fn.remove // Generate the `width` and `height` functions\n ;\n ['width', 'height'].forEach(function (dimension) {\n var dimensionProperty = dimension.replace(/./, function (m) {\n return m[0].toUpperCase();\n });\n\n $.fn[dimension] = function (value) {\n var offset,\n el = this[0];\n if (value === undefined$1) return isWindow(el) ? el['inner' + dimensionProperty] : isDocument(el) ? el.documentElement['scroll' + dimensionProperty] : (offset = this.offset()) && offset[dimension];else return this.each(function (idx) {\n el = $(this);\n el.css(dimension, funcArg(this, value, idx, el[dimension]()));\n });\n };\n });\n\n function traverseNode(node, fun) {\n fun(node);\n\n for (var i = 0, len = node.childNodes.length; i < len; i++) traverseNode(node.childNodes[i], fun);\n } // Generate the `after`, `prepend`, `before`, `append`,\n // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.\n\n\n adjacencyOperators.forEach(function (operator, operatorIndex) {\n var inside = operatorIndex % 2; //=> prepend, append\n\n $.fn[operator] = function () {\n // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings\n var argType,\n nodes = $.map(arguments, function (arg) {\n var arr = [];\n argType = type(arg);\n\n if (argType == \"array\") {\n arg.forEach(function (el) {\n if (el.nodeType !== undefined$1) return arr.push(el);else if ($.zepto.isZ(el)) return arr = arr.concat(el.get());\n arr = arr.concat(zepto.fragment(el));\n });\n return arr;\n }\n\n return argType == \"object\" || arg == null ? arg : zepto.fragment(arg);\n }),\n parent,\n copyByClone = this.length > 1;\n if (nodes.length < 1) return this;\n return this.each(function (_, target) {\n parent = inside ? target : target.parentNode; // convert all methods to a \"before\" operation\n\n target = operatorIndex == 0 ? target.nextSibling : operatorIndex == 1 ? target.firstChild : operatorIndex == 2 ? target : null;\n var parentInDocument = $.contains(document.documentElement, parent);\n nodes.forEach(function (node) {\n if (copyByClone) node = node.cloneNode(true);else if (!parent) return $(node).remove();\n parent.insertBefore(node, target);\n if (parentInDocument) traverseNode(node, function (el) {\n if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' && (!el.type || el.type === 'text/javascript') && !el.src) {\n var target = el.ownerDocument ? el.ownerDocument.defaultView : window;\n target['eval'].call(target, el.innerHTML);\n }\n });\n });\n });\n }; // after => insertAfter\n // prepend => prependTo\n // before => insertBefore\n // append => appendTo\n\n\n $.fn[inside ? operator + 'To' : 'insert' + (operatorIndex ? 'Before' : 'After')] = function (html) {\n $(html)[operator](this);\n return this;\n };\n });\n zepto.Z.prototype = Z.prototype = $.fn; // Export internal API functions in the `$.zepto` namespace\n\n zepto.uniq = uniq;\n zepto.deserializeValue = deserializeValue;\n $.zepto = zepto;\n return $;\n}();\n\nwindow.Zepto = Zepto;\nwindow.$ === undefined && (window.$ = Zepto);\n\n(function ($) {\n var jsonpID = +new Date(),\n document = window.document,\n key,\n name,\n rscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n scriptTypeRE = /^(?:text|application)\\/javascript/i,\n xmlTypeRE = /^(?:text|application)\\/xml/i,\n jsonType = 'application/json',\n htmlType = 'text/html',\n blankRE = /^\\s*$/,\n originAnchor = document.createElement('a');\n originAnchor.href = window.location.href; // trigger a custom event and return false if it was cancelled\n\n function triggerAndReturn(context, eventName, data) {\n var event = $.Event(eventName);\n $(context).trigger(event, data);\n return !event.isDefaultPrevented();\n } // trigger an Ajax \"global\" event\n\n\n function triggerGlobal(settings, context, eventName, data) {\n if (settings.global) return triggerAndReturn(context || document, eventName, data);\n } // Number of active Ajax requests\n\n\n $.active = 0;\n\n function ajaxStart(settings) {\n if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart');\n }\n\n function ajaxStop(settings) {\n if (settings.global && ! --$.active) triggerGlobal(settings, null, 'ajaxStop');\n } // triggers an extra global event \"ajaxBeforeSend\" that's like \"ajaxSend\" but cancelable\n\n\n function ajaxBeforeSend(xhr, settings) {\n var context = settings.context;\n if (settings.beforeSend.call(context, xhr, settings) === false || triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false) return false;\n triggerGlobal(settings, context, 'ajaxSend', [xhr, settings]);\n }\n\n function ajaxSuccess(data, xhr, settings, deferred) {\n var context = settings.context,\n status = 'success';\n settings.success.call(context, data, status, xhr);\n if (deferred) deferred.resolveWith(context, [data, status, xhr]);\n triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data]);\n ajaxComplete(status, xhr, settings);\n } // type: \"timeout\", \"error\", \"abort\", \"parsererror\"\n\n\n function ajaxError(error, type, xhr, settings, deferred) {\n var context = settings.context;\n settings.error.call(context, xhr, type, error);\n if (deferred) deferred.rejectWith(context, [xhr, type, error]);\n triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error || type]);\n ajaxComplete(type, xhr, settings);\n } // status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\n\n\n function ajaxComplete(status, xhr, settings) {\n var context = settings.context;\n settings.complete.call(context, xhr, status);\n triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings]);\n ajaxStop(settings);\n }\n\n function ajaxDataFilter(data, type, settings) {\n if (settings.dataFilter == empty) return data;\n var context = settings.context;\n return settings.dataFilter.call(context, data, type);\n } // Empty function, used as default callback\n\n\n function empty() {}\n\n $.ajaxJSONP = function (options, deferred) {\n if (!('type' in options)) return $.ajax(options);\n\n var _callbackName = options.jsonpCallback,\n callbackName = ($.isFunction(_callbackName) ? _callbackName() : _callbackName) || 'Zepto' + jsonpID++,\n script = document.createElement('script'),\n originalCallback = window[callbackName],\n responseData,\n abort = function (errorType) {\n $(script).triggerHandler('error', errorType || 'abort');\n },\n xhr = {\n abort: abort\n },\n abortTimeout;\n\n if (deferred) deferred.promise(xhr);\n $(script).on('load error', function (e, errorType) {\n clearTimeout(abortTimeout);\n $(script).off().remove();\n\n if (e.type == 'error' || !responseData) {\n ajaxError(null, errorType || 'error', xhr, options, deferred);\n } else {\n ajaxSuccess(responseData[0], xhr, options, deferred);\n }\n\n window[callbackName] = originalCallback;\n if (responseData && $.isFunction(originalCallback)) originalCallback(responseData[0]);\n originalCallback = responseData = undefined;\n });\n\n if (ajaxBeforeSend(xhr, options) === false) {\n abort('abort');\n return xhr;\n }\n\n window[callbackName] = function () {\n responseData = arguments;\n };\n\n script.src = options.url.replace(/\\?(.+)=\\?/, '?$1=' + callbackName);\n document.head.appendChild(script);\n if (options.timeout > 0) abortTimeout = setTimeout(function () {\n abort('timeout');\n }, options.timeout);\n return xhr;\n };\n\n $.ajaxSettings = {\n // Default type of request\n type: 'GET',\n // Callback that is executed before request\n beforeSend: empty,\n // Callback that is executed if the request succeeds\n success: empty,\n // Callback that is executed the the server drops error\n error: empty,\n // Callback that is executed on request complete (both: error and success)\n complete: empty,\n // The context for the callbacks\n context: null,\n // Whether to trigger \"global\" Ajax events\n global: true,\n // Transport\n xhr: function () {\n return new window.XMLHttpRequest();\n },\n // MIME types mapping\n // IIS returns Javascript as \"application/x-javascript\"\n accepts: {\n script: 'text/javascript, application/javascript, application/x-javascript',\n json: jsonType,\n xml: 'application/xml, text/xml',\n html: htmlType,\n text: 'text/plain'\n },\n // Whether the request is to another domain\n crossDomain: false,\n // Default timeout\n timeout: 0,\n // Whether data should be serialized to string\n processData: true,\n // Whether the browser should be allowed to cache GET responses\n cache: true,\n //Used to handle the raw response data of XMLHttpRequest.\n //This is a pre-filtering function to sanitize the response.\n //The sanitized response should be returned\n dataFilter: empty\n };\n\n function mimeToDataType(mime) {\n if (mime) mime = mime.split(';', 2)[0];\n return mime && (mime == htmlType ? 'html' : mime == jsonType ? 'json' : scriptTypeRE.test(mime) ? 'script' : xmlTypeRE.test(mime) && 'xml') || 'text';\n }\n\n function appendQuery(url, query) {\n if (query == '') return url;\n return (url + '&' + query).replace(/[&?]{1,2}/, '?');\n } // serialize payload and append it to the URL for GET requests\n\n\n function serializeData(options) {\n if (options.processData && options.data && $.type(options.data) != \"string\") options.data = $.param(options.data, options.traditional);\n if (options.data && (!options.type || options.type.toUpperCase() == 'GET' || 'jsonp' == options.dataType)) options.url = appendQuery(options.url, options.data), options.data = undefined;\n }\n\n $.ajax = function (options) {\n var settings = $.extend({}, options || {}),\n deferred = $.Deferred && $.Deferred(),\n urlAnchor,\n hashIndex;\n\n for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key];\n\n ajaxStart(settings);\n\n if (!settings.crossDomain) {\n urlAnchor = document.createElement('a');\n urlAnchor.href = settings.url; // cleans up URL for .href (IE only), see https://github.com/madrobby/zepto/pull/1049\n\n urlAnchor.href = urlAnchor.href;\n settings.crossDomain = originAnchor.protocol + '//' + originAnchor.host !== urlAnchor.protocol + '//' + urlAnchor.host;\n }\n\n if (!settings.url) settings.url = window.location.toString();\n if ((hashIndex = settings.url.indexOf('#')) > -1) settings.url = settings.url.slice(0, hashIndex);\n serializeData(settings);\n var dataType = settings.dataType,\n hasPlaceholder = /\\?.+=\\?/.test(settings.url);\n if (hasPlaceholder) dataType = 'jsonp';\n if (settings.cache === false || (!options || options.cache !== true) && ('script' == dataType || 'jsonp' == dataType)) settings.url = appendQuery(settings.url, '_=' + Date.now());\n\n if ('jsonp' == dataType) {\n if (!hasPlaceholder) settings.url = appendQuery(settings.url, settings.jsonp ? settings.jsonp + '=?' : settings.jsonp === false ? '' : 'callback=?');\n return $.ajaxJSONP(settings, deferred);\n }\n\n var mime = settings.accepts[dataType],\n headers = {},\n setHeader = function (name, value) {\n headers[name.toLowerCase()] = [name, value];\n },\n protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol,\n xhr = settings.xhr(),\n nativeSetHeader = xhr.setRequestHeader,\n abortTimeout;\n\n if (deferred) deferred.promise(xhr);\n if (!settings.crossDomain) setHeader('X-Requested-With', 'XMLHttpRequest');\n setHeader('Accept', mime || '*/*');\n\n if (mime = settings.mimeType || mime) {\n if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0];\n xhr.overrideMimeType && xhr.overrideMimeType(mime);\n }\n\n if (settings.contentType || settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET') setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded');\n if (settings.headers) for (name in settings.headers) setHeader(name, settings.headers[name]);\n xhr.setRequestHeader = setHeader;\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState == 4) {\n xhr.onreadystatechange = empty;\n clearTimeout(abortTimeout);\n var result,\n error = false;\n\n if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304 || xhr.status == 0 && protocol == 'file:') {\n dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'));\n if (xhr.responseType == 'arraybuffer' || xhr.responseType == 'blob') result = xhr.response;else {\n result = xhr.responseText;\n\n try {\n // http://perfectionkills.com/global-eval-what-are-the-options/\n // sanitize response accordingly if data filter callback provided\n result = ajaxDataFilter(result, dataType, settings);\n if (dataType == 'script') (1, eval)(result);else if (dataType == 'xml') result = xhr.responseXML;else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result);\n } catch (e) {\n error = e;\n }\n\n if (error) return ajaxError(error, 'parsererror', xhr, settings, deferred);\n }\n ajaxSuccess(result, xhr, settings, deferred);\n } else {\n ajaxError(xhr.statusText || null, xhr.status ? 'error' : 'abort', xhr, settings, deferred);\n }\n }\n };\n\n if (ajaxBeforeSend(xhr, settings) === false) {\n xhr.abort();\n ajaxError(null, 'abort', xhr, settings, deferred);\n return xhr;\n }\n\n var async = 'async' in settings ? settings.async : true;\n xhr.open(settings.type, settings.url, async, settings.username, settings.password);\n if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name];\n\n for (name in headers) nativeSetHeader.apply(xhr, headers[name]);\n\n if (settings.timeout > 0) abortTimeout = setTimeout(function () {\n xhr.onreadystatechange = empty;\n xhr.abort();\n ajaxError(null, 'timeout', xhr, settings, deferred);\n }, settings.timeout); // avoid sending empty string (#319)\n\n xhr.send(settings.data ? settings.data : null);\n return xhr;\n }; // handle optional data/success arguments\n\n\n function parseArguments(url, data, success, dataType) {\n if ($.isFunction(data)) dataType = success, success = data, data = undefined;\n if (!$.isFunction(success)) dataType = success, success = undefined;\n return {\n url: url,\n data: data,\n success: success,\n dataType: dataType\n };\n }\n\n $.get = function ()\n /* url, data, success, dataType */\n {\n return $.ajax(parseArguments.apply(null, arguments));\n };\n\n $.post = function ()\n /* url, data, success, dataType */\n {\n var options = parseArguments.apply(null, arguments);\n options.type = 'POST';\n return $.ajax(options);\n };\n\n $.getJSON = function ()\n /* url, data, success */\n {\n var options = parseArguments.apply(null, arguments);\n options.dataType = 'json';\n return $.ajax(options);\n };\n\n $.fn.load = function (url, data, success) {\n if (!this.length) return this;\n var self = this,\n parts = url.split(/\\s/),\n selector,\n options = parseArguments(url, data, success),\n callback = options.success;\n if (parts.length > 1) options.url = parts[0], selector = parts[1];\n\n options.success = function (response) {\n self.html(selector ? $('<div>').html(response.replace(rscript, \"\")).find(selector) : response);\n callback && callback.apply(self, arguments);\n };\n\n $.ajax(options);\n return this;\n };\n\n var escape = encodeURIComponent;\n\n function serialize(params, obj, traditional, scope) {\n var type,\n array = $.isArray(obj),\n hash = $.isPlainObject(obj);\n $.each(obj, function (key, value) {\n type = $.type(value);\n if (scope) key = traditional ? scope : scope + '[' + (hash || type == 'object' || type == 'array' ? key : '') + ']'; // handle data in serializeArray() format\n\n if (!scope && array) params.add(value.name, value.value); // recurse into nested objects\n else if (type == \"array\" || !traditional && type == \"object\") serialize(params, value, traditional, key);else params.add(key, value);\n });\n }\n\n $.param = function (obj, traditional) {\n var params = [];\n\n params.add = function (key, value) {\n if ($.isFunction(value)) value = value();\n if (value == null) value = \"\";\n this.push(escape(key) + '=' + escape(value));\n };\n\n serialize(params, obj, traditional);\n return params.join('&').replace(/%20/g, '+');\n };\n})(Zepto);\n\n(function ($) {\n // Create a collection of callbacks to be fired in a sequence, with configurable behaviour\n // Option flags:\n // - once: Callbacks fired at most one time.\n // - memory: Remember the most recent context and arguments\n // - stopOnFalse: Cease iterating over callback list\n // - unique: Permit adding at most one instance of the same callback\n $.Callbacks = function (options) {\n options = $.extend({}, options);\n\n var memory,\n // Last fire value (for non-forgettable lists)\n fired,\n // Flag to know if list was already fired\n firing,\n // Flag to know if list is currently firing\n firingStart,\n // First callback to fire (used internally by add and fireWith)\n firingLength,\n // End of the loop when firing\n firingIndex,\n // Index of currently firing callback (modified by remove if needed)\n list = [],\n // Actual callback list\n stack = !options.once && [],\n // Stack of fire calls for repeatable lists\n fire = function (data) {\n memory = options.memory && data;\n fired = true;\n firingIndex = firingStart || 0;\n firingStart = 0;\n firingLength = list.length;\n firing = true;\n\n for (; list && firingIndex < firingLength; ++firingIndex) {\n if (list[firingIndex].apply(data[0], data[1]) === false && options.stopOnFalse) {\n memory = false;\n break;\n }\n }\n\n firing = false;\n\n if (list) {\n if (stack) stack.length && fire(stack.shift());else if (memory) list.length = 0;else Callbacks.disable();\n }\n },\n Callbacks = {\n add: function () {\n if (list) {\n var start = list.length,\n add = function (args) {\n $.each(args, function (_, arg) {\n if (typeof arg === \"function\") {\n if (!options.unique || !Callbacks.has(arg)) list.push(arg);\n } else if (arg && arg.length && typeof arg !== 'string') add(arg);\n });\n };\n\n add(arguments);\n if (firing) firingLength = list.length;else if (memory) {\n firingStart = start;\n fire(memory);\n }\n }\n\n return this;\n },\n remove: function () {\n if (list) {\n $.each(arguments, function (_, arg) {\n var index;\n\n while ((index = $.inArray(arg, list, index)) > -1) {\n list.splice(index, 1); // Handle firing indexes\n\n if (firing) {\n if (index <= firingLength) --firingLength;\n if (index <= firingIndex) --firingIndex;\n }\n }\n });\n }\n\n return this;\n },\n has: function (fn) {\n return !!(list && (fn ? $.inArray(fn, list) > -1 : list.length));\n },\n empty: function () {\n firingLength = list.length = 0;\n return this;\n },\n disable: function () {\n list = stack = memory = undefined;\n return this;\n },\n disabled: function () {\n return !list;\n },\n lock: function () {\n stack = undefined;\n if (!memory) Callbacks.disable();\n return this;\n },\n locked: function () {\n return !stack;\n },\n fireWith: function (context, args) {\n if (list && (!fired || stack)) {\n args = args || [];\n args = [context, args.slice ? args.slice() : args];\n if (firing) stack.push(args);else fire(args);\n }\n\n return this;\n },\n fire: function () {\n return Callbacks.fireWith(this, arguments);\n },\n fired: function () {\n return !!fired;\n }\n };\n\n return Callbacks;\n };\n})(Zepto);\n\n(function ($) {\n var slice = Array.prototype.slice;\n\n function Deferred(func) {\n var tuples = [// action, add listener, listener list, final state\n [\"resolve\", \"done\", $.Callbacks({\n once: 1,\n memory: 1\n }), \"resolved\"], [\"reject\", \"fail\", $.Callbacks({\n once: 1,\n memory: 1\n }), \"rejected\"], [\"notify\", \"progress\", $.Callbacks({\n memory: 1\n })]],\n state = \"pending\",\n promise = {\n state: function () {\n return state;\n },\n always: function () {\n deferred.done(arguments).fail(arguments);\n return this;\n },\n then: function ()\n /* fnDone [, fnFailed [, fnProgress]] */\n {\n var fns = arguments;\n return Deferred(function (defer) {\n $.each(tuples, function (i, tuple) {\n var fn = $.isFunction(fns[i]) && fns[i];\n deferred[tuple[1]](function () {\n var returned = fn && fn.apply(this, arguments);\n\n if (returned && $.isFunction(returned.promise)) {\n returned.promise().done(defer.resolve).fail(defer.reject).progress(defer.notify);\n } else {\n var context = this === promise ? defer.promise() : this,\n values = fn ? [returned] : arguments;\n defer[tuple[0] + \"With\"](context, values);\n }\n });\n });\n fns = null;\n }).promise();\n },\n promise: function (obj) {\n return obj != null ? $.extend(obj, promise) : promise;\n }\n },\n deferred = {};\n $.each(tuples, function (i, tuple) {\n var list = tuple[2],\n stateString = tuple[3];\n promise[tuple[1]] = list.add;\n\n if (stateString) {\n list.add(function () {\n state = stateString;\n }, tuples[i ^ 1][2].disable, tuples[2][2].lock);\n }\n\n deferred[tuple[0]] = function () {\n deferred[tuple[0] + \"With\"](this === deferred ? promise : this, arguments);\n return this;\n };\n\n deferred[tuple[0] + \"With\"] = list.fireWith;\n });\n promise.promise(deferred);\n if (func) func.call(deferred, deferred);\n return deferred;\n }\n\n $.when = function (sub) {\n var resolveValues = slice.call(arguments),\n len = resolveValues.length,\n i = 0,\n remain = len !== 1 || sub && $.isFunction(sub.promise) ? len : 0,\n deferred = remain === 1 ? sub : Deferred(),\n progressValues,\n progressContexts,\n resolveContexts,\n updateFn = function (i, ctx, val) {\n return function (value) {\n ctx[i] = this;\n val[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\n if (val === progressValues) {\n deferred.notifyWith(ctx, val);\n } else if (! --remain) {\n deferred.resolveWith(ctx, val);\n }\n };\n };\n\n if (len > 1) {\n progressValues = new Array(len);\n progressContexts = new Array(len);\n resolveContexts = new Array(len);\n\n for (; i < len; ++i) {\n if (resolveValues[i] && $.isFunction(resolveValues[i].promise)) {\n resolveValues[i].promise().done(updateFn(i, resolveContexts, resolveValues)).fail(deferred.reject).progress(updateFn(i, progressContexts, progressValues));\n } else {\n --remain;\n }\n }\n }\n\n if (!remain) deferred.resolveWith(resolveContexts, resolveValues);\n return deferred.promise();\n };\n\n $.Deferred = Deferred;\n})(Zepto);\n\n(function ($) {\n var _zid = 1,\n undefined$1,\n slice = Array.prototype.slice,\n isFunction = $.isFunction,\n isString = function (obj) {\n return typeof obj == 'string';\n },\n handlers = {},\n specialEvents = {},\n focusinSupported = ('onfocusin' in window),\n focus = {\n focus: 'focusin',\n blur: 'focusout'\n },\n hover = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n };\n\n specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents';\n\n function zid(element) {\n return element._zid || (element._zid = _zid++);\n }\n\n function findHandlers(element, event, fn, selector) {\n event = parse(event);\n if (event.ns) var matcher = matcherFor(event.ns);\n return (handlers[zid(element)] || []).filter(function (handler) {\n return handler && (!event.e || handler.e == event.e) && (!event.ns || matcher.test(handler.ns)) && (!fn || zid(handler.fn) === zid(fn)) && (!selector || handler.sel == selector);\n });\n }\n\n function parse(event) {\n var parts = ('' + event).split('.');\n return {\n e: parts[0],\n ns: parts.slice(1).sort().join(' ')\n };\n }\n\n function matcherFor(ns) {\n return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)');\n }\n\n function eventCapture(handler, captureSetting) {\n return handler.del && !focusinSupported && handler.e in focus || !!captureSetting;\n }\n\n function realEvent(type) {\n return hover[type] || focusinSupported && focus[type] || type;\n }\n\n function add(element, events, fn, data, selector, delegator, capture) {\n var id = zid(element),\n set = handlers[id] || (handlers[id] = []);\n events.split(/\\s/).forEach(function (event) {\n if (event == 'ready') return $(document).ready(fn);\n var handler = parse(event);\n handler.fn = fn;\n handler.sel = selector; // emulate mouseenter, mouseleave\n\n if (handler.e in hover) fn = function (e) {\n var related = e.relatedTarget;\n if (!related || related !== this && !$.contains(this, related)) return handler.fn.apply(this, arguments);\n };\n handler.del = delegator;\n var callback = delegator || fn;\n\n handler.proxy = function (e) {\n e = compatible(e);\n if (e.isImmediatePropagationStopped()) return;\n e.data = data;\n var result = callback.apply(element, e._args == undefined$1 ? [e] : [e].concat(e._args));\n if (result === false) e.preventDefault(), e.stopPropagation();\n return result;\n };\n\n handler.i = set.length;\n set.push(handler);\n if ('addEventListener' in element) element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture));\n });\n }\n\n function remove(element, events, fn, selector, capture) {\n var id = zid(element);\n (events || '').split(/\\s/).forEach(function (event) {\n findHandlers(element, event, fn, selector).forEach(function (handler) {\n delete handlers[id][handler.i];\n if ('removeEventListener' in element) element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture));\n });\n });\n }\n\n $.event = {\n add: add,\n remove: remove\n };\n\n $.proxy = function (fn, context) {\n var args = 2 in arguments && slice.call(arguments, 2);\n\n if (isFunction(fn)) {\n var proxyFn = function () {\n return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments);\n };\n\n proxyFn._zid = zid(fn);\n return proxyFn;\n } else if (isString(context)) {\n if (args) {\n args.unshift(fn[context], fn);\n return $.proxy.apply(null, args);\n } else {\n return $.proxy(fn[context], fn);\n }\n } else {\n throw new TypeError(\"expected function\");\n }\n };\n\n $.fn.bind = function (event, data, callback) {\n return this.on(event, data, callback);\n };\n\n $.fn.unbind = function (event, callback) {\n return this.off(event, callback);\n };\n\n $.fn.one = function (event, selector, data, callback) {\n return this.on(event, selector, data, callback, 1);\n };\n\n var returnTrue = function () {\n return true;\n },\n returnFalse = function () {\n return false;\n },\n ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,\n eventMethods = {\n preventDefault: 'isDefaultPrevented',\n stopImmediatePropagation: 'isImmediatePropagationStopped',\n stopPropagation: 'isPropagationStopped'\n };\n\n function compatible(event, source) {\n if (source || !event.isDefaultPrevented) {\n source || (source = event);\n $.each(eventMethods, function (name, predicate) {\n var sourceMethod = source[name];\n\n event[name] = function () {\n this[predicate] = returnTrue;\n return sourceMethod && sourceMethod.apply(source, arguments);\n };\n\n event[predicate] = returnFalse;\n });\n event.timeStamp || (event.timeStamp = Date.now());\n if (source.defaultPrevented !== undefined$1 ? source.defaultPrevented : 'returnValue' in source ? source.returnValue === false : source.getPreventDefault && source.getPreventDefault()) event.isDefaultPrevented = returnTrue;\n }\n\n return event;\n }\n\n function createProxy(event) {\n var key,\n proxy = {\n originalEvent: event\n };\n\n for (key in event) if (!ignoreProperties.test(key) && event[key] !== undefined$1) proxy[key] = event[key];\n\n return compatible(proxy, event);\n }\n\n $.fn.delegate = function (selector, event, callback) {\n return this.on(event, selector, callback);\n };\n\n $.fn.undelegate = function (selector, event, callback) {\n return this.off(event, selector, callback);\n };\n\n $.fn.live = function (event, callback) {\n $(document.body).delegate(this.selector, event, callback);\n return this;\n };\n\n $.fn.die = function (event, callback) {\n $(document.body).undelegate(this.selector, event, callback);\n return this;\n };\n\n $.fn.on = function (event, selector, data, callback, one) {\n var autoRemove,\n delegator,\n $this = this;\n\n if (event && !isString(event)) {\n $.each(event, function (type, fn) {\n $this.on(type, selector, data, fn, one);\n });\n return $this;\n }\n\n if (!isString(selector) && !isFunction(callback) && callback !== false) callback = data, data = selector, selector = undefined$1;\n if (callback === undefined$1 || data === false) callback = data, data = undefined$1;\n if (callback === false) callback = returnFalse;\n return $this.each(function (_, element) {\n if (one) autoRemove = function (e) {\n remove(element, e.type, callback);\n return callback.apply(this, arguments);\n };\n if (selector) delegator = function (e) {\n var evt,\n match = $(e.target).closest(selector, element).get(0);\n\n if (match && match !== element) {\n evt = $.extend(createProxy(e), {\n currentTarget: match,\n liveFired: element\n });\n return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)));\n }\n };\n add(element, event, callback, data, selector, delegator || autoRemove);\n });\n };\n\n $.fn.off = function (event, selector, callback) {\n var $this = this;\n\n if (event && !isString(event)) {\n $.each(event, function (type, fn) {\n $this.off(type, selector, fn);\n });\n return $this;\n }\n\n if (!isString(selector) && !isFunction(callback) && callback !== false) callback = selector, selector = undefined$1;\n if (callback === false) callback = returnFalse;\n return $this.each(function () {\n remove(this, event, callback, selector);\n });\n };\n\n $.fn.trigger = function (event, args) {\n event = isString(event) || $.isPlainObject(event) ? $.Event(event) : compatible(event);\n event._args = args;\n return this.each(function () {\n // handle focus(), blur() by calling them directly\n if (event.type in focus && typeof this[event.type] == \"function\") this[event.type](); // items in the collection might not be DOM elements\n else if ('dispatchEvent' in this) this.dispatchEvent(event);else $(this).triggerHandler(event, args);\n });\n }; // triggers event handlers on current element just as if an event occurred,\n // doesn't trigger an actual event, doesn't bubble\n\n\n $.fn.triggerHandler = function (event, args) {\n var e, result;\n this.each(function (i, element) {\n e = createProxy(isString(event) ? $.Event(event) : event);\n e._args = args;\n e.target = element;\n $.each(findHandlers(element, event.type || event), function (i, handler) {\n result = handler.proxy(e);\n if (e.isImmediatePropagationStopped()) return false;\n });\n });\n return result;\n } // shortcut methods for `.bind(event, fn)` for each event type\n ;\n\n ('focusin focusout focus blur load resize scroll unload click dblclick ' + 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave ' + 'change select keydown keypress keyup error').split(' ').forEach(function (event) {\n $.fn[event] = function (callback) {\n return 0 in arguments ? this.bind(event, callback) : this.trigger(event);\n };\n });\n\n $.Event = function (type, props) {\n if (!isString(type)) props = type, type = props.type;\n var event = document.createEvent(specialEvents[type] || 'Events'),\n bubbles = true;\n if (props) for (var name in props) name == 'bubbles' ? bubbles = !!props[name] : event[name] = props[name];\n event.initEvent(type, bubbles, true);\n return compatible(event);\n };\n})(Zepto);\n\n(function () {\n // getComputedStyle shouldn't freak out when called\n // without a valid element as argument\n try {\n getComputedStyle(undefined);\n } catch (e) {\n var nativeGetComputedStyle = getComputedStyle;\n\n window.getComputedStyle = function (element, pseudoElement) {\n try {\n return nativeGetComputedStyle(element, pseudoElement);\n } catch (e) {\n return null;\n }\n };\n }\n})();\n\n(function ($) {\n var zepto = $.zepto,\n oldQsa = zepto.qsa,\n oldMatches = zepto.matches;\n\n function visible(elem) {\n elem = $(elem);\n return !!(elem.width() || elem.height()) && elem.css(\"display\") !== \"none\";\n } // Implements a subset from:\n // http://api.jquery.com/category/selectors/jquery-selector-extensions/\n //\n // Each filter function receives the current index, all nodes in the\n // considered set, and a value if there were parentheses. The value\n // of `this` is the node currently being considered. The function returns the\n // resulting node(s), null, or undefined.\n //\n // Complex selectors are not supported:\n // li:has(label:contains(\"foo\")) + li:has(label:contains(\"bar\"))\n // ul.inner:first > li\n\n\n var filters = $.expr[':'] = {\n visible: function () {\n if (visible(this)) return this;\n },\n hidden: function () {\n if (!visible(this)) return this;\n },\n selected: function () {\n if (this.selected) return this;\n },\n checked: function () {\n if (this.checked) return this;\n },\n parent: function () {\n return this.parentNode;\n },\n first: function (idx) {\n if (idx === 0) return this;\n },\n last: function (idx, nodes) {\n if (idx === nodes.length - 1) return this;\n },\n eq: function (idx, _, value) {\n if (idx === value) return this;\n },\n contains: function (idx, _, text) {\n if ($(this).text().indexOf(text) > -1) return this;\n },\n has: function (idx, _, sel) {\n if (zepto.qsa(this, sel).length) return this;\n }\n };\n var filterRe = new RegExp('(.*):(\\\\w+)(?:\\\\(([^)]+)\\\\))?$\\\\s*'),\n childRe = /^\\s*>/,\n classTag = 'Zepto' + +new Date();\n\n function process(sel, fn) {\n // quote the hash in `a[href^=#]` expression\n sel = sel.replace(/=#\\]/g, '=\"#\"]');\n var filter,\n arg,\n match = filterRe.exec(sel);\n\n if (match && match[2] in filters) {\n filter = filters[match[2]], arg = match[3];\n sel = match[1];\n\n if (arg) {\n var num = Number(arg);\n if (isNaN(num)) arg = arg.replace(/^[\"']|[\"']$/g, '');else arg = num;\n }\n }\n\n return fn(sel, filter, arg);\n }\n\n zepto.qsa = function (node, selector) {\n return process(selector, function (sel, filter, arg) {\n try {\n var taggedParent;\n if (!sel && filter) sel = '*';else if (childRe.test(sel)) // support \"> *\" child queries by tagging the parent node with a\n // unique class and prepending that classname onto the selector\n taggedParent = $(node).addClass(classTag), sel = '.' + classTag + ' ' + sel;\n var nodes = oldQsa(node, sel);\n } catch (e) {\n console.error('error performing selector: %o', selector);\n throw e;\n } finally {\n if (taggedParent) taggedParent.removeClass(classTag);\n }\n\n return !filter ? nodes : zepto.uniq($.map(nodes, function (n, i) {\n return filter.call(n, i, nodes, arg);\n }));\n });\n };\n\n zepto.matches = function (node, selector) {\n return process(selector, function (sel, filter, arg) {\n return (!sel || oldMatches(node, sel)) && (!filter || filter.call(node, null, arg) === node);\n });\n };\n})(Zepto);\n\nvar zepto = Zepto;\n\n/* eslint-disable no-useless-escape */\n// The order of the following arrays is important, be careful if you change it.\nvar BROWSER_DATA = [{\n name: 'Chromium',\n group: 'Chrome',\n identifier: 'Chromium/([0-9\\.]*)'\n}, {\n name: 'Chrome Mobile',\n group: 'Chrome',\n identifier: 'Chrome/([0-9\\.]*) Mobile',\n versionIdentifier: 'Chrome/([0-9\\.]*)'\n}, {\n name: 'Chrome',\n group: 'Chrome',\n identifier: 'Chrome/([0-9\\.]*)'\n}, {\n name: 'Chrome for iOS',\n group: 'Chrome',\n identifier: 'CriOS/([0-9\\.]*)'\n}, {\n name: 'Android Browser',\n group: 'Chrome',\n identifier: 'CrMo/([0-9\\.]*)'\n}, {\n name: 'Firefox',\n group: 'Firefox',\n identifier: 'Firefox/([0-9\\.]*)'\n}, {\n name: 'Opera Mini',\n group: 'Opera',\n identifier: 'Opera Mini/([0-9\\.]*)'\n}, {\n name: 'Opera',\n group: 'Opera',\n identifier: 'Opera ([0-9\\.]*)'\n}, {\n name: 'Opera',\n group: 'Opera',\n identifier: 'Opera/([0-9\\.]*)',\n versionIdentifier: 'Version/([0-9\\.]*)'\n}, {\n name: 'IEMobile',\n group: 'Explorer',\n identifier: 'IEMobile/([0-9\\.]*)'\n}, {\n name: 'Internet Explorer',\n group: 'Explorer',\n identifier: 'MSIE ([a-zA-Z0-9\\.]*)'\n}, {\n name: 'Internet Explorer',\n group: 'Explorer',\n identifier: 'Trident/([0-9\\.]*)',\n versionIdentifier: 'rv:([0-9\\.]*)'\n}, {\n name: 'Spartan',\n group: 'Spartan',\n identifier: 'Edge/([0-9\\.]*)',\n versionIdentifier: 'Edge/([0-9\\.]*)'\n}, {\n name: 'Safari',\n group: 'Safari',\n identifier: 'Safari/([0-9\\.]*)',\n versionIdentifier: 'Version/([0-9\\.]*)'\n}];\n\n/* eslint-disable no-useless-escape */\n// The order of the following arrays is important, be careful if you change it.\nvar OS_DATA = [{\n name: 'Windows 2000',\n group: 'Windows',\n identifier: 'Windows NT 5.0',\n version: '5.0'\n}, {\n name: 'Windows XP',\n group: 'Windows',\n identifier: 'Windows NT 5.1',\n version: '5.1'\n}, {\n name: 'Windows Vista',\n group: 'Windows',\n identifier: 'Windows NT 6.0',\n version: '6.0'\n}, {\n name: 'Windows 7',\n group: 'Windows',\n identifier: 'Windows NT 6.1',\n version: '7.0'\n}, {\n name: 'Windows 8',\n group: 'Windows',\n identifier: 'Windows NT 6.2',\n version: '8.0'\n}, {\n name: 'Windows 8.1',\n group: 'Windows',\n identifier: 'Windows NT 6.3',\n version: '8.1'\n}, {\n name: 'Windows 10',\n group: 'Windows',\n identifier: 'Windows NT 10.0',\n version: '10.0'\n}, {\n name: 'Windows Phone',\n group: 'Windows Phone',\n identifier: 'Windows Phone ([0-9\\.]*)'\n}, {\n name: 'Windows Phone',\n group: 'Windows Phone',\n identifier: 'Windows Phone OS ([0-9\\.]*)'\n}, {\n name: 'Windows',\n group: 'Windows',\n identifier: 'Windows'\n}, {\n name: 'Chrome OS',\n group: 'Chrome OS',\n identifier: 'CrOS'\n}, {\n name: 'Android',\n group: 'Android',\n identifier: 'Android',\n versionIdentifier: 'Android ([a-zA-Z0-9\\.-]*)'\n}, {\n name: 'iPad',\n group: 'iOS',\n identifier: 'iPad',\n versionIdentifier: 'OS ([0-9_]*)',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'iPod',\n group: 'iOS',\n identifier: 'iPod',\n versionIdentifier: 'OS ([0-9_]*)',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'iPhone',\n group: 'iOS',\n identifier: 'iPhone OS',\n versionIdentifier: 'OS ([0-9_]*)',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS X High Sierra',\n group: 'Mac OS',\n identifier: 'Mac OS X (10([_|\\.])13([0-9_\\.]*))',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS X Sierra',\n group: 'Mac OS',\n identifier: 'Mac OS X (10([_|\\.])12([0-9_\\.]*))',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS X El Capitan',\n group: 'Mac OS',\n identifier: 'Mac OS X (10([_|\\.])11([0-9_\\.]*))',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS X Yosemite',\n group: 'Mac OS',\n identifier: 'Mac OS X (10([_|\\.])10([0-9_\\.]*))',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS X Mavericks',\n group: 'Mac OS',\n identifier: 'Mac OS X (10([_|\\.])9([0-9_\\.]*))',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS X Mountain Lion',\n group: 'Mac OS',\n identifier: 'Mac OS X (10([_|\\.])8([0-9_\\.]*))',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS X Lion',\n group: 'Mac OS',\n identifier: 'Mac OS X (10([_|\\.])7([0-9_\\.]*))',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS X Snow Leopard',\n group: 'Mac OS',\n identifier: 'Mac OS X (10([_|\\.])6([0-9_\\.]*))',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS X Leopard',\n group: 'Mac OS',\n identifier: 'Mac OS X (10([_|\\.])5([0-9_\\.]*))',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS X Tiger',\n group: 'Mac OS',\n identifier: 'Mac OS X (10([_|\\.])4([0-9_\\.]*))',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS X Panther',\n group: 'Mac OS',\n identifier: 'Mac OS X (10([_|\\.])3([0-9_\\.]*))',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS X Jaguar',\n group: 'Mac OS',\n identifier: 'Mac OS X (10([_|\\.])2([0-9_\\.]*))',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS X Puma',\n group: 'Mac OS',\n identifier: 'Mac OS X (10([_|\\.])1([0-9_\\.]*))',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS X Cheetah',\n group: 'Mac OS',\n identifier: 'Mac OS X (10([_|\\.])0([0-9_\\.]*))',\n versionSeparator: '[_|\\.]'\n}, {\n name: 'Mac OS',\n group: 'Mac OS',\n identifier: 'Mac OS'\n}, {\n name: 'Ubuntu',\n group: 'Linux',\n identifier: 'Ubuntu',\n versionIdentifier: 'Ubuntu/([0-9\\.]*)'\n}, {\n name: 'Debian',\n group: 'Linux',\n identifier: 'Debian'\n}, {\n name: 'Gentoo',\n group: 'Linux',\n identifier: 'Gentoo'\n}, {\n name: 'Linux',\n group: 'Linux',\n identifier: 'Linux'\n}, {\n name: 'BlackBerry',\n group: 'BlackBerry',\n identifier: 'BlackBerry'\n}];\n\nvar Browser = {};\n\nvar hasLocalstorage = function hasLocalstorage() {\n try {\n localStorage.setItem('clappr', 'clappr');\n localStorage.removeItem('clappr');\n return true;\n } catch (e) {\n return false;\n }\n};\n\nvar hasFlash = function hasFlash() {\n try {\n var fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');\n return !!fo;\n } catch (e) {\n return !!(navigator.mimeTypes && navigator.mimeTypes['application/x-shockwave-flash'] !== undefined && navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin);\n }\n};\n\nvar getBrowserInfo = function getBrowserInfo(ua) {\n var parts = ua.match(/\\b(playstation 4|nx|opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [],\n extra;\n\n if (/trident/i.test(parts[1])) {\n extra = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n return {\n name: 'IE',\n version: parseInt(extra[1] || '')\n };\n } else if (parts[1] === 'Chrome') {\n extra = ua.match(/\\bOPR\\/(\\d+)/);\n if (extra != null) return {\n name: 'Opera',\n version: parseInt(extra[1])\n };\n extra = ua.match(/\\bEdge\\/(\\d+)/);\n if (extra != null) return {\n name: 'Edge',\n version: parseInt(extra[1])\n };\n } else if (/android/i.test(ua) && (extra = ua.match(/version\\/(\\d+)/i))) {\n parts.splice(1, 1, 'Android WebView');\n parts.splice(2, 1, extra[1]);\n }\n\n parts = parts[2] ? [parts[1], parts[2]] : [navigator.appName, navigator.appVersion, '-?'];\n return {\n name: parts[0],\n version: parseInt(parts[1])\n };\n}; // Get browser data\n\nvar getBrowserData = function getBrowserData() {\n var browserObject = {};\n var userAgent = Browser.userAgent.toLowerCase(); // Check browser type\n\n var _iterator = _createForOfIteratorHelper(BROWSER_DATA),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var browser = _step.value;\n var browserRegExp = new RegExp(browser.identifier.toLowerCase());\n var browserRegExpResult = browserRegExp.exec(userAgent);\n\n if (browserRegExpResult != null && browserRegExpResult[1]) {\n browserObject.name = browser.name;\n browserObject.group = browser.group; // Check version\n\n if (browser.versionIdentifier) {\n var versionRegExp = new RegExp(browser.versionIdentifier.toLowerCase());\n var versionRegExpResult = versionRegExp.exec(userAgent);\n if (versionRegExpResult != null && versionRegExpResult[1]) setBrowserVersion(versionRegExpResult[1], browserObject);\n } else {\n setBrowserVersion(browserRegExpResult[1], browserObject);\n }\n\n break;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return browserObject;\n}; // Set browser version\n\nvar setBrowserVersion = function setBrowserVersion(version, browserObject) {\n var splitVersion = version.split('.', 2);\n browserObject.fullVersion = version; // Major version\n\n if (splitVersion[0]) browserObject.majorVersion = parseInt(splitVersion[0]); // Minor version\n\n if (splitVersion[1]) browserObject.minorVersion = parseInt(splitVersion[1]);\n}; // Get OS data\n\n\nvar getOsData = function getOsData() {\n var osObject = {};\n var userAgent = Browser.userAgent.toLowerCase(); // Check browser type\n\n var _iterator2 = _createForOfIteratorHelper(OS_DATA),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var os = _step2.value;\n var osRegExp = new RegExp(os.identifier.toLowerCase());\n var osRegExpResult = osRegExp.exec(userAgent);\n\n if (osRegExpResult != null) {\n osObject.name = os.name;\n osObject.group = os.group; // Version defined\n\n if (os.version) {\n setOsVersion(os.version, os.versionSeparator ? os.versionSeparator : '.', osObject); // Version detected\n } else if (osRegExpResult[1]) {\n setOsVersion(osRegExpResult[1], os.versionSeparator ? os.versionSeparator : '.', osObject); // Version identifier\n } else if (os.versionIdentifier) {\n var versionRegExp = new RegExp(os.versionIdentifier.toLowerCase());\n var versionRegExpResult = versionRegExp.exec(userAgent);\n if (versionRegExpResult != null && versionRegExpResult[1]) setOsVersion(versionRegExpResult[1], os.versionSeparator ? os.versionSeparator : '.', osObject);\n }\n\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return osObject;\n}; // Set OS version\n\nvar setOsVersion = function setOsVersion(version, separator, osObject) {\n var finalSeparator = separator.substr(0, 1) == '[' ? new RegExp(separator, 'g') : separator;\n var splitVersion = version.split(finalSeparator, 2);\n if (separator != '.') version = version.replace(new RegExp(separator, 'g'), '.');\n osObject.fullVersion = version; // Major version\n\n if (splitVersion && splitVersion[0]) osObject.majorVersion = parseInt(splitVersion[0]); // Minor version\n\n if (splitVersion && splitVersion[1]) osObject.minorVersion = parseInt(splitVersion[1]);\n}; // Set viewport size\n\n\nvar getViewportSize = function getViewportSize() {\n var viewportObject = {};\n viewportObject.width = zepto(window).width();\n viewportObject.height = zepto(window).height();\n return viewportObject;\n}; // Set viewport orientation\n\nvar setViewportOrientation = function setViewportOrientation() {\n switch (window.orientation) {\n case -90:\n case 90:\n Browser.viewport.orientation = 'landscape';\n break;\n\n default:\n Browser.viewport.orientation = 'portrait';\n break;\n }\n};\n\nvar getDevice = function getDevice(ua) {\n var platformRegExp = /\\((iP(?:hone|ad|od))?(?:[^;]*; ){0,2}([^)]+(?=\\)))/;\n var matches = platformRegExp.exec(ua);\n var device = matches && (matches[1] || matches[2]) || '';\n return device;\n};\nvar browserInfo = getBrowserInfo(navigator.userAgent);\nBrowser.isEdge = /edge/i.test(navigator.userAgent);\nBrowser.isChrome = /chrome|CriOS/i.test(navigator.userAgent) && !Browser.isEdge;\nBrowser.isSafari = /safari/i.test(navigator.userAgent) && !Browser.isChrome && !Browser.isEdge;\nBrowser.isFirefox = /firefox/i.test(navigator.userAgent);\nBrowser.isLegacyIE = !!window.ActiveXObject;\nBrowser.isIE = Browser.isLegacyIE || /trident.*rv:1\\d/i.test(navigator.userAgent);\nBrowser.isIE11 = /trident.*rv:11/i.test(navigator.userAgent);\nBrowser.isChromecast = Browser.isChrome && /CrKey/i.test(navigator.userAgent);\nBrowser.isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|Windows Phone|IEMobile|Mobile Safari|Opera Mini/i.test(navigator.userAgent);\nBrowser.isiOS = /iPad|iPhone|iPod/i.test(navigator.userAgent);\nBrowser.isAndroid = /Android/i.test(navigator.userAgent);\nBrowser.isWindowsPhone = /Windows Phone/i.test(navigator.userAgent);\nBrowser.isWin8App = /MSAppHost/i.test(navigator.userAgent);\nBrowser.isWiiU = /WiiU/i.test(navigator.userAgent);\nBrowser.isPS4 = /PlayStation 4/i.test(navigator.userAgent);\nBrowser.hasLocalstorage = hasLocalstorage();\nBrowser.hasFlash = hasFlash();\n/**\n* @deprecated\n* This parameter currently exists for retrocompatibility reasons.\n* Use Browser.data.name instead.\n*/\n\nBrowser.name = browserInfo.name;\n/**\n* @deprecated\n* This parameter currently exists for retrocompatibility reasons.\n* Use Browser.data.fullVersion instead.\n*/\n\nBrowser.version = browserInfo.version;\nBrowser.userAgent = navigator.userAgent;\nBrowser.data = getBrowserData();\nBrowser.os = getOsData();\nBrowser.viewport = getViewportSize();\nBrowser.device = getDevice(Browser.userAgent);\ntypeof window.orientation !== 'undefined' && setViewportOrientation();\n\nvar idsCounter = {};\nvar videoStack = [];\nvar requestAnimationFrame = (window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (fn) {\n window.setTimeout(fn, 1000 / 60);\n}).bind(window);\nvar cancelAnimationFrame = (window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout).bind(window);\nfunction assign(obj, source) {\n if (source) {\n for (var prop in source) {\n var propDescriptor = Object.getOwnPropertyDescriptor(source, prop);\n propDescriptor ? Object.defineProperty(obj, prop, propDescriptor) : obj[prop] = source[prop];\n }\n }\n\n return obj;\n}\nfunction extend(parent, properties) {\n var Surrogate = /*#__PURE__*/function (_parent) {\n _inherits(Surrogate, _parent);\n\n var _super = _createSuper(Surrogate);\n\n function Surrogate() {\n var _this;\n\n _classCallCheck(this, Surrogate);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n if (properties.initialize) properties.initialize.apply(_assertThisInitialized(_this), args);\n return _this;\n }\n\n return Surrogate;\n }(parent);\n\n assign(Surrogate.prototype, properties);\n return Surrogate;\n}\nfunction formatTime(time, paddedHours) {\n if (!isFinite(time)) return '--:--';\n time = time * 1000;\n time = parseInt(time / 1000);\n var seconds = time % 60;\n time = parseInt(time / 60);\n var minutes = time % 60;\n time = parseInt(time / 60);\n var hours = time % 24;\n var days = parseInt(time / 24);\n var out = '';\n\n if (days && days > 0) {\n out += days + ':';\n if (hours < 1) out += '00:';\n }\n\n if (hours && hours > 0 || paddedHours) out += ('0' + hours).slice(-2) + ':';\n out += ('0' + minutes).slice(-2) + ':';\n out += ('0' + seconds).slice(-2);\n return out.trim();\n}\nvar Fullscreen = {\n fullscreenElement: function fullscreenElement() {\n return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;\n },\n requestFullscreen: function requestFullscreen(el) {\n if (el.requestFullscreen) {\n return el.requestFullscreen();\n } else if (el.webkitRequestFullscreen) {\n if (typeof el.then === 'function') return el.webkitRequestFullscreen();\n el.webkitRequestFullscreen();\n } else if (el.mozRequestFullScreen) {\n return el.mozRequestFullScreen();\n } else if (el.msRequestFullscreen) {\n return el.msRequestFullscreen();\n } else if (el.querySelector && el.querySelector('video') && el.querySelector('video').webkitEnterFullScreen) {\n el.querySelector('video').webkitEnterFullScreen();\n } else if (el.webkitEnterFullScreen) {\n el.webkitEnterFullScreen();\n }\n },\n cancelFullscreen: function cancelFullscreen() {\n var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;\n if (el.exitFullscreen) el.exitFullscreen();else if (el.webkitCancelFullScreen) el.webkitCancelFullScreen();else if (el.webkitExitFullscreen) el.webkitExitFullscreen();else if (el.mozCancelFullScreen) el.mozCancelFullScreen();else if (el.msExitFullscreen) el.msExitFullscreen();\n },\n fullscreenEnabled: function fullscreenEnabled() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n};\nvar Config = /*#__PURE__*/function () {\n function Config() {\n _classCallCheck(this, Config);\n }\n\n _createClass(Config, null, [{\n key: \"_defaultConfig\",\n value: function _defaultConfig() {\n return {\n volume: {\n value: 100,\n parse: parseInt\n }\n };\n }\n }, {\n key: \"_defaultValueFor\",\n value: function _defaultValueFor(key) {\n try {\n return this._defaultConfig()[key].parse(this._defaultConfig()[key].value);\n } catch (e) {\n return undefined;\n }\n }\n }, {\n key: \"_createKeyspace\",\n value: function _createKeyspace(key) {\n return \"clappr.\".concat(document.domain, \".\").concat(key);\n }\n }, {\n key: \"restore\",\n value: function restore(key) {\n if (Browser.hasLocalstorage && localStorage[this._createKeyspace(key)]) return this._defaultConfig()[key].parse(localStorage[this._createKeyspace(key)]);\n return this._defaultValueFor(key);\n }\n }, {\n key: \"persist\",\n value: function persist(key, value) {\n if (Browser.hasLocalstorage) {\n try {\n localStorage[this._createKeyspace(key)] = value;\n return true;\n } catch (e) {\n return false;\n }\n }\n }\n }]);\n\n return Config;\n}();\nvar QueryString = /*#__PURE__*/function () {\n function QueryString() {\n _classCallCheck(this, QueryString);\n }\n\n _createClass(QueryString, null, [{\n key: \"parse\",\n value: function parse(paramsString) {\n var match;\n\n var pl = /\\+/g,\n // Regex for replacing addition symbol with a space\n search = /([^&=]+)=?([^&]*)/g,\n decode = function decode(s) {\n return decodeURIComponent(s.replace(pl, ' '));\n },\n params = {};\n\n while (match = search.exec(paramsString)) {\n // eslint-disable-line no-cond-assign\n params[decode(match[1]).toLowerCase()] = decode(match[2]);\n }\n\n return params;\n }\n }, {\n key: \"params\",\n get: function get() {\n var query = window.location.search.substring(1);\n\n if (query !== this.query) {\n this._urlParams = this.parse(query);\n this.query = query;\n }\n\n return this._urlParams;\n }\n }, {\n key: \"hashParams\",\n get: function get() {\n var hash = window.location.hash.substring(1);\n\n if (hash !== this.hash) {\n this._hashParams = this.parse(hash);\n this.hash = hash;\n }\n\n return this._hashParams;\n }\n }]);\n\n return QueryString;\n}();\nfunction seekStringToSeconds() {\n var paramName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 't';\n var seconds = 0;\n var seekString = QueryString.params[paramName] || QueryString.hashParams[paramName] || '';\n var parts = seekString.match(/[0-9]+[hms]+/g) || [];\n\n if (parts.length > 0) {\n var factor = {\n 'h': 3600,\n 'm': 60,\n 's': 1\n };\n parts.forEach(function (el) {\n if (el) {\n var suffix = el[el.length - 1];\n var time = parseInt(el.slice(0, el.length - 1), 10);\n seconds += time * factor[suffix];\n }\n });\n } else if (seekString) {\n seconds = parseInt(seekString, 10);\n }\n\n return seconds;\n}\nfunction uniqueId(prefix) {\n idsCounter[prefix] || (idsCounter[prefix] = 0);\n var id = ++idsCounter[prefix];\n return prefix + id;\n}\nfunction isNumber(value) {\n return value - parseFloat(value) + 1 >= 0;\n}\nfunction currentScriptUrl() {\n var scripts = document.getElementsByTagName('script');\n return scripts.length ? scripts[scripts.length - 1].src : '';\n}\nfunction getBrowserLanguage() {\n return window.navigator && window.navigator.language;\n}\nfunction now() {\n if (window.performance && window.performance.now) return performance.now();\n return Date.now();\n} // remove the item from the array if it exists in the array\n\nfunction removeArrayItem(arr, item) {\n var i = arr.indexOf(item);\n if (i >= 0) arr.splice(i, 1);\n} // find an item regardless of its letter case\n\nfunction listContainsIgnoreCase(item, items) {\n if (item === undefined || items === undefined) return false;\n return items.find(function (itemEach) {\n return item.toLowerCase() === itemEach.toLowerCase();\n }) !== undefined;\n} // https://github.com/video-dev/can-autoplay\n\nfunction canAutoPlayMedia(cb, options) {\n options = Object.assign({\n inline: false,\n muted: false,\n timeout: 250,\n type: 'video',\n source: Media.mp4,\n element: null\n }, options);\n var element = options.element ? options.element : document.createElement(options.type);\n element.muted = options.muted;\n if (options.muted === true) element.setAttribute('muted', 'muted');\n if (options.inline === true) element.setAttribute('playsinline', 'playsinline');\n element.src = options.source;\n var promise = element.play();\n var timeoutId = setTimeout(function () {\n setResult(false, new Error(\"Timeout \".concat(options.timeout, \" ms has been reached\")));\n }, options.timeout);\n\n var setResult = function setResult(result) {\n var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n clearTimeout(timeoutId);\n cb(result, error);\n };\n\n if (promise !== undefined) {\n promise.then(function () {\n return setResult(true);\n })[\"catch\"](function (err) {\n return setResult(false, err);\n });\n } else {\n setResult(true);\n }\n} // Simple element factory with video recycle feature.\n\nvar DomRecycler = /*#__PURE__*/function () {\n function DomRecycler() {\n _classCallCheck(this, DomRecycler);\n }\n\n _createClass(DomRecycler, null, [{\n key: \"configure\",\n value: function configure(options) {\n this.options = zepto.extend(true, this.options, options);\n }\n }, {\n key: \"create\",\n value: function create(name) {\n if (this.options.recycleVideo && name === 'video' && videoStack.length > 0) return videoStack.shift();\n return document.createElement(name);\n }\n }, {\n key: \"garbage\",\n value: function garbage(el) {\n if (!this.options.recycleVideo || el.tagName.toUpperCase() !== 'VIDEO') return;\n zepto(el).children().remove();\n Object.values(el.attributes).forEach(function (attr) {\n return el.removeAttribute(attr.name);\n });\n videoStack.push(el);\n }\n }]);\n\n return DomRecycler;\n}();\nDomRecycler.options = {\n recycleVideo: false\n};\nvar DoubleEventHandler = /*#__PURE__*/function () {\n function DoubleEventHandler() {\n var delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 500;\n\n _classCallCheck(this, DoubleEventHandler);\n\n this.delay = delay;\n this.lastTime = 0;\n }\n\n _createClass(DoubleEventHandler, [{\n key: \"handle\",\n value: function handle(event, cb) {\n var prevented = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n // Based on http://jsfiddle.net/brettwp/J4djY/\n var currentTime = new Date().getTime();\n var diffTime = currentTime - this.lastTime;\n\n if (diffTime < this.delay && diffTime > 0) {\n cb();\n prevented && event.preventDefault();\n }\n\n this.lastTime = currentTime;\n }\n }]);\n\n return DoubleEventHandler;\n}();\nvar Utils = {\n Config: Config,\n Fullscreen: Fullscreen,\n QueryString: QueryString,\n DomRecycler: DomRecycler,\n assign: assign,\n extend: extend,\n formatTime: formatTime,\n seekStringToSeconds: seekStringToSeconds,\n uniqueId: uniqueId,\n currentScriptUrl: currentScriptUrl,\n isNumber: isNumber,\n requestAnimationFrame: requestAnimationFrame,\n cancelAnimationFrame: cancelAnimationFrame,\n getBrowserLanguage: getBrowserLanguage,\n now: now,\n removeArrayItem: removeArrayItem,\n listContainsIgnoreCase: listContainsIgnoreCase,\n canAutoPlayMedia: canAutoPlayMedia,\n Media: Media,\n DoubleEventHandler: DoubleEventHandler\n};\n\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\nvar BOLD = 'font-weight: bold; font-size: 13px;';\nvar INFO = 'color: #006600;' + BOLD;\nvar DEBUG = 'color: #0000ff;' + BOLD;\nvar WARN = 'color: #ff8000;' + BOLD;\nvar ERROR = 'color: #ff0000;' + BOLD;\nvar LEVEL_DEBUG = 0;\nvar LEVEL_INFO = 1;\nvar LEVEL_WARN = 2;\nvar LEVEL_ERROR = 3;\nvar LEVEL_DISABLED = LEVEL_ERROR;\nvar COLORS = [DEBUG, INFO, WARN, ERROR, ERROR];\nvar DESCRIPTIONS = ['debug', 'info', 'warn', 'error', 'disabled'];\n\nvar Log = /*#__PURE__*/function () {\n _createClass(Log, [{\n key: \"level\",\n get: function get() {\n return this._level;\n },\n set: function set(newLevel) {\n this._level = newLevel;\n }\n }]);\n\n function Log() {\n var level = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : LEVEL_INFO;\n var offLevel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : LEVEL_DISABLED;\n\n _classCallCheck(this, Log);\n\n this.EXCLUDE_LIST = ['timeupdate', 'playback:timeupdate', 'playback:progress', 'container:hover', 'container:timeupdate', 'container:progress'];\n this.level = level;\n this.previousLevel = this.level;\n this.offLevel = offLevel;\n }\n\n _createClass(Log, [{\n key: \"debug\",\n value: function debug(klass) {\n this.log(klass, LEVEL_DEBUG, Array.prototype.slice.call(arguments, 1));\n }\n }, {\n key: \"info\",\n value: function info(klass) {\n this.log(klass, LEVEL_INFO, Array.prototype.slice.call(arguments, 1));\n }\n }, {\n key: \"warn\",\n value: function warn(klass) {\n this.log(klass, LEVEL_WARN, Array.prototype.slice.call(arguments, 1));\n }\n }, {\n key: \"error\",\n value: function error(klass) {\n this.log(klass, LEVEL_ERROR, Array.prototype.slice.call(arguments, 1));\n }\n }, {\n key: \"onOff\",\n value: function onOff() {\n if (this.level === this.offLevel) {\n this.level = this.previousLevel;\n } else {\n this.previousLevel = this.level;\n this.level = this.offLevel;\n } // handle instances where console.log is unavailable\n\n\n window.console && window.console.log && window.console.log('%c[Clappr.Log] set log level to ' + DESCRIPTIONS[this.level], WARN);\n }\n }, {\n key: \"log\",\n value: function log(klass, level, message) {\n if (this.EXCLUDE_LIST.indexOf(message[0]) >= 0) return;\n if (level < this.level) return;\n\n if (!message) {\n message = klass;\n klass = null;\n }\n\n var color = COLORS[level];\n var klassDescription = '';\n if (klass) klassDescription = '[' + klass + ']';\n window.console && window.console.log && window.console.log.apply(console, ['%c[' + DESCRIPTIONS[level] + ']' + klassDescription, color].concat(message));\n }\n }]);\n\n return Log;\n}();\nLog.LEVEL_DEBUG = LEVEL_DEBUG;\nLog.LEVEL_INFO = LEVEL_INFO;\nLog.LEVEL_WARN = LEVEL_WARN;\nLog.LEVEL_ERROR = LEVEL_ERROR;\n\nLog.getInstance = function () {\n if (this._instance === undefined) this._instance = new this();\n return this._instance;\n};\n\nLog.setLevel = function (level) {\n this.getInstance().level = level;\n};\n\nLog.debug = function () {\n this.getInstance().debug.apply(this.getInstance(), arguments);\n};\n\nLog.info = function () {\n this.getInstance().info.apply(this.getInstance(), arguments);\n};\n\nLog.warn = function () {\n this.getInstance().warn.apply(this.getInstance(), arguments);\n};\n\nLog.error = function () {\n this.getInstance().error.apply(this.getInstance(), arguments);\n};\n\nvar slice = Array.prototype.slice;\nvar eventSplitter = /\\s+/;\n\nvar eventsApi = function eventsApi(obj, action, name, rest) {\n if (!name) return true; // Handle event maps.\n\n if (_typeof(name) === 'object') {\n for (var key in name) {\n obj[action].apply(obj, [key, name[key]].concat(rest));\n }\n\n return false;\n } // Handle space separated event names.\n\n\n if (eventSplitter.test(name)) {\n var names = name.split(eventSplitter);\n\n for (var i = 0, l = names.length; i < l; i++) {\n obj[action].apply(obj, [names[i]].concat(rest));\n }\n\n return false;\n }\n\n return true;\n};\n\nvar triggerEvents = function triggerEvents(events, args, klass, name) {\n var ev,\n i = -1;\n var l = events.length,\n a1 = args[0],\n a2 = args[1],\n a3 = args[2];\n run();\n\n function run() {\n try {\n switch (args.length) {\n /* eslint-disable curly */\n case 0:\n while (++i < l) {\n (ev = events[i]).callback.call(ev.ctx);\n }\n\n return;\n\n case 1:\n while (++i < l) {\n (ev = events[i]).callback.call(ev.ctx, a1);\n }\n\n return;\n\n case 2:\n while (++i < l) {\n (ev = events[i]).callback.call(ev.ctx, a1, a2);\n }\n\n return;\n\n case 3:\n while (++i < l) {\n (ev = events[i]).callback.call(ev.ctx, a1, a2, a3);\n }\n\n return;\n\n default:\n while (++i < l) {\n (ev = events[i]).callback.apply(ev.ctx, args);\n }\n\n return;\n }\n } catch (exception) {\n Log.error.apply(Log, [klass, 'error on event', name, 'trigger', '-', exception]);\n run();\n }\n }\n};\n/**\n * @class Events\n * @constructor\n * @module base\n */\n\n\nvar Events = /*#__PURE__*/function () {\n function Events() {\n _classCallCheck(this, Events);\n }\n\n _createClass(Events, [{\n key: \"on\",\n\n /**\n * listen to an event indefinitely, if you want to stop you need to call `off`\n * @method on\n * @param {String} name\n * @param {Function} callback\n * @param {Object} context\n */\n value: function on(name, callback, context) {\n if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this;\n this._events || (this._events = {});\n var events = this._events[name] || (this._events[name] = []);\n events.push({\n callback: callback,\n context: context,\n ctx: context || this\n });\n return this;\n }\n /**\n * listen to an event only once\n * @method once\n * @param {String} name\n * @param {Function} callback\n * @param {Object} context\n */\n\n }, {\n key: \"once\",\n value: function once(name, callback, context) {\n var _this = this;\n\n var _once;\n\n if (!eventsApi(this, 'once', name, [callback, context]) || !callback) return this;\n\n var off = function off() {\n return _this.off(name, _once);\n };\n\n _once = function once() {\n off();\n callback.apply(this, arguments);\n };\n\n return this.on(name, _once, context);\n }\n /**\n * stop listening to an event\n * @method off\n * @param {String} name\n * @param {Function} callback\n * @param {Object} context\n */\n\n }, {\n key: \"off\",\n value: function off(name, callback, context) {\n var retain, ev, events, names, i, l, j, k;\n if (!this._events || !eventsApi(this, 'off', name, [callback, context])) return this;\n\n if (!name && !callback && !context) {\n this._events = void 0;\n return this;\n }\n\n names = name ? [name] : Object.keys(this._events); // jshint maxdepth:5\n\n for (i = 0, l = names.length; i < l; i++) {\n name = names[i];\n events = this._events[name];\n\n if (events) {\n this._events[name] = retain = [];\n\n if (callback || context) {\n for (j = 0, k = events.length; j < k; j++) {\n ev = events[j];\n if (callback && callback !== ev.callback && callback !== ev.callback._callback || context && context !== ev.context) retain.push(ev);\n }\n }\n\n if (!retain.length) delete this._events[name];\n }\n }\n\n return this;\n }\n /**\n * triggers an event given its `name`\n * @method trigger\n * @param {String} name\n */\n\n }, {\n key: \"trigger\",\n value: function trigger(name) {\n var klass = this.name || this.constructor.name;\n Log.debug.apply(Log, [klass].concat(Array.prototype.slice.call(arguments)));\n if (!this._events) return this;\n var args = slice.call(arguments, 1);\n if (!eventsApi(this, 'trigger', name, args)) return this;\n var events = this._events[name];\n var allEvents = this._events.all;\n if (events) triggerEvents(events, args, klass, name);\n if (allEvents) triggerEvents(allEvents, arguments, klass, name);\n return this;\n }\n /**\n * stop listening an event for a given object\n * @method stopListening\n * @param {Object} obj\n * @param {String} name\n * @param {Function} callback\n */\n\n }, {\n key: \"stopListening\",\n value: function stopListening(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n var remove = !name && !callback;\n if (!callback && _typeof(name) === 'object') callback = this;\n if (obj) (listeningTo = {})[obj._listenId] = obj;\n\n for (var id in listeningTo) {\n obj = listeningTo[id];\n obj.off(name, callback, this);\n if (remove || Object.keys(obj._events).length === 0) delete this._listeningTo[id];\n }\n\n return this;\n }\n }], [{\n key: \"register\",\n value: function register(eventName) {\n Events.Custom || (Events.Custom = {});\n var property = typeof eventName === 'string' && eventName.toUpperCase().trim();\n\n if (property && !Events.Custom[property]) {\n Events.Custom[property] = property.toLowerCase().split('_').map(function (value, index) {\n return index === 0 ? value : value = value[0].toUpperCase() + value.slice(1);\n }).join('');\n } else Log.error('Events', 'Error when register event: ' + eventName);\n }\n }, {\n key: \"listAvailableCustomEvents\",\n value: function listAvailableCustomEvents() {\n Events.Custom || (Events.Custom = {});\n return Object.keys(Events.Custom).filter(function (property) {\n return typeof Events.Custom[property] === 'string';\n });\n }\n }]);\n\n return Events;\n}();\nvar listenMethods = {\n listenTo: 'on',\n listenToOnce: 'once'\n};\nObject.keys(listenMethods).forEach(function (method) {\n Events.prototype[method] = function (obj, name, callback) {\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var id = obj._listenId || (obj._listenId = uniqueId('l'));\n listeningTo[id] = obj;\n if (!callback && _typeof(name) === 'object') callback = this;\n obj[listenMethods[method]](name, callback, this);\n return this;\n };\n}); // PLAYER EVENTS\n\n/**\n * Fired when the player is ready on startup\n *\n * @event PLAYER_READY\n */\n\nEvents.PLAYER_READY = 'ready';\n/**\n * Fired when player resizes\n *\n * @event PLAYER_RESIZE\n * @param {Object} currentSize an object with the current size\n */\n\nEvents.PLAYER_RESIZE = 'resize';\n/**\n * Fired when player changes its fullscreen state\n *\n * @event PLAYER_FULLSCREEN\n * @param {Boolean} whether or not the player is on fullscreen mode\n */\n\nEvents.PLAYER_FULLSCREEN = 'fullscreen';\n/**\n * Fired when player starts to play\n *\n * @event PLAYER_PLAY\n */\n\nEvents.PLAYER_PLAY = 'play';\n/**\n * Fired when player pauses\n *\n * @event PLAYER_PAUSE\n */\n\nEvents.PLAYER_PAUSE = 'pause';\n/**\n * Fired when player stops\n *\n * @event PLAYER_STOP\n */\n\nEvents.PLAYER_STOP = 'stop';\n/**\n * Fired when player ends the video\n *\n * @event PLAYER_ENDED\n */\n\nEvents.PLAYER_ENDED = 'ended';\n/**\n * Fired when player seeks the video\n *\n * @event PLAYER_SEEK\n * @param {Number} time the current time in seconds\n */\n\nEvents.PLAYER_SEEK = 'seek';\n/**\n * Fired when player receives an error\n *\n * @event PLAYER_ERROR\n * @param {Object} error the error\n */\n\nEvents.PLAYER_ERROR = 'playererror';\n/**\n * Fired when there is an error\n *\n * @event ERROR\n * @param {Object} error\n * the error with the following format `{code, description, level, raw, origin, scope}`\n * @param {String} [options.code]\n * error's code: code to identify error in the following format: origin:code\n * @param {String} [options.description]\n * error's description: description of the error\n * @param {String} [options.level]\n * error's level: FATAL or WARN.\n * @param {String} [options.origin]\n * error's origin. Example: hls, html5, etc\n * @param {String} [options.scope]\n * error's scope. Example: playback, container, etc\n * @param {String} [options.raw]\n * raw error: the initial error received\n */\n\nEvents.ERROR = 'error';\n/**\n * Fired when the time is updated on player\n *\n * @event PLAYER_TIMEUPDATE\n * @param {Object} progress Data\n * progress object\n * @param {Number} [progress.current]\n * current time (in seconds)\n * @param {Number} [progress.total]\n * total time (in seconds)\n */\n\nEvents.PLAYER_TIMEUPDATE = 'timeupdate';\n/**\n * Fired when player updates its volume\n *\n * @event PLAYER_VOLUMEUPDATE\n * @param {Number} volume the current volume\n */\n\nEvents.PLAYER_VOLUMEUPDATE = 'volumeupdate';\n/**\n * Fired when subtitle is available\n *\n * @event PLAYER_SUBTITLE_AVAILABLE\n */\n\nEvents.PLAYER_SUBTITLE_AVAILABLE = 'subtitleavailable'; // Playback Events\n\n/**\n * Fired when the playback is downloading the media\n *\n * @event PLAYBACK_PROGRESS\n * @param progress {Object}\n * Data progress object\n * @param [progress.start] {Number}\n * start position of buffered content at current position\n * @param [progress.current] {Number}\n * end position of buffered content at current position\n * @param [progress.total] {Number}\n * total content to be downloaded\n * @param buffered {Array}\n * array of buffered segments ({start, end}). [Only for supported playbacks]\n */\n\nEvents.PLAYBACK_PROGRESS = 'playback:progress';\n/**\n * Fired when the time is updated on playback\n *\n * @event PLAYBACK_TIMEUPDATE\n * @param {Object} progress Data\n * progress object\n * @param {Number} [progress.current]\n * current time (in seconds)\n * @param {Number} [progress.total]\n * total time (in seconds)\n */\n\nEvents.PLAYBACK_TIMEUPDATE = 'playback:timeupdate';\n/**\n * Fired when playback is ready\n *\n * @event PLAYBACK_READY\n */\n\nEvents.PLAYBACK_READY = 'playback:ready';\n/**\n * Fired when the playback starts having to buffer because\n * playback can currently not be smooth.\n *\n * This corresponds to the playback `buffering` property being\n * `true`.\n *\n * @event PLAYBACK_BUFFERING\n */\n\nEvents.PLAYBACK_BUFFERING = 'playback:buffering';\n/**\n * Fired when the playback has enough in the buffer to be\n * able to play smoothly, after previously being unable to\n * do this.\n *\n * This corresponds to the playback `buffering` property being\n * `false`.\n *\n * @event PLAYBACK_BUFFERFULL\n */\n\nEvents.PLAYBACK_BUFFERFULL = 'playback:bufferfull';\n/**\n * Fired when playback changes any settings (volume, seek and etc)\n *\n * @event PLAYBACK_SETTINGSUPDATE\n */\n\nEvents.PLAYBACK_SETTINGSUPDATE = 'playback:settingsupdate';\n/**\n * Fired when playback loaded its metadata\n *\n * @event PLAYBACK_LOADEDMETADATA\n * @param {Object} metadata Data\n * settings object\n * @param {Number} [metadata.duration]\n * the playback duration\n * @param {Object} [metadata.data]\n * extra meta data\n */\n\nEvents.PLAYBACK_LOADEDMETADATA = 'playback:loadedmetadata';\n/**\n * Fired when playback updates its video quality\n *\n * @event PLAYBACK_HIGHDEFINITIONUPDATE\n * @param {Boolean} isHD\n * true when is on HD, false otherwise\n */\n\nEvents.PLAYBACK_HIGHDEFINITIONUPDATE = 'playback:highdefinitionupdate';\n/**\n * Fired when playback updates its bitrate\n *\n * @event PLAYBACK_BITRATE\n * @param {Object} bitrate Data\n * bitrate object\n * @param {Number} [bitrate.bandwidth]\n * bitrate bandwidth when it's available\n * @param {Number} [bitrate.width]\n * playback width (ex: 720, 640, 1080)\n * @param {Number} [bitrate.height]\n * playback height (ex: 240, 480, 720)\n * @param {Number} [bitrate.level]\n * playback level when it's available, it could be just a map for width (0 => 240, 1 => 480, 2 => 720)\n */\n\nEvents.PLAYBACK_BITRATE = 'playback:bitrate';\n/**\n * Fired when the playback has its levels\n *\n * @event PLAYBACK_LEVELS_AVAILABLE\n * @param {Array} levels\n * the ordered levels, each one with the following format `{id: 1, label: '500kbps'}` ps: id should be a number >= 0\n * @param {Number} initial\n * the initial level otherwise -1 (AUTO)\n */\n\nEvents.PLAYBACK_LEVELS_AVAILABLE = 'playback:levels:available';\n/**\n * Fired when the playback starts to switch level\n *\n * @event PLAYBACK_LEVEL_SWITCH_START\n *\n */\n\nEvents.PLAYBACK_LEVEL_SWITCH_START = 'playback:levels:switch:start';\n/**\n * Fired when the playback ends the level switch\n *\n * @event PLAYBACK_LEVEL_SWITCH_END\n *\n */\n\nEvents.PLAYBACK_LEVEL_SWITCH_END = 'playback:levels:switch:end';\n/**\n * Fired when playback internal state changes\n *\n * @event PLAYBACK_PLAYBACKSTATE\n * @param {Object} state Data\n * state object\n * @param {String} [state.type]\n * the playback type\n */\n\nEvents.PLAYBACK_PLAYBACKSTATE = 'playback:playbackstate';\n/**\n * Fired when DVR becomes enabled/disabled.\n *\n * @event PLAYBACK_DVR\n * @param {boolean} state true if dvr enabled\n */\n\nEvents.PLAYBACK_DVR = 'playback:dvr'; // TODO doc\n\nEvents.PLAYBACK_MEDIACONTROL_DISABLE = 'playback:mediacontrol:disable'; // TODO doc\n\nEvents.PLAYBACK_MEDIACONTROL_ENABLE = 'playback:mediacontrol:enable';\n/**\n * Fired when the media for a playback ends.\n *\n * @event PLAYBACK_ENDED\n * @param {String} name the name of the playback\n */\n\nEvents.PLAYBACK_ENDED = 'playback:ended';\n/**\n * Fired when user requests `play()`\n *\n * @event PLAYBACK_PLAY_INTENT\n */\n\nEvents.PLAYBACK_PLAY_INTENT = 'playback:play:intent';\n/**\n * Fired when the media for a playback starts playing.\n * This is not necessarily when the user requests `play()`\n * The media may have to buffer first.\n * I.e. `isPlaying()` might return `true` before this event is fired,\n * because `isPlaying()` represents the intended state.\n *\n * @event PLAYBACK_PLAY\n */\n\nEvents.PLAYBACK_PLAY = 'playback:play';\n/**\n * Fired when the media for a playback pauses.\n *\n * @event PLAYBACK_PAUSE\n */\n\nEvents.PLAYBACK_PAUSE = 'playback:pause';\n/**\n * Fired when the media for a playback is seeking.\n *\n * @event PLAYBACK_SEEK\n */\n\nEvents.PLAYBACK_SEEK = 'playback:seek';\n/**\n * Fired when the media for a playback is seeked.\n *\n * @event PLAYBACK_SEEKED\n */\n\nEvents.PLAYBACK_SEEKED = 'playback:seeked';\n/**\n * Fired when the media for a playback is stopped.\n *\n * @event PLAYBACK_STOP\n */\n\nEvents.PLAYBACK_STOP = 'playback:stop';\n/**\n * Fired if an error occurs in the playback.\n *\n * @event PLAYBACK_ERROR\n * @param {Object} error An object containing the error details\n * @param {String} name Playback name\n */\n\nEvents.PLAYBACK_ERROR = 'playback:error'; // TODO doc\n\nEvents.PLAYBACK_STATS_ADD = 'playback:stats:add'; // TODO doc\n\nEvents.PLAYBACK_FRAGMENT_LOADED = 'playback:fragment:loaded'; // TODO doc\n\nEvents.PLAYBACK_LEVEL_SWITCH = 'playback:level:switch';\n/**\n * Fired when subtitle is available on playback for display\n *\n * @event PLAYBACK_SUBTITLE_AVAILABLE\n */\n\nEvents.PLAYBACK_SUBTITLE_AVAILABLE = 'playback:subtitle:available';\n/**\n * Fired when playback subtitle track has changed\n *\n * @event CONTAINER_SUBTITLE_CHANGED\n * @param {Object} track Data\n * track object\n * @param {Number} [track.id]\n * selected track id\n */\n\nEvents.PLAYBACK_SUBTITLE_CHANGED = 'playback:subtitle:changed'; // Core Events\n\n/**\n * Fired when the containers are created\n *\n * @event CORE_CONTAINERS_CREATED\n */\n\nEvents.CORE_CONTAINERS_CREATED = 'core:containers:created';\n/**\n * Fired when the active container changed\n *\n * @event CORE_ACTIVE_CONTAINER_CHANGED\n */\n\nEvents.CORE_ACTIVE_CONTAINER_CHANGED = 'core:active:container:changed';\n/**\n * Fired when the options were changed for the core\n *\n * @event CORE_OPTIONS_CHANGE\n * @param {Object} new options provided to configure() method\n */\n\nEvents.CORE_OPTIONS_CHANGE = 'core:options:change';\n/**\n * Fired after creating containers, when the core is ready\n *\n * @event CORE_READY\n */\n\nEvents.CORE_READY = 'core:ready';\n/**\n * Fired when the fullscreen state change\n *\n * @event CORE_FULLSCREEN\n * @param {Boolean} whether or not the player is on fullscreen mode\n */\n\nEvents.CORE_FULLSCREEN = 'core:fullscreen';\n/**\n * Fired when core updates size\n *\n * @event CORE_RESIZE\n * @param {Object} currentSize an object with the current size\n */\n\nEvents.CORE_RESIZE = 'core:resize';\n/**\n * Fired when the screen orientation has changed.\n * This event is trigger only for mobile devices.\n *\n * @event CORE_SCREEN_ORIENTATION_CHANGED\n * @param {Object} screen An object with screen orientation\n * screen object\n * @param {Object} [screen.event]\n * window resize event object\n * @param {String} [screen.orientation]\n * screen orientation (ie: 'landscape' or 'portrait')\n */\n\nEvents.CORE_SCREEN_ORIENTATION_CHANGED = 'core:screen:orientation:changed';\n/**\n * Fired when occurs mouse move event on core element\n *\n * @event CORE_MOUSE_MOVE\n * @param {Object} event a DOM event\n */\n\nEvents.CORE_MOUSE_MOVE = 'core:mousemove';\n/**\n * Fired when occurs mouse leave event on core element\n *\n * @event CORE_MOUSE_LEAVE\n * @param {Object} event a DOM event\n */\n\nEvents.CORE_MOUSE_LEAVE = 'core:mouseleave'; // Container Events\n\n/**\n * Fired when the container internal state changes\n *\n * @event CONTAINER_PLAYBACKSTATE\n * @param {Object} state Data\n * state object\n * @param {String} [state.type]\n * the playback type\n */\n\nEvents.CONTAINER_PLAYBACKSTATE = 'container:playbackstate';\nEvents.CONTAINER_PLAYBACKDVRSTATECHANGED = 'container:dvr';\n/**\n * Fired when the container updates its bitrate\n *\n * @event CONTAINER_BITRATE\n * @param {Object} bitrate Data\n * bitrate object\n * @param {Number} [bitrate.bandwidth]\n * bitrate bandwidth when it's available\n * @param {Number} [bitrate.width]\n * playback width (ex: 720, 640, 1080)\n * @param {Number} [bitrate.height]\n * playback height (ex: 240, 480, 720)\n * @param {Number} [bitrate.level]\n * playback level when it's available, it could be just a map for width (0 => 240, 1 => 480, 2 => 720)\n */\n\nEvents.CONTAINER_BITRATE = 'container:bitrate';\nEvents.CONTAINER_STATS_REPORT = 'container:stats:report';\nEvents.CONTAINER_DESTROYED = 'container:destroyed';\n/**\n * Fired when the container is ready\n *\n * @event CONTAINER_READY\n */\n\nEvents.CONTAINER_READY = 'container:ready';\n/**\n * Fired when the container was resized.\n *\n * Some fullscreen modes won't trigger this resize since they don't affect the container, only the playback contents.\n *\n * @event CONTAINER_RESIZE\n */\n\nEvents.CONTAINER_RESIZE = 'container:resize';\nEvents.CONTAINER_ERROR = 'container:error';\n/**\n * Fired when the container loaded its metadata\n *\n * @event CONTAINER_LOADEDMETADATA\n * @param {Object} metadata Data\n * settings object\n * @param {Number} [metadata.duration]\n * the playback duration\n * @param {Object} [metadata.data]\n * extra meta data\n */\n\nEvents.CONTAINER_LOADEDMETADATA = 'container:loadedmetadata';\n/**\n * Fired when subtitle is available on container for display\n *\n * @event CONTAINER_SUBTITLE_AVAILABLE\n */\n\nEvents.CONTAINER_SUBTITLE_AVAILABLE = 'container:subtitle:available';\n/**\n * Fired when subtitle track has changed\n *\n * @event CONTAINER_SUBTITLE_CHANGED\n * @param {Object} track Data\n * track object\n * @param {Number} [track.id]\n * selected track id\n */\n\nEvents.CONTAINER_SUBTITLE_CHANGED = 'container:subtitle:changed';\n/**\n * Fired when the time is updated on container\n *\n * @event CONTAINER_TIMEUPDATE\n * @param {Object} progress Data\n * progress object\n * @param {Number} [progress.current]\n * current time (in seconds)\n * @param {Number} [progress.total]\n * total time (in seconds)\n */\n\nEvents.CONTAINER_TIMEUPDATE = 'container:timeupdate';\n/**\n * Fired when the container is downloading the media\n *\n * @event CONTAINER_PROGRESS\n * @param {Object} progress Data\n * progress object\n * @param {Number} [progress.start]\n * initial downloaded content\n * @param {Number} [progress.current]\n * current dowloaded content\n * @param {Number} [progress.total]\n * total content to be downloaded\n */\n\nEvents.CONTAINER_PROGRESS = 'container:progress';\nEvents.CONTAINER_PLAY = 'container:play';\nEvents.CONTAINER_STOP = 'container:stop';\nEvents.CONTAINER_PAUSE = 'container:pause';\nEvents.CONTAINER_ENDED = 'container:ended';\nEvents.CONTAINER_CLICK = 'container:click';\nEvents.CONTAINER_DBLCLICK = 'container:dblclick';\nEvents.CONTAINER_CONTEXTMENU = 'container:contextmenu';\nEvents.CONTAINER_MOUSE_ENTER = 'container:mouseenter';\nEvents.CONTAINER_MOUSE_LEAVE = 'container:mouseleave';\nEvents.CONTAINER_MOUSE_UP = 'container:mouseup';\nEvents.CONTAINER_MOUSE_DOWN = 'container:mousedown';\n/**\n * Fired when the container seeks the video\n *\n * @event CONTAINER_SEEK\n * @param {Number} time the current time in seconds\n */\n\nEvents.CONTAINER_SEEK = 'container:seek';\n/**\n * Fired when the container was finished the seek video\n *\n * @event CONTAINER_SEEKED\n * @param {Number} time the current time in seconds\n */\n\nEvents.CONTAINER_SEEKED = 'container:seeked';\nEvents.CONTAINER_VOLUME = 'container:volume';\nEvents.CONTAINER_FULLSCREEN = 'container:fullscreen';\n/**\n * Fired when container is buffering\n *\n * @event CONTAINER_STATE_BUFFERING\n */\n\nEvents.CONTAINER_STATE_BUFFERING = 'container:state:buffering';\n/**\n * Fired when the container filled the buffer\n *\n * @event CONTAINER_STATE_BUFFERFULL\n */\n\nEvents.CONTAINER_STATE_BUFFERFULL = 'container:state:bufferfull';\n/**\n * Fired when the container changes any settings (volume, seek and etc)\n *\n * @event CONTAINER_SETTINGSUPDATE\n */\n\nEvents.CONTAINER_SETTINGSUPDATE = 'container:settingsupdate';\n/**\n * Fired when container updates its video quality\n *\n * @event CONTAINER_HIGHDEFINITIONUPDATE\n * @param {Boolean} isHD\n * true when is on HD, false otherwise\n */\n\nEvents.CONTAINER_HIGHDEFINITIONUPDATE = 'container:highdefinitionupdate';\n/**\n * Fired when the media control shows\n *\n * @event CONTAINER_MEDIACONTROL_SHOW\n */\n\nEvents.CONTAINER_MEDIACONTROL_SHOW = 'container:mediacontrol:show';\n/**\n * Fired when the media control hides\n *\n * @event CONTAINER_MEDIACONTROL_HIDE\n */\n\nEvents.CONTAINER_MEDIACONTROL_HIDE = 'container:mediacontrol:hide';\nEvents.CONTAINER_MEDIACONTROL_DISABLE = 'container:mediacontrol:disable';\nEvents.CONTAINER_MEDIACONTROL_ENABLE = 'container:mediacontrol:enable';\nEvents.CONTAINER_STATS_ADD = 'container:stats:add';\n/**\n * Fired when the options were changed for the container\n *\n * @event CONTAINER_OPTIONS_CHANGE\n */\n\nEvents.CONTAINER_OPTIONS_CHANGE = 'container:options:change'; // MediaControl Events\n\nEvents.MEDIACONTROL_RENDERED = 'mediacontrol:rendered';\n/**\n * Fired when the player enters/exit on fullscreen\n *\n * @event MEDIACONTROL_FULLSCREEN\n */\n\nEvents.MEDIACONTROL_FULLSCREEN = 'mediacontrol:fullscreen';\n/**\n * Fired when the media control shows\n *\n * @event MEDIACONTROL_SHOW\n */\n\nEvents.MEDIACONTROL_SHOW = 'mediacontrol:show';\n/**\n * Fired when the media control hides\n *\n * @event MEDIACONTROL_HIDE\n */\n\nEvents.MEDIACONTROL_HIDE = 'mediacontrol:hide';\n/**\n * Fired when mouse enters on the seekbar\n *\n * @event MEDIACONTROL_MOUSEMOVE_SEEKBAR\n * @param {Object} event\n * the javascript event\n */\n\nEvents.MEDIACONTROL_MOUSEMOVE_SEEKBAR = 'mediacontrol:mousemove:seekbar';\n/**\n * Fired when mouse leaves the seekbar\n *\n * @event MEDIACONTROL_MOUSELEAVE_SEEKBAR\n * @param {Object} event\n * the javascript event\n */\n\nEvents.MEDIACONTROL_MOUSELEAVE_SEEKBAR = 'mediacontrol:mouseleave:seekbar';\n/**\n * Fired when the media is being played\n *\n * @event MEDIACONTROL_PLAYING\n */\n\nEvents.MEDIACONTROL_PLAYING = 'mediacontrol:playing';\n/**\n * Fired when the media is not being played\n *\n * @event MEDIACONTROL_NOTPLAYING\n */\n\nEvents.MEDIACONTROL_NOTPLAYING = 'mediacontrol:notplaying';\n/**\n * Fired when the container was changed\n *\n * @event MEDIACONTROL_CONTAINERCHANGED\n */\n\nEvents.MEDIACONTROL_CONTAINERCHANGED = 'mediacontrol:containerchanged';\n/**\n * Fired when the options were changed for the mediacontrol\n *\n * @event MEDIACONTROL_OPTIONS_CHANGE\n */\n\nEvents.MEDIACONTROL_OPTIONS_CHANGE = 'mediacontrol:options:change';\n\n/**\n * @class BaseObject\n * @constructor\n * @extends Events\n * @module base\n */\n\nvar BaseObject = /*#__PURE__*/function (_Events) {\n _inherits(BaseObject, _Events);\n\n var _super = _createSuper(BaseObject);\n\n _createClass(BaseObject, [{\n key: \"options\",\n\n /**\n * returns the object options\n * @property options\n * @type Object\n */\n get: function get() {\n return this._options;\n }\n /**\n * @method constructor\n * @param {Object} options\n */\n\n }]);\n\n function BaseObject() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, BaseObject);\n\n _this = _super.call(this, options);\n _this._options = options;\n _this.uniqueId = uniqueId('o');\n return _this;\n }\n /**\n * a unique id prefixed with `'o'`, `o1, o232`\n *\n * @property uniqueId\n * @type String\n */\n\n\n return BaseObject;\n}(Events);\n\n/* eslint-disable no-var */\n// Simple JavaScript Templating\n// Paul Miller (http://paulmillr.com)\n// http://underscorejs.org\n// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// By default, Underscore uses ERB-style template delimiters, change the\n// following template settings to use alternative delimiters.\nvar settings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n}; // When customizing `templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\n\nvar noMatch = /(.)^/; // Certain characters need to be escaped so that they can be put into a\n// string literal.\n\nvar escapes = {\n '\\'': '\\'',\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\t': 't',\n \"\\u2028\": 'u2028',\n \"\\u2029\": 'u2029'\n};\nvar escaper = /\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g; // List of HTML entities for escaping.\n\nvar htmlEntities = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': '''\n};\nvar entityRe = new RegExp('[&<>\"\\']', 'g');\n\nvar escapeExpr = function escapeExpr(string) {\n if (string === null) return '';\n return ('' + string).replace(entityRe, function (match) {\n return htmlEntities[match];\n });\n};\n\nvar counter = 0; // JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n\nvar tmpl = function tmpl(text, data) {\n var render; // Combine delimiters into one regular expression via alternation.\n\n var matcher = new RegExp([(settings.escape || noMatch).source, (settings.interpolate || noMatch).source, (settings.evaluate || noMatch).source].join('|') + '|$', 'g'); // Compile the template source, escaping string literals appropriately.\n\n var index = 0;\n var source = '__p+=\\'';\n text.replace(matcher, function (match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escaper, function (match) {\n return '\\\\' + escapes[match];\n });\n if (escape) source += '\\'+\\n((__t=(' + escape + '))==null?\\'\\':escapeExpr(__t))+\\n\\'';\n if (interpolate) source += '\\'+\\n((__t=(' + interpolate + '))==null?\\'\\':__t)+\\n\\'';\n if (evaluate) source += '\\';\\n' + evaluate + '\\n__p+=\\'';\n index = offset + match.length;\n return match;\n });\n source += '\\';\\n'; // If a variable is not specified, place data values in local scope.\n\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n source = 'var __t,__p=\\'\\',__j=Array.prototype.join,' + 'print=function(){__p+=__j.call(arguments,\\'\\');};\\n' + source + 'return __p;\\n//# sourceURL=/microtemplates/source[' + counter++ + ']';\n\n try {\n /*jshint -W054 */\n // TODO: find a way to avoid eval\n render = new Function(settings.variable || 'obj', 'escapeExpr', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n if (data) return render(data, escapeExpr);\n\n var template = function template(data) {\n return render.call(this, data, escapeExpr);\n }; // Provide the compiled function source as a convenience for precompilation.\n\n\n template.source = 'function(' + (settings.variable || 'obj') + '){\\n' + source + '}';\n return template;\n};\n\ntmpl.settings = settings;\n\n// Copyright 2014 Globo.com Player authors. All rights reserved.\nvar Styler = {\n getStyleFor: function getStyleFor(style) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n baseUrl: ''\n };\n return zepto('<style class=\"clappr-style\"></style>').html(tmpl(style.toString())(options));\n }\n};\n\nvar delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n/**\n * A base class to create ui object.\n * @class UIObject\n * @constructor\n * @extends BaseObject\n * @module base\n */\n\nvar UIObject = /*#__PURE__*/function (_BaseObject) {\n _inherits(UIObject, _BaseObject);\n\n var _super = _createSuper(UIObject);\n\n _createClass(UIObject, [{\n key: \"tagName\",\n\n /**\n * a unique id prefixed with `'c'`, `c1, c232`\n *\n * @property cid\n * @type String\n */\n\n /**\n * the dom element itself\n *\n * @property el\n * @type HTMLElement\n */\n\n /**\n * the dom element wrapped by `$`\n *\n * @property $el\n * @type HTMLElement\n */\n\n /**\n * gets the tag name for the ui component\n * @method tagName\n * @default div\n * @return {String} tag's name\n */\n get: function get() {\n return 'div';\n }\n /**\n * a literal object mapping element's events to methods\n * @property events\n * @type Object\n * @example\n *\n *```javascript\n *\n * class MyButton extends UIObject {\n * constructor(options) {\n * super(options)\n * this.myId = 0\n * }\n * get events() { return { 'click': 'myClick' } }\n * myClick(){ this.myId = 42 }\n * }\n *\n * // when you click on MyButton the method `myClick` will be called\n *```\n */\n\n }, {\n key: \"events\",\n get: function get() {\n return {};\n }\n /**\n * a literal object mapping attributes and values to the element\n * element's attribute name and the value the attribute value\n * @property attributes\n * @type Object\n * @example\n *\n *```javascript\n *\n * class MyButton extends UIObject {\n * constructor(options) { super(options) }\n * get attributes() { return { class: 'my-button'} }\n * }\n *\n * // MyButton.el.className will be 'my-button'\n * ```\n */\n\n }, {\n key: \"attributes\",\n get: function get() {\n return {};\n }\n /**\n * it builds an ui component by:\n * * creating an id for the component `cid`\n * * making sure the element is created `$el`\n * * delegating all `events` to the element\n * @method constructor\n * @param {Object} options the options object\n */\n\n }]);\n\n function UIObject(options) {\n var _this;\n\n _classCallCheck(this, UIObject);\n\n _this = _super.call(this, options);\n _this.cid = uniqueId('c');\n\n _this._ensureElement();\n\n _this.delegateEvents();\n\n return _this;\n }\n /**\n * selects within the component.\n * @method $\n * @param {String} selector a selector to find within the component.\n * @return {HTMLElement} an element, if it exists.\n * @example\n * ```javascript\n * fullScreenBarUIComponent.$('.button-full') //will return only `.button-full` within the component\n * ```\n */\n\n\n _createClass(UIObject, [{\n key: \"$\",\n value: function $(selector) {\n return this.$el.find(selector);\n }\n /**\n * render the component, usually attach it to a real existent `element`\n * @method render\n * @return {UIObject} itself\n */\n\n }, {\n key: \"render\",\n value: function render() {\n return this;\n }\n /**\n * removes the ui component from DOM\n * @method destroy\n * @return {UIObject} itself\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.$el.remove();\n this.stopListening();\n this.undelegateEvents();\n return this;\n }\n /**\n * set element to `el` and `$el`\n * @method setElement\n * @param {HTMLElement} element\n * @param {Boolean} delegate whether is delegate or not\n * @return {UIObject} itself\n */\n\n }, {\n key: \"setElement\",\n value: function setElement(element, delegate) {\n if (this.$el) this.undelegateEvents();\n this.$el = zepto.zepto.isZ(element) ? element : zepto(element);\n this.el = this.$el[0];\n if (delegate !== false) this.delegateEvents();\n return this;\n }\n /**\n * delegates all the original `events` on `element` to its callbacks\n * @method delegateEvents\n * @param {Object} events\n * @return {UIObject} itself\n */\n\n }, {\n key: \"delegateEvents\",\n value: function delegateEvents(events) {\n if (!events) events = this.events;\n this.undelegateEvents();\n\n for (var key in events) {\n var method = events[key];\n if (method && method.constructor !== Function) method = this[events[key]];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n var eventName = match[1],\n selector = match[2];\n eventName += '.delegateEvents' + this.cid;\n if (selector === '') this.$el.on(eventName, method.bind(this));else this.$el.on(eventName, selector, method.bind(this));\n }\n\n return this;\n }\n /**\n * undelegats all the `events`\n * @method undelegateEvents\n * @return {UIObject} itself\n */\n\n }, {\n key: \"undelegateEvents\",\n value: function undelegateEvents() {\n this.$el.off('.delegateEvents' + this.cid);\n return this;\n }\n /**\n * ensures the creation of this ui component\n * @method _ensureElement\n * @private\n */\n\n }, {\n key: \"_ensureElement\",\n value: function _ensureElement() {\n if (!this.el) {\n var attrs = zepto.extend(true, {}, this.attributes);\n if (this.id) attrs.id = this.id;\n if (this.className) attrs['class'] = this.className;\n var $el = zepto(DomRecycler.create(this.tagName)).attr(attrs);\n this.setElement($el, false);\n } else {\n this.setElement(this.el, false);\n }\n }\n }]);\n\n return UIObject;\n}(BaseObject);\n\n/**\n * The PlayerError is responsible to receive and propagate errors.\n * @class PlayerError\n * @constructor\n * @extends BaseObject\n * @module components\n */\n\nvar PlayerError = /*#__PURE__*/function (_BaseObject) {\n _inherits(PlayerError, _BaseObject);\n\n var _super = _createSuper(PlayerError);\n\n _createClass(PlayerError, [{\n key: \"name\",\n get: function get() {\n return 'error';\n }\n /**\n * @property Levels\n * @type {Object} object with error levels\n */\n\n }], [{\n key: \"Levels\",\n get: function get() {\n return {\n FATAL: 'FATAL',\n WARN: 'WARN',\n INFO: 'INFO'\n };\n }\n }]);\n\n function PlayerError() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var core = arguments.length > 1 ? arguments[1] : undefined;\n\n _classCallCheck(this, PlayerError);\n\n _this = _super.call(this, options);\n _this.core = core;\n return _this;\n }\n /**\n * creates and trigger an error.\n * @method createError\n * @param {Object} err should be an object with code, description, level, origin, scope and raw error.\n */\n\n\n _createClass(PlayerError, [{\n key: \"createError\",\n value: function createError(err) {\n if (!this.core) {\n Log.warn(this.name, 'Core is not set. Error: ', err);\n return;\n }\n\n this.core.trigger(Events.ERROR, err);\n }\n }]);\n\n return PlayerError;\n}(BaseObject);\n\nvar ErrorMixin = {\n /**\n * creates an error.\n * @method createError\n * @param {Object} error should be an object with code, description, level and raw error.\n * @return {Object} Object with formatted error data including origin and scope\n */\n createError: function createError(error) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n useCodePrefix: true\n };\n var scope = this.constructor && this.constructor.type || '';\n var origin = this.name || scope;\n var i18n = this.i18n || this.core && this.core.i18n || this.container && this.container.i18n;\n var prefixedCode = \"\".concat(origin, \":\").concat(error && error.code || 'unknown');\n var defaultError = {\n description: '',\n level: PlayerError.Levels.FATAL,\n origin: origin,\n scope: scope,\n raw: {}\n };\n var errorData = Object.assign({}, defaultError, error, {\n code: options.useCodePrefix ? prefixedCode : error.code\n });\n\n if (i18n && errorData.level == PlayerError.Levels.FATAL && !errorData.UI) {\n var defaultUI = {\n title: i18n.t('default_error_title'),\n message: i18n.t('default_error_message')\n };\n errorData.UI = defaultUI;\n }\n\n this.playerError ? this.playerError.createError(errorData) : Log.warn(origin, 'PlayerError is not defined. Error: ', errorData);\n return errorData;\n }\n};\n\nvar UICorePlugin = /*#__PURE__*/function (_UIObject) {\n _inherits(UICorePlugin, _UIObject);\n\n var _super = _createSuper(UICorePlugin);\n\n _createClass(UICorePlugin, [{\n key: \"playerError\",\n get: function get() {\n return this.core.playerError;\n }\n }]);\n\n function UICorePlugin(core) {\n var _this;\n\n _classCallCheck(this, UICorePlugin);\n\n _this = _super.call(this, core.options);\n _this.core = core;\n _this.enabled = true;\n\n _this.bindEvents();\n\n _this.render();\n\n return _this;\n }\n\n _createClass(UICorePlugin, [{\n key: \"bindEvents\",\n value: function bindEvents() {}\n }, {\n key: \"getExternalInterface\",\n value: function getExternalInterface() {\n return {};\n }\n }, {\n key: \"enable\",\n value: function enable() {\n if (!this.enabled) {\n this.bindEvents();\n this.$el.show();\n this.enabled = true;\n }\n }\n }, {\n key: \"disable\",\n value: function disable() {\n this.stopListening();\n this.$el.hide();\n this.enabled = false;\n }\n }, {\n key: \"render\",\n value: function render() {\n return this;\n }\n }]);\n\n return UICorePlugin;\n}(UIObject);\nObject.assign(UICorePlugin.prototype, ErrorMixin);\n\nUICorePlugin.extend = function (properties) {\n return extend(UICorePlugin, properties);\n};\n\nUICorePlugin.type = 'core';\n\nvar css_248z = \".container[data-container] {\\n position: absolute;\\n background-color: black;\\n height: 100%;\\n width: 100%;\\n max-width: 100%; }\\n .container[data-container] .chromeless {\\n cursor: default; }\\n\\n[data-player]:not(.nocursor) .container[data-container]:not(.chromeless).pointer-enabled {\\n cursor: pointer; }\\n\";\n\n/**\n * An abstraction to represent a container for a given playback\n * TODO: describe its responsabilities\n * @class Container\n * @constructor\n * @extends UIObject\n * @module base\n */\n\nvar Container = /*#__PURE__*/function (_UIObject) {\n _inherits(Container, _UIObject);\n\n var _super = _createSuper(Container);\n\n _createClass(Container, [{\n key: \"name\",\n\n /**\n * container's name\n * @method name\n * @default Container\n * @return {String} container's name\n */\n get: function get() {\n return 'Container';\n }\n }, {\n key: \"attributes\",\n get: function get() {\n return {\n \"class\": 'container',\n 'data-container': ''\n };\n }\n }, {\n key: \"events\",\n get: function get() {\n return {\n 'click': 'clicked',\n 'dblclick': 'dblClicked',\n 'touchend': 'dblTap',\n 'contextmenu': 'onContextMenu',\n 'mouseenter': 'mouseEnter',\n 'mouseleave': 'mouseLeave',\n 'mouseup': 'onMouseUp',\n 'mousedown': 'onMouseDown'\n };\n }\n /**\n * Determine if the playback has ended.\n * @property ended\n * @type Boolean\n */\n\n }, {\n key: \"ended\",\n get: function get() {\n return this.playback.ended;\n }\n /**\n * Determine if the playback is having to buffer in order for\n * playback to be smooth.\n * (i.e if a live stream is playing smoothly, this will be false)\n * @property buffering\n * @type Boolean\n */\n\n }, {\n key: \"buffering\",\n get: function get() {\n return this.playback.buffering;\n }\n /**\n * The internationalization plugin.\n * @property i18n\n * @type {Strings}\n */\n\n }, {\n key: \"i18n\",\n get: function get() {\n return this._i18n;\n }\n /**\n * checks if has closed caption tracks.\n * @property hasClosedCaptionsTracks\n * @type {Boolean}\n */\n\n }, {\n key: \"hasClosedCaptionsTracks\",\n get: function get() {\n return this.playback.hasClosedCaptionsTracks;\n }\n /**\n * gets the available closed caption tracks.\n * @property closedCaptionsTracks\n * @type {Array} an array of objects with at least 'id' and 'name' properties\n */\n\n }, {\n key: \"closedCaptionsTracks\",\n get: function get() {\n return this.playback.closedCaptionsTracks;\n }\n /**\n * gets the selected closed caption track index. (-1 is disabled)\n * @property closedCaptionsTrackId\n * @type {Number}\n */\n\n }, {\n key: \"closedCaptionsTrackId\",\n get: function get() {\n return this.playback.closedCaptionsTrackId;\n }\n /**\n * sets the selected closed caption track index. (-1 is disabled)\n * @property closedCaptionsTrackId\n * @type {Number}\n */\n ,\n set: function set(trackId) {\n this.playback.closedCaptionsTrackId = trackId;\n }\n /**\n * it builds a container\n * @method constructor\n * @param {Object} options the options object\n * @param {Strings} i18n the internationalization component\n */\n\n }]);\n\n function Container(options, i18n, playerError) {\n var _this;\n\n _classCallCheck(this, Container);\n\n _this = _super.call(this, options);\n _this._i18n = i18n;\n _this.currentTime = 0;\n _this.volume = 100;\n _this.playback = options.playback;\n _this.playerError = playerError;\n _this.settings = zepto.extend(true, {}, _this.playback.settings);\n _this.isReady = false;\n _this.mediaControlDisabled = false;\n _this.plugins = [_this.playback];\n _this.dblTapHandler = new DoubleEventHandler(500);\n _this.clickTimer = null;\n _this.clickDelay = 200; // FIXME: could be a player option\n\n _this.bindEvents();\n\n return _this;\n }\n /**\n * binds playback events to the methods of the container.\n * it listens to playback's events and triggers them as container events.\n *\n * | Playback |\n * |----------|\n * | progress |\n * | timeupdate |\n * | ready |\n * | buffering |\n * | bufferfull |\n * | settingsupdate |\n * | loadedmetadata |\n * | highdefinitionupdate |\n * | bitrate |\n * | playbackstate |\n * | dvr |\n * | mediacontrol_disable |\n * | mediacontrol_enable |\n * | ended |\n * | play |\n * | pause |\n * | error |\n *\n * ps: the events usually translate from PLABACK_x to CONTAINER_x, you can check all the events at `Event` class.\n *\n * @method bindEvents\n */\n\n\n _createClass(Container, [{\n key: \"bindEvents\",\n value: function bindEvents() {\n this.listenTo(this.playback, Events.PLAYBACK_PROGRESS, this.onProgress);\n this.listenTo(this.playback, Events.PLAYBACK_TIMEUPDATE, this.timeUpdated);\n this.listenTo(this.playback, Events.PLAYBACK_READY, this.ready);\n this.listenTo(this.playback, Events.PLAYBACK_BUFFERING, this.onBuffering);\n this.listenTo(this.playback, Events.PLAYBACK_BUFFERFULL, this.bufferfull);\n this.listenTo(this.playback, Events.PLAYBACK_SETTINGSUPDATE, this.settingsUpdate);\n this.listenTo(this.playback, Events.PLAYBACK_LOADEDMETADATA, this.loadedMetadata);\n this.listenTo(this.playback, Events.PLAYBACK_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);\n this.listenTo(this.playback, Events.PLAYBACK_BITRATE, this.updateBitrate);\n this.listenTo(this.playback, Events.PLAYBACK_PLAYBACKSTATE, this.playbackStateChanged);\n this.listenTo(this.playback, Events.PLAYBACK_DVR, this.playbackDvrStateChanged);\n this.listenTo(this.playback, Events.PLAYBACK_MEDIACONTROL_DISABLE, this.disableMediaControl);\n this.listenTo(this.playback, Events.PLAYBACK_MEDIACONTROL_ENABLE, this.enableMediaControl);\n this.listenTo(this.playback, Events.PLAYBACK_SEEK, this.onSeek);\n this.listenTo(this.playback, Events.PLAYBACK_SEEKED, this.onSeeked);\n this.listenTo(this.playback, Events.PLAYBACK_ENDED, this.onEnded);\n this.listenTo(this.playback, Events.PLAYBACK_PLAY, this.playing);\n this.listenTo(this.playback, Events.PLAYBACK_PAUSE, this.paused);\n this.listenTo(this.playback, Events.PLAYBACK_STOP, this.stopped);\n this.listenTo(this.playback, Events.PLAYBACK_ERROR, this.error);\n this.listenTo(this.playback, Events.PLAYBACK_SUBTITLE_AVAILABLE, this.subtitleAvailable);\n this.listenTo(this.playback, Events.PLAYBACK_SUBTITLE_CHANGED, this.subtitleChanged);\n }\n }, {\n key: \"subtitleAvailable\",\n value: function subtitleAvailable() {\n this.trigger(Events.CONTAINER_SUBTITLE_AVAILABLE);\n }\n }, {\n key: \"subtitleChanged\",\n value: function subtitleChanged(track) {\n this.trigger(Events.CONTAINER_SUBTITLE_CHANGED, track);\n }\n }, {\n key: \"playbackStateChanged\",\n value: function playbackStateChanged(state) {\n this.trigger(Events.CONTAINER_PLAYBACKSTATE, state);\n }\n }, {\n key: \"playbackDvrStateChanged\",\n value: function playbackDvrStateChanged(dvrInUse) {\n this.settings = this.playback.settings;\n this.dvrInUse = dvrInUse;\n this.trigger(Events.CONTAINER_PLAYBACKDVRSTATECHANGED, dvrInUse);\n }\n }, {\n key: \"updateBitrate\",\n value: function updateBitrate(newBitrate) {\n this.trigger(Events.CONTAINER_BITRATE, newBitrate);\n }\n }, {\n key: \"statsReport\",\n value: function statsReport(metrics) {\n this.trigger(Events.CONTAINER_STATS_REPORT, metrics);\n }\n }, {\n key: \"getPlaybackType\",\n value: function getPlaybackType() {\n return this.playback.getPlaybackType();\n }\n /**\n * returns `true` if DVR is enable otherwise `false`.\n * @method isDvrEnabled\n * @return {Boolean}\n */\n\n }, {\n key: \"isDvrEnabled\",\n value: function isDvrEnabled() {\n return !!this.playback.dvrEnabled;\n }\n /**\n * returns `true` if DVR is in use otherwise `false`.\n * @method isDvrInUse\n * @return {Boolean}\n */\n\n }, {\n key: \"isDvrInUse\",\n value: function isDvrInUse() {\n return !!this.dvrInUse;\n }\n /**\n * destroys the container\n * @method destroy\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.disableResizeObserver();\n this.trigger(Events.CONTAINER_DESTROYED, this, this.name);\n this.stopListening();\n this.plugins.forEach(function (plugin) {\n return plugin.destroy();\n });\n this.$el.remove();\n }\n }, {\n key: \"setStyle\",\n value: function setStyle(style) {\n this.$el.css(style);\n }\n }, {\n key: \"animate\",\n value: function animate(style, duration) {\n return this.$el.animate(style, duration).promise();\n }\n }, {\n key: \"ready\",\n value: function ready() {\n this.isReady = true;\n this.trigger(Events.CONTAINER_READY, this.name);\n }\n }, {\n key: \"isPlaying\",\n value: function isPlaying() {\n return this.playback.isPlaying();\n }\n }, {\n key: \"getStartTimeOffset\",\n value: function getStartTimeOffset() {\n return this.playback.getStartTimeOffset();\n }\n }, {\n key: \"getCurrentTime\",\n value: function getCurrentTime() {\n return this.currentTime;\n }\n }, {\n key: \"getDuration\",\n value: function getDuration() {\n return this.playback.getDuration();\n }\n }, {\n key: \"error\",\n value: function error(_error) {\n if (!this.isReady) this.ready();\n this.trigger(Events.CONTAINER_ERROR, _error, this.name);\n }\n }, {\n key: \"loadedMetadata\",\n value: function loadedMetadata(metadata) {\n this.trigger(Events.CONTAINER_LOADEDMETADATA, metadata);\n }\n }, {\n key: \"timeUpdated\",\n value: function timeUpdated(timeProgress) {\n this.currentTime = timeProgress.current;\n this.trigger(Events.CONTAINER_TIMEUPDATE, timeProgress, this.name);\n }\n }, {\n key: \"onProgress\",\n value: function onProgress() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this.trigger.apply(this, [Events.CONTAINER_PROGRESS].concat(args, [this.name]));\n }\n }, {\n key: \"playing\",\n value: function playing() {\n this.trigger(Events.CONTAINER_PLAY, this.name);\n }\n }, {\n key: \"paused\",\n value: function paused() {\n this.trigger(Events.CONTAINER_PAUSE, this.name);\n }\n /**\n * plays the playback\n * @method play\n */\n\n }, {\n key: \"play\",\n value: function play() {\n this.playback.play();\n }\n /**\n * stops the playback\n * @method stop\n */\n\n }, {\n key: \"stop\",\n value: function stop() {\n this.playback.stop();\n this.currentTime = 0;\n }\n /**\n * pauses the playback\n * @method pause\n */\n\n }, {\n key: \"pause\",\n value: function pause() {\n this.playback.pause();\n }\n }, {\n key: \"onEnded\",\n value: function onEnded() {\n this.trigger(Events.CONTAINER_ENDED, this, this.name);\n this.currentTime = 0;\n }\n }, {\n key: \"stopped\",\n value: function stopped() {\n this.trigger(Events.CONTAINER_STOP);\n }\n }, {\n key: \"clicked\",\n value: function clicked() {\n var _this2 = this;\n\n if (!this.options.chromeless || this.options.allowUserInteraction) {\n // The event is delayed because it can be canceled by a double-click event\n // An example of use is to prevent playback from pausing when switching to full screen\n this.clickTimer = setTimeout(function () {\n _this2.clickTimer && _this2.trigger(Events.CONTAINER_CLICK, _this2, _this2.name);\n }, this.clickDelay);\n }\n }\n }, {\n key: \"cancelClicked\",\n value: function cancelClicked() {\n clearTimeout(this.clickTimer);\n this.clickTimer = null;\n }\n }, {\n key: \"dblClicked\",\n value: function dblClicked() {\n if (!this.options.chromeless || this.options.allowUserInteraction) {\n this.cancelClicked();\n this.trigger(Events.CONTAINER_DBLCLICK, this, this.name);\n }\n }\n }, {\n key: \"dblTap\",\n value: function dblTap(evt) {\n var _this3 = this;\n\n if (!this.options.chromeless || this.options.allowUserInteraction) {\n this.dblTapHandler.handle(evt, function () {\n _this3.cancelClicked();\n\n _this3.trigger(Events.CONTAINER_DBLCLICK, _this3, _this3.name);\n });\n }\n }\n }, {\n key: \"onContextMenu\",\n value: function onContextMenu(event) {\n if (!this.options.chromeless || this.options.allowUserInteraction) this.trigger(Events.CONTAINER_CONTEXTMENU, event, this.name);\n }\n }, {\n key: \"seek\",\n value: function seek(time) {\n this.playback.seek(time);\n }\n }, {\n key: \"onSeek\",\n value: function onSeek(time) {\n this.trigger(Events.CONTAINER_SEEK, time, this.name);\n }\n }, {\n key: \"onSeeked\",\n value: function onSeeked() {\n this.trigger(Events.CONTAINER_SEEKED, this.name);\n }\n }, {\n key: \"seekPercentage\",\n value: function seekPercentage(percentage) {\n var duration = this.getDuration();\n\n if (percentage >= 0 && percentage <= 100) {\n var time = duration * (percentage / 100);\n this.seek(time);\n }\n }\n }, {\n key: \"setVolume\",\n value: function setVolume(value) {\n this.volume = parseFloat(value);\n this.trigger(Events.CONTAINER_VOLUME, this.volume, this.name);\n this.playback.volume(this.volume);\n }\n }, {\n key: \"fullscreen\",\n value: function fullscreen() {\n this.trigger(Events.CONTAINER_FULLSCREEN, this.name);\n }\n }, {\n key: \"onBuffering\",\n value: function onBuffering() {\n this.trigger(Events.CONTAINER_STATE_BUFFERING, this.name);\n }\n }, {\n key: \"bufferfull\",\n value: function bufferfull() {\n this.trigger(Events.CONTAINER_STATE_BUFFERFULL, this.name);\n }\n /**\n * adds plugin to the container\n * @method addPlugin\n * @param {Object} plugin\n */\n\n }, {\n key: \"addPlugin\",\n value: function addPlugin(plugin) {\n this.plugins.push(plugin);\n }\n /**\n * checks if a plugin, given its name, exist\n * @method hasPlugin\n * @param {String} name\n * @return {Boolean}\n */\n\n }, {\n key: \"hasPlugin\",\n value: function hasPlugin(name) {\n return !!this.getPlugin(name);\n }\n /**\n * get the plugin given its name\n * @method getPlugin\n * @param {String} name\n */\n\n }, {\n key: \"getPlugin\",\n value: function getPlugin(name) {\n return this.plugins.filter(function (plugin) {\n return plugin.name === name;\n })[0];\n }\n }, {\n key: \"mouseEnter\",\n value: function mouseEnter() {\n if (!this.options.chromeless || this.options.allowUserInteraction) this.trigger(Events.CONTAINER_MOUSE_ENTER);\n }\n }, {\n key: \"mouseLeave\",\n value: function mouseLeave() {\n if (!this.options.chromeless || this.options.allowUserInteraction) this.trigger(Events.CONTAINER_MOUSE_LEAVE);\n }\n }, {\n key: \"mouseUp\",\n value: function mouseUp() {\n if (!this.options.chromeless || this.options.allowUserInteraction) this.trigger(Events.CONTAINER_MOUSE_UP);\n }\n }, {\n key: \"mouseDown\",\n value: function mouseDown() {\n if (!this.options.chromeless || this.options.allowUserInteraction) this.trigger(Events.CONTAINER_MOUSE_DOWN);\n }\n }, {\n key: \"settingsUpdate\",\n value: function settingsUpdate() {\n this.settings = this.playback.settings;\n this.trigger(Events.CONTAINER_SETTINGSUPDATE);\n }\n }, {\n key: \"highDefinitionUpdate\",\n value: function highDefinitionUpdate(isHD) {\n this.trigger(Events.CONTAINER_HIGHDEFINITIONUPDATE, isHD);\n }\n }, {\n key: \"isHighDefinitionInUse\",\n value: function isHighDefinitionInUse() {\n return this.playback.isHighDefinitionInUse();\n }\n }, {\n key: \"disableMediaControl\",\n value: function disableMediaControl() {\n if (!this.mediaControlDisabled) {\n this.mediaControlDisabled = true;\n this.trigger(Events.CONTAINER_MEDIACONTROL_DISABLE);\n }\n }\n }, {\n key: \"enableMediaControl\",\n value: function enableMediaControl() {\n if (this.mediaControlDisabled) {\n this.mediaControlDisabled = false;\n this.trigger(Events.CONTAINER_MEDIACONTROL_ENABLE);\n }\n }\n }, {\n key: \"updateStyle\",\n value: function updateStyle() {\n if (!this.options.chromeless || this.options.allowUserInteraction) this.$el.removeClass('chromeless');else this.$el.addClass('chromeless');\n }\n }, {\n key: \"enableResizeObserver\",\n value: function enableResizeObserver() {\n var _this4 = this;\n\n this.disableResizeObserver();\n this.resizeObserverInterval = setInterval(function () {\n return _this4.checkResize();\n }, 500);\n }\n }, {\n key: \"disableResizeObserver\",\n value: function disableResizeObserver() {\n this.resizeObserverInterval && clearInterval(this.resizeObserverInterval);\n }\n }, {\n key: \"checkResize\",\n value: function checkResize() {\n var newSize = {\n width: this.el.clientWidth,\n height: this.el.clientHeight\n };\n\n var _ref = this.currentSize || {},\n width = _ref.width,\n height = _ref.height;\n\n var isResize = height !== newSize.height || width !== newSize.width;\n\n if (isResize) {\n this.currentSize = newSize;\n this.trigger(Events.CONTAINER_RESIZE, newSize);\n }\n }\n /**\n * enables to configure the container after its creation\n * @method configure\n * @param {Object} options all the options to change in form of a javascript object\n */\n\n }, {\n key: \"configure\",\n value: function configure(options) {\n this._options = zepto.extend(true, this._options, options);\n this.updateStyle();\n this.playback.configure(this.options);\n this.trigger(Events.CONTAINER_OPTIONS_CHANGE);\n }\n }, {\n key: \"render\",\n value: function render() {\n var style = Styler.getStyleFor(css_248z.toString(), {\n baseUrl: this.options.baseUrl\n });\n this.$el.append(style[0]);\n this.$el.append(this.playback.render().el);\n this.updateStyle();\n this.checkResize();\n this.enableResizeObserver();\n return this;\n }\n }]);\n\n return Container;\n}(UIObject);\nObject.assign(Container.prototype, ErrorMixin);\n\n/**\n * An abstraction to represent a generic playback, it's like an interface to be implemented by subclasses.\n * @class Playback\n * @constructor\n * @extends UIObject\n * @module base\n */\n\nvar Playback = /*#__PURE__*/function (_UIObject) {\n _inherits(Playback, _UIObject);\n\n var _super = _createSuper(Playback);\n\n _createClass(Playback, [{\n key: \"isAudioOnly\",\n\n /**\n * Determine if the playback does not contain video/has video but video should be ignored.\n * @property isAudioOnly\n * @type Boolean\n */\n get: function get() {\n return false;\n }\n }, {\n key: \"isAdaptive\",\n get: function get() {\n return false;\n }\n /**\n * Determine if the playback has ended.\n * @property ended\n * @type Boolean\n */\n\n }, {\n key: \"ended\",\n get: function get() {\n return false;\n }\n /**\n * The internationalization plugin.\n * @property i18n\n * @type {Strings}\n */\n\n }, {\n key: \"i18n\",\n get: function get() {\n return this._i18n;\n }\n /**\n * Determine if the playback is having to buffer in order for\n * playback to be smooth.\n * (i.e if a live stream is playing smoothly, this will be false)\n * @property buffering\n * @type Boolean\n */\n\n }, {\n key: \"buffering\",\n get: function get() {\n return false;\n }\n /**\n * @method constructor\n * @param {Object} options the options object\n * @param {Strings} i18n the internationalization component\n */\n\n }]);\n\n function Playback(options, i18n, playerError) {\n var _this;\n\n _classCallCheck(this, Playback);\n\n _this = _super.call(this, options);\n _this.settings = {};\n _this._i18n = i18n;\n _this.playerError = playerError;\n _this._consented = false;\n return _this;\n }\n /**\n * Gives user consent to playback (mobile devices).\n * @method consent\n * @param {Function} callback function called when playback is consented\n */\n\n\n _createClass(Playback, [{\n key: \"consent\",\n value: function consent(cb) {\n typeof cb === 'function' && cb();\n }\n /**\n * plays the playback.\n * @method play\n */\n\n }, {\n key: \"play\",\n value: function play() {}\n /**\n * pauses the playback.\n * @method pause\n */\n\n }, {\n key: \"pause\",\n value: function pause() {}\n /**\n * stops the playback.\n * @method stop\n */\n\n }, {\n key: \"stop\",\n value: function stop() {}\n /**\n * seeks the playback to a given `time` in seconds\n * @method seek\n * @param {Number} time should be a number between 0 and the video duration\n */\n\n }, {\n key: \"seek\",\n value: function seek(time) {} // eslint-disable-line no-unused-vars\n\n /**\n * seeks the playback to a given `percentage` in percentage\n * @method seekPercentage\n * @param {Number} time should be a number between 0 and 100\n */\n\n }, {\n key: \"seekPercentage\",\n value: function seekPercentage(percentage) {} // eslint-disable-line no-unused-vars\n\n /**\n * The time that \"0\" now represents relative to when playback started.\n * For a stream with a sliding window this will increase as content is\n * removed from the beginning.\n * @method getStartTimeOffset\n * @return {Number} time (in seconds) that time \"0\" represents.\n */\n\n }, {\n key: \"getStartTimeOffset\",\n value: function getStartTimeOffset() {\n return 0;\n }\n /**\n * gets the duration in seconds\n * @method getDuration\n * @return {Number} duration (in seconds) of the current source\n */\n\n }, {\n key: \"getDuration\",\n value: function getDuration() {\n return 0;\n }\n /**\n * checks if the playback is playing.\n * @method isPlaying\n * @return {Boolean} `true` if the current playback is playing, otherwise `false`\n */\n\n }, {\n key: \"isPlaying\",\n value: function isPlaying() {\n return false;\n }\n /**\n * checks if the playback is ready.\n * @property isReady\n * @type {Boolean} `true` if the current playback is ready, otherwise `false`\n */\n\n }, {\n key: \"getPlaybackType\",\n // eslint-disable-line no-unused-vars\n\n /**\n * gets the playback type (`'vod', 'live', 'aod'`)\n * @method getPlaybackType\n * @return {String} you should write the playback type otherwise it'll assume `'no_op'`\n * @example\n * ```javascript\n * html5VideoPlayback.getPlaybackType() //vod\n * html5AudioPlayback.getPlaybackType() //aod\n * html5VideoPlayback.getPlaybackType() //live\n * flashHlsPlayback.getPlaybackType() //live\n * ```\n */\n value: function getPlaybackType() {\n return Playback.NO_OP;\n }\n /**\n * checks if the playback is in HD.\n * @method isHighDefinitionInUse\n * @return {Boolean} `true` if the playback is playing in HD, otherwise `false`\n */\n\n }, {\n key: \"isHighDefinitionInUse\",\n value: function isHighDefinitionInUse() {\n return false;\n }\n /**\n * mutes the playback\n * @method mute\n */\n\n }, {\n key: \"mute\",\n value: function mute() {}\n /**\n * restores the playback volume\n * @method unmute\n */\n\n }, {\n key: \"unmute\",\n value: function unmute() {}\n /**\n * sets the volume for the playback\n * @method volume\n * @param {Number} value a number between 0 (`muted`) to 100 (`max`)\n */\n\n }, {\n key: \"volume\",\n value: function volume(value) {} // eslint-disable-line no-unused-vars\n\n /**\n * enables to configure the playback after its creation\n * @method configure\n * @param {Object} options all the options to change in form of a javascript object\n */\n\n }, {\n key: \"configure\",\n value: function configure(options) {\n this._options = zepto.extend(true, this._options, options);\n }\n /**\n * attempt to autoplays the playback.\n * @method attemptAutoPlay\n */\n\n }, {\n key: \"attemptAutoPlay\",\n value: function attemptAutoPlay() {\n var _this2 = this;\n\n this.canAutoPlay(function (result, error) {\n // eslint-disable-line no-unused-vars\n result && _this2.play();\n });\n }\n /**\n * checks if the playback can autoplay.\n * @method canAutoPlay\n * @param {Function} callback function where first param is Boolean and second param is playback Error or null\n */\n\n }, {\n key: \"canAutoPlay\",\n value: function canAutoPlay(cb) {\n cb(true, null); // Assume playback can autoplay by default\n }\n }, {\n key: \"isReady\",\n get: function get() {\n return false;\n }\n /**\n * checks if the playback has closed caption tracks.\n * @property hasClosedCaptionsTracks\n * @type {Boolean}\n */\n\n }, {\n key: \"hasClosedCaptionsTracks\",\n get: function get() {\n return this.closedCaptionsTracks.length > 0;\n }\n /**\n * gets the playback available closed caption tracks.\n * @property closedCaptionsTracks\n * @type {Array} an array of objects with at least 'id' and 'name' properties\n */\n\n }, {\n key: \"closedCaptionsTracks\",\n get: function get() {\n return [];\n }\n /**\n * gets the selected closed caption track index. (-1 is disabled)\n * @property closedCaptionsTrackId\n * @type {Number}\n */\n\n }, {\n key: \"closedCaptionsTrackId\",\n get: function get() {\n return -1;\n }\n /**\n * sets the selected closed caption track index. (-1 is disabled)\n * @property closedCaptionsTrackId\n * @type {Number}\n */\n ,\n set: function set(trackId) {}\n }]);\n\n return Playback;\n}(UIObject);\nObject.assign(Playback.prototype, ErrorMixin);\n\nPlayback.extend = function (properties) {\n return extend(Playback, properties);\n};\n/**\n * checks if the playback can play a given `source`\n * If a mimeType is provided then this will be used instead of inferring the mimetype\n * from the source extension.\n * @method canPlay\n * @static\n * @param {String} source the given source ex: `http://example.com/play.mp4`\n * @param {String} [mimeType] the given mime type, ex: `'application/vnd.apple.mpegurl'`\n * @return {Boolean} `true` if the playback is playable, otherwise `false`\n */\n\n\nPlayback.canPlay = function (source, mimeType) {\n // eslint-disable-line no-unused-vars\n return false;\n};\n/**\n * a playback type for video on demand\n *\n * @property VOD\n * @static\n * @type String\n */\n\n\nPlayback.VOD = 'vod';\n/**\n * a playback type for audio on demand\n *\n * @property AOD\n * @static\n * @type String\n */\n\nPlayback.AOD = 'aod';\n/**\n * a playback type for live video\n *\n * @property LIVE\n * @static\n * @type String\n */\n\nPlayback.LIVE = 'live';\n/**\n * a default playback type\n *\n * @property NO_OP\n * @static\n * @type String\n */\n\nPlayback.NO_OP = 'no_op';\n/**\n * the plugin type\n *\n * @property type\n * @static\n * @type String\n */\n\nPlayback.type = 'playback';\n\nvar ContainerFactory = /*#__PURE__*/function (_BaseObject) {\n _inherits(ContainerFactory, _BaseObject);\n\n var _super = _createSuper(ContainerFactory);\n\n _createClass(ContainerFactory, [{\n key: \"options\",\n get: function get() {\n return this._options;\n },\n set: function set(options) {\n this._options = options;\n }\n }]);\n\n function ContainerFactory(options, loader, i18n, playerError) {\n var _this;\n\n _classCallCheck(this, ContainerFactory);\n\n _this = _super.call(this, options);\n _this._i18n = i18n;\n _this.loader = loader;\n _this.playerError = playerError;\n return _this;\n }\n\n _createClass(ContainerFactory, [{\n key: \"createContainers\",\n value: function createContainers() {\n var _this2 = this;\n\n return zepto.Deferred(function (promise) {\n promise.resolve(_this2.options.sources.map(function (source) {\n return _this2.createContainer(source);\n }));\n });\n }\n }, {\n key: \"findPlaybackPlugin\",\n value: function findPlaybackPlugin(source, mimeType) {\n return this.loader.playbackPlugins.filter(function (p) {\n return p.canPlay(source, mimeType);\n })[0];\n }\n }, {\n key: \"createContainer\",\n value: function createContainer(source) {\n var resolvedSource = null;\n var mimeType = this.options.mimeType;\n\n if (_typeof(source) === 'object') {\n resolvedSource = source.source.toString();\n if (source.mimeType) mimeType = source.mimeType;\n } else {\n resolvedSource = source.toString();\n }\n\n if (resolvedSource.match(/^\\/\\//)) resolvedSource = window.location.protocol + resolvedSource;\n\n var options = _objectSpread2(_objectSpread2({}, this.options), {}, {\n src: resolvedSource,\n mimeType: mimeType\n });\n\n var playbackPlugin = this.findPlaybackPlugin(resolvedSource, mimeType); // Fallback to empty playback object until we sort out unsupported sources error without NoOp playback\n\n var playback = playbackPlugin ? new playbackPlugin(options, this._i18n, this.playerError) : new Playback();\n options = _objectSpread2(_objectSpread2({}, options), {}, {\n playback: playback\n });\n var container = new Container(options, this._i18n, this.playerError);\n var defer = zepto.Deferred();\n defer.promise(container);\n this.addContainerPlugins(container);\n this.listenToOnce(container, Events.CONTAINER_READY, function () {\n return defer.resolve(container);\n });\n return container;\n }\n }, {\n key: \"addContainerPlugins\",\n value: function addContainerPlugins(container) {\n this.loader.containerPlugins.forEach(function (Plugin) {\n container.addPlugin(new Plugin(container));\n });\n }\n }]);\n\n return ContainerFactory;\n}(BaseObject);\n\nvar css_248z$1 = \"[data-player] {\\n -webkit-touch-callout: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n -o-user-select: none;\\n user-select: none;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n transform: translate3d(0, 0, 0);\\n position: relative;\\n margin: 0;\\n padding: 0;\\n border: 0;\\n font-style: normal;\\n font-weight: normal;\\n text-align: center;\\n overflow: hidden;\\n font-size: 100%;\\n font-family: \\\"Roboto\\\", \\\"Open Sans\\\", Arial, sans-serif;\\n text-shadow: 0 0 0;\\n box-sizing: border-box; }\\n [data-player]:focus {\\n outline: 0; }\\n [data-player] * {\\n box-sizing: inherit; }\\n [data-player] > * {\\n float: none;\\n max-width: none; }\\n [data-player] > div {\\n display: block; }\\n [data-player].fullscreen {\\n width: 100% !important;\\n height: 100% !important;\\n top: 0;\\n left: 0; }\\n [data-player].nocursor {\\n cursor: none; }\\n\\n.clappr-style {\\n display: none !important; }\\n\";\n\nvar css_248z$2 = \"[data-player] div, [data-player] span, [data-player] applet, [data-player] object, [data-player] iframe,\\n[data-player] h1, [data-player] h2, [data-player] h3, [data-player] h4, [data-player] h5, [data-player] h6, [data-player] p, [data-player] blockquote, [data-player] pre,\\n[data-player] a, [data-player] abbr, [data-player] acronym, [data-player] address, [data-player] big, [data-player] cite, [data-player] code,\\n[data-player] del, [data-player] dfn, [data-player] em, [data-player] img, [data-player] ins, [data-player] kbd, [data-player] q, [data-player] s, [data-player] samp,\\n[data-player] small, [data-player] strike, [data-player] strong, [data-player] sub, [data-player] sup, [data-player] tt, [data-player] var,\\n[data-player] b, [data-player] u, [data-player] i, [data-player] center,\\n[data-player] dl, [data-player] dt, [data-player] dd, [data-player] ol, [data-player] ul, [data-player] li,\\n[data-player] fieldset, [data-player] form, [data-player] label, [data-player] legend,\\n[data-player] table, [data-player] caption, [data-player] tbody, [data-player] tfoot, [data-player] thead, [data-player] tr, [data-player] th, [data-player] td,\\n[data-player] article, [data-player] aside, [data-player] canvas, [data-player] details, [data-player] embed,\\n[data-player] figure, [data-player] figcaption, [data-player] footer, [data-player] header, [data-player] hgroup,\\n[data-player] menu, [data-player] nav, [data-player] output, [data-player] ruby, [data-player] section, [data-player] summary,\\n[data-player] time, [data-player] mark, [data-player] audio, [data-player] video {\\n margin: 0;\\n padding: 0;\\n border: 0;\\n font: inherit;\\n font-size: 100%;\\n vertical-align: baseline; }\\n\\n[data-player] table {\\n border-collapse: collapse;\\n border-spacing: 0; }\\n\\n[data-player] caption, [data-player] th, [data-player] td {\\n text-align: left;\\n font-weight: normal;\\n vertical-align: middle; }\\n\\n[data-player] q, [data-player] blockquote {\\n quotes: none; }\\n [data-player] q:before, [data-player] q:after, [data-player] blockquote:before, [data-player] blockquote:after {\\n content: \\\"\\\";\\n content: none; }\\n\\n[data-player] a img {\\n border: none; }\\n\";\n\n/**\n * The Core is responsible to manage Containers and the player state.\n * @class Core\n * @constructor\n * @extends UIObject\n * @module components\n */\n\nvar Core = /*#__PURE__*/function (_UIObject) {\n _inherits(Core, _UIObject);\n\n var _super = _createSuper(Core);\n\n _createClass(Core, [{\n key: \"events\",\n get: function get() {\n return {\n 'webkitfullscreenchange': 'handleFullscreenChange',\n 'mousemove': 'onMouseMove',\n 'mouseleave': 'onMouseLeave'\n };\n }\n }, {\n key: \"attributes\",\n get: function get() {\n return {\n 'data-player': '',\n tabindex: 9999\n };\n }\n /**\n * checks if the core is ready.\n * @property isReady\n * @type {Boolean} `true` if the core is ready, otherwise `false`\n */\n\n }, {\n key: \"isReady\",\n get: function get() {\n return !!this.ready;\n }\n /**\n * The internationalization plugin.\n * @property i18n\n * @type {Strings}\n */\n\n }, {\n key: \"i18n\",\n get: function get() {\n return this.getPlugin('strings') || {\n t: function t(key) {\n return key;\n }\n };\n }\n /**\n * @deprecated\n * This property currently exists for backward compatibility reasons.\n * If you need to access the media control instance, use the method getPlugin('media_control').\n * This approach is still not recommended.\n */\n\n }, {\n key: \"mediaControl\",\n get: function get() {\n return this._mediaControl || (this._mediaControl = this.getPlugin('media_control')) || this.dummyMediaControl;\n }\n }, {\n key: \"dummyMediaControl\",\n get: function get() {\n if (this._dummyMediaControl) return this._dummyMediaControl;\n this._dummyMediaControl = new UICorePlugin(this);\n return this._dummyMediaControl;\n }\n /**\n * gets the active container reference.\n * @property activeContainer\n * @type {Object}\n */\n\n }, {\n key: \"activeContainer\",\n get: function get() {\n return this._activeContainer;\n }\n /**\n * sets the active container reference and trigger a event with the new reference.\n * @property activeContainer\n * @type {Object}\n */\n ,\n set: function set(container) {\n this._activeContainer = container;\n this.trigger(Events.CORE_ACTIVE_CONTAINER_CHANGED, this._activeContainer);\n }\n /**\n * gets the active playback reference.\n * @property activePlayback\n * @type {Object}\n */\n\n }, {\n key: \"activePlayback\",\n get: function get() {\n return this.activeContainer && this.activeContainer.playback;\n }\n }]);\n\n function Core(options) {\n var _this;\n\n _classCallCheck(this, Core);\n\n _this = _super.call(this, options);\n _this.playerError = new PlayerError(options, _assertThisInitialized(_this));\n\n _this.configureDomRecycler();\n\n _this.firstResize = true;\n _this.plugins = [];\n _this.containers = []; //FIXME fullscreen api sucks\n\n _this._boundFullscreenHandler = function () {\n return _this.handleFullscreenChange();\n };\n\n zepto(document).bind('fullscreenchange', _this._boundFullscreenHandler);\n zepto(document).bind('MSFullscreenChange', _this._boundFullscreenHandler);\n zepto(document).bind('mozfullscreenchange', _this._boundFullscreenHandler);\n Browser.isMobile && zepto(window).bind('resize', function (o) {\n _this.handleWindowResize(o);\n });\n return _this;\n }\n\n _createClass(Core, [{\n key: \"configureDomRecycler\",\n value: function configureDomRecycler() {\n var recycleVideo = this.options && this.options.playback && this.options.playback.recycleVideo;\n DomRecycler.configure({\n recycleVideo: recycleVideo\n });\n }\n }, {\n key: \"createContainers\",\n value: function createContainers(options) {\n this.defer = zepto.Deferred();\n this.defer.promise(this);\n this.containerFactory = new ContainerFactory(options, options.loader, this.i18n, this.playerError);\n this.prepareContainers();\n }\n }, {\n key: \"prepareContainers\",\n value: function prepareContainers() {\n var _this2 = this;\n\n this.containerFactory.createContainers().then(function (containers) {\n return _this2.setupContainers(containers);\n }).then(function (containers) {\n return _this2.resolveOnContainersReady(containers);\n });\n }\n }, {\n key: \"updateSize\",\n value: function updateSize() {\n this.isFullscreen() ? this.setFullscreen() : this.setPlayerSize();\n }\n }, {\n key: \"setFullscreen\",\n value: function setFullscreen() {\n if (!Browser.isiOS) {\n this.$el.addClass('fullscreen');\n this.$el.removeAttr('style');\n this.previousSize = {\n width: this.options.width,\n height: this.options.height\n };\n this.currentSize = {\n width: zepto(window).width(),\n height: zepto(window).height()\n };\n }\n }\n }, {\n key: \"setPlayerSize\",\n value: function setPlayerSize() {\n this.$el.removeClass('fullscreen');\n this.currentSize = this.previousSize;\n this.previousSize = {\n width: zepto(window).width(),\n height: zepto(window).height()\n };\n this.resize(this.currentSize);\n }\n }, {\n key: \"resize\",\n value: function resize(options) {\n if (!isNumber(options.height) && !isNumber(options.width)) {\n this.el.style.height = \"\".concat(options.height);\n this.el.style.width = \"\".concat(options.width);\n } else {\n this.el.style.height = \"\".concat(options.height, \"px\");\n this.el.style.width = \"\".concat(options.width, \"px\");\n }\n\n this.previousSize = {\n width: this.options.width,\n height: this.options.height\n };\n this.options.width = options.width;\n this.options.height = options.height;\n this.currentSize = options;\n this.triggerResize(this.currentSize);\n }\n }, {\n key: \"enableResizeObserver\",\n value: function enableResizeObserver() {\n var _this3 = this;\n\n this.disableResizeObserver();\n\n var checkSizeCallback = function checkSizeCallback() {\n _this3.triggerResize({\n width: _this3.el.clientWidth,\n height: _this3.el.clientHeight\n });\n };\n\n this.resizeObserverInterval = setInterval(checkSizeCallback, 500);\n }\n }, {\n key: \"triggerResize\",\n value: function triggerResize(newSize) {\n var thereWasChange = this.firstResize || this.oldHeight !== newSize.height || this.oldWidth !== newSize.width;\n\n if (thereWasChange) {\n this.oldHeight = newSize.height;\n this.oldWidth = newSize.width;\n this.computedSize = newSize;\n this.firstResize = false;\n this.trigger(Events.CORE_RESIZE, newSize);\n }\n }\n }, {\n key: \"disableResizeObserver\",\n value: function disableResizeObserver() {\n this.resizeObserverInterval && clearInterval(this.resizeObserverInterval);\n this.resizeObserverInterval = null;\n }\n }, {\n key: \"resolveOnContainersReady\",\n value: function resolveOnContainersReady(containers) {\n var _this4 = this;\n\n zepto.when.apply(zepto, containers).done(function () {\n _this4.defer.resolve(_this4);\n\n _this4.ready = true;\n\n _this4.trigger(Events.CORE_READY);\n });\n }\n }, {\n key: \"addPlugin\",\n value: function addPlugin(plugin) {\n this.plugins.push(plugin);\n }\n }, {\n key: \"hasPlugin\",\n value: function hasPlugin(name) {\n return !!this.getPlugin(name);\n }\n }, {\n key: \"getPlugin\",\n value: function getPlugin(name) {\n return this.plugins.filter(function (plugin) {\n return plugin.name === name;\n })[0];\n }\n }, {\n key: \"load\",\n value: function load(sources, mimeType) {\n this.options.mimeType = mimeType;\n sources = sources && sources.constructor === Array ? sources : [sources];\n this.options.sources = sources;\n this.containers.forEach(function (container) {\n return container.destroy();\n });\n this.containerFactory.options = zepto.extend(true, this.options, {\n sources: sources\n });\n this.prepareContainers();\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.disableResizeObserver();\n this.containers.forEach(function (container) {\n return container.destroy();\n });\n this.plugins.forEach(function (plugin) {\n return plugin.destroy();\n });\n this.$el.remove();\n zepto(document).unbind('fullscreenchange', this._boundFullscreenHandler);\n zepto(document).unbind('MSFullscreenChange', this._boundFullscreenHandler);\n zepto(document).unbind('mozfullscreenchange', this._boundFullscreenHandler);\n this.stopListening();\n }\n }, {\n key: \"handleFullscreenChange\",\n value: function handleFullscreenChange() {\n this.trigger(Events.CORE_FULLSCREEN, this.isFullscreen());\n this.updateSize();\n }\n }, {\n key: \"handleWindowResize\",\n value: function handleWindowResize(event) {\n var orientation = window.innerWidth > window.innerHeight ? 'landscape' : 'portrait';\n if (this._screenOrientation === orientation) return;\n this._screenOrientation = orientation;\n this.triggerResize({\n width: this.el.clientWidth,\n height: this.el.clientHeight\n });\n this.trigger(Events.CORE_SCREEN_ORIENTATION_CHANGED, {\n event: event,\n orientation: this._screenOrientation\n });\n }\n }, {\n key: \"removeContainer\",\n value: function removeContainer(container) {\n this.stopListening(container);\n this.containers = this.containers.filter(function (c) {\n return c !== container;\n });\n }\n }, {\n key: \"setupContainer\",\n value: function setupContainer(container) {\n this.listenTo(container, Events.CONTAINER_DESTROYED, this.removeContainer);\n this.containers.push(container);\n }\n }, {\n key: \"setupContainers\",\n value: function setupContainers(containers) {\n containers.forEach(this.setupContainer.bind(this));\n this.trigger(Events.CORE_CONTAINERS_CREATED);\n this.renderContainers();\n this.activeContainer = containers[0];\n this.render();\n this.appendToParent();\n return this.containers;\n }\n }, {\n key: \"renderContainers\",\n value: function renderContainers() {\n var _this5 = this;\n\n this.containers.forEach(function (container) {\n return _this5.el.appendChild(container.render().el);\n });\n }\n }, {\n key: \"createContainer\",\n value: function createContainer(source, options) {\n var container = this.containerFactory.createContainer(source, options);\n this.setupContainer(container);\n this.el.appendChild(container.render().el);\n return container;\n }\n /**\n * @deprecated\n * This method currently exists for retrocompatibility reasons.\n * If you want the current container reference, use the activeContainer getter.\n */\n\n }, {\n key: \"getCurrentContainer\",\n value: function getCurrentContainer() {\n return this.activeContainer;\n }\n /**\n * @deprecated\n * This method currently exists for retrocompatibility reasons.\n * If you want the current playback reference, use the activePlayback getter.\n */\n\n }, {\n key: \"getCurrentPlayback\",\n value: function getCurrentPlayback() {\n return this.activePlayback;\n }\n }, {\n key: \"getPlaybackType\",\n value: function getPlaybackType() {\n return this.activeContainer && this.activeContainer.getPlaybackType();\n }\n }, {\n key: \"isFullscreen\",\n value: function isFullscreen() {\n // Ensure current instance is in fullscreen mode by checking fullscreen element\n var fullscreenElement = Fullscreen.fullscreenElement();\n if (!fullscreenElement) return false;\n var playbackEl = this.activePlayback && this.activePlayback.el;\n return fullscreenElement === this.el || fullscreenElement === playbackEl;\n }\n }, {\n key: \"toggleFullscreen\",\n value: function toggleFullscreen() {\n var _this6 = this;\n\n if (this.isFullscreen()) {\n Fullscreen.cancelFullscreen();\n !Browser.isiOS && this.$el.removeClass('fullscreen nocursor');\n } else {\n var fullscreenEl = Browser.isiOS ? this.activePlayback && this.activePlayback.el : this.el;\n if (!fullscreenEl) return;\n Browser.isSafari || Browser.isiOS ? // Safari doesn't return a promise like the other browsers. See more in https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen\n Fullscreen.requestFullscreen(fullscreenEl) : Fullscreen.requestFullscreen(fullscreenEl).then(function (_) {\n return _;\n }, function (error) {\n return setTimeout(function () {\n // fixes the issue https://github.com/clappr/clappr/issues/1860\n if (!_this6.isFullscreen()) throw new ReferenceError(error);\n }, 600);\n });\n !Browser.isiOS && this.$el.addClass('fullscreen');\n }\n }\n }, {\n key: \"onMouseMove\",\n value: function onMouseMove(event) {\n this.trigger(Events.CORE_MOUSE_MOVE, event);\n }\n }, {\n key: \"onMouseLeave\",\n value: function onMouseLeave(event) {\n this.trigger(Events.CORE_MOUSE_LEAVE, event);\n }\n /**\n * enables to configure the container after its creation\n * @method configure\n * @param {Object} options all the options to change in form of a javascript object\n */\n\n }, {\n key: \"configure\",\n value: function configure(options) {\n var _this7 = this;\n\n this._options = zepto.extend(true, this._options, options);\n this.configureDomRecycler();\n var sources = options.source || options.sources;\n sources && this.load(sources, options.mimeType || this.options.mimeType);\n this.trigger(Events.CORE_OPTIONS_CHANGE, options); // Trigger with newly provided options\n\n this.containers.forEach(function (container) {\n return container.configure(_this7.options);\n });\n }\n }, {\n key: \"appendToParent\",\n value: function appendToParent() {\n var style = Styler.getStyleFor(css_248z$1.toString(), {\n baseUrl: this.options.baseUrl\n });\n var resetStyle = Styler.getStyleFor(css_248z$2.toString(), {\n baseUrl: this.options.baseUrl\n });\n this.$el.append(style[0]);\n this.options.includeResetStyle && this.$el.append(resetStyle[0]);\n var hasCoreParent = this.$el.parent() && this.$el.parent().length;\n !hasCoreParent && this.$el.appendTo(this.options.parentElement);\n }\n }, {\n key: \"render\",\n value: function render() {\n this.options.width = this.options.width || this.$el.width();\n this.options.height = this.options.height || this.$el.height();\n var size = {\n width: this.options.width,\n height: this.options.height\n };\n this.previousSize = this.currentSize = this.computedSize = size;\n this.updateSize();\n this.enableResizeObserver();\n return this;\n }\n }]);\n\n return Core;\n}(UIObject);\nObject.assign(Core.prototype, ErrorMixin);\n\n/**\n * The Core Factory is responsible for instantiate the core and it's plugins.\n * @class CoreFactory\n * @constructor\n * @extends BaseObject\n * @module components\n */\n\nvar CoreFactory = /*#__PURE__*/function (_BaseObject) {\n _inherits(CoreFactory, _BaseObject);\n\n var _super = _createSuper(CoreFactory);\n\n _createClass(CoreFactory, [{\n key: \"loader\",\n get: function get() {\n return this.player.loader;\n }\n /**\n * it builds the core factory\n * @method constructor\n * @param {Player} player the player object\n */\n\n }]);\n\n function CoreFactory(player) {\n var _this;\n\n _classCallCheck(this, CoreFactory);\n\n _this = _super.call(this, player.options);\n _this.player = player;\n return _this;\n }\n /**\n * creates a core and its plugins\n * @method create\n * @return {Core} created core\n */\n\n\n _createClass(CoreFactory, [{\n key: \"create\",\n value: function create() {\n this.options.loader = this.loader;\n this.core = new Core(this.options);\n this.addCorePlugins();\n this.core.createContainers(this.options);\n return this.core;\n }\n /**\n * given the core plugins (`loader.corePlugins`) it builds each one\n * @method addCorePlugins\n * @return {Core} the core with all plugins\n */\n\n }, {\n key: \"addCorePlugins\",\n value: function addCorePlugins() {\n var _this2 = this;\n\n this.loader.corePlugins.forEach(function (Plugin) {\n var plugin = new Plugin(_this2.core);\n\n _this2.core.addPlugin(plugin);\n\n _this2.setupExternalInterface(plugin);\n });\n return this.core;\n }\n }, {\n key: \"setupExternalInterface\",\n value: function setupExternalInterface(plugin) {\n var externalFunctions = plugin.getExternalInterface();\n\n for (var key in externalFunctions) {\n this.player[key] = externalFunctions[key].bind(plugin);\n }\n }\n }]);\n\n return CoreFactory;\n}(BaseObject);\n\nvar VERSION_REGEX = /(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?/;\n\nvar Version = /*#__PURE__*/function () {\n _createClass(Version, null, [{\n key: \"parse\",\n value: function parse() {\n var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var matches = str.match(VERSION_REGEX) || [];\n\n var _matches = _slicedToArray(matches, 4),\n major = _matches[1],\n minor = _matches[2],\n patch = _matches[3];\n\n if (typeof major === 'undefined') return null;\n return new Version(major, minor, patch);\n }\n }]);\n\n function Version(major, minor, patch) {\n _classCallCheck(this, Version);\n\n this.major = parseInt(major || 0, 10);\n this.minor = parseInt(minor || 0, 10);\n this.patch = parseInt(patch || 0, 10);\n }\n\n _createClass(Version, [{\n key: \"compare\",\n value: function compare(other) {\n var diff = this.major - other.major;\n diff = diff || this.minor - other.minor;\n diff = diff || this.patch - other.patch;\n return diff;\n }\n }, {\n key: \"inc\",\n value: function inc() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'patch';\n typeof this[type] !== 'undefined' && (this[type] += 1);\n return this;\n }\n }, {\n key: \"satisfies\",\n value: function satisfies(min, max) {\n return this.compare(min) >= 0 && (!max || this.compare(max) < 0);\n }\n }, {\n key: \"toString\",\n value: function toString() {\n return \"\".concat(this.major, \".\").concat(this.minor, \".\").concat(this.patch);\n }\n }]);\n\n return Version;\n}();\n\nvar filterPluginsByType = function filterPluginsByType(plugins, type) {\n if (!plugins || !type) return {};\n return Object.entries(plugins).filter(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n value = _ref2[1];\n\n return value.type === type;\n }).reduce(function (obj, _ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n key = _ref4[0],\n value = _ref4[1];\n\n return obj[key] = value, obj;\n }, {});\n};\n/**\n * It keeps a list of the default plugins (playback, container, core) and it merges external plugins with its internals.\n * @class Loader\n * @constructor\n * @extends BaseObject\n * @module components\n */\n\n\nvar Loader = (function () {\n var registry = {\n plugins: {},\n playbacks: []\n };\n var currentVersion = \"0.4.19\";\n return /*#__PURE__*/function () {\n _createClass(Loader, null, [{\n key: \"checkVersionSupport\",\n value: function checkVersionSupport(entry) {\n var _entry$prototype = entry.prototype,\n supportedVersion = _entry$prototype.supportedVersion,\n name = _entry$prototype.name;\n\n if (!supportedVersion || !supportedVersion.min) {\n Log.warn('Loader', \"missing version information for \".concat(name));\n return false;\n }\n\n var maxVersion = supportedVersion.max ? Version.parse(supportedVersion.max) : Version.parse(supportedVersion.min).inc('minor');\n var minVersion = Version.parse(supportedVersion.min);\n\n if (!Version.parse(currentVersion).satisfies(minVersion, maxVersion)) {\n Log.warn('Loader', \"unsupported plugin \".concat(name, \": Clappr version \").concat(currentVersion, \" does not match required range [\").concat(minVersion, \",\").concat(maxVersion, \")\"));\n return false;\n }\n\n return true;\n }\n }, {\n key: \"registerPlugin\",\n value: function registerPlugin(pluginEntry) {\n if (!pluginEntry || !pluginEntry.prototype.name) {\n Log.warn('Loader', \"missing information to register plugin: \".concat(pluginEntry));\n return false;\n }\n\n Loader.checkVersionSupport(pluginEntry);\n var pluginRegistry = registry.plugins;\n if (!pluginRegistry) return false;\n var previousEntry = pluginRegistry[pluginEntry.prototype.name];\n if (previousEntry) Log.warn('Loader', \"overriding plugin entry: \".concat(pluginEntry.prototype.name, \" - \").concat(previousEntry));\n pluginRegistry[pluginEntry.prototype.name] = pluginEntry;\n return true;\n }\n }, {\n key: \"registerPlayback\",\n value: function registerPlayback(playbackEntry) {\n if (!playbackEntry || !playbackEntry.prototype.name) return false;\n Loader.checkVersionSupport(playbackEntry);\n var playbacks = registry.playbacks;\n var previousEntryIdx = playbacks.findIndex(function (entry) {\n return entry.prototype.name === playbackEntry.prototype.name;\n });\n\n if (previousEntryIdx >= 0) {\n var previousEntry = playbacks[previousEntryIdx];\n playbacks.splice(previousEntryIdx, 1);\n Log.warn('Loader', \"overriding playback entry: \".concat(previousEntry.name, \" - \").concat(previousEntry));\n }\n\n registry.playbacks = [playbackEntry].concat(_toConsumableArray(playbacks));\n return true;\n }\n }, {\n key: \"unregisterPlugin\",\n value: function unregisterPlugin(name) {\n if (!name) return false;\n var plugins = registry.plugins;\n var plugin = plugins[name];\n if (!plugin) return false;\n delete plugins[name];\n return true;\n }\n }, {\n key: \"unregisterPlayback\",\n value: function unregisterPlayback(name) {\n if (!name) return false;\n var playbacks = registry.playbacks;\n var index = playbacks.findIndex(function (entry) {\n return entry.prototype.name === name;\n });\n if (index < 0) return false;\n playbacks.splice(index, 1);\n registry.playbacks = playbacks;\n return true;\n }\n }, {\n key: \"clearPlugins\",\n value: function clearPlugins() {\n registry.plugins = {};\n }\n }, {\n key: \"clearPlaybacks\",\n value: function clearPlaybacks() {\n registry.playbacks = [];\n }\n /**\n * builds the loader\n * @method constructor\n * @param {Object} externalPlugins the external plugins\n * @param {Number} playerId you can embed multiple instances of clappr, therefore this is the unique id of each one.\n */\n\n }, {\n key: \"registeredPlaybacks\",\n get: function get() {\n return _toConsumableArray(registry.playbacks);\n }\n }, {\n key: \"registeredPlugins\",\n get: function get() {\n var plugins = registry.plugins;\n var core = filterPluginsByType(plugins, 'core');\n var container = filterPluginsByType(plugins, 'container');\n return {\n core: core,\n container: container\n };\n }\n }]);\n\n function Loader() {\n var externalPlugins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var playerId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n _classCallCheck(this, Loader);\n\n this.playerId = playerId;\n this.playbackPlugins = _toConsumableArray(registry.playbacks);\n var _Loader$registeredPlu = Loader.registeredPlugins,\n core = _Loader$registeredPlu.core,\n container = _Loader$registeredPlu.container;\n this.containerPlugins = Object.values(container);\n this.corePlugins = Object.values(core);\n if (!Array.isArray(externalPlugins)) this.validateExternalPluginsType(externalPlugins);\n this.addExternalPlugins(externalPlugins);\n }\n /**\n * groups by type the external plugins that were passed through `options.plugins` it they're on a flat array\n * @method addExternalPlugins\n * @private\n * @param {Object} an config object or an array of plugins\n * @return {Object} plugins the config object with the plugins separated by type\n */\n\n\n _createClass(Loader, [{\n key: \"groupPluginsByType\",\n value: function groupPluginsByType(plugins) {\n if (Array.isArray(plugins)) {\n plugins = plugins.reduce(function (memo, plugin) {\n memo[plugin.type] || (memo[plugin.type] = []);\n memo[plugin.type].push(plugin);\n return memo;\n }, {});\n }\n\n return plugins;\n }\n }, {\n key: \"removeDups\",\n value: function removeDups(list) {\n var useReversePrecedence = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var groupUp = function groupUp(plugins, plugin) {\n if (plugins[plugin.prototype.name] && useReversePrecedence) return plugins;\n plugins[plugin.prototype.name] && delete plugins[plugin.prototype.name];\n plugins[plugin.prototype.name] = plugin;\n return plugins;\n };\n\n var pluginsMap = list.reduceRight(groupUp, Object.create(null));\n var plugins = [];\n\n for (var key in pluginsMap) {\n plugins.unshift(pluginsMap[key]);\n }\n\n return plugins;\n }\n /**\n * adds all the external plugins that were passed through `options.plugins`\n * @method addExternalPlugins\n * @private\n * @param {Object} plugins the config object with all plugins\n */\n\n }, {\n key: \"addExternalPlugins\",\n value: function addExternalPlugins(plugins) {\n var loadExternalPluginsFirst = typeof plugins.loadExternalPluginsFirst === 'boolean' ? plugins.loadExternalPluginsFirst : true;\n var loadExternalPlaybacksFirst = typeof plugins.loadExternalPlaybacksFirst === 'boolean' ? plugins.loadExternalPlaybacksFirst : true;\n plugins = this.groupPluginsByType(plugins);\n\n if (plugins.playback) {\n var playbacks = plugins.playback.filter(function (playback) {\n return Loader.checkVersionSupport(playback), true;\n });\n this.playbackPlugins = loadExternalPlaybacksFirst ? this.removeDups(playbacks.concat(this.playbackPlugins)) : this.removeDups(this.playbackPlugins.concat(playbacks), true);\n }\n\n if (plugins.container) {\n var containerPlugins = plugins.container.filter(function (plugin) {\n return Loader.checkVersionSupport(plugin), true;\n });\n this.containerPlugins = loadExternalPluginsFirst ? this.removeDups(containerPlugins.concat(this.containerPlugins)) : this.removeDups(this.containerPlugins.concat(containerPlugins), true);\n }\n\n if (plugins.core) {\n var corePlugins = plugins.core.filter(function (plugin) {\n return Loader.checkVersionSupport(plugin), true;\n });\n this.corePlugins = loadExternalPluginsFirst ? this.removeDups(corePlugins.concat(this.corePlugins)) : this.removeDups(this.corePlugins.concat(corePlugins), true);\n }\n }\n /**\n * validate if the external plugins that were passed through `options.plugins` are associated to the correct type\n * @method validateExternalPluginsType\n * @private\n * @param {Object} plugins the config object with all plugins\n */\n\n }, {\n key: \"validateExternalPluginsType\",\n value: function validateExternalPluginsType(plugins) {\n var pluginTypes = ['playback', 'container', 'core'];\n pluginTypes.forEach(function (type) {\n (plugins[type] || []).forEach(function (el) {\n var errorMessage = 'external ' + el.type + ' plugin on ' + type + ' array';\n if (el.type !== type) throw new ReferenceError(errorMessage);\n });\n });\n }\n }]);\n\n return Loader;\n }();\n})();\n\nvar baseUrl = currentScriptUrl().replace(/\\/[^/]+$/, '');\n/**\n * @class Player\n * @constructor\n * @extends BaseObject\n * @module components\n * @example\n * ### Using the Player\n *\n * Add the following script on your HTML:\n * ```html\n * <head>\n * <script type=\"text/javascript\" src=\"http://cdn.clappr.io/latest/clappr.min.js\"></script>\n * </head>\n * ```\n * Now, create the player:\n * ```html\n * <body>\n * <div id=\"player\"></div>\n * <script>\n * var player = new Clappr.Player({source: \"http://your.video/here.mp4\", parentId: \"#player\"});\n * </script>\n * </body>\n * ```\n */\n\nvar Player = /*#__PURE__*/function (_BaseObject) {\n _inherits(Player, _BaseObject);\n\n var _super = _createSuper(Player);\n\n _createClass(Player, [{\n key: \"loader\",\n set: function set(loader) {\n this._loader = loader;\n },\n get: function get() {\n if (!this._loader) this._loader = new Loader(this.options.plugins || {}, this.options.playerId);\n return this._loader;\n }\n /**\n * Determine if the playback has ended.\n * @property ended\n * @type Boolean\n */\n\n }, {\n key: \"ended\",\n get: function get() {\n return this.core.activeContainer.ended;\n }\n /**\n * Determine if the playback is having to buffer in order for\n * playback to be smooth.\n * (i.e if a live stream is playing smoothly, this will be false)\n * @property buffering\n * @type Boolean\n */\n\n }, {\n key: \"buffering\",\n get: function get() {\n return this.core.activeContainer.buffering;\n }\n /*\n * determine if the player is ready.\n * @property isReady\n * @type {Boolean} `true` if the player is ready. ie PLAYER_READY event has fired\n */\n\n }, {\n key: \"isReady\",\n get: function get() {\n return !!this._ready;\n }\n /**\n * An events map that allows the user to add custom callbacks in player's options.\n * @property eventsMapping\n * @type {Object}\n */\n\n }, {\n key: \"eventsMapping\",\n get: function get() {\n return {\n onReady: Events.PLAYER_READY,\n onResize: Events.PLAYER_RESIZE,\n onPlay: Events.PLAYER_PLAY,\n onPause: Events.PLAYER_PAUSE,\n onStop: Events.PLAYER_STOP,\n onEnded: Events.PLAYER_ENDED,\n onSeek: Events.PLAYER_SEEK,\n onError: Events.PLAYER_ERROR,\n onTimeUpdate: Events.PLAYER_TIMEUPDATE,\n onVolumeUpdate: Events.PLAYER_VOLUMEUPDATE,\n onSubtitleAvailable: Events.PLAYER_SUBTITLE_AVAILABLE\n };\n }\n /**\n * @typedef {Object} PlaybackConfig\n * @prop {boolean} disableContextMenu\n * disables the context menu (right click) on the video element if a HTML5Video playback is used.\n * @prop {boolean} preload\n * video will be preloaded according to `preload` attribute options **default**: `'metadata'`\n * @prop {boolean} controls\n * enabled/disables displaying controls\n * @prop {boolean} crossOrigin\n * enables cross-origin capability for media-resources\n * @prop {boolean} playInline\n * enables in-line video elements\n * @prop {boolean} audioOnly\n * enforce audio-only playback (when possible)\n * @prop {Object} externalTracks\n * pass externaly loaded track to playback\n * @prop {Number} [maxBufferLength]\n * The default behavior for the **HLS playback** is to keep buffering indefinitely, even on VoD.\n * This replicates the behavior for progressive download, which continues buffering when pausing the video, thus making the video available for playback even on slow networks.\n * To change this behavior use `maxBufferLength` where **value is in seconds**.\n * @prop {Number} [maxBackBufferLength]\n * After how much distance of the playhead data should be pruned from the buffer (influences memory consumption\n * of adaptive media-engines like Hls.js or Shaka)\n * @prop {Number} [minBufferLength]\n * After how much data in the buffer at least we attempt to consume it (influences QoS-related behavior\n * of adaptive media-engines like Hls.js or Shaka). If this is too low, and the available bandwidth is varying a lot\n * and too close to the streamed bitrate, we may continuously hit under-runs.\n * @prop {Number} [initialBandwidthEstimate]\n * define an initial bandwidth \"guess\" (or previously stored/established value) for underlying adaptive-bitreate engines\n * of adaptive playback implementations, like Hls.js or Shaka\n * @prop {Number} [maxAdaptiveBitrate]\n * Limits the streamed bitrate (for adaptive media-engines in underlying playback implementations)\n * @prop {Object} [maxAdaptiveVideoDimensions]\n * Limits the video dimensions in adaptive media-engines. Should be a literal object with `height` and `width`.\n * @prop {Boolean}[enableAutomaticABR] **default**: `true`\n * Allows to enable/disable automatic bitrate switching in adaptive media-engines\n * @prop {String} [preferredTextLanguage] **default**: `'pt-BR'`\n * Allows to set a preferred text language, that may be enabled by the media-engine if available.\n * @prop {String} [preferredAudioLanguage] **default**: `'pt-BR'`\n * Allows to set a preferred audio language, that may be enabled by the media-engine if available.\n */\n\n /**\n * ## Player's constructor\n *\n * You might pass the options object to build the player.\n * ```javascript\n * var options = {source: \"http://example.com/video.mp4\", param1: \"val1\"};\n * var player = new Clappr.Player(options);\n * ```\n *\n * @method constructor\n * @param {Object} options Data\n * options to build a player instance\n * @param {Number} [options.width]\n * player's width **default**: `640`\n * @param {Number} [options.height]\n * player's height **default**: `360`\n * @param {String} [options.parentId]\n * the id of the element on the page that the player should be inserted into\n * @param {Object} [options.parent]\n * a reference to a dom element that the player should be inserted into\n * @param {String} [options.source]\n * The media source URL, or {source: <<source URL>>, mimeType: <<source mime type>>}\n * @param {Object} [options.sources]\n * An array of media source URL's, or an array of {source: <<source URL>>, mimeType: <<source mime type>>}\n * @param {Boolean} [options.autoPlay]\n * automatically play after page load **default**: `false`\n * @param {Boolean} [options.loop]\n * automatically replay after it ends **default**: `false`\n * @param {Boolean} [options.chromeless]\n * player acts in chromeless mode **default**: `false`\n * @param {Boolean} [options.allowUserInteraction]\n * whether or not the player should handle click events when in chromeless mode **default**: `false` on desktops browsers, `true` on mobile.\n * @param {Boolean} [options.disableKeyboardShortcuts]\n * disable keyboard shortcuts. **default**: `false`. `true` if `allowUserInteraction` is `false`.\n * @param {Boolean} [options.mute]\n * start the video muted **default**: `false`\n * @param {String} [options.mimeType]\n * add `mimeType: \"application/vnd.apple.mpegurl\"` if you need to use a url without extension.\n * @param {Boolean} [options.actualLiveTime]\n * show duration and seek time relative to actual time.\n * @param {String} [options.actualLiveServerTime]\n * specify server time as a string, format: \"2015/11/26 06:01:03\". This option is meant to be used with actualLiveTime.\n * @param {Boolean} [options.persistConfig]\n * persist player's settings (volume) through the same domain **default**: `true`\n * @param {String} [options.preload] @deprecated\n * video will be preloaded according to `preload` attribute options **default**: `'metadata'`\n * @param {Number} [options.maxBufferLength] @deprecated\n * the default behavior for the **HLS playback** is to keep buffering indefinitely, even on VoD.\n * This replicates the behavior for progressive download, which continues buffering when pausing the video, thus making the video available for playback even on slow networks.\n * To change this behavior use `maxBufferLength` where **value is in seconds**.\n * @param {String} [options.gaAccount]\n * enable Google Analytics events dispatch **(play/pause/stop/buffering/etc)** by adding your `gaAccount`\n * @param {String} [options.gaTrackerName]\n * besides `gaAccount` you can optionally, pass your favorite trackerName as `gaTrackerName`\n * @param {Object} [options.mediacontrol]\n * customize control bar colors, example: `mediacontrol: {seekbar: \"#E113D3\", buttons: \"#66B2FF\"}`\n * @param {Boolean} [options.hideMediaControl]\n * control media control auto hide **default**: `true`\n * @param {Boolean} [options.hideVolumeBar]\n * when embedded with width less than 320, volume bar will hide. You can force this behavior for all sizes by adding `true` **default**: `false`\n * @param {String} [options.watermark]\n * put `watermark: 'http://url/img.png'` on your embed parameters to automatically add watermark on your video.\n * You can customize corner position by defining position parameter. Positions can be `bottom-left`, `bottom-right`, `top-left` and `top-right`.\n * @param {String} [options.watermarkLink]\n * `watermarkLink: 'http://example.net/'` - define URL to open when the watermark is clicked. If not provided watermark will not be clickable.\n * @param {Boolean} [options.disableVideoTagContextMenu] @deprecated\n * disables the context menu (right click) on the video element if a HTML5Video playback is used.\n * @param {Boolean} [options.autoSeekFromUrl]\n * Automatically seek to the seconds provided in the url (e.g example.com?t=100) **default**: `true`\n * @param {Boolean} [options.exitFullscreenOnEnd]\n * Automatically exit full screen when the media finishes. **default**: `true`\n * @param {String} [options.poster]\n * define a poster by adding its address `poster: 'http://url/img.png'`. It will appear after video embed, disappear on play and go back when user stops the video.\n * @param {String} [options.playbackNotSupportedMessage]\n * define a custom message to be displayed when a playback is not supported.\n * @param {Object} [options.events]\n * Specify listeners which will be registered with their corresponding player events.\n * E.g. onReady -> \"PLAYER_READY\", onTimeUpdate -> \"PLAYER_TIMEUPDATE\"\n * @param {PlaybackConfig} [options.playback]\n * Generic `Playback` component related configuration\n * @param {Boolean} [options.disableErrorScreen]\n * disables the error screen plugin.\n * @param {Number} [options.autoPlayTimeout]\n * autoplay check timeout.\n */\n\n }]);\n\n function Player(options) {\n var _this;\n\n _classCallCheck(this, Player);\n\n _this = _super.call(this, options);\n var playbackDefaultOptions = {\n recycleVideo: true\n };\n var defaultOptions = {\n playerId: uniqueId(''),\n persistConfig: true,\n width: 640,\n height: 360,\n baseUrl: baseUrl,\n allowUserInteraction: Browser.isMobile,\n includeResetStyle: true,\n playback: playbackDefaultOptions\n };\n _this._options = zepto.extend(true, defaultOptions, options);\n _this.options.sources = _this._normalizeSources(options);\n\n if (!_this.options.chromeless) {\n // \"allowUserInteraction\" cannot be false if not in chromeless mode.\n _this.options.allowUserInteraction = true;\n }\n\n if (!_this.options.allowUserInteraction) {\n // if user iteraction is not allowed ensure keyboard shortcuts are disabled\n _this.options.disableKeyboardShortcuts = true;\n }\n\n _this._registerOptionEventListeners(_this.options.events);\n\n _this._coreFactory = new CoreFactory(_assertThisInitialized(_this));\n if (_this.options.parentId) _this.setParentId(_this.options.parentId);else if (_this.options.parent) _this.attachTo(_this.options.parent);\n return _this;\n }\n /**\n * Specify a `parentId` to the player.\n * @method setParentId\n * @param {String} parentId the element parent id.\n * @return {Player} itself\n */\n\n\n _createClass(Player, [{\n key: \"setParentId\",\n value: function setParentId(parentId) {\n var el = document.querySelector(parentId);\n if (el) this.attachTo(el);\n return this;\n }\n /**\n * You can use this method to attach the player to a given element. You don't need to do this when you specify it during the player instantiation passing the `parentId` param.\n * @method attachTo\n * @param {Object} element a given element.\n * @return {Player} itself\n */\n\n }, {\n key: \"attachTo\",\n value: function attachTo(element) {\n this.options.parentElement = element;\n this.core = this._coreFactory.create();\n\n this._addEventListeners();\n\n return this;\n }\n }, {\n key: \"_addEventListeners\",\n value: function _addEventListeners() {\n if (!this.core.isReady) this.listenToOnce(this.core, Events.CORE_READY, this._onReady);else this._onReady();\n this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this._containerChanged);\n this.listenTo(this.core, Events.CORE_FULLSCREEN, this._onFullscreenChange);\n this.listenTo(this.core, Events.CORE_RESIZE, this._onResize);\n return this;\n }\n }, {\n key: \"_addContainerEventListeners\",\n value: function _addContainerEventListeners() {\n var container = this.core.activeContainer;\n\n if (container) {\n this.listenTo(container, Events.CONTAINER_PLAY, this._onPlay);\n this.listenTo(container, Events.CONTAINER_PAUSE, this._onPause);\n this.listenTo(container, Events.CONTAINER_STOP, this._onStop);\n this.listenTo(container, Events.CONTAINER_ENDED, this._onEnded);\n this.listenTo(container, Events.CONTAINER_SEEK, this._onSeek);\n this.listenTo(container, Events.CONTAINER_ERROR, this._onError);\n this.listenTo(container, Events.CONTAINER_TIMEUPDATE, this._onTimeUpdate);\n this.listenTo(container, Events.CONTAINER_VOLUME, this._onVolumeUpdate);\n this.listenTo(container, Events.CONTAINER_SUBTITLE_AVAILABLE, this._onSubtitleAvailable);\n }\n\n return this;\n }\n }, {\n key: \"_registerOptionEventListeners\",\n value: function _registerOptionEventListeners() {\n var _this2 = this;\n\n var newEvents = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var hasNewEvents = Object.keys(newEvents).length > 0;\n hasNewEvents && Object.keys(events).forEach(function (userEvent) {\n var eventType = _this2.eventsMapping[userEvent];\n eventType && _this2.off(eventType, events[userEvent]);\n });\n Object.keys(newEvents).forEach(function (userEvent) {\n var eventType = _this2.eventsMapping[userEvent];\n\n if (eventType) {\n var eventFunction = newEvents[userEvent];\n eventFunction = typeof eventFunction === 'function' && eventFunction;\n eventFunction && _this2.on(eventType, eventFunction);\n }\n });\n return this;\n }\n }, {\n key: \"_containerChanged\",\n value: function _containerChanged() {\n this.stopListening();\n\n this._addEventListeners();\n }\n }, {\n key: \"_onReady\",\n value: function _onReady() {\n this._ready = true;\n\n this._addContainerEventListeners();\n\n this.trigger(Events.PLAYER_READY);\n }\n }, {\n key: \"_onFullscreenChange\",\n value: function _onFullscreenChange(fullscreen) {\n this.trigger(Events.PLAYER_FULLSCREEN, fullscreen);\n }\n }, {\n key: \"_onVolumeUpdate\",\n value: function _onVolumeUpdate(volume) {\n this.trigger(Events.PLAYER_VOLUMEUPDATE, volume);\n }\n }, {\n key: \"_onSubtitleAvailable\",\n value: function _onSubtitleAvailable() {\n this.trigger(Events.PLAYER_SUBTITLE_AVAILABLE);\n }\n }, {\n key: \"_onResize\",\n value: function _onResize(size) {\n this.trigger(Events.PLAYER_RESIZE, size);\n }\n }, {\n key: \"_onPlay\",\n value: function _onPlay() {\n this.trigger(Events.PLAYER_PLAY);\n }\n }, {\n key: \"_onPause\",\n value: function _onPause() {\n this.trigger(Events.PLAYER_PAUSE);\n }\n }, {\n key: \"_onStop\",\n value: function _onStop() {\n this.trigger(Events.PLAYER_STOP, this.getCurrentTime());\n }\n }, {\n key: \"_onEnded\",\n value: function _onEnded() {\n this.trigger(Events.PLAYER_ENDED);\n }\n }, {\n key: \"_onSeek\",\n value: function _onSeek(time) {\n this.trigger(Events.PLAYER_SEEK, time);\n }\n }, {\n key: \"_onTimeUpdate\",\n value: function _onTimeUpdate(timeProgress) {\n this.trigger(Events.PLAYER_TIMEUPDATE, timeProgress);\n }\n }, {\n key: \"_onError\",\n value: function _onError(error) {\n this.trigger(Events.PLAYER_ERROR, error);\n }\n }, {\n key: \"_normalizeSources\",\n value: function _normalizeSources(options) {\n var sources = options.sources || (options.source !== undefined ? [options.source] : []);\n return sources.length === 0 ? [{\n source: '',\n mimeType: ''\n }] : sources;\n }\n /**\n * resizes the current player canvas.\n * @method resize\n * @param {Object} size should be a literal object with `height` and `width`.\n * @return {Player} itself\n * @example\n * ```javascript\n * player.resize({height: 360, width: 640})\n * ```\n */\n\n }, {\n key: \"resize\",\n value: function resize(size) {\n this.core.resize(size);\n return this;\n }\n /**\n * loads a new source.\n * @method load\n * @param {Array|String} sources source or sources of video.\n * An array item can be a string or {source: <<source URL>>, mimeType: <<source mime type>>}\n * @param {String} mimeType a mime type, example: `'application/vnd.apple.mpegurl'`\n * @param {Boolean} [autoPlay=false] whether playing should be started immediately\n * @return {Player} itself\n */\n\n }, {\n key: \"load\",\n value: function load(sources, mimeType, autoPlay) {\n if (autoPlay !== undefined) this.configure({\n autoPlay: !!autoPlay\n });\n this.core.load(sources, mimeType);\n return this;\n }\n /**\n * destroys the current player and removes it from the DOM.\n * @method destroy\n * @return {Player} itself\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.stopListening();\n this.core.destroy();\n return this;\n }\n /**\n * Gives user consent to playback. Required by mobile device after a click event before Player.load().\n * @method consent\n * @param {Function} callback function called when current playback is consented\n * @example\n * ```javascript\n * player.consent(function() { doSomethingNext(); });\n * ```\n */\n\n }, {\n key: \"consent\",\n value: function consent(cb) {\n this.core.getCurrentPlayback().consent(cb);\n }\n /**\n * plays the current video (`source`).\n * @method play\n * @return {Player} itself\n */\n\n }, {\n key: \"play\",\n value: function play() {\n this.core.activeContainer.play();\n return this;\n }\n /**\n * pauses the current video (`source`).\n * @method pause\n * @return {Player} itself\n */\n\n }, {\n key: \"pause\",\n value: function pause() {\n this.core.activeContainer.pause();\n return this;\n }\n /**\n * stops the current video (`source`).\n * @method stop\n * @return {Player} itself\n */\n\n }, {\n key: \"stop\",\n value: function stop() {\n this.core.activeContainer.stop();\n return this;\n }\n /**\n * seeks the current video (`source`). For example, `player.seek(120)` will seek to second 120 (2minutes) of the current video.\n * @method seek\n * @param {Number} time should be a number between 0 and the video duration.\n * @return {Player} itself\n */\n\n }, {\n key: \"seek\",\n value: function seek(time) {\n this.core.activeContainer.seek(time);\n return this;\n }\n /**\n * seeks the current video (`source`). For example, `player.seek(50)` will seek to the middle of the current video.\n * @method seekPercentage\n * @param {Number} time should be a number between 0 and 100.\n * @return {Player} itself\n */\n\n }, {\n key: \"seekPercentage\",\n value: function seekPercentage(percentage) {\n this.core.activeContainer.seekPercentage(percentage);\n return this;\n }\n /**\n * mutes the current video (`source`).\n * @method mute\n * @return {Player} itself\n */\n\n }, {\n key: \"mute\",\n value: function mute() {\n this.core.activePlayback.mute();\n return this;\n }\n /**\n * unmutes the current video (`source`).\n * @method unmute\n * @return {Player} itself\n */\n\n }, {\n key: \"unmute\",\n value: function unmute() {\n this.core.activePlayback.unmute();\n return this;\n }\n /**\n * checks if the player is playing.\n * @method isPlaying\n * @return {Boolean} `true` if the current source is playing, otherwise `false`\n */\n\n }, {\n key: \"isPlaying\",\n value: function isPlaying() {\n return this.core.activeContainer.isPlaying();\n }\n /**\n * returns `true` if DVR is enable otherwise `false`.\n * @method isDvrEnabled\n * @return {Boolean}\n */\n\n }, {\n key: \"isDvrEnabled\",\n value: function isDvrEnabled() {\n return this.core.activeContainer.isDvrEnabled();\n }\n /**\n * returns `true` if DVR is in use otherwise `false`.\n * @method isDvrInUse\n * @return {Boolean}\n */\n\n }, {\n key: \"isDvrInUse\",\n value: function isDvrInUse() {\n return this.core.activeContainer.isDvrInUse();\n }\n /**\n * enables to configure a player after its creation\n * @method configure\n * @param {Object} options all the options to change in form of a javascript object\n * @return {Player} itself\n */\n\n }, {\n key: \"configure\",\n value: function configure() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._registerOptionEventListeners(options.events, this.options.events);\n\n this.core.configure(options);\n return this;\n }\n /**\n * get a plugin by its name.\n * @method getPlugin\n * @param {String} name of the plugin.\n * @return {Object} the plugin instance\n * @example\n * ```javascript\n * var poster = player.getPlugin('poster');\n * poster.hidePlayButton();\n * ```\n */\n\n }, {\n key: \"getPlugin\",\n value: function getPlugin(name) {\n var plugins = this.core.plugins.concat(this.core.activeContainer.plugins);\n return plugins.filter(function (plugin) {\n return plugin.name === name;\n })[0];\n }\n /**\n * the current time in seconds.\n * @method getCurrentTime\n * @return {Number} current time (in seconds) of the current source\n */\n\n }, {\n key: \"getCurrentTime\",\n value: function getCurrentTime() {\n return this.core.activeContainer.getCurrentTime();\n }\n /**\n * The time that \"0\" now represents relative to when playback started.\n * For a stream with a sliding window this will increase as content is\n * removed from the beginning.\n * @method getStartTimeOffset\n * @return {Number} time (in seconds) that time \"0\" represents.\n */\n\n }, {\n key: \"getStartTimeOffset\",\n value: function getStartTimeOffset() {\n return this.core.activeContainer.getStartTimeOffset();\n }\n /**\n * the duration time in seconds.\n * @method getDuration\n * @return {Number} duration time (in seconds) of the current source\n */\n\n }, {\n key: \"getDuration\",\n value: function getDuration() {\n return this.core.activeContainer.getDuration();\n }\n }]);\n\n return Player;\n}(BaseObject);\nObject.assign(Player.prototype, ErrorMixin);\n\n/**\n * The base class for a container plugin\n * @class ContainerPlugin\n * @constructor\n * @extends BaseObject\n * @module base\n */\n\nvar ContainerPlugin = /*#__PURE__*/function (_BaseObject) {\n _inherits(ContainerPlugin, _BaseObject);\n\n var _super = _createSuper(ContainerPlugin);\n\n _createClass(ContainerPlugin, [{\n key: \"playerError\",\n get: function get() {\n return this.container.playerError;\n }\n }]);\n\n function ContainerPlugin(container) {\n var _this;\n\n _classCallCheck(this, ContainerPlugin);\n\n _this = _super.call(this, container.options);\n _this.container = container;\n _this.enabled = true;\n\n _this.bindEvents();\n\n return _this;\n }\n\n _createClass(ContainerPlugin, [{\n key: \"enable\",\n value: function enable() {\n if (!this.enabled) {\n this.bindEvents();\n this.enabled = true;\n }\n }\n }, {\n key: \"disable\",\n value: function disable() {\n if (this.enabled) {\n this.stopListening();\n this.enabled = false;\n }\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {}\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.stopListening();\n }\n }]);\n\n return ContainerPlugin;\n}(BaseObject);\nObject.assign(ContainerPlugin.prototype, ErrorMixin);\n\nContainerPlugin.extend = function (properties) {\n return extend(ContainerPlugin, properties);\n};\n\nContainerPlugin.type = 'container';\n\nvar CorePlugin = /*#__PURE__*/function (_BaseObject) {\n _inherits(CorePlugin, _BaseObject);\n\n var _super = _createSuper(CorePlugin);\n\n _createClass(CorePlugin, [{\n key: \"playerError\",\n get: function get() {\n return this.core.playerError;\n }\n }]);\n\n function CorePlugin(core) {\n var _this;\n\n _classCallCheck(this, CorePlugin);\n\n _this = _super.call(this, core.options);\n _this.core = core;\n _this.enabled = true;\n\n _this.bindEvents();\n\n return _this;\n }\n\n _createClass(CorePlugin, [{\n key: \"bindEvents\",\n value: function bindEvents() {}\n }, {\n key: \"enable\",\n value: function enable() {\n if (!this.enabled) {\n this.bindEvents();\n this.enabled = true;\n }\n }\n }, {\n key: \"disable\",\n value: function disable() {\n if (this.enabled) {\n this.stopListening();\n this.enabled = false;\n }\n }\n }, {\n key: \"getExternalInterface\",\n value: function getExternalInterface() {\n return {};\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.stopListening();\n }\n }]);\n\n return CorePlugin;\n}(BaseObject);\nObject.assign(CorePlugin.prototype, ErrorMixin);\n\nCorePlugin.extend = function (properties) {\n return extend(CorePlugin, properties);\n};\n\nCorePlugin.type = 'core';\n\n/**\n * The base class for an ui container plugin\n * @class UIContainerPlugin\n * @constructor\n * @extends UIObject\n * @module base\n */\n\nvar UIContainerPlugin = /*#__PURE__*/function (_UIObject) {\n _inherits(UIContainerPlugin, _UIObject);\n\n var _super = _createSuper(UIContainerPlugin);\n\n _createClass(UIContainerPlugin, [{\n key: \"playerError\",\n get: function get() {\n return this.container.playerError;\n }\n }]);\n\n function UIContainerPlugin(container) {\n var _this;\n\n _classCallCheck(this, UIContainerPlugin);\n\n _this = _super.call(this, container.options);\n _this.container = container;\n _this.enabled = true;\n\n _this.bindEvents();\n\n return _this;\n }\n\n _createClass(UIContainerPlugin, [{\n key: \"enable\",\n value: function enable() {\n if (!this.enabled) {\n this.bindEvents();\n this.$el.show();\n this.enabled = true;\n }\n }\n }, {\n key: \"disable\",\n value: function disable() {\n this.stopListening();\n this.$el.hide();\n this.enabled = false;\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {}\n }]);\n\n return UIContainerPlugin;\n}(UIObject);\nObject.assign(UIContainerPlugin.prototype, ErrorMixin);\n\nUIContainerPlugin.extend = function (properties) {\n return extend(UIContainerPlugin, properties);\n};\n\nUIContainerPlugin.type = 'container';\n\nvar tracksHTML = \"<% for (var i = 0; i < tracks.length; i++) { %>\\n <track data-html5-video-track=\\\"<%= i %>\\\" kind=\\\"<%= tracks[i].kind %>\\\" label=\\\"<%= tracks[i].label %>\\\" srclang=\\\"<%= tracks[i].lang %>\\\" src=\\\"<%= tracks[i].src %>\\\">\\n<% }; %>\\n\";\n\nvar css_248z$3 = \"[data-html5-video] {\\n position: absolute;\\n height: 100%;\\n width: 100%;\\n display: block; }\\n\";\n\nvar MIMETYPES = {\n 'mp4': ['avc1.42E01E', 'avc1.58A01E', 'avc1.4D401E', 'avc1.64001E', 'mp4v.20.8', 'mp4v.20.240', 'mp4a.40.2'].map(function (codec) {\n return 'video/mp4; codecs=\"' + codec + ', mp4a.40.2\"';\n }),\n 'ogg': ['video/ogg; codecs=\"theora, vorbis\"', 'video/ogg; codecs=\"dirac\"', 'video/ogg; codecs=\"theora, speex\"'],\n '3gpp': ['video/3gpp; codecs=\"mp4v.20.8, samr\"'],\n 'webm': ['video/webm; codecs=\"vp8, vorbis\"'],\n 'mkv': ['video/x-matroska; codecs=\"theora, vorbis\"'],\n 'm3u8': ['application/x-mpegurl']\n};\nMIMETYPES['ogv'] = MIMETYPES['ogg'];\nMIMETYPES['3gp'] = MIMETYPES['3gpp'];\nvar AUDIO_MIMETYPES = {\n 'wav': ['audio/wav'],\n 'mp3': ['audio/mp3', 'audio/mpeg;codecs=\"mp3\"'],\n 'aac': ['audio/mp4;codecs=\"mp4a.40.5\"'],\n 'oga': ['audio/ogg']\n};\nvar KNOWN_AUDIO_MIMETYPES = Object.keys(AUDIO_MIMETYPES).reduce(function (acc, k) {\n return [].concat(_toConsumableArray(acc), _toConsumableArray(AUDIO_MIMETYPES[k]));\n}, []);\nvar UNKNOWN_ERROR = {\n code: 'unknown',\n message: 'unknown'\n}; // TODO: rename this Playback to HTML5Playback (breaking change, only after 0.3.0)\n\nvar HTML5Video = /*#__PURE__*/function (_Playback) {\n _inherits(HTML5Video, _Playback);\n\n var _super = _createSuper(HTML5Video);\n\n _createClass(HTML5Video, [{\n key: \"name\",\n get: function get() {\n return 'html5_video';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.19\"\n };\n }\n }, {\n key: \"tagName\",\n get: function get() {\n return this.isAudioOnly ? 'audio' : 'video';\n }\n }, {\n key: \"isAudioOnly\",\n get: function get() {\n var resourceUrl = this.options.src;\n\n var mimeTypes = HTML5Video._mimeTypesForUrl(resourceUrl, AUDIO_MIMETYPES, this.options.mimeType);\n\n return this.options.playback && this.options.playback.audioOnly || this.options.audioOnly || KNOWN_AUDIO_MIMETYPES.indexOf(mimeTypes[0]) >= 0;\n }\n }, {\n key: \"attributes\",\n get: function get() {\n return {\n 'data-html5-video': ''\n };\n }\n }, {\n key: \"events\",\n get: function get() {\n return {\n 'canplay': '_onCanPlay',\n 'canplaythrough': '_handleBufferingEvents',\n 'durationchange': '_onDurationChange',\n 'ended': '_onEnded',\n 'error': '_onError',\n 'loadeddata': '_onLoadedData',\n 'loadedmetadata': '_onLoadedMetadata',\n 'pause': '_onPause',\n 'playing': '_onPlaying',\n 'progress': '_onProgress',\n 'seeking': '_onSeeking',\n 'seeked': '_onSeeked',\n 'stalled': '_handleBufferingEvents',\n 'timeupdate': '_onTimeUpdate',\n 'waiting': '_onWaiting'\n };\n }\n /**\n * Determine if the playback has ended.\n * @property ended\n * @type Boolean\n */\n\n }, {\n key: \"ended\",\n get: function get() {\n return this.el.ended;\n }\n /**\n * Determine if the playback is having to buffer in order for\n * playback to be smooth.\n * This is related to the PLAYBACK_BUFFERING and PLAYBACK_BUFFERFULL events\n * @property buffering\n * @type Boolean\n */\n\n }, {\n key: \"buffering\",\n get: function get() {\n return this._isBuffering;\n }\n }, {\n key: \"isLive\",\n get: function get() {\n return this.getPlaybackType() === Playback.LIVE;\n }\n }, {\n key: \"dvrEnabled\",\n get: function get() {\n return this.getDuration() >= this._minDvrSize && this.isLive;\n }\n }, {\n key: \"minimumDVRSizeConfig\",\n get: function get() {\n return this.options.playback && this.options.playback.minimumDvrSize;\n }\n }, {\n key: \"isValidMinimumDVRSizeConfig\",\n get: function get() {\n return typeof this.minimumDVRSizeConfig !== 'undefined' && typeof this.minimumDVRSizeConfig === 'number';\n }\n }]);\n\n function HTML5Video() {\n var _this;\n\n _classCallCheck(this, HTML5Video);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this._destroyed = false;\n _this._loadStarted = false;\n _this._isBuffering = false;\n _this._playheadMoving = false;\n _this._playheadMovingTimer = null;\n _this._stopped = false;\n _this._ccTrackId = -1;\n\n _this._setupSrc(_this.options.src); // backwards compatibility (TODO: remove on 0.3.0)\n\n\n _this.options.playback || (_this.options.playback = _this.options || {});\n _this.options.playback.disableContextMenu = _this.options.playback.disableContextMenu || _this.options.disableVideoTagContextMenu;\n _this._minDvrSize = _this.isValidMinimumDVRSizeConfig ? _this.minimumDVRSizeConfig : 60;\n var playbackConfig = _this.options.playback;\n var preload = playbackConfig.preload || (Browser.isSafari ? 'auto' : _this.options.preload);\n var posterUrl; // FIXME: poster plugin should always convert poster to object with expected properties ?\n\n if (_this.options.poster) {\n if (typeof _this.options.poster === 'string') posterUrl = _this.options.poster;else if (typeof _this.options.poster.url === 'string') posterUrl = _this.options.poster.url;\n }\n\n zepto.extend(true, _this.el, {\n muted: _this.options.mute,\n defaultMuted: _this.options.mute,\n loop: _this.options.loop,\n poster: posterUrl,\n preload: preload || 'metadata',\n crossOrigin: playbackConfig.crossOrigin,\n 'x-webkit-playsinline': playbackConfig.playInline\n });\n if (playbackConfig.controls || _this.options.useVideoTagDefaultControls) _this.$el.attr('controls', '');\n playbackConfig.playInline && _this.$el.attr({\n playsinline: 'playsinline'\n });\n playbackConfig.crossOrigin && _this.$el.attr({\n crossorigin: playbackConfig.crossOrigin\n }); // TODO should settings be private?\n\n _this.settings = {\n \"default\": ['seekbar']\n };\n _this.settings.left = ['playpause', 'position', 'duration'];\n _this.settings.right = ['fullscreen', 'volume', 'hd-indicator'];\n playbackConfig.externalTracks && _this._setupExternalTracks(playbackConfig.externalTracks);\n _this.options.autoPlay && _this.attemptAutoPlay();\n return _this;\n }\n\n _createClass(HTML5Video, [{\n key: \"configure\",\n value: function configure(options) {\n _get(_getPrototypeOf(HTML5Video.prototype), \"configure\", this).call(this, options);\n\n this.el.loop = !!options.loop;\n } // See Playback.attemptAutoPlay()\n\n }, {\n key: \"attemptAutoPlay\",\n value: function attemptAutoPlay() {\n var _this2 = this;\n\n this.canAutoPlay(function (result, error) {\n error && Log.warn(_this2.name, 'autoplay error.', {\n result: result,\n error: error\n }); // https://github.com/clappr/clappr/issues/1076\n\n result && setTimeout(function () {\n return !_this2._destroyed && _this2.play();\n }, 0);\n });\n } // See Playback.canAutoPlay()\n\n }, {\n key: \"canAutoPlay\",\n value: function canAutoPlay(cb) {\n if (this.options.disableCanAutoPlay) {\n cb(true, null);\n return;\n }\n\n var opts = {\n timeout: this.options.autoPlayTimeout || 500,\n inline: this.options.playback.playInline || false,\n muted: this.options.mute || false // Known issue: mediacontrols may asynchronously mute video\n\n }; // Use current video element if recycling feature enabled with mobile devices\n\n if (Browser.isMobile && DomRecycler.options.recycleVideo) opts.element = this.el; // Desktop browser autoplay policy may require user action\n // Mobile browser autoplay require user consent and video recycling feature enabled\n // It may returns a false positive with source-less player consent\n\n canAutoPlayMedia(cb, opts);\n }\n }, {\n key: \"_setupExternalTracks\",\n value: function _setupExternalTracks(tracks) {\n this._externalTracks = tracks.map(function (track) {\n return {\n kind: track.kind || 'subtitles',\n // Default is 'subtitles'\n label: track.label,\n lang: track.lang,\n src: track.src\n };\n });\n }\n /**\n * Sets the source url on the <video> element, and also the 'src' property.\n * @method setupSrc\n * @private\n * @param {String} srcUrl The source URL.\n */\n\n }, {\n key: \"_setupSrc\",\n value: function _setupSrc(srcUrl) {\n if (this.el.src === srcUrl) return;\n this._ccIsSetup = false;\n this.el.src = srcUrl;\n this._src = this.el.src;\n }\n }, {\n key: \"_onLoadedMetadata\",\n value: function _onLoadedMetadata(e) {\n this._handleBufferingEvents();\n\n this.trigger(Events.PLAYBACK_LOADEDMETADATA, {\n duration: e.target.duration,\n data: e\n });\n\n this._updateSettings();\n\n var autoSeekFromUrl = typeof this._options.autoSeekFromUrl === 'undefined' || this._options.autoSeekFromUrl;\n if (this.getPlaybackType() !== Playback.LIVE && autoSeekFromUrl) this._checkInitialSeek();\n }\n }, {\n key: \"_onDurationChange\",\n value: function _onDurationChange() {\n this._updateSettings();\n\n this._onTimeUpdate(); // onProgress uses the duration\n\n\n this._onProgress();\n }\n }, {\n key: \"_updateSettings\",\n value: function _updateSettings() {\n // we can't figure out if hls resource is VoD or not until it is being loaded or duration has changed.\n // that's why we check it again and update media control accordingly.\n if (this.getPlaybackType() === Playback.VOD || this.getPlaybackType() === Playback.AOD) this.settings.left = ['playpause', 'position', 'duration'];else this.settings.left = ['playstop'];\n this.settings.seekEnabled = this.isSeekEnabled();\n this.trigger(Events.PLAYBACK_SETTINGSUPDATE);\n }\n }, {\n key: \"isSeekEnabled\",\n value: function isSeekEnabled() {\n return isFinite(this.getDuration());\n }\n }, {\n key: \"getPlaybackType\",\n value: function getPlaybackType() {\n var onDemandType = this.tagName === 'audio' ? Playback.AOD : Playback.VOD;\n return [0, undefined, Infinity].indexOf(this.el.duration) >= 0 ? Playback.LIVE : onDemandType;\n }\n }, {\n key: \"isHighDefinitionInUse\",\n value: function isHighDefinitionInUse() {\n return false;\n } // On mobile device, HTML5 video element \"retains\" user action consent if\n // load() method is called. See Player.consent().\n\n }, {\n key: \"consent\",\n value: function consent(cb) {\n var _this3 = this;\n\n if (this.isPlaying() || this.el._consented) {\n _get(_getPrototypeOf(HTML5Video.prototype), \"consent\", this).call(this, cb);\n } else {\n var eventHandler = function eventHandler() {\n _this3.el.removeEventListener('loadedmetadata', eventHandler, false);\n\n _this3.el.removeEventListener('error', eventHandler, false);\n\n _this3.el._consented = true; // Flag to call load() only once\n\n _get(_getPrototypeOf(HTML5Video.prototype), \"consent\", _this3).call(_this3, cb);\n };\n\n this.el.addEventListener('loadedmetadata', eventHandler, false);\n this.el.addEventListener('error', eventHandler, false);\n this.el.load();\n }\n }\n }, {\n key: \"play\",\n value: function play() {\n this.trigger(Events.PLAYBACK_PLAY_INTENT);\n this._stopped = false;\n\n this._setupSrc(this._src);\n\n this._handleBufferingEvents();\n\n var promise = this.el.play(); // For more details, see https://developers.google.com/web/updates/2016/03/play-returns-promise\n\n if (promise && promise[\"catch\"]) promise[\"catch\"](function () {});\n }\n }, {\n key: \"pause\",\n value: function pause() {\n this.el.pause();\n this.dvrEnabled && this._updateDvr(true);\n }\n }, {\n key: \"stop\",\n value: function stop() {\n this.pause();\n this._stopped = true; // src will be added again in play()\n\n this.el.removeAttribute('src');\n this.el.load(); // load with no src to stop loading of the previous source and avoid leaks\n\n this._stopPlayheadMovingChecks();\n\n this._handleBufferingEvents();\n\n this.trigger(Events.PLAYBACK_STOP);\n }\n }, {\n key: \"volume\",\n value: function volume(value) {\n if (value === 0) {\n this.$el.attr({\n muted: 'true'\n });\n this.el.muted = true;\n } else {\n this.$el.attr({\n muted: null\n });\n this.el.muted = false;\n this.el.volume = value / 100;\n }\n }\n /**\n * @deprecated\n * @private\n */\n\n }, {\n key: \"mute\",\n value: function mute() {\n this.el.muted = true;\n }\n /**\n * @deprecated\n * @private\n */\n\n }, {\n key: \"unmute\",\n value: function unmute() {\n this.el.muted = false;\n }\n }, {\n key: \"isMuted\",\n value: function isMuted() {\n return this.el.muted === true || this.el.volume === 0;\n }\n }, {\n key: \"isPlaying\",\n value: function isPlaying() {\n return !this.el.paused && !this.el.ended;\n }\n }, {\n key: \"_startPlayheadMovingChecks\",\n value: function _startPlayheadMovingChecks() {\n if (this._playheadMovingTimer !== null) return;\n this._playheadMovingTimeOnCheck = null;\n\n this._determineIfPlayheadMoving();\n\n this._playheadMovingTimer = setInterval(this._determineIfPlayheadMoving.bind(this), 500);\n }\n }, {\n key: \"_stopPlayheadMovingChecks\",\n value: function _stopPlayheadMovingChecks() {\n if (this._playheadMovingTimer === null) return;\n clearInterval(this._playheadMovingTimer);\n this._playheadMovingTimer = null;\n this._playheadMoving = false;\n }\n }, {\n key: \"_determineIfPlayheadMoving\",\n value: function _determineIfPlayheadMoving() {\n var before = this._playheadMovingTimeOnCheck;\n var now = this.el.currentTime;\n this._playheadMoving = before !== now;\n this._playheadMovingTimeOnCheck = now;\n\n this._handleBufferingEvents();\n } // this seems to happen when the user is having to wait\n // for something to happen AFTER A USER INTERACTION\n // e.g the player might be buffering, but when `play()` is called\n // only at this point will this be called.\n // Or the user may seek somewhere but the new area requires buffering,\n // so it will fire then as well.\n // On devices where playing is blocked until requested with a user action,\n // buffering may start, but never finish until the user initiates a play,\n // but this only happens when play is actually requested\n\n }, {\n key: \"_onWaiting\",\n value: function _onWaiting() {\n this._loadStarted = true;\n\n this._handleBufferingEvents();\n } // called after the first frame has loaded\n // note this doesn't fire on ios before the user has requested play\n // ideally the \"loadstart\" event would be used instead, but this fires\n // before a user has requested play on iOS, and also this is always fired\n // even if the preload setting is \"none\". In both these cases this causes\n // infinite buffering until the user does something which isn't great.\n\n }, {\n key: \"_onLoadedData\",\n value: function _onLoadedData() {\n this._loadStarted = true;\n\n this._handleBufferingEvents();\n } // note this doesn't fire on ios before user has requested play\n\n }, {\n key: \"_onCanPlay\",\n value: function _onCanPlay() {\n this._handleBufferingEvents();\n }\n }, {\n key: \"_onPlaying\",\n value: function _onPlaying() {\n this._checkForClosedCaptions();\n\n this._startPlayheadMovingChecks();\n\n this._handleBufferingEvents();\n\n this.trigger(Events.PLAYBACK_PLAY);\n }\n }, {\n key: \"_onPause\",\n value: function _onPause() {\n this._stopPlayheadMovingChecks();\n\n this._handleBufferingEvents();\n\n this.trigger(Events.PLAYBACK_PAUSE);\n }\n }, {\n key: \"_onSeeking\",\n value: function _onSeeking() {\n this.trigger(Events.PLAYBACK_SEEK, this.getCurrentTime());\n\n this._handleBufferingEvents();\n }\n }, {\n key: \"_onSeeked\",\n value: function _onSeeked() {\n this._handleBufferingEvents();\n\n this.trigger(Events.PLAYBACK_SEEKED);\n }\n }, {\n key: \"_onEnded\",\n value: function _onEnded() {\n this._handleBufferingEvents();\n\n this.trigger(Events.PLAYBACK_ENDED, this.name);\n } // The playback should be classed as buffering if the following are true:\n // - the ready state is less then HAVE_FUTURE_DATA or the playhead isn't moving and it should be\n // - the media hasn't \"ended\",\n // - the media hasn't been stopped\n // - loading has started\n\n }, {\n key: \"_handleBufferingEvents\",\n value: function _handleBufferingEvents() {\n var playheadShouldBeMoving = !this.el.ended && !this.el.paused;\n var buffering = this._loadStarted && !this.el.ended && !this._stopped && (playheadShouldBeMoving && !this._playheadMoving || this.el.readyState < this.el.HAVE_FUTURE_DATA);\n\n if (this._isBuffering !== buffering) {\n this._isBuffering = buffering;\n if (buffering) this.trigger(Events.PLAYBACK_BUFFERING, this.name);else this.trigger(Events.PLAYBACK_BUFFERFULL, this.name);\n }\n }\n }, {\n key: \"_onError\",\n value: function _onError() {\n var _ref = this.el.error || UNKNOWN_ERROR,\n code = _ref.code,\n message = _ref.message;\n\n var isUnknownError = code === UNKNOWN_ERROR.code;\n var formattedError = this.createError({\n code: code,\n description: message,\n raw: this.el.error,\n level: isUnknownError ? PlayerError.Levels.WARN : PlayerError.Levels.FATAL\n });\n if (isUnknownError) Log.warn(this.name, 'HTML5 unknown error: ', formattedError);else this.trigger(Events.PLAYBACK_ERROR, formattedError);\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this._destroyed = true;\n this.handleTextTrackChange && this.el.textTracks.removeEventListener('change', this.handleTextTrackChange);\n\n _get(_getPrototypeOf(HTML5Video.prototype), \"destroy\", this).call(this);\n\n this.el.removeAttribute('src');\n this.el.load(); // load with no src to stop loading of the previous source and avoid leaks\n\n this._src = null;\n DomRecycler.garbage(this.el);\n }\n }, {\n key: \"_updateDvr\",\n value: function _updateDvr(status) {\n this.trigger(Events.PLAYBACK_DVR, status);\n this.trigger(Events.PLAYBACK_STATS_ADD, {\n 'dvr': status\n });\n }\n }, {\n key: \"seek\",\n value: function seek(time) {\n if (time < 0) {\n Log.warn('Attempt to seek to a negative time. Resetting to live point. Use seekToLivePoint() to seek to the live point.');\n time = this.getDuration();\n } // assume live if time within 3 seconds of end of stream\n\n\n this.dvrEnabled && this._updateDvr(time < this.getDuration() - 3);\n time += this.el.seekable.start(0);\n this.el.currentTime = time;\n }\n }, {\n key: \"seekPercentage\",\n value: function seekPercentage(percentage) {\n var time = this.el.duration * (percentage / 100);\n this.seek(time);\n }\n }, {\n key: \"_checkInitialSeek\",\n value: function _checkInitialSeek() {\n var seekTime = seekStringToSeconds();\n if (seekTime !== 0) this.seek(seekTime);\n }\n }, {\n key: \"getCurrentTime\",\n value: function getCurrentTime() {\n return this.el.currentTime;\n }\n }, {\n key: \"getDuration\",\n value: function getDuration() {\n if (this.isLive) {\n if (this.el.seekable.length > 0) {\n return this.el.seekable.end(0) - this.el.seekable.start(0);\n } else {\n // `seekable` is not available; this is probably OK, but make sure we're\n // updating the control bar to reflect it\n this._scheduleUpdateSettingsCheck();\n }\n }\n\n return this.el.duration;\n }\n }, {\n key: \"_scheduleUpdateSettingsCheck\",\n value: function _scheduleUpdateSettingsCheck() {\n var _this4 = this;\n\n if (this._updateSettingsCheckInFlight) return;\n this._updateSettingsCheckInFlight = setTimeout(function () {\n _this4._updateSettings();\n\n _this4._updateSettingsCheckInFlight = null;\n }, 1000);\n }\n }, {\n key: \"_onTimeUpdate\",\n value: function _onTimeUpdate() {\n var duration = this.isLive ? this.getDuration() : this.el.duration;\n this.trigger(Events.PLAYBACK_TIMEUPDATE, {\n current: this.el.currentTime,\n total: duration\n }, this.name);\n }\n }, {\n key: \"_onProgress\",\n value: function _onProgress() {\n if (!this.el.buffered.length) return;\n var buffered = [];\n var bufferedPos = 0;\n\n for (var i = 0; i < this.el.buffered.length; i++) {\n buffered = [].concat(_toConsumableArray(buffered), [{\n start: this.el.buffered.start(i),\n end: this.el.buffered.end(i)\n }]);\n if (this.el.currentTime >= buffered[i].start && this.el.currentTime <= buffered[i].end) bufferedPos = i;\n }\n\n var progress = {\n start: buffered[bufferedPos].start,\n current: buffered[bufferedPos].end,\n total: this.el.duration\n };\n this.trigger(Events.PLAYBACK_PROGRESS, progress, buffered);\n }\n }, {\n key: \"_typeFor\",\n value: function _typeFor(src) {\n var mimeTypes = HTML5Video._mimeTypesForUrl(src, MIMETYPES, this.options.mimeType);\n\n if (mimeTypes.length === 0) mimeTypes = HTML5Video._mimeTypesForUrl(src, AUDIO_MIMETYPES, this.options.mimeType);\n var mimeType = mimeTypes[0] || '';\n return mimeType.split(';')[0];\n }\n }, {\n key: \"_ready\",\n value: function _ready() {\n if (this._isReadyState) return;\n this._isReadyState = true;\n this.trigger(Events.PLAYBACK_READY, this.name);\n }\n }, {\n key: \"_checkForClosedCaptions\",\n value: function _checkForClosedCaptions() {\n // Check if CC available only if current playback is HTML5Video\n if (this.isHTML5Video && !this._ccIsSetup) {\n if (this.hasClosedCaptionsTracks) {\n this.trigger(Events.PLAYBACK_SUBTITLE_AVAILABLE);\n var trackId = this.closedCaptionsTrackId;\n this.closedCaptionsTrackId = trackId;\n this.handleTextTrackChange = this._handleTextTrackChange.bind(this);\n this.el.textTracks.addEventListener('change', this.handleTextTrackChange);\n }\n\n this._ccIsSetup = true;\n }\n }\n }, {\n key: \"_handleTextTrackChange\",\n value: function _handleTextTrackChange() {\n var tracks = this.closedCaptionsTracks;\n var track = tracks.find(function (track) {\n return track.track.mode === 'showing';\n }) || {\n id: -1\n };\n\n if (this._ccTrackId !== track.id) {\n this._ccTrackId = track.id;\n this.trigger(Events.PLAYBACK_SUBTITLE_CHANGED, {\n id: track.id\n });\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n if (this.options.playback.disableContextMenu) {\n this.$el.on('contextmenu', function () {\n return false;\n });\n }\n\n if (this._externalTracks && this._externalTracks.length > 0) {\n this.$el.html(this.template({\n tracks: this._externalTracks\n }));\n }\n\n this._ready();\n\n var style = Styler.getStyleFor(css_248z$3.toString(), {\n baseUrl: this.options.baseUrl\n });\n this.$el.append(style[0]);\n return this;\n }\n }, {\n key: \"isReady\",\n get: function get() {\n return this._isReadyState;\n }\n }, {\n key: \"isHTML5Video\",\n get: function get() {\n return this.name === HTML5Video.prototype.name;\n }\n }, {\n key: \"closedCaptionsTracks\",\n get: function get() {\n var id = 0;\n\n var trackId = function trackId() {\n return id++;\n };\n\n var textTracks = this.el.textTracks ? Array.from(this.el.textTracks) : [];\n return textTracks.filter(function (track) {\n return track.kind === 'subtitles' || track.kind === 'captions';\n }).map(function (track) {\n return {\n id: trackId(),\n name: track.label,\n track: track\n };\n });\n }\n }, {\n key: \"closedCaptionsTrackId\",\n get: function get() {\n return this._ccTrackId;\n },\n set: function set(trackId) {\n if (!isNumber(trackId)) return;\n var tracks = this.closedCaptionsTracks;\n var showingTrack; // Note: -1 is for hide all tracks\n\n if (trackId !== -1) {\n showingTrack = tracks.find(function (track) {\n return track.id === trackId;\n });\n if (!showingTrack) return; // Track id not found\n\n if (showingTrack.track.mode === 'showing') return; // Track already showing\n } // Since it is possible to display multiple tracks,\n // ensure that all tracks are hidden.\n\n\n tracks.filter(function (track) {\n return track.track.mode !== 'hidden';\n }).forEach(function (track) {\n return track.track.mode = 'hidden';\n });\n showingTrack && (showingTrack.track.mode = 'showing');\n this._ccTrackId = trackId;\n this.trigger(Events.PLAYBACK_SUBTITLE_CHANGED, {\n id: trackId\n });\n }\n }, {\n key: \"template\",\n get: function get() {\n return tmpl(tracksHTML);\n }\n }]);\n\n return HTML5Video;\n}(Playback);\n\nHTML5Video._mimeTypesForUrl = function (resourceUrl, mimeTypesByExtension, mimeType) {\n var extension = (resourceUrl.split('?')[0].match(/.*\\.(.*)$/) || [])[1];\n var mimeTypes = mimeType || extension && mimeTypesByExtension[extension.toLowerCase()] || [];\n return mimeTypes.constructor === Array ? mimeTypes : [mimeTypes];\n};\n\nHTML5Video._canPlay = function (type, mimeTypesByExtension, resourceUrl, mimeType) {\n var mimeTypes = HTML5Video._mimeTypesForUrl(resourceUrl, mimeTypesByExtension, mimeType);\n\n var media = document.createElement(type);\n return !!mimeTypes.filter(function (mediaType) {\n return !!media.canPlayType(mediaType).replace(/no/, '');\n })[0];\n};\n\nHTML5Video.canPlay = function (resourceUrl, mimeType) {\n return HTML5Video._canPlay('audio', AUDIO_MIMETYPES, resourceUrl, mimeType) || HTML5Video._canPlay('video', MIMETYPES, resourceUrl, mimeType);\n};\n\nvar HTML5Audio = /*#__PURE__*/function (_HTML5Video) {\n _inherits(HTML5Audio, _HTML5Video);\n\n var _super = _createSuper(HTML5Audio);\n\n function HTML5Audio() {\n _classCallCheck(this, HTML5Audio);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(HTML5Audio, [{\n key: \"updateSettings\",\n value: function updateSettings() {\n this.settings.left = ['playpause', 'position', 'duration'];\n this.settings.seekEnabled = this.isSeekEnabled();\n this.trigger(Events.PLAYBACK_SETTINGSUPDATE);\n }\n }, {\n key: \"getPlaybackType\",\n value: function getPlaybackType() {\n return Playback.AOD;\n }\n }, {\n key: \"name\",\n get: function get() {\n return 'html5_audio';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.19\"\n };\n }\n }, {\n key: \"tagName\",\n get: function get() {\n return 'audio';\n }\n }, {\n key: \"isAudioOnly\",\n get: function get() {\n return true;\n }\n }]);\n\n return HTML5Audio;\n}(HTML5Video);\n\nHTML5Audio.canPlay = function (resourceUrl, mimeType) {\n var mimetypes = {\n 'wav': ['audio/wav'],\n 'mp3': ['audio/mp3', 'audio/mpeg;codecs=\"mp3\"'],\n 'aac': ['audio/mp4;codecs=\"mp4a.40.5\"'],\n 'oga': ['audio/ogg']\n };\n return HTML5Video._canPlay('audio', mimetypes, resourceUrl, mimeType);\n};\n\nvar css_248z$4 = \"[data-html-img] {\\n max-width: 100%;\\n max-height: 100%; }\\n\";\n\nvar HTMLImg = /*#__PURE__*/function (_Playback) {\n _inherits(HTMLImg, _Playback);\n\n var _super = _createSuper(HTMLImg);\n\n _createClass(HTMLImg, [{\n key: \"getPlaybackType\",\n value: function getPlaybackType() {\n return Playback.NO_OP;\n }\n }, {\n key: \"name\",\n get: function get() {\n return 'html_img';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.19\"\n };\n }\n }, {\n key: \"tagName\",\n get: function get() {\n return 'img';\n }\n }, {\n key: \"attributes\",\n get: function get() {\n return {\n 'data-html-img': ''\n };\n }\n }, {\n key: \"events\",\n get: function get() {\n return {\n 'load': '_onLoad',\n 'abort': '_onError',\n 'error': '_onError'\n };\n }\n }]);\n\n function HTMLImg(params) {\n var _this;\n\n _classCallCheck(this, HTMLImg);\n\n _this = _super.call(this, params);\n _this.el.src = params.src;\n return _this;\n }\n\n _createClass(HTMLImg, [{\n key: \"render\",\n value: function render() {\n var style = Styler.getStyleFor(css_248z$4.toString(), {\n baseUrl: this.options.baseUrl\n });\n this.$el.append(style[0]);\n this.trigger(Events.PLAYBACK_READY, this.name);\n return this;\n }\n }, {\n key: \"_onLoad\",\n value: function _onLoad() {\n this.trigger(Events.PLAYBACK_ENDED, this.name);\n }\n }, {\n key: \"_onError\",\n value: function _onError(evt) {\n var m = evt.type === 'error' ? 'load error' : 'loading aborted';\n this.trigger(Events.PLAYBACK_ERROR, {\n message: m\n }, this.name);\n }\n }]);\n\n return HTMLImg;\n}(Playback);\n\nHTMLImg.canPlay = function (resource) {\n return /\\.(png|jpg|jpeg|gif|bmp|tiff|pgm|pnm|webp)(|\\?.*)$/i.test(resource);\n};\n\nvar noOpHTML = \"<canvas data-no-op-canvas></canvas>\\n<p data-no-op-msg><%=message%></p><p>\\n</p>\";\n\nvar css_248z$5 = \"[data-no-op] {\\n position: absolute;\\n height: 100%;\\n width: 100%;\\n text-align: center; }\\n\\n[data-no-op] p[data-no-op-msg] {\\n position: absolute;\\n text-align: center;\\n font-size: 25px;\\n left: 0;\\n right: 0;\\n color: white;\\n padding: 10px;\\n /* center vertically */\\n top: 50%;\\n transform: translateY(-50%);\\n max-height: 100%;\\n overflow: auto; }\\n\\n[data-no-op] canvas[data-no-op-canvas] {\\n background-color: #777;\\n height: 100%;\\n width: 100%; }\\n\";\n\nvar NoOp = /*#__PURE__*/function (_Playback) {\n _inherits(NoOp, _Playback);\n\n var _super = _createSuper(NoOp);\n\n _createClass(NoOp, [{\n key: \"name\",\n get: function get() {\n return 'no_op';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.19\"\n };\n }\n }, {\n key: \"template\",\n get: function get() {\n return tmpl(noOpHTML);\n }\n }, {\n key: \"attributes\",\n get: function get() {\n return {\n 'data-no-op': ''\n };\n }\n }]);\n\n function NoOp() {\n var _this;\n\n _classCallCheck(this, NoOp);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this._noiseFrameNum = -1;\n return _this;\n }\n\n _createClass(NoOp, [{\n key: \"render\",\n value: function render() {\n var playbackNotSupported = this.options.playbackNotSupportedMessage || this.i18n.t('playback_not_supported');\n var style = Styler.getStyleFor(css_248z$5.toString(), {\n baseUrl: this.options.baseUrl\n });\n this.$el.append(style[0]);\n this.$el.html(this.template({\n message: playbackNotSupported\n }));\n this.trigger(Events.PLAYBACK_READY, this.name);\n var showForNoOp = !!(this.options.poster && this.options.poster.showForNoOp);\n if (this.options.autoPlay || !showForNoOp) this._animate();\n return this;\n }\n }, {\n key: \"_noise\",\n value: function _noise() {\n this._noiseFrameNum = (this._noiseFrameNum + 1) % 5;\n\n if (this._noiseFrameNum) {\n // only update noise every 5 frames to save cpu\n return;\n }\n\n var idata = this.context.createImageData(this.context.canvas.width, this.context.canvas.height);\n var buffer32;\n\n try {\n buffer32 = new Uint32Array(idata.data.buffer);\n } catch (err) {\n buffer32 = new Uint32Array(this.context.canvas.width * this.context.canvas.height * 4);\n var data = idata.data;\n\n for (var i = 0; i < data.length; i++) {\n buffer32[i] = data[i];\n }\n }\n\n var len = buffer32.length,\n m = Math.random() * 6 + 4;\n var run = 0,\n color = 0;\n\n for (var _i = 0; _i < len;) {\n if (run < 0) {\n run = m * Math.random();\n var p = Math.pow(Math.random(), 0.4);\n color = 255 * p << 24;\n }\n\n run -= 1;\n buffer32[_i++] = color;\n }\n\n this.context.putImageData(idata, 0, 0);\n }\n }, {\n key: \"_loop\",\n value: function _loop() {\n var _this2 = this;\n\n if (this._stop) return;\n\n this._noise();\n\n this._animationHandle = requestAnimationFrame(function () {\n return _this2._loop();\n });\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n if (this._animationHandle) {\n cancelAnimationFrame(this._animationHandle);\n this._stop = true;\n }\n }\n }, {\n key: \"_animate\",\n value: function _animate() {\n this.canvas = this.$el.find('canvas[data-no-op-canvas]')[0];\n this.context = this.canvas.getContext('2d');\n\n this._loop();\n }\n }]);\n\n return NoOp;\n}(Playback);\n\nNoOp.canPlay = function (source) {\n // eslint-disable-line no-unused-vars\n return true;\n};\n\n/**\n * The internationalization (i18n) plugin\n * @class Strings\n * @constructor\n * @extends CorePlugin\n * @module plugins\n */\n\nvar Strings = /*#__PURE__*/function (_CorePlugin) {\n _inherits(Strings, _CorePlugin);\n\n var _super = _createSuper(Strings);\n\n _createClass(Strings, [{\n key: \"name\",\n get: function get() {\n return 'strings';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.19\"\n };\n }\n }]);\n\n function Strings(core) {\n var _this;\n\n _classCallCheck(this, Strings);\n\n _this = _super.call(this, core);\n\n _this._initializeMessages();\n\n return _this;\n }\n /**\n * Gets a translated string for the given key.\n * @method t\n * @param {String} key the key to all messages\n * @return {String} translated label\n */\n\n\n _createClass(Strings, [{\n key: \"t\",\n value: function t(key) {\n var lang = this._language();\n\n var fallbackLang = this._messages['en'];\n var i18n = lang && this._messages[lang] || fallbackLang;\n return i18n[key] || fallbackLang[key] || key;\n }\n }, {\n key: \"_language\",\n value: function _language() {\n return this.core.options.language || getBrowserLanguage();\n }\n }, {\n key: \"_initializeMessages\",\n value: function _initializeMessages() {\n var defaultMessages = {\n 'en': {\n 'live': 'live',\n 'back_to_live': 'back to live',\n 'disabled': 'Disabled',\n 'playback_not_supported': 'Your browser does not support the playback of this video. Please try using a different browser.',\n 'default_error_title': 'Could not play video.',\n 'default_error_message': 'There was a problem trying to load the video.'\n },\n 'de': {\n 'live': 'Live',\n 'back_to_live': 'Zurück zum Live-Video',\n 'disabled': 'Deaktiviert',\n 'playback_not_supported': 'Ihr Browser unterstützt das Playback Verfahren nicht. Bitte vesuchen Sie es mit einem anderen Browser.',\n 'default_error_title': 'Video kann nicht abgespielt werden',\n 'default_error_message': 'Es gab ein Problem beim Laden des Videos'\n },\n 'pt': {\n 'live': 'ao vivo',\n 'back_to_live': 'voltar para o ao vivo',\n 'disabled': 'Desativado',\n 'playback_not_supported': 'Seu navegador não supporta a reprodução deste video. Por favor, tente usar um navegador diferente.',\n 'default_error_title': 'Não foi possível reproduzir o vídeo.',\n 'default_error_message': 'Ocorreu um problema ao tentar carregar o vídeo.'\n },\n 'es': {\n 'live': 'vivo',\n 'back_to_live': 'volver en vivo',\n 'disabled': 'Discapacitado',\n 'playback_not_supported': 'Su navegador no soporta la reproducción de un video. Por favor, trate de usar un navegador diferente.'\n },\n 'ru': {\n 'live': 'прямой эфир',\n 'back_to_live': 'к прямому эфиру',\n 'disabled': 'Отключено',\n 'playback_not_supported': 'Ваш браузер не поддерживает воспроизведение этого видео. Пожалуйста, попробуйте другой браузер.'\n },\n 'fr': {\n 'live': 'en direct',\n 'back_to_live': 'retour au direct',\n 'disabled': 'Désactivé',\n 'playback_not_supported': 'Votre navigateur ne supporte pas la lecture de cette vidéo. Merci de tenter sur un autre navigateur.',\n 'default_error_title': 'Impossible de lire la vidéo.',\n 'default_error_message': 'Un problème est survenu lors du chargement de la vidéo.'\n },\n 'tr': {\n 'live': 'canlı',\n 'back_to_live': 'canlı yayına dön',\n 'disabled': 'Engelli',\n 'playback_not_supported': 'Tarayıcınız bu videoyu oynatma desteğine sahip değil. Lütfen farklı bir tarayıcı ile deneyin.'\n },\n 'et': {\n 'live': 'Otseülekanne',\n 'back_to_live': 'Tagasi otseülekande juurde',\n 'disabled': 'Keelatud',\n 'playback_not_supported': 'Teie brauser ei toeta selle video taasesitust. Proovige kasutada muud brauserit.'\n },\n 'ar': {\n 'live': 'مباشر',\n 'back_to_live': 'الرجوع إلى المباشر',\n 'disabled': 'معطّل',\n 'playback_not_supported': 'المتصفح الذي تستخدمه لا يدعم تشغيل هذا الفيديو. الرجاء إستخدام متصفح آخر.',\n 'default_error_title': 'غير قادر الى التشغيل.',\n 'default_error_message': 'حدثت مشكلة أثناء تحميل الفيديو.'\n }\n };\n this._messages = zepto.extend(true, defaultMessages, this.core.options.strings || {});\n this._messages['de-DE'] = this._messages['de'];\n this._messages['pt-BR'] = this._messages['pt'];\n this._messages['en-US'] = this._messages['en'];\n this._messages['es-419'] = this._messages['es'];\n this._messages['fr-FR'] = this._messages['fr'];\n this._messages['tr-TR'] = this._messages['tr'];\n this._messages['et-EE'] = this._messages['et'];\n this._messages['ar-IQ'] = this._messages['ar'];\n }\n }]);\n\n return Strings;\n}(CorePlugin);\n\nvar SourcesPlugin = /*#__PURE__*/function (_CorePlugin) {\n _inherits(SourcesPlugin, _CorePlugin);\n\n var _super = _createSuper(SourcesPlugin);\n\n function SourcesPlugin() {\n _classCallCheck(this, SourcesPlugin);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(SourcesPlugin, [{\n key: \"bindEvents\",\n value: function bindEvents() {\n this.listenTo(this.core, Events.CORE_CONTAINERS_CREATED, this.onContainersCreated);\n }\n }, {\n key: \"onContainersCreated\",\n value: function onContainersCreated() {\n var firstValidSource = this.core.containers.filter(function (container) {\n return container.playback.name !== 'no_op';\n })[0] || this.core.containers[0];\n firstValidSource && this.core.containers.forEach(function (container) {\n if (container !== firstValidSource) container.destroy();\n });\n }\n }, {\n key: \"name\",\n get: function get() {\n return 'sources';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.19\"\n };\n }\n }]);\n\n return SourcesPlugin;\n}(CorePlugin);\n\n// Copyright 2014 Globo.com Player authors. All rights reserved.\nvar version = \"0.4.19\"; // Built-in Plugins/Playbacks\n\nLoader.registerPlugin(Strings);\nLoader.registerPlugin(SourcesPlugin);\nLoader.registerPlayback(NoOp);\nLoader.registerPlayback(HTMLImg);\nLoader.registerPlayback(HTML5Audio);\nLoader.registerPlayback(HTML5Video);\nvar main = {\n Player: Player,\n Events: Events,\n Browser: Browser,\n ContainerPlugin: ContainerPlugin,\n UIContainerPlugin: UIContainerPlugin,\n CorePlugin: CorePlugin,\n UICorePlugin: UICorePlugin,\n Playback: Playback,\n Container: Container,\n Core: Core,\n PlayerError: PlayerError,\n Loader: Loader,\n BaseObject: BaseObject,\n UIObject: UIObject,\n Utils: Utils,\n HTML5Audio: HTML5Audio,\n HTML5Video: HTML5Video,\n HTMLImg: HTMLImg,\n Log: Log,\n Styler: Styler,\n version: version,\n template: tmpl,\n $: zepto\n};\n\nexport default main;\nexport { zepto as $, BaseObject, Browser, Container, ContainerPlugin, Core, CorePlugin, Events, HTML5Audio, HTML5Video, HTMLImg, Loader, Log, Playback, Player, PlayerError, Styler, UIContainerPlugin, UICorePlugin, UIObject, Utils, tmpl as template, version };\n","import { Events, Playback, ContainerPlugin, template, UICorePlugin, CorePlugin, PlayerError, $, Utils, Browser, UIContainerPlugin } from '@clappr/core';\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _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}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _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}\n\nfunction _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\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}\n\nvar ClickToPausePlugin = /*#__PURE__*/function (_ContainerPlugin) {\n _inherits(ClickToPausePlugin, _ContainerPlugin);\n\n var _super = _createSuper(ClickToPausePlugin);\n\n function ClickToPausePlugin(container) {\n _classCallCheck(this, ClickToPausePlugin);\n\n return _super.call(this, container);\n }\n\n _createClass(ClickToPausePlugin, [{\n key: \"name\",\n get: function get() {\n return 'click_to_pause';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.18\"\n };\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n this.listenTo(this.container, Events.CONTAINER_CLICK, this.click);\n this.listenTo(this.container, Events.CONTAINER_SETTINGSUPDATE, this.settingsUpdate);\n }\n }, {\n key: \"click\",\n value: function click() {\n if (this.container.getPlaybackType() !== Playback.LIVE || this.container.isDvrEnabled()) {\n if (this.container.isPlaying()) this.container.pause();else this.container.play();\n }\n }\n }, {\n key: \"settingsUpdate\",\n value: function settingsUpdate() {\n var pointerEnabled = this.container.getPlaybackType() !== Playback.LIVE || this.container.isDvrEnabled();\n if (pointerEnabled === this.pointerEnabled) return;\n var method = pointerEnabled ? 'addClass' : 'removeClass';\n this.container.$el[method]('pointer-enabled');\n this.pointerEnabled = pointerEnabled;\n }\n }]);\n\n return ClickToPausePlugin;\n}(ContainerPlugin);\n\nvar ccIcon = \"<svg version=\\\"1.1\\\" id=\\\"Layer_1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" x=\\\"0px\\\" y=\\\"0px\\\"\\n\\t viewBox=\\\"0 0 49 41.8\\\" style=\\\"enable-background:new 0 0 49 41.8;\\\" xml:space=\\\"preserve\\\">\\n<path d=\\\"M47.1,0H3.2C1.6,0,0,1.2,0,2.8v31.5C0,35.9,1.6,37,3.2,37h11.9l3.2,1.9l4.7,2.7c0.9,0.5,2-0.1,2-1.1V37h22.1\\n\\tc1.6,0,1.9-1.1,1.9-2.7V2.8C49,1.2,48.7,0,47.1,0z M7.2,18.6c0-4.8,3.5-9.3,9.9-9.3c4.8,0,7.1,2.7,7.1,2.7l-2.5,4\\n\\tc0,0-1.7-1.7-4.2-1.7c-2.8,0-4.3,2.1-4.3,4.3c0,2.1,1.5,4.4,4.5,4.4c2.5,0,4.9-2.1,4.9-2.1l2.2,4.2c0,0-2.7,2.9-7.6,2.9\\n\\tC10.8,27.9,7.2,23.5,7.2,18.6z M36.9,27.9c-6.4,0-9.9-4.4-9.9-9.3c0-4.8,3.5-9.3,9.9-9.3C41.7,9.3,44,12,44,12l-2.5,4\\n\\tc0,0-1.7-1.7-4.2-1.7c-2.8,0-4.3,2.1-4.3,4.3c0,2.1,1.5,4.4,4.5,4.4c2.5,0,4.9-2.1,4.9-2.1l2.2,4.2C44.5,25,41.9,27.9,36.9,27.9z\\\"/>\\n</svg>\";\n\nvar ccHTML = \"<button type=\\\"button\\\" class=\\\"cc-button media-control-button media-control-icon\\\" data-cc-button aria-label=\\\"<%= ariaLabel %>\\\"></button>\\n<ul>\\n <% if (title) { %>\\n <li data-title><%= title %></li>\\n <% }; %>\\n <li><a href=\\\"#\\\" data-cc-select=\\\"-1\\\"><%= disabledLabel %></a></li>\\n <% for (var i = 0; i < tracks.length; i++) { %>\\n <li><a href=\\\"#\\\" data-cc-select=\\\"<%= tracks[i].id %>\\\"><%= tracks[i].label %></a></li>\\n <% }; %>\\n</ul>\\n\";\n\nfunction styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css_248z$7 = \".cc-controls[data-cc-controls] {\\n float: right;\\n position: relative;\\n display: none; }\\n .cc-controls[data-cc-controls].available {\\n display: block; }\\n .cc-controls[data-cc-controls] .cc-button {\\n padding: 6px !important; }\\n .cc-controls[data-cc-controls] .cc-button.enabled {\\n display: block;\\n opacity: 1.0; }\\n .cc-controls[data-cc-controls] .cc-button.enabled:hover {\\n opacity: 1.0;\\n text-shadow: none; }\\n .cc-controls[data-cc-controls] > ul {\\n list-style-type: none;\\n position: absolute;\\n bottom: 25px;\\n border: 1px solid black;\\n display: none;\\n background-color: #e6e6e6; }\\n .cc-controls[data-cc-controls] li {\\n font-size: 10px; }\\n .cc-controls[data-cc-controls] li[data-title] {\\n background-color: #c3c2c2;\\n padding: 5px; }\\n .cc-controls[data-cc-controls] li a {\\n color: #444;\\n padding: 2px 10px;\\n display: block;\\n text-decoration: none; }\\n .cc-controls[data-cc-controls] li a:hover {\\n background-color: #555;\\n color: white; }\\n .cc-controls[data-cc-controls] li a:hover a {\\n color: white;\\n text-decoration: none; }\\n .cc-controls[data-cc-controls] li.current a {\\n color: #f00; }\\n\";\nstyleInject(css_248z$7);\n\nvar ClosedCaptions = /*#__PURE__*/function (_UICorePlugin) {\n _inherits(ClosedCaptions, _UICorePlugin);\n\n var _super = _createSuper(ClosedCaptions);\n\n function ClosedCaptions(core) {\n var _this;\n\n _classCallCheck(this, ClosedCaptions);\n\n _this = _super.call(this, core);\n var config = core.options.closedCaptionsConfig;\n _this._title = config && config.title ? config.title : null;\n _this._ariaLabel = config && config.ariaLabel ? config.ariaLabel : 'cc-button';\n _this._labelCb = config && config.labelCallback && typeof config.labelCallback === 'function' ? config.labelCallback : function (track) {\n return track.name;\n };\n return _this;\n }\n\n _createClass(ClosedCaptions, [{\n key: \"name\",\n get: function get() {\n return 'closed_captions';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.18\"\n };\n }\n }, {\n key: \"template\",\n get: function get() {\n return template(ccHTML);\n }\n }, {\n key: \"events\",\n get: function get() {\n return {\n 'click [data-cc-button]': 'toggleContextMenu',\n 'click [data-cc-select]': 'onTrackSelect'\n };\n }\n }, {\n key: \"attributes\",\n get: function get() {\n return {\n 'class': 'cc-controls',\n 'data-cc-controls': ''\n };\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.containerChanged);\n this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.render);\n this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_HIDE, this.hideContextMenu);\n this.bindContainerEvents();\n }\n }, {\n key: \"bindContainerEvents\",\n value: function bindContainerEvents() {\n this.container = this.core.activeContainer;\n\n if (this.container) {\n this.listenTo(this.container, Events.CONTAINER_SUBTITLE_AVAILABLE, this.onSubtitleAvailable);\n this.listenTo(this.container, Events.CONTAINER_SUBTITLE_CHANGED, this.onSubtitleChanged);\n this.listenTo(this.container, Events.CONTAINER_STOP, this.onContainerStop);\n }\n }\n }, {\n key: \"onContainerStop\",\n value: function onContainerStop() {\n this.ccAvailable(false);\n }\n }, {\n key: \"containerChanged\",\n value: function containerChanged() {\n this.ccAvailable(false);\n this.stopListening();\n this.bindEvents();\n }\n }, {\n key: \"onSubtitleAvailable\",\n value: function onSubtitleAvailable() {\n this.renderCcButton();\n this.ccAvailable(true);\n }\n }, {\n key: \"onSubtitleChanged\",\n value: function onSubtitleChanged(track) {\n this.setCurrentContextMenuElement(track.id);\n }\n }, {\n key: \"onTrackSelect\",\n value: function onTrackSelect(event) {\n var trackId = parseInt(event.target.dataset.ccSelect, 10);\n this.container.closedCaptionsTrackId = trackId;\n this.hideContextMenu();\n event.stopPropagation();\n return false;\n }\n }, {\n key: \"ccAvailable\",\n value: function ccAvailable(hasCC) {\n var method = hasCC ? 'addClass' : 'removeClass';\n this.$el[method]('available');\n }\n }, {\n key: \"toggleContextMenu\",\n value: function toggleContextMenu() {\n this.$el.find('ul').toggle();\n }\n }, {\n key: \"hideContextMenu\",\n value: function hideContextMenu() {\n this.$el.find('ul').hide();\n }\n }, {\n key: \"contextMenuElement\",\n value: function contextMenuElement(id) {\n return this.$el.find('ul a' + (!isNaN(id) ? '[data-cc-select=\"' + id + '\"]' : '')).parent();\n }\n }, {\n key: \"setCurrentContextMenuElement\",\n value: function setCurrentContextMenuElement(trackId) {\n if (this._trackId !== trackId) {\n this.contextMenuElement().removeClass('current');\n this.contextMenuElement(trackId).addClass('current');\n var method = trackId > -1 ? 'addClass' : 'removeClass';\n this.$ccButton[method]('enabled');\n this._trackId = trackId;\n }\n }\n }, {\n key: \"renderCcButton\",\n value: function renderCcButton() {\n var tracks = this.container ? this.container.closedCaptionsTracks : [];\n\n for (var i = 0; i < tracks.length; i++) {\n tracks[i].label = this._labelCb(tracks[i]);\n }\n\n this.$el.html(this.template({\n ariaLabel: this._ariaLabel,\n disabledLabel: this.core.i18n.t('disabled'),\n title: this._title,\n tracks: tracks\n }));\n this.$ccButton = this.$el.find('button.cc-button[data-cc-button]');\n this.$ccButton.append(ccIcon);\n this.$el.append(this.style);\n }\n }, {\n key: \"render\",\n value: function render() {\n this.renderCcButton();\n var $fullscreen = this.core.mediaControl.$el.find('button[data-fullscreen]');\n if ($fullscreen[0]) this.$el.insertAfter($fullscreen);else this.core.mediaControl.$el.find('.media-control-right-panel[data-media-control]').prepend(this.$el);\n return this;\n }\n }]);\n\n return ClosedCaptions;\n}(UICorePlugin);\n\nvar dvrHTML = \"<div class=\\\"live-info\\\"><%= live %></div>\\n<button type=\\\"button\\\" class=\\\"live-button\\\" aria-label=\\\"<%= backToLive %>\\\"><%= backToLive %></button>\\n\";\n\nvar css_248z$6 = \".dvr-controls[data-dvr-controls] {\\n display: inline-block;\\n float: left;\\n color: #fff;\\n line-height: 32px;\\n font-size: 10px;\\n font-weight: bold;\\n margin-left: 6px; }\\n .dvr-controls[data-dvr-controls] .live-info {\\n cursor: default;\\n font-family: \\\"Roboto\\\", \\\"Open Sans\\\", Arial, sans-serif;\\n text-transform: uppercase; }\\n .dvr-controls[data-dvr-controls] .live-info:before {\\n content: \\\"\\\";\\n display: inline-block;\\n position: relative;\\n width: 7px;\\n height: 7px;\\n border-radius: 3.5px;\\n margin-right: 3.5px;\\n background-color: #ff0101; }\\n .dvr-controls[data-dvr-controls] .live-info.disabled {\\n opacity: 0.3; }\\n .dvr-controls[data-dvr-controls] .live-info.disabled:before {\\n background-color: #fff; }\\n .dvr-controls[data-dvr-controls] .live-button {\\n cursor: pointer;\\n outline: none;\\n display: none;\\n border: 0;\\n color: #fff;\\n background-color: transparent;\\n height: 32px;\\n padding: 0;\\n opacity: 0.7;\\n font-family: \\\"Roboto\\\", \\\"Open Sans\\\", Arial, sans-serif;\\n text-transform: uppercase;\\n transition: all 0.1s ease; }\\n .dvr-controls[data-dvr-controls] .live-button:before {\\n content: \\\"\\\";\\n display: inline-block;\\n position: relative;\\n width: 7px;\\n height: 7px;\\n border-radius: 3.5px;\\n margin-right: 3.5px;\\n background-color: #fff; }\\n .dvr-controls[data-dvr-controls] .live-button:hover {\\n opacity: 1;\\n text-shadow: rgba(255, 255, 255, 0.75) 0 0 5px; }\\n\\n.dvr .dvr-controls[data-dvr-controls] .live-info {\\n display: none; }\\n\\n.dvr .dvr-controls[data-dvr-controls] .live-button {\\n display: block; }\\n\\n.dvr.media-control.live[data-media-control] .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-fill-2[data-seekbar] {\\n background-color: #005aff; }\\n\\n.media-control.live[data-media-control] .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-fill-2[data-seekbar] {\\n background-color: #ff0101; }\\n\";\nstyleInject(css_248z$6);\n\nvar DVRControls = /*#__PURE__*/function (_UICorePlugin) {\n _inherits(DVRControls, _UICorePlugin);\n\n var _super = _createSuper(DVRControls);\n\n function DVRControls(core) {\n var _this;\n\n _classCallCheck(this, DVRControls);\n\n _this = _super.call(this, core);\n\n _this.settingsUpdate();\n\n return _this;\n }\n\n _createClass(DVRControls, [{\n key: \"template\",\n get: function get() {\n return template(dvrHTML);\n }\n }, {\n key: \"name\",\n get: function get() {\n return 'dvr_controls';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.18\"\n };\n }\n }, {\n key: \"events\",\n get: function get() {\n return {\n 'click .live-button': 'click'\n };\n }\n }, {\n key: \"attributes\",\n get: function get() {\n return {\n 'class': 'dvr-controls',\n 'data-dvr-controls': ''\n };\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n this.bindCoreEvents();\n this.bindContainerEvents();\n }\n }, {\n key: \"bindCoreEvents\",\n value: function bindCoreEvents() {\n var _this2 = this;\n\n if (this.core.mediaControl.settings) {\n this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.containerChanged);\n this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.settingsUpdate);\n this.listenTo(this.core, Events.CORE_OPTIONS_CHANGE, this.render);\n } else {\n setTimeout(function () {\n return _this2.bindCoreEvents();\n }, 100);\n }\n }\n }, {\n key: \"bindContainerEvents\",\n value: function bindContainerEvents() {\n if (this.core.activeContainer) {\n this.listenToOnce(this.core.activeContainer, Events.CONTAINER_TIMEUPDATE, this.render);\n this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.dvrChanged);\n }\n }\n }, {\n key: \"containerChanged\",\n value: function containerChanged() {\n this.stopListening();\n this.bindEvents();\n }\n }, {\n key: \"dvrChanged\",\n value: function dvrChanged(dvrEnabled) {\n if (this.core.getPlaybackType() !== Playback.LIVE) return;\n this.settingsUpdate();\n this.core.mediaControl.$el.addClass('live');\n\n if (dvrEnabled) {\n this.core.mediaControl.$el.addClass('dvr');\n this.core.mediaControl.$el.find('.media-control-indicator[data-position], .media-control-indicator[data-duration]').hide();\n } else {\n this.core.mediaControl.$el.removeClass('dvr');\n }\n }\n }, {\n key: \"click\",\n value: function click() {\n var mediaControl = this.core.mediaControl;\n var container = mediaControl.container;\n if (!container.isPlaying()) container.play();\n if (mediaControl.$el.hasClass('dvr')) container.seek(container.getDuration());\n }\n }, {\n key: \"settingsUpdate\",\n value: function settingsUpdate() {\n var _this3 = this;\n\n this.stopListening();\n this.core.mediaControl.$el.removeClass('live');\n\n if (this.shouldRender()) {\n this.render();\n this.$el.click(function () {\n return _this3.click();\n });\n }\n\n this.bindEvents();\n }\n }, {\n key: \"shouldRender\",\n value: function shouldRender() {\n var useDvrControls = this.core.options.useDvrControls === undefined || !!this.core.options.useDvrControls;\n return useDvrControls && this.core.getPlaybackType() === Playback.LIVE;\n }\n }, {\n key: \"render\",\n value: function render() {\n this.$el.html(this.template({\n live: this.core.i18n.t('live'),\n backToLive: this.core.i18n.t('back_to_live')\n }));\n\n if (this.shouldRender()) {\n this.core.mediaControl.$el.addClass('live');\n this.core.mediaControl.$('.media-control-left-panel[data-media-control]').append(this.$el);\n }\n\n return this;\n }\n }]);\n\n return DVRControls;\n}(UICorePlugin);\n\nvar EndVideo = /*#__PURE__*/function (_CorePlugin) {\n _inherits(EndVideo, _CorePlugin);\n\n var _super = _createSuper(EndVideo);\n\n function EndVideo() {\n _classCallCheck(this, EndVideo);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(EndVideo, [{\n key: \"name\",\n get: function get() {\n return 'end_video';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.18\"\n };\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.containerChanged);\n var container = this.core.activeContainer;\n\n if (container) {\n this.listenTo(container, Events.CONTAINER_ENDED, this.ended);\n this.listenTo(container, Events.CONTAINER_STOP, this.ended);\n }\n }\n }, {\n key: \"containerChanged\",\n value: function containerChanged() {\n this.stopListening();\n this.bindEvents();\n }\n }, {\n key: \"ended\",\n value: function ended() {\n var exitOnEnd = typeof this.core.options.exitFullscreenOnEnd === 'undefined' || this.core.options.exitFullscreenOnEnd;\n if (exitOnEnd && this.core.isFullscreen()) this.core.toggleFullscreen();\n }\n }]);\n\n return EndVideo;\n}(CorePlugin);\n\nvar reloadIcon = \"<svg fill=\\\"#FFFFFF\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n <path d=\\\"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\\\"/>\\n <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/>\\n</svg>\";\n\nvar templateHtml = \"<div class=\\\"player-error-screen__content\\\" data-error-screen>\\n <% if (icon) { %>\\n <div class=\\\"player-error-screen__icon\\\" data-error-screen><%= icon %></div>\\n <% } %>\\n <div class=\\\"player-error-screen__title\\\" data-error-screen><%= title %></div>\\n <div class=\\\"player-error-screen__message\\\" data-error-screen><%= message %></div>\\n <div class=\\\"player-error-screen__code\\\" data-error-screen>Error code: <%= code %></div>\\n <div class=\\\"player-error-screen__reload\\\" data-error-screen><%= reloadIcon %></div>\\n</div>\\n\";\n\nvar css_248z$5 = \"[data-player] .player-error-screen {\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n color: #CCCACA;\\n position: absolute;\\n top: 0;\\n height: 100%;\\n width: 100%;\\n background-color: rgba(0, 0, 0, 0.7);\\n z-index: 2000;\\n display: flex;\\n flex-direction: column;\\n justify-content: center; }\\n [data-player] .player-error-screen__content[data-error-screen] {\\n font-size: 14px;\\n color: #CCCACA;\\n margin-top: 45px; }\\n [data-player] .player-error-screen__title[data-error-screen] {\\n font-weight: bold;\\n line-height: 30px;\\n font-size: 18px; }\\n [data-player] .player-error-screen__message[data-error-screen] {\\n width: 90%;\\n margin: 0 auto; }\\n [data-player] .player-error-screen__code[data-error-screen] {\\n font-size: 13px;\\n margin-top: 15px; }\\n [data-player] .player-error-screen__reload {\\n cursor: pointer;\\n width: 30px;\\n margin: 15px auto 0 !important; }\\n\";\nstyleInject(css_248z$5);\n\nvar ErrorScreen = /*#__PURE__*/function (_UICorePlugin) {\n _inherits(ErrorScreen, _UICorePlugin);\n\n var _super = _createSuper(ErrorScreen);\n\n function ErrorScreen(core) {\n var _this;\n\n _classCallCheck(this, ErrorScreen);\n\n _this = _super.call(this, core);\n if (_this.options.disableErrorScreen) return _possibleConstructorReturn(_this, _this.disable());\n return _this;\n }\n\n _createClass(ErrorScreen, [{\n key: \"name\",\n get: function get() {\n return 'error_screen';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.18\"\n };\n }\n }, {\n key: \"template\",\n get: function get() {\n return template(templateHtml);\n }\n }, {\n key: \"container\",\n get: function get() {\n return this.core.getCurrentContainer();\n }\n }, {\n key: \"attributes\",\n get: function get() {\n return {\n 'class': 'player-error-screen',\n 'data-error-screen': ''\n };\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n this.listenTo(this.core, Events.ERROR, this.onError);\n this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onContainerChanged);\n }\n }, {\n key: \"bindReload\",\n value: function bindReload() {\n this.reloadButton = this.$el.find('.player-error-screen__reload');\n this.reloadButton && this.reloadButton.on('click', this.reload.bind(this));\n }\n }, {\n key: \"reload\",\n value: function reload() {\n var _this2 = this;\n\n this.listenToOnce(this.core, Events.CORE_READY, function () {\n return _this2.container.play();\n });\n this.core.load(this.options.sources, this.options.mimeType);\n this.unbindReload();\n }\n }, {\n key: \"unbindReload\",\n value: function unbindReload() {\n this.reloadButton && this.reloadButton.off('click');\n }\n }, {\n key: \"onContainerChanged\",\n value: function onContainerChanged() {\n this.err = null;\n this.unbindReload();\n this.hide();\n }\n }, {\n key: \"onError\",\n value: function onError() {\n var err = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (err.level === PlayerError.Levels.FATAL) {\n this.err = err;\n this.container.disableMediaControl();\n this.container.stop();\n this.show();\n }\n }\n }, {\n key: \"show\",\n value: function show() {\n this.render();\n this.$el.show();\n }\n }, {\n key: \"hide\",\n value: function hide() {\n this.$el.hide();\n }\n }, {\n key: \"render\",\n value: function render() {\n if (!this.err) return;\n this.$el.html(this.template({\n title: this.err.UI.title,\n message: this.err.UI.message,\n code: this.err.code,\n icon: this.err.UI.icon || '',\n reloadIcon: reloadIcon\n }));\n this.core.$el.append(this.el);\n this.bindReload();\n return this;\n }\n }]);\n\n return ErrorScreen;\n}(UICorePlugin);\n\nvar playIcon = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\">\\n <path fill=\\\"#010101\\\" d=\\\"M1.425.35L14.575 8l-13.15 7.65V.35z\\\"/>\\n</svg>\";\n\nvar pauseIcon = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\">\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"#010101\\\" d=\\\"M1.712 14.76H6.43V1.24H1.71v13.52zm7.86-13.52v13.52h4.716V1.24H9.573z\\\"/>\\n</svg>\";\n\nvar oldIcon = $('link[rel=\"shortcut icon\"]');\n\nvar Favicon = /*#__PURE__*/function (_CorePlugin) {\n _inherits(Favicon, _CorePlugin);\n\n var _super = _createSuper(Favicon);\n\n function Favicon(core) {\n var _this;\n\n _classCallCheck(this, Favicon);\n\n _this = _super.call(this, core);\n _this._container = null;\n\n _this.configure();\n\n return _this;\n }\n\n _createClass(Favicon, [{\n key: \"name\",\n get: function get() {\n return 'favicon';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.18\"\n };\n }\n }, {\n key: \"oldIcon\",\n get: function get() {\n return oldIcon;\n }\n }, {\n key: \"configure\",\n value: function configure() {\n if (this.core.options.changeFavicon) {\n if (!this.enabled) {\n this.stopListening(this.core, Events.CORE_OPTIONS_CHANGE);\n this.enable();\n }\n } else if (this.enabled) {\n this.disable();\n this.listenTo(this.core, Events.CORE_OPTIONS_CHANGE, this.configure);\n }\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n this.listenTo(this.core, Events.CORE_OPTIONS_CHANGE, this.configure);\n this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.containerChanged);\n this.core.activeContainer && this.containerChanged();\n }\n }, {\n key: \"containerChanged\",\n value: function containerChanged() {\n this._container && this.stopListening(this._container);\n this._container = this.core.activeContainer;\n this.listenTo(this._container, Events.CONTAINER_PLAY, this.setPlayIcon);\n this.listenTo(this._container, Events.CONTAINER_PAUSE, this.setPauseIcon);\n this.listenTo(this._container, Events.CONTAINER_STOP, this.resetIcon);\n this.listenTo(this._container, Events.CONTAINER_ENDED, this.resetIcon);\n this.listenTo(this._container, Events.CONTAINER_ERROR, this.resetIcon);\n this.resetIcon();\n }\n }, {\n key: \"disable\",\n value: function disable() {\n _get(_getPrototypeOf(Favicon.prototype), \"disable\", this).call(this);\n\n this.resetIcon();\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n _get(_getPrototypeOf(Favicon.prototype), \"destroy\", this).call(this);\n\n this.resetIcon();\n }\n }, {\n key: \"createIcon\",\n value: function createIcon(svg) {\n var canvas = $('<canvas/>');\n canvas[0].width = 16;\n canvas[0].height = 16;\n var ctx = canvas[0].getContext('2d');\n ctx.fillStyle = '#000';\n var d = $(svg).find('path').attr('d');\n var path = new Path2D(d);\n ctx.fill(path);\n var icon = $('<link rel=\"shortcut icon\" type=\"image/png\"/>');\n icon.attr('href', canvas[0].toDataURL('image/png'));\n return icon;\n }\n }, {\n key: \"setPlayIcon\",\n value: function setPlayIcon() {\n if (!this.playIcon) this.playIcon = this.createIcon(playIcon);\n this.changeIcon(this.playIcon);\n }\n }, {\n key: \"setPauseIcon\",\n value: function setPauseIcon() {\n if (!this.pauseIcon) this.pauseIcon = this.createIcon(pauseIcon);\n this.changeIcon(this.pauseIcon);\n }\n }, {\n key: \"resetIcon\",\n value: function resetIcon() {\n $('link[rel=\"shortcut icon\"]').remove();\n $('head').append(this.oldIcon);\n }\n }, {\n key: \"changeIcon\",\n value: function changeIcon(icon) {\n if (icon) {\n $('link[rel=\"shortcut icon\"]').remove();\n $('head').append(icon);\n }\n }\n }]);\n\n return Favicon;\n}(CorePlugin);\n\nvar GoogleAnalytics = /*#__PURE__*/function (_ContainerPlugin) {\n _inherits(GoogleAnalytics, _ContainerPlugin);\n\n var _super = _createSuper(GoogleAnalytics);\n\n function GoogleAnalytics(container) {\n var _this;\n\n _classCallCheck(this, GoogleAnalytics);\n\n _this = _super.call(this, container);\n\n if (_this.container.options.gaAccount) {\n _this.account = _this.container.options.gaAccount;\n _this.trackerName = _this.container.options.gaTrackerName ? _this.container.options.gaTrackerName + '.' : 'Clappr.';\n _this.domainName = _this.container.options.gaDomainName;\n _this.currentHDState = undefined;\n\n _this.embedScript();\n }\n\n return _this;\n }\n\n _createClass(GoogleAnalytics, [{\n key: \"name\",\n get: function get() {\n return 'google_analytics';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.18\"\n };\n }\n }, {\n key: \"embedScript\",\n value: function embedScript() {\n var _this2 = this;\n\n if (!window._gat) {\n var script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('async', 'async');\n script.setAttribute('src', '//www.google-analytics.com/ga.js');\n\n script.onload = function () {\n return _this2.addEventListeners();\n };\n\n document.body.appendChild(script);\n } else {\n this.addEventListeners();\n }\n }\n }, {\n key: \"addEventListeners\",\n value: function addEventListeners() {\n var _this3 = this;\n\n if (this.container) {\n this.listenTo(this.container, Events.CONTAINER_READY, this.onReady);\n this.listenTo(this.container, Events.CONTAINER_PLAY, this.onPlay);\n this.listenTo(this.container, Events.CONTAINER_STOP, this.onStop);\n this.listenTo(this.container, Events.CONTAINER_PAUSE, this.onPause);\n this.listenTo(this.container, Events.CONTAINER_ENDED, this.onEnded);\n this.listenTo(this.container, Events.CONTAINER_STATE_BUFFERING, this.onBuffering);\n this.listenTo(this.container, Events.CONTAINER_STATE_BUFFERFULL, this.onBufferFull);\n this.listenTo(this.container, Events.CONTAINER_ERROR, this.onError);\n this.listenTo(this.container, Events.CONTAINER_PLAYBACKSTATE, this.onPlaybackChanged);\n this.listenTo(this.container, Events.CONTAINER_VOLUME, function (event) {\n return _this3.onVolumeChanged(event);\n });\n this.listenTo(this.container, Events.CONTAINER_SEEK, function (event) {\n return _this3.onSeek(event);\n });\n this.listenTo(this.container, Events.CONTAINER_FULL_SCREEN, this.onFullscreen);\n this.listenTo(this.container, Events.CONTAINER_HIGHDEFINITIONUPDATE, this.onHD);\n this.listenTo(this.container, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.onDVR);\n }\n\n _gaq.push([this.trackerName + '_setAccount', this.account]);\n\n if (this.domainName) _gaq.push([this.trackerName + '_setDomainName', this.domainName]);\n }\n }, {\n key: \"onReady\",\n value: function onReady() {\n this.push(['Video', 'Playback', this.container.playback.name]);\n }\n }, {\n key: \"onPlay\",\n value: function onPlay() {\n this.push(['Video', 'Play', this.container.playback.src]);\n }\n }, {\n key: \"onStop\",\n value: function onStop() {\n this.push(['Video', 'Stop', this.container.playback.src]);\n }\n }, {\n key: \"onEnded\",\n value: function onEnded() {\n this.push(['Video', 'Ended', this.container.playback.src]);\n }\n }, {\n key: \"onBuffering\",\n value: function onBuffering() {\n this.push(['Video', 'Buffering', this.container.playback.src]);\n }\n }, {\n key: \"onBufferFull\",\n value: function onBufferFull() {\n this.push(['Video', 'Bufferfull', this.container.playback.src]);\n }\n }, {\n key: \"onError\",\n value: function onError() {\n this.push(['Video', 'Error', this.container.playback.src]);\n }\n }, {\n key: \"onHD\",\n value: function onHD(isHD) {\n var status = isHD ? 'ON' : 'OFF';\n\n if (status !== this.currentHDState) {\n this.currentHDState = status;\n this.push(['Video', 'HD - ' + status, this.container.playback.src]);\n }\n }\n }, {\n key: \"onPlaybackChanged\",\n value: function onPlaybackChanged(playbackState) {\n if (playbackState.type !== null) this.push(['Video', 'Playback Type - ' + playbackState.type, this.container.playback.src]);\n }\n }, {\n key: \"onDVR\",\n value: function onDVR(dvrInUse) {\n var status = dvrInUse ? 'ON' : 'OFF';\n this.push(['Interaction', 'DVR - ' + status, this.container.playback.src]);\n }\n }, {\n key: \"onPause\",\n value: function onPause() {\n this.push(['Video', 'Pause', this.container.playback.src]);\n }\n }, {\n key: \"onSeek\",\n value: function onSeek() {\n this.push(['Video', 'Seek', this.container.playback.src]);\n }\n }, {\n key: \"onVolumeChanged\",\n value: function onVolumeChanged() {\n this.push(['Interaction', 'Volume', this.container.playback.src]);\n }\n }, {\n key: \"onFullscreen\",\n value: function onFullscreen() {\n this.push(['Interaction', 'Fullscreen', this.container.playback.src]);\n }\n }, {\n key: \"push\",\n value: function push(array) {\n var res = [this.trackerName + '_trackEvent'].concat(array);\n\n _gaq.push(res);\n }\n }]);\n\n return GoogleAnalytics;\n}(ContainerPlugin);\n\n/* eslint-disable */\n// Kibo is released under the MIT License. Copyright (c) 2013 marquete.\n// see https://github.com/marquete/kibo\nvar Kibo = function Kibo(element) {\n this.element = element || window.document;\n this.initialize();\n};\n\nKibo.KEY_NAMES_BY_CODE = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 20: 'caps_lock',\n 27: 'esc',\n 32: 'space',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 65: 'a',\n 66: 'b',\n 67: 'c',\n 68: 'd',\n 69: 'e',\n 70: 'f',\n 71: 'g',\n 72: 'h',\n 73: 'i',\n 74: 'j',\n 75: 'k',\n 76: 'l',\n 77: 'm',\n 78: 'n',\n 79: 'o',\n 80: 'p',\n 81: 'q',\n 82: 'r',\n 83: 's',\n 84: 't',\n 85: 'u',\n 86: 'v',\n 87: 'w',\n 88: 'x',\n 89: 'y',\n 90: 'z',\n 112: 'f1',\n 113: 'f2',\n 114: 'f3',\n 115: 'f4',\n 116: 'f5',\n 117: 'f6',\n 118: 'f7',\n 119: 'f8',\n 120: 'f9',\n 121: 'f10',\n 122: 'f11',\n 123: 'f12'\n};\nKibo.KEY_CODES_BY_NAME = {};\n\n(function () {\n for (var key in Kibo.KEY_NAMES_BY_CODE) {\n if (Object.prototype.hasOwnProperty.call(Kibo.KEY_NAMES_BY_CODE, key)) {\n Kibo.KEY_CODES_BY_NAME[Kibo.KEY_NAMES_BY_CODE[key]] = +key;\n }\n }\n})();\n\nKibo.MODIFIERS = ['shift', 'ctrl', 'alt'];\n\nKibo.registerEvent = function () {\n if (document.addEventListener) {\n return function (element, eventName, func) {\n element.addEventListener(eventName, func, false);\n };\n } else if (document.attachEvent) {\n return function (element, eventName, func) {\n element.attachEvent('on' + eventName, func);\n };\n }\n}();\n\nKibo.unregisterEvent = function () {\n if (document.removeEventListener) {\n return function (element, eventName, func) {\n element.removeEventListener(eventName, func, false);\n };\n } else if (document.detachEvent) {\n return function (element, eventName, func) {\n element.detachEvent('on' + eventName, func);\n };\n }\n}();\n\nKibo.stringContains = function (string, substring) {\n return string.indexOf(substring) !== -1;\n};\n\nKibo.neatString = function (string) {\n return string.replace(/^\\s+|\\s+$/g, '').replace(/\\s+/g, ' ');\n};\n\nKibo.capitalize = function (string) {\n return string.toLowerCase().replace(/^./, function (match) {\n return match.toUpperCase();\n });\n};\n\nKibo.isString = function (what) {\n return Kibo.stringContains(Object.prototype.toString.call(what), 'String');\n};\n\nKibo.arrayIncludes = function () {\n if (Array.prototype.indexOf) {\n return function (haystack, needle) {\n return haystack.indexOf(needle) !== -1;\n };\n } else {\n return function (haystack, needle) {\n for (var i = 0; i < haystack.length; i++) {\n if (haystack[i] === needle) {\n return true;\n }\n }\n\n return false;\n };\n }\n}();\n\nKibo.extractModifiers = function (keyCombination) {\n var modifiers, i;\n modifiers = [];\n\n for (i = 0; i < Kibo.MODIFIERS.length; i++) {\n if (Kibo.stringContains(keyCombination, Kibo.MODIFIERS[i])) {\n modifiers.push(Kibo.MODIFIERS[i]);\n }\n }\n\n return modifiers;\n};\n\nKibo.extractKey = function (keyCombination) {\n var keys, i;\n keys = Kibo.neatString(keyCombination).split(' ');\n\n for (i = 0; i < keys.length; i++) {\n if (!Kibo.arrayIncludes(Kibo.MODIFIERS, keys[i])) {\n return keys[i];\n }\n }\n};\n\nKibo.modifiersAndKey = function (keyCombination) {\n var result, key;\n\n if (Kibo.stringContains(keyCombination, 'any')) {\n return Kibo.neatString(keyCombination).split(' ').slice(0, 2).join(' ');\n }\n\n result = Kibo.extractModifiers(keyCombination);\n key = Kibo.extractKey(keyCombination);\n\n if (key && !Kibo.arrayIncludes(Kibo.MODIFIERS, key)) {\n result.push(key);\n }\n\n return result.join(' ');\n};\n\nKibo.keyName = function (keyCode) {\n return Kibo.KEY_NAMES_BY_CODE[keyCode + ''];\n};\n\nKibo.keyCode = function (keyName) {\n return +Kibo.KEY_CODES_BY_NAME[keyName];\n};\n\nKibo.prototype.initialize = function () {\n var i,\n that = this;\n this.lastKeyCode = -1;\n this.lastModifiers = {};\n\n for (i = 0; i < Kibo.MODIFIERS.length; i++) {\n this.lastModifiers[Kibo.MODIFIERS[i]] = false;\n }\n\n this.keysDown = {\n any: []\n };\n this.keysUp = {\n any: []\n };\n this.downHandler = this.handler('down');\n this.upHandler = this.handler('up');\n Kibo.registerEvent(this.element, 'keydown', this.downHandler);\n Kibo.registerEvent(this.element, 'keyup', this.upHandler);\n Kibo.registerEvent(window, 'unload', function unloader() {\n Kibo.unregisterEvent(that.element, 'keydown', that.downHandler);\n Kibo.unregisterEvent(that.element, 'keyup', that.upHandler);\n Kibo.unregisterEvent(window, 'unload', unloader);\n });\n};\n\nKibo.prototype.handler = function (upOrDown) {\n var that = this;\n return function (e) {\n var i, registeredKeys, lastModifiersAndKey;\n e = e || window.event;\n that.lastKeyCode = e.keyCode;\n\n for (i = 0; i < Kibo.MODIFIERS.length; i++) {\n that.lastModifiers[Kibo.MODIFIERS[i]] = e[Kibo.MODIFIERS[i] + 'Key'];\n }\n\n if (Kibo.arrayIncludes(Kibo.MODIFIERS, Kibo.keyName(that.lastKeyCode))) {\n that.lastModifiers[Kibo.keyName(that.lastKeyCode)] = true;\n }\n\n registeredKeys = that['keys' + Kibo.capitalize(upOrDown)];\n\n for (i = 0; i < registeredKeys.any.length; i++) {\n if (registeredKeys.any[i](e) === false && e.preventDefault) {\n e.preventDefault();\n }\n }\n\n lastModifiersAndKey = that.lastModifiersAndKey();\n\n if (registeredKeys[lastModifiersAndKey]) {\n for (i = 0; i < registeredKeys[lastModifiersAndKey].length; i++) {\n if (registeredKeys[lastModifiersAndKey][i](e) === false && e.preventDefault) {\n e.preventDefault();\n }\n }\n }\n };\n};\n\nKibo.prototype.registerKeys = function (upOrDown, newKeys, func) {\n var i,\n keys,\n registeredKeys = this['keys' + Kibo.capitalize(upOrDown)];\n\n if (Kibo.isString(newKeys)) {\n newKeys = [newKeys];\n }\n\n for (i = 0; i < newKeys.length; i++) {\n keys = newKeys[i];\n keys = Kibo.modifiersAndKey(keys + '');\n\n if (registeredKeys[keys]) {\n registeredKeys[keys].push(func);\n } else {\n registeredKeys[keys] = [func];\n }\n }\n\n return this;\n}; // jshint maxdepth:5\n\n\nKibo.prototype.unregisterKeys = function (upOrDown, newKeys, func) {\n var i,\n j,\n keys,\n registeredKeys = this['keys' + Kibo.capitalize(upOrDown)];\n\n if (Kibo.isString(newKeys)) {\n newKeys = [newKeys];\n }\n\n for (i = 0; i < newKeys.length; i++) {\n keys = newKeys[i];\n keys = Kibo.modifiersAndKey(keys + '');\n\n if (func === null) {\n delete registeredKeys[keys];\n } else {\n if (registeredKeys[keys]) {\n for (j = 0; j < registeredKeys[keys].length; j++) {\n if (String(registeredKeys[keys][j]) === String(func)) {\n registeredKeys[keys].splice(j, 1);\n break;\n }\n }\n }\n }\n }\n\n return this;\n};\n\nKibo.prototype.off = function (keys) {\n return this.unregisterKeys('down', keys, null);\n};\n\nKibo.prototype.delegate = function (upOrDown, keys, func) {\n return func !== null || func !== undefined ? this.registerKeys(upOrDown, keys, func) : this.unregisterKeys(upOrDown, keys, func);\n};\n\nKibo.prototype.down = function (keys, func) {\n return this.delegate('down', keys, func);\n};\n\nKibo.prototype.up = function (keys, func) {\n return this.delegate('up', keys, func);\n};\n\nKibo.prototype.lastKey = function (modifier) {\n if (!modifier) {\n return Kibo.keyName(this.lastKeyCode);\n }\n\n return this.lastModifiers[modifier];\n};\n\nKibo.prototype.lastModifiersAndKey = function () {\n var result, i;\n result = [];\n\n for (i = 0; i < Kibo.MODIFIERS.length; i++) {\n if (this.lastKey(Kibo.MODIFIERS[i])) {\n result.push(Kibo.MODIFIERS[i]);\n }\n }\n\n if (!Kibo.arrayIncludes(result, this.lastKey())) {\n result.push(this.lastKey());\n }\n\n return result.join(' ');\n};\n\nvar index = {\n Kibo: Kibo\n};\n\nvar css_248z$4 = \".media-control-notransition {\\n transition: none !important; }\\n\\n.media-control[data-media-control] {\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n z-index: 9999;\\n pointer-events: none; }\\n .media-control[data-media-control].dragging {\\n pointer-events: auto;\\n cursor: -webkit-grabbing !important;\\n cursor: grabbing !important;\\n cursor: url(\\\"closed-hand.cur\\\"), move; }\\n .media-control[data-media-control].dragging * {\\n cursor: -webkit-grabbing !important;\\n cursor: grabbing !important;\\n cursor: url(\\\"closed-hand.cur\\\"), move; }\\n .media-control[data-media-control] .media-control-background[data-background] {\\n position: absolute;\\n height: 40%;\\n width: 100%;\\n bottom: 0;\\n background: linear-gradient(transparent, rgba(0, 0, 0, 0.9));\\n will-change: transform, opacity;\\n transition: opacity 0.6s ease-out; }\\n .media-control[data-media-control] .media-control-icon {\\n line-height: 0;\\n letter-spacing: 0;\\n speak: none;\\n color: #fff;\\n opacity: 0.5;\\n vertical-align: middle;\\n text-align: left;\\n transition: all 0.1s ease; }\\n .media-control[data-media-control] .media-control-icon:hover {\\n color: white;\\n opacity: 0.75;\\n text-shadow: rgba(255, 255, 255, 0.8) 0 0 5px; }\\n .media-control[data-media-control].media-control-hide .media-control-background[data-background] {\\n opacity: 0; }\\n .media-control[data-media-control].media-control-hide .media-control-layer[data-controls] {\\n transform: translateY(50px); }\\n .media-control[data-media-control].media-control-hide .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-scrubber[data-seekbar] {\\n opacity: 0; }\\n .media-control[data-media-control] .media-control-layer[data-controls] {\\n position: absolute;\\n transform: translateY(-7px);\\n bottom: 0;\\n width: 100%;\\n height: 32px;\\n font-size: 0;\\n vertical-align: middle;\\n pointer-events: auto;\\n transition: bottom 0.4s ease-out; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .media-control-left-panel[data-media-control] {\\n position: absolute;\\n top: 0;\\n left: 4px;\\n height: 100%; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .media-control-center-panel[data-media-control] {\\n height: 100%;\\n text-align: center;\\n line-height: 32px; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .media-control-right-panel[data-media-control] {\\n position: absolute;\\n top: 0;\\n right: 4px;\\n height: 100%; }\\n .media-control[data-media-control] .media-control-layer[data-controls] button.media-control-button {\\n background-color: transparent;\\n border: 0;\\n margin: 0 6px;\\n padding: 0;\\n cursor: pointer;\\n display: inline-block;\\n width: 32px;\\n height: 100%; }\\n .media-control[data-media-control] .media-control-layer[data-controls] button.media-control-button svg {\\n width: 100%;\\n height: 22px; }\\n .media-control[data-media-control] .media-control-layer[data-controls] button.media-control-button svg path {\\n fill: white; }\\n .media-control[data-media-control] .media-control-layer[data-controls] button.media-control-button:focus {\\n outline: none; }\\n .media-control[data-media-control] .media-control-layer[data-controls] button.media-control-button[data-play] {\\n float: left;\\n height: 100%; }\\n .media-control[data-media-control] .media-control-layer[data-controls] button.media-control-button[data-pause] {\\n float: left;\\n height: 100%; }\\n .media-control[data-media-control] .media-control-layer[data-controls] button.media-control-button[data-stop] {\\n float: left;\\n height: 100%; }\\n .media-control[data-media-control] .media-control-layer[data-controls] button.media-control-button[data-fullscreen] {\\n float: right;\\n background-color: transparent;\\n border: 0;\\n height: 100%; }\\n .media-control[data-media-control] .media-control-layer[data-controls] button.media-control-button[data-hd-indicator] {\\n background-color: transparent;\\n border: 0;\\n cursor: default;\\n display: none;\\n float: right;\\n height: 100%; }\\n .media-control[data-media-control] .media-control-layer[data-controls] button.media-control-button[data-hd-indicator].enabled {\\n display: block;\\n opacity: 1.0; }\\n .media-control[data-media-control] .media-control-layer[data-controls] button.media-control-button[data-hd-indicator].enabled:hover {\\n opacity: 1.0;\\n text-shadow: none; }\\n .media-control[data-media-control] .media-control-layer[data-controls] button.media-control-button[data-playpause] {\\n float: left; }\\n .media-control[data-media-control] .media-control-layer[data-controls] button.media-control-button[data-playstop] {\\n float: left; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .media-control-indicator[data-position], .media-control[data-media-control] .media-control-layer[data-controls] .media-control-indicator[data-duration] {\\n display: inline-block;\\n font-size: 10px;\\n color: white;\\n cursor: default;\\n line-height: 32px;\\n position: relative; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .media-control-indicator[data-position] {\\n margin: 0 6px 0 7px; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .media-control-indicator[data-duration] {\\n color: rgba(255, 255, 255, 0.5);\\n margin-right: 6px; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .media-control-indicator[data-duration]:before {\\n content: \\\"|\\\";\\n margin-right: 7px; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .bar-container[data-seekbar] {\\n position: absolute;\\n top: -20px;\\n left: 0;\\n display: inline-block;\\n vertical-align: middle;\\n width: 100%;\\n height: 25px;\\n cursor: pointer; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-background[data-seekbar] {\\n width: 100%;\\n height: 1px;\\n position: relative;\\n top: 12px;\\n background-color: #666666; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-fill-1[data-seekbar] {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 0;\\n height: 100%;\\n background-color: #c2c2c2;\\n transition: all 0.1s ease-out; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-fill-2[data-seekbar] {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 0;\\n height: 100%;\\n background-color: #005aff;\\n transition: all 0.1s ease-out; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-hover[data-seekbar] {\\n opacity: 0;\\n position: absolute;\\n top: -3px;\\n width: 5px;\\n height: 7px;\\n background-color: rgba(255, 255, 255, 0.5);\\n transition: opacity 0.1s ease; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .bar-container[data-seekbar]:hover .bar-background[data-seekbar] .bar-hover[data-seekbar] {\\n opacity: 1; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .bar-container[data-seekbar].seek-disabled {\\n cursor: default; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .bar-container[data-seekbar].seek-disabled:hover .bar-background[data-seekbar] .bar-hover[data-seekbar] {\\n opacity: 0; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-scrubber[data-seekbar] {\\n position: absolute;\\n transform: translateX(-50%);\\n top: 2px;\\n left: 0;\\n width: 20px;\\n height: 20px;\\n opacity: 1;\\n transition: all 0.1s ease-out; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .bar-container[data-seekbar] .bar-scrubber[data-seekbar] .bar-scrubber-icon[data-seekbar] {\\n position: absolute;\\n left: 6px;\\n top: 6px;\\n width: 8px;\\n height: 8px;\\n border-radius: 10px;\\n box-shadow: 0 0 0 6px rgba(255, 255, 255, 0.2);\\n background-color: white; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] {\\n float: right;\\n display: inline-block;\\n height: 32px;\\n cursor: pointer;\\n margin: 0 6px;\\n box-sizing: border-box; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] {\\n float: left;\\n bottom: 0; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] {\\n background-color: transparent;\\n border: 0;\\n box-sizing: content-box;\\n width: 32px;\\n height: 32px;\\n opacity: 0.5; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume]:hover {\\n opacity: 0.75; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg {\\n height: 24px;\\n position: relative;\\n top: 3px; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg path {\\n fill: white; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume].muted svg {\\n margin-left: 2px; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] {\\n float: left;\\n position: relative;\\n overflow: hidden;\\n top: 6px;\\n width: 42px;\\n height: 18px;\\n padding: 3px 0;\\n transition: width .2s ease-out; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] {\\n height: 1px;\\n position: relative;\\n top: 7px;\\n margin: 0 3px;\\n background-color: #666666; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] .bar-fill-1[data-volume] {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 0;\\n height: 100%;\\n background-color: #c2c2c2;\\n transition: all 0.1s ease-out; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] .bar-fill-2[data-volume] {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 0;\\n height: 100%;\\n background-color: #005aff;\\n transition: all 0.1s ease-out; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] .bar-hover[data-volume] {\\n opacity: 0;\\n position: absolute;\\n top: -3px;\\n width: 5px;\\n height: 7px;\\n background-color: rgba(255, 255, 255, 0.5);\\n transition: opacity 0.1s ease; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-scrubber[data-volume] {\\n position: absolute;\\n transform: translateX(-50%);\\n top: 0px;\\n left: 0;\\n width: 20px;\\n height: 20px;\\n opacity: 1;\\n transition: all 0.1s ease-out; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-scrubber[data-volume] .bar-scrubber-icon[data-volume] {\\n position: absolute;\\n left: 6px;\\n top: 6px;\\n width: 8px;\\n height: 8px;\\n border-radius: 10px;\\n box-shadow: 0 0 0 6px rgba(255, 255, 255, 0.2);\\n background-color: white; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume] {\\n float: left;\\n width: 4px;\\n padding-left: 2px;\\n height: 12px;\\n opacity: 0.5;\\n box-shadow: inset 2px 0 0 white;\\n transition: transform .2s ease-out; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume].fill {\\n box-shadow: inset 2px 0 0 #fff;\\n opacity: 1; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume]:nth-of-type(1) {\\n padding-left: 0; }\\n .media-control[data-media-control] .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume]:hover {\\n transform: scaleY(1.5); }\\n .media-control[data-media-control].w320 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume].volume-bar-hide {\\n width: 0;\\n height: 12px;\\n top: 9px;\\n padding: 0; }\\n\";\nstyleInject(css_248z$4);\n\nvar mediaControlHTML = \"<div class=\\\"media-control-background\\\" data-background></div>\\n<div class=\\\"media-control-layer\\\" data-controls>\\n <% var renderBar = function(name) { %>\\n <div class=\\\"bar-container\\\" data-<%= name %>>\\n <div class=\\\"bar-background\\\" data-<%= name %>>\\n <div class=\\\"bar-fill-1\\\" data-<%= name %>></div>\\n <div class=\\\"bar-fill-2\\\" data-<%= name %>></div>\\n <div class=\\\"bar-hover\\\" data-<%= name %>></div>\\n </div>\\n <div class=\\\"bar-scrubber\\\" data-<%= name %>>\\n <div class=\\\"bar-scrubber-icon\\\" data-<%= name %>></div>\\n </div>\\n </div>\\n <% }; %>\\n <% var renderSegmentedBar = function(name, segments) {\\n segments = segments || 10; %>\\n <div class=\\\"bar-container\\\" data-<%= name %>>\\n <% for (var i = 0; i < segments; i++) { %>\\n <div class=\\\"segmented-bar-element\\\" data-<%= name %>></div>\\n <% } %>\\n </div>\\n <% }; %>\\n <% var renderDrawer = function(name, renderContent) { %>\\n <div class=\\\"drawer-container\\\" data-<%= name %>>\\n <div class=\\\"drawer-icon-container\\\" data-<%= name %>>\\n <div class=\\\"drawer-icon media-control-icon\\\" data-<%= name %>></div>\\n <span class=\\\"drawer-text\\\" data-<%= name %>></span>\\n </div>\\n <% renderContent(name); %>\\n </div>\\n <% }; %>\\n <% var renderIndicator = function(name) { %>\\n <div class=\\\"media-control-indicator\\\" data-<%= name %>></div>\\n <% }; %>\\n <% var renderButton = function(name) { %>\\n <button type=\\\"button\\\" class=\\\"media-control-button media-control-icon\\\" data-<%= name %> aria-label=\\\"<%= name %>\\\"></button>\\n <% }; %>\\n <% var templates = {\\n bar: renderBar,\\n segmentedBar: renderSegmentedBar,\\n };\\n var render = function(settingsList) {\\n settingsList.forEach(function(setting) {\\n if(setting === \\\"seekbar\\\") {\\n renderBar(setting);\\n } else if (setting === \\\"volume\\\") {\\n renderDrawer(setting, settings.volumeBarTemplate ? templates[settings.volumeBarTemplate] : function(name) { return renderSegmentedBar(name); });\\n } else if (setting === \\\"duration\\\" || setting === \\\"position\\\") {\\n renderIndicator(setting);\\n } else {\\n renderButton(setting);\\n }\\n });\\n }; %>\\n <% if (settings.default && settings.default.length) { %>\\n <div class=\\\"media-control-center-panel\\\" data-media-control>\\n <% render(settings.default); %>\\n </div>\\n <% } %>\\n <% if (settings.left && settings.left.length) { %>\\n <div class=\\\"media-control-left-panel\\\" data-media-control>\\n <% render(settings.left); %>\\n </div>\\n <% } %>\\n <% if (settings.right && settings.right.length) { %>\\n <div class=\\\"media-control-right-panel\\\" data-media-control>\\n <% render(settings.right); %>\\n </div>\\n <% } %>\\n</div>\\n\";\n\nvar stopIcon = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\">\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"#010101\\\" d=\\\"M1.712 1.24h12.6v13.52h-12.6z\\\"/>\\n</svg>\";\n\nvar volumeIcon = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\">\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"#010101\\\" d=\\\"M11.5 11h-.002v1.502L7.798 10H4.5V6h3.297l3.7-2.502V4.5h.003V11zM11 4.49L7.953 6.5H5v3h2.953L11 11.51V4.49z\\\"/>\\n</svg>\";\n\nvar volumeMuteIcon = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\">\\n <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" fill=\\\"#010101\\\" d=\\\"M9.75 11.51L6.7 9.5H3.75v-3H6.7L9.75 4.49v.664l.497.498V3.498L6.547 6H3.248v4h3.296l3.7 2.502v-2.154l-.497.5v.662zm3-5.165L12.404 6l-1.655 1.653L9.093 6l-.346.345L10.402 8 8.747 9.654l.346.347 1.655-1.653L12.403 10l.348-.346L11.097 8l1.655-1.655z\\\"/>\\n</svg>\";\n\nvar fullscreenIcon = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\">\\n <path fill=\\\"#010101\\\" d=\\\"M7.156 8L4 11.156V8.5H3V13h4.5v-1H4.844L8 8.844 7.156 8zM8.5 3v1h2.657L8 7.157 8.846 8 12 4.844V7.5h1V3H8.5z\\\"/>\\n</svg>\";\n\nvar exitFullscreenIcon = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\">\\n <path fill=\\\"#010101\\\" d=\\\"M13.5 3.344l-.844-.844L9.5 5.656V3h-1v4.5H13v-1h-2.656L13.5 3.344zM3 9.5h2.656L2.5 12.656l.844.844L6.5 10.344V13h1V8.5H3v1z\\\"/>\\n</svg>\";\n\nvar hdIcon = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\">\\n <path fill=\\\"#010101\\\" d=\\\"M5.375 7.062H2.637V4.26H.502v7.488h2.135V8.9h2.738v2.848h2.133V4.26H5.375v2.802zm5.97-2.81h-2.84v7.496h2.798c2.65 0 4.195-1.607 4.195-3.77v-.022c0-2.162-1.523-3.704-4.154-3.704zm2.06 3.758c0 1.21-.81 1.896-2.03 1.896h-.83V6.093h.83c1.22 0 2.03.696 2.03 1.896v.02z\\\"/>\\n</svg>\";\n\nvar Config = Utils.Config,\n Fullscreen = Utils.Fullscreen,\n formatTime$1 = Utils.formatTime,\n extend = Utils.extend,\n removeArrayItem = Utils.removeArrayItem;\n\nvar MediaControl = /*#__PURE__*/function (_UICorePlugin) {\n _inherits(MediaControl, _UICorePlugin);\n\n var _super = _createSuper(MediaControl);\n\n function MediaControl(core) {\n var _this;\n\n _classCallCheck(this, MediaControl);\n\n _this = _super.call(this, core);\n _this.persistConfig = _this.options.persistConfig;\n _this.currentPositionValue = null;\n _this.currentDurationValue = null;\n _this.keepVisible = false;\n _this.fullScreenOnVideoTagSupported = null; // unknown\n\n _this.setInitialVolume();\n\n _this.settings = {\n left: ['play', 'stop', 'pause'],\n right: ['volume'],\n \"default\": ['position', 'seekbar', 'duration']\n };\n _this.kibo = new Kibo(_this.options.focusElement);\n\n _this.bindKeyEvents();\n\n if (_this.container) {\n if (!$.isEmptyObject(_this.container.settings)) _this.settings = $.extend({}, _this.container.settings);\n } else {\n _this.settings = {};\n }\n\n _this.userDisabled = false;\n if (_this.container && _this.container.mediaControlDisabled || _this.options.chromeless) _this.disable();\n\n _this.stopDragHandler = function (event) {\n return _this.stopDrag(event);\n };\n\n _this.updateDragHandler = function (event) {\n return _this.updateDrag(event);\n };\n\n $(document).bind('mouseup', _this.stopDragHandler);\n $(document).bind('mousemove', _this.updateDragHandler);\n return _this;\n }\n\n _createClass(MediaControl, [{\n key: \"name\",\n get: function get() {\n return 'media_control';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.18\"\n };\n }\n }, {\n key: \"disabled\",\n get: function get() {\n var playbackIsNOOP = this.container && this.container.getPlaybackType() === Playback.NO_OP;\n return this.userDisabled || playbackIsNOOP;\n }\n }, {\n key: \"container\",\n get: function get() {\n return this.core && this.core.activeContainer;\n }\n }, {\n key: \"playback\",\n get: function get() {\n return this.core && this.core.activePlayback;\n }\n }, {\n key: \"attributes\",\n get: function get() {\n return {\n 'class': 'media-control',\n 'data-media-control': ''\n };\n }\n }, {\n key: \"events\",\n get: function get() {\n return {\n 'click [data-play]': 'play',\n 'click [data-pause]': 'pause',\n 'click [data-playpause]': 'togglePlayPause',\n 'click [data-stop]': 'stop',\n 'click [data-playstop]': 'togglePlayStop',\n 'click [data-fullscreen]': 'toggleFullscreen',\n 'click .bar-container[data-seekbar]': 'seek',\n 'click .bar-container[data-volume]': 'onVolumeClick',\n 'click .drawer-icon[data-volume]': 'toggleMute',\n 'mouseenter .drawer-container[data-volume]': 'showVolumeBar',\n 'mouseleave .drawer-container[data-volume]': 'hideVolumeBar',\n 'mousedown .bar-container[data-volume]': 'startVolumeDrag',\n 'mousemove .bar-container[data-volume]': 'mousemoveOnVolumeBar',\n 'mousedown .bar-scrubber[data-seekbar]': 'startSeekDrag',\n 'mousemove .bar-container[data-seekbar]': 'mousemoveOnSeekBar',\n 'mouseleave .bar-container[data-seekbar]': 'mouseleaveOnSeekBar',\n 'mouseenter .media-control-layer[data-controls]': 'setUserKeepVisible',\n 'mouseleave .media-control-layer[data-controls]': 'resetUserKeepVisible'\n };\n }\n }, {\n key: \"template\",\n get: function get() {\n return template(mediaControlHTML);\n }\n }, {\n key: \"volume\",\n get: function get() {\n return this.container && this.container.isReady ? this.container.volume : this.intendedVolume;\n }\n }, {\n key: \"muted\",\n get: function get() {\n return this.volume === 0;\n }\n }, {\n key: \"getExternalInterface\",\n value: function getExternalInterface() {\n var _this2 = this;\n\n return {\n setVolume: this.setVolume,\n getVolume: function getVolume() {\n return _this2.volume;\n }\n };\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n var _this3 = this;\n\n this.stopListening();\n this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);\n this.listenTo(this.core, Events.CORE_MOUSE_MOVE, this.show);\n this.listenTo(this.core, Events.CORE_MOUSE_LEAVE, function () {\n return _this3.hide(_this3.options.hideMediaControlDelay);\n });\n this.listenTo(this.core, Events.CORE_FULLSCREEN, this.show);\n this.listenTo(this.core, Events.CORE_OPTIONS_CHANGE, this.configure);\n this.listenTo(this.core, Events.CORE_RESIZE, this.playerResize);\n this.bindContainerEvents();\n }\n }, {\n key: \"bindContainerEvents\",\n value: function bindContainerEvents() {\n if (!this.container) return;\n this.listenTo(this.container, Events.CONTAINER_PLAY, this.changeTogglePlay);\n this.listenTo(this.container, Events.CONTAINER_PAUSE, this.changeTogglePlay);\n this.listenTo(this.container, Events.CONTAINER_STOP, this.changeTogglePlay);\n this.listenTo(this.container, Events.CONTAINER_DBLCLICK, this.toggleFullscreen);\n this.listenTo(this.container, Events.CONTAINER_TIMEUPDATE, this.onTimeUpdate);\n this.listenTo(this.container, Events.CONTAINER_PROGRESS, this.updateProgressBar);\n this.listenTo(this.container, Events.CONTAINER_SETTINGSUPDATE, this.settingsUpdate);\n this.listenTo(this.container, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.settingsUpdate);\n this.listenTo(this.container, Events.CONTAINER_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);\n this.listenTo(this.container, Events.CONTAINER_MEDIACONTROL_DISABLE, this.disable);\n this.listenTo(this.container, Events.CONTAINER_MEDIACONTROL_ENABLE, this.enable);\n this.listenTo(this.container, Events.CONTAINER_ENDED, this.ended);\n this.listenTo(this.container, Events.CONTAINER_VOLUME, this.onVolumeChanged);\n this.listenTo(this.container, Events.CONTAINER_OPTIONS_CHANGE, this.setInitialVolume);\n\n if (this.container.playback.el.nodeName.toLowerCase() === 'video') {\n // wait until the metadata has loaded and then check if fullscreen on video tag is supported\n this.listenToOnce(this.container, Events.CONTAINER_LOADEDMETADATA, this.onLoadedMetadataOnVideoTag);\n }\n }\n }, {\n key: \"disable\",\n value: function disable() {\n this.userDisabled = true;\n this.hide();\n this.unbindKeyEvents();\n this.$el.hide();\n }\n }, {\n key: \"enable\",\n value: function enable() {\n if (this.options.chromeless) return;\n this.userDisabled = false;\n this.bindKeyEvents();\n this.show();\n }\n }, {\n key: \"play\",\n value: function play() {\n this.container && this.container.play();\n }\n }, {\n key: \"pause\",\n value: function pause() {\n this.container && this.container.pause();\n }\n }, {\n key: \"stop\",\n value: function stop() {\n this.container && this.container.stop();\n }\n }, {\n key: \"setInitialVolume\",\n value: function setInitialVolume() {\n var initialVolume = this.persistConfig ? Config.restore('volume') : 100;\n var options = this.container && this.container.options || this.options;\n this.setVolume(options.mute ? 0 : initialVolume, true);\n }\n }, {\n key: \"onVolumeChanged\",\n value: function onVolumeChanged() {\n this.updateVolumeUI();\n }\n }, {\n key: \"onLoadedMetadataOnVideoTag\",\n value: function onLoadedMetadataOnVideoTag() {\n var video = this.playback && this.playback.el; // video.webkitSupportsFullscreen is deprecated but iOS appears to only use this\n // see https://github.com/clappr/clappr/issues/1127\n\n if (!Fullscreen.fullscreenEnabled() && video.webkitSupportsFullscreen) {\n this.fullScreenOnVideoTagSupported = true;\n this.settingsUpdate();\n }\n }\n }, {\n key: \"updateVolumeUI\",\n value: function updateVolumeUI() {\n // this will be called after a render\n if (!this.rendered) return; // update volume bar scrubber/fill on bar mode\n\n this.$volumeBarContainer.find('.bar-fill-2').css({});\n var containerWidth = this.$volumeBarContainer.width();\n var barWidth = this.$volumeBarBackground.width();\n var offset = (containerWidth - barWidth) / 2.0;\n var pos = barWidth * this.volume / 100.0 + offset;\n this.$volumeBarFill.css({\n width: \"\".concat(this.volume, \"%\")\n });\n this.$volumeBarScrubber.css({\n left: pos\n }); // update volume bar segments on segmented bar mode\n\n this.$volumeBarContainer.find('.segmented-bar-element').removeClass('fill');\n var item = Math.ceil(this.volume / 10.0);\n this.$volumeBarContainer.find('.segmented-bar-element').slice(0, item).addClass('fill');\n this.$volumeIcon.html('');\n this.$volumeIcon.removeClass('muted');\n\n if (!this.muted) {\n this.$volumeIcon.append(volumeIcon);\n } else {\n this.$volumeIcon.append(volumeMuteIcon);\n this.$volumeIcon.addClass('muted');\n }\n\n this.applyButtonStyle(this.$volumeIcon);\n }\n }, {\n key: \"changeTogglePlay\",\n value: function changeTogglePlay() {\n this.$playPauseToggle.html('');\n this.$playStopToggle.html('');\n\n if (this.container && this.container.isPlaying()) {\n this.$playPauseToggle.append(pauseIcon);\n this.$playStopToggle.append(stopIcon);\n this.trigger(Events.MEDIACONTROL_PLAYING);\n } else {\n this.$playPauseToggle.append(playIcon);\n this.$playStopToggle.append(playIcon);\n this.trigger(Events.MEDIACONTROL_NOTPLAYING);\n Browser.isMobile && this.show();\n }\n\n this.applyButtonStyle(this.$playPauseToggle);\n this.applyButtonStyle(this.$playStopToggle);\n }\n }, {\n key: \"mousemoveOnSeekBar\",\n value: function mousemoveOnSeekBar(event) {\n if (this.settings.seekEnabled) {\n var offsetX = event.pageX - this.$seekBarContainer.offset().left - this.$seekBarHover.width() / 2;\n this.$seekBarHover.css({\n left: offsetX\n });\n }\n\n this.trigger(Events.MEDIACONTROL_MOUSEMOVE_SEEKBAR, event);\n }\n }, {\n key: \"mouseleaveOnSeekBar\",\n value: function mouseleaveOnSeekBar(event) {\n this.trigger(Events.MEDIACONTROL_MOUSELEAVE_SEEKBAR, event);\n }\n }, {\n key: \"onVolumeClick\",\n value: function onVolumeClick(event) {\n this.setVolume(this.getVolumeFromUIEvent(event));\n }\n }, {\n key: \"mousemoveOnVolumeBar\",\n value: function mousemoveOnVolumeBar(event) {\n this.draggingVolumeBar && this.setVolume(this.getVolumeFromUIEvent(event));\n }\n }, {\n key: \"playerResize\",\n value: function playerResize(size) {\n this.$fullscreenToggle.html('');\n var icon = this.core.isFullscreen() ? exitFullscreenIcon : fullscreenIcon;\n this.$fullscreenToggle.append(icon);\n this.applyButtonStyle(this.$fullscreenToggle);\n this.$el.find('.media-control').length !== 0 && this.$el.removeClass('w320');\n if (size.width <= 320 || this.options.hideVolumeBar) this.$el.addClass('w320');\n }\n }, {\n key: \"togglePlayPause\",\n value: function togglePlayPause() {\n this.container.isPlaying() ? this.container.pause() : this.container.play();\n return false;\n }\n }, {\n key: \"togglePlayStop\",\n value: function togglePlayStop() {\n this.container.isPlaying() ? this.container.stop() : this.container.play();\n }\n }, {\n key: \"startSeekDrag\",\n value: function startSeekDrag(event) {\n if (!this.settings.seekEnabled) return;\n this.draggingSeekBar = true;\n this.$el.addClass('dragging');\n this.$seekBarLoaded.addClass('media-control-notransition');\n this.$seekBarPosition.addClass('media-control-notransition');\n this.$seekBarScrubber.addClass('media-control-notransition');\n event && event.preventDefault();\n }\n }, {\n key: \"startVolumeDrag\",\n value: function startVolumeDrag(event) {\n this.draggingVolumeBar = true;\n this.$el.addClass('dragging');\n event && event.preventDefault();\n }\n }, {\n key: \"stopDrag\",\n value: function stopDrag(event) {\n this.draggingSeekBar && this.seek(event);\n this.$el.removeClass('dragging');\n this.$seekBarLoaded.removeClass('media-control-notransition');\n this.$seekBarPosition.removeClass('media-control-notransition');\n this.$seekBarScrubber.removeClass('media-control-notransition dragging');\n this.draggingSeekBar = false;\n this.draggingVolumeBar = false;\n }\n }, {\n key: \"updateDrag\",\n value: function updateDrag(event) {\n if (this.draggingSeekBar) {\n event.preventDefault();\n var offsetX = event.pageX - this.$seekBarContainer.offset().left;\n var pos = offsetX / this.$seekBarContainer.width() * 100;\n pos = Math.min(100, Math.max(pos, 0));\n this.setSeekPercentage(pos);\n } else if (this.draggingVolumeBar) {\n event.preventDefault();\n this.setVolume(this.getVolumeFromUIEvent(event));\n }\n }\n }, {\n key: \"getVolumeFromUIEvent\",\n value: function getVolumeFromUIEvent(event) {\n var offsetY = event.pageX - this.$volumeBarContainer.offset().left;\n var volumeFromUI = offsetY / this.$volumeBarContainer.width() * 100;\n return volumeFromUI;\n }\n }, {\n key: \"toggleMute\",\n value: function toggleMute() {\n this.setVolume(this.muted ? 100 : 0);\n }\n }, {\n key: \"setVolume\",\n value: function setVolume(value) {\n var _this4 = this;\n\n var isInitialVolume = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n value = Math.min(100, Math.max(value, 0)); // this will hold the intended volume\n // it may not actually get set to this straight away\n // if the container is not ready etc\n\n this.intendedVolume = value;\n this.persistConfig && !isInitialVolume && Config.persist('volume', value);\n\n var setWhenContainerReady = function setWhenContainerReady() {\n if (_this4.container && _this4.container.isReady) {\n _this4.container.setVolume(value);\n } else {\n _this4.listenToOnce(_this4.container, Events.CONTAINER_READY, function () {\n _this4.container.setVolume(value);\n });\n }\n };\n\n if (!this.container) this.listenToOnce(this, Events.MEDIACONTROL_CONTAINERCHANGED, function () {\n return setWhenContainerReady();\n });else setWhenContainerReady();\n }\n }, {\n key: \"toggleFullscreen\",\n value: function toggleFullscreen() {\n this.trigger(Events.MEDIACONTROL_FULLSCREEN, this.name);\n this.container.fullscreen();\n this.core.toggleFullscreen();\n this.resetUserKeepVisible();\n }\n }, {\n key: \"onActiveContainerChanged\",\n value: function onActiveContainerChanged() {\n this.fullScreenOnVideoTagSupported = null;\n this.bindEvents(); // set the new container to match the volume of the last one\n\n this.setInitialVolume();\n this.changeTogglePlay();\n this.bindContainerEvents();\n this.settingsUpdate();\n this.container && this.container.trigger(Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.container.isDvrInUse());\n this.container && this.container.mediaControlDisabled && this.disable();\n this.trigger(Events.MEDIACONTROL_CONTAINERCHANGED);\n }\n }, {\n key: \"showVolumeBar\",\n value: function showVolumeBar() {\n this.hideVolumeId && clearTimeout(this.hideVolumeId);\n this.$volumeBarContainer.removeClass('volume-bar-hide');\n }\n }, {\n key: \"hideVolumeBar\",\n value: function hideVolumeBar() {\n var _this5 = this;\n\n var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 400;\n if (!this.$volumeBarContainer) return;\n\n if (this.draggingVolumeBar) {\n this.hideVolumeId = setTimeout(function () {\n return _this5.hideVolumeBar();\n }, timeout);\n } else {\n this.hideVolumeId && clearTimeout(this.hideVolumeId);\n this.hideVolumeId = setTimeout(function () {\n return _this5.$volumeBarContainer.addClass('volume-bar-hide');\n }, timeout);\n }\n }\n }, {\n key: \"ended\",\n value: function ended() {\n this.changeTogglePlay();\n }\n }, {\n key: \"updateProgressBar\",\n value: function updateProgressBar(progress) {\n var loadedStart = progress.start / progress.total * 100;\n var loadedEnd = progress.current / progress.total * 100;\n this.$seekBarLoaded.css({\n left: \"\".concat(loadedStart, \"%\"),\n width: \"\".concat(loadedEnd - loadedStart, \"%\")\n });\n }\n }, {\n key: \"onTimeUpdate\",\n value: function onTimeUpdate(timeProgress) {\n if (this.draggingSeekBar) return; // TODO why should current time ever be negative?\n\n var position = timeProgress.current < 0 ? timeProgress.total : timeProgress.current;\n this.currentPositionValue = position;\n this.currentDurationValue = timeProgress.total;\n this.renderSeekBar();\n }\n }, {\n key: \"renderSeekBar\",\n value: function renderSeekBar() {\n // this will be triggered as soon as these become available\n if (this.currentPositionValue === null || this.currentDurationValue === null) return; // default to 100%\n\n this.currentSeekBarPercentage = 100;\n if (this.container && (this.container.getPlaybackType() !== Playback.LIVE || this.container.isDvrInUse())) this.currentSeekBarPercentage = this.currentPositionValue / this.currentDurationValue * 100;\n this.setSeekPercentage(this.currentSeekBarPercentage);\n var newPosition = formatTime$1(this.currentPositionValue);\n var newDuration = formatTime$1(this.currentDurationValue);\n\n if (newPosition !== this.displayedPosition) {\n this.$position.text(newPosition);\n this.displayedPosition = newPosition;\n }\n\n if (newDuration !== this.displayedDuration) {\n this.$duration.text(newDuration);\n this.displayedDuration = newDuration;\n }\n }\n }, {\n key: \"seek\",\n value: function seek(event) {\n if (!this.settings.seekEnabled) return;\n var offsetX = event.pageX - this.$seekBarContainer.offset().left;\n var pos = offsetX / this.$seekBarContainer.width() * 100;\n pos = Math.min(100, Math.max(pos, 0));\n this.container && this.container.seekPercentage(pos);\n this.setSeekPercentage(pos);\n return false;\n }\n }, {\n key: \"setKeepVisible\",\n value: function setKeepVisible() {\n this.keepVisible = true;\n }\n }, {\n key: \"resetKeepVisible\",\n value: function resetKeepVisible() {\n this.keepVisible = false;\n }\n }, {\n key: \"setUserKeepVisible\",\n value: function setUserKeepVisible() {\n this.userKeepVisible = true;\n }\n }, {\n key: \"resetUserKeepVisible\",\n value: function resetUserKeepVisible() {\n this.userKeepVisible = false;\n }\n }, {\n key: \"isVisible\",\n value: function isVisible() {\n return !this.$el.hasClass('media-control-hide');\n }\n }, {\n key: \"show\",\n value: function show(event) {\n var _this6 = this;\n\n if (this.disabled) return;\n var timeout = 2000;\n var mousePointerMoved = event && event.clientX !== this.lastMouseX && event.clientY !== this.lastMouseY;\n\n if (!event || mousePointerMoved || navigator.userAgent.match(/firefox/i)) {\n clearTimeout(this.hideId);\n this.$el.show();\n this.trigger(Events.MEDIACONTROL_SHOW, this.name);\n this.container && this.container.trigger(Events.CONTAINER_MEDIACONTROL_SHOW, this.name);\n this.$el.removeClass('media-control-hide');\n this.hideId = setTimeout(function () {\n return _this6.hide();\n }, timeout);\n\n if (event) {\n this.lastMouseX = event.clientX;\n this.lastMouseY = event.clientY;\n }\n }\n\n var showing = true;\n this.updateCursorStyle(showing);\n }\n }, {\n key: \"hide\",\n value: function hide() {\n var _this7 = this;\n\n var delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n if (!this.isVisible()) return;\n var timeout = delay || 2000;\n clearTimeout(this.hideId);\n if (!this.disabled && this.options.hideMediaControl === false) return;\n var hasKeepVisibleRequested = this.userKeepVisible || this.keepVisible;\n var hasDraggingAction = this.draggingSeekBar || this.draggingVolumeBar;\n\n if (!this.disabled && (delay || hasKeepVisibleRequested || hasDraggingAction)) {\n this.hideId = setTimeout(function () {\n return _this7.hide();\n }, timeout);\n } else {\n this.trigger(Events.MEDIACONTROL_HIDE, this.name);\n this.container && this.container.trigger(Events.CONTAINER_MEDIACONTROL_HIDE, this.name);\n this.$el.addClass('media-control-hide');\n this.hideVolumeBar(0);\n var showing = false;\n this.updateCursorStyle(showing);\n }\n }\n }, {\n key: \"updateCursorStyle\",\n value: function updateCursorStyle(showing) {\n if (showing) this.core.$el.removeClass('nocursor');else if (this.core.isFullscreen()) this.core.$el.addClass('nocursor');\n }\n }, {\n key: \"settingsUpdate\",\n value: function settingsUpdate() {\n var newSettings = this.getSettings();\n\n if (newSettings && !this.fullScreenOnVideoTagSupported && !Fullscreen.fullscreenEnabled()) {\n // remove fullscreen from settings if it is present\n newSettings[\"default\"] && removeArrayItem(newSettings[\"default\"], 'fullscreen');\n newSettings.left && removeArrayItem(newSettings.left, 'fullscreen');\n newSettings.right && removeArrayItem(newSettings.right, 'fullscreen');\n }\n\n var settingsChanged = JSON.stringify(this.settings) !== JSON.stringify(newSettings);\n\n if (settingsChanged) {\n this.settings = newSettings;\n this.render();\n }\n }\n }, {\n key: \"getSettings\",\n value: function getSettings() {\n return $.extend(true, {}, this.container && this.container.settings);\n }\n }, {\n key: \"highDefinitionUpdate\",\n value: function highDefinitionUpdate(isHD) {\n this.isHD = isHD;\n var method = isHD ? 'addClass' : 'removeClass';\n this.$hdIndicator[method]('enabled');\n }\n }, {\n key: \"createCachedElements\",\n value: function createCachedElements() {\n var $layer = this.$el.find('.media-control-layer');\n this.$duration = $layer.find('.media-control-indicator[data-duration]');\n this.$fullscreenToggle = $layer.find('button.media-control-button[data-fullscreen]');\n this.$playPauseToggle = $layer.find('button.media-control-button[data-playpause]');\n this.$playStopToggle = $layer.find('button.media-control-button[data-playstop]');\n this.$position = $layer.find('.media-control-indicator[data-position]');\n this.$seekBarContainer = $layer.find('.bar-container[data-seekbar]');\n this.$seekBarHover = $layer.find('.bar-hover[data-seekbar]');\n this.$seekBarLoaded = $layer.find('.bar-fill-1[data-seekbar]');\n this.$seekBarPosition = $layer.find('.bar-fill-2[data-seekbar]');\n this.$seekBarScrubber = $layer.find('.bar-scrubber[data-seekbar]');\n this.$volumeBarContainer = $layer.find('.bar-container[data-volume]');\n this.$volumeContainer = $layer.find('.drawer-container[data-volume]');\n this.$volumeIcon = $layer.find('.drawer-icon[data-volume]');\n this.$volumeBarBackground = this.$el.find('.bar-background[data-volume]');\n this.$volumeBarFill = this.$el.find('.bar-fill-1[data-volume]');\n this.$volumeBarScrubber = this.$el.find('.bar-scrubber[data-volume]');\n this.$hdIndicator = this.$el.find('button.media-control-button[data-hd-indicator]');\n this.resetIndicators();\n this.initializeIcons();\n }\n }, {\n key: \"resetIndicators\",\n value: function resetIndicators() {\n this.displayedPosition = this.$position.text();\n this.displayedDuration = this.$duration.text();\n }\n }, {\n key: \"initializeIcons\",\n value: function initializeIcons() {\n var $layer = this.$el.find('.media-control-layer');\n $layer.find('button.media-control-button[data-play]').append(playIcon);\n $layer.find('button.media-control-button[data-pause]').append(pauseIcon);\n $layer.find('button.media-control-button[data-stop]').append(stopIcon);\n this.$playPauseToggle.append(playIcon);\n this.$playStopToggle.append(playIcon);\n this.$volumeIcon.append(volumeIcon);\n this.$fullscreenToggle.append(fullscreenIcon);\n this.$hdIndicator.append(hdIcon);\n }\n }, {\n key: \"setSeekPercentage\",\n value: function setSeekPercentage(value) {\n value = Math.max(Math.min(value, 100.0), 0); // not changed since last update\n\n if (this.displayedSeekBarPercentage === value) return;\n this.displayedSeekBarPercentage = value;\n this.$seekBarPosition.removeClass('media-control-notransition');\n this.$seekBarScrubber.removeClass('media-control-notransition');\n this.$seekBarPosition.css({\n width: \"\".concat(value, \"%\")\n });\n this.$seekBarScrubber.css({\n left: \"\".concat(value, \"%\")\n });\n }\n }, {\n key: \"seekRelative\",\n value: function seekRelative(delta) {\n if (!this.settings.seekEnabled) return;\n var currentTime = this.container.getCurrentTime();\n var duration = this.container.getDuration();\n var position = Math.min(Math.max(currentTime + delta, 0), duration);\n position = Math.min(position * 100 / duration, 100);\n this.container.seekPercentage(position);\n }\n }, {\n key: \"bindKeyAndShow\",\n value: function bindKeyAndShow(key, callback) {\n var _this8 = this;\n\n this.kibo.down(key, function () {\n _this8.show();\n\n return callback();\n });\n }\n }, {\n key: \"bindKeyEvents\",\n value: function bindKeyEvents() {\n var _this9 = this;\n\n if (Browser.isMobile || this.options.disableKeyboardShortcuts) return;\n this.unbindKeyEvents();\n this.kibo = new Kibo(this.options.focusElement || this.options.parentElement);\n this.bindKeyAndShow('space', function () {\n return _this9.togglePlayPause();\n });\n this.bindKeyAndShow('left', function () {\n return _this9.seekRelative(-5);\n });\n this.bindKeyAndShow('right', function () {\n return _this9.seekRelative(5);\n });\n this.bindKeyAndShow('shift left', function () {\n return _this9.seekRelative(-10);\n });\n this.bindKeyAndShow('shift right', function () {\n return _this9.seekRelative(10);\n });\n this.bindKeyAndShow('shift ctrl left', function () {\n return _this9.seekRelative(-15);\n });\n this.bindKeyAndShow('shift ctrl right', function () {\n return _this9.seekRelative(15);\n });\n var keys = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];\n keys.forEach(function (i) {\n _this9.bindKeyAndShow(i, function () {\n _this9.settings.seekEnabled && _this9.container && _this9.container.seekPercentage(i * 10);\n });\n });\n }\n }, {\n key: \"unbindKeyEvents\",\n value: function unbindKeyEvents() {\n if (this.kibo) {\n this.kibo.off('space');\n this.kibo.off('left');\n this.kibo.off('right');\n this.kibo.off('shift left');\n this.kibo.off('shift right');\n this.kibo.off('shift ctrl left');\n this.kibo.off('shift ctrl right');\n this.kibo.off(['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']);\n }\n }\n }, {\n key: \"parseColors\",\n value: function parseColors() {\n if (this.options.mediacontrol) {\n this.buttonsColor = this.options.mediacontrol.buttons;\n var seekbarColor = this.options.mediacontrol.seekbar;\n this.$el.find('.bar-fill-2[data-seekbar]').css('background-color', seekbarColor);\n this.$el.find('.media-control-icon svg path').css('fill', this.buttonsColor);\n this.$el.find('.segmented-bar-element[data-volume]').css('boxShadow', 'inset 2px 0 0 ' + this.buttonsColor);\n }\n }\n }, {\n key: \"applyButtonStyle\",\n value: function applyButtonStyle(element) {\n this.buttonsColor && element && $(element).find('svg path').css('fill', this.buttonsColor);\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n $(document).unbind('mouseup', this.stopDragHandler);\n $(document).unbind('mousemove', this.updateDragHandler);\n this.unbindKeyEvents();\n this.stopListening();\n\n _get(_getPrototypeOf(MediaControl.prototype), \"destroy\", this).call(this);\n }\n /**\n * enables to configure the media control after its creation\n * @method configure\n * @param {Object} options all the options to change in form of a javascript object\n */\n\n }, {\n key: \"configure\",\n value: function configure(options) {\n // Check if chromeless mode or if configure is called with new source(s)\n if (this.options.chromeless || options.source || options.sources) this.disable();else this.enable();\n this.trigger(Events.MEDIACONTROL_OPTIONS_CHANGE);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this10 = this;\n\n var timeout = this.options.hideMediaControlDelay || 2000;\n this.settings && this.$el.html(this.template({\n settings: this.settings\n }));\n this.createCachedElements();\n this.$playPauseToggle.addClass('paused');\n this.$playStopToggle.addClass('stopped');\n this.changeTogglePlay();\n\n if (this.container) {\n this.hideId = setTimeout(function () {\n return _this10.hide();\n }, timeout);\n this.disabled && this.hide();\n } // Video volume cannot be changed with Safari on mobile devices\n // Display mute/unmute icon only if Safari version >= 10\n\n\n if (Browser.isSafari && Browser.isMobile) {\n if (Browser.version < 10) this.$volumeContainer.css('display', 'none');else this.$volumeBarContainer.css('display', 'none');\n }\n\n this.$seekBarPosition.addClass('media-control-notransition');\n this.$seekBarScrubber.addClass('media-control-notransition');\n var previousSeekPercentage = 0;\n if (this.displayedSeekBarPercentage) previousSeekPercentage = this.displayedSeekBarPercentage;\n this.displayedSeekBarPercentage = null;\n this.setSeekPercentage(previousSeekPercentage);\n setTimeout(function () {\n !_this10.settings.seekEnabled && _this10.$seekBarContainer.addClass('seek-disabled');\n !Browser.isMobile && !_this10.options.disableKeyboardShortcuts && _this10.bindKeyEvents();\n\n _this10.playerResize({\n width: _this10.options.width,\n height: _this10.options.height\n });\n\n _this10.hideVolumeBar(0);\n }, 0);\n this.parseColors();\n this.highDefinitionUpdate(this.isHD);\n this.core.$el.append(this.el);\n this.rendered = true;\n this.updateVolumeUI();\n this.trigger(Events.MEDIACONTROL_RENDERED);\n return this;\n }\n }]);\n\n return MediaControl;\n}(UICorePlugin);\n\nMediaControl.extend = function (properties) {\n return extend(MediaControl, properties);\n};\n\nvar posterHTML = \"<div class=\\\"play-wrapper\\\" data-poster></div>\\n\";\n\nvar css_248z$3 = \".player-poster[data-poster] {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n position: absolute;\\n height: 100%;\\n width: 100%;\\n z-index: 998;\\n top: 0;\\n left: 0;\\n background-color: transparent;\\n background-size: cover;\\n background-repeat: no-repeat;\\n background-position: 50% 50%; }\\n .player-poster[data-poster].clickable {\\n cursor: pointer; }\\n .player-poster[data-poster]:hover .play-wrapper[data-poster] {\\n opacity: 1; }\\n .player-poster[data-poster] .play-wrapper[data-poster] {\\n width: 100%;\\n height: 25%;\\n margin: 0 auto;\\n opacity: 0.75;\\n transition: opacity 0.1s ease; }\\n .player-poster[data-poster] .play-wrapper[data-poster] svg {\\n height: 100%; }\\n .player-poster[data-poster] .play-wrapper[data-poster] svg path {\\n fill: #fff; }\\n\";\nstyleInject(css_248z$3);\n\nvar PosterPlugin = /*#__PURE__*/function (_UIContainerPlugin) {\n _inherits(PosterPlugin, _UIContainerPlugin);\n\n var _super = _createSuper(PosterPlugin);\n\n function PosterPlugin(container) {\n var _this;\n\n _classCallCheck(this, PosterPlugin);\n\n _this = _super.call(this, container);\n _this.hasStartedPlaying = false;\n _this.playRequested = false;\n\n _this.render();\n\n setTimeout(function () {\n return _this.update();\n }, 0);\n return _this;\n }\n\n _createClass(PosterPlugin, [{\n key: \"name\",\n get: function get() {\n return 'poster';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.18\"\n };\n }\n }, {\n key: \"template\",\n get: function get() {\n return template(posterHTML);\n }\n }, {\n key: \"shouldRender\",\n get: function get() {\n var showForNoOp = !!(this.options.poster && this.options.poster.showForNoOp);\n return this.container.playback.name !== 'html_img' && (this.container.playback.getPlaybackType() !== Playback.NO_OP || showForNoOp);\n }\n }, {\n key: \"attributes\",\n get: function get() {\n return {\n 'class': 'player-poster',\n 'data-poster': ''\n };\n }\n }, {\n key: \"events\",\n get: function get() {\n return {\n 'click': 'clicked'\n };\n }\n }, {\n key: \"showOnVideoEnd\",\n get: function get() {\n return !this.options.poster || this.options.poster.showOnVideoEnd || this.options.poster.showOnVideoEnd === undefined;\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n this.listenTo(this.container, Events.CONTAINER_STOP, this.onStop);\n this.listenTo(this.container, Events.CONTAINER_PLAY, this.onPlay);\n this.listenTo(this.container, Events.CONTAINER_STATE_BUFFERING, this.update);\n this.listenTo(this.container, Events.CONTAINER_STATE_BUFFERFULL, this.update);\n this.listenTo(this.container, Events.CONTAINER_OPTIONS_CHANGE, this.render);\n this.listenTo(this.container, Events.CONTAINER_ERROR, this.onError);\n this.showOnVideoEnd && this.listenTo(this.container, Events.CONTAINER_ENDED, this.onStop);\n }\n }, {\n key: \"onError\",\n value: function onError(error) {\n this.hasFatalError = error.level === PlayerError.Levels.FATAL;\n\n if (this.hasFatalError) {\n this.hasStartedPlaying = false;\n this.playRequested = false;\n this.showPlayButton();\n }\n }\n }, {\n key: \"onPlay\",\n value: function onPlay() {\n this.hasStartedPlaying = true;\n this.update();\n }\n }, {\n key: \"onStop\",\n value: function onStop() {\n this.hasStartedPlaying = false;\n this.playRequested = false;\n this.update();\n }\n }, {\n key: \"updatePlayButton\",\n value: function updatePlayButton(show) {\n if (show && (!this.options.chromeless || this.options.allowUserInteraction)) this.showPlayButton();else this.hidePlayButton();\n }\n }, {\n key: \"showPlayButton\",\n value: function showPlayButton() {\n if (this.hasFatalError && !this.options.disableErrorScreen) return;\n this.$playButton.show();\n this.$el.addClass('clickable');\n }\n }, {\n key: \"hidePlayButton\",\n value: function hidePlayButton() {\n this.$playButton.hide();\n this.$el.removeClass('clickable');\n }\n }, {\n key: \"clicked\",\n value: function clicked() {\n // Let \"click_to_pause\" plugin handle click event if media has started playing\n if (!this.hasStartedPlaying) {\n if (!this.options.chromeless || this.options.allowUserInteraction) {\n this.playRequested = true;\n this.update();\n this.container.playback && (this.container.playback._consented = true);\n this.container.play();\n }\n\n return false;\n }\n }\n }, {\n key: \"shouldHideOnPlay\",\n value: function shouldHideOnPlay() {\n // Audio broadcasts should keep the poster up; video should hide poster while playing.\n return !this.container.playback.isAudioOnly;\n }\n }, {\n key: \"update\",\n value: function update() {\n if (!this.shouldRender) return;\n var showPlayButton = !this.playRequested && !this.hasStartedPlaying && !this.container.buffering;\n this.updatePlayButton(showPlayButton);\n this.updatePoster();\n }\n }, {\n key: \"updatePoster\",\n value: function updatePoster() {\n if (!this.hasStartedPlaying) this.showPoster();else this.hidePoster();\n }\n }, {\n key: \"showPoster\",\n value: function showPoster() {\n this.container.disableMediaControl();\n this.$el.show();\n }\n }, {\n key: \"hidePoster\",\n value: function hidePoster() {\n this.container.enableMediaControl();\n if (this.shouldHideOnPlay()) this.$el.hide();\n }\n }, {\n key: \"render\",\n value: function render() {\n if (!this.shouldRender) return;\n this.$el.html(this.template());\n var isRegularPoster = this.options.poster && this.options.poster.custom === undefined;\n\n if (isRegularPoster) {\n var posterUrl = this.options.poster.url || this.options.poster;\n this.$el.css({\n 'background-image': 'url(' + posterUrl + ')'\n });\n this.removeVideoElementPoster();\n } else if (this.options.poster) {\n this.$el.css({\n 'background': this.options.poster.custom\n });\n this.removeVideoElementPoster();\n }\n\n this.container.$el.append(this.el);\n this.$playWrapper = this.$el.find('.play-wrapper');\n this.$playWrapper.append(playIcon);\n this.$playButton = this.$playWrapper.find('svg');\n this.$playButton.addClass('poster-icon');\n this.$playButton.attr('data-poster', '');\n var buttonsColor = this.options.mediacontrol && this.options.mediacontrol.buttons;\n if (buttonsColor) this.$el.find('svg path').css('fill', buttonsColor);\n\n if (this.options.mediacontrol && this.options.mediacontrol.buttons) {\n buttonsColor = this.options.mediacontrol.buttons;\n this.$playButton.css('color', buttonsColor);\n }\n\n this.update();\n return this;\n }\n }, {\n key: \"removeVideoElementPoster\",\n value: function removeVideoElementPoster() {\n this.container.playback && this.container.playback.$el && this.container.playback.$el[0] && this.container.playback.$el[0].removeAttribute && this.container.playback.$el[0].removeAttribute('poster');\n }\n }]);\n\n return PosterPlugin;\n}(UIContainerPlugin);\n\nvar seekTimeHTML = \"<span data-seek-time></span>\\n<span data-duration></span>\\n\";\n\nvar css_248z$2 = \".seek-time[data-seek-time] {\\n position: absolute;\\n white-space: nowrap;\\n height: 20px;\\n line-height: 20px;\\n font-size: 0;\\n left: -100%;\\n bottom: 55px;\\n background-color: rgba(2, 2, 2, 0.5);\\n z-index: 9999;\\n transition: opacity 0.1s ease; }\\n .seek-time[data-seek-time].hidden[data-seek-time] {\\n opacity: 0; }\\n .seek-time[data-seek-time] [data-seek-time] {\\n display: inline-block;\\n color: white;\\n font-size: 10px;\\n padding-left: 7px;\\n padding-right: 7px;\\n vertical-align: top; }\\n .seek-time[data-seek-time] [data-duration] {\\n display: inline-block;\\n color: rgba(255, 255, 255, 0.5);\\n font-size: 10px;\\n padding-right: 7px;\\n vertical-align: top; }\\n .seek-time[data-seek-time] [data-duration]:before {\\n content: \\\"|\\\";\\n margin-right: 7px; }\\n\";\nstyleInject(css_248z$2);\n\nvar formatTime = Utils.formatTime;\n\nvar SeekTime = /*#__PURE__*/function (_UICorePlugin) {\n _inherits(SeekTime, _UICorePlugin);\n\n var _super = _createSuper(SeekTime);\n\n function SeekTime(core) {\n var _this;\n\n _classCallCheck(this, SeekTime);\n\n _this = _super.call(this, core);\n _this.hoveringOverSeekBar = false;\n _this.hoverPosition = null;\n _this.duration = null;\n _this.firstFragDateTime = null;\n _this.actualLiveTime = !!_this.mediaControl.options.actualLiveTime;\n\n if (_this.actualLiveTime) {\n if (_this.mediaControl.options.actualLiveServerTime) _this.actualLiveServerTimeDiff = new Date().getTime() - new Date(_this.mediaControl.options.actualLiveServerTime).getTime();else _this.actualLiveServerTimeDiff = 0;\n }\n\n return _this;\n }\n\n _createClass(SeekTime, [{\n key: \"name\",\n get: function get() {\n return 'seek_time';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.18\"\n };\n }\n }, {\n key: \"template\",\n get: function get() {\n return template(seekTimeHTML);\n }\n }, {\n key: \"attributes\",\n get: function get() {\n return {\n 'class': 'seek-time',\n 'data-seek-time': ''\n };\n }\n }, {\n key: \"mediaControl\",\n get: function get() {\n return this.core.mediaControl;\n }\n }, {\n key: \"mediaControlContainer\",\n get: function get() {\n return this.mediaControl.container;\n }\n }, {\n key: \"isLiveStreamWithDvr\",\n get: function get() {\n return this.mediaControlContainer && this.mediaControlContainer.getPlaybackType() === Playback.LIVE && this.mediaControlContainer.isDvrEnabled();\n }\n }, {\n key: \"durationShown\",\n get: function get() {\n return this.isLiveStreamWithDvr && !this.actualLiveTime;\n }\n }, {\n key: \"useActualLiveTime\",\n get: function get() {\n return this.actualLiveTime && this.isLiveStreamWithDvr;\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n this.listenTo(this.mediaControl, Events.MEDIACONTROL_RENDERED, this.render);\n this.listenTo(this.mediaControl, Events.MEDIACONTROL_MOUSEMOVE_SEEKBAR, this.showTime);\n this.listenTo(this.mediaControl, Events.MEDIACONTROL_MOUSELEAVE_SEEKBAR, this.hideTime);\n this.listenTo(this.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.onContainerChanged);\n\n if (this.mediaControlContainer) {\n this.listenTo(this.mediaControlContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.update);\n this.listenTo(this.mediaControlContainer, Events.CONTAINER_TIMEUPDATE, this.updateDuration);\n }\n }\n }, {\n key: \"onContainerChanged\",\n value: function onContainerChanged() {\n this.stopListening();\n this.bindEvents();\n }\n }, {\n key: \"updateDuration\",\n value: function updateDuration(timeProgress) {\n this.duration = timeProgress.total;\n this.firstFragDateTime = timeProgress.firstFragDateTime;\n this.update();\n }\n }, {\n key: \"showTime\",\n value: function showTime(event) {\n this.hoveringOverSeekBar = true;\n this.calculateHoverPosition(event);\n this.update();\n }\n }, {\n key: \"hideTime\",\n value: function hideTime() {\n this.hoveringOverSeekBar = false;\n this.update();\n }\n }, {\n key: \"calculateHoverPosition\",\n value: function calculateHoverPosition(event) {\n var offset = event.pageX - this.mediaControl.$seekBarContainer.offset().left; // proportion into the seek bar that the mouse is hovered over 0-1\n\n this.hoverPosition = Math.min(1, Math.max(offset / this.mediaControl.$seekBarContainer.width(), 0));\n }\n }, {\n key: \"getSeekTime\",\n value: function getSeekTime() {\n var seekTime, secondsSinceMidnight, d, e;\n\n if (this.useActualLiveTime) {\n if (this.firstFragDateTime) {\n e = new Date(this.firstFragDateTime);\n d = new Date(this.firstFragDateTime);\n d.setHours(0, 0, 0, 0);\n secondsSinceMidnight = (e.getTime() - d.getTime()) / 1000 + this.duration;\n } else {\n d = new Date(new Date().getTime() - this.actualLiveServerTimeDiff);\n e = new Date(d);\n secondsSinceMidnight = (e - d.setHours(0, 0, 0, 0)) / 1000;\n }\n\n seekTime = secondsSinceMidnight - this.duration + this.hoverPosition * this.duration;\n if (seekTime < 0) seekTime += 86400;\n } else {\n seekTime = this.hoverPosition * this.duration;\n }\n\n return {\n seekTime: seekTime,\n secondsSinceMidnight: secondsSinceMidnight\n };\n }\n }, {\n key: \"update\",\n value: function update() {\n if (!this.rendered) {\n // update() is always called after a render\n return;\n }\n\n if (!this.shouldBeVisible()) {\n this.$el.hide();\n this.$el.css('left', '-100%');\n } else {\n var seekTime = this.getSeekTime();\n var currentSeekTime = formatTime(seekTime.seekTime, this.useActualLiveTime); // only update dom if necessary, ie time actually changed\n\n if (currentSeekTime !== this.displayedSeekTime) {\n this.$seekTimeEl.text(currentSeekTime);\n this.displayedSeekTime = currentSeekTime;\n }\n\n if (this.durationShown) {\n this.$durationEl.show();\n var currentDuration = formatTime(this.actualLiveTime ? seekTime.secondsSinceMidnight : this.duration, this.actualLiveTime);\n\n if (currentDuration !== this.displayedDuration) {\n this.$durationEl.text(currentDuration);\n this.displayedDuration = currentDuration;\n }\n } else {\n this.$durationEl.hide();\n } // the element must be unhidden before its width is requested, otherwise it's width will be reported as 0\n\n\n this.$el.show();\n var containerWidth = this.mediaControl.$seekBarContainer.width();\n var elWidth = this.$el.width();\n var elLeftPos = this.hoverPosition * containerWidth;\n elLeftPos -= elWidth / 2;\n elLeftPos = Math.max(0, Math.min(elLeftPos, containerWidth - elWidth));\n this.$el.css('left', elLeftPos);\n }\n }\n }, {\n key: \"shouldBeVisible\",\n value: function shouldBeVisible() {\n return this.mediaControlContainer && this.mediaControlContainer.settings.seekEnabled && this.hoveringOverSeekBar && this.hoverPosition !== null && this.duration !== null;\n }\n }, {\n key: \"render\",\n value: function render() {\n this.rendered = true;\n this.displayedDuration = null;\n this.displayedSeekTime = null;\n this.$el.html(this.template());\n this.$el.hide();\n this.mediaControl.$el.append(this.el);\n this.$seekTimeEl = this.$el.find('[data-seek-time]');\n this.$durationEl = this.$el.find('[data-duration]');\n this.$durationEl.hide();\n this.update();\n }\n }]);\n\n return SeekTime;\n}(UICorePlugin);\n\nvar spinnerHTML = \"<div data-bounce1></div><div data-bounce2></div><div data-bounce3></div>\\n\";\n\nvar css_248z$1 = \".spinner-three-bounce[data-spinner] {\\n position: absolute;\\n margin: 0 auto;\\n width: 70px;\\n text-align: center;\\n z-index: 999;\\n left: 0;\\n right: 0;\\n margin-left: auto;\\n margin-right: auto;\\n /* center vertically */\\n top: 50%;\\n transform: translateY(-50%); }\\n .spinner-three-bounce[data-spinner] > div {\\n width: 18px;\\n height: 18px;\\n background-color: #FFFFFF;\\n border-radius: 100%;\\n display: inline-block;\\n -webkit-animation: bouncedelay 1.4s infinite ease-in-out;\\n animation: bouncedelay 1.4s infinite ease-in-out;\\n /* Prevent first frame from flickering when animation starts */\\n -webkit-animation-fill-mode: both;\\n animation-fill-mode: both; }\\n .spinner-three-bounce[data-spinner] [data-bounce1] {\\n -webkit-animation-delay: -0.32s;\\n animation-delay: -0.32s; }\\n .spinner-three-bounce[data-spinner] [data-bounce2] {\\n -webkit-animation-delay: -0.16s;\\n animation-delay: -0.16s; }\\n\\n@-webkit-keyframes bouncedelay {\\n 0%, 80%, 100% {\\n transform: scale(0); }\\n 40% {\\n transform: scale(1); } }\\n\\n@keyframes bouncedelay {\\n 0%, 80%, 100% {\\n transform: scale(0); }\\n 40% {\\n transform: scale(1); } }\\n\";\nstyleInject(css_248z$1);\n\nvar SpinnerThreeBouncePlugin = /*#__PURE__*/function (_UIContainerPlugin) {\n _inherits(SpinnerThreeBouncePlugin, _UIContainerPlugin);\n\n var _super = _createSuper(SpinnerThreeBouncePlugin);\n\n function SpinnerThreeBouncePlugin(container) {\n var _this;\n\n _classCallCheck(this, SpinnerThreeBouncePlugin);\n\n _this = _super.call(this, container);\n _this.template = template(spinnerHTML);\n _this.showTimeout = null;\n\n _this.listenTo(_this.container, Events.CONTAINER_STATE_BUFFERING, _this.onBuffering);\n\n _this.listenTo(_this.container, Events.CONTAINER_STATE_BUFFERFULL, _this.onBufferFull);\n\n _this.listenTo(_this.container, Events.CONTAINER_STOP, _this.onStop);\n\n _this.listenTo(_this.container, Events.CONTAINER_ENDED, _this.onStop);\n\n _this.listenTo(_this.container, Events.CONTAINER_ERROR, _this.onStop);\n\n _this.render();\n\n return _this;\n }\n\n _createClass(SpinnerThreeBouncePlugin, [{\n key: \"name\",\n get: function get() {\n return 'spinner';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.18\"\n };\n }\n }, {\n key: \"attributes\",\n get: function get() {\n return {\n 'data-spinner': '',\n 'class': 'spinner-three-bounce'\n };\n }\n }, {\n key: \"onBuffering\",\n value: function onBuffering() {\n this.show();\n }\n }, {\n key: \"onBufferFull\",\n value: function onBufferFull() {\n this.hide();\n }\n }, {\n key: \"onStop\",\n value: function onStop() {\n this.hide();\n }\n }, {\n key: \"show\",\n value: function show() {\n var _this2 = this;\n\n if (this.showTimeout === null) this.showTimeout = setTimeout(function () {\n return _this2.$el.show();\n }, 300);\n }\n }, {\n key: \"hide\",\n value: function hide() {\n if (this.showTimeout !== null) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n\n this.$el.hide();\n }\n }, {\n key: \"render\",\n value: function render() {\n this.$el.html(this.template());\n this.container.$el.append(this.$el);\n this.$el.hide();\n if (this.container.buffering) this.onBuffering();\n return this;\n }\n }]);\n\n return SpinnerThreeBouncePlugin;\n}(UIContainerPlugin);\n\nvar StatsPlugin = /*#__PURE__*/function (_ContainerPlugin) {\n _inherits(StatsPlugin, _ContainerPlugin);\n\n var _super = _createSuper(StatsPlugin);\n\n function StatsPlugin(container) {\n var _this;\n\n _classCallCheck(this, StatsPlugin);\n\n _this = _super.call(this, container);\n\n _this.setInitialAttrs();\n\n _this.reportInterval = _this.options.reportInterval || 5000;\n _this.state = 'IDLE';\n return _this;\n }\n\n _createClass(StatsPlugin, [{\n key: \"name\",\n get: function get() {\n return 'stats';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.18\"\n };\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n this.listenTo(this.container.playback, Events.PLAYBACK_PLAY, this.onPlay);\n this.listenTo(this.container, Events.CONTAINER_STOP, this.onStop);\n this.listenTo(this.container, Events.CONTAINER_ENDED, this.onStop);\n this.listenTo(this.container, Events.CONTAINER_DESTROYED, this.onStop);\n this.listenTo(this.container, Events.CONTAINER_STATE_BUFFERING, this.onBuffering);\n this.listenTo(this.container, Events.CONTAINER_STATE_BUFFERFULL, this.onBufferFull);\n this.listenTo(this.container, Events.CONTAINER_STATS_ADD, this.onStatsAdd);\n this.listenTo(this.container, Events.CONTAINER_BITRATE, this.onStatsAdd);\n this.listenTo(this.container.playback, Events.PLAYBACK_STATS_ADD, this.onStatsAdd);\n }\n }, {\n key: \"setInitialAttrs\",\n value: function setInitialAttrs() {\n this.firstPlay = true;\n this.startupTime = 0;\n this.rebufferingTime = 0;\n this.watchingTime = 0;\n this.rebuffers = 0;\n this.externalMetrics = {};\n }\n }, {\n key: \"onPlay\",\n value: function onPlay() {\n this.state = 'PLAYING';\n this.watchingTimeInit = Date.now();\n if (!this.intervalId) this.intervalId = setInterval(this.report.bind(this), this.reportInterval);\n }\n }, {\n key: \"onStop\",\n value: function onStop() {\n clearInterval(this.intervalId);\n this.report();\n this.intervalId = undefined;\n this.state = 'STOPPED';\n }\n }, {\n key: \"onBuffering\",\n value: function onBuffering() {\n if (this.firstPlay) this.startupTimeInit = Date.now();else this.rebufferingTimeInit = Date.now();\n this.state = 'BUFFERING';\n this.rebuffers++;\n }\n }, {\n key: \"onBufferFull\",\n value: function onBufferFull() {\n if (this.firstPlay && this.startupTimeInit) {\n this.firstPlay = false;\n this.startupTime = Date.now() - this.startupTimeInit;\n this.watchingTimeInit = Date.now();\n } else if (this.rebufferingTimeInit) {\n this.rebufferingTime += this.getRebufferingTime();\n }\n\n this.rebufferingTimeInit = undefined;\n this.state = 'PLAYING';\n }\n }, {\n key: \"getRebufferingTime\",\n value: function getRebufferingTime() {\n return Date.now() - this.rebufferingTimeInit;\n }\n }, {\n key: \"getWatchingTime\",\n value: function getWatchingTime() {\n var totalTime = Date.now() - this.watchingTimeInit;\n return totalTime - this.rebufferingTime;\n }\n }, {\n key: \"isRebuffering\",\n value: function isRebuffering() {\n return !!this.rebufferingTimeInit;\n }\n }, {\n key: \"onStatsAdd\",\n value: function onStatsAdd(metric) {\n $.extend(this.externalMetrics, metric);\n }\n }, {\n key: \"getStats\",\n value: function getStats() {\n var metrics = {\n startupTime: this.startupTime,\n rebuffers: this.rebuffers,\n rebufferingTime: this.isRebuffering() ? this.rebufferingTime + this.getRebufferingTime() : this.rebufferingTime,\n watchingTime: this.isRebuffering() ? this.getWatchingTime() - this.getRebufferingTime() : this.getWatchingTime()\n };\n $.extend(metrics, this.externalMetrics);\n return metrics;\n }\n }, {\n key: \"report\",\n value: function report() {\n this.container.statsReport(this.getStats());\n }\n }]);\n\n return StatsPlugin;\n}(ContainerPlugin);\n\nvar watermarkHTML = \"<div class=\\\"clappr-watermark\\\" data-watermark data-watermark-<%=position %>>\\n<% if(typeof imageLink !== 'undefined') { %>\\n<a target=\\\"_blank\\\" href=\\\"<%= imageLink %>\\\">\\n<% } %>\\n<img src=\\\"<%= imageUrl %>\\\">\\n<% if(typeof imageLink !== 'undefined') { %>\\n</a>\\n<% } %>\\n</div>\\n\";\n\nvar css_248z = \".clappr-watermark[data-watermark] {\\n position: absolute;\\n min-width: 70px;\\n max-width: 200px;\\n width: 12%;\\n text-align: center;\\n z-index: 10; }\\n\\n.clappr-watermark[data-watermark] a {\\n outline: none;\\n cursor: pointer; }\\n\\n.clappr-watermark[data-watermark] img {\\n max-width: 100%; }\\n\\n.clappr-watermark[data-watermark-bottom-left] {\\n bottom: 10px;\\n left: 10px; }\\n\\n.clappr-watermark[data-watermark-bottom-right] {\\n bottom: 10px;\\n right: 42px; }\\n\\n.clappr-watermark[data-watermark-top-left] {\\n top: 10px;\\n left: 10px; }\\n\\n.clappr-watermark[data-watermark-top-right] {\\n top: 10px;\\n right: 37px; }\\n\";\nstyleInject(css_248z);\n\nvar WaterMarkPlugin = /*#__PURE__*/function (_UIContainerPlugin) {\n _inherits(WaterMarkPlugin, _UIContainerPlugin);\n\n var _super = _createSuper(WaterMarkPlugin);\n\n function WaterMarkPlugin(container) {\n var _this;\n\n _classCallCheck(this, WaterMarkPlugin);\n\n _this = _super.call(this, container);\n\n _this.configure();\n\n return _this;\n }\n\n _createClass(WaterMarkPlugin, [{\n key: \"name\",\n get: function get() {\n return 'watermark';\n }\n }, {\n key: \"supportedVersion\",\n get: function get() {\n return {\n min: \"0.4.18\"\n };\n }\n }, {\n key: \"template\",\n get: function get() {\n return template(watermarkHTML);\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n this.listenTo(this.container, Events.CONTAINER_PLAY, this.onPlay);\n this.listenTo(this.container, Events.CONTAINER_STOP, this.onStop);\n this.listenTo(this.container, Events.CONTAINER_OPTIONS_CHANGE, this.configure);\n }\n }, {\n key: \"configure\",\n value: function configure() {\n this.position = this.options.position || 'bottom-right';\n\n if (this.options.watermark) {\n this.imageUrl = this.options.watermark;\n this.imageLink = this.options.watermarkLink;\n this.render();\n } else {\n this.$el.remove();\n }\n }\n }, {\n key: \"onPlay\",\n value: function onPlay() {\n if (!this.hidden) this.$el.show();\n }\n }, {\n key: \"onStop\",\n value: function onStop() {\n this.$el.hide();\n }\n }, {\n key: \"render\",\n value: function render() {\n this.$el.hide();\n var templateOptions = {\n position: this.position,\n imageUrl: this.imageUrl,\n imageLink: this.imageLink\n };\n this.$el.html(this.template(templateOptions));\n this.container.$el.append(this.$el);\n return this;\n }\n }]);\n\n return WaterMarkPlugin;\n}(UIContainerPlugin);\n\n// Copyright 2014 Globo.com Player authors. All rights reserved.\nvar version = \"0.4.13\";\nvar Plugins = {\n ClickToPause: ClickToPausePlugin,\n ClosedCaptions: ClosedCaptions,\n DVRControls: DVRControls,\n EndVideo: EndVideo,\n ErrorScreen: ErrorScreen,\n Favicon: Favicon,\n GoogleAnalytics: GoogleAnalytics,\n MediaControl: MediaControl,\n Poster: PosterPlugin,\n SeekTime: SeekTime,\n SpinnerThreeBounce: SpinnerThreeBouncePlugin,\n Stats: StatsPlugin,\n WaterMark: WaterMarkPlugin\n};\n\nexport { ClickToPausePlugin as ClickToPause, ClosedCaptions, DVRControls, EndVideo, ErrorScreen, Favicon, GoogleAnalytics, MediaControl, Plugins, PosterPlugin as Poster, SeekTime, SpinnerThreeBouncePlugin as SpinnerThreeBounce, StatsPlugin as Stats, index as Vendor, WaterMarkPlugin as WaterMark, version };\n","// Copyright 2014 Globo.com Player authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\nimport ClapprCore, { Loader } from '@clappr/core'\nimport { Plugins, Vendor } from '@clappr/plugins'\n\nconst version = VERSION\n\nfor (let plugin of Object.values(Plugins))\n Loader.registerPlugin(plugin)\n\n// TODO: remove on 0.5.x (backward-compatibility only)\nconst {\n ClickToPause,\n ClosedCaptions,\n DVRControls,\n EndVideo,\n ErrorScreen,\n Favicon,\n GoogleAnalytics,\n MediaControl,\n Poster,\n SeekTime,\n SpinnerThreeBounce,\n Stats,\n WaterMark,\n} = Plugins\n\nexport default {\n ...ClapprCore,\n ClickToPause,\n ClosedCaptions,\n DVRControls,\n EndVideo,\n ErrorScreen,\n Favicon,\n GoogleAnalytics,\n MediaControl,\n Poster,\n SeekTime,\n SpinnerThreeBounce,\n Stats,\n WaterMark,\n Vendor,\n Plugins,\n version,\n}\n"],"names":["_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","_defineProperty","value","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties","_inherits","subClass","superClass","create","_setPrototypeOf","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","p","_assertThisInitialized","self","ReferenceError","_possibleConstructorReturn","call","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Date","toString","e","_isNativeReflectConstruct","result","Super","NewTarget","this","_get","property","receiver","get","base","hasOwnProperty","_superPropBase","desc","_slicedToArray","arr","Array","isArray","_arrayWithHoles","_arr","_n","_d","_e","undefined","_s","_i","next","done","err","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","from","_iterableToArray","_nonIterableSpread","minLen","n","slice","name","test","len","arr2","_createForOfIteratorHelper","allowArrayLike","it","F","s","f","normalCompletion","didErr","step","return","find","predicate","thisArg","k","kValue","entries","ownProps","resArray","values","assign","varArgs","to","index","nextSource","nextKey","findIndex","$","Media","mp4","Zepto","undefined$1","classList","camelize","uniq","emptyArray","concat","document","window","elementDisplay","classCache","cssNumber","column-count","columns","font-weight","line-height","opacity","z-index","zoom","fragmentRE","singleTagRE","tagExpanderRE","rootNodeRE","capitalRE","methodAttributes","table","createElement","tableRow","containers","tr","tbody","thead","tfoot","td","th","*","readyRE","simpleSelectorRE","class2type","zepto","tempParent","propMap","tabindex","readonly","for","class","maxlength","cellspacing","cellpadding","rowspan","colspan","usemap","frameborder","contenteditable","type","String","isFunction","isWindow","isDocument","nodeType","DOCUMENT_NODE","isObject","isPlainObject","likeArray","dasherize","str","replace","toLowerCase","classRE","RegExp","maybeAddPx","children","element","map","childNodes","node","Z","dom","selector","extend","deep","filtered","nodes","funcArg","context","arg","idx","payload","setAttribute","removeAttribute","className","klass","svg","baseVal","deserializeValue","parseJSON","traverseNode","fun","matches","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","match","parent","parentNode","temp","appendChild","qsa","indexOf","removeChild","chr","toUpperCase","array","item","fragment","html","properties","container","$1","innerHTML","each","attr","isZ","init","trim","ready","args","shift","found","maybeID","maybeClass","nameOnly","isSimple","getElementById","getElementsByClassName","getElementsByTagName","querySelectorAll","contains","documentElement","isEmptyObject","isNumeric","val","num","Number","isNaN","isFinite","inArray","elem","camelCase","uuid","support","expr","noop","elements","callback","fn","grep","JSON","parse","split","reduce","sort","splice","toArray","el","readyState","body","addEventListener","size","remove","every","not","add","is","excludes","has","eq","first","last","$this","some","closest","collection","_","parents","ancestors","pluck","contents","contentDocument","siblings","child","empty","show","nodeName","display","style","getComputedStyle","getPropertyValue","replaceWith","newContent","before","wrap","structure","func","clone","wrapAll","cloneNode","append","wrapInner","unwrap","hide","css","toggle","setting","prev","originHtml","text","newText","textContent","join","getAttribute","removeAttr","attribute","prop","removeProp","data","attrName","multiple","selected","offset","coordinates","coords","parentOffset","offsetParent","top","left","getBoundingClientRect","pageXOffset","pageYOffset","width","Math","round","height","computedStyle","removeProperty","cssText","hasClass","addClass","cls","removeClass","toggleClass","when","scrollTop","hasScrollTop","scrollTo","scrollX","scrollLeft","hasScrollLeft","scrollY","position","parseFloat","detach","dimension","dimensionProperty","m","operator","operatorIndex","inside","argType","copyByClone","nextSibling","firstChild","parentInDocument","insertBefore","src","ownerDocument","defaultView","jsonpID","rscript","scriptTypeRE","xmlTypeRE","jsonType","htmlType","blankRE","originAnchor","triggerGlobal","settings","eventName","global","event","Event","trigger","isDefaultPrevented","triggerAndReturn","ajaxBeforeSend","xhr","beforeSend","ajaxSuccess","deferred","status","success","resolveWith","ajaxComplete","ajaxError","error","rejectWith","complete","active","ajaxStop","appendQuery","url","query","parseArguments","dataType","href","location","ajaxJSONP","options","ajax","responseData","abortTimeout","_callbackName","jsonpCallback","callbackName","script","originalCallback","abort","errorType","triggerHandler","promise","on","clearTimeout","off","head","timeout","setTimeout","ajaxSettings","XMLHttpRequest","accepts","json","xml","crossDomain","processData","cache","dataFilter","urlAnchor","hashIndex","Deferred","ajaxStart","protocol","host","param","traditional","serializeData","hasPlaceholder","now","jsonp","mime","headers","setHeader","nativeSetHeader","setRequestHeader","mimeType","overrideMimeType","contentType","onreadystatechange","mimeToDataType","getResponseHeader","responseType","response","responseText","ajaxDataFilter","eval","responseXML","statusText","async","open","username","password","xhrFields","send","post","getJSON","load","parts","escape","encodeURIComponent","serialize","params","scope","hash","Callbacks","memory","fired","firing","firingStart","firingLength","firingIndex","list","stack","once","fire","stopOnFalse","disable","start","unique","disabled","lock","locked","fireWith","tuples","state","always","fail","then","fns","defer","tuple","returned","resolve","reject","progress","notify","stateString","sub","progressValues","progressContexts","resolveContexts","resolveValues","remain","updateFn","ctx","notifyWith","_zid","isString","handlers","specialEvents","focusinSupported","focus","blur","hover","mouseenter","mouseleave","zid","findHandlers","ns","matcher","handler","sel","eventCapture","captureSetting","del","realEvent","events","delegator","capture","id","set","related","relatedTarget","proxy","compatible","isImmediatePropagationStopped","_args","preventDefault","stopPropagation","removeEventListener","click","mousedown","mouseup","mousemove","proxyFn","unshift","bind","unbind","one","returnTrue","returnFalse","ignoreProperties","eventMethods","stopImmediatePropagation","sourceMethod","timeStamp","defaultPrevented","returnValue","getPreventDefault","createProxy","originalEvent","delegate","undelegate","live","die","autoRemove","evt","currentTarget","liveFired","dispatchEvent","createEvent","bubbles","initEvent","nativeGetComputedStyle","pseudoElement","oldQsa","oldMatches","visible","filters","hidden","checked","filterRe","childRe","classTag","process","exec","taggedParent","console","viewportObject","ua","BROWSER_DATA","group","identifier","versionIdentifier","OS_DATA","version","versionSeparator","Browser","setBrowserVersion","browserObject","splitVersion","fullVersion","majorVersion","parseInt","minorVersion","setOsVersion","separator","osObject","finalSeparator","substr","browserInfo","extra","navigator","appName","appVersion","getBrowserInfo","userAgent","isEdge","isChrome","isSafari","isFirefox","isLegacyIE","ActiveXObject","isIE","isIE11","isChromecast","isMobile","isiOS","isAndroid","isWindowsPhone","isWin8App","isWiiU","isPS4","hasLocalstorage","localStorage","setItem","removeItem","hasFlash","mimeTypes","enabledPlugin","_step","_iterator","browser","browserRegExpResult","versionRegExpResult","getBrowserData","os","_step2","_iterator2","osRegExpResult","getOsData","viewport","device","orientation","setViewportOrientation","idsCounter","videoStack","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","propDescriptor","Surrogate","_parent","_super","_this","_len","_key","initialize","Fullscreen","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","querySelector","webkitEnterFullScreen","cancelFullscreen","exitFullscreen","webkitCancelFullScreen","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","Config","volume","_defaultConfig","domain","_createKeyspace","_defaultValueFor","QueryString","paramsString","pl","search","decode","decodeURIComponent","substring","_urlParams","_hashParams","seekStringToSeconds","paramName","seconds","seekString","hashParams","factor","h","suffix","time","uniqueId","prefix","isNumber","currentScriptUrl","scripts","getBrowserLanguage","language","canAutoPlayMedia","cb","inline","muted","play","timeoutId","setResult","Error","DomRecycler","recycleVideo","tagName","attributes","DoubleEventHandler","delay","lastTime","prevented","currentTime","getTime","diffTime","Utils","formatTime","paddedHours","minutes","hours","days","out","performance","removeArrayItem","listContainsIgnoreCase","items","itemEach","BOLD","WARN","ERROR","COLORS","DESCRIPTIONS","Log","level","offLevel","EXCLUDE_LIST","previousLevel","_level","newLevel","log","message","color","klassDescription","LEVEL_DEBUG","LEVEL_INFO","LEVEL_WARN","LEVEL_ERROR","getInstance","_instance","setLevel","debug","info","warn","eventSplitter","eventsApi","action","rest","names","l","triggerEvents","ev","a1","a2","a3","run","exception","Events","_events","_once","retain","j","_callback","allEvents","all","listeningTo","_listeningTo","_listenId","Custom","listenMethods","listenTo","listenToOnce","method","PLAYER_READY","PLAYER_RESIZE","PLAYER_FULLSCREEN","PLAYER_PLAY","PLAYER_PAUSE","PLAYER_STOP","PLAYER_ENDED","PLAYER_SEEK","PLAYER_ERROR","PLAYER_TIMEUPDATE","PLAYER_VOLUMEUPDATE","PLAYER_SUBTITLE_AVAILABLE","PLAYBACK_PROGRESS","PLAYBACK_TIMEUPDATE","PLAYBACK_READY","PLAYBACK_BUFFERING","PLAYBACK_BUFFERFULL","PLAYBACK_SETTINGSUPDATE","PLAYBACK_LOADEDMETADATA","PLAYBACK_HIGHDEFINITIONUPDATE","PLAYBACK_BITRATE","PLAYBACK_LEVELS_AVAILABLE","PLAYBACK_LEVEL_SWITCH_START","PLAYBACK_LEVEL_SWITCH_END","PLAYBACK_PLAYBACKSTATE","PLAYBACK_DVR","PLAYBACK_MEDIACONTROL_DISABLE","PLAYBACK_MEDIACONTROL_ENABLE","PLAYBACK_ENDED","PLAYBACK_PLAY_INTENT","PLAYBACK_PLAY","PLAYBACK_PAUSE","PLAYBACK_SEEK","PLAYBACK_SEEKED","PLAYBACK_STOP","PLAYBACK_ERROR","PLAYBACK_STATS_ADD","PLAYBACK_FRAGMENT_LOADED","PLAYBACK_LEVEL_SWITCH","PLAYBACK_SUBTITLE_AVAILABLE","PLAYBACK_SUBTITLE_CHANGED","CORE_CONTAINERS_CREATED","CORE_ACTIVE_CONTAINER_CHANGED","CORE_OPTIONS_CHANGE","CORE_READY","CORE_FULLSCREEN","CORE_RESIZE","CORE_SCREEN_ORIENTATION_CHANGED","CORE_MOUSE_MOVE","CORE_MOUSE_LEAVE","CONTAINER_PLAYBACKSTATE","CONTAINER_PLAYBACKDVRSTATECHANGED","CONTAINER_BITRATE","CONTAINER_STATS_REPORT","CONTAINER_DESTROYED","CONTAINER_READY","CONTAINER_RESIZE","CONTAINER_ERROR","CONTAINER_LOADEDMETADATA","CONTAINER_SUBTITLE_AVAILABLE","CONTAINER_SUBTITLE_CHANGED","CONTAINER_TIMEUPDATE","CONTAINER_PROGRESS","CONTAINER_PLAY","CONTAINER_STOP","CONTAINER_PAUSE","CONTAINER_ENDED","CONTAINER_CLICK","CONTAINER_DBLCLICK","CONTAINER_CONTEXTMENU","CONTAINER_MOUSE_ENTER","CONTAINER_MOUSE_LEAVE","CONTAINER_MOUSE_UP","CONTAINER_MOUSE_DOWN","CONTAINER_SEEK","CONTAINER_SEEKED","CONTAINER_VOLUME","CONTAINER_FULLSCREEN","CONTAINER_STATE_BUFFERING","CONTAINER_STATE_BUFFERFULL","CONTAINER_SETTINGSUPDATE","CONTAINER_HIGHDEFINITIONUPDATE","CONTAINER_MEDIACONTROL_SHOW","CONTAINER_MEDIACONTROL_HIDE","CONTAINER_MEDIACONTROL_DISABLE","CONTAINER_MEDIACONTROL_ENABLE","CONTAINER_STATS_ADD","CONTAINER_OPTIONS_CHANGE","MEDIACONTROL_RENDERED","MEDIACONTROL_FULLSCREEN","MEDIACONTROL_SHOW","MEDIACONTROL_HIDE","MEDIACONTROL_MOUSEMOVE_SEEKBAR","MEDIACONTROL_MOUSELEAVE_SEEKBAR","MEDIACONTROL_PLAYING","MEDIACONTROL_NOTPLAYING","MEDIACONTROL_CONTAINERCHANGED","MEDIACONTROL_OPTIONS_CHANGE","BaseObject","_Events","_options","evaluate","interpolate","noMatch","escapes","'","\\","\r","\n","\t","
","
","escaper","htmlEntities","&","<",">","\"","entityRe","escapeExpr","string","counter","tmpl","render","variable","Function","template","Styler","getStyleFor","baseUrl","delegateEventSplitter","UIObject","_BaseObject","cid","_ensureElement","delegateEvents","$el","stopListening","undelegateEvents","setElement","attrs","PlayerError","core","FATAL","INFO","ErrorMixin","createError","useCodePrefix","origin","i18n","prefixedCode","code","defaultError","description","Levels","raw","errorData","UI","defaultUI","title","t","playerError","UICorePlugin","_UIObject","enabled","bindEvents","Container","_i18n","playback","isReady","mediaControlDisabled","plugins","dblTapHandler","clickTimer","clickDelay","data-container","dblclick","touchend","contextmenu","ended","buffering","hasClosedCaptionsTracks","closedCaptionsTracks","closedCaptionsTrackId","trackId","onProgress","timeUpdated","onBuffering","bufferfull","settingsUpdate","loadedMetadata","highDefinitionUpdate","updateBitrate","playbackStateChanged","playbackDvrStateChanged","disableMediaControl","enableMediaControl","onSeek","onSeeked","onEnded","playing","paused","stopped","subtitleAvailable","subtitleChanged","track","dvrInUse","newBitrate","metrics","getPlaybackType","dvrEnabled","disableResizeObserver","plugin","destroy","duration","animate","isPlaying","getStartTimeOffset","getDuration","_error","metadata","timeProgress","current","stop","pause","_this2","chromeless","allowUserInteraction","cancelClicked","_this3","handle","seek","percentage","getPlugin","isHD","isHighDefinitionInUse","_this4","resizeObserverInterval","setInterval","checkResize","clearInterval","newSize","clientWidth","clientHeight","_ref","currentSize","updateStyle","configure","enableResizeObserver","Playback","_consented","NO_OP","canAutoPlay","canPlay","VOD","AOD","LIVE","ContainerFactory","loader","sources","createContainer","playbackPlugins","resolvedSource","playbackPlugin","findPlaybackPlugin","addContainerPlugins","containerPlugins","Plugin","addPlugin","Core","configureDomRecycler","firstResize","_boundFullscreenHandler","handleFullscreenChange","handleWindowResize","webkitfullscreenchange","data-player","_mediaControl","dummyMediaControl","_dummyMediaControl","_activeContainer","activeContainer","containerFactory","prepareContainers","createContainers","setupContainers","resolveOnContainersReady","isFullscreen","setFullscreen","setPlayerSize","previousSize","resize","triggerResize","oldHeight","oldWidth","computedSize","updateSize","innerWidth","innerHeight","_screenOrientation","c","removeContainer","setupContainer","renderContainers","appendToParent","_this5","activePlayback","playbackEl","_this6","fullscreenEl","_this7","resetStyle","includeResetStyle","appendTo","parentElement","registry","currentVersion","CoreFactory","player","addCorePlugins","corePlugins","setupExternalInterface","externalFunctions","getExternalInterface","VERSION_REGEX","Version","major","minor","patch","_matches","other","diff","min","max","compare","filterPluginsByType","_ref3","_ref4","Loader","playbacks","externalPlugins","playerId","_Loader$registeredPlu","registeredPlugins","validateExternalPluginsType","addExternalPlugins","entry","_entry$prototype","supportedVersion","maxVersion","inc","minVersion","satisfies","pluginEntry","checkVersionSupport","pluginRegistry","previousEntry","playbackEntry","previousEntryIdx","memo","useReversePrecedence","groupUp","pluginsMap","reduceRight","loadExternalPluginsFirst","loadExternalPlaybacksFirst","groupPluginsByType","removeDups","errorMessage","Player","defaultOptions","persistConfig","_normalizeSources","disableKeyboardShortcuts","_registerOptionEventListeners","_coreFactory","parentId","setParentId","attachTo","_loader","_ready","onReady","onResize","onPlay","onPause","onStop","onError","onTimeUpdate","onVolumeUpdate","onSubtitleAvailable","_addEventListeners","_onReady","_containerChanged","_onFullscreenChange","_onResize","_onPlay","_onPause","_onStop","_onEnded","_onSeek","_onError","_onTimeUpdate","_onVolumeUpdate","_onSubtitleAvailable","newEvents","hasNewEvents","userEvent","eventType","eventsMapping","eventFunction","_addContainerEventListeners","fullscreen","getCurrentTime","autoPlay","getCurrentPlayback","consent","seekPercentage","mute","unmute","isDvrEnabled","isDvrInUse","ContainerPlugin","CorePlugin","UIContainerPlugin","MIMETYPES","codec","ogg","3gpp","webm","mkv","m3u8","AUDIO_MIMETYPES","wav","mp3","aac","oga","KNOWN_AUDIO_MIMETYPES","acc","UNKNOWN_ERROR","HTML5Video","_Playback","_destroyed","_loadStarted","_isBuffering","_playheadMoving","_playheadMovingTimer","_stopped","_ccTrackId","_setupSrc","disableContextMenu","disableVideoTagContextMenu","_minDvrSize","isValidMinimumDVRSizeConfig","minimumDVRSizeConfig","posterUrl","playbackConfig","preload","poster","defaultMuted","loop","crossOrigin","x-webkit-playsinline","playInline","controls","useVideoTagDefaultControls","playsinline","crossorigin","default","right","externalTracks","_setupExternalTracks","attemptAutoPlay","isAudioOnly","resourceUrl","_mimeTypesForUrl","audioOnly","data-html5-video","canplay","canplaythrough","durationchange","loadeddata","loadedmetadata","seeking","seeked","stalled","timeupdate","waiting","isLive","minimumDvrSize","disableCanAutoPlay","opts","autoPlayTimeout","tracks","_externalTracks","kind","label","lang","srcUrl","_ccIsSetup","_src","_handleBufferingEvents","_updateSettings","autoSeekFromUrl","_checkInitialSeek","_onProgress","seekEnabled","isSeekEnabled","onDemandType","Infinity","eventHandler","_updateDvr","_stopPlayheadMovingChecks","_playheadMovingTimeOnCheck","_determineIfPlayheadMoving","_checkForClosedCaptions","_startPlayheadMovingChecks","playheadShouldBeMoving","HAVE_FUTURE_DATA","isUnknownError","formattedError","handleTextTrackChange","textTracks","garbage","dvr","seekable","seekTime","end","_scheduleUpdateSettingsCheck","_updateSettingsCheckInFlight","total","buffered","bufferedPos","_isReadyState","isHTML5Video","_handleTextTrackChange","mode","showingTrack","mimeTypesByExtension","extension","_canPlay","media","mediaType","canPlayType","HTML5Audio","_HTML5Video","HTMLImg","data-html-img","resource","NoOp","_noiseFrameNum","data-no-op","playbackNotSupported","playbackNotSupportedMessage","showForNoOp","_animate","buffer32","idata","createImageData","canvas","Uint32Array","buffer","random","pow","putImageData","_stop","_noise","_animationHandle","_loop","getContext","Strings","_CorePlugin","_initializeMessages","_language","fallbackLang","_messages","en","back_to_live","playback_not_supported","default_error_title","default_error_message","de","pt","es","ru","fr","et","ar","strings","SourcesPlugin","onContainersCreated","firstValidSource","registerPlugin","registerPlayback","main","Boolean","valueOf","ClickToPausePlugin","_ContainerPlugin","pointerEnabled","styleInject","ref","insertAt","styleSheet","createTextNode","ClosedCaptions","_UICorePlugin","config","closedCaptionsConfig","_title","_ariaLabel","ariaLabel","_labelCb","labelCallback","click [data-cc-button]","click [data-cc-select]","data-cc-controls","containerChanged","mediaControl","hideContextMenu","bindContainerEvents","onSubtitleChanged","onContainerStop","ccAvailable","renderCcButton","setCurrentContextMenuElement","dataset","ccSelect","hasCC","_trackId","contextMenuElement","$ccButton","disabledLabel","$fullscreen","insertAfter","prepend","DVRControls","click .live-button","data-dvr-controls","bindCoreEvents","dvrChanged","shouldRender","useDvrControls","backToLive","EndVideo","exitFullscreenOnEnd","toggleFullscreen","ErrorScreen","disableErrorScreen","getCurrentContainer","data-error-screen","onContainerChanged","reloadButton","reload","unbindReload","icon","reloadIcon","bindReload","playIcon","pauseIcon","oldIcon","Favicon","_container","changeFavicon","enable","setPlayIcon","setPauseIcon","resetIcon","fillStyle","d","path","Path2D","fill","toDataURL","createIcon","changeIcon","GoogleAnalytics","gaAccount","account","trackerName","gaTrackerName","domainName","gaDomainName","currentHDState","embedScript","_gat","addEventListeners","onload","onBufferFull","onPlaybackChanged","onVolumeChanged","CONTAINER_FULL_SCREEN","onFullscreen","onHD","onDVR","_gaq","playbackState","res","Kibo","KEY_NAMES_BY_CODE","8","9","13","16","17","18","20","27","32","37","38","39","40","48","49","50","51","52","53","54","55","56","57","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","112","113","114","115","116","117","118","119","120","121","122","123","KEY_CODES_BY_NAME","MODIFIERS","registerEvent","attachEvent","unregisterEvent","detachEvent","stringContains","neatString","capitalize","what","arrayIncludes","haystack","needle","extractModifiers","keyCombination","modifiers","extractKey","modifiersAndKey","keyName","keyCode","that","lastKeyCode","lastModifiers","keysDown","any","keysUp","downHandler","upHandler","unloader","upOrDown","registeredKeys","lastModifiersAndKey","registerKeys","newKeys","unregisterKeys","down","up","lastKey","modifier","stopIcon","volumeIcon","fullscreenIcon","formatTime$1","MediaControl","currentPositionValue","currentDurationValue","keepVisible","fullScreenOnVideoTagSupported","setInitialVolume","kibo","focusElement","bindKeyEvents","userDisabled","stopDragHandler","stopDrag","updateDragHandler","updateDrag","playbackIsNOOP","data-media-control","click [data-play]","click [data-pause]","click [data-playpause]","click [data-stop]","click [data-playstop]","click [data-fullscreen]","click .bar-container[data-seekbar]","click .bar-container[data-volume]","click .drawer-icon[data-volume]","mouseenter .drawer-container[data-volume]","mouseleave .drawer-container[data-volume]","mousedown .bar-container[data-volume]","mousemove .bar-container[data-volume]","mousedown .bar-scrubber[data-seekbar]","mousemove .bar-container[data-seekbar]","mouseleave .bar-container[data-seekbar]","mouseenter .media-control-layer[data-controls]","mouseleave .media-control-layer[data-controls]","intendedVolume","setVolume","getVolume","onActiveContainerChanged","hideMediaControlDelay","playerResize","changeTogglePlay","updateProgressBar","onLoadedMetadataOnVideoTag","unbindKeyEvents","initialVolume","restore","updateVolumeUI","video","webkitSupportsFullscreen","rendered","$volumeBarContainer","containerWidth","barWidth","$volumeBarBackground","pos","$volumeBarFill","$volumeBarScrubber","ceil","$volumeIcon","applyButtonStyle","$playPauseToggle","$playStopToggle","offsetX","pageX","$seekBarContainer","$seekBarHover","getVolumeFromUIEvent","draggingVolumeBar","$fullscreenToggle","hideVolumeBar","draggingSeekBar","$seekBarLoaded","$seekBarPosition","$seekBarScrubber","setSeekPercentage","isInitialVolume","persist","setWhenContainerReady","resetUserKeepVisible","hideVolumeId","loadedStart","loadedEnd","renderSeekBar","currentSeekBarPercentage","newPosition","newDuration","displayedPosition","$position","displayedDuration","$duration","userKeepVisible","mousePointerMoved","clientX","lastMouseX","clientY","lastMouseY","hideId","updateCursorStyle","isVisible","hideMediaControl","hasKeepVisibleRequested","hasDraggingAction","showing","newSettings","getSettings","stringify","$hdIndicator","$layer","$volumeContainer","resetIndicators","initializeIcons","displayedSeekBarPercentage","delta","_this8","_this9","bindKeyAndShow","togglePlayPause","seekRelative","mediacontrol","buttonsColor","buttons","seekbarColor","seekbar","_this10","createCachedElements","previousSeekPercentage","parseColors","PosterPlugin","_UIContainerPlugin","hasStartedPlaying","playRequested","update","data-poster","showOnVideoEnd","hasFatalError","showPlayButton","hidePlayButton","$playButton","updatePlayButton","updatePoster","hidePoster","showPoster","shouldHideOnPlay","custom","background-image","removeVideoElementPoster","background","$playWrapper","SeekTime","hoveringOverSeekBar","hoverPosition","firstFragDateTime","actualLiveTime","actualLiveServerTime","actualLiveServerTimeDiff","data-seek-time","mediaControlContainer","isLiveStreamWithDvr","showTime","hideTime","updateDuration","calculateHoverPosition","secondsSinceMidnight","useActualLiveTime","setHours","shouldBeVisible","getSeekTime","currentSeekTime","displayedSeekTime","$seekTimeEl","durationShown","$durationEl","currentDuration","elWidth","elLeftPos","SpinnerThreeBouncePlugin","showTimeout","data-spinner","StatsPlugin","setInitialAttrs","reportInterval","onStatsAdd","firstPlay","startupTime","rebufferingTime","watchingTime","rebuffers","externalMetrics","watchingTimeInit","intervalId","report","startupTimeInit","rebufferingTimeInit","getRebufferingTime","metric","isRebuffering","getWatchingTime","statsReport","getStats","Plugins","ClickToPause","Poster","SpinnerThreeBounce","Stats","WaterMark","WaterMarkPlugin","watermark","imageUrl","imageLink","watermarkLink","templateOptions","ClapprCore","Vendor"],"mappings":"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YMogB,EAmB6BC,EAE7Bna,EA9ZF3D,EAAQvC,EAIRsgB,EAAe,CAAC,CAClBviB,KAAM,WACNwiB,MAAO,SACPC,WAAY,sBACX,CACDziB,KAAM,gBACNwiB,MAAO,SACPC,WAAY,0BACZC,kBAAmB,oBAClB,CACD1iB,KAAM,SACNwiB,MAAO,SACPC,WAAY,oBACX,CACDziB,KAAM,iBACNwiB,MAAO,SACPC,WAAY,mBACX,CACDziB,KAAM,kBACNwiB,MAAO,SACPC,WAAY,kBACX,CACDziB,KAAM,UACNwiB,MAAO,UACPC,WAAY,qBACX,CACDziB,KAAM,aACNwiB,MAAO,QACPC,WAAY,wBACX,CACDziB,KAAM,QACNwiB,MAAO,QACPC,WAAY,mBACX,CACDziB,KAAM,QACNwiB,MAAO,QACPC,WAAY,kBACZC,kBAAmB,qBAClB,CACD1iB,KAAM,WACNwiB,MAAO,WACPC,WAAY,sBACX,CACDziB,KAAM,oBACNwiB,MAAO,WACPC,WAAY,wBACX,CACDziB,KAAM,oBACNwiB,MAAO,WACPC,WAAY,oBACZC,kBAAmB,gBAClB,CACD1iB,KAAM,UACNwiB,MAAO,UACPC,WAAY,iBACZC,kBAAmB,kBAClB,CACD1iB,KAAM,SACNwiB,MAAO,SACPC,WAAY,mBACZC,kBAAmB,sBAKjBC,EAAU,CAAC,CACb3iB,KAAM,eACNwiB,MAAO,UACPC,WAAY,iBACZG,QAAS,OACR,CACD5iB,KAAM,aACNwiB,MAAO,UACPC,WAAY,iBACZG,QAAS,OACR,CACD5iB,KAAM,gBACNwiB,MAAO,UACPC,WAAY,iBACZG,QAAS,OACR,CACD5iB,KAAM,YACNwiB,MAAO,UACPC,WAAY,iBACZG,QAAS,OACR,CACD5iB,KAAM,YACNwiB,MAAO,UACPC,WAAY,iBACZG,QAAS,OACR,CACD5iB,KAAM,cACNwiB,MAAO,UACPC,WAAY,iBACZG,QAAS,OACR,CACD5iB,KAAM,aACNwiB,MAAO,UACPC,WAAY,kBACZG,QAAS,QACR,CACD5iB,KAAM,gBACNwiB,MAAO,gBACPC,WAAY,2BACX,CACDziB,KAAM,gBACNwiB,MAAO,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"}