3 * http://www.mediaelementjs.com/
5 * Wrapper that mimics native HTML5 MediaElement (audio and video)
6 * using a variety of technologies (pure JavaScript, Flash, iframe)
8 * Copyright 2010-2017, John Dyer (http://j.hn/)
11 */(function e(t
,n
,r
){function s(o
,u
){if(!n
[o
]){if(!t
[o
]){var a
=typeof require
=="function"&&require
;if(!u
&&a
)return a(o
,!0);if(i
)return i(o
,!0);var f
=new Error("Cannot find module '"+o
+"'");throw f
.code
="MODULE_NOT_FOUND",f
}var l
=n
[o
]={exports
:{}};t
[o
][0].call(l
.exports
,function(e
){var n
=t
[o
][1][e
];return s(n
?n
:e
)},l
,l
.exports
,e
,t
,n
,r
)}return n
[o
].exports
}var i
=typeof require
=="function"&&require
;for(var o
=0;o
<r
.length
;o
++)s(r
[o
]);return s
})({1:[function(_dereq_
,module
,exports
){
13 },{}],2:[function(_dereq_
,module
,exports
){
15 var topLevel
= typeof global
!== 'undefined' ? global
:
16 typeof window
!== 'undefined' ? window
: {}
17 var minDoc
= _dereq_(1);
21 if (typeof document
!== 'undefined') {
24 doccy
= topLevel
['__GLOBAL_DOCUMENT_CACHE@4'];
27 doccy
= topLevel
['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc
;
31 module
.exports
= doccy
;
33 }).call(this,typeof global
!== "undefined" ? global
: typeof self
!== "undefined" ? self
: typeof window
!== "undefined" ? window
: {})
34 },{"1":1}],3:[function(_dereq_
,module
,exports
){
38 if (typeof window
!== "undefined") {
40 } else if (typeof global
!== "undefined") {
42 } else if (typeof self
!== "undefined"){
50 }).call(this,typeof global
!== "undefined" ? global
: typeof self
!== "undefined" ? self
: typeof window
!== "undefined" ? window
: {})
51 },{}],4:[function(_dereq_
,module
,exports
){
54 // Store setTimeout reference so promise-polyfill will be unaffected by
55 // other code modifying setTimeout (like sinon.useFakeTimers())
56 var setTimeoutFunc
= setTimeout
;
60 // Polyfill for Function.prototype.bind
61 function bind(fn
, thisArg
) {
63 fn
.apply(thisArg
, arguments
);
67 function Promise(fn
) {
68 if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new');
69 if (typeof fn
!== 'function') throw new TypeError('not a function');
71 this._handled
= false;
72 this._value
= undefined;
78 function handle(self
, deferred
) {
79 while (self
._state
=== 3) {
82 if (self
._state
=== 0) {
83 self
._deferreds
.push(deferred
);
87 Promise
._immediateFn(function () {
88 var cb
= self
._state
=== 1 ? deferred
.onFulfilled
: deferred
.onRejected
;
90 (self
._state
=== 1 ? resolve
: reject
)(deferred
.promise
, self
._value
);
95 ret
= cb(self
._value
);
97 reject(deferred
.promise
, e
);
100 resolve(deferred
.promise
, ret
);
104 function resolve(self
, newValue
) {
106 // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
107 if (newValue
=== self
) throw new TypeError('A promise cannot be resolved with itself.');
108 if (newValue
&& (typeof newValue
=== 'object' || typeof newValue
=== 'function')) {
109 var then
= newValue
.then
;
110 if (newValue
instanceof Promise
) {
112 self
._value
= newValue
;
115 } else if (typeof then
=== 'function') {
116 doResolve(bind(then
, newValue
), self
);
121 self
._value
= newValue
;
128 function reject(self
, newValue
) {
130 self
._value
= newValue
;
134 function finale(self
) {
135 if (self
._state
=== 2 && self
._deferreds
.length
=== 0) {
136 Promise
._immediateFn(function() {
137 if (!self
._handled
) {
138 Promise
._unhandledRejectionFn(self
._value
);
143 for (var i
= 0, len
= self
._deferreds
.length
; i
< len
; i
++) {
144 handle(self
, self
._deferreds
[i
]);
146 self
._deferreds
= null;
149 function Handler(onFulfilled
, onRejected
, promise
) {
150 this.onFulfilled
= typeof onFulfilled
=== 'function' ? onFulfilled
: null;
151 this.onRejected
= typeof onRejected
=== 'function' ? onRejected
: null;
152 this.promise
= promise
;
156 * Take a potentially misbehaving resolver function and make sure
157 * onFulfilled and onRejected are only called once.
159 * Makes no guarantees about asynchrony.
161 function doResolve(fn
, self
) {
164 fn(function (value
) {
167 resolve(self
, value
);
168 }, function (reason
) {
171 reject(self
, reason
);
180 Promise
.prototype['catch'] = function (onRejected
) {
181 return this.then(null, onRejected
);
184 Promise
.prototype.then = function (onFulfilled
, onRejected
) {
185 var prom
= new (this.constructor)(noop
);
187 handle(this, new Handler(onFulfilled
, onRejected
, prom
));
191 Promise
.all = function (arr
) {
192 var args
= Array
.prototype.slice
.call(arr
);
194 return new Promise(function (resolve
, reject
) {
195 if (args
.length
=== 0) return resolve([]);
196 var remaining
= args
.length
;
198 function res(i
, val
) {
200 if (val
&& (typeof val
=== 'object' || typeof val
=== 'function')) {
202 if (typeof then
=== 'function') {
203 then
.call(val
, function (val
) {
210 if (--remaining
=== 0) {
218 for (var i
= 0; i
< args
.length
; i
++) {
224 Promise
.resolve = function (value
) {
225 if (value
&& typeof value
=== 'object' && value
.constructor === Promise
) {
229 return new Promise(function (resolve
) {
234 Promise
.reject = function (value
) {
235 return new Promise(function (resolve
, reject
) {
240 Promise
.race = function (values
) {
241 return new Promise(function (resolve
, reject
) {
242 for (var i
= 0, len
= values
.length
; i
< len
; i
++) {
243 values
[i
].then(resolve
, reject
);
248 // Use polyfill for setImmediate for performance gains
249 Promise
._immediateFn
= (typeof setImmediate
=== 'function' && function (fn
) { setImmediate(fn
); }) ||
251 setTimeoutFunc(fn
, 0);
254 Promise
._unhandledRejectionFn
= function _unhandledRejectionFn(err
) {
255 if (typeof console
!== 'undefined' && console
) {
256 console
.warn('Possible Unhandled Promise Rejection:', err
); // eslint-disable-line no-console
261 * Set the immediate function to execute callbacks
262 * @param fn {function} Function to execute
265 Promise
._setImmediateFn
= function _setImmediateFn(fn
) {
266 Promise
._immediateFn
= fn
;
270 * Change the function to execute on unhandled rejection
271 * @param {function} fn Function to execute on unhandled rejection
274 Promise
._setUnhandledRejectionFn
= function _setUnhandledRejectionFn(fn
) {
275 Promise
._unhandledRejectionFn
= fn
;
278 if (typeof module
!== 'undefined' && module
.exports
) {
279 module
.exports
= Promise
;
280 } else if (!root
.Promise
) {
281 root
.Promise
= Promise
;
286 },{}],5:[function(_dereq_
,module
,exports
){
289 Object
.defineProperty(exports
, "__esModule", {
293 var _typeof
= typeof Symbol
=== "function" && typeof Symbol
.iterator
=== "symbol" ? function (obj
) { return typeof obj
; } : function (obj
) { return obj
&& typeof Symbol
=== "function" && obj
.constructor === Symbol
&& obj
!== Symbol
.prototype ? "symbol" : typeof obj
; };
295 var _mejs
= _dereq_(7);
297 var _mejs2
= _interopRequireDefault(_mejs
);
299 var _en
= _dereq_(15);
301 var _general
= _dereq_(27);
303 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
305 var i18n
= { lang
: 'en', en
: _en
.EN
};
307 i18n
.language = function () {
308 for (var _len
= arguments
.length
, args
= Array(_len
), _key
= 0; _key
< _len
; _key
++) {
309 args
[_key
] = arguments
[_key
];
312 if (args
!== null && args
!== undefined && args
.length
) {
314 if (typeof args
[0] !== 'string') {
315 throw new TypeError('Language code must be a string value');
318 if (!/^[a-z]{2}(\-[a-z]{2})?$/i.test(args
[0])) {
319 throw new TypeError('Language code must have format `xx` or `xx-xx`');
324 if (i18n
[args
[0]] === undefined) {
325 args
[1] = args
[1] !== null && args
[1] !== undefined && _typeof(args
[1]) === 'object' ? args
[1] : {};
326 i18n
[args
[0]] = !(0, _general
.isObjectEmpty
)(args
[1]) ? args
[1] : _en
.EN
;
327 } else if (args
[1] !== null && args
[1] !== undefined && _typeof(args
[1]) === 'object') {
328 i18n
[args
[0]] = args
[1];
335 i18n
.t = function (message
) {
336 var pluralParam
= arguments
.length
> 1 && arguments
[1] !== undefined ? arguments
[1] : null;
339 if (typeof message
=== 'string' && message
.length
) {
344 var language
= i18n
.language();
346 var _plural
= function _plural(input
, number
, form
) {
348 if ((typeof input
=== 'undefined' ? 'undefined' : _typeof(input
)) !== 'object' || typeof number
!== 'number' || typeof form
!== 'number') {
352 var _pluralForms = function () {
353 return [function () {
354 return arguments
.length
<= 1 ? undefined : arguments
[1];
356 return (arguments
.length
<= 0 ? undefined : arguments
[0]) === 1 ? arguments
.length
<= 1 ? undefined : arguments
[1] : arguments
.length
<= 2 ? undefined : arguments
[2];
358 return (arguments
.length
<= 0 ? undefined : arguments
[0]) === 0 || (arguments
.length
<= 0 ? undefined : arguments
[0]) === 1 ? arguments
.length
<= 1 ? undefined : arguments
[1] : arguments
.length
<= 2 ? undefined : arguments
[2];
360 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 10 === 1 && (arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 !== 11) {
361 return arguments
.length
<= 1 ? undefined : arguments
[1];
362 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) !== 0) {
363 return arguments
.length
<= 2 ? undefined : arguments
[2];
365 return arguments
.length
<= 3 ? undefined : arguments
[3];
368 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 1 || (arguments
.length
<= 0 ? undefined : arguments
[0]) === 11) {
369 return arguments
.length
<= 1 ? undefined : arguments
[1];
370 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 2 || (arguments
.length
<= 0 ? undefined : arguments
[0]) === 12) {
371 return arguments
.length
<= 2 ? undefined : arguments
[2];
372 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) > 2 && (arguments
.length
<= 0 ? undefined : arguments
[0]) < 20) {
373 return arguments
.length
<= 3 ? undefined : arguments
[3];
375 return arguments
.length
<= 4 ? undefined : arguments
[4];
378 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 1) {
379 return arguments
.length
<= 1 ? undefined : arguments
[1];
380 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 0 || (arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 > 0 && (arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 < 20) {
381 return arguments
.length
<= 2 ? undefined : arguments
[2];
383 return arguments
.length
<= 3 ? undefined : arguments
[3];
386 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 10 === 1 && (arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 !== 11) {
387 return arguments
.length
<= 1 ? undefined : arguments
[1];
388 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 10 >= 2 && ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 < 10 || (arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 >= 20)) {
389 return arguments
.length
<= 2 ? undefined : arguments
[2];
394 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 10 === 1 && (arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 !== 11) {
395 return arguments
.length
<= 1 ? undefined : arguments
[1];
396 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 10 >= 2 && (arguments
.length
<= 0 ? undefined : arguments
[0]) % 10 <= 4 && ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 < 10 || (arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 >= 20)) {
397 return arguments
.length
<= 2 ? undefined : arguments
[2];
399 return arguments
.length
<= 3 ? undefined : arguments
[3];
402 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 1) {
403 return arguments
.length
<= 1 ? undefined : arguments
[1];
404 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) >= 2 && (arguments
.length
<= 0 ? undefined : arguments
[0]) <= 4) {
405 return arguments
.length
<= 2 ? undefined : arguments
[2];
407 return arguments
.length
<= 3 ? undefined : arguments
[3];
410 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 1) {
411 return arguments
.length
<= 1 ? undefined : arguments
[1];
412 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 10 >= 2 && (arguments
.length
<= 0 ? undefined : arguments
[0]) % 10 <= 4 && ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 < 10 || (arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 >= 20)) {
413 return arguments
.length
<= 2 ? undefined : arguments
[2];
415 return arguments
.length
<= 3 ? undefined : arguments
[3];
418 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 === 1) {
419 return arguments
.length
<= 2 ? undefined : arguments
[2];
420 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 === 2) {
421 return arguments
.length
<= 3 ? undefined : arguments
[3];
422 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 === 3 || (arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 === 4) {
423 return arguments
.length
<= 4 ? undefined : arguments
[4];
425 return arguments
.length
<= 1 ? undefined : arguments
[1];
428 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 1) {
429 return arguments
.length
<= 1 ? undefined : arguments
[1];
430 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 2) {
431 return arguments
.length
<= 2 ? undefined : arguments
[2];
432 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) > 2 && (arguments
.length
<= 0 ? undefined : arguments
[0]) < 7) {
433 return arguments
.length
<= 3 ? undefined : arguments
[3];
434 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) > 6 && (arguments
.length
<= 0 ? undefined : arguments
[0]) < 11) {
435 return arguments
.length
<= 4 ? undefined : arguments
[4];
437 return arguments
.length
<= 5 ? undefined : arguments
[5];
440 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 0) {
441 return arguments
.length
<= 1 ? undefined : arguments
[1];
442 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 1) {
443 return arguments
.length
<= 2 ? undefined : arguments
[2];
444 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 2) {
445 return arguments
.length
<= 3 ? undefined : arguments
[3];
446 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 >= 3 && (arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 <= 10) {
447 return arguments
.length
<= 4 ? undefined : arguments
[4];
448 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 >= 11) {
449 return arguments
.length
<= 5 ? undefined : arguments
[5];
451 return arguments
.length
<= 6 ? undefined : arguments
[6];
454 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 1) {
455 return arguments
.length
<= 1 ? undefined : arguments
[1];
456 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 0 || (arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 > 1 && (arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 < 11) {
457 return arguments
.length
<= 2 ? undefined : arguments
[2];
458 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 > 10 && (arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 < 20) {
459 return arguments
.length
<= 3 ? undefined : arguments
[3];
461 return arguments
.length
<= 4 ? undefined : arguments
[4];
464 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 10 === 1) {
465 return arguments
.length
<= 1 ? undefined : arguments
[1];
466 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 10 === 2) {
467 return arguments
.length
<= 2 ? undefined : arguments
[2];
469 return arguments
.length
<= 3 ? undefined : arguments
[3];
472 return (arguments
.length
<= 0 ? undefined : arguments
[0]) !== 11 && (arguments
.length
<= 0 ? undefined : arguments
[0]) % 10 === 1 ? arguments
.length
<= 1 ? undefined : arguments
[1] : arguments
.length
<= 2 ? undefined : arguments
[2];
474 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 1) {
475 return arguments
.length
<= 1 ? undefined : arguments
[1];
476 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 10 >= 2 && (arguments
.length
<= 0 ? undefined : arguments
[0]) % 10 <= 4 && ((arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 < 10 || (arguments
.length
<= 0 ? undefined : arguments
[0]) % 100 >= 20)) {
477 return arguments
.length
<= 2 ? undefined : arguments
[2];
479 return arguments
.length
<= 3 ? undefined : arguments
[3];
482 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 1) {
483 return arguments
.length
<= 1 ? undefined : arguments
[1];
484 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 2) {
485 return arguments
.length
<= 2 ? undefined : arguments
[2];
486 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) !== 8 && (arguments
.length
<= 0 ? undefined : arguments
[0]) !== 11) {
487 return arguments
.length
<= 3 ? undefined : arguments
[3];
489 return arguments
.length
<= 4 ? undefined : arguments
[4];
492 return (arguments
.length
<= 0 ? undefined : arguments
[0]) === 0 ? arguments
.length
<= 1 ? undefined : arguments
[1] : arguments
.length
<= 2 ? undefined : arguments
[2];
494 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 1) {
495 return arguments
.length
<= 1 ? undefined : arguments
[1];
496 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 2) {
497 return arguments
.length
<= 2 ? undefined : arguments
[2];
498 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 3) {
499 return arguments
.length
<= 3 ? undefined : arguments
[3];
501 return arguments
.length
<= 4 ? undefined : arguments
[4];
504 if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 0) {
505 return arguments
.length
<= 1 ? undefined : arguments
[1];
506 } else if ((arguments
.length
<= 0 ? undefined : arguments
[0]) === 1) {
507 return arguments
.length
<= 2 ? undefined : arguments
[2];
509 return arguments
.length
<= 3 ? undefined : arguments
[3];
514 return _pluralForms
[form
].apply(null, [number
].concat(input
));
517 if (i18n
[language
] !== undefined) {
518 str
= i18n
[language
][message
];
519 if (pluralParam
!== null && typeof pluralParam
=== 'number') {
520 pluralForm
= i18n
[language
]['mejs.plural-form'];
521 str
= _plural
.apply(null, [str
, pluralParam
, pluralForm
]);
525 if (!str
&& i18n
.en
) {
526 str
= i18n
.en
[message
];
527 if (pluralParam
!== null && typeof pluralParam
=== 'number') {
528 pluralForm
= i18n
.en
['mejs.plural-form'];
529 str
= _plural
.apply(null, [str
, pluralParam
, pluralForm
]);
533 str
= str
|| message
;
535 if (pluralParam
!== null && typeof pluralParam
=== 'number') {
536 str
= str
.replace('%1', pluralParam
);
539 return (0, _general
.escapeHTML
)(str
);
545 _mejs2
.default.i18n
= i18n
;
547 if (typeof mejsL10n
!== 'undefined') {
548 _mejs2
.default.i18n
.language(mejsL10n
.language
, mejsL10n
.strings
);
551 exports
.default = i18n
;
553 },{"15":15,"27":27,"7":7}],6:[function(_dereq_
,module
,exports
){
556 Object
.defineProperty(exports
, "__esModule", {
560 var _typeof
= typeof Symbol
=== "function" && typeof Symbol
.iterator
=== "symbol" ? function (obj
) { return typeof obj
; } : function (obj
) { return obj
&& typeof Symbol
=== "function" && obj
.constructor === Symbol
&& obj
!== Symbol
.prototype ? "symbol" : typeof obj
; };
562 var _window
= _dereq_(3);
564 var _window2
= _interopRequireDefault(_window
);
566 var _document
= _dereq_(2);
568 var _document2
= _interopRequireDefault(_document
);
570 var _mejs
= _dereq_(7);
572 var _mejs2
= _interopRequireDefault(_mejs
);
574 var _general
= _dereq_(27);
576 var _media2
= _dereq_(28);
578 var _renderer
= _dereq_(8);
580 var _constants
= _dereq_(25);
582 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
584 function _classCallCheck(instance
, Constructor
) { if (!(instance
instanceof Constructor
)) { throw new TypeError("Cannot call a class as a function"); } }
586 var MediaElement
= function MediaElement(idOrNode
, options
, sources
) {
589 _classCallCheck(this, MediaElement
);
593 sources
= Array
.isArray(sources
) ? sources
: null;
598 fakeNodeName
: 'mediaelementwrapper',
600 pluginPath
: 'build/',
602 shimScriptAccess
: 'sameDomain'
605 options
= Object
.assign(t
.defaults
, options
);
607 t
.mediaElement
= _document2
.default.createElement(options
.fakeNodeName
);
612 if (typeof idOrNode
=== 'string') {
613 t
.mediaElement
.originalNode
= _document2
.default.getElementById(idOrNode
);
615 t
.mediaElement
.originalNode
= idOrNode
;
619 if (t
.mediaElement
.originalNode
=== undefined || t
.mediaElement
.originalNode
=== null) {
623 t
.mediaElement
.options
= options
;
624 id
= id
|| 'mejs_' + Math
.random().toString().slice(2);
626 t
.mediaElement
.originalNode
.setAttribute('id', id
+ '_from_mejs');
628 var tagName
= t
.mediaElement
.originalNode
.tagName
.toLowerCase();
629 if (['video', 'audio'].indexOf(tagName
) > -1 && !t
.mediaElement
.originalNode
.getAttribute('preload')) {
630 t
.mediaElement
.originalNode
.setAttribute('preload', 'none');
633 t
.mediaElement
.originalNode
.parentNode
.insertBefore(t
.mediaElement
, t
.mediaElement
.originalNode
);
635 t
.mediaElement
.appendChild(t
.mediaElement
.originalNode
);
637 var processURL
= function processURL(url
, type
) {
638 if (_window2
.default.location
.protocol
=== 'https:' && url
.indexOf('http:') === 0 && _constants
.IS_IOS
&& _mejs2
.default.html5media
.mediaTypes
.indexOf(type
) > -1) {
639 var xhr
= new XMLHttpRequest();
640 xhr
.onreadystatechange = function () {
641 if (this.readyState
=== 4 && this.status
=== 200) {
642 var _url
= _window2
.default.URL
|| _window2
.default.webkitURL
,
643 blobUrl
= _url
.createObjectURL(this.response
);
644 t
.mediaElement
.originalNode
.setAttribute('src', blobUrl
);
649 xhr
.open('GET', url
);
650 xhr
.responseType
= 'blob';
657 var mediaFiles
= void 0;
659 if (sources
!== null) {
660 mediaFiles
= sources
;
661 } else if (t
.mediaElement
.originalNode
!== null) {
665 switch (t
.mediaElement
.originalNode
.nodeName
.toLowerCase()) {
669 src
: t
.mediaElement
.originalNode
.getAttribute('src')
674 var _sources
= t
.mediaElement
.originalNode
.children
.length
,
675 nodeSource
= t
.mediaElement
.originalNode
.getAttribute('src');
678 var node
= t
.mediaElement
.originalNode
,
679 type
= (0, _media2
.formatType
)(nodeSource
, node
.getAttribute('type'));
682 src
: processURL(nodeSource
, type
)
686 for (var i
= 0; i
< _sources
; i
++) {
687 var n
= t
.mediaElement
.originalNode
.children
[i
];
688 if (n
.tagName
.toLowerCase() === 'source') {
689 var src
= n
.getAttribute('src'),
690 _type
= (0, _media2
.formatType
)(src
, n
.getAttribute('type'));
691 mediaFiles
.push({ type
: _type
, src
: processURL(src
, _type
) });
698 t
.mediaElement
.id
= id
;
699 t
.mediaElement
.renderers
= {};
700 t
.mediaElement
.events
= {};
701 t
.mediaElement
.promises
= [];
702 t
.mediaElement
.renderer
= null;
703 t
.mediaElement
.rendererName
= null;
705 t
.mediaElement
.changeRenderer = function (rendererName
, mediaFiles
) {
708 media
= Object
.keys(mediaFiles
[0]).length
> 2 ? mediaFiles
[0] : mediaFiles
[0].src
;
710 if (t
.mediaElement
.renderer
!== undefined && t
.mediaElement
.renderer
!== null && t
.mediaElement
.renderer
.name
=== rendererName
) {
711 t
.mediaElement
.renderer
.pause();
712 if (t
.mediaElement
.renderer
.stop
) {
713 t
.mediaElement
.renderer
.stop();
715 t
.mediaElement
.renderer
.show();
716 t
.mediaElement
.renderer
.setSrc(media
);
720 if (t
.mediaElement
.renderer
!== undefined && t
.mediaElement
.renderer
!== null) {
721 t
.mediaElement
.renderer
.pause();
722 if (t
.mediaElement
.renderer
.stop
) {
723 t
.mediaElement
.renderer
.stop();
725 t
.mediaElement
.renderer
.hide();
728 var newRenderer
= t
.mediaElement
.renderers
[rendererName
],
729 newRendererType
= null;
731 if (newRenderer
!== undefined && newRenderer
!== null) {
733 newRenderer
.setSrc(media
);
734 t
.mediaElement
.renderer
= newRenderer
;
735 t
.mediaElement
.rendererName
= rendererName
;
739 var rendererArray
= t
.mediaElement
.options
.renderers
.length
? t
.mediaElement
.options
.renderers
: _renderer
.renderer
.order
;
741 for (var _i
= 0, total
= rendererArray
.length
; _i
< total
; _i
++) {
742 var index
= rendererArray
[_i
];
744 if (index
=== rendererName
) {
745 var rendererList
= _renderer
.renderer
.renderers
;
746 newRendererType
= rendererList
[index
];
748 var renderOptions
= Object
.assign(newRendererType
.options
, t
.mediaElement
.options
);
749 newRenderer
= newRendererType
.create(t
.mediaElement
, renderOptions
, mediaFiles
);
750 newRenderer
.name
= rendererName
;
752 t
.mediaElement
.renderers
[newRendererType
.name
] = newRenderer
;
753 t
.mediaElement
.renderer
= newRenderer
;
754 t
.mediaElement
.rendererName
= rendererName
;
763 t
.mediaElement
.setSize = function (width
, height
) {
764 if (t
.mediaElement
.renderer
!== undefined && t
.mediaElement
.renderer
!== null) {
765 t
.mediaElement
.renderer
.setSize(width
, height
);
769 t
.mediaElement
.generateError = function (message
, urlList
) {
770 message
= message
|| '';
771 urlList
= Array
.isArray(urlList
) ? urlList
: [];
772 var event
= (0, _general
.createEvent
)('error', t
.mediaElement
);
773 event
.message
= message
;
774 event
.urls
= urlList
;
775 t
.mediaElement
.dispatchEvent(event
);
779 var props
= _mejs2
.default.html5media
.properties
,
780 methods
= _mejs2
.default.html5media
.methods
,
781 addProperty
= function addProperty(obj
, name
, onGet
, onSet
) {
782 var oldValue
= obj
[name
];
783 var getFn
= function getFn() {
784 return onGet
.apply(obj
, [oldValue
]);
786 setFn
= function setFn(newValue
) {
787 oldValue
= onSet
.apply(obj
, [newValue
]);
791 Object
.defineProperty(obj
, name
, {
796 assignGettersSetters
= function assignGettersSetters(propName
) {
797 if (propName
!== 'src') {
799 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1),
800 getFn
= function getFn() {
801 return t
.mediaElement
.renderer
!== undefined && t
.mediaElement
.renderer
!== null && typeof t
.mediaElement
.renderer
['get' + capName
] === 'function' ? t
.mediaElement
.renderer
['get' + capName
]() : null;
803 setFn
= function setFn(value
) {
804 if (t
.mediaElement
.renderer
!== undefined && t
.mediaElement
.renderer
!== null && typeof t
.mediaElement
.renderer
['set' + capName
] === 'function') {
805 t
.mediaElement
.renderer
['set' + capName
](value
);
809 addProperty(t
.mediaElement
, propName
, getFn
, setFn
);
810 t
.mediaElement
['get' + capName
] = getFn
;
811 t
.mediaElement
['set' + capName
] = setFn
;
814 getSrc
= function getSrc() {
815 return t
.mediaElement
.renderer
!== undefined && t
.mediaElement
.renderer
!== null ? t
.mediaElement
.renderer
.getSrc() : null;
817 setSrc
= function setSrc(value
) {
820 if (typeof value
=== 'string') {
823 type
: value
? (0, _media2
.getTypeFromFile
)(value
) : ''
825 } else if ((typeof value
=== 'undefined' ? 'undefined' : _typeof(value
)) === 'object' && value
.src
!== undefined) {
826 var _src
= (0, _media2
.absolutizeUrl
)(value
.src
),
828 media
= Object
.assign(value
, {
830 type
: (_type2
=== '' || _type2
=== null || _type2
=== undefined) && _src
? (0, _media2
.getTypeFromFile
)(_src
) : _type2
832 mediaFiles
.push(media
);
833 } else if (Array
.isArray(value
)) {
834 for (var _i2
= 0, total
= value
.length
; _i2
< total
; _i2
++) {
836 var _src2
= (0, _media2
.absolutizeUrl
)(value
[_i2
].src
),
837 _type3
= value
[_i2
].type
,
838 _media
= Object
.assign(value
[_i2
], {
840 type
: (_type3
=== '' || _type3
=== null || _type3
=== undefined) && _src2
? (0, _media2
.getTypeFromFile
)(_src2
) : _type3
843 mediaFiles
.push(_media
);
847 var renderInfo
= _renderer
.renderer
.select(mediaFiles
, t
.mediaElement
.options
.renderers
.length
? t
.mediaElement
.options
.renderers
: []),
850 if (!t
.mediaElement
.paused
) {
851 t
.mediaElement
.pause();
852 event
= (0, _general
.createEvent
)('pause', t
.mediaElement
);
853 t
.mediaElement
.dispatchEvent(event
);
855 t
.mediaElement
.originalNode
.src
= mediaFiles
[0].src
|| '';
857 if (renderInfo
=== null && mediaFiles
[0].src
) {
858 t
.mediaElement
.generateError('No renderer found', mediaFiles
);
862 return mediaFiles
[0].src
? t
.mediaElement
.changeRenderer(renderInfo
.rendererName
, mediaFiles
) : null;
864 triggerAction
= function triggerAction(methodName
, args
) {
866 if (methodName
=== 'play' && t
.mediaElement
.rendererName
=== 'native_dash') {
867 setTimeout(function () {
868 t
.mediaElement
.renderer
[methodName
](args
);
871 t
.mediaElement
.renderer
[methodName
](args
);
874 t
.mediaElement
.generateError(e
, mediaFiles
);
877 assignMethods
= function assignMethods(methodName
) {
878 t
.mediaElement
[methodName
] = function () {
879 for (var _len
= arguments
.length
, args
= Array(_len
), _key
= 0; _key
< _len
; _key
++) {
880 args
[_key
] = arguments
[_key
];
883 if (t
.mediaElement
.renderer
!== undefined && t
.mediaElement
.renderer
!== null && typeof t
.mediaElement
.renderer
[methodName
] === 'function') {
884 if (t
.mediaElement
.promises
.length
) {
885 Promise
.all(t
.mediaElement
.promises
).then(function () {
886 triggerAction(methodName
, args
);
887 }).catch(function (e
) {
888 t
.mediaElement
.generateError(e
, mediaFiles
);
891 triggerAction(methodName
, args
);
898 addProperty(t
.mediaElement
, 'src', getSrc
, setSrc
);
899 t
.mediaElement
.getSrc
= getSrc
;
900 t
.mediaElement
.setSrc
= setSrc
;
902 for (var _i3
= 0, total
= props
.length
; _i3
< total
; _i3
++) {
903 assignGettersSetters(props
[_i3
]);
906 for (var _i4
= 0, _total
= methods
.length
; _i4
< _total
; _i4
++) {
907 assignMethods(methods
[_i4
]);
910 t
.mediaElement
.addEventListener = function (eventName
, callback
) {
911 t
.mediaElement
.events
[eventName
] = t
.mediaElement
.events
[eventName
] || [];
913 t
.mediaElement
.events
[eventName
].push(callback
);
915 t
.mediaElement
.removeEventListener = function (eventName
, callback
) {
917 t
.mediaElement
.events
= {};
921 var callbacks
= t
.mediaElement
.events
[eventName
];
928 t
.mediaElement
.events
[eventName
] = [];
932 for (var _i5
= 0; _i5
< callbacks
.length
; _i5
++) {
933 if (callbacks
[_i5
] === callback
) {
934 t
.mediaElement
.events
[eventName
].splice(_i5
, 1);
941 t
.mediaElement
.dispatchEvent = function (event
) {
942 var callbacks
= t
.mediaElement
.events
[event
.type
];
944 for (var _i6
= 0; _i6
< callbacks
.length
; _i6
++) {
945 callbacks
[_i6
].apply(null, [event
]);
950 if (mediaFiles
.length
) {
951 t
.mediaElement
.src
= mediaFiles
;
954 if (t
.mediaElement
.promises
.length
) {
955 Promise
.all(t
.mediaElement
.promises
).then(function () {
956 if (t
.mediaElement
.options
.success
) {
957 t
.mediaElement
.options
.success(t
.mediaElement
, t
.mediaElement
.originalNode
);
959 }).catch(function () {
960 if (error
&& t
.mediaElement
.options
.error
) {
961 t
.mediaElement
.options
.error(t
.mediaElement
, t
.mediaElement
.originalNode
);
965 if (t
.mediaElement
.options
.success
) {
966 t
.mediaElement
.options
.success(t
.mediaElement
, t
.mediaElement
.originalNode
);
969 if (error
&& t
.mediaElement
.options
.error
) {
970 t
.mediaElement
.options
.error(t
.mediaElement
, t
.mediaElement
.originalNode
);
974 return t
.mediaElement
;
977 _window2
.default.MediaElement
= MediaElement
;
979 exports
.default = MediaElement
;
981 },{"2":2,"25":25,"27":27,"28":28,"3":3,"7":7,"8":8}],7:[function(_dereq_
,module
,exports
){
984 Object
.defineProperty(exports
, "__esModule", {
988 var _window
= _dereq_(3);
990 var _window2
= _interopRequireDefault(_window
);
992 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
996 mejs
.version
= '4.2.5';
999 properties
: ['volume', 'src', 'currentTime', 'muted', 'duration', 'paused', 'ended', 'buffered', 'error', 'networkState', 'readyState', 'seeking', 'seekable', 'currentSrc', 'preload', 'bufferedBytes', 'bufferedTime', 'initialTime', 'startOffsetTime', 'defaultPlaybackRate', 'playbackRate', 'played', 'autoplay', 'loop', 'controls'],
1000 readOnlyProperties
: ['duration', 'paused', 'ended', 'buffered', 'error', 'networkState', 'readyState', 'seeking', 'seekable'],
1002 methods
: ['load', 'play', 'pause', 'canPlayType'],
1004 events
: ['loadstart', 'durationchange', 'loadedmetadata', 'loadeddata', 'progress', 'canplay', 'canplaythrough', 'suspend', 'abort', 'error', 'emptied', 'stalled', 'play', 'playing', 'pause', 'waiting', 'seeking', 'seeked', 'timeupdate', 'ended', 'ratechange', 'volumechange'],
1006 mediaTypes
: ['audio/mp3', 'audio/ogg', 'audio/oga', 'audio/wav', 'audio/x-wav', 'audio/wave', 'audio/x-pn-wav', 'audio/mpeg', 'audio/mp4', 'video/mp4', 'video/webm', 'video/ogg', 'video/ogv']
1009 _window2
.default.mejs
= mejs
;
1011 exports
.default = mejs
;
1013 },{"3":3}],8:[function(_dereq_
,module
,exports
){
1016 Object
.defineProperty(exports
, "__esModule", {
1019 exports
.renderer
= undefined;
1021 var _typeof
= typeof Symbol
=== "function" && typeof Symbol
.iterator
=== "symbol" ? function (obj
) { return typeof obj
; } : function (obj
) { return obj
&& typeof Symbol
=== "function" && obj
.constructor === Symbol
&& obj
!== Symbol
.prototype ? "symbol" : typeof obj
; };
1023 var _createClass = function () { function defineProperties(target
, props
) { for (var i
= 0; i
< props
.length
; i
++) { var descriptor
= props
[i
]; descriptor
.enumerable
= descriptor
.enumerable
|| false; descriptor
.configurable
= true; if ("value" in descriptor
) descriptor
.writable
= true; Object
.defineProperty(target
, descriptor
.key
, descriptor
); } } return function (Constructor
, protoProps
, staticProps
) { if (protoProps
) defineProperties(Constructor
.prototype, protoProps
); if (staticProps
) defineProperties(Constructor
, staticProps
); return Constructor
; }; }();
1025 var _mejs
= _dereq_(7);
1027 var _mejs2
= _interopRequireDefault(_mejs
);
1029 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
1031 function _classCallCheck(instance
, Constructor
) { if (!(instance
instanceof Constructor
)) { throw new TypeError("Cannot call a class as a function"); } }
1033 var Renderer = function () {
1034 function Renderer() {
1035 _classCallCheck(this, Renderer
);
1037 this.renderers
= {};
1041 _createClass(Renderer
, [{
1043 value
: function add(renderer
) {
1044 if (renderer
.name
=== undefined) {
1045 throw new TypeError('renderer must contain at least `name` property');
1048 this.renderers
[renderer
.name
] = renderer
;
1049 this.order
.push(renderer
.name
);
1053 value
: function select(mediaFiles
) {
1054 var renderers
= arguments
.length
> 1 && arguments
[1] !== undefined ? arguments
[1] : [];
1056 var renderersLength
= renderers
.length
;
1058 renderers
= renderers
.length
? renderers
: this.order
;
1060 if (!renderersLength
) {
1061 var rendererIndicator
= [/^(html5|native)/i, /^flash/i, /iframe$/i],
1062 rendererRanking
= function rendererRanking(renderer
) {
1063 for (var i
= 0, total
= rendererIndicator
.length
; i
< total
; i
++) {
1064 if (rendererIndicator
[i
].test(renderer
)) {
1068 return rendererIndicator
.length
;
1071 renderers
.sort(function (a
, b
) {
1072 return rendererRanking(a
) - rendererRanking(b
);
1076 for (var i
= 0, total
= renderers
.length
; i
< total
; i
++) {
1077 var key
= renderers
[i
],
1078 _renderer
= this.renderers
[key
];
1080 if (_renderer
!== null && _renderer
!== undefined) {
1081 for (var j
= 0, jl
= mediaFiles
.length
; j
< jl
; j
++) {
1082 if (typeof _renderer
.canPlayType
=== 'function' && typeof mediaFiles
[j
].type
=== 'string' && _renderer
.canPlayType(mediaFiles
[j
].type
)) {
1084 rendererName
: _renderer
.name
,
1085 src
: mediaFiles
[j
].src
1096 set: function set(order
) {
1097 if (!Array
.isArray(order
)) {
1098 throw new TypeError('order must be an array of strings.');
1101 this._order
= order
;
1103 get: function get() {
1108 set: function set(renderers
) {
1109 if (renderers
!== null && (typeof renderers
=== 'undefined' ? 'undefined' : _typeof(renderers
)) !== 'object') {
1110 throw new TypeError('renderers must be an array of objects.');
1113 this._renderers
= renderers
;
1115 get: function get() {
1116 return this._renderers
;
1123 var renderer
= exports
.renderer
= new Renderer();
1125 _mejs2
.default.Renderers
= renderer
;
1127 },{"7":7}],9:[function(_dereq_
,module
,exports
){
1130 var _window
= _dereq_(3);
1132 var _window2
= _interopRequireDefault(_window
);
1134 var _document
= _dereq_(2);
1136 var _document2
= _interopRequireDefault(_document
);
1138 var _i18n
= _dereq_(5);
1140 var _i18n2
= _interopRequireDefault(_i18n
);
1142 var _player
= _dereq_(16);
1144 var _player2
= _interopRequireDefault(_player
);
1146 var _constants
= _dereq_(25);
1148 var Features
= _interopRequireWildcard(_constants
);
1150 var _general
= _dereq_(27);
1152 var _dom
= _dereq_(26);
1154 var _media
= _dereq_(28);
1156 function _interopRequireWildcard(obj
) { if (obj
&& obj
.__esModule
) { return obj
; } else { var newObj
= {}; if (obj
!= null) { for (var key
in obj
) { if (Object
.prototype.hasOwnProperty
.call(obj
, key
)) newObj
[key
] = obj
[key
]; } } newObj
.default = obj
; return newObj
; } }
1158 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
1160 Object
.assign(_player
.config
, {
1161 usePluginFullScreen
: true,
1163 fullscreenText
: null,
1165 useFakeFullscreen
: false
1168 Object
.assign(_player2
.default.prototype, {
1169 isFullScreen
: false,
1171 isNativeFullScreen
: false,
1175 isPluginClickThroughCreated
: false,
1179 containerSizeTimeout
: null,
1181 buildfullscreen
: function buildfullscreen(player
) {
1182 if (!player
.isVideo
) {
1186 player
.isInIframe
= _window2
.default.location
!== _window2
.default.parent
.location
;
1188 player
.detectFullscreenMode();
1191 fullscreenTitle
= (0, _general
.isString
)(t
.options
.fullscreenText
) ? t
.options
.fullscreenText
: _i18n2
.default.t('mejs.fullscreen'),
1192 fullscreenBtn
= _document2
.default.createElement('div');
1194 fullscreenBtn
.className
= t
.options
.classPrefix
+ 'button ' + t
.options
.classPrefix
+ 'fullscreen-button';
1195 fullscreenBtn
.innerHTML
= '<button type="button" aria-controls="' + t
.id
+ '" title="' + fullscreenTitle
+ '" aria-label="' + fullscreenTitle
+ '" tabindex="0"></button>';
1196 t
.addControlElement(fullscreenBtn
, 'fullscreen');
1198 fullscreenBtn
.addEventListener('click', function () {
1199 var isFullScreen
= Features
.HAS_TRUE_NATIVE_FULLSCREEN
&& Features
.IS_FULLSCREEN
|| player
.isFullScreen
;
1202 player
.exitFullScreen();
1204 player
.enterFullScreen();
1208 player
.fullscreenBtn
= fullscreenBtn
;
1210 t
.exitFullscreenCallback = function (e
) {
1211 var key
= e
.which
|| e
.keyCode
|| 0;
1212 if (key
=== 27 && (Features
.HAS_TRUE_NATIVE_FULLSCREEN
&& Features
.IS_FULLSCREEN
|| t
.isFullScreen
)) {
1213 player
.exitFullScreen();
1217 t
.globalBind('keydown', t
.exitFullscreenCallback
);
1222 if (Features
.HAS_TRUE_NATIVE_FULLSCREEN
) {
1223 var fullscreenChanged
= function fullscreenChanged() {
1224 if (player
.isFullScreen
) {
1225 if (Features
.isFullScreen()) {
1226 player
.isNativeFullScreen
= true;
1228 player
.setControlsSize();
1230 player
.isNativeFullScreen
= false;
1232 player
.exitFullScreen();
1237 player
.globalBind(Features
.FULLSCREEN_EVENT_NAME
, fullscreenChanged
);
1240 cleanfullscreen
: function cleanfullscreen(player
) {
1241 player
.exitFullScreen();
1242 player
.globalUnbind('keydown', player
.exitFullscreenCallback
);
1244 detectFullscreenMode
: function detectFullscreenMode() {
1246 isNative
= t
.media
.rendererName
!== null && /(native|html5)/i.test(t
.media
.rendererName
);
1250 if (Features
.HAS_TRUE_NATIVE_FULLSCREEN
&& isNative
) {
1251 mode
= 'native-native';
1252 } else if (Features
.HAS_TRUE_NATIVE_FULLSCREEN
&& !isNative
) {
1253 mode
= 'plugin-native';
1254 } else if (t
.usePluginFullScreen
&& Features
.SUPPORT_POINTER_EVENTS
) {
1255 mode
= 'plugin-click';
1258 t
.fullscreenMode
= mode
;
1261 enterFullScreen
: function enterFullScreen() {
1263 isNative
= t
.media
.rendererName
!== null && /(html5|native)/i.test(t
.media
.rendererName
),
1264 containerStyles
= getComputedStyle(t
.container
);
1266 if (t
.options
.useFakeFullscreen
=== false && Features
.IS_IOS
&& Features
.HAS_IOS_FULLSCREEN
&& typeof t
.media
.originalNode
.webkitEnterFullscreen
=== 'function' && t
.media
.originalNode
.canPlayType((0, _media
.getTypeFromFile
)(t
.media
.getSrc()))) {
1267 t
.media
.originalNode
.webkitEnterFullscreen();
1271 (0, _dom
.addClass
)(_document2
.default.documentElement
, t
.options
.classPrefix
+ 'fullscreen');
1272 (0, _dom
.addClass
)(t
.container
, t
.options
.classPrefix
+ 'container-fullscreen');
1274 t
.normalHeight
= parseFloat(containerStyles
.height
);
1275 t
.normalWidth
= parseFloat(containerStyles
.width
);
1277 if (t
.fullscreenMode
=== 'native-native' || t
.fullscreenMode
=== 'plugin-native') {
1278 Features
.requestFullScreen(t
.container
);
1281 setTimeout(function checkFullscreen() {
1283 if (t
.isNativeFullScreen
) {
1284 var percentErrorMargin
= 0.002,
1285 windowWidth
= _window2
.default.innerWidth
|| _document2
.default.documentElement
.clientWidth
|| _document2
.default.body
.clientWidth
,
1286 screenWidth
= screen
.width
,
1287 absDiff
= Math
.abs(screenWidth
- windowWidth
),
1288 marginError
= screenWidth
* percentErrorMargin
;
1290 if (absDiff
> marginError
) {
1293 setTimeout(checkFullscreen
, 500);
1300 t
.container
.style
.width
= '100%';
1301 t
.container
.style
.height
= '100%';
1303 t
.containerSizeTimeout
= setTimeout(function () {
1304 t
.container
.style
.width
= '100%';
1305 t
.container
.style
.height
= '100%';
1306 t
.setControlsSize();
1310 t
.node
.style
.width
= '100%';
1311 t
.node
.style
.height
= '100%';
1313 var elements
= t
.container
.querySelectorAll('embed, object, video'),
1314 _total
= elements
.length
;
1315 for (var i
= 0; i
< _total
; i
++) {
1316 elements
[i
].style
.width
= '100%';
1317 elements
[i
].style
.height
= '100%';
1321 if (t
.options
.setDimensions
&& typeof t
.media
.setSize
=== 'function') {
1322 t
.media
.setSize(screen
.width
, screen
.height
);
1325 var layers
= t
.layers
.children
,
1326 total
= layers
.length
;
1327 for (var _i
= 0; _i
< total
; _i
++) {
1328 layers
[_i
].style
.width
= '100%';
1329 layers
[_i
].style
.height
= '100%';
1332 if (t
.fullscreenBtn
) {
1333 (0, _dom
.removeClass
)(t
.fullscreenBtn
, t
.options
.classPrefix
+ 'fullscreen');
1334 (0, _dom
.addClass
)(t
.fullscreenBtn
, t
.options
.classPrefix
+ 'unfullscreen');
1337 t
.setControlsSize();
1338 t
.isFullScreen
= true;
1340 var zoomFactor
= Math
.min(screen
.width
/ t
.width
, screen
.height
/ t
.height
),
1341 captionText
= t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'captions-text');
1343 captionText
.style
.fontSize
= zoomFactor
* 100 + '%';
1344 captionText
.style
.lineHeight
= 'normal';
1345 t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'captions-position').style
.bottom
= '45px';
1347 var event
= (0, _general
.createEvent
)('enteredfullscreen', t
.container
);
1348 t
.container
.dispatchEvent(event
);
1350 exitFullScreen
: function exitFullScreen() {
1352 isNative
= t
.media
.rendererName
!== null && /(native|html5)/i.test(t
.media
.rendererName
);
1354 clearTimeout(t
.containerSizeTimeout
);
1356 if (Features
.HAS_TRUE_NATIVE_FULLSCREEN
&& (Features
.IS_FULLSCREEN
|| t
.isFullScreen
)) {
1357 Features
.cancelFullScreen();
1360 (0, _dom
.removeClass
)(_document2
.default.documentElement
, t
.options
.classPrefix
+ 'fullscreen');
1361 (0, _dom
.removeClass
)(t
.container
, t
.options
.classPrefix
+ 'container-fullscreen');
1363 if (t
.options
.setDimensions
) {
1364 t
.container
.style
.width
= t
.normalWidth
+ 'px';
1365 t
.container
.style
.height
= t
.normalHeight
+ 'px';
1368 t
.node
.style
.width
= t
.normalWidth
+ 'px';
1369 t
.node
.style
.height
= t
.normalHeight
+ 'px';
1371 var elements
= t
.container
.querySelectorAll('embed, object, video'),
1372 _total2
= elements
.length
;
1373 for (var i
= 0; i
< _total2
; i
++) {
1374 elements
[i
].style
.width
= t
.normalWidth
+ 'px';
1375 elements
[i
].style
.height
= t
.normalHeight
+ 'px';
1379 if (typeof t
.media
.setSize
=== 'function') {
1380 t
.media
.setSize(t
.normalWidth
, t
.normalHeight
);
1383 var layers
= t
.layers
.children
,
1384 total
= layers
.length
;
1385 for (var _i2
= 0; _i2
< total
; _i2
++) {
1386 layers
[_i2
].style
.width
= t
.normalWidth
+ 'px';
1387 layers
[_i2
].style
.height
= t
.normalHeight
+ 'px';
1391 if (t
.fullscreenBtn
) {
1392 (0, _dom
.removeClass
)(t
.fullscreenBtn
, t
.options
.classPrefix
+ 'unfullscreen');
1393 (0, _dom
.addClass
)(t
.fullscreenBtn
, t
.options
.classPrefix
+ 'fullscreen');
1396 t
.setControlsSize();
1397 t
.isFullScreen
= false;
1399 var captionText
= t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'captions-text');
1401 captionText
.style
.fontSize
= '';
1402 captionText
.style
.lineHeight
= '';
1403 t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'captions-position').style
.bottom
= '';
1405 var event
= (0, _general
.createEvent
)('exitedfullscreen', t
.container
);
1406 t
.container
.dispatchEvent(event
);
1410 },{"16":16,"2":2,"25":25,"26":26,"27":27,"28":28,"3":3,"5":5}],10:[function(_dereq_
,module
,exports
){
1413 var _document
= _dereq_(2);
1415 var _document2
= _interopRequireDefault(_document
);
1417 var _player
= _dereq_(16);
1419 var _player2
= _interopRequireDefault(_player
);
1421 var _i18n
= _dereq_(5);
1423 var _i18n2
= _interopRequireDefault(_i18n
);
1425 var _general
= _dereq_(27);
1427 var _dom
= _dereq_(26);
1429 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
1431 Object
.assign(_player
.config
, {
1437 Object
.assign(_player2
.default.prototype, {
1438 buildplaypause
: function buildplaypause(player
, controls
, layers
, media
) {
1441 playTitle
= (0, _general
.isString
)(op
.playText
) ? op
.playText
: _i18n2
.default.t('mejs.play'),
1442 pauseTitle
= (0, _general
.isString
)(op
.pauseText
) ? op
.pauseText
: _i18n2
.default.t('mejs.pause'),
1443 play
= _document2
.default.createElement('div');
1445 play
.className
= t
.options
.classPrefix
+ 'button ' + t
.options
.classPrefix
+ 'playpause-button ' + t
.options
.classPrefix
+ 'play';
1446 play
.innerHTML
= '<button type="button" aria-controls="' + t
.id
+ '" title="' + playTitle
+ '" aria-label="' + pauseTitle
+ '" tabindex="0"></button>';
1447 play
.addEventListener('click', function () {
1455 var playBtn
= play
.querySelector('button');
1456 t
.addControlElement(play
, 'playpause');
1458 function togglePlayPause(which
) {
1459 if ('play' === which
) {
1460 (0, _dom
.removeClass
)(play
, t
.options
.classPrefix
+ 'play');
1461 (0, _dom
.removeClass
)(play
, t
.options
.classPrefix
+ 'replay');
1462 (0, _dom
.addClass
)(play
, t
.options
.classPrefix
+ 'pause');
1463 playBtn
.setAttribute('title', pauseTitle
);
1464 playBtn
.setAttribute('aria-label', pauseTitle
);
1467 (0, _dom
.removeClass
)(play
, t
.options
.classPrefix
+ 'pause');
1468 (0, _dom
.removeClass
)(play
, t
.options
.classPrefix
+ 'replay');
1469 (0, _dom
.addClass
)(play
, t
.options
.classPrefix
+ 'play');
1470 playBtn
.setAttribute('title', playTitle
);
1471 playBtn
.setAttribute('aria-label', playTitle
);
1475 togglePlayPause('pse');
1477 media
.addEventListener('loadedmetadata', function () {
1478 if (media
.rendererName
.indexOf('flash') === -1) {
1479 togglePlayPause('pse');
1482 media
.addEventListener('play', function () {
1483 togglePlayPause('play');
1485 media
.addEventListener('playing', function () {
1486 togglePlayPause('play');
1488 media
.addEventListener('pause', function () {
1489 togglePlayPause('pse');
1491 media
.addEventListener('ended', function () {
1492 if (!player
.options
.loop
) {
1493 (0, _dom
.removeClass
)(play
, t
.options
.classPrefix
+ 'pause');
1494 (0, _dom
.removeClass
)(play
, t
.options
.classPrefix
+ 'play');
1495 (0, _dom
.addClass
)(play
, t
.options
.classPrefix
+ 'replay');
1496 playBtn
.setAttribute('title', playTitle
);
1497 playBtn
.setAttribute('aria-label', playTitle
);
1503 },{"16":16,"2":2,"26":26,"27":27,"5":5}],11:[function(_dereq_
,module
,exports
){
1506 var _document
= _dereq_(2);
1508 var _document2
= _interopRequireDefault(_document
);
1510 var _player
= _dereq_(16);
1512 var _player2
= _interopRequireDefault(_player
);
1514 var _i18n
= _dereq_(5);
1516 var _i18n2
= _interopRequireDefault(_i18n
);
1518 var _constants
= _dereq_(25);
1520 var _time
= _dereq_(30);
1522 var _dom
= _dereq_(26);
1524 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
1526 Object
.assign(_player
.config
, {
1527 enableProgressTooltip
: true,
1529 useSmoothHover
: true,
1534 Object
.assign(_player2
.default.prototype, {
1535 buildprogress
: function buildprogress(player
, controls
, layers
, media
) {
1537 var lastKeyPressTime
= 0,
1538 mouseIsDown
= false,
1539 startedPaused
= false;
1542 autoRewindInitial
= player
.options
.autoRewind
,
1543 tooltip
= player
.options
.enableProgressTooltip
? '<span class="' + t
.options
.classPrefix
+ 'time-float">' + ('<span class="' + t
.options
.classPrefix
+ 'time-float-current">00:00</span>') + ('<span class="' + t
.options
.classPrefix
+ 'time-float-corner"></span>') + '</span>' : '',
1544 rail
= _document2
.default.createElement('div');
1546 rail
.className
= t
.options
.classPrefix
+ 'time-rail';
1547 rail
.innerHTML
= '<span class="' + t
.options
.classPrefix
+ 'time-total ' + t
.options
.classPrefix
+ 'time-slider">' + ('<span class="' + t
.options
.classPrefix
+ 'time-buffering"></span>') + ('<span class="' + t
.options
.classPrefix
+ 'time-loaded"></span>') + ('<span class="' + t
.options
.classPrefix
+ 'time-current"></span>') + ('<span class="' + t
.options
.classPrefix
+ 'time-hovered no-hover"></span>') + ('<span class="' + t
.options
.classPrefix
+ 'time-handle"><span class="' + t
.options
.classPrefix
+ 'time-handle-content"></span></span>') + ('' + tooltip
) + '</span>';
1549 t
.addControlElement(rail
, 'progress');
1551 controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-buffering').style
.display
= 'none';
1553 t
.rail
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-rail');
1554 t
.total
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-total');
1555 t
.loaded
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-loaded');
1556 t
.current
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-current');
1557 t
.handle
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-handle');
1558 t
.timefloat
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-float');
1559 t
.timefloatcurrent
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-float-current');
1560 t
.slider
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-slider');
1561 t
.hovered
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-hovered');
1563 t
.forcedHandlePause
= false;
1564 t
.setTransformStyle = function (element
, value
) {
1565 element
.style
.transform
= value
;
1566 element
.style
.webkitTransform
= value
;
1567 element
.style
.MozTransform
= value
;
1568 element
.style
.msTransform
= value
;
1569 element
.style
.OTransform
= value
;
1572 var handleMouseMove
= function handleMouseMove(e
) {
1573 var totalStyles
= getComputedStyle(t
.total
),
1574 offsetStyles
= (0, _dom
.offset
)(t
.total
),
1575 width
= t
.total
.offsetWidth
,
1576 transform = function () {
1577 if (totalStyles
.webkitTransform
!== undefined) {
1578 return 'webkitTransform';
1579 } else if (totalStyles
.mozTransform
!== undefined) {
1580 return 'mozTransform ';
1581 } else if (totalStyles
.oTransform
!== undefined) {
1582 return 'oTransform';
1583 } else if (totalStyles
.msTransform
!== undefined) {
1584 return 'msTransform';
1589 cssMatrix = function () {
1590 if ('WebKitCSSMatrix' in window
) {
1591 return 'WebKitCSSMatrix';
1592 } else if ('MSCSSMatrix' in window
) {
1593 return 'MSCSSMatrix';
1594 } else if ('CSSMatrix' in window
) {
1604 if (e
.originalEvent
&& e
.originalEvent
.changedTouches
) {
1605 x
= e
.originalEvent
.changedTouches
[0].pageX
;
1606 } else if (e
.changedTouches
) {
1607 x
= e
.changedTouches
[0].pageX
;
1612 if (t
.getDuration()) {
1613 if (x
< offsetStyles
.left
) {
1614 x
= offsetStyles
.left
;
1615 } else if (x
> width
+ offsetStyles
.left
) {
1616 x
= width
+ offsetStyles
.left
;
1619 pos
= x
- offsetStyles
.left
;
1620 percentage
= pos
/ width
;
1621 t
.newTime
= percentage
<= 0.02 ? 0 : percentage
* t
.getDuration();
1623 if (mouseIsDown
&& t
.getCurrentTime() !== null && t
.newTime
.toFixed(4) !== t
.getCurrentTime().toFixed(4)) {
1624 t
.setCurrentRailHandle(t
.newTime
);
1625 t
.updateCurrent(t
.newTime
);
1628 if (!_constants
.IS_IOS
&& !_constants
.IS_ANDROID
&& t
.timefloat
) {
1632 if (t
.options
.useSmoothHover
&& cssMatrix
!== null && typeof window
[cssMatrix
] !== 'undefined') {
1633 var matrix
= new window
[cssMatrix
](getComputedStyle(t
.handle
)[transform
]),
1634 handleLocation
= matrix
.m41
,
1635 hoverScaleX
= pos
/ parseFloat(getComputedStyle(t
.total
).width
) - handleLocation
/ parseFloat(getComputedStyle(t
.total
).width
);
1637 t
.hovered
.style
.left
= handleLocation
+ 'px';
1638 t
.setTransformStyle(t
.hovered
, 'scaleX(' + hoverScaleX
+ ')');
1639 t
.hovered
.setAttribute('pos', pos
);
1641 if (hoverScaleX
>= 0) {
1642 (0, _dom
.removeClass
)(t
.hovered
, 'negative');
1644 (0, _dom
.addClass
)(t
.hovered
, 'negative');
1648 var half
= t
.timefloat
.offsetWidth
/ 2;
1649 if (x
<= t
.timefloat
.offsetWidth
+ half
) {
1651 } else if (x
>= t
.container
.offsetWidth
- half
) {
1652 leftPos
= t
.total
.offsetWidth
- half
;
1657 t
.timefloat
.style
.left
= leftPos
+ 'px';
1658 t
.timefloatcurrent
.innerHTML
= (0, _time
.secondsToTimeCode
)(t
.newTime
, player
.options
.alwaysShowHours
, player
.options
.showTimecodeFrameCount
, player
.options
.framesPerSecond
, player
.options
.secondsDecimalLength
);
1659 t
.timefloat
.style
.display
= 'block';
1661 } else if (!_constants
.IS_IOS
&& !_constants
.IS_ANDROID
&& t
.timefloat
) {
1662 leftPos
= t
.timefloat
.offsetWidth
+ width
>= t
.container
.offsetWidth
? t
.timefloat
.offsetWidth
/ 2 : 0;
1663 t
.timefloat
.style
.left
= leftPos
+ 'px';
1664 t
.timefloat
.style
.left
= leftPos
+ 'px';
1665 t
.timefloat
.style
.display
= 'block';
1668 updateSlider
= function updateSlider() {
1669 var seconds
= t
.getCurrentTime(),
1670 timeSliderText
= _i18n2
.default.t('mejs.time-slider'),
1671 time
= (0, _time
.secondsToTimeCode
)(seconds
, player
.options
.alwaysShowHours
, player
.options
.showTimecodeFrameCount
, player
.options
.framesPerSecond
, player
.options
.secondsDecimalLength
),
1672 duration
= t
.getDuration();
1674 t
.slider
.setAttribute('role', 'slider');
1675 t
.slider
.tabIndex
= 0;
1678 t
.slider
.setAttribute('aria-label', timeSliderText
);
1679 t
.slider
.setAttribute('aria-valuemin', 0);
1680 t
.slider
.setAttribute('aria-valuemax', duration
);
1681 t
.slider
.setAttribute('aria-valuenow', seconds
);
1682 t
.slider
.setAttribute('aria-valuetext', time
);
1684 t
.slider
.removeAttribute('aria-label');
1685 t
.slider
.removeAttribute('aria-valuemin');
1686 t
.slider
.removeAttribute('aria-valuemax');
1687 t
.slider
.removeAttribute('aria-valuenow');
1688 t
.slider
.removeAttribute('aria-valuetext');
1691 restartPlayer
= function restartPlayer() {
1692 if (new Date() - lastKeyPressTime
>= 1000) {
1696 handleMouseup
= function handleMouseup() {
1697 if (mouseIsDown
&& t
.getCurrentTime() !== null && t
.newTime
.toFixed(4) !== t
.getCurrentTime().toFixed(4)) {
1698 t
.setCurrentTime(t
.newTime
);
1700 t
.updateCurrent(t
.newTime
);
1702 if (t
.forcedHandlePause
) {
1706 t
.forcedHandlePause
= false;
1709 t
.slider
.addEventListener('focus', function () {
1710 player
.options
.autoRewind
= false;
1712 t
.slider
.addEventListener('blur', function () {
1713 player
.options
.autoRewind
= autoRewindInitial
;
1715 t
.slider
.addEventListener('keydown', function (e
) {
1716 if (new Date() - lastKeyPressTime
>= 1000) {
1717 startedPaused
= t
.paused
;
1720 if (t
.options
.keyActions
.length
) {
1722 var keyCode
= e
.which
|| e
.keyCode
|| 0,
1723 duration
= t
.getDuration(),
1724 seekForward
= player
.options
.defaultSeekForwardInterval(media
),
1725 seekBackward
= player
.options
.defaultSeekBackwardInterval(media
);
1727 var seekTime
= t
.getCurrentTime();
1732 if (t
.getDuration() !== Infinity
) {
1733 seekTime
-= seekBackward
;
1738 if (t
.getDuration() !== Infinity
) {
1739 seekTime
+= seekForward
;
1746 seekTime
= duration
;
1749 if (!_constants
.IS_FIREFOX
) {
1768 seekTime
= seekTime
< 0 ? 0 : seekTime
>= duration
? duration
: Math
.floor(seekTime
);
1769 lastKeyPressTime
= new Date();
1770 if (!startedPaused
) {
1774 if (seekTime
< t
.getDuration() && !startedPaused
) {
1775 setTimeout(restartPlayer
, 1100);
1778 t
.setCurrentTime(seekTime
);
1781 e
.stopPropagation();
1785 var events
= ['mousedown', 'touchstart'];
1787 t
.slider
.addEventListener('dragstart', function () {
1791 for (var i
= 0, total
= events
.length
; i
< total
; i
++) {
1792 t
.slider
.addEventListener(events
[i
], function (e
) {
1793 t
.forcedHandlePause
= false;
1794 if (t
.getDuration() !== Infinity
) {
1795 if (e
.which
=== 1 || e
.which
=== 0) {
1798 t
.forcedHandlePause
= true;
1803 var endEvents
= ['mouseup', 'touchend'];
1805 for (var j
= 0, totalEvents
= endEvents
.length
; j
< totalEvents
; j
++) {
1806 t
.container
.addEventListener(endEvents
[j
], function (event
) {
1807 var target
= event
.target
;
1808 if (target
=== t
.slider
|| target
.closest('.' + t
.options
.classPrefix
+ 'time-slider')) {
1809 handleMouseMove(event
);
1813 t
.globalBind('mouseup.dur touchend.dur', function () {
1815 mouseIsDown
= false;
1817 t
.timefloat
.style
.display
= 'none';
1824 t
.slider
.addEventListener('mouseenter', function (e
) {
1825 if (e
.target
=== t
.slider
&& t
.getDuration() !== Infinity
) {
1826 t
.container
.addEventListener('mousemove', function (event
) {
1827 var target
= event
.target
;
1828 if (target
=== t
.slider
|| target
.closest('.' + t
.options
.classPrefix
+ 'time-slider')) {
1829 handleMouseMove(event
);
1832 if (t
.timefloat
&& !_constants
.IS_IOS
&& !_constants
.IS_ANDROID
) {
1833 t
.timefloat
.style
.display
= 'block';
1835 if (t
.hovered
&& !_constants
.IS_IOS
&& !_constants
.IS_ANDROID
&& t
.options
.useSmoothHover
) {
1836 (0, _dom
.removeClass
)(t
.hovered
, 'no-hover');
1840 t
.slider
.addEventListener('mouseleave', function () {
1841 if (t
.getDuration() !== Infinity
) {
1844 t
.timefloat
.style
.display
= 'none';
1846 if (t
.hovered
&& t
.options
.useSmoothHover
) {
1847 (0, _dom
.addClass
)(t
.hovered
, 'no-hover');
1853 t
.broadcastCallback = function (e
) {
1854 var broadcast
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'broadcast');
1855 if (!t
.options
.forceLive
&& t
.getDuration() !== Infinity
) {
1857 t
.slider
.style
.display
= '';
1861 player
.setProgressRail(e
);
1862 if (!t
.forcedHandlePause
) {
1863 player
.setCurrentRail(e
);
1866 } else if (!broadcast
|| t
.options
.forceLive
) {
1867 var label
= _document2
.default.createElement('span');
1868 label
.className
= t
.options
.classPrefix
+ 'broadcast';
1869 label
.innerText
= _i18n2
.default.t('mejs.live-broadcast');
1870 t
.slider
.style
.display
= 'none';
1871 t
.rail
.appendChild(label
);
1875 media
.addEventListener('progress', t
.broadcastCallback
);
1876 media
.addEventListener('timeupdate', t
.broadcastCallback
);
1878 t
.container
.addEventListener('controlsresize', function (e
) {
1879 if (t
.getDuration() !== Infinity
) {
1880 player
.setProgressRail(e
);
1881 if (!t
.forcedHandlePause
) {
1882 player
.setCurrentRail(e
);
1887 cleanprogress
: function cleanprogress(player
, controls
, layers
, media
) {
1888 media
.removeEventListener('progress', player
.broadcastCallback
);
1889 media
.removeEventListener('timeupdate', player
.broadcastCallback
);
1891 player
.rail
.remove();
1894 setProgressRail
: function setProgressRail(e
) {
1896 target
= e
!== undefined ? e
.detail
.target
|| e
.target
: t
.media
;
1900 if (target
&& target
.buffered
&& target
.buffered
.length
> 0 && target
.buffered
.end
&& t
.getDuration()) {
1901 percent
= target
.buffered
.end(target
.buffered
.length
- 1) / t
.getDuration();
1902 } else if (target
&& target
.bytesTotal
!== undefined && target
.bytesTotal
> 0 && target
.bufferedBytes
!== undefined) {
1903 percent
= target
.bufferedBytes
/ target
.bytesTotal
;
1904 } else if (e
&& e
.lengthComputable
&& e
.total
!== 0) {
1905 percent
= e
.loaded
/ e
.total
;
1908 if (percent
!== null) {
1909 percent
= Math
.min(1, Math
.max(0, percent
));
1912 t
.setTransformStyle(t
.loaded
, 'scaleX(' + percent
+ ')');
1916 setCurrentRailHandle
: function setCurrentRailHandle(fakeTime
) {
1918 t
.setCurrentRailMain(t
, fakeTime
);
1920 setCurrentRail
: function setCurrentRail() {
1922 t
.setCurrentRailMain(t
);
1924 setCurrentRailMain
: function setCurrentRailMain(t
, fakeTime
) {
1925 if (t
.getCurrentTime() !== undefined && t
.getDuration()) {
1926 var nTime
= typeof fakeTime
=== 'undefined' ? t
.getCurrentTime() : fakeTime
;
1928 if (t
.total
&& t
.handle
) {
1929 var tW
= parseFloat(getComputedStyle(t
.total
).width
);
1931 var newWidth
= Math
.round(tW
* nTime
/ t
.getDuration()),
1932 handlePos
= newWidth
- Math
.round(t
.handle
.offsetWidth
/ 2);
1934 handlePos
= handlePos
< 0 ? 0 : handlePos
;
1935 t
.setTransformStyle(t
.current
, 'scaleX(' + newWidth
/ tW
+ ')');
1936 t
.setTransformStyle(t
.handle
, 'translateX(' + handlePos
+ 'px)');
1938 if (t
.options
.useSmoothHover
&& !(0, _dom
.hasClass
)(t
.hovered
, 'no-hover')) {
1939 var pos
= parseInt(t
.hovered
.getAttribute('pos'));
1940 pos
= isNaN(pos
) ? 0 : pos
;
1942 var hoverScaleX
= pos
/ tW
- handlePos
/ tW
;
1944 t
.hovered
.style
.left
= handlePos
+ 'px';
1945 t
.setTransformStyle(t
.hovered
, 'scaleX(' + hoverScaleX
+ ')');
1947 if (hoverScaleX
>= 0) {
1948 (0, _dom
.removeClass
)(t
.hovered
, 'negative');
1950 (0, _dom
.addClass
)(t
.hovered
, 'negative');
1958 },{"16":16,"2":2,"25":25,"26":26,"30":30,"5":5}],12:[function(_dereq_
,module
,exports
){
1961 var _document
= _dereq_(2);
1963 var _document2
= _interopRequireDefault(_document
);
1965 var _player
= _dereq_(16);
1967 var _player2
= _interopRequireDefault(_player
);
1969 var _time
= _dereq_(30);
1971 var _dom
= _dereq_(26);
1973 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
1975 Object
.assign(_player
.config
, {
1978 timeAndDurationSeparator
: '<span> | </span>'
1981 Object
.assign(_player2
.default.prototype, {
1982 buildcurrent
: function buildcurrent(player
, controls
, layers
, media
) {
1984 time
= _document2
.default.createElement('div');
1986 time
.className
= t
.options
.classPrefix
+ 'time';
1987 time
.setAttribute('role', 'timer');
1988 time
.setAttribute('aria-live', 'off');
1989 time
.innerHTML
= '<span class="' + t
.options
.classPrefix
+ 'currenttime">' + (0, _time
.secondsToTimeCode
)(0, player
.options
.alwaysShowHours
, player
.options
.showTimecodeFrameCount
, player
.options
.framesPerSecond
, player
.options
.secondsDecimalLength
) + '</span>';
1991 t
.addControlElement(time
, 'current');
1992 t
.updateTimeCallback = function () {
1993 if (t
.controlsAreVisible
) {
1994 player
.updateCurrent();
1997 media
.addEventListener('timeupdate', t
.updateTimeCallback
);
1999 cleancurrent
: function cleancurrent(player
, controls
, layers
, media
) {
2000 media
.removeEventListener('timeupdate', player
.updateTimeCallback
);
2002 buildduration
: function buildduration(player
, controls
, layers
, media
) {
2004 currTime
= controls
.lastChild
.querySelector('.' + t
.options
.classPrefix
+ 'currenttime');
2007 controls
.querySelector('.' + t
.options
.classPrefix
+ 'time').innerHTML
+= t
.options
.timeAndDurationSeparator
+ '<span class="' + t
.options
.classPrefix
+ 'duration">' + ((0, _time
.secondsToTimeCode
)(t
.options
.duration
, t
.options
.alwaysShowHours
, t
.options
.showTimecodeFrameCount
, t
.options
.framesPerSecond
, t
.options
.secondsDecimalLength
) + '</span>');
2009 if (controls
.querySelector('.' + t
.options
.classPrefix
+ 'currenttime')) {
2010 (0, _dom
.addClass
)(controls
.querySelector('.' + t
.options
.classPrefix
+ 'currenttime').parentNode
, t
.options
.classPrefix
+ 'currenttime-container');
2013 var duration
= _document2
.default.createElement('div');
2014 duration
.className
= t
.options
.classPrefix
+ 'time ' + t
.options
.classPrefix
+ 'duration-container';
2015 duration
.innerHTML
= '<span class="' + t
.options
.classPrefix
+ 'duration">' + ((0, _time
.secondsToTimeCode
)(t
.options
.duration
, t
.options
.alwaysShowHours
, t
.options
.showTimecodeFrameCount
, t
.options
.framesPerSecond
, t
.options
.secondsDecimalLength
) + '</span>');
2017 t
.addControlElement(duration
, 'duration');
2020 media
.addEventListener('timeupdate', t
.updateTimeCallback
);
2022 cleanduration
: function cleanduration(player
, controls
, layers
, media
) {
2023 media
.removeEventListener('timeupdate', player
.updateTimeCallback
);
2025 updateCurrent
: function updateCurrent() {
2028 var currentTime
= t
.getCurrentTime();
2030 if (isNaN(currentTime
)) {
2034 var timecode
= (0, _time
.secondsToTimeCode
)(currentTime
, t
.options
.alwaysShowHours
, t
.options
.showTimecodeFrameCount
, t
.options
.framesPerSecond
, t
.options
.secondsDecimalLength
);
2036 if (timecode
.length
> 5) {
2037 (0, _dom
.addClass
)(t
.container
, t
.options
.classPrefix
+ 'long-video');
2039 (0, _dom
.removeClass
)(t
.container
, t
.options
.classPrefix
+ 'long-video');
2042 if (t
.controls
.querySelector('.' + t
.options
.classPrefix
+ 'currenttime')) {
2043 t
.controls
.querySelector('.' + t
.options
.classPrefix
+ 'currenttime').innerText
= timecode
;
2046 updateDuration
: function updateDuration() {
2049 var duration
= t
.getDuration();
2051 if (isNaN(duration
) || duration
=== Infinity
|| duration
< 0) {
2052 t
.media
.duration
= t
.options
.duration
= duration
= 0;
2055 if (t
.options
.duration
> 0) {
2056 duration
= t
.options
.duration
;
2059 var timecode
= (0, _time
.secondsToTimeCode
)(duration
, t
.options
.alwaysShowHours
, t
.options
.showTimecodeFrameCount
, t
.options
.framesPerSecond
, t
.options
.secondsDecimalLength
);
2061 if (timecode
.length
> 5) {
2062 (0, _dom
.addClass
)(t
.container
, t
.options
.classPrefix
+ 'long-video');
2064 (0, _dom
.removeClass
)(t
.container
, t
.options
.classPrefix
+ 'long-video');
2067 if (t
.controls
.querySelector('.' + t
.options
.classPrefix
+ 'duration') && duration
> 0) {
2068 t
.controls
.querySelector('.' + t
.options
.classPrefix
+ 'duration').innerHTML
= timecode
;
2073 },{"16":16,"2":2,"26":26,"30":30}],13:[function(_dereq_
,module
,exports
){
2076 var _document
= _dereq_(2);
2078 var _document2
= _interopRequireDefault(_document
);
2080 var _mejs
= _dereq_(7);
2082 var _mejs2
= _interopRequireDefault(_mejs
);
2084 var _i18n
= _dereq_(5);
2086 var _i18n2
= _interopRequireDefault(_i18n
);
2088 var _player
= _dereq_(16);
2090 var _player2
= _interopRequireDefault(_player
);
2092 var _time
= _dereq_(30);
2094 var _general
= _dereq_(27);
2096 var _dom
= _dereq_(26);
2098 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
2100 Object
.assign(_player
.config
, {
2107 tracksAriaLive
: false,
2109 hideCaptionsButtonWhenEmpty
: true,
2111 toggleCaptionsButtonWhenOnlyOne
: false,
2116 Object
.assign(_player2
.default.prototype, {
2119 buildtracks
: function buildtracks(player
, controls
, layers
, media
) {
2121 if (!player
.tracks
.length
&& (!player
.trackFiles
|| !player
.trackFiles
.length
=== 0)) {
2126 attr
= t
.options
.tracksAriaLive
? ' role="log" aria-live="assertive" aria-atomic="false"' : '',
2127 tracksTitle
= (0, _general
.isString
)(t
.options
.tracksText
) ? t
.options
.tracksText
: _i18n2
.default.t('mejs.captions-subtitles'),
2128 chaptersTitle
= (0, _general
.isString
)(t
.options
.chaptersText
) ? t
.options
.chaptersText
: _i18n2
.default.t('mejs.captions-chapters'),
2129 total
= player
.trackFiles
=== null ? player
.tracks
.length
: player
.trackFiles
.length
;
2131 if (t
.domNode
.textTracks
) {
2132 for (var i
= t
.domNode
.textTracks
.length
- 1; i
>= 0; i
--) {
2133 t
.domNode
.textTracks
[i
].mode
= 'hidden';
2137 t
.cleartracks(player
);
2139 player
.captions
= _document2
.default.createElement('div');
2140 player
.captions
.className
= t
.options
.classPrefix
+ 'captions-layer ' + t
.options
.classPrefix
+ 'layer';
2141 player
.captions
.innerHTML
= '<div class="' + t
.options
.classPrefix
+ 'captions-position ' + t
.options
.classPrefix
+ 'captions-position-hover"' + attr
+ '>' + ('<span class="' + t
.options
.classPrefix
+ 'captions-text"></span>') + '</div>';
2142 player
.captions
.style
.display
= 'none';
2143 layers
.insertBefore(player
.captions
, layers
.firstChild
);
2145 player
.captionsText
= player
.captions
.querySelector('.' + t
.options
.classPrefix
+ 'captions-text');
2147 player
.captionsButton
= _document2
.default.createElement('div');
2148 player
.captionsButton
.className
= t
.options
.classPrefix
+ 'button ' + t
.options
.classPrefix
+ 'captions-button';
2149 player
.captionsButton
.innerHTML
= '<button type="button" aria-controls="' + t
.id
+ '" title="' + tracksTitle
+ '" aria-label="' + tracksTitle
+ '" tabindex="0"></button>' + ('<div class="' + t
.options
.classPrefix
+ 'captions-selector ' + t
.options
.classPrefix
+ 'offscreen">') + ('<ul class="' + t
.options
.classPrefix
+ 'captions-selector-list">') + ('<li class="' + t
.options
.classPrefix
+ 'captions-selector-list-item">') + ('<input type="radio" class="' + t
.options
.classPrefix
+ 'captions-selector-input" ') + ('name="' + player
.id
+ '_captions" id="' + player
.id
+ '_captions_none" ') + 'value="none" checked disabled>' + ('<label class="' + t
.options
.classPrefix
+ 'captions-selector-label ') + (t
.options
.classPrefix
+ 'captions-selected" ') + ('for="' + player
.id
+ '_captions_none">' + _i18n2
.default.t('mejs.none') + '</label>') + '</li>' + '</ul>' + '</div>';
2151 t
.addControlElement(player
.captionsButton
, 'tracks');
2153 player
.captionsButton
.querySelector('.' + t
.options
.classPrefix
+ 'captions-selector-input').disabled
= false;
2155 player
.chaptersButton
= _document2
.default.createElement('div');
2156 player
.chaptersButton
.className
= t
.options
.classPrefix
+ 'button ' + t
.options
.classPrefix
+ 'chapters-button';
2157 player
.chaptersButton
.innerHTML
= '<button type="button" aria-controls="' + t
.id
+ '" title="' + chaptersTitle
+ '" aria-label="' + chaptersTitle
+ '" tabindex="0"></button>' + ('<div class="' + t
.options
.classPrefix
+ 'chapters-selector ' + t
.options
.classPrefix
+ 'offscreen">') + ('<ul class="' + t
.options
.classPrefix
+ 'chapters-selector-list"></ul>') + '</div>';
2159 var subtitleCount
= 0;
2161 for (var _i
= 0; _i
< total
; _i
++) {
2162 var kind
= player
.tracks
[_i
].kind
,
2163 src
= player
.tracks
[_i
].src
;
2165 if (kind
=== 'subtitles' || kind
=== 'captions') {
2167 } else if (kind
=== 'chapters' && !controls
.querySelector('.' + t
.options
.classPrefix
+ 'chapter-selector')) {
2168 player
.captionsButton
.parentNode
.insertBefore(player
.chaptersButton
, player
.captionsButton
);
2173 player
.trackToLoad
= -1;
2174 player
.selectedTrack
= null;
2175 player
.isLoadingTrack
= false;
2177 for (var _i2
= 0; _i2
< total
; _i2
++) {
2178 var _kind
= player
.tracks
[_i2
].kind
;
2179 if (player
.tracks
[_i2
].src
.trim() && (_kind
=== 'subtitles' || _kind
=== 'captions')) {
2180 player
.addTrackButton(player
.tracks
[_i2
].trackId
, player
.tracks
[_i2
].srclang
, player
.tracks
[_i2
].label
);
2184 player
.loadNextTrack();
2186 var inEvents
= ['mouseenter', 'focusin'],
2187 outEvents
= ['mouseleave', 'focusout'];
2189 if (t
.options
.toggleCaptionsButtonWhenOnlyOne
&& subtitleCount
=== 1) {
2190 player
.captionsButton
.addEventListener('click', function () {
2191 var trackId
= 'none';
2192 if (player
.selectedTrack
=== null) {
2193 trackId
= player
.tracks
[0].trackId
;
2195 player
.setTrack(trackId
);
2198 var labels
= player
.captionsButton
.querySelectorAll('.' + t
.options
.classPrefix
+ 'captions-selector-label'),
2199 captions
= player
.captionsButton
.querySelectorAll('input[type=radio]');
2201 for (var _i3
= 0, _total
= inEvents
.length
; _i3
< _total
; _i3
++) {
2202 player
.captionsButton
.addEventListener(inEvents
[_i3
], function () {
2203 (0, _dom
.removeClass
)(this.querySelector('.' + t
.options
.classPrefix
+ 'captions-selector'), t
.options
.classPrefix
+ 'offscreen');
2207 for (var _i4
= 0, _total2
= outEvents
.length
; _i4
< _total2
; _i4
++) {
2208 player
.captionsButton
.addEventListener(outEvents
[_i4
], function () {
2209 (0, _dom
.addClass
)(this.querySelector('.' + t
.options
.classPrefix
+ 'captions-selector'), t
.options
.classPrefix
+ 'offscreen');
2213 for (var _i5
= 0, _total3
= captions
.length
; _i5
< _total3
; _i5
++) {
2214 captions
[_i5
].addEventListener('click', function () {
2215 player
.setTrack(this.value
);
2219 for (var _i6
= 0, _total4
= labels
.length
; _i6
< _total4
; _i6
++) {
2220 labels
[_i6
].addEventListener('click', function () {
2221 var radio
= (0, _dom
.siblings
)(this, function (el
) {
2222 return el
.tagName
=== 'INPUT';
2224 event
= (0, _general
.createEvent
)('click', radio
);
2225 radio
.dispatchEvent(event
);
2229 player
.captionsButton
.addEventListener('keydown', function (e
) {
2230 e
.stopPropagation();
2234 for (var _i7
= 0, _total5
= inEvents
.length
; _i7
< _total5
; _i7
++) {
2235 player
.chaptersButton
.addEventListener(inEvents
[_i7
], function () {
2236 if (this.querySelector('.' + t
.options
.classPrefix
+ 'chapters-selector-list').children
.length
) {
2237 (0, _dom
.removeClass
)(this.querySelector('.' + t
.options
.classPrefix
+ 'chapters-selector'), t
.options
.classPrefix
+ 'offscreen');
2242 for (var _i8
= 0, _total6
= outEvents
.length
; _i8
< _total6
; _i8
++) {
2243 player
.chaptersButton
.addEventListener(outEvents
[_i8
], function () {
2244 (0, _dom
.addClass
)(this.querySelector('.' + t
.options
.classPrefix
+ 'chapters-selector'), t
.options
.classPrefix
+ 'offscreen');
2248 player
.chaptersButton
.addEventListener('keydown', function (e
) {
2249 e
.stopPropagation();
2252 if (!player
.options
.alwaysShowControls
) {
2253 player
.container
.addEventListener('controlsshown', function () {
2254 (0, _dom
.addClass
)(player
.container
.querySelector('.' + t
.options
.classPrefix
+ 'captions-position'), t
.options
.classPrefix
+ 'captions-position-hover');
2257 player
.container
.addEventListener('controlshidden', function () {
2258 if (!media
.paused
) {
2259 (0, _dom
.removeClass
)(player
.container
.querySelector('.' + t
.options
.classPrefix
+ 'captions-position'), t
.options
.classPrefix
+ 'captions-position-hover');
2263 (0, _dom
.addClass
)(player
.container
.querySelector('.' + t
.options
.classPrefix
+ 'captions-position'), t
.options
.classPrefix
+ 'captions-position-hover');
2266 media
.addEventListener('timeupdate', function () {
2267 player
.displayCaptions();
2270 if (player
.options
.slidesSelector
!== '') {
2271 player
.slidesContainer
= _document2
.default.querySelectorAll(player
.options
.slidesSelector
);
2273 media
.addEventListener('timeupdate', function () {
2274 player
.displaySlides();
2278 cleartracks
: function cleartracks(player
) {
2280 if (player
.captions
) {
2281 player
.captions
.remove();
2283 if (player
.chapters
) {
2284 player
.chapters
.remove();
2286 if (player
.captionsText
) {
2287 player
.captionsText
.remove();
2289 if (player
.captionsButton
) {
2290 player
.captionsButton
.remove();
2292 if (player
.chaptersButton
) {
2293 player
.chaptersButton
.remove();
2297 rebuildtracks
: function rebuildtracks() {
2300 t
.buildtracks(t
, t
.controls
, t
.layers
, t
.media
);
2302 findTracks
: function findTracks() {
2304 tracktags
= t
.trackFiles
=== null ? t
.node
.querySelectorAll('track') : t
.trackFiles
,
2305 total
= tracktags
.length
;
2308 for (var i
= 0; i
< total
; i
++) {
2309 var track
= tracktags
[i
],
2310 srclang
= track
.getAttribute('srclang').toLowerCase() || '',
2311 trackId
= t
.id
+ '_track_' + i
+ '_' + track
.getAttribute('kind') + '_' + srclang
;
2315 src
: track
.getAttribute('src'),
2316 kind
: track
.getAttribute('kind'),
2317 label
: track
.getAttribute('label') || '',
2323 setTrack
: function setTrack(trackId
) {
2326 radios
= t
.captionsButton
.querySelectorAll('input[type="radio"]'),
2327 captions
= t
.captionsButton
.querySelectorAll('.' + t
.options
.classPrefix
+ 'captions-selected'),
2328 track
= t
.captionsButton
.querySelector('input[value="' + trackId
+ '"]');
2330 for (var i
= 0, total
= radios
.length
; i
< total
; i
++) {
2331 radios
[i
].checked
= false;
2334 for (var _i9
= 0, _total7
= captions
.length
; _i9
< _total7
; _i9
++) {
2335 (0, _dom
.removeClass
)(captions
[_i9
], t
.options
.classPrefix
+ 'captions-selected');
2338 track
.checked
= true;
2339 var labels
= (0, _dom
.siblings
)(track
, function (el
) {
2340 return (0, _dom
.hasClass
)(el
, t
.options
.classPrefix
+ 'captions-selector-label');
2342 for (var _i10
= 0, _total8
= labels
.length
; _i10
< _total8
; _i10
++) {
2343 (0, _dom
.addClass
)(labels
[_i10
], t
.options
.classPrefix
+ 'captions-selected');
2346 if (trackId
=== 'none') {
2347 t
.selectedTrack
= null;
2348 (0, _dom
.removeClass
)(t
.captionsButton
, t
.options
.classPrefix
+ 'captions-enabled');
2350 for (var _i11
= 0, _total9
= t
.tracks
.length
; _i11
< _total9
; _i11
++) {
2351 var _track
= t
.tracks
[_i11
];
2352 if (_track
.trackId
=== trackId
) {
2353 if (t
.selectedTrack
=== null) {
2354 (0, _dom
.addClass
)(t
.captionsButton
, t
.options
.classPrefix
+ 'captions-enabled');
2356 t
.selectedTrack
= _track
;
2357 t
.captions
.setAttribute('lang', t
.selectedTrack
.srclang
);
2358 t
.displayCaptions();
2364 var event
= (0, _general
.createEvent
)('captionschange', t
.media
);
2365 event
.detail
.caption
= t
.selectedTrack
;
2366 t
.media
.dispatchEvent(event
);
2368 loadNextTrack
: function loadNextTrack() {
2372 if (t
.trackToLoad
< t
.tracks
.length
) {
2373 t
.isLoadingTrack
= true;
2374 t
.loadTrack(t
.trackToLoad
);
2376 t
.isLoadingTrack
= false;
2380 loadTrack
: function loadTrack(index
) {
2382 track
= t
.tracks
[index
];
2384 if (track
!== undefined && (track
.src
!== undefined || track
.src
!== "")) {
2385 (0, _dom
.ajax
)(track
.src
, 'text', function (d
) {
2386 track
.entries
= typeof d
=== 'string' && /<tt\s+xml/ig.exec(d
) ? _mejs2
.default.TrackFormatParser
.dfxp
.parse(d
) : _mejs2
.default.TrackFormatParser
.webvtt
.parse(d
);
2388 track
.isLoaded
= true;
2389 t
.enableTrackButton(track
);
2392 if (track
.kind
=== 'slides') {
2393 t
.setupSlides(track
);
2394 } else if (track
.kind
=== 'chapters' && !t
.hasChapters
) {
2395 t
.drawChapters(track
);
2396 t
.hasChapters
= true;
2399 t
.removeTrackButton(track
.trackId
);
2404 enableTrackButton
: function enableTrackButton(track
) {
2406 lang
= track
.srclang
,
2407 target
= _document2
.default.getElementById('' + track
.trackId
);
2413 var label
= track
.label
;
2416 label
= _i18n2
.default.t(_mejs2
.default.language
.codes
[lang
]) || lang
;
2418 target
.disabled
= false;
2419 var targetSiblings
= (0, _dom
.siblings
)(target
, function (el
) {
2420 return (0, _dom
.hasClass
)(el
, t
.options
.classPrefix
+ 'captions-selector-label');
2422 for (var i
= 0, total
= targetSiblings
.length
; i
< total
; i
++) {
2423 targetSiblings
[i
].innerHTML
= label
;
2426 if (t
.options
.startLanguage
=== lang
) {
2427 target
.checked
= true;
2428 var event
= (0, _general
.createEvent
)('click', target
);
2429 target
.dispatchEvent(event
);
2432 removeTrackButton
: function removeTrackButton(trackId
) {
2433 var element
= _document2
.default.getElementById('' + trackId
);
2435 var button
= element
.closest('li');
2441 addTrackButton
: function addTrackButton(trackId
, lang
, label
) {
2444 label
= _i18n2
.default.t(_mejs2
.default.language
.codes
[lang
]) || lang
;
2447 t
.captionsButton
.querySelector('ul').innerHTML
+= '<li class="' + t
.options
.classPrefix
+ 'captions-selector-list-item">' + ('<input type="radio" class="' + t
.options
.classPrefix
+ 'captions-selector-input" ') + ('name="' + t
.id
+ '_captions" id="' + trackId
+ '" value="' + trackId
+ '" disabled>') + ('<label class="' + t
.options
.classPrefix
+ 'captions-selector-label"') + ('for="' + trackId
+ '">' + label
+ ' (loading)</label>') + '</li>';
2449 checkForTracks
: function checkForTracks() {
2452 var hasSubtitles
= false;
2454 if (t
.options
.hideCaptionsButtonWhenEmpty
) {
2455 for (var i
= 0, total
= t
.tracks
.length
; i
< total
; i
++) {
2456 var kind
= t
.tracks
[i
].kind
;
2457 if ((kind
=== 'subtitles' || kind
=== 'captions') && t
.tracks
[i
].isLoaded
) {
2458 hasSubtitles
= true;
2463 t
.captionsButton
.style
.display
= hasSubtitles
? '' : 'none';
2464 t
.setControlsSize();
2467 displayCaptions
: function displayCaptions() {
2468 if (this.tracks
=== undefined) {
2473 track
= t
.selectedTrack
,
2474 sanitize
= function sanitize(html
) {
2475 var div
= _document2
.default.createElement('div');
2476 div
.innerHTML
= html
;
2478 var scripts
= div
.getElementsByTagName('script');
2479 var i
= scripts
.length
;
2481 scripts
[i
].remove();
2484 var allElements
= div
.getElementsByTagName('*');
2485 for (var _i12
= 0, n
= allElements
.length
; _i12
< n
; _i12
++) {
2486 var attributesObj
= allElements
[_i12
].attributes
,
2487 attributes
= Array
.prototype.slice
.call(attributesObj
);
2489 for (var j
= 0, total
= attributes
.length
; j
< total
; j
++) {
2490 if (attributes
[j
].name
.startsWith('on') || attributes
[j
].value
.startsWith('javascript')) {
2491 allElements
[_i12
].remove();
2492 } else if (attributes
[j
].name
=== 'style') {
2493 allElements
[_i12
].removeAttribute(attributes
[j
].name
);
2497 return div
.innerHTML
;
2500 if (track
!== null && track
.isLoaded
) {
2501 var i
= t
.searchTrackPosition(track
.entries
, t
.media
.currentTime
);
2503 t
.captionsText
.innerHTML
= sanitize(track
.entries
[i
].text
);
2504 t
.captionsText
.className
= t
.options
.classPrefix
+ 'captions-text ' + (track
.entries
[i
].identifier
|| '');
2505 t
.captions
.style
.display
= '';
2506 t
.captions
.style
.height
= '0px';
2509 t
.captions
.style
.display
= 'none';
2511 t
.captions
.style
.display
= 'none';
2514 setupSlides
: function setupSlides(track
) {
2517 t
.slides
.entries
.imgs
= [t
.slides
.entries
.length
];
2520 showSlide
: function showSlide(index
) {
2525 if (t
.tracks
=== undefined || t
.slidesContainer
=== undefined) {
2529 var url
= t
.slides
.entries
[index
].text
;
2531 var img
= t
.slides
.entries
[index
].imgs
;
2533 if (img
=== undefined || img
.fadeIn
=== undefined) {
2534 var image
= _document2
.default.createElement('img');
2536 image
.addEventListener('load', function () {
2538 visible
= (0, _dom
.siblings
)(self
, function (el
) {
2541 self
.style
.display
= 'none';
2542 t
.slidesContainer
.innerHTML
+= self
.innerHTML
;
2543 (0, _dom
.fadeIn
)(t
.slidesContainer
.querySelector(image
));
2544 for (var i
= 0, total
= visible
.length
; i
< total
; i
++) {
2545 (0, _dom
.fadeOut
)(visible
[i
], 400);
2548 t
.slides
.entries
[index
].imgs
= img
= image
;
2549 } else if (!(0, _dom
.visible
)(img
)) {
2550 var _visible
= (0, _dom
.siblings
)(self
, function (el
) {
2551 return _visible(el
);
2553 (0, _dom
.fadeIn
)(t
.slidesContainer
.querySelector(img
));
2554 for (var i
= 0, total
= _visible
.length
; i
< total
; i
++) {
2555 (0, _dom
.fadeOut
)(_visible
[i
]);
2559 displaySlides
: function displaySlides() {
2562 if (this.slides
=== undefined) {
2566 var slides
= t
.slides
,
2567 i
= t
.searchTrackPosition(slides
.entries
, t
.media
.currentTime
);
2573 drawChapters
: function drawChapters(chapters
) {
2575 total
= chapters
.entries
.length
;
2581 t
.chaptersButton
.querySelector('ul').innerHTML
= '';
2583 for (var i
= 0; i
< total
; i
++) {
2584 t
.chaptersButton
.querySelector('ul').innerHTML
+= '<li class="' + t
.options
.classPrefix
+ 'chapters-selector-list-item" ' + 'role="menuitemcheckbox" aria-live="polite" aria-disabled="false" aria-checked="false">' + ('<input type="radio" class="' + t
.options
.classPrefix
+ 'captions-selector-input" ') + ('name="' + t
.id
+ '_chapters" id="' + t
.id
+ '_chapters_' + i
+ '" value="' + chapters
.entries
[i
].start
+ '" disabled>') + ('<label class="' + t
.options
.classPrefix
+ 'chapters-selector-label"') + ('for="' + t
.id
+ '_chapters_' + i
+ '">' + chapters
.entries
[i
].text
+ '</label>') + '</li>';
2587 var radios
= t
.chaptersButton
.querySelectorAll('input[type="radio"]'),
2588 labels
= t
.chaptersButton
.querySelectorAll('.' + t
.options
.classPrefix
+ 'chapters-selector-label');
2590 for (var _i13
= 0, _total10
= radios
.length
; _i13
< _total10
; _i13
++) {
2591 radios
[_i13
].disabled
= false;
2592 radios
[_i13
].checked
= false;
2593 radios
[_i13
].addEventListener('click', function () {
2595 listItems
= t
.chaptersButton
.querySelectorAll('li'),
2596 label
= (0, _dom
.siblings
)(self
, function (el
) {
2597 return (0, _dom
.hasClass
)(el
, t
.options
.classPrefix
+ 'chapters-selector-label');
2600 self
.checked
= true;
2601 self
.parentNode
.setAttribute('aria-checked', true);
2602 (0, _dom
.addClass
)(label
, t
.options
.classPrefix
+ 'chapters-selected');
2603 (0, _dom
.removeClass
)(t
.chaptersButton
.querySelector('.' + t
.options
.classPrefix
+ 'chapters-selected'), t
.options
.classPrefix
+ 'chapters-selected');
2605 for (var _i14
= 0, _total11
= listItems
.length
; _i14
< _total11
; _i14
++) {
2606 listItems
[_i14
].setAttribute('aria-checked', false);
2609 t
.media
.setCurrentTime(parseFloat(self
.value
));
2610 if (t
.media
.paused
) {
2616 for (var _i15
= 0, _total12
= labels
.length
; _i15
< _total12
; _i15
++) {
2617 labels
[_i15
].addEventListener('click', function () {
2618 var radio
= (0, _dom
.siblings
)(this, function (el
) {
2619 return el
.tagName
=== 'INPUT';
2621 event
= (0, _general
.createEvent
)('click', radio
);
2622 radio
.dispatchEvent(event
);
2626 searchTrackPosition
: function searchTrackPosition(tracks
, currentTime
) {
2628 hi
= tracks
.length
- 1,
2635 start
= tracks
[mid
].start
;
2636 stop
= tracks
[mid
].stop
;
2638 if (currentTime
>= start
&& currentTime
< stop
) {
2640 } else if (start
< currentTime
) {
2642 } else if (start
> currentTime
) {
2651 _mejs2
.default.language
= {
2653 af
: 'mejs.afrikaans',
2654 sq
: 'mejs.albanian',
2656 be
: 'mejs.belarusian',
2657 bg
: 'mejs.bulgarian',
2660 'zh-cn': 'mejs.chinese-simplified',
2661 'zh-tw': 'mejs.chines-traditional',
2662 hr
: 'mejs.croatian',
2667 et
: 'mejs.estonian',
2668 fl
: 'mejs.filipino',
2671 gl
: 'mejs.galician',
2674 ht
: 'mejs.haitian-creole',
2677 hu
: 'mejs.hungarian',
2678 is
: 'mejs.icelandic',
2679 id
: 'mejs.indonesian',
2682 ja
: 'mejs.japanese',
2685 lt
: 'mejs.lithuanian',
2686 mk
: 'mejs.macedonian',
2689 no
: 'mejs.norwegian',
2692 pt
: 'mejs.portuguese',
2693 ro
: 'mejs.romanian',
2697 sl
: 'mejs.slovenian',
2704 uk
: 'mejs.ukrainian',
2705 vi
: 'mejs.vietnamese',
2711 _mejs2
.default.TrackFormatParser
= {
2713 pattern
: /^((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{1,3})?) --\> ((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/,
2715 parse
: function parse(trackText
) {
2716 var lines
= trackText
.split(/\r?\n/),
2719 var timecode
= void 0,
2721 identifier
= void 0;
2723 for (var i
= 0, total
= lines
.length
; i
< total
; i
++) {
2724 timecode
= this.pattern
.exec(lines
[i
]);
2726 if (timecode
&& i
< lines
.length
) {
2727 if (i
- 1 >= 0 && lines
[i
- 1] !== '') {
2728 identifier
= lines
[i
- 1];
2734 while (lines
[i
] !== '' && i
< lines
.length
) {
2735 text
= text
+ '\n' + lines
[i
];
2738 text
= text
.trim().replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>");
2740 identifier
: identifier
,
2741 start
: (0, _time
.convertSMPTEtoSeconds
)(timecode
[1]) === 0 ? 0.200 : (0, _time
.convertSMPTEtoSeconds
)(timecode
[1]),
2742 stop
: (0, _time
.convertSMPTEtoSeconds
)(timecode
[3]),
2744 settings
: timecode
[5]
2754 parse
: function parse(trackText
) {
2755 trackText
= $(trackText
).filter('tt');
2756 var container
= trackText
.firstChild
,
2757 lines
= container
.querySelectorAll('p'),
2758 styleNode
= trackText
.getElementById('' + container
.attr('style')),
2761 var styles
= void 0;
2763 if (styleNode
.length
) {
2764 styleNode
.removeAttribute('id');
2765 var attributes
= styleNode
.attributes
;
2766 if (attributes
.length
) {
2768 for (var i
= 0, total
= attributes
.length
; i
< total
; i
++) {
2769 styles
[attributes
[i
].name
.split(":")[1]] = attributes
[i
].value
;
2774 for (var _i16
= 0, _total13
= lines
.length
; _i16
< _total13
; _i16
++) {
2783 if (lines
.eq(_i16
).attr('begin')) {
2784 _temp
.start
= (0, _time
.convertSMPTEtoSeconds
)(lines
.eq(_i16
).attr('begin'));
2786 if (!_temp
.start
&& lines
.eq(_i16
- 1).attr('end')) {
2787 _temp
.start
= (0, _time
.convertSMPTEtoSeconds
)(lines
.eq(_i16
- 1).attr('end'));
2789 if (lines
.eq(_i16
).attr('end')) {
2790 _temp
.stop
= (0, _time
.convertSMPTEtoSeconds
)(lines
.eq(_i16
).attr('end'));
2792 if (!_temp
.stop
&& lines
.eq(_i16
+ 1).attr('begin')) {
2793 _temp
.stop
= (0, _time
.convertSMPTEtoSeconds
)(lines
.eq(_i16
+ 1).attr('begin'));
2798 for (var _style
in styles
) {
2799 style
+= _style
+ ':' + styles
[_style
] + ';';
2803 _temp
.style
= style
;
2805 if (_temp
.start
=== 0) {
2806 _temp
.start
= 0.200;
2808 _temp
.text
= lines
.eq(_i16
).innerHTML
.trim().replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>");
2809 entries
.push(_temp
);
2816 },{"16":16,"2":2,"26":26,"27":27,"30":30,"5":5,"7":7}],14:[function(_dereq_
,module
,exports
){
2819 var _document
= _dereq_(2);
2821 var _document2
= _interopRequireDefault(_document
);
2823 var _player
= _dereq_(16);
2825 var _player2
= _interopRequireDefault(_player
);
2827 var _i18n
= _dereq_(5);
2829 var _i18n2
= _interopRequireDefault(_i18n
);
2831 var _constants
= _dereq_(25);
2833 var _general
= _dereq_(27);
2835 var _dom
= _dereq_(26);
2837 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
2839 Object
.assign(_player
.config
, {
2844 allyVolumeControlText
: null,
2846 hideVolumeOnTouchDevices
: true,
2848 audioVolume
: 'horizontal',
2850 videoVolume
: 'vertical',
2855 Object
.assign(_player2
.default.prototype, {
2856 buildvolume
: function buildvolume(player
, controls
, layers
, media
) {
2857 if ((_constants
.IS_ANDROID
|| _constants
.IS_IOS
) && this.options
.hideVolumeOnTouchDevices
) {
2862 mode
= t
.isVideo
? t
.options
.videoVolume
: t
.options
.audioVolume
,
2863 muteText
= (0, _general
.isString
)(t
.options
.muteText
) ? t
.options
.muteText
: _i18n2
.default.t('mejs.mute'),
2864 unmuteText
= (0, _general
.isString
)(t
.options
.unmuteText
) ? t
.options
.unmuteText
: _i18n2
.default.t('mejs.unmute'),
2865 volumeControlText
= (0, _general
.isString
)(t
.options
.allyVolumeControlText
) ? t
.options
.allyVolumeControlText
: _i18n2
.default.t('mejs.volume-help-text'),
2866 mute
= _document2
.default.createElement('div');
2868 mute
.className
= t
.options
.classPrefix
+ 'button ' + t
.options
.classPrefix
+ 'volume-button ' + t
.options
.classPrefix
+ 'mute';
2869 mute
.innerHTML
= mode
=== 'horizontal' ? '<button type="button" aria-controls="' + t
.id
+ '" title="' + muteText
+ '" aria-label="' + muteText
+ '" tabindex="0"></button>' : '<button type="button" aria-controls="' + t
.id
+ '" title="' + muteText
+ '" aria-label="' + muteText
+ '" tabindex="0"></button>' + ('<a href="javascript:void(0);" class="' + t
.options
.classPrefix
+ 'volume-slider" ') + ('aria-label="' + _i18n2
.default.t('mejs.volume-slider') + '" aria-valuemin="0" aria-valuemax="100" role="slider" ') + 'aria-orientation="vertical">' + ('<span class="' + t
.options
.classPrefix
+ 'offscreen">' + volumeControlText
+ '</span>') + ('<div class="' + t
.options
.classPrefix
+ 'volume-total">') + ('<div class="' + t
.options
.classPrefix
+ 'volume-current"></div>') + ('<div class="' + t
.options
.classPrefix
+ 'volume-handle"></div>') + '</div>' + '</a>';
2871 t
.addControlElement(mute
, 'volume');
2873 if (mode
=== 'horizontal') {
2874 var anchor
= _document2
.default.createElement('a');
2875 anchor
.className
= t
.options
.classPrefix
+ 'horizontal-volume-slider';
2876 anchor
.href
= 'javascript:void(0);';
2877 anchor
.setAttribute('aria-label', _i18n2
.default.t('mejs.volume-slider'));
2878 anchor
.setAttribute('aria-valuemin', 0);
2879 anchor
.setAttribute('aria-valuemax', 100);
2880 anchor
.setAttribute('role', 'slider');
2881 anchor
.innerHTML
+= '<span class="' + t
.options
.classPrefix
+ 'offscreen">' + volumeControlText
+ '</span>' + ('<div class="' + t
.options
.classPrefix
+ 'horizontal-volume-total">') + ('<div class="' + t
.options
.classPrefix
+ 'horizontal-volume-current"></div>') + ('<div class="' + t
.options
.classPrefix
+ 'horizontal-volume-handle"></div>') + '</div>';
2882 mute
.parentNode
.insertBefore(anchor
, mute
.nextSibling
);
2885 var mouseIsDown
= false,
2886 mouseIsOver
= false,
2888 updateVolumeSlider
= function updateVolumeSlider() {
2889 var volume
= Math
.floor(media
.volume
* 100);
2890 volumeSlider
.setAttribute('aria-valuenow', volume
);
2891 volumeSlider
.setAttribute('aria-valuetext', volume
+ '%');
2894 var volumeSlider
= mode
=== 'vertical' ? t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'volume-slider') : t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'horizontal-volume-slider'),
2895 volumeTotal
= mode
=== 'vertical' ? t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'volume-total') : t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'horizontal-volume-total'),
2896 volumeCurrent
= mode
=== 'vertical' ? t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'volume-current') : t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'horizontal-volume-current'),
2897 volumeHandle
= mode
=== 'vertical' ? t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'volume-handle') : t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'horizontal-volume-handle'),
2898 positionVolumeHandle
= function positionVolumeHandle(volume
) {
2900 if (volume
=== null || isNaN(volume
) || volume
=== undefined) {
2904 volume
= Math
.max(0, volume
);
2905 volume
= Math
.min(volume
, 1);
2908 (0, _dom
.removeClass
)(mute
, t
.options
.classPrefix
+ 'mute');
2909 (0, _dom
.addClass
)(mute
, t
.options
.classPrefix
+ 'unmute');
2910 var button
= mute
.firstElementChild
;
2911 button
.setAttribute('title', unmuteText
);
2912 button
.setAttribute('aria-label', unmuteText
);
2914 (0, _dom
.removeClass
)(mute
, t
.options
.classPrefix
+ 'unmute');
2915 (0, _dom
.addClass
)(mute
, t
.options
.classPrefix
+ 'mute');
2916 var _button
= mute
.firstElementChild
;
2917 _button
.setAttribute('title', muteText
);
2918 _button
.setAttribute('aria-label', muteText
);
2921 var volumePercentage
= volume
* 100 + '%',
2922 volumeStyles
= getComputedStyle(volumeHandle
);
2924 if (mode
=== 'vertical') {
2925 volumeCurrent
.style
.bottom
= 0;
2926 volumeCurrent
.style
.height
= volumePercentage
;
2927 volumeHandle
.style
.bottom
= volumePercentage
;
2928 volumeHandle
.style
.marginBottom
= -parseFloat(volumeStyles
.height
) / 2 + 'px';
2930 volumeCurrent
.style
.left
= 0;
2931 volumeCurrent
.style
.width
= volumePercentage
;
2932 volumeHandle
.style
.left
= volumePercentage
;
2933 volumeHandle
.style
.marginLeft
= -parseFloat(volumeStyles
.width
) / 2 + 'px';
2936 handleVolumeMove
= function handleVolumeMove(e
) {
2937 var totalOffset
= (0, _dom
.offset
)(volumeTotal
),
2938 volumeStyles
= getComputedStyle(volumeTotal
);
2944 if (mode
=== 'vertical') {
2945 var railHeight
= parseFloat(volumeStyles
.height
),
2946 newY
= e
.pageY
- totalOffset
.top
;
2948 volume
= (railHeight
- newY
) / railHeight
;
2950 if (totalOffset
.top
=== 0 || totalOffset
.left
=== 0) {
2954 var railWidth
= parseFloat(volumeStyles
.width
),
2955 newX
= e
.pageX
- totalOffset
.left
;
2957 volume
= newX
/ railWidth
;
2960 volume
= Math
.max(0, volume
);
2961 volume
= Math
.min(volume
, 1);
2963 positionVolumeHandle(volume
);
2965 t
.setMuted(volume
=== 0);
2966 t
.setVolume(volume
);
2969 e
.stopPropagation();
2971 toggleMute
= function toggleMute() {
2973 positionVolumeHandle(0);
2974 (0, _dom
.removeClass
)(mute
, t
.options
.classPrefix
+ 'mute');
2975 (0, _dom
.addClass
)(mute
, t
.options
.classPrefix
+ 'unmute');
2977 positionVolumeHandle(media
.volume
);
2978 (0, _dom
.removeClass
)(mute
, t
.options
.classPrefix
+ 'unmute');
2979 (0, _dom
.addClass
)(mute
, t
.options
.classPrefix
+ 'mute');
2983 mute
.addEventListener('mouseenter', function (e
) {
2984 if (e
.target
=== mute
) {
2985 volumeSlider
.style
.display
= 'block';
2988 e
.stopPropagation();
2991 mute
.addEventListener('focusin', function () {
2992 volumeSlider
.style
.display
= 'block';
2996 mute
.addEventListener('focusout', function (e
) {
2997 if ((!e
.relatedTarget
|| e
.relatedTarget
&& !e
.relatedTarget
.matches('.' + t
.options
.classPrefix
+ 'volume-slider')) && mode
=== 'vertical') {
2998 volumeSlider
.style
.display
= 'none';
3001 mute
.addEventListener('mouseleave', function () {
3002 mouseIsOver
= false;
3003 if (!mouseIsDown
&& mode
=== 'vertical') {
3004 volumeSlider
.style
.display
= 'none';
3007 mute
.addEventListener('focusout', function () {
3008 mouseIsOver
= false;
3010 mute
.addEventListener('keydown', function (e
) {
3011 if (t
.options
.keyActions
.length
) {
3012 var keyCode
= e
.which
|| e
.keyCode
|| 0,
3013 volume
= media
.volume
;
3017 volume
= Math
.min(volume
+ 0.1, 1);
3020 volume
= Math
.max(0, volume
- 0.1);
3026 mouseIsDown
= false;
3027 positionVolumeHandle(volume
);
3028 media
.setVolume(volume
);
3031 e
.stopPropagation();
3034 mute
.querySelector('button').addEventListener('click', function () {
3035 media
.setMuted(!media
.muted
);
3036 var event
= (0, _general
.createEvent
)('volumechange', media
);
3037 media
.dispatchEvent(event
);
3040 volumeSlider
.addEventListener('dragstart', function () {
3044 volumeSlider
.addEventListener('mouseover', function () {
3047 volumeSlider
.addEventListener('focusin', function () {
3048 volumeSlider
.style
.display
= 'block';
3051 volumeSlider
.addEventListener('focusout', function () {
3052 mouseIsOver
= false;
3053 if (!mouseIsDown
&& mode
=== 'vertical') {
3054 volumeSlider
.style
.display
= 'none';
3057 volumeSlider
.addEventListener('mousedown', function (e
) {
3058 handleVolumeMove(e
);
3059 t
.globalBind('mousemove.vol', function (event
) {
3060 var target
= event
.target
;
3061 if (mouseIsDown
&& (target
=== volumeSlider
|| target
.closest(mode
=== 'vertical' ? '.' + t
.options
.classPrefix
+ 'volume-slider' : '.' + t
.options
.classPrefix
+ 'horizontal-volume-slider'))) {
3062 handleVolumeMove(event
);
3065 t
.globalBind('mouseup.vol', function () {
3066 mouseIsDown
= false;
3067 if (!mouseIsOver
&& mode
=== 'vertical') {
3068 volumeSlider
.style
.display
= 'none';
3073 e
.stopPropagation();
3076 media
.addEventListener('volumechange', function (e
) {
3080 updateVolumeSlider(e
);
3083 var rendered
= false;
3084 media
.addEventListener('rendererready', function () {
3086 setTimeout(function () {
3088 if (player
.options
.startVolume
=== 0 || media
.originalNode
.muted
) {
3089 media
.setMuted(true);
3090 player
.options
.startVolume
= 0;
3092 media
.setVolume(player
.options
.startVolume
);
3093 t
.setControlsSize();
3098 media
.addEventListener('loadedmetadata', function () {
3099 setTimeout(function () {
3100 if (!modified
&& !rendered
) {
3101 if (player
.options
.startVolume
=== 0 || media
.originalNode
.muted
) {
3102 media
.setMuted(true);
3103 player
.options
.startVolume
= 0;
3105 media
.setVolume(player
.options
.startVolume
);
3106 t
.setControlsSize();
3112 if (player
.options
.startVolume
=== 0 || media
.originalNode
.muted
) {
3113 media
.setMuted(true);
3114 player
.options
.startVolume
= 0;
3118 t
.container
.addEventListener('controlsresize', function () {
3124 },{"16":16,"2":2,"25":25,"26":26,"27":27,"5":5}],15:[function(_dereq_
,module
,exports
){
3127 Object
.defineProperty(exports
, "__esModule", {
3130 var EN
= exports
.EN
= {
3131 'mejs.plural-form': 1,
3133 'mejs.download-file': 'Download File',
3135 'mejs.install-flash': 'You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https://get.adobe.com/flashplayer/',
3137 'mejs.fullscreen': 'Fullscreen',
3139 'mejs.play': 'Play',
3140 'mejs.pause': 'Pause',
3142 'mejs.time-slider': 'Time Slider',
3143 'mejs.time-help-text': 'Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.',
3144 'mejs.live-broadcast': 'Live Broadcast',
3146 'mejs.volume-help-text': 'Use Up/Down Arrow keys to increase or decrease volume.',
3147 'mejs.unmute': 'Unmute',
3148 'mejs.mute': 'Mute',
3149 'mejs.volume-slider': 'Volume Slider',
3151 'mejs.video-player': 'Video Player',
3152 'mejs.audio-player': 'Audio Player',
3154 'mejs.captions-subtitles': 'Captions/Subtitles',
3155 'mejs.captions-chapters': 'Chapters',
3156 'mejs.none': 'None',
3157 'mejs.afrikaans': 'Afrikaans',
3158 'mejs.albanian': 'Albanian',
3159 'mejs.arabic': 'Arabic',
3160 'mejs.belarusian': 'Belarusian',
3161 'mejs.bulgarian': 'Bulgarian',
3162 'mejs.catalan': 'Catalan',
3163 'mejs.chinese': 'Chinese',
3164 'mejs.chinese-simplified': 'Chinese (Simplified)',
3165 'mejs.chinese-traditional': 'Chinese (Traditional)',
3166 'mejs.croatian': 'Croatian',
3167 'mejs.czech': 'Czech',
3168 'mejs.danish': 'Danish',
3169 'mejs.dutch': 'Dutch',
3170 'mejs.english': 'English',
3171 'mejs.estonian': 'Estonian',
3172 'mejs.filipino': 'Filipino',
3173 'mejs.finnish': 'Finnish',
3174 'mejs.french': 'French',
3175 'mejs.galician': 'Galician',
3176 'mejs.german': 'German',
3177 'mejs.greek': 'Greek',
3178 'mejs.haitian-creole': 'Haitian Creole',
3179 'mejs.hebrew': 'Hebrew',
3180 'mejs.hindi': 'Hindi',
3181 'mejs.hungarian': 'Hungarian',
3182 'mejs.icelandic': 'Icelandic',
3183 'mejs.indonesian': 'Indonesian',
3184 'mejs.irish': 'Irish',
3185 'mejs.italian': 'Italian',
3186 'mejs.japanese': 'Japanese',
3187 'mejs.korean': 'Korean',
3188 'mejs.latvian': 'Latvian',
3189 'mejs.lithuanian': 'Lithuanian',
3190 'mejs.macedonian': 'Macedonian',
3191 'mejs.malay': 'Malay',
3192 'mejs.maltese': 'Maltese',
3193 'mejs.norwegian': 'Norwegian',
3194 'mejs.persian': 'Persian',
3195 'mejs.polish': 'Polish',
3196 'mejs.portuguese': 'Portuguese',
3197 'mejs.romanian': 'Romanian',
3198 'mejs.russian': 'Russian',
3199 'mejs.serbian': 'Serbian',
3200 'mejs.slovak': 'Slovak',
3201 'mejs.slovenian': 'Slovenian',
3202 'mejs.spanish': 'Spanish',
3203 'mejs.swahili': 'Swahili',
3204 'mejs.swedish': 'Swedish',
3205 'mejs.tagalog': 'Tagalog',
3206 'mejs.thai': 'Thai',
3207 'mejs.turkish': 'Turkish',
3208 'mejs.ukrainian': 'Ukrainian',
3209 'mejs.vietnamese': 'Vietnamese',
3210 'mejs.welsh': 'Welsh',
3211 'mejs.yiddish': 'Yiddish'
3214 },{}],16:[function(_dereq_
,module
,exports
){
3217 Object
.defineProperty(exports
, "__esModule", {
3220 exports
.config
= undefined;
3222 var _typeof
= typeof Symbol
=== "function" && typeof Symbol
.iterator
=== "symbol" ? function (obj
) { return typeof obj
; } : function (obj
) { return obj
&& typeof Symbol
=== "function" && obj
.constructor === Symbol
&& obj
!== Symbol
.prototype ? "symbol" : typeof obj
; };
3224 var _createClass = function () { function defineProperties(target
, props
) { for (var i
= 0; i
< props
.length
; i
++) { var descriptor
= props
[i
]; descriptor
.enumerable
= descriptor
.enumerable
|| false; descriptor
.configurable
= true; if ("value" in descriptor
) descriptor
.writable
= true; Object
.defineProperty(target
, descriptor
.key
, descriptor
); } } return function (Constructor
, protoProps
, staticProps
) { if (protoProps
) defineProperties(Constructor
.prototype, protoProps
); if (staticProps
) defineProperties(Constructor
, staticProps
); return Constructor
; }; }();
3226 var _window
= _dereq_(3);
3228 var _window2
= _interopRequireDefault(_window
);
3230 var _document
= _dereq_(2);
3232 var _document2
= _interopRequireDefault(_document
);
3234 var _mejs
= _dereq_(7);
3236 var _mejs2
= _interopRequireDefault(_mejs
);
3238 var _mediaelement
= _dereq_(6);
3240 var _mediaelement2
= _interopRequireDefault(_mediaelement
);
3242 var _default
= _dereq_(17);
3244 var _default2
= _interopRequireDefault(_default
);
3246 var _i18n
= _dereq_(5);
3248 var _i18n2
= _interopRequireDefault(_i18n
);
3250 var _constants
= _dereq_(25);
3252 var _general
= _dereq_(27);
3254 var _time
= _dereq_(30);
3256 var _media
= _dereq_(28);
3258 var _dom
= _dereq_(26);
3260 var dom
= _interopRequireWildcard(_dom
);
3262 function _interopRequireWildcard(obj
) { if (obj
&& obj
.__esModule
) { return obj
; } else { var newObj
= {}; if (obj
!= null) { for (var key
in obj
) { if (Object
.prototype.hasOwnProperty
.call(obj
, key
)) newObj
[key
] = obj
[key
]; } } newObj
.default = obj
; return newObj
; } }
3264 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
3266 function _classCallCheck(instance
, Constructor
) { if (!(instance
instanceof Constructor
)) { throw new TypeError("Cannot call a class as a function"); } }
3268 _mejs2
.default.mepIndex
= 0;
3270 _mejs2
.default.players
= {};
3272 var config
= exports
.config
= {
3275 showPosterWhenEnded
: false,
3277 showPosterWhenPaused
: false,
3279 defaultVideoWidth
: 480,
3281 defaultVideoHeight
: 270,
3287 defaultAudioWidth
: 400,
3289 defaultAudioHeight
: 40,
3291 defaultSeekBackwardInterval
: function defaultSeekBackwardInterval(media
) {
3292 return media
.getDuration() * 0.05;
3295 defaultSeekForwardInterval
: function defaultSeekForwardInterval(media
) {
3296 return media
.getDuration() * 0.05;
3299 setDimensions
: true,
3309 enableAutosize
: true,
3313 alwaysShowHours
: false,
3315 showTimecodeFrameCount
: false,
3317 framesPerSecond
: 25,
3319 alwaysShowControls
: false,
3321 hideVideoControlsOnLoad
: false,
3323 hideVideoControlsOnPause
: false,
3325 clickToPlayPause
: true,
3327 controlsTimeoutDefault
: 1500,
3329 controlsTimeoutMouseEnter
: 2500,
3331 controlsTimeoutMouseLeave
: 1000,
3333 iPadUseNativeControls
: false,
3335 iPhoneUseNativeControls
: false,
3337 AndroidUseNativeControls
: false,
3339 features
: ['playpause', 'current', 'progress', 'duration', 'tracks', 'volume', 'fullscreen'],
3341 useDefaultControls
: false,
3347 classPrefix
: 'mejs__',
3349 enableKeyboard
: true,
3351 pauseOtherPlayers
: true,
3353 secondsDecimalLength
: 0,
3359 action
: function action(player
) {
3361 if (!_constants
.IS_FIREFOX
) {
3362 if (player
.paused
|| player
.ended
) {
3371 action
: function action(player
) {
3373 if (player
.container
.querySelector('.' + config
.classPrefix
+ 'volume-button>button').matches(':focus') || player
.container
.querySelector('.' + config
.classPrefix
+ 'volume-slider').matches(':focus')) {
3374 player
.container
.querySelector('.' + config
.classPrefix
+ 'volume-slider').style
.display
= '';
3376 if (player
.isVideo
) {
3377 player
.showControls();
3378 player
.startControlsTimer();
3381 var newVolume
= Math
.min(player
.volume
+ 0.1, 1);
3382 player
.setVolume(newVolume
);
3383 if (newVolume
> 0) {
3384 player
.setMuted(false);
3389 action
: function action(player
) {
3391 if (player
.container
.querySelector('.' + config
.classPrefix
+ 'volume-button>button').matches(':focus') || player
.container
.querySelector('.' + config
.classPrefix
+ 'volume-slider').matches(':focus')) {
3392 player
.container
.querySelector('.' + config
.classPrefix
+ 'volume-slider').style
.display
= '';
3395 if (player
.isVideo
) {
3396 player
.showControls();
3397 player
.startControlsTimer();
3400 var newVolume
= Math
.max(player
.volume
- 0.1, 0);
3401 player
.setVolume(newVolume
);
3403 if (newVolume
<= 0.1) {
3404 player
.setMuted(true);
3409 action
: function action(player
) {
3410 if (!isNaN(player
.duration
) && player
.duration
> 0) {
3411 if (player
.isVideo
) {
3412 player
.showControls();
3413 player
.startControlsTimer();
3416 var newTime
= Math
.max(player
.currentTime
- player
.options
.defaultSeekBackwardInterval(player
), 0);
3417 player
.setCurrentTime(newTime
);
3422 action
: function action(player
) {
3424 if (!isNaN(player
.duration
) && player
.duration
> 0) {
3425 if (player
.isVideo
) {
3426 player
.showControls();
3427 player
.startControlsTimer();
3430 var newTime
= Math
.min(player
.currentTime
+ player
.options
.defaultSeekForwardInterval(player
), player
.duration
);
3431 player
.setCurrentTime(newTime
);
3436 action
: function action(player
, media
, key
, event
) {
3437 if (!event
.ctrlKey
) {
3438 if (typeof player
.enterFullScreen
!== 'undefined') {
3439 if (player
.isFullScreen
) {
3440 player
.exitFullScreen();
3442 player
.enterFullScreen();
3449 action
: function action(player
) {
3451 player
.container
.querySelector('.' + config
.classPrefix
+ 'volume-slider').style
.display
= '';
3452 if (player
.isVideo
) {
3453 player
.showControls();
3454 player
.startControlsTimer();
3456 if (player
.media
.muted
) {
3457 player
.setMuted(false);
3459 player
.setMuted(true);
3465 _mejs2
.default.MepDefaults
= config
;
3467 var MediaElementPlayer = function () {
3468 function MediaElementPlayer(node
, o
) {
3469 _classCallCheck(this, MediaElementPlayer
);
3472 element
= typeof node
=== 'string' ? _document2
.default.getElementById(node
) : node
;
3474 if (!(t
instanceof MediaElementPlayer
)) {
3475 return new MediaElementPlayer(element
, o
);
3478 t
.node
= t
.media
= element
;
3484 if (t
.media
.player
) {
3485 return t
.media
.player
;
3490 t
.controlsAreVisible
= true;
3492 t
.controlsEnabled
= true;
3494 t
.controlsTimer
= null;
3496 t
.currentMediaTime
= 0;
3500 if (o
=== undefined) {
3501 var options
= t
.node
.getAttribute('data-mejsoptions');
3502 o
= options
? JSON
.parse(options
) : {};
3505 t
.options
= Object
.assign({}, config
, o
);
3507 if (t
.options
.loop
&& !t
.media
.getAttribute('loop')) {
3508 t
.media
.loop
= true;
3510 } else if (t
.media
.loop
) {
3511 t
.options
.loop
= true;
3514 if (!t
.options
.timeFormat
) {
3515 t
.options
.timeFormat
= 'mm:ss';
3516 if (t
.options
.alwaysShowHours
) {
3517 t
.options
.timeFormat
= 'hh:mm:ss';
3519 if (t
.options
.showTimecodeFrameCount
) {
3520 t
.options
.timeFormat
+= ':ff';
3524 (0, _time
.calculateTimeFormat
)(0, t
.options
, t
.options
.framesPerSecond
|| 25);
3526 t
.id
= 'mep_' + _mejs2
.default.mepIndex
++;
3528 _mejs2
.default.players
[t
.id
] = t
;
3530 var playerOptions
= Object
.assign({}, t
.options
, {
3531 success
: function success(media
, domNode
) {
3532 t
._meReady(media
, domNode
);
3534 error
: function error(e
) {
3538 tagName
= t
.node
.tagName
.toLowerCase();
3540 t
.isDynamic
= tagName
!== 'audio' && tagName
!== 'video' && tagName
!== 'iframe';
3541 t
.isVideo
= t
.isDynamic
? t
.options
.isVideo
: tagName
!== 'audio' && t
.options
.isVideo
;
3542 t
.mediaFiles
= null;
3543 t
.trackFiles
= null;
3545 if (_constants
.IS_IPAD
&& t
.options
.iPadUseNativeControls
|| _constants
.IS_IPHONE
&& t
.options
.iPhoneUseNativeControls
) {
3546 t
.node
.setAttribute('controls', true);
3548 if (_constants
.IS_IPAD
&& t
.node
.getAttribute('autoplay')) {
3551 } else if ((t
.isVideo
|| !t
.isVideo
&& (t
.options
.features
.length
|| t
.options
.useDefaultControls
)) && !(_constants
.IS_ANDROID
&& t
.options
.AndroidUseNativeControls
)) {
3552 t
.node
.removeAttribute('controls');
3553 var videoPlayerTitle
= t
.isVideo
? _i18n2
.default.t('mejs.video-player') : _i18n2
.default.t('mejs.audio-player');
3555 var offscreen
= _document2
.default.createElement('span');
3556 offscreen
.className
= t
.options
.classPrefix
+ 'offscreen';
3557 offscreen
.innerText
= videoPlayerTitle
;
3558 t
.media
.parentNode
.insertBefore(offscreen
, t
.media
);
3560 t
.container
= _document2
.default.createElement('div');
3561 t
.container
.id
= t
.id
;
3562 t
.container
.className
= t
.options
.classPrefix
+ 'container ' + t
.options
.classPrefix
+ 'container-keyboard-inactive ' + t
.media
.className
;
3563 t
.container
.tabIndex
= 0;
3564 t
.container
.setAttribute('role', 'application');
3565 t
.container
.setAttribute('aria-label', videoPlayerTitle
);
3566 t
.container
.innerHTML
= '<div class="' + t
.options
.classPrefix
+ 'inner">' + ('<div class="' + t
.options
.classPrefix
+ 'mediaelement"></div>') + ('<div class="' + t
.options
.classPrefix
+ 'layers"></div>') + ('<div class="' + t
.options
.classPrefix
+ 'controls"></div>') + '</div>';
3567 t
.container
.addEventListener('focus', function (e
) {
3568 if (!t
.controlsAreVisible
&& !t
.hasFocus
&& t
.controlsEnabled
) {
3569 t
.showControls(true);
3571 var btnSelector
= (0, _general
.isNodeAfter
)(e
.relatedTarget
, t
.container
) ? '.' + t
.options
.classPrefix
+ 'controls .' + t
.options
.classPrefix
+ 'button:last-child > button' : '.' + t
.options
.classPrefix
+ 'playpause-button > button',
3572 button
= t
.container
.querySelector(btnSelector
);
3577 t
.node
.parentNode
.insertBefore(t
.container
, t
.node
);
3579 if (!t
.options
.features
.length
&& !t
.options
.useDefaultControls
) {
3580 t
.container
.style
.background
= 'transparent';
3581 t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'controls').style
.display
= 'none';
3584 if (t
.isVideo
&& t
.options
.stretching
=== 'fill' && !dom
.hasClass(t
.container
.parentNode
, t
.options
.classPrefix
+ 'fill-container')) {
3585 t
.outerContainer
= t
.media
.parentNode
;
3587 var wrapper
= _document2
.default.createElement('div');
3588 wrapper
.className
= t
.options
.classPrefix
+ 'fill-container';
3589 t
.container
.parentNode
.insertBefore(wrapper
, t
.container
);
3590 wrapper
.appendChild(t
.container
);
3593 if (_constants
.IS_ANDROID
) {
3594 dom
.addClass(t
.container
, t
.options
.classPrefix
+ 'android');
3596 if (_constants
.IS_IOS
) {
3597 dom
.addClass(t
.container
, t
.options
.classPrefix
+ 'ios');
3599 if (_constants
.IS_IPAD
) {
3600 dom
.addClass(t
.container
, t
.options
.classPrefix
+ 'ipad');
3602 if (_constants
.IS_IPHONE
) {
3603 dom
.addClass(t
.container
, t
.options
.classPrefix
+ 'iphone');
3605 dom
.addClass(t
.container
, t
.isVideo
? t
.options
.classPrefix
+ 'video' : t
.options
.classPrefix
+ 'audio');
3607 if (_constants
.IS_SAFARI
&& !_constants
.IS_IOS
) {
3609 dom
.addClass(t
.container
, t
.options
.classPrefix
+ 'hide-cues');
3611 var cloneNode
= t
.node
.cloneNode(),
3612 children
= t
.node
.children
,
3616 for (var i
= 0, total
= children
.length
; i
< total
; i
++) {
3617 var childNode
= children
[i
];
3620 switch (childNode
.tagName
.toLowerCase()) {
3623 Array
.prototype.slice
.call(childNode
.attributes
).forEach(function (item
) {
3624 elements
[item
.name
] = item
.value
;
3626 elements
.type
= (0, _media
.formatType
)(elements
.src
, elements
.type
);
3627 mediaFiles
.push(elements
);
3630 childNode
.mode
= 'hidden';
3631 tracks
.push(childNode
);
3634 cloneNode
.appendChild(childNode
);
3641 t
.node
= t
.media
= cloneNode
;
3643 if (mediaFiles
.length
) {
3644 t
.mediaFiles
= mediaFiles
;
3646 if (tracks
.length
) {
3647 t
.trackFiles
= tracks
;
3651 t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'mediaelement').appendChild(t
.node
);
3655 t
.controls
= t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'controls');
3656 t
.layers
= t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'layers');
3658 var tagType
= t
.isVideo
? 'video' : 'audio',
3659 capsTagName
= tagType
.substring(0, 1).toUpperCase() + tagType
.substring(1);
3661 if (t
.options
[tagType
+ 'Width'] > 0 || t
.options
[tagType
+ 'Width'].toString().indexOf('%') > -1) {
3662 t
.width
= t
.options
[tagType
+ 'Width'];
3663 } else if (t
.node
.style
.width
!== '' && t
.node
.style
.width
!== null) {
3664 t
.width
= t
.node
.style
.width
;
3665 } else if (t
.node
.getAttribute('width')) {
3666 t
.width
= t
.node
.getAttribute('width');
3668 t
.width
= t
.options
['default' + capsTagName
+ 'Width'];
3671 if (t
.options
[tagType
+ 'Height'] > 0 || t
.options
[tagType
+ 'Height'].toString().indexOf('%') > -1) {
3672 t
.height
= t
.options
[tagType
+ 'Height'];
3673 } else if (t
.node
.style
.height
!== '' && t
.node
.style
.height
!== null) {
3674 t
.height
= t
.node
.style
.height
;
3675 } else if (t
.node
.getAttribute('height')) {
3676 t
.height
= t
.node
.getAttribute('height');
3678 t
.height
= t
.options
['default' + capsTagName
+ 'Height'];
3681 t
.initialAspectRatio
= t
.height
>= t
.width
? t
.width
/ t
.height
: t
.height
/ t
.width
;
3683 t
.setPlayerSize(t
.width
, t
.height
);
3685 playerOptions
.pluginWidth
= t
.width
;
3686 playerOptions
.pluginHeight
= t
.height
;
3687 } else if (!t
.isVideo
&& !t
.options
.features
.length
&& !t
.options
.useDefaultControls
) {
3688 t
.node
.style
.display
= 'none';
3691 _mejs2
.default.MepDefaults
= playerOptions
;
3693 new _mediaelement2
.default(t
.media
, playerOptions
, t
.mediaFiles
);
3695 if (t
.container
!== undefined && t
.options
.features
.length
&& t
.controlsAreVisible
&& !t
.options
.hideVideoControlsOnLoad
) {
3696 var event
= (0, _general
.createEvent
)('controlsshown', t
.container
);
3697 t
.container
.dispatchEvent(event
);
3703 _createClass(MediaElementPlayer
, [{
3704 key
: 'showControls',
3705 value
: function showControls(doAnimation
) {
3708 doAnimation
= doAnimation
=== undefined || doAnimation
;
3710 if (t
.controlsAreVisible
|| !t
.isVideo
) {
3716 dom
.fadeIn(t
.controls
, 200, function () {
3717 dom
.removeClass(t
.controls
, t
.options
.classPrefix
+ 'offscreen');
3718 var event
= (0, _general
.createEvent
)('controlsshown', t
.container
);
3719 t
.container
.dispatchEvent(event
);
3722 var controls
= t
.container
.querySelectorAll('.' + t
.options
.classPrefix
+ 'control');
3724 var _loop
= function _loop(i
, total
) {
3725 dom
.fadeIn(controls
[i
], 200, function () {
3726 dom
.removeClass(controls
[i
], t
.options
.classPrefix
+ 'offscreen');
3730 for (var i
= 0, total
= controls
.length
; i
< total
; i
++) {
3735 dom
.removeClass(t
.controls
, t
.options
.classPrefix
+ 'offscreen');
3736 t
.controls
.style
.display
= '';
3737 t
.controls
.style
.opacity
= 1;
3739 var controls
= t
.container
.querySelectorAll('.' + t
.options
.classPrefix
+ 'control');
3740 for (var i
= 0, total
= controls
.length
; i
< total
; i
++) {
3741 dom
.removeClass(controls
[i
], t
.options
.classPrefix
+ 'offscreen');
3742 controls
[i
].style
.display
= '';
3745 var event
= (0, _general
.createEvent
)('controlsshown', t
.container
);
3746 t
.container
.dispatchEvent(event
);
3749 t
.controlsAreVisible
= true;
3750 t
.setControlsSize();
3753 key
: 'hideControls',
3754 value
: function hideControls(doAnimation
, forceHide
) {
3757 doAnimation
= doAnimation
=== undefined || doAnimation
;
3759 if (forceHide
!== true && (!t
.controlsAreVisible
|| t
.options
.alwaysShowControls
|| t
.paused
&& t
.readyState
=== 4 && (!t
.options
.hideVideoControlsOnLoad
&& t
.currentTime
<= 0 || !t
.options
.hideVideoControlsOnPause
&& t
.currentTime
> 0) || t
.isVideo
&& !t
.options
.hideVideoControlsOnLoad
&& !t
.readyState
|| t
.ended
)) {
3765 dom
.fadeOut(t
.controls
, 200, function () {
3766 dom
.addClass(t
.controls
, t
.options
.classPrefix
+ 'offscreen');
3767 t
.controls
.style
.display
= '';
3768 var event
= (0, _general
.createEvent
)('controlshidden', t
.container
);
3769 t
.container
.dispatchEvent(event
);
3772 var controls
= t
.container
.querySelectorAll('.' + t
.options
.classPrefix
+ 'control');
3774 var _loop2
= function _loop2(i
, total
) {
3775 dom
.fadeOut(controls
[i
], 200, function () {
3776 dom
.addClass(controls
[i
], t
.options
.classPrefix
+ 'offscreen');
3777 controls
[i
].style
.display
= '';
3781 for (var i
= 0, total
= controls
.length
; i
< total
; i
++) {
3786 dom
.addClass(t
.controls
, t
.options
.classPrefix
+ 'offscreen');
3787 t
.controls
.style
.display
= '';
3788 t
.controls
.style
.opacity
= 0;
3790 var controls
= t
.container
.querySelectorAll('.' + t
.options
.classPrefix
+ 'control');
3791 for (var i
= 0, total
= controls
.length
; i
< total
; i
++) {
3792 dom
.addClass(controls
[i
], t
.options
.classPrefix
+ 'offscreen');
3793 controls
[i
].style
.display
= '';
3796 var event
= (0, _general
.createEvent
)('controlshidden', t
.container
);
3797 t
.container
.dispatchEvent(event
);
3800 t
.controlsAreVisible
= false;
3803 key
: 'startControlsTimer',
3804 value
: function startControlsTimer(timeout
) {
3807 timeout
= typeof timeout
!== 'undefined' ? timeout
: t
.options
.controlsTimeoutDefault
;
3809 t
.killControlsTimer('start');
3811 t
.controlsTimer
= setTimeout(function () {
3813 t
.killControlsTimer('hide');
3817 key
: 'killControlsTimer',
3818 value
: function killControlsTimer() {
3821 if (t
.controlsTimer
!== null) {
3822 clearTimeout(t
.controlsTimer
);
3823 delete t
.controlsTimer
;
3824 t
.controlsTimer
= null;
3828 key
: 'disableControls',
3829 value
: function disableControls() {
3832 t
.killControlsTimer();
3833 t
.controlsEnabled
= false;
3834 t
.hideControls(false, true);
3837 key
: 'enableControls',
3838 value
: function enableControls() {
3841 t
.controlsEnabled
= true;
3842 t
.showControls(false);
3845 key
: '_setDefaultPlayer',
3846 value
: function _setDefaultPlayer() {
3851 t
.proxy
= new _default2
.default(t
);
3852 t
.media
.addEventListener('loadedmetadata', function () {
3853 if (t
.getCurrentTime() > 0 && t
.currentMediaTime
> 0) {
3854 t
.setCurrentTime(t
.currentMediaTime
);
3855 if (!_constants
.IS_IOS
&& !_constants
.IS_ANDROID
) {
3863 value
: function _meReady(media
, domNode
) {
3865 autoplayAttr
= domNode
.getAttribute('autoplay'),
3866 autoplay
= !(autoplayAttr
=== undefined || autoplayAttr
=== null || autoplayAttr
=== 'false'),
3867 isNative
= media
.rendererName
!== null && /(native|html5)/i.test(t
.media
.rendererName
);
3873 if (t
.container
&& t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'overlay-play')) {
3874 t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'overlay-play').style
.display
= '';
3883 t
.domNode
= domNode
;
3885 if (!(_constants
.IS_ANDROID
&& t
.options
.AndroidUseNativeControls
) && !(_constants
.IS_IPAD
&& t
.options
.iPadUseNativeControls
) && !(_constants
.IS_IPHONE
&& t
.options
.iPhoneUseNativeControls
)) {
3886 if (!t
.isVideo
&& !t
.options
.features
.length
&& !t
.options
.useDefaultControls
) {
3887 if (autoplay
&& isNative
) {
3891 if (t
.options
.success
) {
3893 if (typeof t
.options
.success
=== 'string') {
3894 _window2
.default[t
.options
.success
](t
.media
, t
.domNode
, t
);
3896 t
.options
.success(t
.media
, t
.domNode
, t
);
3905 t
.featurePosition
= {};
3907 t
._setDefaultPlayer();
3909 if (t
.options
.useDefaultControls
) {
3910 var defaultControls
= ['playpause', 'current', 'progress', 'duration', 'tracks', 'volume', 'fullscreen'];
3911 t
.options
.features
= defaultControls
.concat(t
.options
.features
.filter(function (item
) {
3912 return defaultControls
.indexOf(item
) === -1;
3916 for (var i
= 0, total
= t
.options
.features
.length
; i
< total
; i
++) {
3917 var feature
= t
.options
.features
[i
];
3918 if (t
['build' + feature
]) {
3920 t
['build' + feature
](t
, t
.controls
, t
.layers
, t
.media
);
3922 console
.error('error building ' + feature
, e
);
3927 t
.buildposter(t
, t
.controls
, t
.layers
, t
.media
);
3928 t
.buildkeyboard(t
, t
.controls
, t
.layers
, t
.media
);
3929 t
.buildoverlays(t
, t
.controls
, t
.layers
, t
.media
);
3931 var event
= (0, _general
.createEvent
)('controlsready', t
.container
);
3932 t
.container
.dispatchEvent(event
);
3934 t
.setPlayerSize(t
.width
, t
.height
);
3935 t
.setControlsSize();
3938 t
.clickToPlayPauseCallback = function () {
3940 if (t
.options
.clickToPlayPause
) {
3941 var button
= t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'overlay-button'),
3942 pressed
= button
.getAttribute('aria-pressed');
3944 if (t
.paused
&& pressed
) {
3946 } else if (t
.paused
) {
3952 button
.setAttribute('aria-pressed', !pressed
);
3953 t
.container
.focus();
3957 t
.createIframeLayer();
3959 t
.media
.addEventListener('click', t
.clickToPlayPauseCallback
);
3961 if ((_constants
.IS_ANDROID
|| _constants
.IS_IOS
) && !t
.options
.alwaysShowControls
) {
3962 t
.node
.addEventListener('touchstart', function () {
3963 if (t
.controlsAreVisible
) {
3964 t
.hideControls(false);
3966 if (t
.controlsEnabled
) {
3967 t
.showControls(false);
3972 t
.container
.addEventListener('mouseenter', function () {
3973 if (t
.controlsEnabled
) {
3974 if (!t
.options
.alwaysShowControls
) {
3975 t
.killControlsTimer('enter');
3977 t
.startControlsTimer(t
.options
.controlsTimeoutMouseEnter
);
3981 t
.container
.addEventListener('mousemove', function () {
3982 if (t
.controlsEnabled
) {
3983 if (!t
.controlsAreVisible
) {
3986 if (!t
.options
.alwaysShowControls
) {
3987 t
.startControlsTimer(t
.options
.controlsTimeoutMouseEnter
);
3991 t
.container
.addEventListener('mouseleave', function () {
3992 if (t
.controlsEnabled
) {
3993 if (!t
.paused
&& !t
.options
.alwaysShowControls
) {
3994 t
.startControlsTimer(t
.options
.controlsTimeoutMouseLeave
);
4000 if (t
.options
.hideVideoControlsOnLoad
) {
4001 t
.hideControls(false);
4004 if (t
.options
.enableAutosize
) {
4005 t
.media
.addEventListener('loadedmetadata', function (e
) {
4006 var target
= e
!== undefined ? e
.detail
.target
|| e
.target
: t
.media
;
4007 if (t
.options
.videoHeight
<= 0 && !t
.domNode
.getAttribute('height') && target
!== null && !isNaN(target
.videoHeight
)) {
4008 t
.setPlayerSize(target
.videoWidth
, target
.videoHeight
);
4009 t
.setControlsSize();
4010 t
.media
.setSize(target
.videoWidth
, target
.videoHeight
);
4016 t
.media
.addEventListener('play', function () {
4019 for (var playerIndex
in _mejs2
.default.players
) {
4020 if (_mejs2
.default.players
.hasOwnProperty(playerIndex
)) {
4021 var p
= _mejs2
.default.players
[playerIndex
];
4023 if (p
.id
!== t
.id
&& t
.options
.pauseOtherPlayers
&& !p
.paused
&& !p
.ended
) {
4030 if (!(_constants
.IS_ANDROID
|| _constants
.IS_IOS
) && !t
.options
.alwaysShowControls
&& t
.isVideo
) {
4035 t
.media
.addEventListener('ended', function () {
4036 if (t
.options
.autoRewind
) {
4038 t
.setCurrentTime(0);
4040 setTimeout(function () {
4041 var loadingElement
= t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'overlay-loading');
4042 if (loadingElement
&& loadingElement
.parentNode
) {
4043 loadingElement
.parentNode
.style
.display
= 'none';
4051 if (typeof t
.media
.renderer
.stop
=== 'function') {
4052 t
.media
.renderer
.stop();
4057 if (t
.setProgressRail
) {
4058 t
.setProgressRail();
4060 if (t
.setCurrentRail
) {
4064 if (t
.options
.loop
) {
4066 } else if (!t
.options
.alwaysShowControls
&& t
.controlsEnabled
) {
4071 t
.media
.addEventListener('loadedmetadata', function () {
4073 (0, _time
.calculateTimeFormat
)(t
.getDuration(), t
.options
, t
.options
.framesPerSecond
|| 25);
4075 if (t
.updateDuration
) {
4078 if (t
.updateCurrent
) {
4082 if (!t
.isFullScreen
) {
4083 t
.setPlayerSize(t
.width
, t
.height
);
4084 t
.setControlsSize();
4088 var duration
= null;
4089 t
.media
.addEventListener('timeupdate', function () {
4090 if (!isNaN(t
.getDuration()) && duration
!== t
.getDuration()) {
4091 duration
= t
.getDuration();
4092 (0, _time
.calculateTimeFormat
)(duration
, t
.options
, t
.options
.framesPerSecond
|| 25);
4094 if (t
.updateDuration
) {
4097 if (t
.updateCurrent
) {
4101 t
.setControlsSize();
4105 t
.container
.addEventListener('click', function (e
) {
4106 dom
.addClass(e
.currentTarget
, t
.options
.classPrefix
+ 'container-keyboard-inactive');
4109 t
.container
.addEventListener('focusin', function (e
) {
4110 dom
.removeClass(e
.currentTarget
, t
.options
.classPrefix
+ 'container-keyboard-inactive');
4111 if (t
.isVideo
&& !_constants
.IS_ANDROID
&& !_constants
.IS_IOS
&& t
.controlsEnabled
&& !t
.options
.alwaysShowControls
) {
4112 t
.killControlsTimer('enter');
4114 t
.startControlsTimer(t
.options
.controlsTimeoutMouseEnter
);
4118 t
.container
.addEventListener('focusout', function (e
) {
4119 setTimeout(function () {
4120 if (e
.relatedTarget
) {
4121 if (t
.keyboardAction
&& !e
.relatedTarget
.closest('.' + t
.options
.classPrefix
+ 'container')) {
4122 t
.keyboardAction
= false;
4123 if (t
.isVideo
&& !t
.options
.alwaysShowControls
&& !t
.paused
) {
4124 t
.startControlsTimer(t
.options
.controlsTimeoutMouseLeave
);
4131 setTimeout(function () {
4132 t
.setPlayerSize(t
.width
, t
.height
);
4133 t
.setControlsSize();
4136 t
.globalResizeCallback = function () {
4137 if (!(t
.isFullScreen
|| _constants
.HAS_TRUE_NATIVE_FULLSCREEN
&& _document2
.default.webkitIsFullScreen
)) {
4138 t
.setPlayerSize(t
.width
, t
.height
);
4141 t
.setControlsSize();
4144 t
.globalBind('resize', t
.globalResizeCallback
);
4147 if (autoplay
&& isNative
) {
4151 if (t
.options
.success
) {
4152 if (typeof t
.options
.success
=== 'string') {
4153 _window2
.default[t
.options
.success
](t
.media
, t
.domNode
, t
);
4155 t
.options
.success(t
.media
, t
.domNode
, t
);
4160 key
: '_handleError',
4161 value
: function _handleError(e
, media
, node
) {
4163 play
= t
.layers
.querySelector('.' + t
.options
.classPrefix
+ 'overlay-play');
4166 play
.style
.display
= 'none';
4169 if (t
.options
.error
) {
4170 t
.options
.error(e
, media
, node
);
4173 if (t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'cannotplay')) {
4174 t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'cannotplay').remove();
4177 var errorContainer
= _document2
.default.createElement('div');
4178 errorContainer
.className
= t
.options
.classPrefix
+ 'cannotplay';
4179 errorContainer
.style
.width
= '100%';
4180 errorContainer
.style
.height
= '100%';
4182 var errorContent
= typeof t
.options
.customError
=== 'function' ? t
.options
.customError(t
.media
, t
.media
.originalNode
) : t
.options
.customError
,
4186 var poster
= t
.media
.originalNode
.getAttribute('poster');
4188 imgError
= '<img src="' + poster
+ '" alt="' + _mejs2
.default.i18n
.t('mejs.download-file') + '">';
4192 errorContent
+= '<p>' + e
.message
+ '</p>';
4196 for (var i
= 0, total
= e
.urls
.length
; i
< total
; i
++) {
4197 var url
= e
.urls
[i
];
4198 errorContent
+= '<a href="' + url
.src
+ '" data-type="' + url
.type
+ '"><span>' + _mejs2
.default.i18n
.t('mejs.download-file') + ': ' + url
.src
+ '</span></a>';
4203 if (errorContent
&& t
.layers
.querySelector('.' + t
.options
.classPrefix
+ 'overlay-error')) {
4204 errorContainer
.innerHTML
= errorContent
;
4205 t
.layers
.querySelector('.' + t
.options
.classPrefix
+ 'overlay-error').innerHTML
= '' + imgError
+ errorContainer
.outerHTML
;
4206 t
.layers
.querySelector('.' + t
.options
.classPrefix
+ 'overlay-error').parentNode
.style
.display
= 'block';
4210 key
: 'setPlayerSize',
4211 value
: function setPlayerSize(width
, height
) {
4214 if (!t
.options
.setDimensions
) {
4218 if (typeof width
!== 'undefined') {
4222 if (typeof height
!== 'undefined') {
4226 switch (t
.options
.stretching
) {
4231 t
.setDimensions(t
.width
, t
.height
);
4235 t
.setResponsiveMode();
4238 t
.setDimensions(t
.width
, t
.height
);
4242 if (t
.hasFluidMode() === true) {
4243 t
.setResponsiveMode();
4245 t
.setDimensions(t
.width
, t
.height
);
4251 key
: 'hasFluidMode',
4252 value
: function hasFluidMode() {
4255 return t
.height
.toString().indexOf('%') !== -1 || t
.node
&& t
.node
.style
.maxWidth
&& t
.node
.style
.maxWidth
!== 'none' && t
.node
.style
.maxWidth
!== t
.width
|| t
.node
&& t
.node
.currentStyle
&& t
.node
.currentStyle
.maxWidth
=== '100%';
4258 key
: 'setResponsiveMode',
4259 value
: function setResponsiveMode() {
4261 parent = function () {
4263 var parentEl
= void 0,
4268 if (_constants
.IS_FIREFOX
&& el
.tagName
.toLowerCase() === 'html' && _window2
.default.self
!== _window2
.default.top
&& _window2
.default.frameElement
!== null) {
4269 return _window2
.default.frameElement
;
4271 parentEl
= el
.parentElement
;
4274 parentEl
= el
.parentElement
;
4277 if (parentEl
&& dom
.visible(parentEl
)) {
4285 parentStyles
= parent
? getComputedStyle(parent
, null) : getComputedStyle(_document2
.default.body
, null),
4286 nativeWidth = function () {
4288 if (t
.media
.videoWidth
&& t
.media
.videoWidth
> 0) {
4289 return t
.media
.videoWidth
;
4290 } else if (t
.node
.getAttribute('width')) {
4291 return t
.node
.getAttribute('width');
4293 return t
.options
.defaultVideoWidth
;
4296 return t
.options
.defaultAudioWidth
;
4299 nativeHeight = function () {
4301 if (t
.media
.videoHeight
&& t
.media
.videoHeight
> 0) {
4302 return t
.media
.videoHeight
;
4303 } else if (t
.node
.getAttribute('height')) {
4304 return t
.node
.getAttribute('height');
4306 return t
.options
.defaultVideoHeight
;
4309 return t
.options
.defaultAudioHeight
;
4312 aspectRatio = function () {
4318 if (t
.media
.videoWidth
&& t
.media
.videoWidth
> 0 && t
.media
.videoHeight
&& t
.media
.videoHeight
> 0) {
4319 ratio
= t
.height
>= t
.width
? t
.media
.videoWidth
/ t
.media
.videoHeight
: t
.media
.videoHeight
/ t
.media
.videoWidth
;
4321 ratio
= t
.initialAspectRatio
;
4324 if (isNaN(ratio
) || ratio
< 0.01 || ratio
> 100) {
4330 parentHeight
= parseFloat(parentStyles
.height
);
4332 var newHeight
= void 0,
4333 parentWidth
= parseFloat(parentStyles
.width
);
4336 if (t
.height
=== '100%') {
4337 newHeight
= parseFloat(parentWidth
* nativeHeight
/ nativeWidth
, 10);
4339 newHeight
= t
.height
>= t
.width
? parseFloat(parentWidth
/ aspectRatio
, 10) : parseFloat(parentWidth
* aspectRatio
, 10);
4342 newHeight
= nativeHeight
;
4345 if (isNaN(newHeight
)) {
4346 newHeight
= parentHeight
;
4349 if (t
.container
.parentNode
.length
> 0 && t
.container
.parentNode
.tagName
.toLowerCase() === 'body') {
4350 parentWidth
= _window2
.default.innerWidth
|| _document2
.default.documentElement
.clientWidth
|| _document2
.default.body
.clientWidth
;
4351 newHeight
= _window2
.default.innerHeight
|| _document2
.default.documentElement
.clientHeight
|| _document2
.default.body
.clientHeight
;
4354 if (newHeight
&& parentWidth
) {
4355 t
.container
.style
.width
= parentWidth
+ 'px';
4356 t
.container
.style
.height
= newHeight
+ 'px';
4358 t
.node
.style
.width
= '100%';
4359 t
.node
.style
.height
= '100%';
4361 if (t
.isVideo
&& t
.media
.setSize
) {
4362 t
.media
.setSize(parentWidth
, newHeight
);
4365 var layerChildren
= t
.layers
.children
;
4366 for (var i
= 0, total
= layerChildren
.length
; i
< total
; i
++) {
4367 layerChildren
[i
].style
.width
= '100%';
4368 layerChildren
[i
].style
.height
= '100%';
4374 value
: function setFillMode() {
4377 var parent
= void 0,
4381 if (_window2
.default.self
!== _window2
.default.top
) {
4383 parent
= _window2
.default.frameElement
;
4385 parent
= t
.outerContainer
;
4388 parent
= t
.outerContainer
;
4391 var parentStyles
= getComputedStyle(parent
);
4393 if (t
.node
.style
.height
!== 'none' && t
.node
.style
.height
!== t
.height
) {
4394 t
.node
.style
.height
= 'auto';
4396 if (t
.node
.style
.maxWidth
!== 'none' && t
.node
.style
.maxWidth
!== t
.width
) {
4397 t
.node
.style
.maxWidth
= 'none';
4400 if (t
.node
.style
.maxHeight
!== 'none' && t
.node
.style
.maxHeight
!== t
.height
) {
4401 t
.node
.style
.maxHeight
= 'none';
4404 if (t
.node
.currentStyle
) {
4405 if (t
.node
.currentStyle
.height
=== '100%') {
4406 t
.node
.currentStyle
.height
= 'auto';
4408 if (t
.node
.currentStyle
.maxWidth
=== '100%') {
4409 t
.node
.currentStyle
.maxWidth
= 'none';
4411 if (t
.node
.currentStyle
.maxHeight
=== '100%') {
4412 t
.node
.currentStyle
.maxHeight
= 'none';
4416 if (!isIframe
&& !parseFloat(parentStyles
.width
)) {
4417 parent
.style
.width
= t
.media
.offsetWidth
+ 'px';
4420 if (!isIframe
&& !parseFloat(parentStyles
.height
)) {
4421 parent
.style
.height
= t
.media
.offsetHeight
+ 'px';
4424 parentStyles
= getComputedStyle(parent
);
4426 var parentWidth
= parseFloat(parentStyles
.width
),
4427 parentHeight
= parseFloat(parentStyles
.height
);
4429 t
.setDimensions('100%', '100%');
4431 var poster
= t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'poster>img');
4433 poster
.style
.display
= '';
4436 var targetElement
= t
.container
.querySelectorAll('object, embed, iframe, video'),
4437 initHeight
= t
.height
,
4438 initWidth
= t
.width
,
4439 scaleX1
= parentWidth
,
4440 scaleY1
= initHeight
* parentWidth
/ initWidth
,
4441 scaleX2
= initWidth
* parentHeight
/ initHeight
,
4442 scaleY2
= parentHeight
,
4443 bScaleOnWidth
= scaleX2
> parentWidth
=== false,
4444 finalWidth
= bScaleOnWidth
? Math
.floor(scaleX1
) : Math
.floor(scaleX2
),
4445 finalHeight
= bScaleOnWidth
? Math
.floor(scaleY1
) : Math
.floor(scaleY2
),
4446 width
= bScaleOnWidth
? parentWidth
+ 'px' : finalWidth
+ 'px',
4447 height
= bScaleOnWidth
? finalHeight
+ 'px' : parentHeight
+ 'px';
4449 for (var i
= 0, total
= targetElement
.length
; i
< total
; i
++) {
4450 targetElement
[i
].style
.height
= height
;
4451 targetElement
[i
].style
.width
= width
;
4452 if (t
.media
.setSize
) {
4453 t
.media
.setSize(width
, height
);
4456 targetElement
[i
].style
.marginLeft
= Math
.floor((parentWidth
- finalWidth
) / 2) + 'px';
4457 targetElement
[i
].style
.marginTop
= 0;
4461 key
: 'setDimensions',
4462 value
: function setDimensions(width
, height
) {
4465 width
= (0, _general
.isString
)(width
) && width
.indexOf('%') > -1 ? width
: parseFloat(width
) + 'px';
4466 height
= (0, _general
.isString
)(height
) && height
.indexOf('%') > -1 ? height
: parseFloat(height
) + 'px';
4468 t
.container
.style
.width
= width
;
4469 t
.container
.style
.height
= height
;
4471 var layers
= t
.layers
.children
;
4472 for (var i
= 0, total
= layers
.length
; i
< total
; i
++) {
4473 layers
[i
].style
.width
= width
;
4474 layers
[i
].style
.height
= height
;
4478 key
: 'setControlsSize',
4479 value
: function setControlsSize() {
4482 if (!dom
.visible(t
.container
)) {
4486 if (t
.rail
&& dom
.visible(t
.rail
)) {
4487 var totalStyles
= t
.total
? getComputedStyle(t
.total
, null) : null,
4488 totalMargin
= totalStyles
? parseFloat(totalStyles
.marginLeft
) + parseFloat(totalStyles
.marginRight
) : 0,
4489 railStyles
= getComputedStyle(t
.rail
),
4490 railMargin
= parseFloat(railStyles
.marginLeft
) + parseFloat(railStyles
.marginRight
);
4492 var siblingsWidth
= 0;
4494 var siblings
= dom
.siblings(t
.rail
, function (el
) {
4495 return el
!== t
.rail
;
4497 total
= siblings
.length
;
4498 for (var i
= 0; i
< total
; i
++) {
4499 siblingsWidth
+= siblings
[i
].offsetWidth
;
4502 siblingsWidth
+= totalMargin
+ (totalMargin
=== 0 ? railMargin
* 2 : railMargin
) + 1;
4504 t
.container
.style
.minWidth
= siblingsWidth
+ 'px';
4506 var event
= (0, _general
.createEvent
)('controlsresize', t
.container
);
4507 t
.container
.dispatchEvent(event
);
4509 var children
= t
.controls
.children
;
4512 for (var _i
= 0, _total
= children
.length
; _i
< _total
; _i
++) {
4513 minWidth
+= children
[_i
].offsetWidth
;
4516 t
.container
.style
.minWidth
= minWidth
+ 'px';
4520 key
: 'addControlElement',
4521 value
: function addControlElement(element
, key
) {
4525 if (t
.featurePosition
[key
] !== undefined) {
4526 var child
= t
.controls
.children
[t
.featurePosition
[key
] - 1];
4527 child
.parentNode
.insertBefore(element
, child
.nextSibling
);
4529 t
.controls
.appendChild(element
);
4530 var children
= t
.controls
.children
;
4531 for (var i
= 0, total
= children
.length
; i
< total
; i
++) {
4532 if (element
=== children
[i
]) {
4533 t
.featurePosition
[key
] = i
;
4540 key
: 'createIframeLayer',
4541 value
: function createIframeLayer() {
4544 if (t
.isVideo
&& t
.media
.rendererName
!== null && t
.media
.rendererName
.indexOf('iframe') > -1 && !_document2
.default.getElementById(t
.media
.id
+ '-iframe-overlay')) {
4546 var layer
= _document2
.default.createElement('div'),
4547 target
= _document2
.default.getElementById(t
.media
.id
+ '_' + t
.media
.rendererName
);
4549 layer
.id
= t
.media
.id
+ '-iframe-overlay';
4550 layer
.className
= t
.options
.classPrefix
+ 'iframe-overlay';
4551 layer
.addEventListener('click', function (e
) {
4552 if (t
.options
.clickToPlayPause
) {
4560 e
.stopPropagation();
4564 target
.parentNode
.insertBefore(layer
, target
);
4569 value
: function resetSize() {
4572 setTimeout(function () {
4573 t
.setPlayerSize(t
.width
, t
.height
);
4574 t
.setControlsSize();
4579 value
: function setPoster(url
) {
4582 var posterDiv
= t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'poster');
4585 posterDiv
= _document2
.default.createElement('div');
4586 posterDiv
.className
= t
.options
.classPrefix
+ 'poster ' + t
.options
.classPrefix
+ 'layer';
4587 t
.layers
.appendChild(posterDiv
);
4590 var posterImg
= posterDiv
.querySelector('img');
4592 if (!posterImg
&& url
) {
4593 posterImg
= _document2
.default.createElement('img');
4594 posterImg
.className
= t
.options
.classPrefix
+ 'poster-img';
4595 posterImg
.width
= '100%';
4596 posterImg
.height
= '100%';
4597 posterDiv
.style
.display
= '';
4598 posterDiv
.appendChild(posterImg
);
4602 posterImg
.setAttribute('src', url
);
4603 posterDiv
.style
.backgroundImage
= 'url("' + url
+ '")';
4604 posterDiv
.style
.display
= '';
4605 } else if (posterImg
) {
4606 posterDiv
.style
.backgroundImage
= 'none';
4607 posterDiv
.style
.display
= 'none';
4610 posterDiv
.style
.display
= 'none';
4615 value
: function changeSkin(className
) {
4618 t
.container
.className
= t
.options
.classPrefix
+ 'container ' + className
;
4619 t
.setPlayerSize(t
.width
, t
.height
);
4620 t
.setControlsSize();
4624 value
: function globalBind(events
, callback
) {
4626 doc
= t
.node
? t
.node
.ownerDocument
: _document2
.default;
4628 events
= (0, _general
.splitEvents
)(events
, t
.id
);
4630 var eventList
= events
.d
.split(' ');
4631 for (var i
= 0, total
= eventList
.length
; i
< total
; i
++) {
4632 eventList
[i
].split('.').reduce(function (part
, e
) {
4633 doc
.addEventListener(e
, callback
, false);
4639 var _eventList
= events
.w
.split(' ');
4640 for (var _i2
= 0, _total2
= _eventList
.length
; _i2
< _total2
; _i2
++) {
4641 _eventList
[_i2
].split('.').reduce(function (part
, e
) {
4642 _window2
.default.addEventListener(e
, callback
, false);
4649 key
: 'globalUnbind',
4650 value
: function globalUnbind(events
, callback
) {
4652 doc
= t
.node
? t
.node
.ownerDocument
: _document2
.default;
4654 events
= (0, _general
.splitEvents
)(events
, t
.id
);
4656 var eventList
= events
.d
.split(' ');
4657 for (var i
= 0, total
= eventList
.length
; i
< total
; i
++) {
4658 eventList
[i
].split('.').reduce(function (part
, e
) {
4659 doc
.removeEventListener(e
, callback
, false);
4665 var _eventList2
= events
.w
.split(' ');
4666 for (var _i3
= 0, _total3
= _eventList2
.length
; _i3
< _total3
; _i3
++) {
4667 _eventList2
[_i3
].split('.').reduce(function (part
, e
) {
4668 _window2
.default.removeEventListener(e
, callback
, false);
4676 value
: function buildposter(player
, controls
, layers
, media
) {
4678 poster
= _document2
.default.createElement('div');
4680 poster
.className
= t
.options
.classPrefix
+ 'poster ' + t
.options
.classPrefix
+ 'layer';
4681 layers
.appendChild(poster
);
4683 var posterUrl
= media
.originalNode
.getAttribute('poster');
4685 if (player
.options
.poster
!== '' && posterUrl
&& _constants
.IS_IOS
) {
4686 media
.originalNode
.removeAttribute('poster');
4687 posterUrl
= player
.options
.poster
;
4691 t
.setPoster(posterUrl
);
4692 } else if (t
.media
.renderer
!== null && typeof t
.media
.renderer
.getPosterUrl
=== 'function') {
4693 t
.setPoster(t
.media
.renderer
.getPosterUrl());
4695 poster
.style
.display
= 'none';
4698 media
.addEventListener('play', function () {
4699 poster
.style
.display
= 'none';
4702 media
.addEventListener('playing', function () {
4703 poster
.style
.display
= 'none';
4706 if (player
.options
.showPosterWhenEnded
&& player
.options
.autoRewind
) {
4707 media
.addEventListener('ended', function () {
4708 poster
.style
.display
= '';
4712 media
.addEventListener('error', function () {
4713 poster
.style
.display
= 'none';
4716 if (player
.options
.showPosterWhenPaused
) {
4717 media
.addEventListener('pause', function () {
4718 if (!player
.ended
) {
4719 poster
.style
.display
= '';
4725 key
: 'buildoverlays',
4726 value
: function buildoverlays(player
, controls
, layers
, media
) {
4728 if (!player
.isVideo
) {
4733 loading
= _document2
.default.createElement('div'),
4734 error
= _document2
.default.createElement('div'),
4735 bigPlay
= _document2
.default.createElement('div'),
4736 buffer
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-buffering');
4738 loading
.style
.display
= 'none';
4739 loading
.className
= t
.options
.classPrefix
+ 'overlay ' + t
.options
.classPrefix
+ 'layer';
4740 loading
.innerHTML
= '<div class="' + t
.options
.classPrefix
+ 'overlay-loading">' + ('<span class="' + t
.options
.classPrefix
+ 'overlay-loading-bg-img"></span>') + '</div>';
4741 layers
.appendChild(loading
);
4743 error
.style
.display
= 'none';
4744 error
.className
= t
.options
.classPrefix
+ 'overlay ' + t
.options
.classPrefix
+ 'layer';
4745 error
.innerHTML
= '<div class="' + t
.options
.classPrefix
+ 'overlay-error"></div>';
4746 layers
.appendChild(error
);
4748 bigPlay
.className
= t
.options
.classPrefix
+ 'overlay ' + t
.options
.classPrefix
+ 'layer ' + t
.options
.classPrefix
+ 'overlay-play';
4749 bigPlay
.innerHTML
= '<div class="' + t
.options
.classPrefix
+ 'overlay-button" role="button" tabindex="0" ' + ('aria-label="' + _i18n2
.default.t('mejs.play') + '" aria-pressed="false"></div>');
4750 bigPlay
.addEventListener('click', function () {
4751 if (t
.options
.clickToPlayPause
) {
4753 var button
= t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'overlay-button'),
4754 pressed
= button
.getAttribute('aria-pressed');
4762 button
.setAttribute('aria-pressed', !!pressed
);
4763 t
.container
.focus();
4767 bigPlay
.addEventListener('keydown', function (e
) {
4768 var keyPressed
= e
.keyCode
|| e
.which
|| 0;
4770 if (keyPressed
=== 13 || _constants
.IS_FIREFOX
&& keyPressed
=== 32) {
4771 var event
= (0, _general
.createEvent
)('click', bigPlay
);
4772 bigPlay
.dispatchEvent(event
);
4777 layers
.appendChild(bigPlay
);
4779 if (t
.media
.rendererName
!== null && (/(youtube|facebook)/i.test(t
.media
.rendererName
) && !(t
.media
.originalNode
.getAttribute('poster') || player
.options
.poster
|| typeof t
.media
.renderer
.getPosterUrl
=== 'function' && t
.media
.renderer
.getPosterUrl()) || _constants
.IS_STOCK_ANDROID
|| t
.media
.originalNode
.getAttribute('autoplay'))) {
4780 bigPlay
.style
.display
= 'none';
4783 var hasError
= false;
4785 media
.addEventListener('play', function () {
4786 bigPlay
.style
.display
= 'none';
4787 loading
.style
.display
= 'none';
4788 if (buffer
!== null) {
4789 buffer
.style
.display
= 'none';
4791 error
.style
.display
= 'none';
4794 media
.addEventListener('playing', function () {
4795 bigPlay
.style
.display
= 'none';
4796 loading
.style
.display
= 'none';
4797 if (buffer
!== null) {
4798 buffer
.style
.display
= 'none';
4800 error
.style
.display
= 'none';
4803 media
.addEventListener('seeking', function () {
4804 bigPlay
.style
.display
= 'none';
4805 loading
.style
.display
= '';
4806 if (buffer
!== null) {
4807 buffer
.style
.display
= '';
4811 media
.addEventListener('seeked', function () {
4812 bigPlay
.style
.display
= t
.paused
&& !_constants
.IS_STOCK_ANDROID
? '' : 'none';
4813 loading
.style
.display
= 'none';
4814 if (buffer
!== null) {
4815 buffer
.style
.display
= 'none';
4819 media
.addEventListener('pause', function () {
4820 loading
.style
.display
= 'none';
4821 if (!_constants
.IS_STOCK_ANDROID
&& !hasError
) {
4822 bigPlay
.style
.display
= '';
4824 if (buffer
!== null) {
4825 buffer
.style
.display
= 'none';
4829 media
.addEventListener('waiting', function () {
4830 loading
.style
.display
= '';
4831 if (buffer
!== null) {
4832 buffer
.style
.display
= '';
4837 media
.addEventListener('loadeddata', function () {
4838 loading
.style
.display
= '';
4839 if (buffer
!== null) {
4840 buffer
.style
.display
= '';
4843 if (_constants
.IS_ANDROID
) {
4844 media
.canplayTimeout
= setTimeout(function () {
4845 if (_document2
.default.createEvent
) {
4846 var evt
= _document2
.default.createEvent('HTMLEvents');
4847 evt
.initEvent('canplay', true, true);
4848 return media
.dispatchEvent(evt
);
4854 media
.addEventListener('canplay', function () {
4855 loading
.style
.display
= 'none';
4856 if (buffer
!== null) {
4857 buffer
.style
.display
= 'none';
4860 clearTimeout(media
.canplayTimeout
);
4864 media
.addEventListener('error', function (e
) {
4865 t
._handleError(e
, t
.media
, t
.node
);
4866 loading
.style
.display
= 'none';
4867 bigPlay
.style
.display
= 'none';
4868 if (buffer
!== null) {
4869 buffer
.style
.display
= 'none';
4874 media
.addEventListener('keydown', function (e
) {
4875 t
.onkeydown(player
, media
, e
);
4880 key
: 'buildkeyboard',
4881 value
: function buildkeyboard(player
, controls
, layers
, media
) {
4885 t
.container
.addEventListener('keydown', function () {
4886 t
.keyboardAction
= true;
4889 t
.globalKeydownCallback = function (event
) {
4890 var container
= _document2
.default.activeElement
.closest('.' + t
.options
.classPrefix
+ 'container'),
4891 target
= t
.media
.closest('.' + t
.options
.classPrefix
+ 'container');
4892 t
.hasFocus
= !!(container
&& target
&& container
.id
=== target
.id
);
4893 return t
.onkeydown(player
, media
, event
);
4896 t
.globalClickCallback = function (event
) {
4897 t
.hasFocus
= !!event
.target
.closest('.' + t
.options
.classPrefix
+ 'container');
4900 t
.globalBind('keydown', t
.globalKeydownCallback
);
4902 t
.globalBind('click', t
.globalClickCallback
);
4906 value
: function onkeydown(player
, media
, e
) {
4908 if (player
.hasFocus
&& player
.options
.enableKeyboard
) {
4909 for (var i
= 0, total
= player
.options
.keyActions
.length
; i
< total
; i
++) {
4910 var keyAction
= player
.options
.keyActions
[i
];
4912 for (var j
= 0, jl
= keyAction
.keys
.length
; j
< jl
; j
++) {
4913 if (e
.keyCode
=== keyAction
.keys
[j
]) {
4914 keyAction
.action(player
, media
, e
.keyCode
, e
);
4916 e
.stopPropagation();
4926 value
: function play() {
4931 value
: function pause() {
4936 value
: function load() {
4940 key
: 'setCurrentTime',
4941 value
: function setCurrentTime(time
) {
4942 this.proxy
.setCurrentTime(time
);
4945 key
: 'getCurrentTime',
4946 value
: function getCurrentTime() {
4947 return this.proxy
.currentTime
;
4951 value
: function getDuration() {
4952 return this.proxy
.duration
;
4956 value
: function setVolume(volume
) {
4957 this.proxy
.volume
= volume
;
4961 value
: function getVolume() {
4962 return this.proxy
.getVolume();
4966 value
: function setMuted(value
) {
4967 this.proxy
.setMuted(value
);
4971 value
: function setSrc(src
) {
4972 if (!this.controlsEnabled
) {
4973 this.enableControls();
4975 this.proxy
.setSrc(src
);
4979 value
: function getSrc() {
4980 return this.proxy
.getSrc();
4984 value
: function canPlayType(type
) {
4985 return this.proxy
.canPlayType(type
);
4989 value
: function remove() {
4991 rendererName
= t
.media
.rendererName
,
4992 src
= t
.media
.originalNode
.src
;
4994 for (var featureIndex
in t
.options
.features
) {
4995 var feature
= t
.options
.features
[featureIndex
];
4996 if (t
['clean' + feature
]) {
4998 t
['clean' + feature
](t
, t
.layers
, t
.controls
, t
.media
);
5000 console
.error('error cleaning ' + feature
, e
);
5005 var nativeWidth
= t
.node
.getAttribute('width'),
5006 nativeHeight
= t
.node
.getAttribute('height');
5009 if (nativeWidth
.indexOf('%') === -1) {
5010 nativeWidth
= nativeWidth
+ 'px';
5013 nativeWidth
= 'auto';
5017 if (nativeHeight
.indexOf('%') === -1) {
5018 nativeHeight
= nativeHeight
+ 'px';
5021 nativeHeight
= 'auto';
5024 t
.node
.style
.width
= nativeWidth
;
5025 t
.node
.style
.height
= nativeHeight
;
5029 t
.node
.setAttribute('controls', true);
5030 t
.node
.setAttribute('id', t
.node
.getAttribute('id').replace('_' + rendererName
, '').replace('_from_mejs', ''));
5031 var poster
= t
.container
.querySelector('.' + t
.options
.classPrefix
+ 'poster>img');
5033 t
.node
.setAttribute('poster', poster
.src
);
5036 delete t
.node
.autoplay
;
5038 if (t
.media
.canPlayType((0, _media
.getTypeFromFile
)(src
)) !== '') {
5039 t
.node
.setAttribute('src', src
);
5042 if (~rendererName
.indexOf('iframe')) {
5043 var layer
= _document2
.default.getElementById(t
.media
.id
+ '-iframe-overlay');
5047 var node
= t
.node
.cloneNode();
5048 node
.style
.display
= '';
5049 t
.container
.parentNode
.insertBefore(node
, t
.container
);
5053 for (var i
= 0, total
= t
.mediaFiles
.length
; i
< total
; i
++) {
5054 var source
= _document2
.default.createElement('source');
5055 source
.setAttribute('src', t
.mediaFiles
[i
].src
);
5056 source
.setAttribute('type', t
.mediaFiles
[i
].type
);
5057 node
.appendChild(source
);
5061 var _loop3
= function _loop3(_i4
, _total4
) {
5062 var track
= t
.trackFiles
[_i4
];
5063 var newTrack
= _document2
.default.createElement('track');
5064 newTrack
.kind
= track
.kind
;
5065 newTrack
.label
= track
.label
;
5066 newTrack
.srclang
= track
.srclang
;
5067 newTrack
.src
= track
.src
;
5069 node
.appendChild(newTrack
);
5070 newTrack
.addEventListener('load', function () {
5071 this.mode
= 'showing';
5072 node
.textTracks
[_i4
].mode
= 'showing';
5076 for (var _i4
= 0, _total4
= t
.trackFiles
.length
; _i4
< _total4
; _i4
++) {
5077 _loop3(_i4
, _total4
);
5082 delete t
.mediaFiles
;
5083 delete t
.trackFiles
;
5086 t
.container
.parentNode
.insertBefore(t
.node
, t
.container
);
5089 if (typeof t
.media
.renderer
.destroy
=== 'function') {
5090 t
.media
.renderer
.destroy();
5093 delete _mejs2
.default.players
[t
.id
];
5095 if (_typeof(t
.container
) === 'object') {
5096 var offscreen
= t
.container
.parentNode
.querySelector('.' + t
.options
.classPrefix
+ 'offscreen');
5098 t
.container
.remove();
5100 t
.globalUnbind('resize', t
.globalResizeCallback
);
5101 t
.globalUnbind('keydown', t
.globalKeydownCallback
);
5102 t
.globalUnbind('click', t
.globalClickCallback
);
5104 delete t
.media
.player
;
5108 get: function get() {
5109 return this.proxy
.paused
;
5113 get: function get() {
5114 return this.proxy
.muted
;
5116 set: function set(muted
) {
5117 this.setMuted(muted
);
5121 get: function get() {
5122 return this.proxy
.ended
;
5126 get: function get() {
5127 return this.proxy
.readyState
;
5131 set: function set(time
) {
5132 this.setCurrentTime(time
);
5134 get: function get() {
5135 return this.getCurrentTime();
5139 get: function get() {
5140 return this.getDuration();
5144 set: function set(volume
) {
5145 this.setVolume(volume
);
5147 get: function get() {
5148 return this.getVolume();
5152 set: function set(src
) {
5155 get: function get() {
5156 return this.getSrc();
5160 return MediaElementPlayer
;
5163 _window2
.default.MediaElementPlayer
= MediaElementPlayer
;
5165 exports
.default = MediaElementPlayer
;
5167 },{"17":17,"2":2,"25":25,"26":26,"27":27,"28":28,"3":3,"30":30,"5":5,"6":6,"7":7}],17:[function(_dereq_
,module
,exports
){
5170 Object
.defineProperty(exports
, "__esModule", {
5174 var _createClass = function () { function defineProperties(target
, props
) { for (var i
= 0; i
< props
.length
; i
++) { var descriptor
= props
[i
]; descriptor
.enumerable
= descriptor
.enumerable
|| false; descriptor
.configurable
= true; if ("value" in descriptor
) descriptor
.writable
= true; Object
.defineProperty(target
, descriptor
.key
, descriptor
); } } return function (Constructor
, protoProps
, staticProps
) { if (protoProps
) defineProperties(Constructor
.prototype, protoProps
); if (staticProps
) defineProperties(Constructor
, staticProps
); return Constructor
; }; }();
5176 var _window
= _dereq_(3);
5178 var _window2
= _interopRequireDefault(_window
);
5180 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
5182 function _classCallCheck(instance
, Constructor
) { if (!(instance
instanceof Constructor
)) { throw new TypeError("Cannot call a class as a function"); } }
5184 var DefaultPlayer = function () {
5185 function DefaultPlayer(player
) {
5186 _classCallCheck(this, DefaultPlayer
);
5188 this.media
= player
.media
;
5189 this.isVideo
= player
.isVideo
;
5190 this.classPrefix
= player
.options
.classPrefix
;
5191 this.createIframeLayer = function () {
5192 return player
.createIframeLayer();
5194 this.setPoster = function (url
) {
5195 return player
.setPoster(url
);
5200 _createClass(DefaultPlayer
, [{
5202 value
: function play() {
5207 value
: function pause() {
5212 value
: function load() {
5222 key
: 'setCurrentTime',
5223 value
: function setCurrentTime(time
) {
5224 this.media
.setCurrentTime(time
);
5227 key
: 'getCurrentTime',
5228 value
: function getCurrentTime() {
5229 return this.media
.currentTime
;
5233 value
: function getDuration() {
5234 return this.media
.getDuration();
5238 value
: function setVolume(volume
) {
5239 this.media
.setVolume(volume
);
5243 value
: function getVolume() {
5244 return this.media
.getVolume();
5248 value
: function setMuted(value
) {
5249 this.media
.setMuted(value
);
5253 value
: function setSrc(src
) {
5255 layer
= document
.getElementById(t
.media
.id
+ '-iframe-overlay');
5261 t
.media
.setSrc(src
);
5262 t
.createIframeLayer();
5263 if (t
.media
.renderer
!== null && typeof t
.media
.renderer
.getPosterUrl
=== 'function') {
5264 t
.setPoster(t
.media
.renderer
.getPosterUrl());
5269 value
: function getSrc() {
5270 return this.media
.getSrc();
5274 value
: function canPlayType(type
) {
5275 return this.media
.canPlayType(type
);
5279 get: function get() {
5280 return this.media
.paused
;
5284 set: function set(muted
) {
5285 this.setMuted(muted
);
5287 get: function get() {
5288 return this.media
.muted
;
5292 get: function get() {
5293 return this.media
.ended
;
5297 get: function get() {
5298 return this.media
.readyState
;
5302 set: function set(time
) {
5303 this.setCurrentTime(time
);
5305 get: function get() {
5306 return this.getCurrentTime();
5310 get: function get() {
5311 return this.getDuration();
5315 set: function set(volume
) {
5316 this.setVolume(volume
);
5318 get: function get() {
5319 return this.getVolume();
5323 set: function set(src
) {
5326 get: function get() {
5327 return this.getSrc();
5331 return DefaultPlayer
;
5334 exports
.default = DefaultPlayer
;
5337 _window2
.default.DefaultPlayer
= DefaultPlayer
;
5339 },{"3":3}],18:[function(_dereq_
,module
,exports
){
5342 var _window
= _dereq_(3);
5344 var _window2
= _interopRequireDefault(_window
);
5346 var _mejs
= _dereq_(7);
5348 var _mejs2
= _interopRequireDefault(_mejs
);
5350 var _player
= _dereq_(16);
5352 var _player2
= _interopRequireDefault(_player
);
5354 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
5356 if (typeof jQuery
!== 'undefined') {
5357 _mejs2
.default.$ = _window2
.default.jQuery
= _window2
.default.$ = jQuery
;
5358 } else if (typeof Zepto
!== 'undefined') {
5359 _mejs2
.default.$ = _window2
.default.Zepto
= _window2
.default.$ = Zepto
;
5360 } else if (typeof ender
!== 'undefined') {
5361 _mejs2
.default.$ = _window2
.default.ender
= _window2
.default.$ = ender
;
5365 if (typeof $ !== 'undefined') {
5366 $.fn
.mediaelementplayer = function (options
) {
5367 if (options
=== false) {
5368 this.each(function () {
5369 var player
= $(this).data('mediaelementplayer');
5373 $(this).removeData('mediaelementplayer');
5376 this.each(function () {
5377 $(this).data('mediaelementplayer', new _player2
.default(this, options
));
5383 $(document
).ready(function () {
5384 $('.' + _mejs2
.default.MepDefaults
.classPrefix
+ 'player').mediaelementplayer();
5387 })(_mejs2
.default.$);
5389 },{"16":16,"3":3,"7":7}],19:[function(_dereq_
,module
,exports
){
5392 var _typeof
= typeof Symbol
=== "function" && typeof Symbol
.iterator
=== "symbol" ? function (obj
) { return typeof obj
; } : function (obj
) { return obj
&& typeof Symbol
=== "function" && obj
.constructor === Symbol
&& obj
!== Symbol
.prototype ? "symbol" : typeof obj
; };
5394 var _window
= _dereq_(3);
5396 var _window2
= _interopRequireDefault(_window
);
5398 var _mejs
= _dereq_(7);
5400 var _mejs2
= _interopRequireDefault(_mejs
);
5402 var _renderer
= _dereq_(8);
5404 var _general
= _dereq_(27);
5406 var _media
= _dereq_(28);
5408 var _constants
= _dereq_(25);
5410 var _dom
= _dereq_(26);
5412 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
5418 load
: function load(settings
) {
5419 if (typeof dashjs
!== 'undefined') {
5420 NativeDash
.promise
= new Promise(function (resolve
) {
5422 }).then(function () {
5423 NativeDash
._createPlayer(settings
);
5426 settings
.options
.path
= typeof settings
.options
.path
=== 'string' ? settings
.options
.path
: 'https://cdn.dashjs.org/latest/dash.all.min.js';
5428 NativeDash
.promise
= NativeDash
.promise
|| (0, _dom
.loadScript
)(settings
.options
.path
);
5429 NativeDash
.promise
.then(function () {
5430 NativeDash
._createPlayer(settings
);
5434 return NativeDash
.promise
;
5437 _createPlayer
: function _createPlayer(settings
) {
5438 var player
= dashjs
.MediaPlayer().create();
5439 _window2
.default['__ready__' + settings
.id
](player
);
5444 var DashNativeRenderer
= {
5445 name
: 'native_dash',
5447 prefix
: 'native_dash',
5449 path
: 'https://cdn.dashjs.org/latest/dash.all.min.js',
5457 canPlayType
: function canPlayType(type
) {
5458 return _constants
.HAS_MSE
&& ['application/dash+xml'].indexOf(type
.toLowerCase()) > -1;
5461 create
: function create(mediaElement
, options
, mediaFiles
) {
5463 var originalNode
= mediaElement
.originalNode
,
5464 id
= mediaElement
.id
+ '_' + options
.prefix
,
5465 autoplay
= originalNode
.autoplay
,
5466 children
= originalNode
.children
;
5471 originalNode
.removeAttribute('type');
5472 for (var i
= 0, total
= children
.length
; i
< total
; i
++) {
5473 children
[i
].removeAttribute('type');
5476 node
= originalNode
.cloneNode(true);
5477 options
= Object
.assign(options
, mediaElement
.options
);
5479 var props
= _mejs2
.default.html5media
.properties
,
5480 events
= _mejs2
.default.html5media
.events
.concat(['click', 'mouseover', 'mouseout']),
5481 attachNativeEvents
= function attachNativeEvents(e
) {
5482 if (e
.type
!== 'error') {
5483 var _event
= (0, _general
.createEvent
)(e
.type
, mediaElement
);
5484 mediaElement
.dispatchEvent(_event
);
5487 assignGettersSetters
= function assignGettersSetters(propName
) {
5488 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
5490 node
['get' + capName
] = function () {
5491 return dashPlayer
!== null ? node
[propName
] : null;
5494 node
['set' + capName
] = function (value
) {
5495 if (_mejs2
.default.html5media
.readOnlyProperties
.indexOf(propName
) === -1) {
5496 if (propName
=== 'src') {
5497 var source
= (typeof value
=== 'undefined' ? 'undefined' : _typeof(value
)) === 'object' && value
.src
? value
.src
: value
;
5498 node
[propName
] = source
;
5499 if (dashPlayer
!== null) {
5501 for (var _i
= 0, _total
= events
.length
; _i
< _total
; _i
++) {
5502 node
.removeEventListener(events
[_i
], attachNativeEvents
);
5504 dashPlayer
= NativeDash
._createPlayer({
5505 options
: options
.dash
,
5509 if (value
&& (typeof value
=== 'undefined' ? 'undefined' : _typeof(value
)) === 'object' && _typeof(value
.drm
) === 'object') {
5510 dashPlayer
.setProtectionData(value
.drm
);
5511 if ((0, _general
.isString
)(options
.dash
.robustnessLevel
) && options
.dash
.robustnessLevel
) {
5512 dashPlayer
.getProtectionController().setRobustnessLevel(options
.dash
.robustnessLevel
);
5515 dashPlayer
.attachSource(source
);
5521 node
[propName
] = value
;
5527 for (var _i2
= 0, _total2
= props
.length
; _i2
< _total2
; _i2
++) {
5528 assignGettersSetters(props
[_i2
]);
5531 _window2
.default['__ready__' + id
] = function (_dashPlayer
) {
5532 mediaElement
.dashPlayer
= dashPlayer
= _dashPlayer
;
5534 var dashEvents
= dashjs
.MediaPlayer
.events
,
5535 assignEvents
= function assignEvents(eventName
) {
5536 if (eventName
=== 'loadedmetadata') {
5537 dashPlayer
.getDebug().setLogToBrowserConsole(options
.dash
.debug
);
5538 dashPlayer
.initialize();
5539 dashPlayer
.setScheduleWhilePaused(false);
5540 dashPlayer
.setFastSwitchEnabled(true);
5541 dashPlayer
.attachView(node
);
5542 dashPlayer
.setAutoPlay(false);
5544 if (_typeof(options
.dash
.drm
) === 'object' && !_mejs2
.default.Utils
.isObjectEmpty(options
.dash
.drm
)) {
5545 dashPlayer
.setProtectionData(options
.dash
.drm
);
5546 if ((0, _general
.isString
)(options
.dash
.robustnessLevel
) && options
.dash
.robustnessLevel
) {
5547 dashPlayer
.getProtectionController().setRobustnessLevel(options
.dash
.robustnessLevel
);
5550 dashPlayer
.attachSource(node
.getSrc());
5553 node
.addEventListener(eventName
, attachNativeEvents
);
5556 for (var _i3
= 0, _total3
= events
.length
; _i3
< _total3
; _i3
++) {
5557 assignEvents(events
[_i3
]);
5560 var assignMdashEvents
= function assignMdashEvents(name
, data
) {
5561 if (name
.toLowerCase() === 'error') {
5562 mediaElement
.generateError(data
.message
, node
.src
);
5563 console
.error(data
);
5565 var _event2
= (0, _general
.createEvent
)(name
, mediaElement
);
5566 _event2
.data
= data
;
5567 mediaElement
.dispatchEvent(_event2
);
5571 for (var eventType
in dashEvents
) {
5572 if (dashEvents
.hasOwnProperty(eventType
)) {
5573 dashPlayer
.on(dashEvents
[eventType
], function (e
) {
5574 for (var _len
= arguments
.length
, args
= Array(_len
> 1 ? _len
- 1 : 0), _key
= 1; _key
< _len
; _key
++) {
5575 args
[_key
- 1] = arguments
[_key
];
5578 return assignMdashEvents(e
.type
, args
);
5584 if (mediaFiles
&& mediaFiles
.length
> 0) {
5585 for (var _i4
= 0, _total4
= mediaFiles
.length
; _i4
< _total4
; _i4
++) {
5586 if (_renderer
.renderer
.renderers
[options
.prefix
].canPlayType(mediaFiles
[_i4
].type
)) {
5587 node
.setAttribute('src', mediaFiles
[_i4
].src
);
5588 if (typeof mediaFiles
[_i4
].drm
!== 'undefined') {
5589 options
.dash
.drm
= mediaFiles
[_i4
].drm
;
5596 node
.setAttribute('id', id
);
5598 originalNode
.parentNode
.insertBefore(node
, originalNode
);
5599 originalNode
.autoplay
= false;
5600 originalNode
.style
.display
= 'none';
5602 node
.setSize = function (width
, height
) {
5603 node
.style
.width
= width
+ 'px';
5604 node
.style
.height
= height
+ 'px';
5608 node
.hide = function () {
5610 node
.style
.display
= 'none';
5614 node
.show = function () {
5615 node
.style
.display
= '';
5619 node
.destroy = function () {
5620 if (dashPlayer
!== null) {
5625 var event
= (0, _general
.createEvent
)('rendererready', node
);
5626 mediaElement
.dispatchEvent(event
);
5628 mediaElement
.promises
.push(NativeDash
.load({
5629 options
: options
.dash
,
5637 _media
.typeChecks
.push(function (url
) {
5638 return ~url
.toLowerCase().indexOf('.mpd') ? 'application/dash+xml' : null;
5641 _renderer
.renderer
.add(DashNativeRenderer
);
5643 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],20:[function(_dereq_
,module
,exports
){
5646 Object
.defineProperty(exports
, "__esModule", {
5649 exports
.PluginDetector
= undefined;
5651 var _typeof
= typeof Symbol
=== "function" && typeof Symbol
.iterator
=== "symbol" ? function (obj
) { return typeof obj
; } : function (obj
) { return obj
&& typeof Symbol
=== "function" && obj
.constructor === Symbol
&& obj
!== Symbol
.prototype ? "symbol" : typeof obj
; };
5653 var _window
= _dereq_(3);
5655 var _window2
= _interopRequireDefault(_window
);
5657 var _document
= _dereq_(2);
5659 var _document2
= _interopRequireDefault(_document
);
5661 var _mejs
= _dereq_(7);
5663 var _mejs2
= _interopRequireDefault(_mejs
);
5665 var _i18n
= _dereq_(5);
5667 var _i18n2
= _interopRequireDefault(_i18n
);
5669 var _renderer
= _dereq_(8);
5671 var _general
= _dereq_(27);
5673 var _constants
= _dereq_(25);
5675 var _media
= _dereq_(28);
5677 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
5679 var PluginDetector
= exports
.PluginDetector
= {
5682 hasPluginVersion
: function hasPluginVersion(plugin
, v
) {
5683 var pv
= PluginDetector
.plugins
[plugin
];
5686 return pv
[0] > v
[0] || pv
[0] === v
[0] && pv
[1] > v
[1] || pv
[0] === v
[0] && pv
[1] === v
[1] && pv
[2] >= v
[2];
5689 addPlugin
: function addPlugin(p
, pluginName
, mimeType
, activeX
, axDetect
) {
5690 PluginDetector
.plugins
[p
] = PluginDetector
.detectPlugin(pluginName
, mimeType
, activeX
, axDetect
);
5693 detectPlugin
: function detectPlugin(pluginName
, mimeType
, activeX
, axDetect
) {
5695 var version
= [0, 0, 0],
5696 description
= void 0,
5699 if (_constants
.NAV
.plugins
!== null && _constants
.NAV
.plugins
!== undefined && _typeof(_constants
.NAV
.plugins
[pluginName
]) === 'object') {
5700 description
= _constants
.NAV
.plugins
[pluginName
].description
;
5701 if (description
&& !(typeof _constants
.NAV
.mimeTypes
!== 'undefined' && _constants
.NAV
.mimeTypes
[mimeType
] && !_constants
.NAV
.mimeTypes
[mimeType
].enabledPlugin
)) {
5702 version
= description
.replace(pluginName
, '').replace(/^\s+/, '').replace(/\sr/gi, '.').split('.');
5703 for (var i
= 0, total
= version
.length
; i
< total
; i
++) {
5704 version
[i
] = parseInt(version
[i
].match(/\d+/), 10);
5707 } else if (_window2
.default.ActiveXObject
!== undefined) {
5709 ax
= new ActiveXObject(activeX
);
5711 version
= axDetect(ax
);
5721 PluginDetector
.addPlugin('flash', 'Shockwave Flash', 'application/x-shockwave-flash', 'ShockwaveFlash.ShockwaveFlash', function (ax
) {
5723 d
= ax
.GetVariable("$version");
5726 d
= d
.split(" ")[1].split(",");
5727 version
= [parseInt(d
[0], 10), parseInt(d
[1], 10), parseInt(d
[2], 10)];
5732 var FlashMediaElementRenderer
= {
5733 create
: function create(mediaElement
, options
, mediaFiles
) {
5737 flash
.options
= options
;
5738 flash
.id
= mediaElement
.id
+ '_' + flash
.options
.prefix
;
5739 flash
.mediaElement
= mediaElement
;
5740 flash
.flashState
= {};
5741 flash
.flashApi
= null;
5742 flash
.flashApiStack
= [];
5744 var props
= _mejs2
.default.html5media
.properties
,
5745 assignGettersSetters
= function assignGettersSetters(propName
) {
5746 flash
.flashState
[propName
] = null;
5748 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
5750 flash
['get' + capName
] = function () {
5751 if (flash
.flashApi
!== null) {
5752 if (typeof flash
.flashApi
['get_' + propName
] === 'function') {
5753 var value
= flash
.flashApi
['get_' + propName
]();
5755 if (propName
=== 'buffered') {
5757 start
: function start() {
5760 end
: function end() {
5775 flash
['set' + capName
] = function (value
) {
5776 if (propName
=== 'src') {
5777 value
= (0, _media
.absolutizeUrl
)(value
);
5780 if (flash
.flashApi
!== null && flash
.flashApi
['set_' + propName
] !== undefined) {
5782 flash
.flashApi
['set_' + propName
](value
);
5787 flash
.flashApiStack
.push({
5796 for (var i
= 0, total
= props
.length
; i
< total
; i
++) {
5797 assignGettersSetters(props
[i
]);
5800 var methods
= _mejs2
.default.html5media
.methods
,
5801 assignMethods
= function assignMethods(methodName
) {
5802 flash
[methodName
] = function () {
5803 if (flash
.flashApi
!== null) {
5804 if (flash
.flashApi
['fire_' + methodName
]) {
5806 flash
.flashApi
['fire_' + methodName
]();
5814 flash
.flashApiStack
.push({
5816 methodName
: methodName
5821 methods
.push('stop');
5822 for (var _i
= 0, _total
= methods
.length
; _i
< _total
; _i
++) {
5823 assignMethods(methods
[_i
]);
5826 var initEvents
= ['rendererready'];
5828 for (var _i2
= 0, _total2
= initEvents
.length
; _i2
< _total2
; _i2
++) {
5829 var event
= (0, _general
.createEvent
)(initEvents
[_i2
], flash
);
5830 mediaElement
.dispatchEvent(event
);
5833 _window2
.default['__ready__' + flash
.id
] = function () {
5835 flash
.flashReady
= true;
5836 flash
.flashApi
= _document2
.default.getElementById('__' + flash
.id
);
5838 if (flash
.flashApiStack
.length
) {
5839 for (var _i3
= 0, _total3
= flash
.flashApiStack
.length
; _i3
< _total3
; _i3
++) {
5840 var stackItem
= flash
.flashApiStack
[_i3
];
5842 if (stackItem
.type
=== 'set') {
5843 var propName
= stackItem
.propName
,
5844 capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
5846 flash
['set' + capName
](stackItem
.value
);
5847 } else if (stackItem
.type
=== 'call') {
5848 flash
[stackItem
.methodName
]();
5854 _window2
.default['__event__' + flash
.id
] = function (eventName
, message
) {
5855 var event
= (0, _general
.createEvent
)(eventName
, flash
);
5858 event
.data
= JSON
.parse(message
);
5859 event
.details
.data
= JSON
.parse(message
);
5861 event
.message
= message
;
5865 flash
.mediaElement
.dispatchEvent(event
);
5868 flash
.flashWrapper
= _document2
.default.createElement('div');
5870 if (['always', 'sameDomain'].indexOf(flash
.options
.shimScriptAccess
) === -1) {
5871 flash
.options
.shimScriptAccess
= 'sameDomain';
5874 var autoplay
= mediaElement
.originalNode
.autoplay
,
5875 flashVars
= ['uid=' + flash
.id
, 'autoplay=' + autoplay
, 'allowScriptAccess=' + flash
.options
.shimScriptAccess
, 'preload=' + (mediaElement
.originalNode
.getAttribute('preload') || '')],
5876 isVideo
= mediaElement
.originalNode
!== null && mediaElement
.originalNode
.tagName
.toLowerCase() === 'video',
5877 flashHeight
= isVideo
? mediaElement
.originalNode
.height
: 1,
5878 flashWidth
= isVideo
? mediaElement
.originalNode
.width
: 1;
5880 if (mediaElement
.originalNode
.getAttribute('src')) {
5881 flashVars
.push('src=' + mediaElement
.originalNode
.getAttribute('src'));
5884 if (flash
.options
.enablePseudoStreaming
=== true) {
5885 flashVars
.push('pseudostreamstart=' + flash
.options
.pseudoStreamingStartQueryParam
);
5886 flashVars
.push('pseudostreamtype=' + flash
.options
.pseudoStreamingType
);
5889 mediaElement
.appendChild(flash
.flashWrapper
);
5890 mediaElement
.originalNode
.style
.display
= 'none';
5894 if (_constants
.IS_IE
) {
5895 var specialIEContainer
= _document2
.default.createElement('div');
5896 flash
.flashWrapper
.appendChild(specialIEContainer
);
5898 settings
= ['classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"', 'codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"', 'id="__' + flash
.id
+ '"', 'width="' + flashWidth
+ '"', 'height="' + flashHeight
+ '"'];
5901 settings
.push('style="clip: rect(0 0 0 0); position: absolute;"');
5904 specialIEContainer
.outerHTML
= '<object ' + settings
.join(' ') + '>' + ('<param name="movie" value="' + flash
.options
.pluginPath
+ flash
.options
.filename
+ '?x=' + new Date() + '" />') + ('<param name="flashvars" value="' + flashVars
.join('&') + '" />') + '<param name="quality" value="high" />' + '<param name="bgcolor" value="#000000" />' + '<param name="wmode" value="transparent" />' + ('<param name="allowScriptAccess" value="' + flash
.options
.shimScriptAccess
+ '" />') + '<param name="allowFullScreen" value="true" />' + ('<div>' + _i18n2
.default.t('mejs.install-flash') + '</div>') + '</object>';
5907 settings
= ['id="__' + flash
.id
+ '"', 'name="__' + flash
.id
+ '"', 'play="true"', 'loop="false"', 'quality="high"', 'bgcolor="#000000"', 'wmode="transparent"', 'allowScriptAccess="' + flash
.options
.shimScriptAccess
+ '"', 'allowFullScreen="true"', 'type="application/x-shockwave-flash"', 'pluginspage="//www.macromedia.com/go/getflashplayer"', 'src="' + flash
.options
.pluginPath
+ flash
.options
.filename
+ '"', 'flashvars="' + flashVars
.join('&') + '"', 'width="' + flashWidth
+ '"', 'height="' + flashHeight
+ '"'];
5910 settings
.push('style="clip: rect(0 0 0 0); position: absolute;"');
5913 flash
.flashWrapper
.innerHTML
= '<embed ' + settings
.join(' ') + '>';
5916 flash
.flashNode
= flash
.flashWrapper
.lastChild
;
5918 flash
.hide = function () {
5920 flash
.flashNode
.style
.display
= 'none';
5923 flash
.show = function () {
5925 flash
.flashNode
.style
.display
= '';
5928 flash
.setSize = function (width
, height
) {
5929 flash
.flashNode
.style
.width
= width
+ 'px';
5930 flash
.flashNode
.style
.height
= height
+ 'px';
5932 if (flash
.flashApi
!== null && typeof flash
.flashApi
.fire_setSize
=== 'function') {
5933 flash
.flashApi
.fire_setSize(width
, height
);
5937 flash
.destroy = function () {
5938 flash
.flashNode
.remove();
5941 if (mediaFiles
&& mediaFiles
.length
> 0) {
5942 for (var _i4
= 0, _total4
= mediaFiles
.length
; _i4
< _total4
; _i4
++) {
5943 if (_renderer
.renderer
.renderers
[options
.prefix
].canPlayType(mediaFiles
[_i4
].type
)) {
5944 flash
.setSrc(mediaFiles
[_i4
].src
);
5954 var hasFlash
= PluginDetector
.hasPluginVersion('flash', [10, 0, 0]);
5957 _media
.typeChecks
.push(function (url
) {
5958 url
= url
.toLowerCase();
5960 if (url
.startsWith('rtmp')) {
5961 if (~url
.indexOf('.mp3')) {
5962 return 'audio/rtmp';
5964 return 'video/rtmp';
5966 } else if (/\.og(a|g)/i.test(url
)) {
5968 } else if (~url
.indexOf('.m3u8')) {
5969 return 'application/x-mpegURL';
5970 } else if (~url
.indexOf('.mpd')) {
5971 return 'application/dash+xml';
5972 } else if (~url
.indexOf('.flv')) {
5979 var FlashMediaElementVideoRenderer
= {
5980 name
: 'flash_video',
5982 prefix
: 'flash_video',
5983 filename
: 'mediaelement-flash-video.swf',
5984 enablePseudoStreaming
: false,
5986 pseudoStreamingStartQueryParam
: 'start',
5988 pseudoStreamingType
: 'byte'
5991 canPlayType
: function canPlayType(type
) {
5992 return ~['video/mp4', 'video/rtmp', 'audio/rtmp', 'rtmp/mp4', 'audio/mp4', 'video/flv', 'video/x-flv'].indexOf(type
.toLowerCase());
5995 create
: FlashMediaElementRenderer
.create
5998 _renderer
.renderer
.add(FlashMediaElementVideoRenderer
);
6000 var FlashMediaElementHlsVideoRenderer
= {
6003 prefix
: 'flash_hls',
6004 filename
: 'mediaelement-flash-video-hls.swf'
6007 canPlayType
: function canPlayType(type
) {
6008 return ~['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type
.toLowerCase());
6011 create
: FlashMediaElementRenderer
.create
6013 _renderer
.renderer
.add(FlashMediaElementHlsVideoRenderer
);
6015 var FlashMediaElementMdashVideoRenderer
= {
6018 prefix
: 'flash_dash',
6019 filename
: 'mediaelement-flash-video-mdash.swf'
6022 canPlayType
: function canPlayType(type
) {
6023 return ~['application/dash+xml'].indexOf(type
.toLowerCase());
6026 create
: FlashMediaElementRenderer
.create
6028 _renderer
.renderer
.add(FlashMediaElementMdashVideoRenderer
);
6030 var FlashMediaElementAudioRenderer
= {
6031 name
: 'flash_audio',
6033 prefix
: 'flash_audio',
6034 filename
: 'mediaelement-flash-audio.swf'
6037 canPlayType
: function canPlayType(type
) {
6038 return ~['audio/mp3'].indexOf(type
.toLowerCase());
6041 create
: FlashMediaElementRenderer
.create
6043 _renderer
.renderer
.add(FlashMediaElementAudioRenderer
);
6045 var FlashMediaElementAudioOggRenderer
= {
6046 name
: 'flash_audio_ogg',
6048 prefix
: 'flash_audio_ogg',
6049 filename
: 'mediaelement-flash-audio-ogg.swf'
6052 canPlayType
: function canPlayType(type
) {
6053 return ~['audio/ogg', 'audio/oga', 'audio/ogv'].indexOf(type
.toLowerCase());
6056 create
: FlashMediaElementRenderer
.create
6058 _renderer
.renderer
.add(FlashMediaElementAudioOggRenderer
);
6061 },{"2":2,"25":25,"27":27,"28":28,"3":3,"5":5,"7":7,"8":8}],21:[function(_dereq_
,module
,exports
){
6064 var _typeof
= typeof Symbol
=== "function" && typeof Symbol
.iterator
=== "symbol" ? function (obj
) { return typeof obj
; } : function (obj
) { return obj
&& typeof Symbol
=== "function" && obj
.constructor === Symbol
&& obj
!== Symbol
.prototype ? "symbol" : typeof obj
; };
6066 var _window
= _dereq_(3);
6068 var _window2
= _interopRequireDefault(_window
);
6070 var _mejs
= _dereq_(7);
6072 var _mejs2
= _interopRequireDefault(_mejs
);
6074 var _renderer
= _dereq_(8);
6076 var _general
= _dereq_(27);
6078 var _constants
= _dereq_(25);
6080 var _media
= _dereq_(28);
6082 var _dom
= _dereq_(26);
6084 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
6090 load
: function load(settings
) {
6091 if (typeof flvjs
!== 'undefined') {
6092 NativeFlv
.promise
= new Promise(function (resolve
) {
6094 }).then(function () {
6095 NativeFlv
._createPlayer(settings
);
6098 settings
.options
.path
= typeof settings
.options
.path
=== 'string' ? settings
.options
.path
: 'https://cdnjs.cloudflare.com/ajax/libs/flv.js/1.3.2/flv.min.js';
6100 NativeFlv
.promise
= NativeFlv
.promise
|| (0, _dom
.loadScript
)(settings
.options
.path
);
6101 NativeFlv
.promise
.then(function () {
6102 NativeFlv
._createPlayer(settings
);
6106 return NativeFlv
.promise
;
6109 _createPlayer
: function _createPlayer(settings
) {
6110 flvjs
.LoggingControl
.enableDebug
= settings
.options
.debug
;
6111 flvjs
.LoggingControl
.enableVerbose
= settings
.options
.debug
;
6112 var player
= flvjs
.createPlayer(settings
.options
);
6113 _window2
.default['__ready__' + settings
.id
](player
);
6118 var FlvNativeRenderer
= {
6121 prefix
: 'native_flv',
6123 path
: 'https://cdnjs.cloudflare.com/ajax/libs/flv.js/1.3.2/flv.min.js',
6130 canPlayType
: function canPlayType(type
) {
6131 return _constants
.HAS_MSE
&& ['video/x-flv', 'video/flv'].indexOf(type
.toLowerCase()) > -1;
6134 create
: function create(mediaElement
, options
, mediaFiles
) {
6136 var originalNode
= mediaElement
.originalNode
,
6137 id
= mediaElement
.id
+ '_' + options
.prefix
;
6142 node
= originalNode
.cloneNode(true);
6143 options
= Object
.assign(options
, mediaElement
.options
);
6145 var props
= _mejs2
.default.html5media
.properties
,
6146 events
= _mejs2
.default.html5media
.events
.concat(['click', 'mouseover', 'mouseout']),
6147 attachNativeEvents
= function attachNativeEvents(e
) {
6148 if (e
.type
!== 'error') {
6149 var _event
= (0, _general
.createEvent
)(e
.type
, mediaElement
);
6150 mediaElement
.dispatchEvent(_event
);
6153 assignGettersSetters
= function assignGettersSetters(propName
) {
6154 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
6156 node
['get' + capName
] = function () {
6157 return flvPlayer
!== null ? node
[propName
] : null;
6160 node
['set' + capName
] = function (value
) {
6161 if (_mejs2
.default.html5media
.readOnlyProperties
.indexOf(propName
) === -1) {
6162 if (propName
=== 'src') {
6163 node
[propName
] = (typeof value
=== 'undefined' ? 'undefined' : _typeof(value
)) === 'object' && value
.src
? value
.src
: value
;
6164 if (flvPlayer
!== null) {
6165 var _flvOptions
= {};
6166 _flvOptions
.type
= 'flv';
6167 _flvOptions
.url
= value
;
6168 _flvOptions
.cors
= options
.flv
.cors
;
6169 _flvOptions
.debug
= options
.flv
.debug
;
6170 _flvOptions
.path
= options
.flv
.path
;
6172 flvPlayer
.destroy();
6173 for (var i
= 0, total
= events
.length
; i
< total
; i
++) {
6174 node
.removeEventListener(events
[i
], attachNativeEvents
);
6176 flvPlayer
= NativeFlv
._createPlayer({
6177 options
: _flvOptions
,
6180 flvPlayer
.attachMediaElement(node
);
6184 node
[propName
] = value
;
6190 for (var i
= 0, total
= props
.length
; i
< total
; i
++) {
6191 assignGettersSetters(props
[i
]);
6194 _window2
.default['__ready__' + id
] = function (_flvPlayer
) {
6195 mediaElement
.flvPlayer
= flvPlayer
= _flvPlayer
;
6197 var flvEvents
= flvjs
.Events
,
6198 assignEvents
= function assignEvents(eventName
) {
6199 if (eventName
=== 'loadedmetadata') {
6201 flvPlayer
.detachMediaElement();
6202 flvPlayer
.attachMediaElement(node
);
6206 node
.addEventListener(eventName
, attachNativeEvents
);
6209 for (var _i
= 0, _total
= events
.length
; _i
< _total
; _i
++) {
6210 assignEvents(events
[_i
]);
6213 var assignFlvEvents
= function assignFlvEvents(name
, data
) {
6214 if (name
=== 'error') {
6215 var message
= data
[0] + ': ' + data
[1] + ' ' + data
[2].msg
;
6216 mediaElement
.generateError(message
, node
.src
);
6218 var _event2
= (0, _general
.createEvent
)(name
, mediaElement
);
6219 _event2
.data
= data
;
6220 mediaElement
.dispatchEvent(_event2
);
6224 var _loop
= function _loop(eventType
) {
6225 if (flvEvents
.hasOwnProperty(eventType
)) {
6226 flvPlayer
.on(flvEvents
[eventType
], function () {
6227 for (var _len
= arguments
.length
, args
= Array(_len
), _key
= 0; _key
< _len
; _key
++) {
6228 args
[_key
] = arguments
[_key
];
6231 return assignFlvEvents(flvEvents
[eventType
], args
);
6236 for (var eventType
in flvEvents
) {
6241 if (mediaFiles
&& mediaFiles
.length
> 0) {
6242 for (var _i2
= 0, _total2
= mediaFiles
.length
; _i2
< _total2
; _i2
++) {
6243 if (_renderer
.renderer
.renderers
[options
.prefix
].canPlayType(mediaFiles
[_i2
].type
)) {
6244 node
.setAttribute('src', mediaFiles
[_i2
].src
);
6250 node
.setAttribute('id', id
);
6252 originalNode
.parentNode
.insertBefore(node
, originalNode
);
6253 originalNode
.autoplay
= false;
6254 originalNode
.style
.display
= 'none';
6256 var flvOptions
= {};
6257 flvOptions
.type
= 'flv';
6258 flvOptions
.url
= node
.src
;
6259 flvOptions
.cors
= options
.flv
.cors
;
6260 flvOptions
.debug
= options
.flv
.debug
;
6261 flvOptions
.path
= options
.flv
.path
;
6263 node
.setSize = function (width
, height
) {
6264 node
.style
.width
= width
+ 'px';
6265 node
.style
.height
= height
+ 'px';
6269 node
.hide = function () {
6270 if (flvPlayer
!== null) {
6273 node
.style
.display
= 'none';
6277 node
.show = function () {
6278 node
.style
.display
= '';
6282 node
.destroy = function () {
6283 if (flvPlayer
!== null) {
6284 flvPlayer
.destroy();
6288 var event
= (0, _general
.createEvent
)('rendererready', node
);
6289 mediaElement
.dispatchEvent(event
);
6291 mediaElement
.promises
.push(NativeFlv
.load({
6292 options
: flvOptions
,
6300 _media
.typeChecks
.push(function (url
) {
6301 return ~url
.toLowerCase().indexOf('.flv') ? 'video/flv' : null;
6304 _renderer
.renderer
.add(FlvNativeRenderer
);
6306 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],22:[function(_dereq_
,module
,exports
){
6309 var _typeof
= typeof Symbol
=== "function" && typeof Symbol
.iterator
=== "symbol" ? function (obj
) { return typeof obj
; } : function (obj
) { return obj
&& typeof Symbol
=== "function" && obj
.constructor === Symbol
&& obj
!== Symbol
.prototype ? "symbol" : typeof obj
; };
6311 var _window
= _dereq_(3);
6313 var _window2
= _interopRequireDefault(_window
);
6315 var _mejs
= _dereq_(7);
6317 var _mejs2
= _interopRequireDefault(_mejs
);
6319 var _renderer
= _dereq_(8);
6321 var _general
= _dereq_(27);
6323 var _constants
= _dereq_(25);
6325 var _media
= _dereq_(28);
6327 var _dom
= _dereq_(26);
6329 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
6335 load
: function load(settings
) {
6336 if (typeof Hls
!== 'undefined') {
6337 NativeHls
.promise
= new Promise(function (resolve
) {
6339 }).then(function () {
6340 NativeHls
._createPlayer(settings
);
6343 settings
.options
.path
= typeof settings
.options
.path
=== 'string' ? settings
.options
.path
: 'https://cdnjs.cloudflare.com/ajax/libs/hls.js/0.7.11/hls.min.js';
6345 NativeHls
.promise
= NativeHls
.promise
|| (0, _dom
.loadScript
)(settings
.options
.path
);
6346 NativeHls
.promise
.then(function () {
6347 NativeHls
._createPlayer(settings
);
6351 return NativeHls
.promise
;
6354 _createPlayer
: function _createPlayer(settings
) {
6355 var player
= new Hls(settings
.options
);
6356 _window2
.default['__ready__' + settings
.id
](player
);
6361 var HlsNativeRenderer
= {
6364 prefix
: 'native_hls',
6366 path
: 'https://cdnjs.cloudflare.com/ajax/libs/hls.js/0.7.11/hls.min.js',
6368 autoStartLoad
: false,
6373 canPlayType
: function canPlayType(type
) {
6374 return _constants
.HAS_MSE
&& ['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type
.toLowerCase()) > -1;
6377 create
: function create(mediaElement
, options
, mediaFiles
) {
6379 var originalNode
= mediaElement
.originalNode
,
6380 id
= mediaElement
.id
+ '_' + options
.prefix
,
6381 preload
= originalNode
.getAttribute('preload'),
6382 autoplay
= originalNode
.autoplay
;
6384 var hlsPlayer
= null,
6387 node
= originalNode
.cloneNode(true);
6388 options
= Object
.assign(options
, mediaElement
.options
);
6389 options
.hls
.autoStartLoad
= preload
&& preload
!== 'none' || autoplay
;
6391 var props
= _mejs2
.default.html5media
.properties
,
6392 events
= _mejs2
.default.html5media
.events
.concat(['click', 'mouseover', 'mouseout']),
6393 attachNativeEvents
= function attachNativeEvents(e
) {
6394 if (e
.type
!== 'error') {
6395 var _event
= (0, _general
.createEvent
)(e
.type
, mediaElement
);
6396 mediaElement
.dispatchEvent(_event
);
6399 assignGettersSetters
= function assignGettersSetters(propName
) {
6400 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
6402 node
['get' + capName
] = function () {
6403 return hlsPlayer
!== null ? node
[propName
] : null;
6406 node
['set' + capName
] = function (value
) {
6407 if (_mejs2
.default.html5media
.readOnlyProperties
.indexOf(propName
) === -1) {
6408 if (propName
=== 'src') {
6409 node
[propName
] = (typeof value
=== 'undefined' ? 'undefined' : _typeof(value
)) === 'object' && value
.src
? value
.src
: value
;
6410 if (hlsPlayer
!== null) {
6411 hlsPlayer
.destroy();
6412 for (var i
= 0, total
= events
.length
; i
< total
; i
++) {
6413 node
.removeEventListener(events
[i
], attachNativeEvents
);
6415 hlsPlayer
= NativeHls
._createPlayer({
6416 options
: options
.hls
,
6419 hlsPlayer
.loadSource(value
);
6420 hlsPlayer
.attachMedia(node
);
6423 node
[propName
] = value
;
6429 for (var i
= 0, total
= props
.length
; i
< total
; i
++) {
6430 assignGettersSetters(props
[i
]);
6433 _window2
.default['__ready__' + id
] = function (_hlsPlayer
) {
6434 mediaElement
.hlsPlayer
= hlsPlayer
= _hlsPlayer
;
6435 var hlsEvents
= Hls
.Events
,
6436 assignEvents
= function assignEvents(eventName
) {
6437 if (eventName
=== 'loadedmetadata') {
6438 var url
= mediaElement
.originalNode
.src
;
6439 hlsPlayer
.detachMedia();
6440 hlsPlayer
.loadSource(url
);
6441 hlsPlayer
.attachMedia(node
);
6444 node
.addEventListener(eventName
, attachNativeEvents
);
6447 for (var _i
= 0, _total
= events
.length
; _i
< _total
; _i
++) {
6448 assignEvents(events
[_i
]);
6451 var recoverDecodingErrorDate
= void 0,
6452 recoverSwapAudioCodecDate
= void 0;
6453 var assignHlsEvents
= function assignHlsEvents(name
, data
) {
6454 if (name
=== 'hlsError') {
6455 console
.warn(name
, data
);
6458 switch (data
.type
) {
6460 var now
= new Date().getTime();
6461 if (!recoverDecodingErrorDate
|| now
- recoverDecodingErrorDate
> 3000) {
6462 recoverDecodingErrorDate
= new Date().getTime();
6463 hlsPlayer
.recoverMediaError();
6464 } else if (!recoverSwapAudioCodecDate
|| now
- recoverSwapAudioCodecDate
> 3000) {
6465 recoverSwapAudioCodecDate
= new Date().getTime();
6466 console
.warn('Attempting to swap Audio Codec and recover from media error');
6467 hlsPlayer
.swapAudioCodec();
6468 hlsPlayer
.recoverMediaError();
6470 var _message
= 'Cannot recover, last media error recovery failed';
6471 mediaElement
.generateError(_message
, node
.src
);
6472 console
.error(_message
);
6475 case 'networkError':
6476 var message
= 'Network error';
6477 mediaElement
.generateError(message
, node
.src
);
6478 console
.error(message
);
6481 hlsPlayer
.destroy();
6486 var _event2
= (0, _general
.createEvent
)(name
, mediaElement
);
6487 _event2
.data
= data
;
6488 mediaElement
.dispatchEvent(_event2
);
6492 var _loop
= function _loop(eventType
) {
6493 if (hlsEvents
.hasOwnProperty(eventType
)) {
6494 hlsPlayer
.on(hlsEvents
[eventType
], function () {
6495 for (var _len
= arguments
.length
, args
= Array(_len
), _key
= 0; _key
< _len
; _key
++) {
6496 args
[_key
] = arguments
[_key
];
6499 return assignHlsEvents(hlsEvents
[eventType
], args
);
6504 for (var eventType
in hlsEvents
) {
6509 if (mediaFiles
&& mediaFiles
.length
> 0) {
6510 for (var _i2
= 0, _total2
= mediaFiles
.length
; _i2
< _total2
; _i2
++) {
6511 if (_renderer
.renderer
.renderers
[options
.prefix
].canPlayType(mediaFiles
[_i2
].type
)) {
6512 node
.setAttribute('src', mediaFiles
[_i2
].src
);
6518 if (preload
!== 'auto' && !autoplay
) {
6519 node
.addEventListener('play', function () {
6520 if (hlsPlayer
!== null) {
6521 hlsPlayer
.startLoad();
6525 node
.addEventListener('pause', function () {
6526 if (hlsPlayer
!== null) {
6527 hlsPlayer
.stopLoad();
6532 node
.setAttribute('id', id
);
6534 originalNode
.parentNode
.insertBefore(node
, originalNode
);
6535 originalNode
.autoplay
= false;
6536 originalNode
.style
.display
= 'none';
6538 node
.setSize = function (width
, height
) {
6539 node
.style
.width
= width
+ 'px';
6540 node
.style
.height
= height
+ 'px';
6544 node
.hide = function () {
6546 node
.style
.display
= 'none';
6550 node
.show = function () {
6551 node
.style
.display
= '';
6555 node
.destroy = function () {
6556 if (hlsPlayer
!== null) {
6557 hlsPlayer
.stopLoad();
6558 hlsPlayer
.destroy();
6562 var event
= (0, _general
.createEvent
)('rendererready', node
);
6563 mediaElement
.dispatchEvent(event
);
6565 mediaElement
.promises
.push(NativeHls
.load({
6566 options
: options
.hls
,
6574 _media
.typeChecks
.push(function (url
) {
6575 return ~url
.toLowerCase().indexOf('.m3u8') ? 'application/x-mpegURL' : null;
6578 _renderer
.renderer
.add(HlsNativeRenderer
);
6580 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],23:[function(_dereq_
,module
,exports
){
6583 var _window
= _dereq_(3);
6585 var _window2
= _interopRequireDefault(_window
);
6587 var _document
= _dereq_(2);
6589 var _document2
= _interopRequireDefault(_document
);
6591 var _mejs
= _dereq_(7);
6593 var _mejs2
= _interopRequireDefault(_mejs
);
6595 var _renderer
= _dereq_(8);
6597 var _general
= _dereq_(27);
6599 var _constants
= _dereq_(25);
6601 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
6603 var HtmlMediaElement
= {
6609 canPlayType
: function canPlayType(type
) {
6611 var mediaElement
= _document2
.default.createElement('video');
6613 if (_constants
.IS_ANDROID
&& /\/mp(3|4)$/i.test(type
) || ~['application/x-mpegurl', 'vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type
.toLowerCase()) && _constants
.SUPPORTS_NATIVE_HLS
) {
6615 } else if (mediaElement
.canPlayType
) {
6616 return mediaElement
.canPlayType(type
.toLowerCase()).replace(/no/, '');
6622 create
: function create(mediaElement
, options
, mediaFiles
) {
6624 var id
= mediaElement
.id
+ '_' + options
.prefix
;
6628 if (mediaElement
.originalNode
=== undefined || mediaElement
.originalNode
=== null) {
6629 node
= _document2
.default.createElement('audio');
6630 mediaElement
.appendChild(node
);
6632 node
= mediaElement
.originalNode
;
6635 node
.setAttribute('id', id
);
6637 var props
= _mejs2
.default.html5media
.properties
,
6638 assignGettersSetters
= function assignGettersSetters(propName
) {
6639 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
6641 node
['get' + capName
] = function () {
6642 return node
[propName
];
6645 node
['set' + capName
] = function (value
) {
6646 if (_mejs2
.default.html5media
.readOnlyProperties
.indexOf(propName
) === -1) {
6647 node
[propName
] = value
;
6652 for (var i
= 0, total
= props
.length
; i
< total
; i
++) {
6653 assignGettersSetters(props
[i
]);
6656 var events
= _mejs2
.default.html5media
.events
.concat(['click', 'mouseover', 'mouseout']),
6657 assignEvents
= function assignEvents(eventName
) {
6658 node
.addEventListener(eventName
, function (e
) {
6659 var event
= (0, _general
.createEvent
)(e
.type
, mediaElement
);
6660 mediaElement
.dispatchEvent(event
);
6664 for (var _i
= 0, _total
= events
.length
; _i
< _total
; _i
++) {
6665 assignEvents(events
[_i
]);
6668 node
.setSize = function (width
, height
) {
6669 node
.style
.width
= width
+ 'px';
6670 node
.style
.height
= height
+ 'px';
6674 node
.hide = function () {
6675 node
.style
.display
= 'none';
6680 node
.show = function () {
6681 node
.style
.display
= '';
6686 if (mediaFiles
&& mediaFiles
.length
> 0) {
6687 for (var _i2
= 0, _total2
= mediaFiles
.length
; _i2
< _total2
; _i2
++) {
6688 if (_renderer
.renderer
.renderers
[options
.prefix
].canPlayType(mediaFiles
[_i2
].type
)) {
6689 node
.setAttribute('src', mediaFiles
[_i2
].src
);
6695 var event
= (0, _general
.createEvent
)('rendererready', node
);
6696 mediaElement
.dispatchEvent(event
);
6702 _window2
.default.HtmlMediaElement
= _mejs2
.default.HtmlMediaElement
= HtmlMediaElement
;
6704 _renderer
.renderer
.add(HtmlMediaElement
);
6706 },{"2":2,"25":25,"27":27,"3":3,"7":7,"8":8}],24:[function(_dereq_
,module
,exports
){
6709 var _window
= _dereq_(3);
6711 var _window2
= _interopRequireDefault(_window
);
6713 var _document
= _dereq_(2);
6715 var _document2
= _interopRequireDefault(_document
);
6717 var _mejs
= _dereq_(7);
6719 var _mejs2
= _interopRequireDefault(_mejs
);
6721 var _renderer
= _dereq_(8);
6723 var _general
= _dereq_(27);
6725 var _media
= _dereq_(28);
6727 var _dom
= _dereq_(26);
6729 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
6732 isIframeStarted
: false,
6734 isIframeLoaded
: false,
6738 enqueueIframe
: function enqueueIframe(settings
) {
6739 YouTubeApi
.isLoaded
= typeof YT
!== 'undefined' && YT
.loaded
;
6741 if (YouTubeApi
.isLoaded
) {
6742 YouTubeApi
.createIframe(settings
);
6744 YouTubeApi
.loadIframeApi();
6745 YouTubeApi
.iframeQueue
.push(settings
);
6749 loadIframeApi
: function loadIframeApi() {
6750 if (!YouTubeApi
.isIframeStarted
) {
6751 (0, _dom
.loadScript
)('https://www.youtube.com/player_api');
6752 YouTubeApi
.isIframeStarted
= true;
6756 iFrameReady
: function iFrameReady() {
6758 YouTubeApi
.isLoaded
= true;
6759 YouTubeApi
.isIframeLoaded
= true;
6761 while (YouTubeApi
.iframeQueue
.length
> 0) {
6762 var settings
= YouTubeApi
.iframeQueue
.pop();
6763 YouTubeApi
.createIframe(settings
);
6767 createIframe
: function createIframe(settings
) {
6768 return new YT
.Player(settings
.containerId
, settings
);
6771 getYouTubeId
: function getYouTubeId(url
) {
6775 if (url
.indexOf('?') > 0) {
6776 youTubeId
= YouTubeApi
.getYouTubeIdFromParam(url
);
6778 if (youTubeId
=== '') {
6779 youTubeId
= YouTubeApi
.getYouTubeIdFromUrl(url
);
6782 youTubeId
= YouTubeApi
.getYouTubeIdFromUrl(url
);
6785 var id
= youTubeId
.substring(youTubeId
.lastIndexOf('/') + 1);
6786 youTubeId
= id
.split('?');
6787 return youTubeId
[0];
6790 getYouTubeIdFromParam
: function getYouTubeIdFromParam(url
) {
6792 if (url
=== undefined || url
=== null || !url
.trim().length
) {
6796 var parts
= url
.split('?'),
6797 parameters
= parts
[1].split('&');
6801 for (var i
= 0, total
= parameters
.length
; i
< total
; i
++) {
6802 var paramParts
= parameters
[i
].split('=');
6803 if (paramParts
[0] === 'v') {
6804 youTubeId
= paramParts
[1];
6812 getYouTubeIdFromUrl
: function getYouTubeIdFromUrl(url
) {
6814 if (url
=== undefined || url
=== null || !url
.trim().length
) {
6818 var parts
= url
.split('?');
6820 return url
.substring(url
.lastIndexOf('/') + 1);
6823 getYouTubeNoCookieUrl
: function getYouTubeNoCookieUrl(url
) {
6824 if (url
=== undefined || url
=== null || !url
.trim().length
|| url
.indexOf('//www.youtube') === -1) {
6828 var parts
= url
.split('/');
6829 parts
[2] = parts
[2].replace('.com', '-nocookie.com');
6830 return parts
.join('/');
6834 var YouTubeIframeRenderer
= {
6835 name
: 'youtube_iframe',
6838 prefix
: 'youtube_iframe',
6859 canPlayType
: function canPlayType(type
) {
6860 return ~['video/youtube', 'video/x-youtube'].indexOf(type
.toLowerCase());
6863 create
: function create(mediaElement
, options
, mediaFiles
) {
6869 var youTubeApi
= null,
6872 youTubeIframe
= null,
6875 youtube
.options
= options
;
6876 youtube
.id
= mediaElement
.id
+ '_' + options
.prefix
;
6877 youtube
.mediaElement
= mediaElement
;
6879 var props
= _mejs2
.default.html5media
.properties
,
6880 assignGettersSetters
= function assignGettersSetters(propName
) {
6882 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
6884 youtube
['get' + capName
] = function () {
6885 if (youTubeApi
!== null) {
6890 return youTubeApi
.getCurrentTime();
6892 return youTubeApi
.getDuration();
6894 volume
= youTubeApi
.getVolume() / 100;
6901 return youTubeApi
.isMuted();
6903 var percentLoaded
= youTubeApi
.getVideoLoadedFraction(),
6904 duration
= youTubeApi
.getDuration();
6906 start
: function start() {
6909 end
: function end() {
6910 return percentLoaded
* duration
;
6915 return youTubeApi
.getVideoUrl();
6926 youtube
['set' + capName
] = function (value
) {
6927 if (youTubeApi
!== null) {
6930 var url
= typeof value
=== 'string' ? value
: value
[0].src
,
6931 _videoId
= YouTubeApi
.getYouTubeId(url
);
6933 if (mediaElement
.originalNode
.autoplay
) {
6934 youTubeApi
.loadVideoById(_videoId
);
6936 youTubeApi
.cueVideoById(_videoId
);
6940 youTubeApi
.seekTo(value
);
6946 youTubeApi
.unMute();
6948 setTimeout(function () {
6949 var event
= (0, _general
.createEvent
)('volumechange', youtube
);
6950 mediaElement
.dispatchEvent(event
);
6955 youTubeApi
.setVolume(value
* 100);
6956 setTimeout(function () {
6957 var event
= (0, _general
.createEvent
)('volumechange', youtube
);
6958 mediaElement
.dispatchEvent(event
);
6962 var event
= (0, _general
.createEvent
)('canplay', youtube
);
6963 mediaElement
.dispatchEvent(event
);
6970 apiStack
.push({ type
: 'set', propName
: propName
, value
: value
});
6975 for (var i
= 0, total
= props
.length
; i
< total
; i
++) {
6976 assignGettersSetters(props
[i
]);
6979 var methods
= _mejs2
.default.html5media
.methods
,
6980 assignMethods
= function assignMethods(methodName
) {
6981 youtube
[methodName
] = function () {
6982 if (youTubeApi
!== null) {
6983 switch (methodName
) {
6986 return youTubeApi
.playVideo();
6989 return youTubeApi
.pauseVideo();
6994 apiStack
.push({ type
: 'call', methodName
: methodName
});
6999 for (var _i
= 0, _total
= methods
.length
; _i
< _total
; _i
++) {
7000 assignMethods(methods
[_i
]);
7003 var youtubeContainer
= _document2
.default.createElement('div');
7004 youtubeContainer
.id
= youtube
.id
;
7006 if (youtube
.options
.youtube
.nocookie
) {
7007 mediaElement
.originalNode
.src
= YouTubeApi
.getYouTubeNoCookieUrl(mediaFiles
[0].src
);
7010 mediaElement
.originalNode
.parentNode
.insertBefore(youtubeContainer
, mediaElement
.originalNode
);
7011 mediaElement
.originalNode
.style
.display
= 'none';
7013 var isAudio
= mediaElement
.originalNode
.tagName
.toLowerCase() === 'audio',
7014 height
= isAudio
? '1' : mediaElement
.originalNode
.height
,
7015 width
= isAudio
? '1' : mediaElement
.originalNode
.width
,
7016 videoId
= YouTubeApi
.getYouTubeId(mediaFiles
[0].src
),
7019 containerId
: youtubeContainer
.id
,
7023 playerVars
: Object
.assign({
7034 }, youtube
.options
.youtube
),
7035 origin
: _window2
.default.location
.host
,
7037 onReady
: function onReady(e
) {
7038 mediaElement
.youTubeApi
= youTubeApi
= e
.target
;
7039 mediaElement
.youTubeState
= {
7044 if (apiStack
.length
) {
7045 for (var _i2
= 0, _total2
= apiStack
.length
; _i2
< _total2
; _i2
++) {
7047 var stackItem
= apiStack
[_i2
];
7049 if (stackItem
.type
=== 'set') {
7050 var propName
= stackItem
.propName
,
7051 capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
7053 youtube
['set' + capName
](stackItem
.value
);
7054 } else if (stackItem
.type
=== 'call') {
7055 youtube
[stackItem
.methodName
]();
7060 youTubeIframe
= youTubeApi
.getIframe();
7062 if (mediaElement
.originalNode
.getAttribute('muted')) {
7066 var events
= ['mouseover', 'mouseout'],
7067 assignEvents
= function assignEvents(e
) {
7068 var newEvent
= (0, _general
.createEvent
)(e
.type
, youtube
);
7069 mediaElement
.dispatchEvent(newEvent
);
7072 for (var _i3
= 0, _total3
= events
.length
; _i3
< _total3
; _i3
++) {
7073 youTubeIframe
.addEventListener(events
[_i3
], assignEvents
, false);
7076 var initEvents
= ['rendererready', 'loadedmetadata', 'loadeddata', 'canplay'];
7078 for (var _i4
= 0, _total4
= initEvents
.length
; _i4
< _total4
; _i4
++) {
7079 var event
= (0, _general
.createEvent
)(initEvents
[_i4
], youtube
);
7080 mediaElement
.dispatchEvent(event
);
7083 onStateChange
: function onStateChange(e
) {
7088 events
= ['loadedmetadata'];
7095 ended
= !youtube
.options
.youtube
.loop
;
7096 if (!youtube
.options
.youtube
.loop
) {
7097 youtube
.stopInterval();
7101 events
= ['play', 'playing'];
7104 youtube
.startInterval();
7110 youtube
.stopInterval();
7113 events
= ['progress'];
7117 events
= ['loadeddata', 'loadedmetadata', 'canplay'];
7123 for (var _i5
= 0, _total5
= events
.length
; _i5
< _total5
; _i5
++) {
7124 var event
= (0, _general
.createEvent
)(events
[_i5
], youtube
);
7125 mediaElement
.dispatchEvent(event
);
7128 onError
: function onError(e
) {
7129 var event
= (0, _general
.createEvent
)('error', youtube
);
7130 event
.data
= e
.data
;
7131 mediaElement
.dispatchEvent(event
);
7137 youtubeSettings
.playerVars
.playsinline
= 1;
7140 if (mediaElement
.originalNode
.autoplay
) {
7141 youtubeSettings
.playerVars
.autoplay
= 1;
7144 if (mediaElement
.originalNode
.loop
) {
7145 youtubeSettings
.playerVars
.loop
= 1;
7148 YouTubeApi
.enqueueIframe(youtubeSettings
);
7150 youtube
.onEvent = function (eventName
, player
, _youTubeState
) {
7151 if (_youTubeState
!== null && _youTubeState
!== undefined) {
7152 mediaElement
.youTubeState
= _youTubeState
;
7156 youtube
.setSize = function (width
, height
) {
7157 if (youTubeApi
!== null) {
7158 youTubeApi
.setSize(width
, height
);
7161 youtube
.hide = function () {
7162 youtube
.stopInterval();
7164 if (youTubeIframe
) {
7165 youTubeIframe
.style
.display
= 'none';
7168 youtube
.show = function () {
7169 if (youTubeIframe
) {
7170 youTubeIframe
.style
.display
= '';
7173 youtube
.destroy = function () {
7174 youTubeApi
.destroy();
7176 youtube
.interval
= null;
7178 youtube
.startInterval = function () {
7179 youtube
.interval
= setInterval(function () {
7180 var event
= (0, _general
.createEvent
)('timeupdate', youtube
);
7181 mediaElement
.dispatchEvent(event
);
7184 youtube
.stopInterval = function () {
7185 if (youtube
.interval
) {
7186 clearInterval(youtube
.interval
);
7189 youtube
.getPosterUrl = function () {
7190 var quality
= options
.youtube
.imageQuality
,
7191 resolutions
= ['default', 'hqdefault', 'mqdefault', 'sddefault', 'maxresdefault'],
7192 id
= YouTubeApi
.getYouTubeId(mediaElement
.originalNode
.src
);
7193 return quality
&& resolutions
.indexOf(quality
) > -1 && id
? 'https://img.youtube.com/vi/' + id
+ '/' + quality
+ '.jpg' : '';
7200 _window2
.default.onYouTubePlayerAPIReady = function () {
7201 YouTubeApi
.iFrameReady();
7204 _media
.typeChecks
.push(function (url
) {
7205 return (/\/\/(www\.youtube|youtu\.?be)/i.test(url
) ? 'video/x-youtube' : null
7209 _renderer
.renderer
.add(YouTubeIframeRenderer
);
7211 },{"2":2,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],25:[function(_dereq_
,module
,exports
){
7214 Object
.defineProperty(exports
, "__esModule", {
7217 exports
.cancelFullScreen
= exports
.requestFullScreen
= exports
.isFullScreen
= exports
.FULLSCREEN_EVENT_NAME
= exports
.HAS_NATIVE_FULLSCREEN_ENABLED
= exports
.HAS_TRUE_NATIVE_FULLSCREEN
= exports
.HAS_IOS_FULLSCREEN
= exports
.HAS_MS_NATIVE_FULLSCREEN
= exports
.HAS_MOZ_NATIVE_FULLSCREEN
= exports
.HAS_WEBKIT_NATIVE_FULLSCREEN
= exports
.HAS_NATIVE_FULLSCREEN
= exports
.SUPPORTS_NATIVE_HLS
= exports
.SUPPORT_POINTER_EVENTS
= exports
.HAS_MSE
= exports
.IS_STOCK_ANDROID
= exports
.IS_SAFARI
= exports
.IS_FIREFOX
= exports
.IS_CHROME
= exports
.IS_EDGE
= exports
.IS_IE
= exports
.IS_ANDROID
= exports
.IS_IOS
= exports
.IS_IPOD
= exports
.IS_IPHONE
= exports
.IS_IPAD
= exports
.UA
= exports
.NAV
= undefined;
7219 var _window
= _dereq_(3);
7221 var _window2
= _interopRequireDefault(_window
);
7223 var _document
= _dereq_(2);
7225 var _document2
= _interopRequireDefault(_document
);
7227 var _mejs
= _dereq_(7);
7229 var _mejs2
= _interopRequireDefault(_mejs
);
7231 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
7233 var NAV
= exports
.NAV
= _window2
.default.navigator
;
7234 var UA
= exports
.UA
= NAV
.userAgent
.toLowerCase();
7235 var IS_IPAD
= exports
.IS_IPAD
= /ipad/i.test(UA
) && !_window2
.default.MSStream
;
7236 var IS_IPHONE
= exports
.IS_IPHONE
= /iphone/i.test(UA
) && !_window2
.default.MSStream
;
7237 var IS_IPOD
= exports
.IS_IPOD
= /ipod/i.test(UA
) && !_window2
.default.MSStream
;
7238 var IS_IOS
= exports
.IS_IOS
= /ipad|iphone|ipod/i.test(UA
) && !_window2
.default.MSStream
;
7239 var IS_ANDROID
= exports
.IS_ANDROID
= /android/i.test(UA
);
7240 var IS_IE
= exports
.IS_IE
= /(trident|microsoft)/i.test(NAV
.appName
);
7241 var IS_EDGE
= exports
.IS_EDGE
= 'msLaunchUri' in NAV
&& !('documentMode' in _document2
.default);
7242 var IS_CHROME
= exports
.IS_CHROME
= /chrome/i.test(UA
);
7243 var IS_FIREFOX
= exports
.IS_FIREFOX
= /firefox/i.test(UA
);
7244 var IS_SAFARI
= exports
.IS_SAFARI
= /safari/i.test(UA
) && !IS_CHROME
;
7245 var IS_STOCK_ANDROID
= exports
.IS_STOCK_ANDROID
= /^mozilla\/\d+\.\d+\s\(linux;\su;/i.test(UA
);
7246 var HAS_MSE
= exports
.HAS_MSE
= 'MediaSource' in _window2
.default;
7247 var SUPPORT_POINTER_EVENTS
= exports
.SUPPORT_POINTER_EVENTS = function () {
7248 var element
= _document2
.default.createElement('x'),
7249 documentElement
= _document2
.default.documentElement
,
7250 getComputedStyle
= _window2
.default.getComputedStyle
;
7252 if (!('pointerEvents' in element
.style
)) {
7256 element
.style
.pointerEvents
= 'auto';
7257 element
.style
.pointerEvents
= 'x';
7258 documentElement
.appendChild(element
);
7259 var supports
= getComputedStyle
&& getComputedStyle(element
, '').pointerEvents
=== 'auto';
7264 var html5Elements
= ['source', 'track', 'audio', 'video'];
7267 for (var i
= 0, total
= html5Elements
.length
; i
< total
; i
++) {
7268 video
= _document2
.default.createElement(html5Elements
[i
]);
7271 var SUPPORTS_NATIVE_HLS
= exports
.SUPPORTS_NATIVE_HLS
= IS_SAFARI
|| IS_ANDROID
&& (IS_CHROME
|| IS_STOCK_ANDROID
) || IS_IE
&& /edge/i.test(UA
);
7273 var hasiOSFullScreen
= video
.webkitEnterFullscreen
!== undefined;
7275 var hasNativeFullscreen
= video
.requestFullscreen
!== undefined;
7277 if (hasiOSFullScreen
&& /mac os x 10_5/i.test(UA
)) {
7278 hasNativeFullscreen
= false;
7279 hasiOSFullScreen
= false;
7282 var hasWebkitNativeFullScreen
= video
.webkitRequestFullScreen
!== undefined;
7283 var hasMozNativeFullScreen
= video
.mozRequestFullScreen
!== undefined;
7284 var hasMsNativeFullScreen
= video
.msRequestFullscreen
!== undefined;
7285 var hasTrueNativeFullScreen
= hasWebkitNativeFullScreen
|| hasMozNativeFullScreen
|| hasMsNativeFullScreen
;
7286 var nativeFullScreenEnabled
= hasTrueNativeFullScreen
;
7287 var fullScreenEventName
= '';
7288 var isFullScreen
= void 0,
7289 requestFullScreen
= void 0,
7290 cancelFullScreen
= void 0;
7292 if (hasMozNativeFullScreen
) {
7293 nativeFullScreenEnabled
= _document2
.default.mozFullScreenEnabled
;
7294 } else if (hasMsNativeFullScreen
) {
7295 nativeFullScreenEnabled
= _document2
.default.msFullscreenEnabled
;
7299 hasiOSFullScreen
= false;
7302 if (hasTrueNativeFullScreen
) {
7303 if (hasWebkitNativeFullScreen
) {
7304 fullScreenEventName
= 'webkitfullscreenchange';
7305 } else if (hasMozNativeFullScreen
) {
7306 fullScreenEventName
= 'mozfullscreenchange';
7307 } else if (hasMsNativeFullScreen
) {
7308 fullScreenEventName
= 'MSFullscreenChange';
7311 exports
.isFullScreen
= isFullScreen
= function isFullScreen() {
7312 if (hasMozNativeFullScreen
) {
7313 return _document2
.default.mozFullScreen
;
7314 } else if (hasWebkitNativeFullScreen
) {
7315 return _document2
.default.webkitIsFullScreen
;
7316 } else if (hasMsNativeFullScreen
) {
7317 return _document2
.default.msFullscreenElement
!== null;
7321 exports
.requestFullScreen
= requestFullScreen
= function requestFullScreen(el
) {
7322 if (hasWebkitNativeFullScreen
) {
7323 el
.webkitRequestFullScreen();
7324 } else if (hasMozNativeFullScreen
) {
7325 el
.mozRequestFullScreen();
7326 } else if (hasMsNativeFullScreen
) {
7327 el
.msRequestFullscreen();
7331 exports
.cancelFullScreen
= cancelFullScreen
= function cancelFullScreen() {
7332 if (hasWebkitNativeFullScreen
) {
7333 _document2
.default.webkitCancelFullScreen();
7334 } else if (hasMozNativeFullScreen
) {
7335 _document2
.default.mozCancelFullScreen();
7336 } else if (hasMsNativeFullScreen
) {
7337 _document2
.default.msExitFullscreen();
7342 var HAS_NATIVE_FULLSCREEN
= exports
.HAS_NATIVE_FULLSCREEN
= hasNativeFullscreen
;
7343 var HAS_WEBKIT_NATIVE_FULLSCREEN
= exports
.HAS_WEBKIT_NATIVE_FULLSCREEN
= hasWebkitNativeFullScreen
;
7344 var HAS_MOZ_NATIVE_FULLSCREEN
= exports
.HAS_MOZ_NATIVE_FULLSCREEN
= hasMozNativeFullScreen
;
7345 var HAS_MS_NATIVE_FULLSCREEN
= exports
.HAS_MS_NATIVE_FULLSCREEN
= hasMsNativeFullScreen
;
7346 var HAS_IOS_FULLSCREEN
= exports
.HAS_IOS_FULLSCREEN
= hasiOSFullScreen
;
7347 var HAS_TRUE_NATIVE_FULLSCREEN
= exports
.HAS_TRUE_NATIVE_FULLSCREEN
= hasTrueNativeFullScreen
;
7348 var HAS_NATIVE_FULLSCREEN_ENABLED
= exports
.HAS_NATIVE_FULLSCREEN_ENABLED
= nativeFullScreenEnabled
;
7349 var FULLSCREEN_EVENT_NAME
= exports
.FULLSCREEN_EVENT_NAME
= fullScreenEventName
;
7350 exports
.isFullScreen
= isFullScreen
;
7351 exports
.requestFullScreen
= requestFullScreen
;
7352 exports
.cancelFullScreen
= cancelFullScreen
;
7355 _mejs2
.default.Features
= _mejs2
.default.Features
|| {};
7356 _mejs2
.default.Features
.isiPad
= IS_IPAD
;
7357 _mejs2
.default.Features
.isiPod
= IS_IPOD
;
7358 _mejs2
.default.Features
.isiPhone
= IS_IPHONE
;
7359 _mejs2
.default.Features
.isiOS
= _mejs2
.default.Features
.isiPhone
|| _mejs2
.default.Features
.isiPad
;
7360 _mejs2
.default.Features
.isAndroid
= IS_ANDROID
;
7361 _mejs2
.default.Features
.isIE
= IS_IE
;
7362 _mejs2
.default.Features
.isEdge
= IS_EDGE
;
7363 _mejs2
.default.Features
.isChrome
= IS_CHROME
;
7364 _mejs2
.default.Features
.isFirefox
= IS_FIREFOX
;
7365 _mejs2
.default.Features
.isSafari
= IS_SAFARI
;
7366 _mejs2
.default.Features
.isStockAndroid
= IS_STOCK_ANDROID
;
7367 _mejs2
.default.Features
.hasMSE
= HAS_MSE
;
7368 _mejs2
.default.Features
.supportsNativeHLS
= SUPPORTS_NATIVE_HLS
;
7369 _mejs2
.default.Features
.supportsPointerEvents
= SUPPORT_POINTER_EVENTS
;
7370 _mejs2
.default.Features
.hasiOSFullScreen
= HAS_IOS_FULLSCREEN
;
7371 _mejs2
.default.Features
.hasNativeFullscreen
= HAS_NATIVE_FULLSCREEN
;
7372 _mejs2
.default.Features
.hasWebkitNativeFullScreen
= HAS_WEBKIT_NATIVE_FULLSCREEN
;
7373 _mejs2
.default.Features
.hasMozNativeFullScreen
= HAS_MOZ_NATIVE_FULLSCREEN
;
7374 _mejs2
.default.Features
.hasMsNativeFullScreen
= HAS_MS_NATIVE_FULLSCREEN
;
7375 _mejs2
.default.Features
.hasTrueNativeFullScreen
= HAS_TRUE_NATIVE_FULLSCREEN
;
7376 _mejs2
.default.Features
.nativeFullScreenEnabled
= HAS_NATIVE_FULLSCREEN_ENABLED
;
7377 _mejs2
.default.Features
.fullScreenEventName
= FULLSCREEN_EVENT_NAME
;
7378 _mejs2
.default.Features
.isFullScreen
= isFullScreen
;
7379 _mejs2
.default.Features
.requestFullScreen
= requestFullScreen
;
7380 _mejs2
.default.Features
.cancelFullScreen
= cancelFullScreen
;
7382 },{"2":2,"3":3,"7":7}],26:[function(_dereq_
,module
,exports
){
7385 Object
.defineProperty(exports
, "__esModule", {
7388 exports
.removeClass
= exports
.addClass
= exports
.hasClass
= undefined;
7389 exports
.loadScript
= loadScript
;
7390 exports
.offset
= offset
;
7391 exports
.toggleClass
= toggleClass
;
7392 exports
.fadeOut
= fadeOut
;
7393 exports
.fadeIn
= fadeIn
;
7394 exports
.siblings
= siblings
;
7395 exports
.visible
= visible
;
7396 exports
.ajax
= ajax
;
7398 var _window
= _dereq_(3);
7400 var _window2
= _interopRequireDefault(_window
);
7402 var _document
= _dereq_(2);
7404 var _document2
= _interopRequireDefault(_document
);
7406 var _mejs
= _dereq_(7);
7408 var _mejs2
= _interopRequireDefault(_mejs
);
7410 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
7412 function loadScript(url
) {
7413 return new Promise(function (resolve
, reject
) {
7414 var script
= _document2
.default.createElement('script');
7416 script
.async
= true;
7417 script
.onload = function () {
7421 script
.onerror = function () {
7425 _document2
.default.head
.appendChild(script
);
7429 function offset(el
) {
7430 var rect
= el
.getBoundingClientRect(),
7431 scrollLeft
= _window2
.default.pageXOffset
|| _document2
.default.documentElement
.scrollLeft
,
7432 scrollTop
= _window2
.default.pageYOffset
|| _document2
.default.documentElement
.scrollTop
;
7433 return { top
: rect
.top
+ scrollTop
, left
: rect
.left
+ scrollLeft
};
7436 var hasClassMethod
= void 0,
7437 addClassMethod
= void 0,
7438 removeClassMethod
= void 0;
7440 if ('classList' in _document2
.default.documentElement
) {
7441 hasClassMethod
= function hasClassMethod(el
, className
) {
7442 return el
.classList
!== undefined && el
.classList
.contains(className
);
7444 addClassMethod
= function addClassMethod(el
, className
) {
7445 return el
.classList
.add(className
);
7447 removeClassMethod
= function removeClassMethod(el
, className
) {
7448 return el
.classList
.remove(className
);
7451 hasClassMethod
= function hasClassMethod(el
, className
) {
7452 return new RegExp('\\b' + className
+ '\\b').test(el
.className
);
7454 addClassMethod
= function addClassMethod(el
, className
) {
7455 if (!hasClass(el
, className
)) {
7456 el
.className
+= ' ' + className
;
7459 removeClassMethod
= function removeClassMethod(el
, className
) {
7460 el
.className
= el
.className
.replace(new RegExp('\\b' + className
+ '\\b', 'g'), '');
7464 var hasClass
= exports
.hasClass
= hasClassMethod
;
7465 var addClass
= exports
.addClass
= addClassMethod
;
7466 var removeClass
= exports
.removeClass
= removeClassMethod
;
7468 function toggleClass(el
, className
) {
7469 hasClass(el
, className
) ? removeClass(el
, className
) : addClass(el
, className
);
7472 function fadeOut(el
) {
7473 var duration
= arguments
.length
> 1 && arguments
[1] !== undefined ? arguments
[1] : 400;
7474 var callback
= arguments
[2];
7476 if (!el
.style
.opacity
) {
7477 el
.style
.opacity
= 1;
7481 _window2
.default.requestAnimationFrame(function animate(timestamp
) {
7482 start
= start
|| timestamp
;
7483 var progress
= timestamp
- start
;
7484 var opacity
= parseFloat(1 - progress
/ duration
, 2);
7485 el
.style
.opacity
= opacity
< 0 ? 0 : opacity
;
7486 if (progress
> duration
) {
7487 if (callback
&& typeof callback
=== 'function') {
7491 _window2
.default.requestAnimationFrame(animate
);
7496 function fadeIn(el
) {
7497 var duration
= arguments
.length
> 1 && arguments
[1] !== undefined ? arguments
[1] : 400;
7498 var callback
= arguments
[2];
7500 if (!el
.style
.opacity
) {
7501 el
.style
.opacity
= 0;
7505 _window2
.default.requestAnimationFrame(function animate(timestamp
) {
7506 start
= start
|| timestamp
;
7507 var progress
= timestamp
- start
;
7508 var opacity
= parseFloat(progress
/ duration
, 2);
7509 el
.style
.opacity
= opacity
> 1 ? 1 : opacity
;
7510 if (progress
> duration
) {
7511 if (callback
&& typeof callback
=== 'function') {
7515 _window2
.default.requestAnimationFrame(animate
);
7520 function siblings(el
, filter
) {
7522 el
= el
.parentNode
.firstChild
;
7524 if (!filter
|| filter(el
)) {
7527 } while (el
= el
.nextSibling
);
7531 function visible(elem
) {
7532 return !!(elem
.offsetWidth
|| elem
.offsetHeight
|| elem
.getClientRects().length
);
7535 function ajax(url
, dataType
, success
, error
) {
7536 var xhr
= _window2
.default.XMLHttpRequest
? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
7538 var type
= 'application/x-www-form-urlencoded; charset=UTF-8',
7540 accept
= '*/'.concat('*');
7544 type
= 'text/plain';
7547 type
= 'application/json, text/javascript';
7553 type
= 'application/xml, text/xml';
7557 if (type
!== 'application/x-www-form-urlencoded') {
7558 accept
= type
+ ', */*; q=0.01';
7562 xhr
.open('GET', url
, true);
7563 xhr
.setRequestHeader('Accept', accept
);
7564 xhr
.onreadystatechange = function () {
7569 if (xhr
.readyState
=== 4) {
7570 if (xhr
.status
=== 200) {
7575 data
= JSON
.parse(xhr
.responseText
);
7578 data
= xhr
.responseXML
;
7581 data
= xhr
.responseText
;
7585 } else if (typeof error
=== 'function') {
7595 _mejs2
.default.Utils
= _mejs2
.default.Utils
|| {};
7596 _mejs2
.default.Utils
.offset
= offset
;
7597 _mejs2
.default.Utils
.hasClass
= hasClass
;
7598 _mejs2
.default.Utils
.addClass
= addClass
;
7599 _mejs2
.default.Utils
.removeClass
= removeClass
;
7600 _mejs2
.default.Utils
.toggleClass
= toggleClass
;
7601 _mejs2
.default.Utils
.fadeIn
= fadeIn
;
7602 _mejs2
.default.Utils
.fadeOut
= fadeOut
;
7603 _mejs2
.default.Utils
.siblings
= siblings
;
7604 _mejs2
.default.Utils
.visible
= visible
;
7605 _mejs2
.default.Utils
.ajax
= ajax
;
7606 _mejs2
.default.Utils
.loadScript
= loadScript
;
7608 },{"2":2,"3":3,"7":7}],27:[function(_dereq_
,module
,exports
){
7611 Object
.defineProperty(exports
, "__esModule", {
7614 exports
.escapeHTML
= escapeHTML
;
7615 exports
.debounce
= debounce
;
7616 exports
.isObjectEmpty
= isObjectEmpty
;
7617 exports
.splitEvents
= splitEvents
;
7618 exports
.createEvent
= createEvent
;
7619 exports
.isNodeAfter
= isNodeAfter
;
7620 exports
.isString
= isString
;
7622 var _mejs
= _dereq_(7);
7624 var _mejs2
= _interopRequireDefault(_mejs
);
7626 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
7628 function escapeHTML(input
) {
7630 if (typeof input
!== 'string') {
7631 throw new Error('Argument passed must be a string');
7641 return input
.replace(/[&<>"]/g, function (c
) {
7646 function debounce(func
, wait
) {
7648 _arguments
= arguments
;
7650 var immediate
= arguments
.length
> 2 && arguments
[2] !== undefined ? arguments
[2] : false;
7653 if (typeof func
!== 'function') {
7654 throw new Error('First argument must be a function');
7657 if (typeof wait
!== 'number') {
7658 throw new Error('Second argument must be a numeric value');
7661 var timeout
= void 0;
7662 return function () {
7663 var context
= _this
,
7665 var later
= function later() {
7668 func
.apply(context
, args
);
7671 var callNow
= immediate
&& !timeout
;
7672 clearTimeout(timeout
);
7673 timeout
= setTimeout(later
, wait
);
7676 func
.apply(context
, args
);
7681 function isObjectEmpty(instance
) {
7682 return Object
.getOwnPropertyNames(instance
).length
<= 0;
7685 function splitEvents(events
, id
) {
7686 var rwindow
= /^((after|before)print|(before)?unload|hashchange|message|o(ff|n)line|page(hide|show)|popstate|resize|storage)\b/;
7688 var ret
= { d
: [], w
: [] };
7689 (events
|| '').split(' ').forEach(function (v
) {
7690 var eventName
= '' + v
+ (id
? '.' + id
: '');
7692 if (eventName
.startsWith('.')) {
7693 ret
.d
.push(eventName
);
7694 ret
.w
.push(eventName
);
7696 ret
[rwindow
.test(v
) ? 'w' : 'd'].push(eventName
);
7700 ret
.d
= ret
.d
.join(' ');
7701 ret
.w
= ret
.w
.join(' ');
7705 function createEvent(eventName
, target
) {
7707 if (typeof eventName
!== 'string') {
7708 throw new Error('Event name must be a string');
7711 var eventFrags
= eventName
.match(/([a-z]+\.([a-z]+))/i),
7716 if (eventFrags
!== null) {
7717 eventName
= eventFrags
[1];
7718 detail
.namespace = eventFrags
[2];
7721 return new window
.CustomEvent(eventName
, {
7726 function isNodeAfter(sourceNode
, targetNode
) {
7728 return !!(sourceNode
&& targetNode
&& sourceNode
.compareDocumentPosition(targetNode
) & 2);
7731 function isString(value
) {
7732 return typeof value
=== 'string';
7735 _mejs2
.default.Utils
= _mejs2
.default.Utils
|| {};
7736 _mejs2
.default.Utils
.escapeHTML
= escapeHTML
;
7737 _mejs2
.default.Utils
.debounce
= debounce
;
7738 _mejs2
.default.Utils
.isObjectEmpty
= isObjectEmpty
;
7739 _mejs2
.default.Utils
.splitEvents
= splitEvents
;
7740 _mejs2
.default.Utils
.createEvent
= createEvent
;
7741 _mejs2
.default.Utils
.isNodeAfter
= isNodeAfter
;
7742 _mejs2
.default.Utils
.isString
= isString
;
7744 },{"7":7}],28:[function(_dereq_
,module
,exports
){
7747 Object
.defineProperty(exports
, "__esModule", {
7750 exports
.typeChecks
= undefined;
7751 exports
.absolutizeUrl
= absolutizeUrl
;
7752 exports
.formatType
= formatType
;
7753 exports
.getMimeFromType
= getMimeFromType
;
7754 exports
.getTypeFromFile
= getTypeFromFile
;
7755 exports
.getExtension
= getExtension
;
7756 exports
.normalizeExtension
= normalizeExtension
;
7758 var _mejs
= _dereq_(7);
7760 var _mejs2
= _interopRequireDefault(_mejs
);
7762 var _general
= _dereq_(27);
7764 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
7766 var typeChecks
= exports
.typeChecks
= [];
7768 function absolutizeUrl(url
) {
7770 if (typeof url
!== 'string') {
7771 throw new Error('`url` argument must be a string');
7774 var el
= document
.createElement('div');
7775 el
.innerHTML
= '<a href="' + (0, _general
.escapeHTML
)(url
) + '">x</a>';
7776 return el
.firstChild
.href
;
7779 function formatType(url
) {
7780 var type
= arguments
.length
> 1 && arguments
[1] !== undefined ? arguments
[1] : '';
7782 return url
&& !type
? getTypeFromFile(url
) : type
;
7785 function getMimeFromType(type
) {
7787 if (typeof type
!== 'string') {
7788 throw new Error('`type` argument must be a string');
7791 return type
&& type
.indexOf(';') > -1 ? type
.substr(0, type
.indexOf(';')) : type
;
7794 function getTypeFromFile(url
) {
7796 if (typeof url
!== 'string') {
7797 throw new Error('`url` argument must be a string');
7800 for (var i
= 0, total
= typeChecks
.length
; i
< total
; i
++) {
7801 var type
= typeChecks
[i
](url
);
7808 var ext
= getExtension(url
),
7809 normalizedExt
= normalizeExtension(ext
);
7811 var mime
= 'video/mp4';
7813 if (normalizedExt
) {
7814 if (~['mp4', 'm4v', 'ogg', 'ogv', 'webm', 'flv', 'mpeg', 'mov'].indexOf(normalizedExt
)) {
7815 mime
= 'video/' + normalizedExt
;
7816 } else if (~['mp3', 'oga', 'wav', 'mid', 'midi'].indexOf(normalizedExt
)) {
7817 mime
= 'audio/' + normalizedExt
;
7824 function getExtension(url
) {
7826 if (typeof url
!== 'string') {
7827 throw new Error('`url` argument must be a string');
7830 var baseUrl
= url
.split('?')[0],
7831 baseName
= baseUrl
.split('\\').pop().split('/').pop();
7832 return ~baseName
.indexOf('.') ? baseName
.substring(baseName
.lastIndexOf('.') + 1) : '';
7835 function normalizeExtension(extension
) {
7837 if (typeof extension
!== 'string') {
7838 throw new Error('`extension` argument must be a string');
7841 switch (extension
) {
7858 _mejs2
.default.Utils
= _mejs2
.default.Utils
|| {};
7859 _mejs2
.default.Utils
.typeChecks
= typeChecks
;
7860 _mejs2
.default.Utils
.absolutizeUrl
= absolutizeUrl
;
7861 _mejs2
.default.Utils
.formatType
= formatType
;
7862 _mejs2
.default.Utils
.getMimeFromType
= getMimeFromType
;
7863 _mejs2
.default.Utils
.getTypeFromFile
= getTypeFromFile
;
7864 _mejs2
.default.Utils
.getExtension
= getExtension
;
7865 _mejs2
.default.Utils
.normalizeExtension
= normalizeExtension
;
7867 },{"27":27,"7":7}],29:[function(_dereq_
,module
,exports
){
7870 var _document
= _dereq_(2);
7872 var _document2
= _interopRequireDefault(_document
);
7874 var _promisePolyfill
= _dereq_(4);
7876 var _promisePolyfill2
= _interopRequireDefault(_promisePolyfill
);
7878 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
7881 arr
.forEach(function (item
) {
7882 if (item
.hasOwnProperty('remove')) {
7885 Object
.defineProperty(item
, 'remove', {
7889 value
: function remove() {
7890 this.parentNode
.removeChild(this);
7894 })([Element
.prototype, CharacterData
.prototype, DocumentType
.prototype]);
7898 if (typeof window
.CustomEvent
=== 'function') {
7902 function CustomEvent(event
, params
) {
7903 params
= params
|| { bubbles
: false, cancelable
: false, detail
: undefined };
7904 var evt
= _document2
.default.createEvent('CustomEvent');
7905 evt
.initCustomEvent(event
, params
.bubbles
, params
.cancelable
, params
.detail
);
7909 CustomEvent
.prototype = window
.Event
.prototype;
7910 window
.CustomEvent
= CustomEvent
;
7913 if (typeof Object
.assign
!== 'function') {
7914 Object
.assign = function (target
) {
7916 if (target
=== null || target
=== undefined) {
7917 throw new TypeError('Cannot convert undefined or null to object');
7920 var to
= Object(target
);
7922 for (var index
= 1, total
= arguments
.length
; index
< total
; index
++) {
7923 var nextSource
= arguments
[index
];
7925 if (nextSource
!== null) {
7926 for (var nextKey
in nextSource
) {
7927 if (Object
.prototype.hasOwnProperty
.call(nextSource
, nextKey
)) {
7928 to
[nextKey
] = nextSource
[nextKey
];
7937 if (!String
.prototype.startsWith
) {
7938 String
.prototype.startsWith = function (searchString
, position
) {
7939 position
= position
|| 0;
7940 return this.substr(position
, searchString
.length
) === searchString
;
7944 if (!Element
.prototype.matches
) {
7945 Element
.prototype.matches
= Element
.prototype.matchesSelector
|| Element
.prototype.mozMatchesSelector
|| Element
.prototype.msMatchesSelector
|| Element
.prototype.oMatchesSelector
|| Element
.prototype.webkitMatchesSelector
|| function (s
) {
7946 var matches
= (this.document
|| this.ownerDocument
).querySelectorAll(s
),
7947 i
= matches
.length
- 1;
7948 while (--i
>= 0 && matches
.item(i
) !== this) {}
7953 if (window
.Element
&& !Element
.prototype.closest
) {
7954 Element
.prototype.closest = function (s
) {
7955 var matches
= (this.document
|| this.ownerDocument
).querySelectorAll(s
),
7960 while (--i
>= 0 && matches
.item(i
) !== el
) {}
7961 } while (i
< 0 && (el
= el
.parentElement
));
7968 var vendors
= ['ms', 'moz', 'webkit', 'o'];
7969 for (var x
= 0; x
< vendors
.length
&& !window
.requestAnimationFrame
; ++x
) {
7970 window
.requestAnimationFrame
= window
[vendors
[x
] + 'RequestAnimationFrame'];
7971 window
.cancelAnimationFrame
= window
[vendors
[x
] + 'CancelAnimationFrame'] || window
[vendors
[x
] + 'CancelRequestAnimationFrame'];
7974 if (!window
.requestAnimationFrame
) window
.requestAnimationFrame = function (callback
) {
7975 var currTime
= new Date().getTime();
7976 var timeToCall
= Math
.max(0, 16 - (currTime
- lastTime
));
7977 var id
= window
.setTimeout(function () {
7978 callback(currTime
+ timeToCall
);
7980 lastTime
= currTime
+ timeToCall
;
7984 if (!window
.cancelAnimationFrame
) window
.cancelAnimationFrame = function (id
) {
7989 if (/firefox/i.test(navigator
.userAgent
)) {
7990 window
.mediaElementJsOldGetComputedStyle
= window
.getComputedStyle
;
7991 window
.getComputedStyle = function (el
, pseudoEl
) {
7992 var t
= window
.mediaElementJsOldGetComputedStyle(el
, pseudoEl
);
7993 return t
=== null ? { getPropertyValue
: function getPropertyValue() {} } : t
;
7997 if (!window
.Promise
) {
7998 window
.Promise
= _promisePolyfill2
.default;
8001 (function (constructor) {
8002 if (constructor && constructor.prototype && constructor.prototype.children
=== null) {
8003 Object
.defineProperty(constructor.prototype, 'children', {
8004 get: function get() {
8007 nodes
= this.childNodes
,
8009 while (node
= nodes
[i
++]) {
8010 if (node
.nodeType
=== 1) {
8011 children
.push(node
);
8018 })(window
.Node
|| window
.Element
);
8020 },{"2":2,"4":4}],30:[function(_dereq_
,module
,exports
){
8023 Object
.defineProperty(exports
, "__esModule", {
8026 exports
.isDropFrame
= isDropFrame
;
8027 exports
.secondsToTimeCode
= secondsToTimeCode
;
8028 exports
.timeCodeToSeconds
= timeCodeToSeconds
;
8029 exports
.calculateTimeFormat
= calculateTimeFormat
;
8030 exports
.convertSMPTEtoSeconds
= convertSMPTEtoSeconds
;
8032 var _mejs
= _dereq_(7);
8034 var _mejs2
= _interopRequireDefault(_mejs
);
8036 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
8038 function isDropFrame() {
8039 var fps
= arguments
.length
> 0 && arguments
[0] !== undefined ? arguments
[0] : 25;
8041 return !(fps
% 1 === 0);
8043 function secondsToTimeCode(time
) {
8044 var forceHours
= arguments
.length
> 1 && arguments
[1] !== undefined ? arguments
[1] : false;
8045 var showFrameCount
= arguments
.length
> 2 && arguments
[2] !== undefined ? arguments
[2] : false;
8046 var fps
= arguments
.length
> 3 && arguments
[3] !== undefined ? arguments
[3] : 25;
8047 var secondsDecimalLength
= arguments
.length
> 4 && arguments
[4] !== undefined ? arguments
[4] : 0;
8050 time
= !time
|| typeof time
!== 'number' || time
< 0 ? 0 : time
;
8052 var dropFrames
= Math
.round(fps
* 0.066666),
8053 timeBase
= Math
.round(fps
),
8054 framesPer24Hours
= Math
.round(fps
* 3600) * 24,
8055 framesPer10Minutes
= Math
.round(fps
* 600),
8056 frameSep
= isDropFrame(fps
) ? ';' : ':',
8061 f
= Math
.round(time
* fps
);
8063 if (isDropFrame(fps
)) {
8066 f
= framesPer24Hours
+ f
;
8069 f
= f
% framesPer24Hours
;
8071 var d
= Math
.floor(f
/ framesPer10Minutes
);
8072 var m
= f
% framesPer10Minutes
;
8073 f
= f
+ dropFrames
* 9 * d
;
8074 if (m
> dropFrames
) {
8075 f
= f
+ dropFrames
* Math
.floor((m
- dropFrames
) / Math
.round(timeBase
* 60 - dropFrames
));
8078 var timeBaseDivision
= Math
.floor(f
/ timeBase
);
8080 hours
= Math
.floor(Math
.floor(timeBaseDivision
/ 60) / 60);
8081 minutes
= Math
.floor(timeBaseDivision
/ 60) % 60;
8083 if (showFrameCount
) {
8084 seconds
= timeBaseDivision
% 60;
8086 seconds
= (f
/ timeBase
% 60).toFixed(secondsDecimalLength
);
8089 hours
= Math
.floor(time
/ 3600) % 24;
8090 minutes
= Math
.floor(time
/ 60) % 60;
8091 if (showFrameCount
) {
8092 seconds
= Math
.floor(time
% 60);
8094 seconds
= (time
% 60).toFixed(secondsDecimalLength
);
8097 hours
= hours
<= 0 ? 0 : hours
;
8098 minutes
= minutes
<= 0 ? 0 : minutes
;
8099 seconds
= seconds
<= 0 ? 0 : seconds
;
8101 var result
= forceHours
|| hours
> 0 ? (hours
< 10 ? '0' + hours
: hours
) + ':' : '';
8102 result
+= (minutes
< 10 ? '0' + minutes
: minutes
) + ':';
8103 result
+= '' + (seconds
< 10 ? '0' + seconds
: seconds
);
8105 if (showFrameCount
) {
8106 frames
= (f
% timeBase
).toFixed(0);
8107 frames
= frames
<= 0 ? 0 : frames
;
8108 result
+= frames
< 10 ? frameSep
+ '0' + frames
: '' + frameSep
+ frames
;
8114 function timeCodeToSeconds(time
) {
8115 var fps
= arguments
.length
> 1 && arguments
[1] !== undefined ? arguments
[1] : 25;
8118 if (typeof time
!== 'string') {
8119 throw new TypeError('Time must be a string');
8122 if (time
.indexOf(';') > 0) {
8123 time
= time
.replace(';', ':');
8126 if (!/\d{2}(\:\d{2}){0,3}/i.test(time
)) {
8127 throw new TypeError('Time code must have the format `00:00:00`');
8130 var parts
= time
.split(':');
8132 var output
= void 0,
8138 dropFrames
= Math
.round(fps
* 0.066666),
8139 timeBase
= Math
.round(fps
),
8140 hFrames
= timeBase
* 3600,
8141 mFrames
= timeBase
* 60;
8143 switch (parts
.length
) {
8146 seconds
= parseInt(parts
[0], 10);
8149 minutes
= parseInt(parts
[0], 10);
8150 seconds
= parseInt(parts
[1], 10);
8153 hours
= parseInt(parts
[0], 10);
8154 minutes
= parseInt(parts
[1], 10);
8155 seconds
= parseInt(parts
[2], 10);
8158 hours
= parseInt(parts
[0], 10);
8159 minutes
= parseInt(parts
[1], 10);
8160 seconds
= parseInt(parts
[2], 10);
8161 frames
= parseInt(parts
[3], 10);
8165 if (isDropFrame(fps
)) {
8166 totalMinutes
= 60 * hours
+ minutes
;
8167 output
= hFrames
* hours
+ mFrames
* minutes
+ timeBase
* seconds
+ frames
- dropFrames
* (totalMinutes
- Math
.floor(totalMinutes
/ 10));
8169 output
= (hFrames
* hours
+ mFrames
* minutes
+ fps
* seconds
+ frames
) / fps
;
8172 return parseFloat(output
.toFixed(3));
8175 function calculateTimeFormat(time
, options
) {
8176 var fps
= arguments
.length
> 2 && arguments
[2] !== undefined ? arguments
[2] : 25;
8179 time
= !time
|| typeof time
!== 'number' || time
< 0 ? 0 : time
;
8181 var hours
= Math
.floor(time
/ 3600) % 24,
8182 minutes
= Math
.floor(time
/ 60) % 60,
8183 seconds
= Math
.floor(time
% 60),
8184 frames
= Math
.floor((time
% 1 * fps
).toFixed(3)),
8185 lis
= [[frames
, 'f'], [seconds
, 's'], [minutes
, 'm'], [hours
, 'h']];
8187 var format
= options
.timeFormat
,
8188 firstTwoPlaces
= format
[1] === format
[0],
8189 separatorIndex
= firstTwoPlaces
? 2 : 1,
8190 separator
= format
.length
< separatorIndex
? format
[separatorIndex
] : ':',
8191 firstChar
= format
[0],
8194 for (var i
= 0, len
= lis
.length
; i
< len
; i
++) {
8195 if (~format
.indexOf(lis
[i
][1])) {
8197 } else if (required
) {
8198 var hasNextValue
= false;
8199 for (var j
= i
; j
< len
; j
++) {
8200 if (lis
[j
][0] > 0) {
8201 hasNextValue
= true;
8206 if (!hasNextValue
) {
8210 if (!firstTwoPlaces
) {
8211 format
= firstChar
+ format
;
8213 format
= lis
[i
][1] + separator
+ format
;
8214 if (firstTwoPlaces
) {
8215 format
= lis
[i
][1] + format
;
8217 firstChar
= lis
[i
][1];
8221 options
.currentTimeFormat
= format
;
8224 function convertSMPTEtoSeconds(SMPTE
) {
8226 if (typeof SMPTE
!== 'string') {
8227 throw new TypeError('Argument must be a string value');
8230 SMPTE
= SMPTE
.replace(',', '.');
8232 var decimalLen
= ~SMPTE
.indexOf('.') ? SMPTE
.split('.')[1].length
: 0;
8237 SMPTE
= SMPTE
.split(':').reverse();
8239 for (var i
= 0, total
= SMPTE
.length
; i
< total
; i
++) {
8242 multiplier
= Math
.pow(60, i
);
8244 secs
+= Number(SMPTE
[i
]) * multiplier
;
8246 return Number(secs
.toFixed(decimalLen
));
8249 _mejs2
.default.Utils
= _mejs2
.default.Utils
|| {};
8250 _mejs2
.default.Utils
.secondsToTimeCode
= secondsToTimeCode
;
8251 _mejs2
.default.Utils
.timeCodeToSeconds
= timeCodeToSeconds
;
8252 _mejs2
.default.Utils
.calculateTimeFormat
= calculateTimeFormat
;
8253 _mejs2
.default.Utils
.convertSMPTEtoSeconds
= convertSMPTEtoSeconds
;
8255 },{"7":7}]},{},[29,6,5,15,23,20,19,21,22,24,16,18,17,9,10,11,12,13,14]);