From 7d22c2fed5cc3a6c9c1057ae964d98165a4307e5 Mon Sep 17 00:00:00 2001 From: Hendrik Langer Date: Mon, 4 May 2020 23:51:39 +0200 Subject: [PATCH] polish clappr.io --- content/live/index.de.html | 33 +++++++++++++++++++++++++++++++++ content/live/index.de.md | 21 --------------------- content/live/index.en.html | 1 + content/live/index.en.md | 1 - static/js/clappr.min.js | 1 + static/js/clappr.min.js.map | 1 + 6 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 content/live/index.de.html delete mode 100644 content/live/index.de.md create mode 120000 content/live/index.en.html delete mode 120000 content/live/index.en.md create mode 100644 static/js/clappr.min.js create mode 100644 static/js/clappr.min.js.map diff --git a/content/live/index.de.html b/content/live/index.de.html new file mode 100644 index 0000000..47a43df --- /dev/null +++ b/content/live/index.de.html @@ -0,0 +1,33 @@ +--- +title: Live +description: Livestream +#date: 2020-05-04 +license: All rights reserved +--- + + +
+
+
+ diff --git a/content/live/index.de.md b/content/live/index.de.md deleted file mode 100644 index 7c7a4bc..0000000 --- a/content/live/index.de.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Live -#date: 2020-05-04 -license: All rights reserved ---- - - - -
- diff --git a/content/live/index.en.html b/content/live/index.en.html new file mode 120000 index 0000000..69d7d96 --- /dev/null +++ b/content/live/index.en.html @@ -0,0 +1 @@ +index.de.html \ No newline at end of file diff --git a/content/live/index.en.md b/content/live/index.en.md deleted file mode 120000 index 9e498d6..0000000 --- a/content/live/index.en.md +++ /dev/null @@ -1 +0,0 @@ -index.de.md \ No newline at end of file diff --git a/static/js/clappr.min.js b/static/js/clappr.min.js new file mode 100644 index 0000000..4930aa5 --- /dev/null +++ b/static/js/clappr.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Clappr=e():t.Clappr=e()}(window,function(){return e={},f.m=d=[function(t,e,r){"use strict";e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},function(t,e,r){"use strict";e.__esModule=!0;var i,n=r(39),a=(i=n)&&i.__esModule?i:{default:i};e.default=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!==(void 0===e?"undefined":(0,a.default)(e))&&"function"!=typeof e?t:e}},function(t,e,r){"use strict";e.__esModule=!0;var i=o(r(133)),n=o(r(76)),a=o(r(39));function o(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+(void 0===e?"undefined":(0,a.default)(e)));t.prototype=(0,n.default)(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(i.default?(0,i.default)(t,e):t.__proto__=e)}},function(t,e,r){"use strict";e.__esModule=!0;var i,n=r(75),a=(i=n)&&i.__esModule?i:{default:i};function o(t,e){for(var r=0;r")},N.garbage=function(t){this.options.recycleVideo&&"VIDEO"===t[0].tagName.toUpperCase()&&(t.children().remove(),x.push(t))},N);function N(){(0,s.default)(this,N)}M.options={recycleVideo:!1};var F=e.DoubleEventHandler=(B.prototype.handle=function(t,e,r){var i=!(2]*>/,$e=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,_e=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,af=/^(?:body|html)$/i,bf=/([A-Z])/g,cf=["val","css","html","text","data","width","height","offset"],ef=Ve.createElement("table"),ff=Ve.createElement("tr"),gf={tr:Ve.createElement("tbody"),tbody:ef,thead:ef,tfoot:ef,td:ff,th:ff,"*":Ve.createElement("div")},hf=/complete|loaded|interactive/,jf=/^[\w-]*$/,lf=(kf={}).toString,mf={},pf=Ve.createElement("div"),qf={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},rf=Array.isArray||function(t){return t instanceof Array},mf.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var r=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(r)return r.call(t,e);var i,n=t.parentNode,a=!n;return a&&(n=pf).appendChild(t),i=~mf.qsa(n,e).indexOf(t),a&&pf.removeChild(t),i},nf=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},of=function(r){return Te.call(r,function(t,e){return r.indexOf(t)==e})},mf.fragment=function(t,e,r){var i,n,a;return $e.test(t)&&(i=Pe(Ve.createElement(RegExp.$1))),i||(t.replace&&(t=t.replace(_e,"<$1>")),e===Ne&&(e=Ze.test(t)&&RegExp.$1),e in gf||(e="*"),(a=gf[e]).innerHTML=""+t,i=Pe.each(Ue.call(a.childNodes),function(){a.removeChild(this)})),xf(r)&&(n=Pe(i),Pe.each(r,function(t,e){-1)<[^<]*)*<\/script>/gi,Rk=/^(?:text|application)\/javascript/i,Sk=/^(?:text|application)\/xml/i,Tk="application/json",Uk="text/html",Vk=/^\s*$/,Wk=Nk.createElement("a");function Yk(t,e,r,i){if(t.global)return function(t,e,r){var i=Lk.Event(e);return Lk(t).trigger(i,r),!i.isDefaultPrevented()}(e||Nk,r,i)}function _k(t,e){var r=e.context;if(!1===e.beforeSend.call(r,t,e)||!1===Yk(e,r,"ajaxBeforeSend",[t,e]))return!1;Yk(e,r,"ajaxSend",[t,e])}function al(t,e,r,i){var n=r.context,a="success";r.success.call(n,t,a,e),i&&i.resolveWith(n,[t,a,e]),Yk(r,n,"ajaxSuccess",[e,r,t]),cl(a,e,r)}function bl(t,e,r,i,n){var a=i.context;i.error.call(a,r,e,t),n&&n.rejectWith(a,[r,e,t]),Yk(i,a,"ajaxError",[r,i,t||e]),cl(e,r,i)}function cl(t,e,r){var i=r.context;r.complete.call(i,e,t),Yk(r,i,"ajaxComplete",[e,r]),function(t){t.global&&!--Lk.active&&Yk(t,null,"ajaxStop")}(r)}function el(){}function gl(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function il(t,e,r,i){return Lk.isFunction(e)&&(i=r,r=e,e=void 0),Lk.isFunction(r)||(i=r,r=void 0),{url:t,data:e,success:r,dataType:i}}Wk.href=window.location.href,Lk.active=0,Lk.ajaxJSONP=function(r,i){if(!("type"in r))return Lk.ajax(r);function t(t){Lk(s).triggerHandler("error",t||"abort")}var n,a,e=r.jsonpCallback,o=(Lk.isFunction(e)?e():e)||"Zepto"+Mk++,s=Nk.createElement("script"),l=window[o],u={abort:t};return i&&i.promise(u),Lk(s).on("load error",function(t,e){clearTimeout(a),Lk(s).off().remove(),"error"!=t.type&&n?al(n[0],u,r,i):bl(null,e||"error",u,r,i),window[o]=l,n&&Lk.isFunction(l)&&l(n[0]),l=n=void 0}),!1===_k(u,r)?t("abort"):(window[o]=function(){n=arguments},s.src=r.url.replace(/\?(.+)=\?/,"?$1="+o),Nk.head.appendChild(s),0").html(t.replace(Qk,"")).find(i):t),s&&s.apply(n,arguments)},Lk.ajax(o),this};var jl=encodeURIComponent;Lk.param=function(t,e){var r=[];return r.add=function(t,e){Lk.isFunction(e)&&(e=e()),null==e&&(e=""),this.push(jl(t)+"="+jl(e))},function r(i,t,n,a){var o,s=Lk.isArray(t),l=Lk.isPlainObject(t);Lk.each(t,function(t,e){o=Lk.type(e),a&&(t=n?a:a+"["+(l||"object"==o||"array"==o?t:"")+"]"),!a&&s?i.add(e.name,e.value):"array"==o||!n&&"object"==o?r(i,e,n,t):i.add(t,e)})}(r,t,e),r.join("&").replace(/%20/g,"+")}}(Me),(cn=Me).Callbacks=function(i){i=cn.extend({},i);var e,r,n,a,o,s,l=[],u=!i.once&&[],d=function(t){for(e=i.memory&&t,r=!0,s=a||0,a=0,o=l.length,n=!0;l&&s/,Vq="Zepto"+ +new Date,Oq.qsa=function(a,o){return Wq(o,function(t,r,i){try{var e;!t&&r?t="*":Uq.test(t)&&(e=Nq(a).addClass(Vq),t="."+Vq+" "+t);var n=Pq(a,t)}catch(t){throw console.error("error performing selector: %o",o),t}finally{e&&e.removeClass(Vq)}return r?Oq.uniq(Nq.map(n,function(t,e){return r.call(t,e,n,i)})):n})},Oq.matches=function(i,t){return Wq(t,function(t,e,r){return(!t||Qq(i,t))&&(!e||e.call(i,null,r)===i)})},Ke.exports=Me},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});function n(t){return null===t?"":(""+t).replace(o,function(t){return a[t]})}function i(a,t){var e,r=new RegExp([(l.escape||u).source,(l.interpolate||u).source,(l.evaluate||u).source].join("|")+"|$","g"),o=0,s="__p+='";a.replace(r,function(t,e,r,i,n){return s+=a.slice(o,n).replace(c,function(t){return"\\"+d[t]}),e&&(s+="'+\n((__t=("+e+"))==null?'':escapeExpr(__t))+\n'"),r&&(s+="'+\n((__t=("+r+"))==null?'':__t)+\n'"),i&&(s+="';\n"+i+"\n__p+='"),o=n+t.length,t}),s+="';\n",l.variable||(s="with(obj||{}){\n"+s+"}\n"),s="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+s+"return __p;\n//# sourceURL=/microtemplates/source["+f+++"]";try{e=new Function(l.variable||"obj","escapeExpr",s)}catch(t){throw t.source=s,t}if(t)return e(t,n);function i(t){return e.call(this,t,n)}return i.source="function("+(l.variable||"obj")+"){\n"+s+"}",i}var l={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},u=/(.)^/,d={"'":"'","\\":"\\","\r":"r","\n":"n","\t":"t","\u2028":"u2028","\u2029":"u2029"},c=/\\|'|\r|\n|\t|\u2028|\u2029/g,a={"&":"&","<":"<",">":">",'"':""","'":"'"},o=new RegExp("[&<>\"']","g"),f=0;i.settings=l,e.default=i,t.exports=e.default},function(t,e){t.exports=function(r){var o=[];return o.toString=function(){return this.map(function(t){var e=function(t,e){var r=t[1]||"",i=t[3];if(!i)return r;if(e&&"function"==typeof btoa){var n=function(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}(i),a=i.sources.map(function(t){return"/*# sourceURL="+i.sourceRoot+t+" */"});return[r].concat(a).concat([n]).join("\n")}return[r].join("\n")}(t,r);return t[2]?"@media "+t[2]+"{"+e+"}":e}).join("")},o.i=function(t,e){"string"==typeof t&&(t=[[null,t,""]]);for(var r={},i=0;i=e.length?{value:void 0,done:!0}:(t=i(e,r),this._i+=t.length,{value:t,done:!1})})},function(t,e){t.exports=!0},function(t,e,i){function n(){}var a=i(21),o=i(114),s=i(51),l=i(49)("IE_PROTO"),u="prototype",d=function(){var t,e=i(66)("iframe"),r=s.length;for(e.style.display="none",i(115).appendChild(e),e.src="javascript:",(t=e.contentWindow.document).open(),t.write("\n * \n * ```\n * Now, create the player:\n * ```html\n * \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\nvar Player = function (_BaseObject) {\n (0, _inherits3.default)(Player, _BaseObject);\n (0, _createClass3.default)(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 _loader2.default(this.options.plugins || {}, this.options.playerId);\n\n return this._loader;\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.core.activeContainer.ended;\n }\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 /*\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 /**\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: _events2.default.PLAYER_READY,\n onResize: _events2.default.PLAYER_RESIZE,\n onPlay: _events2.default.PLAYER_PLAY,\n onPause: _events2.default.PLAYER_PAUSE,\n onStop: _events2.default.PLAYER_STOP,\n onEnded: _events2.default.PLAYER_ENDED,\n onSeek: _events2.default.PLAYER_SEEK,\n onError: _events2.default.PLAYER_ERROR,\n onTimeUpdate: _events2.default.PLAYER_TIMEUPDATE,\n onVolumeUpdate: _events2.default.PLAYER_VOLUMEUPDATE,\n onSubtitleAvailable: _events2.default.PLAYER_SUBTITLE_AVAILABLE\n };\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: <>, mimeType: <>}\n * @param {Object} [options.sources]\n * An array of media source URL's, or an array of {source: <>, mimeType: <>}\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 (0, _classCallCheck3.default)(this, Player);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, _BaseObject.call(this, options));\n\n var playbackDefaultOptions = { recycleVideo: true };\n var defaultOptions = {\n playerId: (0, _utils.uniqueId)(''),\n persistConfig: true,\n width: 640,\n height: 360,\n baseUrl: baseUrl,\n allowUserInteraction: _browser2.default.isMobile,\n playback: playbackDefaultOptions\n };\n _this._options = _clapprZepto2.default.extend(defaultOptions, options);\n _this.options.sources = _this._normalizeSources(options);\n if (!_this.options.chromeless) {\n // \"allowUserInteraction\" cannot be false if not in chromeless mode.\n _this.options.allowUserInteraction = true;\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 _this._registerOptionEventListeners(_this.options.events);\n _this._coreFactory = new _core_factory2.default(_this);\n _this.playerInfo = _player_info2.default.getInstance(_this.options.playerId);\n _this.playerInfo.currentSize = { width: options.width, height: options.height };\n _this.playerInfo.options = _this.options;\n if (_this.options.parentId) _this.setParentId(_this.options.parentId);else if (_this.options.parent) _this.attachTo(_this.options.parent);\n\n return _this;\n }\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 Player.prototype.setParentId = function setParentId(parentId) {\n var el = document.querySelector(parentId);\n if (el) this.attachTo(el);\n\n return this;\n };\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 Player.prototype.attachTo = function attachTo(element) {\n this.options.parentElement = element;\n this.core = this._coreFactory.create();\n this._addEventListeners();\n return this;\n };\n\n Player.prototype._addEventListeners = function _addEventListeners() {\n if (!this.core.isReady) this.listenToOnce(this.core, _events2.default.CORE_READY, this._onReady);else this._onReady();\n\n this.listenTo(this.core, _events2.default.CORE_ACTIVE_CONTAINER_CHANGED, this._containerChanged);\n this.listenTo(this.core, _events2.default.CORE_FULLSCREEN, this._onFullscreenChange);\n this.listenTo(this.core, _events2.default.CORE_RESIZE, this._onResize);\n return this;\n };\n\n Player.prototype._addContainerEventListeners = function _addContainerEventListeners() {\n var container = this.core.activeContainer;\n if (container) {\n this.listenTo(container, _events2.default.CONTAINER_PLAY, this._onPlay);\n this.listenTo(container, _events2.default.CONTAINER_PAUSE, this._onPause);\n this.listenTo(container, _events2.default.CONTAINER_STOP, this._onStop);\n this.listenTo(container, _events2.default.CONTAINER_ENDED, this._onEnded);\n this.listenTo(container, _events2.default.CONTAINER_SEEK, this._onSeek);\n this.listenTo(container, _events2.default.CONTAINER_ERROR, this._onError);\n this.listenTo(container, _events2.default.CONTAINER_TIMEUPDATE, this._onTimeUpdate);\n this.listenTo(container, _events2.default.CONTAINER_VOLUME, this._onVolumeUpdate);\n this.listenTo(container, _events2.default.CONTAINER_SUBTITLE_AVAILABLE, this._onSubtitleAvailable);\n }\n return this;\n };\n\n Player.prototype._registerOptionEventListeners = 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\n var hasNewEvents = (0, _keys2.default)(newEvents).length > 0;\n hasNewEvents && (0, _keys2.default)(events).forEach(function (userEvent) {\n var eventType = _this2.eventsMapping[userEvent];\n eventType && _this2.off(eventType, events[userEvent]);\n });\n\n (0, _keys2.default)(newEvents).forEach(function (userEvent) {\n var eventType = _this2.eventsMapping[userEvent];\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 Player.prototype._containerChanged = function _containerChanged() {\n this.stopListening();\n this._addEventListeners();\n };\n\n Player.prototype._onReady = function _onReady() {\n this._ready = true;\n this._addContainerEventListeners();\n this.trigger(_events2.default.PLAYER_READY);\n };\n\n Player.prototype._onFullscreenChange = function _onFullscreenChange(fullscreen) {\n this.trigger(_events2.default.PLAYER_FULLSCREEN, fullscreen);\n };\n\n Player.prototype._onVolumeUpdate = function _onVolumeUpdate(volume) {\n this.trigger(_events2.default.PLAYER_VOLUMEUPDATE, volume);\n };\n\n Player.prototype._onSubtitleAvailable = function _onSubtitleAvailable() {\n this.trigger(_events2.default.PLAYER_SUBTITLE_AVAILABLE);\n };\n\n Player.prototype._onResize = function _onResize(size) {\n this.trigger(_events2.default.PLAYER_RESIZE, size);\n };\n\n Player.prototype._onPlay = function _onPlay() {\n this.trigger(_events2.default.PLAYER_PLAY);\n };\n\n Player.prototype._onPause = function _onPause() {\n this.trigger(_events2.default.PLAYER_PAUSE);\n };\n\n Player.prototype._onStop = function _onStop() {\n this.trigger(_events2.default.PLAYER_STOP, this.getCurrentTime());\n };\n\n Player.prototype._onEnded = function _onEnded() {\n this.trigger(_events2.default.PLAYER_ENDED);\n };\n\n Player.prototype._onSeek = function _onSeek(time) {\n this.trigger(_events2.default.PLAYER_SEEK, time);\n };\n\n Player.prototype._onTimeUpdate = function _onTimeUpdate(timeProgress) {\n this.trigger(_events2.default.PLAYER_TIMEUPDATE, timeProgress);\n };\n\n Player.prototype._onError = function _onError(error) {\n this.trigger(_events2.default.PLAYER_ERROR, error);\n };\n\n Player.prototype._normalizeSources = function _normalizeSources(options) {\n var sources = options.sources || (options.source !== undefined ? [options.source] : []);\n return sources.length === 0 ? [{ source: '', mimeType: '' }] : sources;\n };\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 Player.prototype.resize = function resize(size) {\n this.core.resize(size);\n return this;\n };\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: <>, mimeType: <>}\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 Player.prototype.load = function load(sources, mimeType, autoPlay) {\n if (autoPlay !== undefined) this.configure({ autoPlay: !!autoPlay });\n\n this.core.load(sources, mimeType);\n return this;\n };\n\n /**\n * destroys the current player and removes it from the DOM.\n * @method destroy\n * @return {Player} itself\n */\n\n\n Player.prototype.destroy = function destroy() {\n this.stopListening();\n this.core.destroy();\n return this;\n };\n\n /**\n * Gives user consent to playback. Required by mobile device after a click event before Player.load().\n * @method consent\n * @return {Player} itself\n */\n\n\n Player.prototype.consent = function consent() {\n this.core.getCurrentPlayback().consent();\n return this;\n };\n\n /**\n * plays the current video (`source`).\n * @method play\n * @return {Player} itself\n */\n\n\n Player.prototype.play = function play() {\n this.core.activeContainer.play();\n return this;\n };\n\n /**\n * pauses the current video (`source`).\n * @method pause\n * @return {Player} itself\n */\n\n\n Player.prototype.pause = function pause() {\n this.core.activeContainer.pause();\n return this;\n };\n\n /**\n * stops the current video (`source`).\n * @method stop\n * @return {Player} itself\n */\n\n\n Player.prototype.stop = function stop() {\n this.core.activeContainer.stop();\n return this;\n };\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 Player.prototype.seek = function seek(time) {\n this.core.activeContainer.seek(time);\n return this;\n };\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 Player.prototype.seekPercentage = function seekPercentage(percentage) {\n this.core.activeContainer.seekPercentage(percentage);\n return this;\n };\n\n /**\n * mutes the current video (`source`).\n * @method mute\n * @return {Player} itself\n */\n\n\n Player.prototype.mute = function mute() {\n this._mutedVolume = this.getVolume();\n this.setVolume(0);\n return this;\n };\n\n /**\n * unmutes the current video (`source`).\n * @method unmute\n * @return {Player} itself\n */\n\n\n Player.prototype.unmute = function unmute() {\n this.setVolume(typeof this._mutedVolume === 'number' ? this._mutedVolume : 100);\n this._mutedVolume = null;\n return this;\n };\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 Player.prototype.isPlaying = function isPlaying() {\n return this.core.activeContainer.isPlaying();\n };\n\n /**\n * returns `true` if DVR is enable otherwise `false`.\n * @method isDvrEnabled\n * @return {Boolean}\n */\n\n\n Player.prototype.isDvrEnabled = function isDvrEnabled() {\n return this.core.activeContainer.isDvrEnabled();\n };\n\n /**\n * returns `true` if DVR is in use otherwise `false`.\n * @method isDvrInUse\n * @return {Boolean}\n */\n\n\n Player.prototype.isDvrInUse = function isDvrInUse() {\n return this.core.activeContainer.isDvrInUse();\n };\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 Player.prototype.configure = function configure() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._registerOptionEventListeners(options.events, this.options.events);\n this.core.configure(options);\n return this;\n };\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 Player.prototype.getPlugin = 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 /**\n * the current time in seconds.\n * @method getCurrentTime\n * @return {Number} current time (in seconds) of the current source\n */\n\n\n Player.prototype.getCurrentTime = function getCurrentTime() {\n return this.core.activeContainer.getCurrentTime();\n };\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 Player.prototype.getStartTimeOffset = function getStartTimeOffset() {\n return this.core.activeContainer.getStartTimeOffset();\n };\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 Player.prototype.getDuration = function getDuration() {\n return this.core.activeContainer.getDuration();\n };\n\n return Player;\n}(_base_object2.default);\n\nexports.default = Player;\n\n\n(0, _assign2.default)(Player.prototype, _error_mixin2.default);\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(105);\nmodule.exports = __webpack_require__(9).Object.assign;\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(16);\n\n$export($export.S + $export.F, 'Object', {assign: __webpack_require__(107)});\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(it){\n if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n return it;\n};\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = __webpack_require__(28)\n , gOPS = __webpack_require__(52)\n , pIE = __webpack_require__(37)\n , toObject = __webpack_require__(38)\n , IObject = __webpack_require__(69)\n , $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(27)(function(){\n var A = {}\n , B = {}\n , S = Symbol()\n , K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function(k){ B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n var T = toObject(target)\n , aLen = arguments.length\n , index = 1\n , getSymbols = gOPS.f\n , isEnum = pIE.f;\n while(aLen > index){\n var S = IObject(arguments[index++])\n , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n , length = keys.length\n , j = 0\n , key;\n while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n } return T;\n} : $assign;\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(19)\n , toLength = __webpack_require__(70)\n , toIndex = __webpack_require__(109);\nmodule.exports = function(IS_INCLUDES){\n return function($this, el, fromIndex){\n var O = toIObject($this)\n , length = toLength(O.length)\n , index = toIndex(fromIndex, length)\n , value;\n // Array#includes uses SameValueZero equality algorithm\n if(IS_INCLUDES && el != el)while(length > index){\n value = O[index++];\n if(value != value)return true;\n // Array#toIndex ignores holes, Array#includes - not\n } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n if(O[index] === el)return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(48)\n , max = Math.max\n , min = Math.min;\nmodule.exports = function(index, length){\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n/***/ }),\n/* 110 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(111);\nmodule.exports = __webpack_require__(9).Object.keys;\n\n/***/ }),\n/* 111 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(38)\n , $keys = __webpack_require__(28);\n\n__webpack_require__(71)('keys', function(){\n return function keys(it){\n return $keys(toObject(it));\n };\n});\n\n/***/ }),\n/* 112 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(113), __esModule: true };\n\n/***/ }),\n/* 113 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(54);\n__webpack_require__(74);\nmodule.exports = __webpack_require__(58).f('iterator');\n\n/***/ }),\n/* 114 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(48)\n , defined = __webpack_require__(47);\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n return function(that, pos){\n var s = String(defined(that))\n , i = toInteger(pos)\n , l = s.length\n , a, b;\n if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n\n/***/ }),\n/* 115 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar create = __webpack_require__(56)\n , descriptor = __webpack_require__(33)\n , setToStringTag = __webpack_require__(57)\n , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(26)(IteratorPrototype, __webpack_require__(13)('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n/***/ }),\n/* 116 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(18)\n , anObject = __webpack_require__(21)\n , getKeys = __webpack_require__(28);\n\nmodule.exports = __webpack_require__(22) ? Object.defineProperties : function defineProperties(O, Properties){\n anObject(O);\n var keys = getKeys(Properties)\n , length = keys.length\n , i = 0\n , P;\n while(length > i)dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n\n/***/ }),\n/* 117 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(17).document && document.documentElement;\n\n/***/ }),\n/* 118 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(23)\n , toObject = __webpack_require__(38)\n , IE_PROTO = __webpack_require__(49)('IE_PROTO')\n , ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function(O){\n O = toObject(O);\n if(has(O, IE_PROTO))return O[IE_PROTO];\n if(typeof O.constructor == 'function' && O instanceof O.constructor){\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n\n/***/ }),\n/* 119 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar addToUnscopables = __webpack_require__(120)\n , step = __webpack_require__(121)\n , Iterators = __webpack_require__(34)\n , toIObject = __webpack_require__(19);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(72)(Array, 'Array', function(iterated, kind){\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n var O = this._t\n , kind = this._k\n , index = this._i++;\n if(!O || index >= O.length){\n this._t = undefined;\n return step(1);\n }\n if(kind == 'keys' )return step(0, index);\n if(kind == 'values')return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n/***/ }),\n/* 120 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(){ /* empty */ };\n\n/***/ }),\n/* 121 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(done, value){\n return {value: value, done: !!done};\n};\n\n/***/ }),\n/* 122 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(123), __esModule: true };\n\n/***/ }),\n/* 123 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(124);\n__webpack_require__(130);\n__webpack_require__(131);\n__webpack_require__(132);\nmodule.exports = __webpack_require__(9).Symbol;\n\n/***/ }),\n/* 124 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(17)\n , has = __webpack_require__(23)\n , DESCRIPTORS = __webpack_require__(22)\n , $export = __webpack_require__(16)\n , redefine = __webpack_require__(73)\n , META = __webpack_require__(125).KEY\n , $fails = __webpack_require__(27)\n , shared = __webpack_require__(50)\n , setToStringTag = __webpack_require__(57)\n , uid = __webpack_require__(36)\n , wks = __webpack_require__(13)\n , wksExt = __webpack_require__(58)\n , wksDefine = __webpack_require__(59)\n , keyOf = __webpack_require__(126)\n , enumKeys = __webpack_require__(127)\n , isArray = __webpack_require__(128)\n , anObject = __webpack_require__(21)\n , toIObject = __webpack_require__(19)\n , toPrimitive = __webpack_require__(45)\n , createDesc = __webpack_require__(33)\n , _create = __webpack_require__(56)\n , gOPNExt = __webpack_require__(129)\n , $GOPD = __webpack_require__(60)\n , $DP = __webpack_require__(18)\n , $keys = __webpack_require__(28)\n , gOPD = $GOPD.f\n , dP = $DP.f\n , gOPN = gOPNExt.f\n , $Symbol = global.Symbol\n , $JSON = global.JSON\n , _stringify = $JSON && $JSON.stringify\n , PROTOTYPE = 'prototype'\n , HIDDEN = wks('_hidden')\n , TO_PRIMITIVE = wks('toPrimitive')\n , isEnum = {}.propertyIsEnumerable\n , SymbolRegistry = shared('symbol-registry')\n , AllSymbols = shared('symbols')\n , OPSymbols = shared('op-symbols')\n , ObjectProto = Object[PROTOTYPE]\n , USE_NATIVE = typeof $Symbol == 'function'\n , QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function(){\n return _create(dP({}, 'a', {\n get: function(){ return dP(this, 'a', {value: 7}).a; }\n })).a != 7;\n}) ? function(it, key, D){\n var protoDesc = gOPD(ObjectProto, key);\n if(protoDesc)delete ObjectProto[key];\n dP(it, key, D);\n if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function(tag){\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){\n return typeof it == 'symbol';\n} : function(it){\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D){\n if(it === ObjectProto)$defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if(has(AllSymbols, key)){\n if(!D.enumerable){\n if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\n D = _create(D, {enumerable: createDesc(0, false)});\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P){\n anObject(it);\n var keys = enumKeys(P = toIObject(P))\n , i = 0\n , l = keys.length\n , key;\n while(l > i)$defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P){\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key){\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\n it = toIObject(it);\n key = toPrimitive(key, true);\n if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;\n var D = gOPD(it, key);\n if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it){\n var names = gOPN(toIObject(it))\n , result = []\n , i = 0\n , key;\n while(names.length > i){\n if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\n var IS_OP = it === ObjectProto\n , names = gOPN(IS_OP ? OPSymbols : toIObject(it))\n , result = []\n , i = 0\n , key;\n while(names.length > i){\n if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif(!USE_NATIVE){\n $Symbol = function Symbol(){\n if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function(value){\n if(this === ObjectProto)$set.call(OPSymbols, value);\n if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString(){\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(75).f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(37).f = $propertyIsEnumerable;\n __webpack_require__(52).f = $getOwnPropertySymbols;\n\n if(DESCRIPTORS && !__webpack_require__(55)){\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function(name){\n return wrap(wks(name));\n }\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});\n\nfor(var symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);\n\nfor(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function(key){\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(key){\n if(isSymbol(key))return keyOf(SymbolRegistry, key);\n throw TypeError(key + ' is not a symbol!');\n },\n useSetter: function(){ setter = true; },\n useSimple: function(){ setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it){\n if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\n var args = [it]\n , i = 1\n , replacer, $replacer;\n while(arguments.length > i)args.push(arguments[i++]);\n replacer = args[1];\n if(typeof replacer == 'function')$replacer = replacer;\n if($replacer || !isArray(replacer))replacer = function(key, value){\n if($replacer)value = $replacer.call(this, key, value);\n if(!isSymbol(value))return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(26)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n/***/ }),\n/* 125 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar META = __webpack_require__(36)('meta')\n , isObject = __webpack_require__(32)\n , has = __webpack_require__(23)\n , setDesc = __webpack_require__(18).f\n , id = 0;\nvar isExtensible = Object.isExtensible || function(){\n return true;\n};\nvar FREEZE = !__webpack_require__(27)(function(){\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function(it){\n setDesc(it, META, {value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n }});\n};\nvar fastKey = function(it, create){\n // return primitive with prefix\n if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if(!has(it, META)){\n // can't set metadata to uncaught frozen object\n if(!isExtensible(it))return 'F';\n // not necessary to add metadata\n if(!create)return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function(it, create){\n if(!has(it, META)){\n // can't set metadata to uncaught frozen object\n if(!isExtensible(it))return true;\n // not necessary to add metadata\n if(!create)return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function(it){\n if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n\n/***/ }),\n/* 126 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar getKeys = __webpack_require__(28)\n , toIObject = __webpack_require__(19);\nmodule.exports = function(object, el){\n var O = toIObject(object)\n , keys = getKeys(O)\n , length = keys.length\n , index = 0\n , key;\n while(length > index)if(O[key = keys[index++]] === el)return key;\n};\n\n/***/ }),\n/* 127 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(28)\n , gOPS = __webpack_require__(52)\n , pIE = __webpack_require__(37);\nmodule.exports = function(it){\n var result = getKeys(it)\n , getSymbols = gOPS.f;\n if(getSymbols){\n var symbols = getSymbols(it)\n , isEnum = pIE.f\n , i = 0\n , key;\n while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);\n } return result;\n};\n\n/***/ }),\n/* 128 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(46);\nmodule.exports = Array.isArray || function isArray(arg){\n return cof(arg) == 'Array';\n};\n\n/***/ }),\n/* 129 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(19)\n , gOPN = __webpack_require__(75).f\n , toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function(it){\n try {\n return gOPN(it);\n } catch(e){\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it){\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n/***/ }),\n/* 130 */\n/***/ (function(module, exports) {\n\n\n\n/***/ }),\n/* 131 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(59)('asyncIterator');\n\n/***/ }),\n/* 132 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(59)('observable');\n\n/***/ }),\n/* 133 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(134);\nvar $Object = __webpack_require__(9).Object;\nmodule.exports = function defineProperty(it, key, desc){\n return $Object.defineProperty(it, key, desc);\n};\n\n/***/ }),\n/* 134 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(16);\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(22), 'Object', {defineProperty: __webpack_require__(18).f});\n\n/***/ }),\n/* 135 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(136), __esModule: true };\n\n/***/ }),\n/* 136 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(137);\nmodule.exports = __webpack_require__(9).Object.setPrototypeOf;\n\n/***/ }),\n/* 137 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(16);\n$export($export.S, 'Object', {setPrototypeOf: __webpack_require__(138).set});\n\n/***/ }),\n/* 138 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(32)\n , anObject = __webpack_require__(21);\nvar check = function(O, proto){\n anObject(O);\n if(!isObject(proto) && proto !== null)throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function(test, buggy, set){\n try {\n set = __webpack_require__(44)(Function.call, __webpack_require__(60).f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch(e){ buggy = true; }\n return function setPrototypeOf(O, proto){\n check(O, proto);\n if(buggy)O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n\n/***/ }),\n/* 139 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(140);\nvar $Object = __webpack_require__(9).Object;\nmodule.exports = function create(P, D){\n return $Object.create(P, D);\n};\n\n/***/ }),\n/* 140 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(16)\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', {create: __webpack_require__(56)});\n\n/***/ }),\n/* 141 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(142), __esModule: true };\n\n/***/ }),\n/* 142 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(143);\nvar $Object = __webpack_require__(9).Object;\nmodule.exports = function getOwnPropertyDescriptor(it, key){\n return $Object.getOwnPropertyDescriptor(it, key);\n};\n\n/***/ }),\n/* 143 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = __webpack_require__(19)\n , $getOwnPropertyDescriptor = __webpack_require__(60).f;\n\n__webpack_require__(71)('getOwnPropertyDescriptor', function(){\n return function getOwnPropertyDescriptor(it, key){\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n\n/***/ }),\n/* 144 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\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/**\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\n var o = Object(this);\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n if (typeof predicate !== 'function') throw new TypeError('predicate must be a function');\n\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n var thisArg = arguments[1];\n\n // 5. Let k be 0.\n var k = 0;\n\n // 6. Repeat, while k < len\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;\n\n // e. Increase k by 1.\n k++;\n }\n\n // 7. Return undefined.\n return undefined;\n }\n });\n}\n\n/***/ }),\n/* 145 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getDevice = exports.getViewportSize = exports.getOsData = exports.getBrowserData = exports.getBrowserInfo = undefined;\n\nvar _getIterator2 = __webpack_require__(146);\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nvar _clapprZepto = __webpack_require__(6);\n\nvar _clapprZepto2 = _interopRequireDefault(_clapprZepto);\n\nvar _browser_data = __webpack_require__(150);\n\nvar _browser_data2 = _interopRequireDefault(_browser_data);\n\nvar _os_data = __webpack_require__(151);\n\nvar _os_data2 = _interopRequireDefault(_os_data);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\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 = exports.getBrowserInfo = function getBrowserInfo(ua) {\n var parts = ua.match(/\\b(playstation 4|nx|opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [],\n extra = void 0;\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 { name: 'Opera', version: parseInt(extra[1]) };\n\n extra = ua.match(/\\bEdge\\/(\\d+)/);\n if (extra != null) return { name: 'Edge', version: parseInt(extra[1]) };\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 parts = parts[2] ? [parts[1], parts[2]] : [navigator.appName, navigator.appVersion, '-?'];\n\n return {\n name: parts[0],\n version: parseInt(parts[1])\n };\n};\n\n// Get browser data\nvar getBrowserData = exports.getBrowserData = function getBrowserData() {\n var browserObject = {};\n var userAgent = Browser.userAgent.toLowerCase();\n\n // Check browser type\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = (0, _getIterator3.default)(_browser_data2.default), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var browser = _step.value;\n\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;\n\n // Check version\n if (browser.versionIdentifier) {\n var versionRegExp = new RegExp(browser.versionIdentifier.toLowerCase());\n var versionRegExpResult = versionRegExp.exec(userAgent);\n\n if (versionRegExpResult != null && versionRegExpResult[1]) setBrowserVersion(versionRegExpResult[1], browserObject);\n } else {\n setBrowserVersion(browserRegExpResult[1], browserObject);\n }\n break;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return browserObject;\n};\n\n// Set browser version\nvar setBrowserVersion = function setBrowserVersion(version, browserObject) {\n var splitVersion = version.split('.', 2);\n browserObject.fullVersion = version;\n\n // Major version\n if (splitVersion[0]) browserObject.majorVersion = parseInt(splitVersion[0]);\n\n // Minor version\n if (splitVersion[1]) browserObject.minorVersion = parseInt(splitVersion[1]);\n};\n\n// Get OS data\nvar getOsData = exports.getOsData = function getOsData() {\n var osObject = {};\n var userAgent = Browser.userAgent.toLowerCase();\n\n // Check browser type\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = (0, _getIterator3.default)(_os_data2.default), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var os = _step2.value;\n\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;\n\n // Version defined\n if (os.version) {\n setOsVersion(os.version, os.versionSeparator ? os.versionSeparator : '.', osObject);\n\n // Version detected\n } else if (osRegExpResult[1]) {\n setOsVersion(osRegExpResult[1], os.versionSeparator ? os.versionSeparator : '.', osObject);\n\n // Version identifier\n } else if (os.versionIdentifier) {\n var versionRegExp = new RegExp(os.versionIdentifier.toLowerCase());\n var versionRegExpResult = versionRegExp.exec(userAgent);\n\n if (versionRegExpResult != null && versionRegExpResult[1]) setOsVersion(versionRegExpResult[1], os.versionSeparator ? os.versionSeparator : '.', osObject);\n }\n break;\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return osObject;\n};\n\n// Set OS version\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\n if (separator != '.') version = version.replace(new RegExp(separator, 'g'), '.');\n\n osObject.fullVersion = version;\n\n // Major version\n if (splitVersion && splitVersion[0]) osObject.majorVersion = parseInt(splitVersion[0]);\n\n // Minor version\n if (splitVersion && splitVersion[1]) osObject.minorVersion = parseInt(splitVersion[1]);\n};\n\n// Set viewport size\nvar getViewportSize = exports.getViewportSize = function getViewportSize() {\n var viewportObject = {};\n\n viewportObject.width = (0, _clapprZepto2.default)(window).width();\n viewportObject.height = (0, _clapprZepto2.default)(window).height();\n\n return viewportObject;\n};\n\n// Set viewport orientation\nvar setViewportOrientation = function setViewportOrientation() {\n switch (window.orientation) {\n case -90:\n case 90:\n Browser.viewport.orientation = 'landscape';\n break;\n default:\n Browser.viewport.orientation = 'portrait';\n break;\n }\n};\n\nvar getDevice = exports.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};\n\nvar browserInfo = getBrowserInfo(navigator.userAgent);\n\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/**\n* @deprecated\n* This parameter currently exists for retrocompatibility reasons.\n* Use Browser.data.name instead.\n*/\nBrowser.name = browserInfo.name;\n\n/**\n* @deprecated\n* This parameter currently exists for retrocompatibility reasons.\n* Use Browser.data.fullVersion instead.\n*/\nBrowser.version = browserInfo.version;\n\nBrowser.userAgent = navigator.userAgent;\nBrowser.data = getBrowserData();\nBrowser.os = getOsData();\nBrowser.viewport = getViewportSize();\nBrowser.device = getDevice(Browser.userAgent);\ntypeof window.orientation !== 'undefined' && setViewportOrientation();\n\nexports.default = Browser;\n\n/***/ }),\n/* 146 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(147), __esModule: true };\n\n/***/ }),\n/* 147 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(74);\n__webpack_require__(54);\nmodule.exports = __webpack_require__(148);\n\n/***/ }),\n/* 148 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(21)\n , get = __webpack_require__(78);\nmodule.exports = __webpack_require__(9).getIterator = function(it){\n var iterFn = get(it);\n if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');\n return anObject(iterFn.call(it));\n};\n\n/***/ }),\n/* 149 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(46)\n , TAG = __webpack_require__(13)('toStringTag')\n // ES3 wrong here\n , ARG = cof(function(){ return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function(it, key){\n try {\n return it[key];\n } catch(e){ /* empty */ }\n};\n\nmodule.exports = function(it){\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n/***/ }),\n/* 150 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/* eslint-disable no-useless-escape */\n// The order of the following arrays is important, be careful if you change it.\n\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\nexports.default = BROWSER_DATA;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 151 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/* eslint-disable no-useless-escape */\n// The order of the following arrays is important, be careful if you change it.\n\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\nexports.default = OS_DATA;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 152 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// https://github.com/mathiasbynens/small\nvar mp4 = exports.mp4 = 'data:video/mp4;base64,AAAAHGZ0eXBpc29tAAACAGlzb21pc28ybXA0MQAAAAhmcmVlAAAC721kYXQhEAUgpBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcCEQBSCkG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAsJtb292AAAAbG12aGQAAAAAAAAAAAAAAAAAAAPoAAAALwABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAB7HRyYWsAAABcdGtoZAAAAAMAAAAAAAAAAAAAAAIAAAAAAAAALwAAAAAAAAAAAAAAAQEAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAAC8AAAAAAAEAAAAAAWRtZGlhAAAAIG1kaGQAAAAAAAAAAAAAAAAAAKxEAAAIAFXEAAAAAAAtaGRscgAAAAAAAAAAc291bgAAAAAAAAAAAAAAAFNvdW5kSGFuZGxlcgAAAAEPbWluZgAAABBzbWhkAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAADTc3RibAAAAGdzdHNkAAAAAAAAAAEAAABXbXA0YQAAAAAAAAABAAAAAAAAAAAAAgAQAAAAAKxEAAAAAAAzZXNkcwAAAAADgICAIgACAASAgIAUQBUAAAAAAfQAAAHz+QWAgIACEhAGgICAAQIAAAAYc3R0cwAAAAAAAAABAAAAAgAABAAAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAIAAAABAAAAHHN0c3oAAAAAAAAAAAAAAAIAAAFzAAABdAAAABRzdGNvAAAAAAAAAAEAAAAsAAAAYnVkdGEAAABabWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWRpcmFwcGwAAAAAAAAAAAAAAAAtaWxzdAAAACWpdG9vAAAAHWRhdGEAAAABAAAAAExhdmY1Ni40MC4xMDE=';\n\nexports.default = {\n mp4: mp4\n};\n\n/***/ }),\n/* 153 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _classCallCheck2 = __webpack_require__(0);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _vendor = __webpack_require__(61);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar BOLD = 'font-weight: bold; font-size: 13px;';\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\nvar INFO = 'color: #006600;' + BOLD;\nvar DEBUG = 'color: #0000ff;' + BOLD;\nvar WARN = 'color: #ff8000;' + BOLD;\nvar ERROR = 'color: #ff0000;' + BOLD;\n\nvar LEVEL_DEBUG = 0;\nvar LEVEL_INFO = 1;\nvar LEVEL_WARN = 2;\nvar LEVEL_ERROR = 3;\nvar LEVEL_DISABLED = LEVEL_ERROR;\n\nvar COLORS = [DEBUG, INFO, WARN, ERROR, ERROR];\nvar DESCRIPTIONS = ['debug', 'info', 'warn', 'error', 'disabled'];\n\nvar Log = function () {\n function Log() {\n var _this = this;\n\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 (0, _classCallCheck3.default)(this, Log);\n\n this.kibo = new _vendor.Kibo();\n this.kibo.down(['ctrl shift d'], function () {\n return _this.onOff();\n });\n this.BLACKLIST = ['timeupdate', 'playback:timeupdate', 'playback:progress', 'container:hover', 'container:timeupdate', 'container:progress'];\n this.level = level;\n this.offLevel = offLevel;\n }\n\n Log.prototype.debug = function debug(klass) {\n this.log(klass, LEVEL_DEBUG, Array.prototype.slice.call(arguments, 1));\n };\n\n Log.prototype.info = function info(klass) {\n this.log(klass, LEVEL_INFO, Array.prototype.slice.call(arguments, 1));\n };\n\n Log.prototype.warn = function warn(klass) {\n this.log(klass, LEVEL_WARN, Array.prototype.slice.call(arguments, 1));\n };\n\n Log.prototype.error = function error(klass) {\n this.log(klass, LEVEL_ERROR, Array.prototype.slice.call(arguments, 1));\n };\n\n Log.prototype.onOff = 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 }\n // handle instances where console.log is unavailable\n if (window.console && window.console.log) window.console.log('%c[Clappr.Log] set log level to ' + DESCRIPTIONS[this.level], WARN);\n };\n\n Log.prototype.level = function level(newLevel) {\n this.level = newLevel;\n };\n\n Log.prototype.log = function log(klass, level, message) {\n if (this.BLACKLIST.indexOf(message[0]) >= 0) return;\n if (level < this.level) return;\n\n if (!message) {\n message = klass;\n klass = null;\n }\n var color = COLORS[level];\n var klassDescription = '';\n if (klass) klassDescription = '[' + klass + ']';\n\n if (window.console && window.console.log) window.console.log.apply(console, ['%c[' + DESCRIPTIONS[level] + ']' + klassDescription, color].concat(message));\n };\n\n return Log;\n}();\n\nexports.default = Log;\n\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) {\n this._instance = new this();\n this._instance.previousLevel = this._instance.level;\n this._instance.level = this._instance.offLevel;\n }\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};\nLog.info = function () {\n this.getInstance().info.apply(this.getInstance(), arguments);\n};\nLog.warn = function () {\n this.getInstance().warn.apply(this.getInstance(), arguments);\n};\nLog.error = function () {\n this.getInstance().error.apply(this.getInstance(), arguments);\n};\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 154 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/* eslint-disable */\n// Kibo is released under the MIT License. Copyright (c) 2013 marquete.\n// see https://github.com/marquete/kibo\n\nvar Kibo = function Kibo(element) {\n this.element = element || window.document;\n this.initialize();\n};\n\nKibo.KEY_NAMES_BY_CODE = {\n 8: 'backspace', 9: 'tab', 13: 'enter',\n 16: 'shift', 17: 'ctrl', 18: 'alt',\n 20: 'caps_lock',\n 27: 'esc',\n 32: 'space',\n 37: 'left', 38: 'up', 39: 'right', 40: 'down',\n 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5', 54: '6', 55: '7', 56: '8', 57: '9',\n 65: 'a', 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h', 73: 'i', 74: 'j',\n 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o', 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't',\n 85: 'u', 86: 'v', 87: 'w', 88: 'x', 89: 'y', 90: 'z', 112: 'f1', 113: 'f2', 114: 'f3',\n 115: 'f4', 116: 'f5', 117: 'f6', 118: 'f7', 119: 'f8', 120: 'f9', 121: 'f10', 122: 'f11', 123: 'f12'\n};\n\nKibo.KEY_CODES_BY_NAME = {};\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 return false;\n };\n }\n}();\n\nKibo.extractModifiers = function (keyCombination) {\n var modifiers, i;\n modifiers = [];\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 return modifiers;\n};\n\nKibo.extractKey = function (keyCombination) {\n var keys, i;\n keys = Kibo.neatString(keyCombination).split(' ');\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\n key = Kibo.extractKey(keyCombination);\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\n this.lastKeyCode = -1;\n this.lastModifiers = {};\n for (i = 0; i < Kibo.MODIFIERS.length; i++) {\n this.lastModifiers[Kibo.MODIFIERS[i]] = false;\n }\n\n this.keysDown = { any: [] };\n this.keysUp = { any: [] };\n this.downHandler = this.handler('down');\n this.upHandler = this.handler('up');\n\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\n e = e || window.event;\n\n that.lastKeyCode = e.keyCode;\n for (i = 0; i < Kibo.MODIFIERS.length; i++) {\n that.lastModifiers[Kibo.MODIFIERS[i]] = e[Kibo.MODIFIERS[i] + 'Key'];\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 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};\n\n// jshint maxdepth:5\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\n result = [];\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\nexports.default = Kibo;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 155 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _core_factory = __webpack_require__(156);\n\nvar _core_factory2 = _interopRequireDefault(_core_factory);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _core_factory2.default;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 156 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _classCallCheck2 = __webpack_require__(0);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _possibleConstructorReturn2 = __webpack_require__(1);\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _createClass2 = __webpack_require__(3);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _inherits2 = __webpack_require__(2);\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _base_object = __webpack_require__(15);\n\nvar _base_object2 = _interopRequireDefault(_base_object);\n\nvar _core = __webpack_require__(79);\n\nvar _core2 = _interopRequireDefault(_core);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\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// 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\nvar CoreFactory = function (_BaseObject) {\n (0, _inherits3.default)(CoreFactory, _BaseObject);\n (0, _createClass3.default)(CoreFactory, [{\n key: 'loader',\n get: function get() {\n return this.player.loader;\n }\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 (0, _classCallCheck3.default)(this, CoreFactory);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, _BaseObject.call(this));\n\n _this.player = player;\n _this._options = player.options;\n return _this;\n }\n\n /**\n * creates a core and its plugins\n * @method create\n * @return {Core} created core\n */\n\n\n CoreFactory.prototype.create = function create() {\n this.options.loader = this.loader;\n this.core = new _core2.default(this.options);\n this.addCorePlugins();\n this.core.createContainers(this.options);\n return this.core;\n };\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 CoreFactory.prototype.addCorePlugins = function addCorePlugins() {\n var _this2 = this;\n\n this.loader.corePlugins.forEach(function (Plugin) {\n var plugin = new Plugin(_this2.core);\n _this2.core.addPlugin(plugin);\n _this2.setupExternalInterface(plugin);\n });\n return this.core;\n };\n\n CoreFactory.prototype.setupExternalInterface = function setupExternalInterface(plugin) {\n var externalFunctions = plugin.getExternalInterface();\n for (var key in externalFunctions) {\n this.player[key] = externalFunctions[key].bind(plugin);\n this.core[key] = externalFunctions[key].bind(plugin);\n }\n };\n\n return CoreFactory;\n}(_base_object2.default);\n\nexports.default = CoreFactory;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 157 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _assign = __webpack_require__(12);\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _classCallCheck2 = __webpack_require__(0);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _possibleConstructorReturn2 = __webpack_require__(1);\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _createClass2 = __webpack_require__(3);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _inherits2 = __webpack_require__(2);\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _utils = __webpack_require__(5);\n\nvar _styler = __webpack_require__(80);\n\nvar _styler2 = _interopRequireDefault(_styler);\n\nvar _events = __webpack_require__(4);\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _ui_object = __webpack_require__(30);\n\nvar _ui_object2 = _interopRequireDefault(_ui_object);\n\nvar _ui_core_plugin = __webpack_require__(24);\n\nvar _ui_core_plugin2 = _interopRequireDefault(_ui_core_plugin);\n\nvar _browser = __webpack_require__(14);\n\nvar _browser2 = _interopRequireDefault(_browser);\n\nvar _container_factory = __webpack_require__(158);\n\nvar _container_factory2 = _interopRequireDefault(_container_factory);\n\nvar _mediator = __webpack_require__(31);\n\nvar _mediator2 = _interopRequireDefault(_mediator);\n\nvar _player_info = __webpack_require__(40);\n\nvar _player_info2 = _interopRequireDefault(_player_info);\n\nvar _error = __webpack_require__(25);\n\nvar _error2 = _interopRequireDefault(_error);\n\nvar _error_mixin = __webpack_require__(20);\n\nvar _error_mixin2 = _interopRequireDefault(_error_mixin);\n\nvar _clapprZepto = __webpack_require__(6);\n\nvar _clapprZepto2 = _interopRequireDefault(_clapprZepto);\n\n__webpack_require__(164);\n\nvar _fonts = __webpack_require__(166);\n\nvar _fonts2 = _interopRequireDefault(_fonts);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\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\nvar style = void 0;\n\n/**\n * The Core is responsible to manage Containers, the mediator, MediaControl\n * and the player state.\n * @class Core\n * @constructor\n * @extends UIObject\n * @module components\n */\n\nvar Core = function (_UIObject) {\n (0, _inherits3.default)(Core, _UIObject);\n (0, _createClass3.default)(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 /**\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 /**\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') || { t: function t(key) {\n return key;\n } };\n }\n\n /**\n * @deprecated\n * This property currently exists for retrocompatibility reasons.\n * If you want to access the media control instance, use the method getPlugin('media_control').\n */\n\n }, {\n key: 'mediaControl',\n get: function get() {\n return 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 _ui_core_plugin2.default(this);\n return this._dummyMediaControl;\n }\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 /**\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(_events2.default.CORE_ACTIVE_CONTAINER_CHANGED, this._activeContainer);\n }\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 (0, _classCallCheck3.default)(this, Core);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, _UIObject.call(this, options));\n\n _this.playerError = new _error2.default(options, _this);\n _this.configureDomRecycler();\n _this.playerInfo = _player_info2.default.getInstance(options.playerId);\n _this.firstResize = true;\n _this.plugins = [];\n _this.containers = [];\n //FIXME fullscreen api sucks\n _this._boundFullscreenHandler = function () {\n return _this.handleFullscreenChange();\n };\n (0, _clapprZepto2.default)(document).bind('fullscreenchange', _this._boundFullscreenHandler);\n (0, _clapprZepto2.default)(document).bind('MSFullscreenChange', _this._boundFullscreenHandler);\n (0, _clapprZepto2.default)(document).bind('mozfullscreenchange', _this._boundFullscreenHandler);\n _browser2.default.isMobile && (0, _clapprZepto2.default)(window).bind('resize', function (o) {\n _this.handleWindowResize(o);\n });\n return _this;\n }\n\n Core.prototype.configureDomRecycler = function configureDomRecycler() {\n var recycleVideo = this.options && this.options.playback && this.options.playback.recycleVideo;\n _utils.DomRecycler.configure({ recycleVideo: recycleVideo });\n };\n\n Core.prototype.createContainers = function createContainers(options) {\n this.defer = _clapprZepto2.default.Deferred();\n this.defer.promise(this);\n this.containerFactory = new _container_factory2.default(options, options.loader, this.i18n, this.playerError);\n this.prepareContainers();\n };\n\n Core.prototype.prepareContainers = 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 Core.prototype.updateSize = function updateSize() {\n _utils.Fullscreen.isFullscreen() ? this.setFullscreen() : this.setPlayerSize();\n };\n\n Core.prototype.setFullscreen = function setFullscreen() {\n if (!_browser2.default.isiOS) {\n this.$el.addClass('fullscreen');\n this.$el.removeAttr('style');\n this.playerInfo.previousSize = { width: this.options.width, height: this.options.height };\n this.playerInfo.currentSize = { width: (0, _clapprZepto2.default)(window).width(), height: (0, _clapprZepto2.default)(window).height() };\n }\n };\n\n Core.prototype.setPlayerSize = function setPlayerSize() {\n this.$el.removeClass('fullscreen');\n this.playerInfo.currentSize = this.playerInfo.previousSize;\n this.playerInfo.previousSize = { width: (0, _clapprZepto2.default)(window).width(), height: (0, _clapprZepto2.default)(window).height() };\n this.resize(this.playerInfo.currentSize);\n };\n\n Core.prototype.resize = function resize(options) {\n if (!(0, _utils.isNumber)(options.height) && !(0, _utils.isNumber)(options.width)) {\n this.el.style.height = '' + options.height;\n this.el.style.width = '' + options.width;\n } else {\n this.el.style.height = options.height + 'px';\n this.el.style.width = options.width + 'px';\n }\n this.playerInfo.previousSize = { width: this.options.width, height: this.options.height };\n this.options.width = options.width;\n this.options.height = options.height;\n this.playerInfo.currentSize = options;\n this.triggerResize(this.playerInfo.currentSize);\n };\n\n Core.prototype.enableResizeObserver = function enableResizeObserver() {\n var _this3 = this;\n\n var checkSizeCallback = function checkSizeCallback() {\n _this3.triggerResize({ width: _this3.el.clientWidth, height: _this3.el.clientHeight });\n };\n this.resizeObserverInterval = setInterval(checkSizeCallback, 500);\n };\n\n Core.prototype.triggerResize = function triggerResize(newSize) {\n var thereWasChange = this.firstResize || this.oldHeight !== newSize.height || this.oldWidth !== newSize.width;\n if (thereWasChange) {\n this.oldHeight = newSize.height;\n this.oldWidth = newSize.width;\n this.playerInfo.computedSize = newSize;\n this.firstResize = false;\n _mediator2.default.trigger(this.options.playerId + ':' + _events2.default.PLAYER_RESIZE, newSize);\n this.trigger(_events2.default.CORE_RESIZE, newSize);\n }\n };\n\n Core.prototype.disableResizeObserver = function disableResizeObserver() {\n this.resizeObserverInterval && clearInterval(this.resizeObserverInterval);\n };\n\n Core.prototype.resolveOnContainersReady = function resolveOnContainersReady(containers) {\n var _this4 = this;\n\n _clapprZepto2.default.when.apply(_clapprZepto2.default, containers).done(function () {\n _this4.defer.resolve(_this4);\n _this4.ready = true;\n _this4.trigger(_events2.default.CORE_READY);\n });\n };\n\n Core.prototype.addPlugin = function addPlugin(plugin) {\n this.plugins.push(plugin);\n };\n\n Core.prototype.hasPlugin = function hasPlugin(name) {\n return !!this.getPlugin(name);\n };\n\n Core.prototype.getPlugin = function getPlugin(name) {\n return this.plugins.filter(function (plugin) {\n return plugin.name === name;\n })[0];\n };\n\n Core.prototype.load = 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 = _clapprZepto2.default.extend(this.options, { sources: sources });\n this.prepareContainers();\n };\n\n Core.prototype.destroy = 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 (0, _clapprZepto2.default)(document).unbind('fullscreenchange', this._boundFullscreenHandler);\n (0, _clapprZepto2.default)(document).unbind('MSFullscreenChange', this._boundFullscreenHandler);\n (0, _clapprZepto2.default)(document).unbind('mozfullscreenchange', this._boundFullscreenHandler);\n this.stopListening();\n };\n\n Core.prototype.handleFullscreenChange = function handleFullscreenChange() {\n this.trigger(_events2.default.CORE_FULLSCREEN, _utils.Fullscreen.isFullscreen());\n this.updateSize();\n };\n\n Core.prototype.handleWindowResize = 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({ width: this.el.clientWidth, height: this.el.clientHeight });\n this.trigger(_events2.default.CORE_SCREEN_ORIENTATION_CHANGED, {\n event: event,\n orientation: this._screenOrientation\n });\n };\n\n Core.prototype.removeContainer = function removeContainer(container) {\n this.stopListening(container);\n this.containers = this.containers.filter(function (c) {\n return c !== container;\n });\n };\n\n Core.prototype.setupContainer = function setupContainer(container) {\n this.listenTo(container, _events2.default.CONTAINER_DESTROYED, this.removeContainer);\n this.containers.push(container);\n };\n\n Core.prototype.setupContainers = function setupContainers(containers) {\n containers.forEach(this.setupContainer.bind(this));\n this.trigger(_events2.default.CORE_CONTAINERS_CREATED);\n this.renderContainers();\n this.activeContainer = containers[0];\n this.render();\n this.appendToParent();\n return this.containers;\n };\n\n Core.prototype.renderContainers = 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 Core.prototype.createContainer = 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 /**\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 Core.prototype.getCurrentContainer = function getCurrentContainer() {\n return this.activeContainer;\n };\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 Core.prototype.getCurrentPlayback = function getCurrentPlayback() {\n return this.activePlayback;\n };\n\n Core.prototype.getPlaybackType = function getPlaybackType() {\n return this.activeContainer && this.activeContainer.getPlaybackType();\n };\n\n Core.prototype.toggleFullscreen = function toggleFullscreen() {\n if (!_utils.Fullscreen.isFullscreen()) {\n _utils.Fullscreen.requestFullscreen(_browser2.default.isiOS ? this.activeContainer.el : this.el);\n !_browser2.default.isiOS && this.$el.addClass('fullscreen');\n } else {\n _utils.Fullscreen.cancelFullscreen();\n !_browser2.default.isiOS && this.$el.removeClass('fullscreen nocursor');\n }\n };\n\n Core.prototype.onMouseMove = function onMouseMove(event) {\n this.trigger(_events2.default.CORE_MOUSE_MOVE, event);\n };\n\n Core.prototype.onMouseLeave = function onMouseLeave(event) {\n this.trigger(_events2.default.CORE_MOUSE_LEAVE, event);\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 Core.prototype.configure = function configure(options) {\n var _this6 = this;\n\n this._options = _clapprZepto2.default.extend(this._options, options);\n this.configureDomRecycler();\n\n var sources = options.source || options.sources;\n sources && this.load(sources, options.mimeType || this.options.mimeType);\n\n this.trigger(_events2.default.CORE_OPTIONS_CHANGE);\n this.containers.forEach(function (container) {\n return container.configure(_this6.options);\n });\n };\n\n Core.prototype.appendToParent = function appendToParent() {\n var hasCoreParent = this.$el.parent() && this.$el.parent().length;\n !hasCoreParent && this.$el.appendTo(this.options.parentElement);\n };\n\n Core.prototype.render = function render() {\n if (!style) style = _styler2.default.getStyleFor(_fonts2.default, { baseUrl: this.options.baseUrl });\n\n (0, _clapprZepto2.default)('head').append(style);\n\n this.options.width = this.options.width || this.$el.width();\n this.options.height = this.options.height || this.$el.height();\n var size = { width: this.options.width, height: this.options.height };\n this.playerInfo.previousSize = this.playerInfo.currentSize = this.playerInfo.computedSize = size;\n this.updateSize();\n\n this.previousSize = { width: this.$el.width(), height: this.$el.height() };\n\n this.enableResizeObserver();\n\n return this;\n };\n\n return Core;\n}(_ui_object2.default);\n\nexports.default = Core;\n\n\n(0, _assign2.default)(Core.prototype, _error_mixin2.default);\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 158 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _container_factory = __webpack_require__(159);\n\nvar _container_factory2 = _interopRequireDefault(_container_factory);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _container_factory2.default;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 159 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof2 = __webpack_require__(39);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _classCallCheck2 = __webpack_require__(0);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _possibleConstructorReturn2 = __webpack_require__(1);\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _createClass2 = __webpack_require__(3);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _inherits2 = __webpack_require__(2);\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _base_object = __webpack_require__(15);\n\nvar _base_object2 = _interopRequireDefault(_base_object);\n\nvar _events = __webpack_require__(4);\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _container = __webpack_require__(82);\n\nvar _container2 = _interopRequireDefault(_container);\n\nvar _clapprZepto = __webpack_require__(6);\n\nvar _clapprZepto2 = _interopRequireDefault(_clapprZepto);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\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/**\n * The ContainerFactory is responsible for manage playback bootstrap and create containers.\n */\n\nvar ContainerFactory = function (_BaseObject) {\n (0, _inherits3.default)(ContainerFactory, _BaseObject);\n (0, _createClass3.default)(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 (0, _classCallCheck3.default)(this, ContainerFactory);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, _BaseObject.call(this, options));\n\n _this._i18n = i18n;\n _this.loader = loader;\n _this.playerError = playerError;\n return _this;\n }\n\n ContainerFactory.prototype.createContainers = function createContainers() {\n var _this2 = this;\n\n return _clapprZepto2.default.Deferred(function (promise) {\n promise.resolve(_this2.options.sources.map(function (source) {\n return _this2.createContainer(source);\n }));\n });\n };\n\n ContainerFactory.prototype.findPlaybackPlugin = function findPlaybackPlugin(source, mimeType) {\n return this.loader.playbackPlugins.filter(function (p) {\n return p.canPlay(source, mimeType);\n })[0];\n };\n\n ContainerFactory.prototype.createContainer = function createContainer(source) {\n var resolvedSource = null,\n mimeType = this.options.mimeType;\n if ((typeof source === 'undefined' ? 'undefined' : (0, _typeof3.default)(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 = _clapprZepto2.default.extend({}, this.options, {\n src: resolvedSource,\n mimeType: mimeType\n });\n var playbackPlugin = this.findPlaybackPlugin(resolvedSource, mimeType);\n var playback = new playbackPlugin(options, this._i18n, this.playerError);\n\n options = _clapprZepto2.default.extend({}, options, { playback: playback });\n\n var container = new _container2.default(options, this._i18n, this.playerError);\n var defer = _clapprZepto2.default.Deferred();\n defer.promise(container);\n this.addContainerPlugins(container);\n this.listenToOnce(container, _events2.default.CONTAINER_READY, function () {\n return defer.resolve(container);\n });\n return container;\n };\n\n ContainerFactory.prototype.addContainerPlugins = function addContainerPlugins(container) {\n this.loader.containerPlugins.forEach(function (Plugin) {\n container.addPlugin(new Plugin(container));\n });\n };\n\n return ContainerFactory;\n}(_base_object2.default);\n\nexports.default = ContainerFactory;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 160 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _assign = __webpack_require__(12);\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _classCallCheck2 = __webpack_require__(0);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _possibleConstructorReturn2 = __webpack_require__(1);\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _createClass2 = __webpack_require__(3);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _inherits2 = __webpack_require__(2);\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _events = __webpack_require__(4);\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _ui_object = __webpack_require__(30);\n\nvar _ui_object2 = _interopRequireDefault(_ui_object);\n\nvar _error_mixin = __webpack_require__(20);\n\nvar _error_mixin2 = _interopRequireDefault(_error_mixin);\n\nvar _utils = __webpack_require__(5);\n\n__webpack_require__(161);\n\nvar _clapprZepto = __webpack_require__(6);\n\nvar _clapprZepto2 = _interopRequireDefault(_clapprZepto);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\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// 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/**\n * Container is responsible for the video rendering and state\n */\n\nvar Container = function (_UIObject) {\n (0, _inherits3.default)(Container, _UIObject);\n (0, _createClass3.default)(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 { class: 'container', 'data-container': '' };\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 };\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 /**\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 /**\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 /**\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 /**\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 /**\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 /**\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 /**\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 (0, _classCallCheck3.default)(this, Container);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, _UIObject.call(this, options));\n\n _this._i18n = i18n;\n _this.currentTime = 0;\n _this.volume = 100;\n _this.playback = options.playback;\n _this.playerError = playerError;\n _this.settings = _clapprZepto2.default.extend({}, _this.playback.settings);\n _this.isReady = false;\n _this.mediaControlDisabled = false;\n _this.plugins = [_this.playback];\n _this.dblTapHandler = new _utils.DoubleEventHandler(500);\n _this.clickTimer = null;\n _this.clickDelay = 200; // FIXME: could be a player option\n _this.bindEvents();\n return _this;\n }\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 Container.prototype.bindEvents = function bindEvents() {\n this.listenTo(this.playback, _events2.default.PLAYBACK_PROGRESS, this.progress);\n this.listenTo(this.playback, _events2.default.PLAYBACK_TIMEUPDATE, this.timeUpdated);\n this.listenTo(this.playback, _events2.default.PLAYBACK_READY, this.ready);\n this.listenTo(this.playback, _events2.default.PLAYBACK_BUFFERING, this.onBuffering);\n this.listenTo(this.playback, _events2.default.PLAYBACK_BUFFERFULL, this.bufferfull);\n this.listenTo(this.playback, _events2.default.PLAYBACK_SETTINGSUPDATE, this.settingsUpdate);\n this.listenTo(this.playback, _events2.default.PLAYBACK_LOADEDMETADATA, this.loadedMetadata);\n this.listenTo(this.playback, _events2.default.PLAYBACK_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);\n this.listenTo(this.playback, _events2.default.PLAYBACK_BITRATE, this.updateBitrate);\n this.listenTo(this.playback, _events2.default.PLAYBACK_PLAYBACKSTATE, this.playbackStateChanged);\n this.listenTo(this.playback, _events2.default.PLAYBACK_DVR, this.playbackDvrStateChanged);\n this.listenTo(this.playback, _events2.default.PLAYBACK_MEDIACONTROL_DISABLE, this.disableMediaControl);\n this.listenTo(this.playback, _events2.default.PLAYBACK_MEDIACONTROL_ENABLE, this.enableMediaControl);\n this.listenTo(this.playback, _events2.default.PLAYBACK_SEEKED, this.onSeeked);\n this.listenTo(this.playback, _events2.default.PLAYBACK_ENDED, this.onEnded);\n this.listenTo(this.playback, _events2.default.PLAYBACK_PLAY, this.playing);\n this.listenTo(this.playback, _events2.default.PLAYBACK_PAUSE, this.paused);\n this.listenTo(this.playback, _events2.default.PLAYBACK_STOP, this.stopped);\n this.listenTo(this.playback, _events2.default.PLAYBACK_ERROR, this.error);\n this.listenTo(this.playback, _events2.default.PLAYBACK_SUBTITLE_AVAILABLE, this.subtitleAvailable);\n this.listenTo(this.playback, _events2.default.PLAYBACK_SUBTITLE_CHANGED, this.subtitleChanged);\n };\n\n Container.prototype.subtitleAvailable = function subtitleAvailable() {\n this.trigger(_events2.default.CONTAINER_SUBTITLE_AVAILABLE);\n };\n\n Container.prototype.subtitleChanged = function subtitleChanged(track) {\n this.trigger(_events2.default.CONTAINER_SUBTITLE_CHANGED, track);\n };\n\n Container.prototype.playbackStateChanged = function playbackStateChanged(state) {\n this.trigger(_events2.default.CONTAINER_PLAYBACKSTATE, state);\n };\n\n Container.prototype.playbackDvrStateChanged = function playbackDvrStateChanged(dvrInUse) {\n this.settings = this.playback.settings;\n this.dvrInUse = dvrInUse;\n this.trigger(_events2.default.CONTAINER_PLAYBACKDVRSTATECHANGED, dvrInUse);\n };\n\n Container.prototype.updateBitrate = function updateBitrate(newBitrate) {\n this.trigger(_events2.default.CONTAINER_BITRATE, newBitrate);\n };\n\n Container.prototype.statsReport = function statsReport(metrics) {\n this.trigger(_events2.default.CONTAINER_STATS_REPORT, metrics);\n };\n\n Container.prototype.getPlaybackType = function getPlaybackType() {\n return this.playback.getPlaybackType();\n };\n\n /**\n * returns `true` if DVR is enable otherwise `false`.\n * @method isDvrEnabled\n * @return {Boolean}\n */\n\n\n Container.prototype.isDvrEnabled = function isDvrEnabled() {\n return !!this.playback.dvrEnabled;\n };\n\n /**\n * returns `true` if DVR is in use otherwise `false`.\n * @method isDvrInUse\n * @return {Boolean}\n */\n\n\n Container.prototype.isDvrInUse = function isDvrInUse() {\n return !!this.dvrInUse;\n };\n\n /**\n * destroys the container\n * @method destroy\n */\n\n\n Container.prototype.destroy = function destroy() {\n this.trigger(_events2.default.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 Container.prototype.setStyle = function setStyle(style) {\n this.$el.css(style);\n };\n\n Container.prototype.animate = function animate(style, duration) {\n return this.$el.animate(style, duration).promise();\n };\n\n Container.prototype.ready = function ready() {\n this.isReady = true;\n this.trigger(_events2.default.CONTAINER_READY, this.name);\n };\n\n Container.prototype.isPlaying = function isPlaying() {\n return this.playback.isPlaying();\n };\n\n Container.prototype.getStartTimeOffset = function getStartTimeOffset() {\n return this.playback.getStartTimeOffset();\n };\n\n Container.prototype.getCurrentTime = function getCurrentTime() {\n return this.currentTime;\n };\n\n Container.prototype.getDuration = function getDuration() {\n return this.playback.getDuration();\n };\n\n Container.prototype.error = function error(_error) {\n if (!this.isReady) this.ready();\n\n this.trigger(_events2.default.CONTAINER_ERROR, _error, this.name);\n };\n\n Container.prototype.loadedMetadata = function loadedMetadata(metadata) {\n this.trigger(_events2.default.CONTAINER_LOADEDMETADATA, metadata);\n };\n\n Container.prototype.timeUpdated = function timeUpdated(timeProgress) {\n this.currentTime = timeProgress.current;\n this.trigger(_events2.default.CONTAINER_TIMEUPDATE, timeProgress, this.name);\n };\n\n Container.prototype.progress = function progress() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this.trigger.apply(this, [_events2.default.CONTAINER_PROGRESS].concat(args, [this.name]));\n };\n\n Container.prototype.playing = function playing() {\n this.trigger(_events2.default.CONTAINER_PLAY, this.name);\n };\n\n Container.prototype.paused = function paused() {\n this.trigger(_events2.default.CONTAINER_PAUSE, this.name);\n };\n\n /**\n * plays the playback\n * @method play\n */\n\n\n Container.prototype.play = function play() {\n this.playback.play();\n };\n\n /**\n * stops the playback\n * @method stop\n */\n\n\n Container.prototype.stop = function stop() {\n this.playback.stop();\n this.currentTime = 0;\n };\n\n /**\n * pauses the playback\n * @method pause\n */\n\n\n Container.prototype.pause = function pause() {\n this.playback.pause();\n };\n\n Container.prototype.onEnded = function onEnded() {\n this.trigger(_events2.default.CONTAINER_ENDED, this, this.name);\n this.currentTime = 0;\n };\n\n Container.prototype.stopped = function stopped() {\n this.trigger(_events2.default.CONTAINER_STOP);\n };\n\n Container.prototype.clicked = 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(_events2.default.CONTAINER_CLICK, _this2, _this2.name);\n }, this.clickDelay);\n }\n };\n\n Container.prototype.cancelClicked = function cancelClicked() {\n clearTimeout(this.clickTimer);\n this.clickTimer = null;\n };\n\n Container.prototype.dblClicked = function dblClicked() {\n if (!this.options.chromeless || this.options.allowUserInteraction) {\n this.cancelClicked();\n this.trigger(_events2.default.CONTAINER_DBLCLICK, this, this.name);\n }\n };\n\n Container.prototype.dblTap = 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 _this3.trigger(_events2.default.CONTAINER_DBLCLICK, _this3, _this3.name);\n });\n }\n };\n\n Container.prototype.onContextMenu = function onContextMenu(event) {\n if (!this.options.chromeless || this.options.allowUserInteraction) this.trigger(_events2.default.CONTAINER_CONTEXTMENU, event, this.name);\n };\n\n Container.prototype.seek = function seek(time) {\n this.trigger(_events2.default.CONTAINER_SEEK, time, this.name);\n this.playback.seek(time);\n };\n\n Container.prototype.onSeeked = function onSeeked() {\n this.trigger(_events2.default.CONTAINER_SEEKED, this.name);\n };\n\n Container.prototype.seekPercentage = function seekPercentage(percentage) {\n var duration = this.getDuration();\n if (percentage >= 0 && percentage <= 100) {\n var time = duration * (percentage / 100);\n this.seek(time);\n }\n };\n\n Container.prototype.setVolume = function setVolume(value) {\n this.volume = parseInt(value, 10);\n this.trigger(_events2.default.CONTAINER_VOLUME, value, this.name);\n this.playback.volume(value);\n };\n\n Container.prototype.fullscreen = function fullscreen() {\n this.trigger(_events2.default.CONTAINER_FULLSCREEN, this.name);\n };\n\n Container.prototype.onBuffering = function onBuffering() {\n this.trigger(_events2.default.CONTAINER_STATE_BUFFERING, this.name);\n };\n\n Container.prototype.bufferfull = function bufferfull() {\n this.trigger(_events2.default.CONTAINER_STATE_BUFFERFULL, this.name);\n };\n\n /**\n * adds plugin to the container\n * @method addPlugin\n * @param {Object} plugin\n */\n\n\n Container.prototype.addPlugin = function addPlugin(plugin) {\n this.plugins.push(plugin);\n };\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 Container.prototype.hasPlugin = function hasPlugin(name) {\n return !!this.getPlugin(name);\n };\n\n /**\n * get the plugin given its name\n * @method getPlugin\n * @param {String} name\n */\n\n\n Container.prototype.getPlugin = function getPlugin(name) {\n return this.plugins.filter(function (plugin) {\n return plugin.name === name;\n })[0];\n };\n\n Container.prototype.mouseEnter = function mouseEnter() {\n if (!this.options.chromeless || this.options.allowUserInteraction) this.trigger(_events2.default.CONTAINER_MOUSE_ENTER);\n };\n\n Container.prototype.mouseLeave = function mouseLeave() {\n if (!this.options.chromeless || this.options.allowUserInteraction) this.trigger(_events2.default.CONTAINER_MOUSE_LEAVE);\n };\n\n Container.prototype.settingsUpdate = function settingsUpdate() {\n this.settings = this.playback.settings;\n this.trigger(_events2.default.CONTAINER_SETTINGSUPDATE);\n };\n\n Container.prototype.highDefinitionUpdate = function highDefinitionUpdate(isHD) {\n this.trigger(_events2.default.CONTAINER_HIGHDEFINITIONUPDATE, isHD);\n };\n\n Container.prototype.isHighDefinitionInUse = function isHighDefinitionInUse() {\n return this.playback.isHighDefinitionInUse();\n };\n\n Container.prototype.disableMediaControl = function disableMediaControl() {\n if (!this.mediaControlDisabled) {\n this.mediaControlDisabled = true;\n this.trigger(_events2.default.CONTAINER_MEDIACONTROL_DISABLE);\n }\n };\n\n Container.prototype.enableMediaControl = function enableMediaControl() {\n if (this.mediaControlDisabled) {\n this.mediaControlDisabled = false;\n this.trigger(_events2.default.CONTAINER_MEDIACONTROL_ENABLE);\n }\n };\n\n Container.prototype.updateStyle = function updateStyle() {\n if (!this.options.chromeless || this.options.allowUserInteraction) this.$el.removeClass('chromeless');else this.$el.addClass('chromeless');\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 Container.prototype.configure = function configure(options) {\n this._options = _clapprZepto2.default.extend(this._options, options);\n this.updateStyle();\n this.playback.configure(this.options);\n this.trigger(_events2.default.CONTAINER_OPTIONS_CHANGE);\n };\n\n Container.prototype.render = function render() {\n this.$el.append(this.playback.render().el);\n this.updateStyle();\n return this;\n };\n\n return Container;\n}(_ui_object2.default);\n\nexports.default = Container;\n\n\n(0, _assign2.default)(Container.prototype, _error_mixin2.default);\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 161 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\nvar content = __webpack_require__(162);\n\nif(typeof content === 'string') content = [[module.i, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"singleton\":true,\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = __webpack_require__(10)(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(false) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/index.js!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/lib/loader.js?includePaths[]=/Users/bruno/workspace/clappr/clappr/src/base/scss!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/index.js!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/lib/loader.js?includePaths[]=/Users/bruno/workspace/clappr/clappr/src/base/scss!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}\n\n/***/ }),\n/* 162 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports = module.exports = __webpack_require__(8)(false);\n// imports\n\n\n// module\nexports.push([module.i, \".container[data-container]{position:absolute;background-color:#000;height:100%;width:100%}.container[data-container] .chromeless{cursor:default}[data-player]:not(.nocursor) .container[data-container]:not(.chromeless).pointer-enabled{cursor:pointer}\", \"\"]);\n\n// exports\n\n\n/***/ }),\n/* 163 */\n/***/ (function(module, exports) {\n\n\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n // get current location\n var location = typeof window !== \"undefined\" && window.location;\n\n if (!location) {\n throw new Error(\"fixUrls requires window.location\");\n }\n\n\t// blank or null?\n\tif (!css || typeof css !== \"string\") {\n\t return css;\n }\n\n var baseUrl = location.protocol + \"//\" + location.host;\n var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\( = Match on the word \"url\" with any whitespace after it and then a parens\n\t ( = Start a capturing group\n\t (?: = Start a non-capturing group\n\t [^)(] = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t (?: = Start another non-capturing groups\n\t [^)(]+ = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t [^)(]* = Match anything that isn't a parentheses\n\t \\) = Match a end parentheses\n\t ) = End Group\n *\\) = Match anything and then a close parens\n ) = Close non-capturing group\n * = Match anything\n ) = Close capturing group\n\t \\) = Match a close parens\n\n\t /gi = Get all matches, not the first. Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\"(.*)\"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(unquotedOrigUrl)) {\n\t\t return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\"//\") === 0) {\n\t\t \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \"url(\" + JSON.stringify(newUrl) + \")\";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n\n\n/***/ }),\n/* 164 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\nvar content = __webpack_require__(165);\n\nif(typeof content === 'string') content = [[module.i, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"singleton\":true,\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = __webpack_require__(10)(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(false) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/index.js!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/lib/loader.js?includePaths[]=/Users/bruno/workspace/clappr/clappr/src/base/scss!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/index.js!../../../../node_modules/postcss-loader/lib/index.js!../../../../node_modules/sass-loader/lib/loader.js?includePaths[]=/Users/bruno/workspace/clappr/clappr/src/base/scss!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}\n\n/***/ }),\n/* 165 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports = module.exports = __webpack_require__(8)(false);\n// imports\n\n\n// module\nexports.push([module.i, \"[data-player]{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transform:translateZ(0);transform:translateZ(0);position:relative;margin:0;padding:0;border:0;font-style:normal;font-weight:400;text-align:center;overflow:hidden;font-size:100%;font-family:Roboto,Open Sans,Arial,sans-serif;text-shadow:0 0 0;box-sizing:border-box}[data-player] a,[data-player] abbr,[data-player] acronym,[data-player] address,[data-player] applet,[data-player] article,[data-player] aside,[data-player] audio,[data-player] b,[data-player] big,[data-player] blockquote,[data-player] canvas,[data-player] caption,[data-player] center,[data-player] cite,[data-player] code,[data-player] dd,[data-player] del,[data-player] details,[data-player] dfn,[data-player] div,[data-player] dl,[data-player] dt,[data-player] em,[data-player] embed,[data-player] fieldset,[data-player] figcaption,[data-player] figure,[data-player] footer,[data-player] form,[data-player] h1,[data-player] h2,[data-player] h3,[data-player] h4,[data-player] h5,[data-player] h6,[data-player] header,[data-player] hgroup,[data-player] i,[data-player] iframe,[data-player] img,[data-player] ins,[data-player] kbd,[data-player] label,[data-player] legend,[data-player] li,[data-player] mark,[data-player] menu,[data-player] nav,[data-player] object,[data-player] ol,[data-player] output,[data-player] p,[data-player] pre,[data-player] q,[data-player] ruby,[data-player] s,[data-player] samp,[data-player] section,[data-player] small,[data-player] span,[data-player] strike,[data-player] strong,[data-player] sub,[data-player] summary,[data-player] sup,[data-player] table,[data-player] tbody,[data-player] td,[data-player] tfoot,[data-player] th,[data-player] thead,[data-player] time,[data-player] tr,[data-player] tt,[data-player] u,[data-player] ul,[data-player] var,[data-player] video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}[data-player] table{border-collapse:collapse;border-spacing:0}[data-player] caption,[data-player] td,[data-player] th{text-align:left;font-weight:400;vertical-align:middle}[data-player] blockquote,[data-player] q{quotes:none}[data-player] blockquote:after,[data-player] blockquote:before,[data-player] q:after,[data-player] q:before{content:\\\"\\\";content:none}[data-player] a img{border:none}[data-player]:focus{outline:0}[data-player] *{max-width:none;box-sizing:inherit;float:none}[data-player] div{display:block}[data-player].fullscreen{width:100%!important;height:100%!important;top:0;left:0}[data-player].nocursor{cursor:none}.clappr-style{display:none!important}\", \"\"]);\n\n// exports\n\n\n/***/ }),\n/* 166 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar escape = __webpack_require__(83);\nexports = module.exports = __webpack_require__(8)(false);\n// imports\n\n\n// module\nexports.push([module.i, \"@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local(\\\"Roboto\\\"),local(\\\"Roboto-Regular\\\"),url(\" + escape(__webpack_require__(167)) + \") format(\\\"truetype\\\")}\", \"\"]);\n\n// exports\n\n\n/***/ }),\n/* 167 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<%=baseUrl%>/38861cba61c66739c1452c3a71e39852.ttf\";\n\n/***/ }),\n/* 168 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _create = __webpack_require__(77);\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _toConsumableArray2 = __webpack_require__(62);\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\nvar _classCallCheck2 = __webpack_require__(0);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _possibleConstructorReturn2 = __webpack_require__(1);\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = __webpack_require__(2);\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _base_object = __webpack_require__(15);\n\nvar _base_object2 = _interopRequireDefault(_base_object);\n\nvar _player_info = __webpack_require__(40);\n\nvar _player_info2 = _interopRequireDefault(_player_info);\n\nvar _html5_video = __webpack_require__(41);\n\nvar _html5_video2 = _interopRequireDefault(_html5_video);\n\nvar _flash = __webpack_require__(86);\n\nvar _flash2 = _interopRequireDefault(_flash);\n\nvar _html5_audio = __webpack_require__(87);\n\nvar _html5_audio2 = _interopRequireDefault(_html5_audio);\n\nvar _flashls = __webpack_require__(88);\n\nvar _flashls2 = _interopRequireDefault(_flashls);\n\nvar _hls = __webpack_require__(89);\n\nvar _hls2 = _interopRequireDefault(_hls);\n\nvar _html_img = __webpack_require__(91);\n\nvar _html_img2 = _interopRequireDefault(_html_img);\n\nvar _no_op = __webpack_require__(92);\n\nvar _no_op2 = _interopRequireDefault(_no_op);\n\nvar _spinner_three_bounce = __webpack_require__(93);\n\nvar _spinner_three_bounce2 = _interopRequireDefault(_spinner_three_bounce);\n\nvar _stats = __webpack_require__(204);\n\nvar _stats2 = _interopRequireDefault(_stats);\n\nvar _watermark = __webpack_require__(94);\n\nvar _watermark2 = _interopRequireDefault(_watermark);\n\nvar _poster = __webpack_require__(95);\n\nvar _poster2 = _interopRequireDefault(_poster);\n\nvar _google_analytics = __webpack_require__(214);\n\nvar _google_analytics2 = _interopRequireDefault(_google_analytics);\n\nvar _click_to_pause = __webpack_require__(96);\n\nvar _click_to_pause2 = _interopRequireDefault(_click_to_pause);\n\nvar _media_control = __webpack_require__(97);\n\nvar _media_control2 = _interopRequireDefault(_media_control);\n\nvar _dvr_controls = __webpack_require__(100);\n\nvar _dvr_controls2 = _interopRequireDefault(_dvr_controls);\n\nvar _closed_captions = __webpack_require__(231);\n\nvar _closed_captions2 = _interopRequireDefault(_closed_captions);\n\nvar _favicon = __webpack_require__(101);\n\nvar _favicon2 = _interopRequireDefault(_favicon);\n\nvar _seek_time = __webpack_require__(238);\n\nvar _seek_time2 = _interopRequireDefault(_seek_time);\n\nvar _sources = __webpack_require__(243);\n\nvar _sources2 = _interopRequireDefault(_sources);\n\nvar _end_video = __webpack_require__(244);\n\nvar _end_video2 = _interopRequireDefault(_end_video);\n\nvar _strings = __webpack_require__(245);\n\nvar _strings2 = _interopRequireDefault(_strings);\n\nvar _error_screen = __webpack_require__(246);\n\nvar _error_screen2 = _interopRequireDefault(_error_screen);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\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\n/* Playback Plugins */\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\nvar Loader = function (_BaseObject) {\n (0, _inherits3.default)(Loader, _BaseObject);\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 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 var useOnlyPlainHtml5Plugins = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n (0, _classCallCheck3.default)(this, Loader);\n\n var _this = (0, _possibleConstructorReturn3.default)(this, _BaseObject.call(this));\n\n _this.playerId = playerId;\n _this.playbackPlugins = [];\n\n if (!useOnlyPlainHtml5Plugins) {\n _this.playbackPlugins = [].concat((0, _toConsumableArray3.default)(_this.playbackPlugins), [_hls2.default]);\n }\n\n _this.playbackPlugins = [].concat((0, _toConsumableArray3.default)(_this.playbackPlugins), [_html5_video2.default, _html5_audio2.default]);\n\n if (!useOnlyPlainHtml5Plugins) {\n _this.playbackPlugins = [].concat((0, _toConsumableArray3.default)(_this.playbackPlugins), [_flash2.default, _flashls2.default]);\n }\n\n _this.playbackPlugins = [].concat((0, _toConsumableArray3.default)(_this.playbackPlugins), [_html_img2.default, _no_op2.default]);\n\n _this.containerPlugins = [_spinner_three_bounce2.default, _watermark2.default, _poster2.default, _stats2.default, _google_analytics2.default, _click_to_pause2.default];\n _this.corePlugins = [_media_control2.default, _dvr_controls2.default, _closed_captions2.default, _favicon2.default, _seek_time2.default, _sources2.default, _end_video2.default, _error_screen2.default, _strings2.default];\n\n if (!Array.isArray(externalPlugins)) _this.validateExternalPluginsType(externalPlugins);\n\n _this.addExternalPlugins(externalPlugins);\n return _this;\n }\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 Loader.prototype.groupPluginsByType = 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 return plugins;\n };\n\n Loader.prototype.removeDups = function removeDups(list) {\n var groupUp = function groupUp(plugins, plugin) {\n plugins[plugin.prototype.name] && delete plugins[plugin.prototype.name];\n plugins[plugin.prototype.name] = plugin;\n return plugins;\n };\n var pluginsMap = list.reduceRight(groupUp, (0, _create2.default)(null));\n\n var plugins = [];\n for (var key in pluginsMap) {\n plugins.unshift(pluginsMap[key]);\n }return plugins;\n };\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 Loader.prototype.addExternalPlugins = function addExternalPlugins(plugins) {\n plugins = this.groupPluginsByType(plugins);\n if (plugins.playback) this.playbackPlugins = this.removeDups(plugins.playback.concat(this.playbackPlugins));\n\n if (plugins.container) this.containerPlugins = this.removeDups(plugins.container.concat(this.containerPlugins));\n\n if (plugins.core) this.corePlugins = this.removeDups(plugins.core.concat(this.corePlugins));\n\n _player_info2.default.getInstance(this.playerId).playbackPlugins = this.playbackPlugins;\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 Loader.prototype.validateExternalPluginsType = 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 return Loader;\n}(_base_object2.default);\n\n/* Core Plugins */\n\n\n/* Container Plugins */\n\n\nexports.default = Loader;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 169 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(54);\n__webpack_require__(170);\nmodule.exports = __webpack_require__(9).Array.from;\n\n/***/ }),\n/* 170 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ctx = __webpack_require__(44)\n , $export = __webpack_require__(16)\n , toObject = __webpack_require__(38)\n , call = __webpack_require__(171)\n , isArrayIter = __webpack_require__(172)\n , toLength = __webpack_require__(70)\n , createProperty = __webpack_require__(173)\n , getIterFn = __webpack_require__(78);\n\n$export($export.S + $export.F * !__webpack_require__(174)(function(iter){ Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\n var O = toObject(arrayLike)\n , C = typeof this == 'function' ? this : Array\n , aLen = arguments.length\n , mapfn = aLen > 1 ? arguments[1] : undefined\n , mapping = mapfn !== undefined\n , index = 0\n , iterFn = getIterFn(O)\n , length, result, step, iterator;\n if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\n for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for(result = new C(length); length > index; index++){\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n\n\n/***/ }),\n/* 171 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(21);\nmodule.exports = function(iterator, fn, value, entries){\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch(e){\n var ret = iterator['return'];\n if(ret !== undefined)anObject(ret.call(iterator));\n throw e;\n }\n};\n\n/***/ }),\n/* 172 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// check on default Array iterator\nvar Iterators = __webpack_require__(34)\n , ITERATOR = __webpack_require__(13)('iterator')\n , ArrayProto = Array.prototype;\n\nmodule.exports = function(it){\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n/***/ }),\n/* 173 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $defineProperty = __webpack_require__(18)\n , createDesc = __webpack_require__(33);\n\nmodule.exports = function(object, index, value){\n if(index in object)$defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n\n/***/ }),\n/* 174 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar ITERATOR = __webpack_require__(13)('iterator')\n , SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function(){ SAFE_CLOSING = true; };\n Array.from(riter, function(){ throw 2; });\n} catch(e){ /* empty */ }\n\nmodule.exports = function(exec, skipClosing){\n if(!skipClosing && !SAFE_CLOSING)return false;\n var safe = false;\n try {\n var arr = [7]\n , iter = arr[ITERATOR]();\n iter.next = function(){ return {done: safe = true}; };\n arr[ITERATOR] = function(){ return iter; };\n exec(arr);\n } catch(e){ /* empty */ }\n return safe;\n};\n\n/***/ }),\n/* 175 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(process) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _from = __webpack_require__(85);\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _classCallCheck2 = __webpack_require__(0);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _possibleConstructorReturn2 = __webpack_require__(1);\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _createClass2 = __webpack_require__(3);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _inherits2 = __webpack_require__(2);\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _toConsumableArray2 = __webpack_require__(62);\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\nvar _keys = __webpack_require__(53);\n\nvar _keys2 = _interopRequireDefault(_keys);\n\nvar _utils = __webpack_require__(5);\n\nvar _playback = __webpack_require__(11);\n\nvar _playback2 = _interopRequireDefault(_playback);\n\nvar _browser = __webpack_require__(14);\n\nvar _browser2 = _interopRequireDefault(_browser);\n\nvar _error = __webpack_require__(25);\n\nvar _error2 = _interopRequireDefault(_error);\n\nvar _events = __webpack_require__(4);\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _log = __webpack_require__(29);\n\nvar _log2 = _interopRequireDefault(_log);\n\nvar _clapprZepto = __webpack_require__(6);\n\nvar _clapprZepto2 = _interopRequireDefault(_clapprZepto);\n\nvar _template = __webpack_require__(7);\n\nvar _template2 = _interopRequireDefault(_template);\n\nvar _tracks = __webpack_require__(176);\n\nvar _tracks2 = _interopRequireDefault(_tracks);\n\n__webpack_require__(177);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\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\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'];\n\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};\n\nvar KNOWN_AUDIO_MIMETYPES = (0, _keys2.default)(AUDIO_MIMETYPES).reduce(function (acc, k) {\n return [].concat((0, _toConsumableArray3.default)(acc), (0, _toConsumableArray3.default)(AUDIO_MIMETYPES[k]));\n}, []);\n\nvar UNKNOWN_ERROR = { code: 'unknown', message: 'unknown'\n\n // TODO: rename this Playback to HTML5Playback (breaking change, only after 0.3.0)\n};\nvar HTML5Video = function (_Playback) {\n (0, _inherits3.default)(HTML5Video, _Playback);\n (0, _createClass3.default)(HTML5Video, [{\n key: 'name',\n get: function get() {\n return 'html5_video';\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 var mimeTypes = HTML5Video._mimeTypesForUrl(resourceUrl, AUDIO_MIMETYPES, this.options.mimeType);\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 /**\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 /**\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\n function HTML5Video() {\n (0, _classCallCheck3.default)(this, HTML5Video);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var _this = (0, _possibleConstructorReturn3.default)(this, _Playback.call.apply(_Playback, [this].concat(args)));\n\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 _this._setupSrc(_this.options.src);\n // backwards compatibility (TODO: remove on 0.3.0)\n _this.options.playback || (_this.options.playback = _this.options || {});\n _this.options.playback.disableContextMenu = _this.options.playback.disableContextMenu || _this.options.disableVideoTagContextMenu;\n\n var playbackConfig = _this.options.playback;\n var preload = playbackConfig.preload || (_browser2.default.isSafari ? 'auto' : _this.options.preload);\n\n var posterUrl = void 0; // FIXME: poster plugin should always convert poster to object with expected properties ?\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 _clapprZepto2.default.extend(_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 controls: (playbackConfig.controls || _this.options.useVideoTagDefaultControls) && 'controls',\n crossOrigin: playbackConfig.crossOrigin,\n 'x-webkit-playsinline': playbackConfig.playInline\n });\n\n playbackConfig.playInline && _this.$el.attr({ playsinline: 'playsinline' });\n playbackConfig.crossOrigin && _this.$el.attr({ crossorigin: playbackConfig.crossOrigin });\n\n // TODO should settings be private?\n _this.settings = { default: ['seekbar'] };\n _this.settings.left = ['playpause', 'position', 'duration'];\n _this.settings.right = ['fullscreen', 'volume', 'hd-indicator'];\n\n playbackConfig.externalTracks && _this._setupExternalTracks(playbackConfig.externalTracks);\n\n _this.options.autoPlay && _this.attemptAutoPlay();\n return _this;\n }\n\n // See Playback.attemptAutoPlay()\n\n\n HTML5Video.prototype.attemptAutoPlay = function attemptAutoPlay() {\n var _this2 = this;\n\n this.canAutoPlay(function (result, error) {\n error && _log2.default.warn(_this2.name, 'autoplay error.', { result: result, error: error });\n\n // https://github.com/clappr/clappr/issues/1076\n result && process.nextTick(function () {\n return !_this2._destroyed && _this2.play();\n });\n });\n };\n\n // See Playback.canAutoPlay()\n\n\n HTML5Video.prototype.canAutoPlay = function canAutoPlay(cb) {\n if (this.options.disableCanAutoPlay) cb(true, null);\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\n // Use current video element if recycling feature enabled with mobile devices\n };if (_browser2.default.isMobile && _utils.DomRecycler.options.recycleVideo) opts.element = this.el;\n\n // 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 (0, _utils.canAutoPlayMedia)(cb, opts);\n };\n\n HTML5Video.prototype._setupExternalTracks = function _setupExternalTracks(tracks) {\n this._externalTracks = tracks.map(function (track) {\n return {\n kind: track.kind || 'subtitles', // Default is 'subtitles'\n label: track.label,\n lang: track.lang,\n src: track.src\n };\n });\n };\n\n /**\n * Sets the source url on the