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,3}((\-|_)[a-z]{2})?$/i.test(args
[0])) {
319 throw new TypeError('Language code must have format 2-3 letters and. optionally, hyphen, underscore followed by 2 more letters');
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 var response
= t
.mediaElement
.renderer
[methodName
](args
);
868 if (response
&& typeof response
.then
=== 'function') {
869 response
.catch(function () {
870 if (t
.mediaElement
.paused
) {
871 setTimeout(function () {
872 var tmpResponse
= t
.mediaElement
.renderer
.play();
873 if (tmpResponse
!== undefined) {
874 tmpResponse
.catch(function () {
875 if (!t
.mediaElement
.renderer
.paused
) {
876 t
.mediaElement
.renderer
.pause();
885 t
.mediaElement
.renderer
[methodName
](args
);
888 t
.mediaElement
.generateError(e
, mediaFiles
);
891 assignMethods
= function assignMethods(methodName
) {
892 t
.mediaElement
[methodName
] = function () {
893 for (var _len
= arguments
.length
, args
= Array(_len
), _key
= 0; _key
< _len
; _key
++) {
894 args
[_key
] = arguments
[_key
];
897 if (t
.mediaElement
.renderer
!== undefined && t
.mediaElement
.renderer
!== null && typeof t
.mediaElement
.renderer
[methodName
] === 'function') {
898 if (t
.mediaElement
.promises
.length
) {
899 Promise
.all(t
.mediaElement
.promises
).then(function () {
900 triggerAction(methodName
, args
);
901 }).catch(function (e
) {
902 t
.mediaElement
.generateError(e
, mediaFiles
);
905 triggerAction(methodName
, args
);
912 addProperty(t
.mediaElement
, 'src', getSrc
, setSrc
);
913 t
.mediaElement
.getSrc
= getSrc
;
914 t
.mediaElement
.setSrc
= setSrc
;
916 for (var _i3
= 0, total
= props
.length
; _i3
< total
; _i3
++) {
917 assignGettersSetters(props
[_i3
]);
920 for (var _i4
= 0, _total
= methods
.length
; _i4
< _total
; _i4
++) {
921 assignMethods(methods
[_i4
]);
924 t
.mediaElement
.addEventListener = function (eventName
, callback
) {
925 t
.mediaElement
.events
[eventName
] = t
.mediaElement
.events
[eventName
] || [];
927 t
.mediaElement
.events
[eventName
].push(callback
);
929 t
.mediaElement
.removeEventListener = function (eventName
, callback
) {
931 t
.mediaElement
.events
= {};
935 var callbacks
= t
.mediaElement
.events
[eventName
];
942 t
.mediaElement
.events
[eventName
] = [];
946 for (var _i5
= 0; _i5
< callbacks
.length
; _i5
++) {
947 if (callbacks
[_i5
] === callback
) {
948 t
.mediaElement
.events
[eventName
].splice(_i5
, 1);
955 t
.mediaElement
.dispatchEvent = function (event
) {
956 var callbacks
= t
.mediaElement
.events
[event
.type
];
958 for (var _i6
= 0; _i6
< callbacks
.length
; _i6
++) {
959 callbacks
[_i6
].apply(null, [event
]);
964 t
.mediaElement
.destroy = function () {
965 var mediaElement
= t
.mediaElement
.originalNode
.cloneNode(true);
966 var wrapper
= t
.mediaElement
.parentElement
;
967 mediaElement
.removeAttribute('id');
968 mediaElement
.remove();
969 t
.mediaElement
.remove();
970 wrapper
.append(mediaElement
);
973 if (mediaFiles
.length
) {
974 t
.mediaElement
.src
= mediaFiles
;
977 if (t
.mediaElement
.promises
.length
) {
978 Promise
.all(t
.mediaElement
.promises
).then(function () {
979 if (t
.mediaElement
.options
.success
) {
980 t
.mediaElement
.options
.success(t
.mediaElement
, t
.mediaElement
.originalNode
);
982 }).catch(function () {
983 if (error
&& t
.mediaElement
.options
.error
) {
984 t
.mediaElement
.options
.error(t
.mediaElement
, t
.mediaElement
.originalNode
);
988 if (t
.mediaElement
.options
.success
) {
989 t
.mediaElement
.options
.success(t
.mediaElement
, t
.mediaElement
.originalNode
);
992 if (error
&& t
.mediaElement
.options
.error
) {
993 t
.mediaElement
.options
.error(t
.mediaElement
, t
.mediaElement
.originalNode
);
997 return t
.mediaElement
;
1000 _window2
.default.MediaElement
= MediaElement
;
1001 _mejs2
.default.MediaElement
= MediaElement
;
1003 exports
.default = MediaElement
;
1005 },{"2":2,"25":25,"27":27,"28":28,"3":3,"7":7,"8":8}],7:[function(_dereq_
,module
,exports
){
1008 Object
.defineProperty(exports
, "__esModule", {
1012 var _window
= _dereq_(3);
1014 var _window2
= _interopRequireDefault(_window
);
1016 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
1020 mejs
.version
= '4.2.7';
1023 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'],
1024 readOnlyProperties
: ['duration', 'paused', 'ended', 'buffered', 'error', 'networkState', 'readyState', 'seeking', 'seekable'],
1026 methods
: ['load', 'play', 'pause', 'canPlayType'],
1028 events
: ['loadstart', 'durationchange', 'loadedmetadata', 'loadeddata', 'progress', 'canplay', 'canplaythrough', 'suspend', 'abort', 'error', 'emptied', 'stalled', 'play', 'playing', 'pause', 'waiting', 'seeking', 'seeked', 'timeupdate', 'ended', 'ratechange', 'volumechange'],
1030 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']
1033 _window2
.default.mejs
= mejs
;
1035 exports
.default = mejs
;
1037 },{"3":3}],8:[function(_dereq_
,module
,exports
){
1040 Object
.defineProperty(exports
, "__esModule", {
1043 exports
.renderer
= undefined;
1045 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
; };
1047 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
; }; }();
1049 var _mejs
= _dereq_(7);
1051 var _mejs2
= _interopRequireDefault(_mejs
);
1053 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
1055 function _classCallCheck(instance
, Constructor
) { if (!(instance
instanceof Constructor
)) { throw new TypeError("Cannot call a class as a function"); } }
1057 var Renderer = function () {
1058 function Renderer() {
1059 _classCallCheck(this, Renderer
);
1061 this.renderers
= {};
1065 _createClass(Renderer
, [{
1067 value
: function add(renderer
) {
1068 if (renderer
.name
=== undefined) {
1069 throw new TypeError('renderer must contain at least `name` property');
1072 this.renderers
[renderer
.name
] = renderer
;
1073 this.order
.push(renderer
.name
);
1077 value
: function select(mediaFiles
) {
1078 var renderers
= arguments
.length
> 1 && arguments
[1] !== undefined ? arguments
[1] : [];
1080 var renderersLength
= renderers
.length
;
1082 renderers
= renderers
.length
? renderers
: this.order
;
1084 if (!renderersLength
) {
1085 var rendererIndicator
= [/^(html5|native)/i, /^flash/i, /iframe$/i],
1086 rendererRanking
= function rendererRanking(renderer
) {
1087 for (var i
= 0, total
= rendererIndicator
.length
; i
< total
; i
++) {
1088 if (rendererIndicator
[i
].test(renderer
)) {
1092 return rendererIndicator
.length
;
1095 renderers
.sort(function (a
, b
) {
1096 return rendererRanking(a
) - rendererRanking(b
);
1100 for (var i
= 0, total
= renderers
.length
; i
< total
; i
++) {
1101 var key
= renderers
[i
],
1102 _renderer
= this.renderers
[key
];
1104 if (_renderer
!== null && _renderer
!== undefined) {
1105 for (var j
= 0, jl
= mediaFiles
.length
; j
< jl
; j
++) {
1106 if (typeof _renderer
.canPlayType
=== 'function' && typeof mediaFiles
[j
].type
=== 'string' && _renderer
.canPlayType(mediaFiles
[j
].type
)) {
1108 rendererName
: _renderer
.name
,
1109 src
: mediaFiles
[j
].src
1120 set: function set(order
) {
1121 if (!Array
.isArray(order
)) {
1122 throw new TypeError('order must be an array of strings.');
1125 this._order
= order
;
1127 get: function get() {
1132 set: function set(renderers
) {
1133 if (renderers
!== null && (typeof renderers
=== 'undefined' ? 'undefined' : _typeof(renderers
)) !== 'object') {
1134 throw new TypeError('renderers must be an array of objects.');
1137 this._renderers
= renderers
;
1139 get: function get() {
1140 return this._renderers
;
1147 var renderer
= exports
.renderer
= new Renderer();
1149 _mejs2
.default.Renderers
= renderer
;
1151 },{"7":7}],9:[function(_dereq_
,module
,exports
){
1154 var _window
= _dereq_(3);
1156 var _window2
= _interopRequireDefault(_window
);
1158 var _document
= _dereq_(2);
1160 var _document2
= _interopRequireDefault(_document
);
1162 var _i18n
= _dereq_(5);
1164 var _i18n2
= _interopRequireDefault(_i18n
);
1166 var _player
= _dereq_(16);
1168 var _player2
= _interopRequireDefault(_player
);
1170 var _constants
= _dereq_(25);
1172 var Features
= _interopRequireWildcard(_constants
);
1174 var _general
= _dereq_(27);
1176 var _dom
= _dereq_(26);
1178 var _media
= _dereq_(28);
1180 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
; } }
1182 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
1184 Object
.assign(_player
.config
, {
1185 usePluginFullScreen
: true,
1187 fullscreenText
: null,
1189 useFakeFullscreen
: false
1192 Object
.assign(_player2
.default.prototype, {
1193 isFullScreen
: false,
1195 isNativeFullScreen
: false,
1199 isPluginClickThroughCreated
: false,
1203 containerSizeTimeout
: null,
1205 buildfullscreen
: function buildfullscreen(player
) {
1206 if (!player
.isVideo
) {
1210 player
.isInIframe
= _window2
.default.location
!== _window2
.default.parent
.location
;
1212 player
.detectFullscreenMode();
1215 fullscreenTitle
= (0, _general
.isString
)(t
.options
.fullscreenText
) ? t
.options
.fullscreenText
: _i18n2
.default.t('mejs.fullscreen'),
1216 fullscreenBtn
= _document2
.default.createElement('div');
1218 fullscreenBtn
.className
= t
.options
.classPrefix
+ 'button ' + t
.options
.classPrefix
+ 'fullscreen-button';
1219 fullscreenBtn
.innerHTML
= '<button type="button" aria-controls="' + t
.id
+ '" title="' + fullscreenTitle
+ '" aria-label="' + fullscreenTitle
+ '" tabindex="0"></button>';
1220 t
.addControlElement(fullscreenBtn
, 'fullscreen');
1222 fullscreenBtn
.addEventListener('click', function () {
1223 var isFullScreen
= Features
.HAS_TRUE_NATIVE_FULLSCREEN
&& Features
.IS_FULLSCREEN
|| player
.isFullScreen
;
1226 player
.exitFullScreen();
1228 player
.enterFullScreen();
1232 player
.fullscreenBtn
= fullscreenBtn
;
1234 t
.options
.keyActions
.push({
1236 action
: function action(player
, media
, key
, event
) {
1237 if (!event
.ctrlKey
) {
1238 if (typeof player
.enterFullScreen
!== 'undefined') {
1239 if (player
.isFullScreen
) {
1240 player
.exitFullScreen();
1242 player
.enterFullScreen();
1249 t
.exitFullscreenCallback = function (e
) {
1250 var key
= e
.which
|| e
.keyCode
|| 0;
1251 if (key
=== 27 && (Features
.HAS_TRUE_NATIVE_FULLSCREEN
&& Features
.IS_FULLSCREEN
|| t
.isFullScreen
)) {
1252 player
.exitFullScreen();
1256 t
.globalBind('keydown', t
.exitFullscreenCallback
);
1261 if (Features
.HAS_TRUE_NATIVE_FULLSCREEN
) {
1262 var fullscreenChanged
= function fullscreenChanged() {
1263 if (player
.isFullScreen
) {
1264 if (Features
.isFullScreen()) {
1265 player
.isNativeFullScreen
= true;
1267 player
.setControlsSize();
1269 player
.isNativeFullScreen
= false;
1271 player
.exitFullScreen();
1276 player
.globalBind(Features
.FULLSCREEN_EVENT_NAME
, fullscreenChanged
);
1279 cleanfullscreen
: function cleanfullscreen(player
) {
1280 player
.exitFullScreen();
1281 player
.globalUnbind('keydown', player
.exitFullscreenCallback
);
1283 detectFullscreenMode
: function detectFullscreenMode() {
1285 isNative
= t
.media
.rendererName
!== null && /(native|html5)/i.test(t
.media
.rendererName
);
1289 if (Features
.HAS_TRUE_NATIVE_FULLSCREEN
&& isNative
) {
1290 mode
= 'native-native';
1291 } else if (Features
.HAS_TRUE_NATIVE_FULLSCREEN
&& !isNative
) {
1292 mode
= 'plugin-native';
1293 } else if (t
.usePluginFullScreen
&& Features
.SUPPORT_POINTER_EVENTS
) {
1294 mode
= 'plugin-click';
1297 t
.fullscreenMode
= mode
;
1300 enterFullScreen
: function enterFullScreen() {
1302 isNative
= t
.media
.rendererName
!== null && /(html5|native)/i.test(t
.media
.rendererName
),
1303 containerStyles
= getComputedStyle(t
.getElement(t
.container
));
1305 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()))) {
1306 t
.media
.originalNode
.webkitEnterFullscreen();
1310 (0, _dom
.addClass
)(_document2
.default.documentElement
, t
.options
.classPrefix
+ 'fullscreen');
1311 (0, _dom
.addClass
)(t
.getElement(t
.container
), t
.options
.classPrefix
+ 'container-fullscreen');
1313 t
.normalHeight
= parseFloat(containerStyles
.height
);
1314 t
.normalWidth
= parseFloat(containerStyles
.width
);
1316 if (t
.fullscreenMode
=== 'native-native' || t
.fullscreenMode
=== 'plugin-native') {
1317 Features
.requestFullScreen(t
.getElement(t
.container
));
1320 setTimeout(function checkFullscreen() {
1322 if (t
.isNativeFullScreen
) {
1323 var percentErrorMargin
= 0.002,
1324 windowWidth
= _window2
.default.innerWidth
|| _document2
.default.documentElement
.clientWidth
|| _document2
.default.body
.clientWidth
,
1325 screenWidth
= screen
.width
,
1326 absDiff
= Math
.abs(screenWidth
- windowWidth
),
1327 marginError
= screenWidth
* percentErrorMargin
;
1329 if (absDiff
> marginError
) {
1332 setTimeout(checkFullscreen
, 500);
1339 t
.getElement(t
.container
).style
.width
= '100%';
1340 t
.getElement(t
.container
).style
.height
= '100%';
1342 t
.containerSizeTimeout
= setTimeout(function () {
1343 t
.getElement(t
.container
).style
.width
= '100%';
1344 t
.getElement(t
.container
).style
.height
= '100%';
1345 t
.setControlsSize();
1349 t
.node
.style
.width
= '100%';
1350 t
.node
.style
.height
= '100%';
1352 var elements
= t
.getElement(t
.container
).querySelectorAll('embed, object, video'),
1353 _total
= elements
.length
;
1354 for (var i
= 0; i
< _total
; i
++) {
1355 elements
[i
].style
.width
= '100%';
1356 elements
[i
].style
.height
= '100%';
1360 if (t
.options
.setDimensions
&& typeof t
.media
.setSize
=== 'function') {
1361 t
.media
.setSize(screen
.width
, screen
.height
);
1364 var layers
= t
.getElement(t
.layers
).children
,
1365 total
= layers
.length
;
1366 for (var _i
= 0; _i
< total
; _i
++) {
1367 layers
[_i
].style
.width
= '100%';
1368 layers
[_i
].style
.height
= '100%';
1371 if (t
.fullscreenBtn
) {
1372 (0, _dom
.removeClass
)(t
.fullscreenBtn
, t
.options
.classPrefix
+ 'fullscreen');
1373 (0, _dom
.addClass
)(t
.fullscreenBtn
, t
.options
.classPrefix
+ 'unfullscreen');
1376 t
.setControlsSize();
1377 t
.isFullScreen
= true;
1379 var zoomFactor
= Math
.min(screen
.width
/ t
.width
, screen
.height
/ t
.height
),
1380 captionText
= t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'captions-text');
1382 captionText
.style
.fontSize
= zoomFactor
* 100 + '%';
1383 captionText
.style
.lineHeight
= 'normal';
1384 t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'captions-position').style
.bottom
= (screen
.height
- t
.normalHeight
) / 2 - t
.getElement(t
.controls
).offsetHeight
/ 2 + zoomFactor
+ 15 + 'px';
1386 var event
= (0, _general
.createEvent
)('enteredfullscreen', t
.getElement(t
.container
));
1387 t
.getElement(t
.container
).dispatchEvent(event
);
1389 exitFullScreen
: function exitFullScreen() {
1391 isNative
= t
.media
.rendererName
!== null && /(native|html5)/i.test(t
.media
.rendererName
);
1393 clearTimeout(t
.containerSizeTimeout
);
1395 if (Features
.HAS_TRUE_NATIVE_FULLSCREEN
&& (Features
.IS_FULLSCREEN
|| t
.isFullScreen
)) {
1396 Features
.cancelFullScreen();
1399 (0, _dom
.removeClass
)(_document2
.default.documentElement
, t
.options
.classPrefix
+ 'fullscreen');
1400 (0, _dom
.removeClass
)(t
.getElement(t
.container
), t
.options
.classPrefix
+ 'container-fullscreen');
1402 if (t
.options
.setDimensions
) {
1403 t
.getElement(t
.container
).style
.width
= t
.normalWidth
+ 'px';
1404 t
.getElement(t
.container
).style
.height
= t
.normalHeight
+ 'px';
1407 t
.node
.style
.width
= t
.normalWidth
+ 'px';
1408 t
.node
.style
.height
= t
.normalHeight
+ 'px';
1410 var elements
= t
.getElement(t
.container
).querySelectorAll('embed, object, video'),
1411 _total2
= elements
.length
;
1412 for (var i
= 0; i
< _total2
; i
++) {
1413 elements
[i
].style
.width
= t
.normalWidth
+ 'px';
1414 elements
[i
].style
.height
= t
.normalHeight
+ 'px';
1418 if (typeof t
.media
.setSize
=== 'function') {
1419 t
.media
.setSize(t
.normalWidth
, t
.normalHeight
);
1422 var layers
= t
.getElement(t
.layers
).children
,
1423 total
= layers
.length
;
1424 for (var _i2
= 0; _i2
< total
; _i2
++) {
1425 layers
[_i2
].style
.width
= t
.normalWidth
+ 'px';
1426 layers
[_i2
].style
.height
= t
.normalHeight
+ 'px';
1430 if (t
.fullscreenBtn
) {
1431 (0, _dom
.removeClass
)(t
.fullscreenBtn
, t
.options
.classPrefix
+ 'unfullscreen');
1432 (0, _dom
.addClass
)(t
.fullscreenBtn
, t
.options
.classPrefix
+ 'fullscreen');
1435 t
.setControlsSize();
1436 t
.isFullScreen
= false;
1438 var captionText
= t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'captions-text');
1440 captionText
.style
.fontSize
= '';
1441 captionText
.style
.lineHeight
= '';
1442 t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'captions-position').style
.bottom
= '';
1444 var event
= (0, _general
.createEvent
)('exitedfullscreen', t
.getElement(t
.container
));
1445 t
.getElement(t
.container
).dispatchEvent(event
);
1449 },{"16":16,"2":2,"25":25,"26":26,"27":27,"28":28,"3":3,"5":5}],10:[function(_dereq_
,module
,exports
){
1452 var _document
= _dereq_(2);
1454 var _document2
= _interopRequireDefault(_document
);
1456 var _player
= _dereq_(16);
1458 var _player2
= _interopRequireDefault(_player
);
1460 var _i18n
= _dereq_(5);
1462 var _i18n2
= _interopRequireDefault(_i18n
);
1464 var _general
= _dereq_(27);
1466 var _dom
= _dereq_(26);
1468 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
1470 Object
.assign(_player
.config
, {
1476 Object
.assign(_player2
.default.prototype, {
1477 buildplaypause
: function buildplaypause(player
, controls
, layers
, media
) {
1480 playTitle
= (0, _general
.isString
)(op
.playText
) ? op
.playText
: _i18n2
.default.t('mejs.play'),
1481 pauseTitle
= (0, _general
.isString
)(op
.pauseText
) ? op
.pauseText
: _i18n2
.default.t('mejs.pause'),
1482 play
= _document2
.default.createElement('div');
1484 play
.className
= t
.options
.classPrefix
+ 'button ' + t
.options
.classPrefix
+ 'playpause-button ' + t
.options
.classPrefix
+ 'play';
1485 play
.innerHTML
= '<button type="button" aria-controls="' + t
.id
+ '" title="' + playTitle
+ '" aria-label="' + pauseTitle
+ '" tabindex="0"></button>';
1486 play
.addEventListener('click', function () {
1494 var playBtn
= play
.querySelector('button');
1495 t
.addControlElement(play
, 'playpause');
1497 function togglePlayPause(which
) {
1498 if ('play' === which
) {
1499 (0, _dom
.removeClass
)(play
, t
.options
.classPrefix
+ 'play');
1500 (0, _dom
.removeClass
)(play
, t
.options
.classPrefix
+ 'replay');
1501 (0, _dom
.addClass
)(play
, t
.options
.classPrefix
+ 'pause');
1502 playBtn
.setAttribute('title', pauseTitle
);
1503 playBtn
.setAttribute('aria-label', pauseTitle
);
1506 (0, _dom
.removeClass
)(play
, t
.options
.classPrefix
+ 'pause');
1507 (0, _dom
.removeClass
)(play
, t
.options
.classPrefix
+ 'replay');
1508 (0, _dom
.addClass
)(play
, t
.options
.classPrefix
+ 'play');
1509 playBtn
.setAttribute('title', playTitle
);
1510 playBtn
.setAttribute('aria-label', playTitle
);
1514 togglePlayPause('pse');
1516 media
.addEventListener('loadedmetadata', function () {
1517 if (media
.rendererName
.indexOf('flash') === -1) {
1518 togglePlayPause('pse');
1521 media
.addEventListener('play', function () {
1522 togglePlayPause('play');
1524 media
.addEventListener('playing', function () {
1525 togglePlayPause('play');
1527 media
.addEventListener('pause', function () {
1528 togglePlayPause('pse');
1530 media
.addEventListener('ended', function () {
1531 if (!player
.options
.loop
) {
1532 (0, _dom
.removeClass
)(play
, t
.options
.classPrefix
+ 'pause');
1533 (0, _dom
.removeClass
)(play
, t
.options
.classPrefix
+ 'play');
1534 (0, _dom
.addClass
)(play
, t
.options
.classPrefix
+ 'replay');
1535 playBtn
.setAttribute('title', playTitle
);
1536 playBtn
.setAttribute('aria-label', playTitle
);
1542 },{"16":16,"2":2,"26":26,"27":27,"5":5}],11:[function(_dereq_
,module
,exports
){
1545 var _document
= _dereq_(2);
1547 var _document2
= _interopRequireDefault(_document
);
1549 var _player
= _dereq_(16);
1551 var _player2
= _interopRequireDefault(_player
);
1553 var _i18n
= _dereq_(5);
1555 var _i18n2
= _interopRequireDefault(_i18n
);
1557 var _constants
= _dereq_(25);
1559 var _time
= _dereq_(30);
1561 var _dom
= _dereq_(26);
1563 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
1565 Object
.assign(_player
.config
, {
1566 enableProgressTooltip
: true,
1568 useSmoothHover
: true,
1573 Object
.assign(_player2
.default.prototype, {
1574 buildprogress
: function buildprogress(player
, controls
, layers
, media
) {
1576 var lastKeyPressTime
= 0,
1577 mouseIsDown
= false,
1578 startedPaused
= false;
1581 autoRewindInitial
= player
.options
.autoRewind
,
1582 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>' : '',
1583 rail
= _document2
.default.createElement('div');
1585 rail
.className
= t
.options
.classPrefix
+ 'time-rail';
1586 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>';
1588 t
.addControlElement(rail
, 'progress');
1590 t
.options
.keyActions
.push({
1592 action
: function action(player
) {
1593 if (!isNaN(player
.duration
) && player
.duration
> 0) {
1594 if (player
.isVideo
) {
1595 player
.showControls();
1596 player
.startControlsTimer();
1599 player
.getElement(player
.container
).querySelector('.' + _player
.config
.classPrefix
+ 'time-total').focus();
1601 var newTime
= Math
.max(player
.currentTime
- player
.options
.defaultSeekBackwardInterval(player
), 0);
1602 player
.setCurrentTime(newTime
);
1607 action
: function action(player
) {
1609 if (!isNaN(player
.duration
) && player
.duration
> 0) {
1610 if (player
.isVideo
) {
1611 player
.showControls();
1612 player
.startControlsTimer();
1615 player
.getElement(player
.container
).querySelector('.' + _player
.config
.classPrefix
+ 'time-total').focus();
1617 var newTime
= Math
.min(player
.currentTime
+ player
.options
.defaultSeekForwardInterval(player
), player
.duration
);
1618 player
.setCurrentTime(newTime
);
1623 t
.rail
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-rail');
1624 t
.total
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-total');
1625 t
.loaded
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-loaded');
1626 t
.current
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-current');
1627 t
.handle
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-handle');
1628 t
.timefloat
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-float');
1629 t
.timefloatcurrent
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-float-current');
1630 t
.slider
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-slider');
1631 t
.hovered
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-hovered');
1632 t
.buffer
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'time-buffering');
1634 t
.forcedHandlePause
= false;
1635 t
.setTransformStyle = function (element
, value
) {
1636 element
.style
.transform
= value
;
1637 element
.style
.webkitTransform
= value
;
1638 element
.style
.MozTransform
= value
;
1639 element
.style
.msTransform
= value
;
1640 element
.style
.OTransform
= value
;
1643 t
.buffer
.style
.display
= 'none';
1645 var handleMouseMove
= function handleMouseMove(e
) {
1646 var totalStyles
= getComputedStyle(t
.total
),
1647 offsetStyles
= (0, _dom
.offset
)(t
.total
),
1648 width
= t
.total
.offsetWidth
,
1649 transform = function () {
1650 if (totalStyles
.webkitTransform
!== undefined) {
1651 return 'webkitTransform';
1652 } else if (totalStyles
.mozTransform
!== undefined) {
1653 return 'mozTransform ';
1654 } else if (totalStyles
.oTransform
!== undefined) {
1655 return 'oTransform';
1656 } else if (totalStyles
.msTransform
!== undefined) {
1657 return 'msTransform';
1662 cssMatrix = function () {
1663 if ('WebKitCSSMatrix' in window
) {
1664 return 'WebKitCSSMatrix';
1665 } else if ('MSCSSMatrix' in window
) {
1666 return 'MSCSSMatrix';
1667 } else if ('CSSMatrix' in window
) {
1677 if (e
.originalEvent
&& e
.originalEvent
.changedTouches
) {
1678 x
= e
.originalEvent
.changedTouches
[0].pageX
;
1679 } else if (e
.changedTouches
) {
1680 x
= e
.changedTouches
[0].pageX
;
1685 if (t
.getDuration()) {
1686 if (x
< offsetStyles
.left
) {
1687 x
= offsetStyles
.left
;
1688 } else if (x
> width
+ offsetStyles
.left
) {
1689 x
= width
+ offsetStyles
.left
;
1692 pos
= x
- offsetStyles
.left
;
1693 percentage
= pos
/ width
;
1694 t
.newTime
= percentage
<= 0.02 ? 0 : percentage
* t
.getDuration();
1696 if (mouseIsDown
&& t
.getCurrentTime() !== null && t
.newTime
.toFixed(4) !== t
.getCurrentTime().toFixed(4)) {
1697 t
.setCurrentRailHandle(t
.newTime
);
1698 t
.updateCurrent(t
.newTime
);
1701 if (!_constants
.IS_IOS
&& !_constants
.IS_ANDROID
) {
1705 if (t
.options
.useSmoothHover
&& cssMatrix
!== null && typeof window
[cssMatrix
] !== 'undefined') {
1706 var matrix
= new window
[cssMatrix
](getComputedStyle(t
.handle
)[transform
]),
1707 handleLocation
= matrix
.m41
,
1708 hoverScaleX
= pos
/ parseFloat(getComputedStyle(t
.total
).width
) - handleLocation
/ parseFloat(getComputedStyle(t
.total
).width
);
1710 t
.hovered
.style
.left
= handleLocation
+ 'px';
1711 t
.setTransformStyle(t
.hovered
, 'scaleX(' + hoverScaleX
+ ')');
1712 t
.hovered
.setAttribute('pos', pos
);
1714 if (hoverScaleX
>= 0) {
1715 (0, _dom
.removeClass
)(t
.hovered
, 'negative');
1717 (0, _dom
.addClass
)(t
.hovered
, 'negative');
1722 var half
= t
.timefloat
.offsetWidth
/ 2,
1723 offsetContainer
= mejs
.Utils
.offset(t
.getElement(t
.container
)),
1724 tooltipStyles
= getComputedStyle(t
.timefloat
);
1726 if (x
- offsetContainer
.left
< t
.timefloat
.offsetWidth
) {
1728 } else if (x
- offsetContainer
.left
>= t
.getElement(t
.container
).offsetWidth
- half
) {
1729 leftPos
= t
.total
.offsetWidth
- half
;
1734 if ((0, _dom
.hasClass
)(t
.getElement(t
.container
), t
.options
.classPrefix
+ 'long-video')) {
1735 leftPos
+= parseFloat(tooltipStyles
.marginLeft
) / 2 + t
.timefloat
.offsetWidth
/ 2;
1738 t
.timefloat
.style
.left
= leftPos
+ 'px';
1739 t
.timefloatcurrent
.innerHTML
= (0, _time
.secondsToTimeCode
)(t
.newTime
, player
.options
.alwaysShowHours
, player
.options
.showTimecodeFrameCount
, player
.options
.framesPerSecond
, player
.options
.secondsDecimalLength
, player
.options
.timeFormat
);
1740 t
.timefloat
.style
.display
= 'block';
1743 } else if (!_constants
.IS_IOS
&& !_constants
.IS_ANDROID
&& t
.timefloat
) {
1744 leftPos
= t
.timefloat
.offsetWidth
+ width
>= t
.getElement(t
.container
).offsetWidth
? t
.timefloat
.offsetWidth
/ 2 : 0;
1745 t
.timefloat
.style
.left
= leftPos
+ 'px';
1746 t
.timefloat
.style
.left
= leftPos
+ 'px';
1747 t
.timefloat
.style
.display
= 'block';
1750 updateSlider
= function updateSlider() {
1751 var seconds
= t
.getCurrentTime(),
1752 timeSliderText
= _i18n2
.default.t('mejs.time-slider'),
1753 time
= (0, _time
.secondsToTimeCode
)(seconds
, player
.options
.alwaysShowHours
, player
.options
.showTimecodeFrameCount
, player
.options
.framesPerSecond
, player
.options
.secondsDecimalLength
, player
.options
.timeFormat
),
1754 duration
= t
.getDuration();
1756 t
.slider
.setAttribute('role', 'slider');
1757 t
.slider
.tabIndex
= 0;
1760 t
.slider
.setAttribute('aria-label', timeSliderText
);
1761 t
.slider
.setAttribute('aria-valuemin', 0);
1762 t
.slider
.setAttribute('aria-valuemax', duration
);
1763 t
.slider
.setAttribute('aria-valuenow', seconds
);
1764 t
.slider
.setAttribute('aria-valuetext', time
);
1766 t
.slider
.removeAttribute('aria-label');
1767 t
.slider
.removeAttribute('aria-valuemin');
1768 t
.slider
.removeAttribute('aria-valuemax');
1769 t
.slider
.removeAttribute('aria-valuenow');
1770 t
.slider
.removeAttribute('aria-valuetext');
1773 restartPlayer
= function restartPlayer() {
1774 if (new Date() - lastKeyPressTime
>= 1000) {
1778 handleMouseup
= function handleMouseup() {
1779 if (mouseIsDown
&& t
.getCurrentTime() !== null && t
.newTime
.toFixed(4) !== t
.getCurrentTime().toFixed(4)) {
1780 t
.setCurrentTime(t
.newTime
);
1782 t
.updateCurrent(t
.newTime
);
1784 if (t
.forcedHandlePause
) {
1788 t
.forcedHandlePause
= false;
1791 t
.slider
.addEventListener('focus', function () {
1792 player
.options
.autoRewind
= false;
1794 t
.slider
.addEventListener('blur', function () {
1795 player
.options
.autoRewind
= autoRewindInitial
;
1797 t
.slider
.addEventListener('keydown', function (e
) {
1798 if (new Date() - lastKeyPressTime
>= 1000) {
1799 startedPaused
= t
.paused
;
1802 if (t
.options
.keyActions
.length
) {
1804 var keyCode
= e
.which
|| e
.keyCode
|| 0,
1805 duration
= t
.getDuration(),
1806 seekForward
= player
.options
.defaultSeekForwardInterval(media
),
1807 seekBackward
= player
.options
.defaultSeekBackwardInterval(media
);
1809 var seekTime
= t
.getCurrentTime();
1810 var volume
= t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'volume-slider');
1812 if (keyCode
=== 38 || keyCode
=== 40) {
1814 volume
.style
.display
= 'block';
1818 t
.startControlsTimer();
1821 var newVolume
= keyCode
=== 38 ? Math
.min(t
.volume
+ 0.1, 1) : Math
.max(t
.volume
- 0.1, 0),
1822 mutePlayer
= newVolume
<= 0;
1823 t
.setVolume(newVolume
);
1824 t
.setMuted(mutePlayer
);
1828 volume
.style
.display
= 'none';
1834 if (t
.getDuration() !== Infinity
) {
1835 seekTime
-= seekBackward
;
1839 if (t
.getDuration() !== Infinity
) {
1840 seekTime
+= seekForward
;
1847 seekTime
= duration
;
1851 if (_constants
.IS_FIREFOX
) {
1863 seekTime
= seekTime
< 0 ? 0 : seekTime
>= duration
? duration
: Math
.floor(seekTime
);
1864 lastKeyPressTime
= new Date();
1865 if (!startedPaused
) {
1869 if (seekTime
< t
.getDuration() && !startedPaused
) {
1870 setTimeout(restartPlayer
, 1100);
1873 t
.setCurrentTime(seekTime
);
1874 player
.showControls();
1877 e
.stopPropagation();
1881 var events
= ['mousedown', 'touchstart'];
1883 t
.slider
.addEventListener('dragstart', function () {
1887 for (var i
= 0, total
= events
.length
; i
< total
; i
++) {
1888 t
.slider
.addEventListener(events
[i
], function (e
) {
1889 t
.forcedHandlePause
= false;
1890 if (t
.getDuration() !== Infinity
) {
1891 if (e
.which
=== 1 || e
.which
=== 0) {
1894 t
.forcedHandlePause
= true;
1899 var endEvents
= ['mouseup', 'touchend'];
1901 for (var j
= 0, totalEvents
= endEvents
.length
; j
< totalEvents
; j
++) {
1902 t
.getElement(t
.container
).addEventListener(endEvents
[j
], function (event
) {
1903 var target
= event
.target
;
1904 if (target
=== t
.slider
|| target
.closest('.' + t
.options
.classPrefix
+ 'time-slider')) {
1905 handleMouseMove(event
);
1909 t
.globalBind('mouseup.dur touchend.dur', function () {
1911 mouseIsDown
= false;
1913 t
.timefloat
.style
.display
= 'none';
1918 }, _constants
.SUPPORT_PASSIVE_EVENT
&& events
[i
] === 'touchstart' ? { passive
: true } : false);
1920 t
.slider
.addEventListener('mouseenter', function (e
) {
1921 if (e
.target
=== t
.slider
&& t
.getDuration() !== Infinity
) {
1922 t
.getElement(t
.container
).addEventListener('mousemove', function (event
) {
1923 var target
= event
.target
;
1924 if (target
=== t
.slider
|| target
.closest('.' + t
.options
.classPrefix
+ 'time-slider')) {
1925 handleMouseMove(event
);
1928 if (t
.timefloat
&& !_constants
.IS_IOS
&& !_constants
.IS_ANDROID
) {
1929 t
.timefloat
.style
.display
= 'block';
1931 if (t
.hovered
&& !_constants
.IS_IOS
&& !_constants
.IS_ANDROID
&& t
.options
.useSmoothHover
) {
1932 (0, _dom
.removeClass
)(t
.hovered
, 'no-hover');
1936 t
.slider
.addEventListener('mouseleave', function () {
1937 if (t
.getDuration() !== Infinity
) {
1940 t
.timefloat
.style
.display
= 'none';
1942 if (t
.hovered
&& t
.options
.useSmoothHover
) {
1943 (0, _dom
.addClass
)(t
.hovered
, 'no-hover');
1949 t
.broadcastCallback = function (e
) {
1950 var broadcast
= controls
.querySelector('.' + t
.options
.classPrefix
+ 'broadcast');
1951 if (!t
.options
.forceLive
&& t
.getDuration() !== Infinity
) {
1953 t
.slider
.style
.display
= '';
1957 player
.setProgressRail(e
);
1958 if (!t
.forcedHandlePause
) {
1959 player
.setCurrentRail(e
);
1962 } else if (!broadcast
|| t
.options
.forceLive
) {
1963 var label
= _document2
.default.createElement('span');
1964 label
.className
= t
.options
.classPrefix
+ 'broadcast';
1965 label
.innerText
= _i18n2
.default.t('mejs.live-broadcast');
1966 t
.slider
.style
.display
= 'none';
1967 t
.rail
.appendChild(label
);
1971 media
.addEventListener('progress', t
.broadcastCallback
);
1972 media
.addEventListener('timeupdate', t
.broadcastCallback
);
1973 media
.addEventListener('play', function () {
1974 t
.buffer
.style
.display
= 'none';
1976 media
.addEventListener('playing', function () {
1977 t
.buffer
.style
.display
= 'none';
1979 media
.addEventListener('seeking', function () {
1980 t
.buffer
.style
.display
= '';
1982 media
.addEventListener('seeked', function () {
1983 t
.buffer
.style
.display
= 'none';
1985 media
.addEventListener('pause', function () {
1986 t
.buffer
.style
.display
= 'none';
1988 media
.addEventListener('waiting', function () {
1989 t
.buffer
.style
.display
= '';
1991 media
.addEventListener('loadeddata', function () {
1992 t
.buffer
.style
.display
= '';
1994 media
.addEventListener('canplay', function () {
1995 t
.buffer
.style
.display
= 'none';
1997 media
.addEventListener('error', function () {
1998 t
.buffer
.style
.display
= 'none';
2001 t
.getElement(t
.container
).addEventListener('controlsresize', function (e
) {
2002 if (t
.getDuration() !== Infinity
) {
2003 player
.setProgressRail(e
);
2004 if (!t
.forcedHandlePause
) {
2005 player
.setCurrentRail(e
);
2010 cleanprogress
: function cleanprogress(player
, controls
, layers
, media
) {
2011 media
.removeEventListener('progress', player
.broadcastCallback
);
2012 media
.removeEventListener('timeupdate', player
.broadcastCallback
);
2014 player
.rail
.remove();
2017 setProgressRail
: function setProgressRail(e
) {
2019 target
= e
!== undefined ? e
.detail
.target
|| e
.target
: t
.media
;
2023 if (target
&& target
.buffered
&& target
.buffered
.length
> 0 && target
.buffered
.end
&& t
.getDuration()) {
2024 percent
= target
.buffered
.end(target
.buffered
.length
- 1) / t
.getDuration();
2025 } else if (target
&& target
.bytesTotal
!== undefined && target
.bytesTotal
> 0 && target
.bufferedBytes
!== undefined) {
2026 percent
= target
.bufferedBytes
/ target
.bytesTotal
;
2027 } else if (e
&& e
.lengthComputable
&& e
.total
!== 0) {
2028 percent
= e
.loaded
/ e
.total
;
2031 if (percent
!== null) {
2032 percent
= Math
.min(1, Math
.max(0, percent
));
2035 t
.setTransformStyle(t
.loaded
, 'scaleX(' + percent
+ ')');
2039 setCurrentRailHandle
: function setCurrentRailHandle(fakeTime
) {
2041 t
.setCurrentRailMain(t
, fakeTime
);
2043 setCurrentRail
: function setCurrentRail() {
2045 t
.setCurrentRailMain(t
);
2047 setCurrentRailMain
: function setCurrentRailMain(t
, fakeTime
) {
2048 if (t
.getCurrentTime() !== undefined && t
.getDuration()) {
2049 var nTime
= typeof fakeTime
=== 'undefined' ? t
.getCurrentTime() : fakeTime
;
2051 if (t
.total
&& t
.handle
) {
2052 var tW
= parseFloat(getComputedStyle(t
.total
).width
);
2054 var newWidth
= Math
.round(tW
* nTime
/ t
.getDuration()),
2055 handlePos
= newWidth
- Math
.round(t
.handle
.offsetWidth
/ 2);
2057 handlePos
= handlePos
< 0 ? 0 : handlePos
;
2058 t
.setTransformStyle(t
.current
, 'scaleX(' + newWidth
/ tW
+ ')');
2059 t
.setTransformStyle(t
.handle
, 'translateX(' + handlePos
+ 'px)');
2061 if (t
.options
.useSmoothHover
&& !(0, _dom
.hasClass
)(t
.hovered
, 'no-hover')) {
2062 var pos
= parseInt(t
.hovered
.getAttribute('pos'), 10);
2063 pos
= isNaN(pos
) ? 0 : pos
;
2065 var hoverScaleX
= pos
/ tW
- handlePos
/ tW
;
2067 t
.hovered
.style
.left
= handlePos
+ 'px';
2068 t
.setTransformStyle(t
.hovered
, 'scaleX(' + hoverScaleX
+ ')');
2070 if (hoverScaleX
>= 0) {
2071 (0, _dom
.removeClass
)(t
.hovered
, 'negative');
2073 (0, _dom
.addClass
)(t
.hovered
, 'negative');
2081 },{"16":16,"2":2,"25":25,"26":26,"30":30,"5":5}],12:[function(_dereq_
,module
,exports
){
2084 var _document
= _dereq_(2);
2086 var _document2
= _interopRequireDefault(_document
);
2088 var _player
= _dereq_(16);
2090 var _player2
= _interopRequireDefault(_player
);
2092 var _time
= _dereq_(30);
2094 var _dom
= _dereq_(26);
2096 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
2098 Object
.assign(_player
.config
, {
2101 timeAndDurationSeparator
: '<span> | </span>'
2104 Object
.assign(_player2
.default.prototype, {
2105 buildcurrent
: function buildcurrent(player
, controls
, layers
, media
) {
2107 time
= _document2
.default.createElement('div');
2109 time
.className
= t
.options
.classPrefix
+ 'time';
2110 time
.setAttribute('role', 'timer');
2111 time
.setAttribute('aria-live', 'off');
2112 time
.innerHTML
= '<span class="' + t
.options
.classPrefix
+ 'currenttime">' + (0, _time
.secondsToTimeCode
)(0, player
.options
.alwaysShowHours
, player
.options
.showTimecodeFrameCount
, player
.options
.framesPerSecond
, player
.options
.secondsDecimalLength
, player
.options
.timeFormat
) + '</span>';
2114 t
.addControlElement(time
, 'current');
2115 player
.updateCurrent();
2116 t
.updateTimeCallback = function () {
2117 if (t
.controlsAreVisible
) {
2118 player
.updateCurrent();
2121 media
.addEventListener('timeupdate', t
.updateTimeCallback
);
2123 cleancurrent
: function cleancurrent(player
, controls
, layers
, media
) {
2124 media
.removeEventListener('timeupdate', player
.updateTimeCallback
);
2126 buildduration
: function buildduration(player
, controls
, layers
, media
) {
2128 currTime
= controls
.lastChild
.querySelector('.' + t
.options
.classPrefix
+ 'currenttime');
2131 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
, t
.options
.timeFormat
) + '</span>');
2133 if (controls
.querySelector('.' + t
.options
.classPrefix
+ 'currenttime')) {
2134 (0, _dom
.addClass
)(controls
.querySelector('.' + t
.options
.classPrefix
+ 'currenttime').parentNode
, t
.options
.classPrefix
+ 'currenttime-container');
2137 var duration
= _document2
.default.createElement('div');
2138 duration
.className
= t
.options
.classPrefix
+ 'time ' + t
.options
.classPrefix
+ 'duration-container';
2139 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
, t
.options
.timeFormat
) + '</span>');
2141 t
.addControlElement(duration
, 'duration');
2144 t
.updateDurationCallback = function () {
2145 if (t
.controlsAreVisible
) {
2146 player
.updateDuration();
2150 media
.addEventListener('timeupdate', t
.updateDurationCallback
);
2152 cleanduration
: function cleanduration(player
, controls
, layers
, media
) {
2153 media
.removeEventListener('timeupdate', player
.updateDurationCallback
);
2155 updateCurrent
: function updateCurrent() {
2158 var currentTime
= t
.getCurrentTime();
2160 if (isNaN(currentTime
)) {
2164 var timecode
= (0, _time
.secondsToTimeCode
)(currentTime
, t
.options
.alwaysShowHours
, t
.options
.showTimecodeFrameCount
, t
.options
.framesPerSecond
, t
.options
.secondsDecimalLength
, t
.options
.timeFormat
);
2166 if (timecode
.length
> 5) {
2167 (0, _dom
.addClass
)(t
.getElement(t
.container
), t
.options
.classPrefix
+ 'long-video');
2169 (0, _dom
.removeClass
)(t
.getElement(t
.container
), t
.options
.classPrefix
+ 'long-video');
2172 if (t
.getElement(t
.controls
).querySelector('.' + t
.options
.classPrefix
+ 'currenttime')) {
2173 t
.getElement(t
.controls
).querySelector('.' + t
.options
.classPrefix
+ 'currenttime').innerText
= timecode
;
2176 updateDuration
: function updateDuration() {
2179 var duration
= t
.getDuration();
2181 if (isNaN(duration
) || duration
=== Infinity
|| duration
< 0) {
2182 t
.media
.duration
= t
.options
.duration
= duration
= 0;
2185 if (t
.options
.duration
> 0) {
2186 duration
= t
.options
.duration
;
2189 var timecode
= (0, _time
.secondsToTimeCode
)(duration
, t
.options
.alwaysShowHours
, t
.options
.showTimecodeFrameCount
, t
.options
.framesPerSecond
, t
.options
.secondsDecimalLength
, t
.options
.timeFormat
);
2191 if (timecode
.length
> 5) {
2192 (0, _dom
.addClass
)(t
.getElement(t
.container
), t
.options
.classPrefix
+ 'long-video');
2194 (0, _dom
.removeClass
)(t
.getElement(t
.container
), t
.options
.classPrefix
+ 'long-video');
2197 if (t
.getElement(t
.controls
).querySelector('.' + t
.options
.classPrefix
+ 'duration') && duration
> 0) {
2198 t
.getElement(t
.controls
).querySelector('.' + t
.options
.classPrefix
+ 'duration').innerHTML
= timecode
;
2203 },{"16":16,"2":2,"26":26,"30":30}],13:[function(_dereq_
,module
,exports
){
2206 var _document
= _dereq_(2);
2208 var _document2
= _interopRequireDefault(_document
);
2210 var _mejs
= _dereq_(7);
2212 var _mejs2
= _interopRequireDefault(_mejs
);
2214 var _i18n
= _dereq_(5);
2216 var _i18n2
= _interopRequireDefault(_i18n
);
2218 var _player
= _dereq_(16);
2220 var _player2
= _interopRequireDefault(_player
);
2222 var _time
= _dereq_(30);
2224 var _general
= _dereq_(27);
2226 var _dom
= _dereq_(26);
2228 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
2230 Object
.assign(_player
.config
, {
2237 tracksAriaLive
: false,
2239 hideCaptionsButtonWhenEmpty
: true,
2241 toggleCaptionsButtonWhenOnlyOne
: false,
2246 Object
.assign(_player2
.default.prototype, {
2249 buildtracks
: function buildtracks(player
, controls
, layers
, media
) {
2253 if (!player
.tracks
.length
&& (!player
.trackFiles
|| !player
.trackFiles
.length
=== 0)) {
2258 attr
= t
.options
.tracksAriaLive
? ' role="log" aria-live="assertive" aria-atomic="false"' : '',
2259 tracksTitle
= (0, _general
.isString
)(t
.options
.tracksText
) ? t
.options
.tracksText
: _i18n2
.default.t('mejs.captions-subtitles'),
2260 chaptersTitle
= (0, _general
.isString
)(t
.options
.chaptersText
) ? t
.options
.chaptersText
: _i18n2
.default.t('mejs.captions-chapters'),
2261 total
= player
.trackFiles
=== null ? player
.tracks
.length
: player
.trackFiles
.length
;
2263 if (t
.domNode
.textTracks
) {
2264 for (var i
= t
.domNode
.textTracks
.length
- 1; i
>= 0; i
--) {
2265 t
.domNode
.textTracks
[i
].mode
= 'hidden';
2269 t
.cleartracks(player
);
2271 player
.captions
= _document2
.default.createElement('div');
2272 player
.captions
.className
= t
.options
.classPrefix
+ 'captions-layer ' + t
.options
.classPrefix
+ 'layer';
2273 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>';
2274 player
.captions
.style
.display
= 'none';
2275 layers
.insertBefore(player
.captions
, layers
.firstChild
);
2277 player
.captionsText
= player
.captions
.querySelector('.' + t
.options
.classPrefix
+ 'captions-text');
2279 player
.captionsButton
= _document2
.default.createElement('div');
2280 player
.captionsButton
.className
= t
.options
.classPrefix
+ 'button ' + t
.options
.classPrefix
+ 'captions-button';
2281 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>';
2283 t
.addControlElement(player
.captionsButton
, 'tracks');
2285 player
.captionsButton
.querySelector('.' + t
.options
.classPrefix
+ 'captions-selector-input').disabled
= false;
2287 player
.chaptersButton
= _document2
.default.createElement('div');
2288 player
.chaptersButton
.className
= t
.options
.classPrefix
+ 'button ' + t
.options
.classPrefix
+ 'chapters-button';
2289 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>';
2291 var subtitleCount
= 0;
2293 for (var _i
= 0; _i
< total
; _i
++) {
2294 var kind
= player
.tracks
[_i
].kind
,
2295 src
= player
.tracks
[_i
].src
;
2297 if (kind
=== 'subtitles' || kind
=== 'captions') {
2299 } else if (kind
=== 'chapters' && !controls
.querySelector('.' + t
.options
.classPrefix
+ 'chapter-selector')) {
2300 player
.captionsButton
.parentNode
.insertBefore(player
.chaptersButton
, player
.captionsButton
);
2305 player
.trackToLoad
= -1;
2306 player
.selectedTrack
= null;
2307 player
.isLoadingTrack
= false;
2309 for (var _i2
= 0; _i2
< total
; _i2
++) {
2310 var _kind
= player
.tracks
[_i2
].kind
;
2311 if (player
.tracks
[_i2
].src
.trim() && (_kind
=== 'subtitles' || _kind
=== 'captions')) {
2312 player
.addTrackButton(player
.tracks
[_i2
].trackId
, player
.tracks
[_i2
].srclang
, player
.tracks
[_i2
].label
);
2316 player
.loadNextTrack();
2318 var inEvents
= ['mouseenter', 'focusin'],
2319 outEvents
= ['mouseleave', 'focusout'];
2321 if (t
.options
.toggleCaptionsButtonWhenOnlyOne
&& subtitleCount
=== 1) {
2322 player
.captionsButton
.addEventListener('click', function (e
) {
2323 var trackId
= 'none';
2324 if (player
.selectedTrack
=== null) {
2325 trackId
= player
.tracks
[0].trackId
;
2327 var keyboard
= e
.keyCode
|| e
.which
;
2328 player
.setTrack(trackId
, typeof keyboard
!== 'undefined');
2331 var labels
= player
.captionsButton
.querySelectorAll('.' + t
.options
.classPrefix
+ 'captions-selector-label'),
2332 captions
= player
.captionsButton
.querySelectorAll('input[type=radio]');
2334 for (var _i3
= 0, _total
= inEvents
.length
; _i3
< _total
; _i3
++) {
2335 player
.captionsButton
.addEventListener(inEvents
[_i3
], function () {
2336 (0, _dom
.removeClass
)(this.querySelector('.' + t
.options
.classPrefix
+ 'captions-selector'), t
.options
.classPrefix
+ 'offscreen');
2340 for (var _i4
= 0, _total2
= outEvents
.length
; _i4
< _total2
; _i4
++) {
2341 player
.captionsButton
.addEventListener(outEvents
[_i4
], function () {
2342 (0, _dom
.addClass
)(this.querySelector('.' + t
.options
.classPrefix
+ 'captions-selector'), t
.options
.classPrefix
+ 'offscreen');
2346 for (var _i5
= 0, _total3
= captions
.length
; _i5
< _total3
; _i5
++) {
2347 captions
[_i5
].addEventListener('click', function (e
) {
2348 var keyboard
= e
.keyCode
|| e
.which
;
2349 player
.setTrack(this.value
, typeof keyboard
!== 'undefined');
2353 for (var _i6
= 0, _total4
= labels
.length
; _i6
< _total4
; _i6
++) {
2354 labels
[_i6
].addEventListener('click', function (e
) {
2355 var radio
= (0, _dom
.siblings
)(this, function (el
) {
2356 return el
.tagName
=== 'INPUT';
2358 event
= (0, _general
.createEvent
)('click', radio
);
2359 radio
.dispatchEvent(event
);
2364 player
.captionsButton
.addEventListener('keydown', function (e
) {
2365 e
.stopPropagation();
2369 for (var _i7
= 0, _total5
= inEvents
.length
; _i7
< _total5
; _i7
++) {
2370 player
.chaptersButton
.addEventListener(inEvents
[_i7
], function () {
2371 if (this.querySelector('.' + t
.options
.classPrefix
+ 'chapters-selector-list').children
.length
) {
2372 (0, _dom
.removeClass
)(this.querySelector('.' + t
.options
.classPrefix
+ 'chapters-selector'), t
.options
.classPrefix
+ 'offscreen');
2377 for (var _i8
= 0, _total6
= outEvents
.length
; _i8
< _total6
; _i8
++) {
2378 player
.chaptersButton
.addEventListener(outEvents
[_i8
], function () {
2379 (0, _dom
.addClass
)(this.querySelector('.' + t
.options
.classPrefix
+ 'chapters-selector'), t
.options
.classPrefix
+ 'offscreen');
2383 player
.chaptersButton
.addEventListener('keydown', function (e
) {
2384 e
.stopPropagation();
2387 if (!player
.options
.alwaysShowControls
) {
2388 player
.getElement(player
.container
).addEventListener('controlsshown', function () {
2389 (0, _dom
.addClass
)(player
.getElement(player
.container
).querySelector('.' + t
.options
.classPrefix
+ 'captions-position'), t
.options
.classPrefix
+ 'captions-position-hover');
2392 player
.getElement(player
.container
).addEventListener('controlshidden', function () {
2393 if (!media
.paused
) {
2394 (0, _dom
.removeClass
)(player
.getElement(player
.container
).querySelector('.' + t
.options
.classPrefix
+ 'captions-position'), t
.options
.classPrefix
+ 'captions-position-hover');
2398 (0, _dom
.addClass
)(player
.getElement(player
.container
).querySelector('.' + t
.options
.classPrefix
+ 'captions-position'), t
.options
.classPrefix
+ 'captions-position-hover');
2401 media
.addEventListener('timeupdate', function () {
2402 player
.displayCaptions();
2405 if (player
.options
.slidesSelector
!== '') {
2406 player
.slidesContainer
= _document2
.default.querySelectorAll(player
.options
.slidesSelector
);
2408 media
.addEventListener('timeupdate', function () {
2409 player
.displaySlides();
2413 cleartracks
: function cleartracks(player
) {
2415 if (player
.captions
) {
2416 player
.captions
.remove();
2418 if (player
.chapters
) {
2419 player
.chapters
.remove();
2421 if (player
.captionsText
) {
2422 player
.captionsText
.remove();
2424 if (player
.captionsButton
) {
2425 player
.captionsButton
.remove();
2427 if (player
.chaptersButton
) {
2428 player
.chaptersButton
.remove();
2432 rebuildtracks
: function rebuildtracks() {
2435 t
.buildtracks(t
, t
.getElement(t
.controls
), t
.getElement(t
.layers
), t
.media
);
2437 findTracks
: function findTracks() {
2439 tracktags
= t
.trackFiles
=== null ? t
.node
.querySelectorAll('track') : t
.trackFiles
,
2440 total
= tracktags
.length
;
2443 for (var i
= 0; i
< total
; i
++) {
2444 var track
= tracktags
[i
],
2445 srclang
= track
.getAttribute('srclang').toLowerCase() || '',
2446 trackId
= t
.id
+ '_track_' + i
+ '_' + track
.getAttribute('kind') + '_' + srclang
;
2450 src
: track
.getAttribute('src'),
2451 kind
: track
.getAttribute('kind'),
2452 label
: track
.getAttribute('label') || '',
2458 setTrack
: function setTrack(trackId
, setByKeyboard
) {
2461 radios
= t
.captionsButton
.querySelectorAll('input[type="radio"]'),
2462 captions
= t
.captionsButton
.querySelectorAll('.' + t
.options
.classPrefix
+ 'captions-selected'),
2463 track
= t
.captionsButton
.querySelector('input[value="' + trackId
+ '"]');
2465 for (var i
= 0, total
= radios
.length
; i
< total
; i
++) {
2466 radios
[i
].checked
= false;
2469 for (var _i9
= 0, _total7
= captions
.length
; _i9
< _total7
; _i9
++) {
2470 (0, _dom
.removeClass
)(captions
[_i9
], t
.options
.classPrefix
+ 'captions-selected');
2473 track
.checked
= true;
2474 var labels
= (0, _dom
.siblings
)(track
, function (el
) {
2475 return (0, _dom
.hasClass
)(el
, t
.options
.classPrefix
+ 'captions-selector-label');
2477 for (var _i10
= 0, _total8
= labels
.length
; _i10
< _total8
; _i10
++) {
2478 (0, _dom
.addClass
)(labels
[_i10
], t
.options
.classPrefix
+ 'captions-selected');
2481 if (trackId
=== 'none') {
2482 t
.selectedTrack
= null;
2483 (0, _dom
.removeClass
)(t
.captionsButton
, t
.options
.classPrefix
+ 'captions-enabled');
2485 for (var _i11
= 0, _total9
= t
.tracks
.length
; _i11
< _total9
; _i11
++) {
2486 var _track
= t
.tracks
[_i11
];
2487 if (_track
.trackId
=== trackId
) {
2488 if (t
.selectedTrack
=== null) {
2489 (0, _dom
.addClass
)(t
.captionsButton
, t
.options
.classPrefix
+ 'captions-enabled');
2491 t
.selectedTrack
= _track
;
2492 t
.captions
.setAttribute('lang', t
.selectedTrack
.srclang
);
2493 t
.displayCaptions();
2499 var event
= (0, _general
.createEvent
)('captionschange', t
.media
);
2500 event
.detail
.caption
= t
.selectedTrack
;
2501 t
.media
.dispatchEvent(event
);
2503 if (!setByKeyboard
) {
2504 setTimeout(function () {
2505 t
.getElement(t
.container
).focus();
2509 loadNextTrack
: function loadNextTrack() {
2513 if (t
.trackToLoad
< t
.tracks
.length
) {
2514 t
.isLoadingTrack
= true;
2515 t
.loadTrack(t
.trackToLoad
);
2517 t
.isLoadingTrack
= false;
2521 loadTrack
: function loadTrack(index
) {
2523 track
= t
.tracks
[index
];
2525 if (track
!== undefined && (track
.src
!== undefined || track
.src
!== "")) {
2526 (0, _dom
.ajax
)(track
.src
, 'text', function (d
) {
2527 track
.entries
= typeof d
=== 'string' && /<tt\s+xml/ig.exec(d
) ? _mejs2
.default.TrackFormatParser
.dfxp
.parse(d
) : _mejs2
.default.TrackFormatParser
.webvtt
.parse(d
);
2529 track
.isLoaded
= true;
2530 t
.enableTrackButton(track
);
2533 if (track
.kind
=== 'slides') {
2534 t
.setupSlides(track
);
2535 } else if (track
.kind
=== 'chapters' && !t
.hasChapters
) {
2536 t
.drawChapters(track
);
2537 t
.hasChapters
= true;
2540 t
.removeTrackButton(track
.trackId
);
2545 enableTrackButton
: function enableTrackButton(track
) {
2547 lang
= track
.srclang
,
2548 target
= _document2
.default.getElementById('' + track
.trackId
);
2554 var label
= track
.label
;
2557 label
= _i18n2
.default.t(_mejs2
.default.language
.codes
[lang
]) || lang
;
2559 target
.disabled
= false;
2560 var targetSiblings
= (0, _dom
.siblings
)(target
, function (el
) {
2561 return (0, _dom
.hasClass
)(el
, t
.options
.classPrefix
+ 'captions-selector-label');
2563 for (var i
= 0, total
= targetSiblings
.length
; i
< total
; i
++) {
2564 targetSiblings
[i
].innerHTML
= label
;
2567 if (t
.options
.startLanguage
=== lang
) {
2568 target
.checked
= true;
2569 var event
= (0, _general
.createEvent
)('click', target
);
2570 target
.dispatchEvent(event
);
2573 removeTrackButton
: function removeTrackButton(trackId
) {
2574 var element
= _document2
.default.getElementById('' + trackId
);
2576 var button
= element
.closest('li');
2582 addTrackButton
: function addTrackButton(trackId
, lang
, label
) {
2585 label
= _i18n2
.default.t(_mejs2
.default.language
.codes
[lang
]) || lang
;
2588 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>';
2590 checkForTracks
: function checkForTracks() {
2593 var hasSubtitles
= false;
2595 if (t
.options
.hideCaptionsButtonWhenEmpty
) {
2596 for (var i
= 0, total
= t
.tracks
.length
; i
< total
; i
++) {
2597 var kind
= t
.tracks
[i
].kind
;
2598 if ((kind
=== 'subtitles' || kind
=== 'captions') && t
.tracks
[i
].isLoaded
) {
2599 hasSubtitles
= true;
2604 t
.captionsButton
.style
.display
= hasSubtitles
? '' : 'none';
2605 t
.setControlsSize();
2608 displayCaptions
: function displayCaptions() {
2609 if (this.tracks
=== undefined) {
2614 track
= t
.selectedTrack
,
2615 sanitize
= function sanitize(html
) {
2616 var div
= _document2
.default.createElement('div');
2617 div
.innerHTML
= html
;
2619 var scripts
= div
.getElementsByTagName('script');
2620 var i
= scripts
.length
;
2622 scripts
[i
].remove();
2625 var allElements
= div
.getElementsByTagName('*');
2626 for (var _i12
= 0, n
= allElements
.length
; _i12
< n
; _i12
++) {
2627 var attributesObj
= allElements
[_i12
].attributes
,
2628 attributes
= Array
.prototype.slice
.call(attributesObj
);
2630 for (var j
= 0, total
= attributes
.length
; j
< total
; j
++) {
2631 if (attributes
[j
].name
.startsWith('on') || attributes
[j
].value
.startsWith('javascript')) {
2632 allElements
[_i12
].remove();
2633 } else if (attributes
[j
].name
=== 'style') {
2634 allElements
[_i12
].removeAttribute(attributes
[j
].name
);
2638 return div
.innerHTML
;
2641 if (track
!== null && track
.isLoaded
) {
2642 var i
= t
.searchTrackPosition(track
.entries
, t
.media
.currentTime
);
2644 t
.captionsText
.innerHTML
= sanitize(track
.entries
[i
].text
);
2645 t
.captionsText
.className
= t
.options
.classPrefix
+ 'captions-text ' + (track
.entries
[i
].identifier
|| '');
2646 t
.captions
.style
.display
= '';
2647 t
.captions
.style
.height
= '0px';
2650 t
.captions
.style
.display
= 'none';
2652 t
.captions
.style
.display
= 'none';
2655 setupSlides
: function setupSlides(track
) {
2658 t
.slides
.entries
.imgs
= [t
.slides
.entries
.length
];
2661 showSlide
: function showSlide(index
) {
2666 if (t
.tracks
=== undefined || t
.slidesContainer
=== undefined) {
2670 var url
= t
.slides
.entries
[index
].text
;
2672 var img
= t
.slides
.entries
[index
].imgs
;
2674 if (img
=== undefined || img
.fadeIn
=== undefined) {
2675 var image
= _document2
.default.createElement('img');
2677 image
.addEventListener('load', function () {
2679 visible
= (0, _dom
.siblings
)(self
, function (el
) {
2682 self
.style
.display
= 'none';
2683 t
.slidesContainer
.innerHTML
+= self
.innerHTML
;
2684 (0, _dom
.fadeIn
)(t
.slidesContainer
.querySelector(image
));
2685 for (var i
= 0, total
= visible
.length
; i
< total
; i
++) {
2686 (0, _dom
.fadeOut
)(visible
[i
], 400);
2689 t
.slides
.entries
[index
].imgs
= img
= image
;
2690 } else if (!(0, _dom
.visible
)(img
)) {
2691 var _visible
= (0, _dom
.siblings
)(self
, function (el
) {
2692 return _visible(el
);
2694 (0, _dom
.fadeIn
)(t
.slidesContainer
.querySelector(img
));
2695 for (var i
= 0, total
= _visible
.length
; i
< total
; i
++) {
2696 (0, _dom
.fadeOut
)(_visible
[i
]);
2700 displaySlides
: function displaySlides() {
2703 if (this.slides
=== undefined) {
2707 var slides
= t
.slides
,
2708 i
= t
.searchTrackPosition(slides
.entries
, t
.media
.currentTime
);
2714 drawChapters
: function drawChapters(chapters
) {
2716 total
= chapters
.entries
.length
;
2722 t
.chaptersButton
.querySelector('ul').innerHTML
= '';
2724 for (var i
= 0; i
< total
; i
++) {
2725 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>';
2728 var radios
= t
.chaptersButton
.querySelectorAll('input[type="radio"]'),
2729 labels
= t
.chaptersButton
.querySelectorAll('.' + t
.options
.classPrefix
+ 'chapters-selector-label');
2731 for (var _i13
= 0, _total10
= radios
.length
; _i13
< _total10
; _i13
++) {
2732 radios
[_i13
].disabled
= false;
2733 radios
[_i13
].checked
= false;
2734 radios
[_i13
].addEventListener('click', function (e
) {
2736 listItems
= t
.chaptersButton
.querySelectorAll('li'),
2737 label
= (0, _dom
.siblings
)(self
, function (el
) {
2738 return (0, _dom
.hasClass
)(el
, t
.options
.classPrefix
+ 'chapters-selector-label');
2741 self
.checked
= true;
2742 self
.parentNode
.setAttribute('aria-checked', true);
2743 (0, _dom
.addClass
)(label
, t
.options
.classPrefix
+ 'chapters-selected');
2744 (0, _dom
.removeClass
)(t
.chaptersButton
.querySelector('.' + t
.options
.classPrefix
+ 'chapters-selected'), t
.options
.classPrefix
+ 'chapters-selected');
2746 for (var _i14
= 0, _total11
= listItems
.length
; _i14
< _total11
; _i14
++) {
2747 listItems
[_i14
].setAttribute('aria-checked', false);
2750 var keyboard
= e
.keyCode
|| e
.which
;
2751 if (typeof keyboard
=== 'undefined') {
2752 setTimeout(function () {
2753 t
.getElement(t
.container
).focus();
2757 t
.media
.setCurrentTime(parseFloat(self
.value
));
2758 if (t
.media
.paused
) {
2764 for (var _i15
= 0, _total12
= labels
.length
; _i15
< _total12
; _i15
++) {
2765 labels
[_i15
].addEventListener('click', function (e
) {
2766 var radio
= (0, _dom
.siblings
)(this, function (el
) {
2767 return el
.tagName
=== 'INPUT';
2769 event
= (0, _general
.createEvent
)('click', radio
);
2770 radio
.dispatchEvent(event
);
2775 searchTrackPosition
: function searchTrackPosition(tracks
, currentTime
) {
2777 hi
= tracks
.length
- 1,
2784 start
= tracks
[mid
].start
;
2785 stop
= tracks
[mid
].stop
;
2787 if (currentTime
>= start
&& currentTime
< stop
) {
2789 } else if (start
< currentTime
) {
2791 } else if (start
> currentTime
) {
2800 _mejs2
.default.language
= {
2802 af
: 'mejs.afrikaans',
2803 sq
: 'mejs.albanian',
2805 be
: 'mejs.belarusian',
2806 bg
: 'mejs.bulgarian',
2809 'zh-cn': 'mejs.chinese-simplified',
2810 'zh-tw': 'mejs.chines-traditional',
2811 hr
: 'mejs.croatian',
2816 et
: 'mejs.estonian',
2817 fl
: 'mejs.filipino',
2820 gl
: 'mejs.galician',
2823 ht
: 'mejs.haitian-creole',
2826 hu
: 'mejs.hungarian',
2827 is
: 'mejs.icelandic',
2828 id
: 'mejs.indonesian',
2831 ja
: 'mejs.japanese',
2834 lt
: 'mejs.lithuanian',
2835 mk
: 'mejs.macedonian',
2838 no
: 'mejs.norwegian',
2841 pt
: 'mejs.portuguese',
2842 ro
: 'mejs.romanian',
2846 sl
: 'mejs.slovenian',
2853 uk
: 'mejs.ukrainian',
2854 vi
: 'mejs.vietnamese',
2860 _mejs2
.default.TrackFormatParser
= {
2862 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})?)(.*)$/,
2864 parse
: function parse(trackText
) {
2865 var lines
= trackText
.split(/\r?\n/),
2868 var timecode
= void 0,
2870 identifier
= void 0;
2872 for (var i
= 0, total
= lines
.length
; i
< total
; i
++) {
2873 timecode
= this.pattern
.exec(lines
[i
]);
2875 if (timecode
&& i
< lines
.length
) {
2876 if (i
- 1 >= 0 && lines
[i
- 1] !== '') {
2877 identifier
= lines
[i
- 1];
2883 while (lines
[i
] !== '' && i
< lines
.length
) {
2884 text
= text
+ '\n' + lines
[i
];
2887 text
= text
.trim().replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>");
2889 identifier
: identifier
,
2890 start
: (0, _time
.convertSMPTEtoSeconds
)(timecode
[1]) === 0 ? 0.200 : (0, _time
.convertSMPTEtoSeconds
)(timecode
[1]),
2891 stop
: (0, _time
.convertSMPTEtoSeconds
)(timecode
[3]),
2893 settings
: timecode
[5]
2903 parse
: function parse(trackText
) {
2904 trackText
= $(trackText
).filter('tt');
2905 var container
= trackText
.firstChild
,
2906 lines
= container
.querySelectorAll('p'),
2907 styleNode
= trackText
.getElementById('' + container
.attr('style')),
2910 var styles
= void 0;
2912 if (styleNode
.length
) {
2913 styleNode
.removeAttribute('id');
2914 var attributes
= styleNode
.attributes
;
2915 if (attributes
.length
) {
2917 for (var i
= 0, total
= attributes
.length
; i
< total
; i
++) {
2918 styles
[attributes
[i
].name
.split(":")[1]] = attributes
[i
].value
;
2923 for (var _i16
= 0, _total13
= lines
.length
; _i16
< _total13
; _i16
++) {
2932 if (lines
.eq(_i16
).attr('begin')) {
2933 _temp
.start
= (0, _time
.convertSMPTEtoSeconds
)(lines
.eq(_i16
).attr('begin'));
2935 if (!_temp
.start
&& lines
.eq(_i16
- 1).attr('end')) {
2936 _temp
.start
= (0, _time
.convertSMPTEtoSeconds
)(lines
.eq(_i16
- 1).attr('end'));
2938 if (lines
.eq(_i16
).attr('end')) {
2939 _temp
.stop
= (0, _time
.convertSMPTEtoSeconds
)(lines
.eq(_i16
).attr('end'));
2941 if (!_temp
.stop
&& lines
.eq(_i16
+ 1).attr('begin')) {
2942 _temp
.stop
= (0, _time
.convertSMPTEtoSeconds
)(lines
.eq(_i16
+ 1).attr('begin'));
2947 for (var _style
in styles
) {
2948 style
+= _style
+ ':' + styles
[_style
] + ';';
2952 _temp
.style
= style
;
2954 if (_temp
.start
=== 0) {
2955 _temp
.start
= 0.200;
2957 _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>");
2958 entries
.push(_temp
);
2965 },{"16":16,"2":2,"26":26,"27":27,"30":30,"5":5,"7":7}],14:[function(_dereq_
,module
,exports
){
2968 var _document
= _dereq_(2);
2970 var _document2
= _interopRequireDefault(_document
);
2972 var _player
= _dereq_(16);
2974 var _player2
= _interopRequireDefault(_player
);
2976 var _i18n
= _dereq_(5);
2978 var _i18n2
= _interopRequireDefault(_i18n
);
2980 var _constants
= _dereq_(25);
2982 var _general
= _dereq_(27);
2984 var _dom
= _dereq_(26);
2986 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
2988 Object
.assign(_player
.config
, {
2993 allyVolumeControlText
: null,
2995 hideVolumeOnTouchDevices
: true,
2997 audioVolume
: 'horizontal',
2999 videoVolume
: 'vertical',
3004 Object
.assign(_player2
.default.prototype, {
3005 buildvolume
: function buildvolume(player
, controls
, layers
, media
) {
3006 if ((_constants
.IS_ANDROID
|| _constants
.IS_IOS
) && this.options
.hideVolumeOnTouchDevices
) {
3011 mode
= t
.isVideo
? t
.options
.videoVolume
: t
.options
.audioVolume
,
3012 muteText
= (0, _general
.isString
)(t
.options
.muteText
) ? t
.options
.muteText
: _i18n2
.default.t('mejs.mute'),
3013 unmuteText
= (0, _general
.isString
)(t
.options
.unmuteText
) ? t
.options
.unmuteText
: _i18n2
.default.t('mejs.unmute'),
3014 volumeControlText
= (0, _general
.isString
)(t
.options
.allyVolumeControlText
) ? t
.options
.allyVolumeControlText
: _i18n2
.default.t('mejs.volume-help-text'),
3015 mute
= _document2
.default.createElement('div');
3017 mute
.className
= t
.options
.classPrefix
+ 'button ' + t
.options
.classPrefix
+ 'volume-button ' + t
.options
.classPrefix
+ 'mute';
3018 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>';
3020 t
.addControlElement(mute
, 'volume');
3022 t
.options
.keyActions
.push({
3024 action
: function action(player
) {
3025 var volumeSlider
= player
.getElement(player
.container
).querySelector('.' + _player
.config
.classPrefix
+ 'volume-slider');
3026 if (volumeSlider
|| player
.getElement(player
.container
).querySelector('.' + _player
.config
.classPrefix
+ 'volume-slider').matches(':focus')) {
3027 volumeSlider
.style
.display
= 'block';
3029 if (player
.isVideo
) {
3030 player
.showControls();
3031 player
.startControlsTimer();
3034 var newVolume
= Math
.min(player
.volume
+ 0.1, 1);
3035 player
.setVolume(newVolume
);
3036 if (newVolume
> 0) {
3037 player
.setMuted(false);
3042 action
: function action(player
) {
3043 var volumeSlider
= player
.getElement(player
.container
).querySelector('.' + _player
.config
.classPrefix
+ 'volume-slider');
3045 volumeSlider
.style
.display
= 'block';
3048 if (player
.isVideo
) {
3049 player
.showControls();
3050 player
.startControlsTimer();
3053 var newVolume
= Math
.max(player
.volume
- 0.1, 0);
3054 player
.setVolume(newVolume
);
3056 if (newVolume
<= 0.1) {
3057 player
.setMuted(true);
3062 action
: function action(player
) {
3063 player
.getElement(player
.container
).querySelector('.' + _player
.config
.classPrefix
+ 'volume-slider').style
.display
= 'block';
3064 if (player
.isVideo
) {
3065 player
.showControls();
3066 player
.startControlsTimer();
3068 if (player
.media
.muted
) {
3069 player
.setMuted(false);
3071 player
.setMuted(true);
3076 if (mode
=== 'horizontal') {
3077 var anchor
= _document2
.default.createElement('a');
3078 anchor
.className
= t
.options
.classPrefix
+ 'horizontal-volume-slider';
3079 anchor
.href
= 'javascript:void(0);';
3080 anchor
.setAttribute('aria-label', _i18n2
.default.t('mejs.volume-slider'));
3081 anchor
.setAttribute('aria-valuemin', 0);
3082 anchor
.setAttribute('aria-valuemax', 100);
3083 anchor
.setAttribute('role', 'slider');
3084 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>';
3085 mute
.parentNode
.insertBefore(anchor
, mute
.nextSibling
);
3088 var mouseIsDown
= false,
3089 mouseIsOver
= false,
3091 updateVolumeSlider
= function updateVolumeSlider() {
3092 var volume
= Math
.floor(media
.volume
* 100);
3093 volumeSlider
.setAttribute('aria-valuenow', volume
);
3094 volumeSlider
.setAttribute('aria-valuetext', volume
+ '%');
3097 var volumeSlider
= mode
=== 'vertical' ? t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'volume-slider') : t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'horizontal-volume-slider'),
3098 volumeTotal
= mode
=== 'vertical' ? t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'volume-total') : t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'horizontal-volume-total'),
3099 volumeCurrent
= mode
=== 'vertical' ? t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'volume-current') : t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'horizontal-volume-current'),
3100 volumeHandle
= mode
=== 'vertical' ? t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'volume-handle') : t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'horizontal-volume-handle'),
3101 positionVolumeHandle
= function positionVolumeHandle(volume
) {
3103 if (volume
=== null || isNaN(volume
) || volume
=== undefined) {
3107 volume
= Math
.max(0, volume
);
3108 volume
= Math
.min(volume
, 1);
3111 (0, _dom
.removeClass
)(mute
, t
.options
.classPrefix
+ 'mute');
3112 (0, _dom
.addClass
)(mute
, t
.options
.classPrefix
+ 'unmute');
3113 var button
= mute
.firstElementChild
;
3114 button
.setAttribute('title', unmuteText
);
3115 button
.setAttribute('aria-label', unmuteText
);
3117 (0, _dom
.removeClass
)(mute
, t
.options
.classPrefix
+ 'unmute');
3118 (0, _dom
.addClass
)(mute
, t
.options
.classPrefix
+ 'mute');
3119 var _button
= mute
.firstElementChild
;
3120 _button
.setAttribute('title', muteText
);
3121 _button
.setAttribute('aria-label', muteText
);
3124 var volumePercentage
= volume
* 100 + '%',
3125 volumeStyles
= getComputedStyle(volumeHandle
);
3127 if (mode
=== 'vertical') {
3128 volumeCurrent
.style
.bottom
= 0;
3129 volumeCurrent
.style
.height
= volumePercentage
;
3130 volumeHandle
.style
.bottom
= volumePercentage
;
3131 volumeHandle
.style
.marginBottom
= -parseFloat(volumeStyles
.height
) / 2 + 'px';
3133 volumeCurrent
.style
.left
= 0;
3134 volumeCurrent
.style
.width
= volumePercentage
;
3135 volumeHandle
.style
.left
= volumePercentage
;
3136 volumeHandle
.style
.marginLeft
= -parseFloat(volumeStyles
.width
) / 2 + 'px';
3139 handleVolumeMove
= function handleVolumeMove(e
) {
3140 var totalOffset
= (0, _dom
.offset
)(volumeTotal
),
3141 volumeStyles
= getComputedStyle(volumeTotal
);
3147 if (mode
=== 'vertical') {
3148 var railHeight
= parseFloat(volumeStyles
.height
),
3149 newY
= e
.pageY
- totalOffset
.top
;
3151 volume
= (railHeight
- newY
) / railHeight
;
3153 if (totalOffset
.top
=== 0 || totalOffset
.left
=== 0) {
3157 var railWidth
= parseFloat(volumeStyles
.width
),
3158 newX
= e
.pageX
- totalOffset
.left
;
3160 volume
= newX
/ railWidth
;
3163 volume
= Math
.max(0, volume
);
3164 volume
= Math
.min(volume
, 1);
3166 positionVolumeHandle(volume
);
3168 t
.setMuted(volume
=== 0);
3169 t
.setVolume(volume
);
3172 e
.stopPropagation();
3174 toggleMute
= function toggleMute() {
3176 positionVolumeHandle(0);
3177 (0, _dom
.removeClass
)(mute
, t
.options
.classPrefix
+ 'mute');
3178 (0, _dom
.addClass
)(mute
, t
.options
.classPrefix
+ 'unmute');
3180 positionVolumeHandle(media
.volume
);
3181 (0, _dom
.removeClass
)(mute
, t
.options
.classPrefix
+ 'unmute');
3182 (0, _dom
.addClass
)(mute
, t
.options
.classPrefix
+ 'mute');
3186 player
.getElement(player
.container
).addEventListener('keydown', function (e
) {
3187 var hasFocus
= !!e
.target
.closest('.' + t
.options
.classPrefix
+ 'container');
3188 if (!hasFocus
&& mode
=== 'vertical') {
3189 volumeSlider
.style
.display
= 'none';
3193 mute
.addEventListener('mouseenter', function (e
) {
3194 if (e
.target
=== mute
) {
3195 volumeSlider
.style
.display
= 'block';
3198 e
.stopPropagation();
3201 mute
.addEventListener('focusin', function () {
3202 volumeSlider
.style
.display
= 'block';
3206 mute
.addEventListener('focusout', function (e
) {
3207 if ((!e
.relatedTarget
|| e
.relatedTarget
&& !e
.relatedTarget
.matches('.' + t
.options
.classPrefix
+ 'volume-slider')) && mode
=== 'vertical') {
3208 volumeSlider
.style
.display
= 'none';
3211 mute
.addEventListener('mouseleave', function () {
3212 mouseIsOver
= false;
3213 if (!mouseIsDown
&& mode
=== 'vertical') {
3214 volumeSlider
.style
.display
= 'none';
3217 mute
.addEventListener('focusout', function () {
3218 mouseIsOver
= false;
3220 mute
.addEventListener('keydown', function (e
) {
3221 if (t
.options
.keyActions
.length
) {
3222 var keyCode
= e
.which
|| e
.keyCode
|| 0,
3223 volume
= media
.volume
;
3227 volume
= Math
.min(volume
+ 0.1, 1);
3230 volume
= Math
.max(0, volume
- 0.1);
3236 mouseIsDown
= false;
3237 positionVolumeHandle(volume
);
3238 media
.setVolume(volume
);
3241 e
.stopPropagation();
3244 mute
.querySelector('button').addEventListener('click', function () {
3245 media
.setMuted(!media
.muted
);
3246 var event
= (0, _general
.createEvent
)('volumechange', media
);
3247 media
.dispatchEvent(event
);
3250 volumeSlider
.addEventListener('dragstart', function () {
3254 volumeSlider
.addEventListener('mouseover', function () {
3257 volumeSlider
.addEventListener('focusin', function () {
3258 volumeSlider
.style
.display
= 'block';
3261 volumeSlider
.addEventListener('focusout', function () {
3262 mouseIsOver
= false;
3263 if (!mouseIsDown
&& mode
=== 'vertical') {
3264 volumeSlider
.style
.display
= 'none';
3267 volumeSlider
.addEventListener('mousedown', function (e
) {
3268 handleVolumeMove(e
);
3269 t
.globalBind('mousemove.vol', function (event
) {
3270 var target
= event
.target
;
3271 if (mouseIsDown
&& (target
=== volumeSlider
|| target
.closest(mode
=== 'vertical' ? '.' + t
.options
.classPrefix
+ 'volume-slider' : '.' + t
.options
.classPrefix
+ 'horizontal-volume-slider'))) {
3272 handleVolumeMove(event
);
3275 t
.globalBind('mouseup.vol', function () {
3276 mouseIsDown
= false;
3277 if (!mouseIsOver
&& mode
=== 'vertical') {
3278 volumeSlider
.style
.display
= 'none';
3283 e
.stopPropagation();
3286 media
.addEventListener('volumechange', function (e
) {
3290 updateVolumeSlider(e
);
3293 var rendered
= false;
3294 media
.addEventListener('rendererready', function () {
3296 setTimeout(function () {
3298 if (player
.options
.startVolume
=== 0 || media
.originalNode
.muted
) {
3299 media
.setMuted(true);
3300 player
.options
.startVolume
= 0;
3302 media
.setVolume(player
.options
.startVolume
);
3303 t
.setControlsSize();
3308 media
.addEventListener('loadedmetadata', function () {
3309 setTimeout(function () {
3310 if (!modified
&& !rendered
) {
3311 if (player
.options
.startVolume
=== 0 || media
.originalNode
.muted
) {
3312 media
.setMuted(true);
3314 media
.setVolume(player
.options
.startVolume
);
3315 t
.setControlsSize();
3321 if (player
.options
.startVolume
=== 0 || media
.originalNode
.muted
) {
3322 media
.setMuted(true);
3323 player
.options
.startVolume
= 0;
3327 t
.getElement(t
.container
).addEventListener('controlsresize', function () {
3333 },{"16":16,"2":2,"25":25,"26":26,"27":27,"5":5}],15:[function(_dereq_
,module
,exports
){
3336 Object
.defineProperty(exports
, "__esModule", {
3339 var EN
= exports
.EN
= {
3340 'mejs.plural-form': 1,
3342 'mejs.download-file': 'Download File',
3344 '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/',
3346 'mejs.fullscreen': 'Fullscreen',
3348 'mejs.play': 'Play',
3349 'mejs.pause': 'Pause',
3351 'mejs.time-slider': 'Time Slider',
3352 'mejs.time-help-text': 'Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.',
3353 'mejs.live-broadcast': 'Live Broadcast',
3355 'mejs.volume-help-text': 'Use Up/Down Arrow keys to increase or decrease volume.',
3356 'mejs.unmute': 'Unmute',
3357 'mejs.mute': 'Mute',
3358 'mejs.volume-slider': 'Volume Slider',
3360 'mejs.video-player': 'Video Player',
3361 'mejs.audio-player': 'Audio Player',
3363 'mejs.captions-subtitles': 'Captions/Subtitles',
3364 'mejs.captions-chapters': 'Chapters',
3365 'mejs.none': 'None',
3366 'mejs.afrikaans': 'Afrikaans',
3367 'mejs.albanian': 'Albanian',
3368 'mejs.arabic': 'Arabic',
3369 'mejs.belarusian': 'Belarusian',
3370 'mejs.bulgarian': 'Bulgarian',
3371 'mejs.catalan': 'Catalan',
3372 'mejs.chinese': 'Chinese',
3373 'mejs.chinese-simplified': 'Chinese (Simplified)',
3374 'mejs.chinese-traditional': 'Chinese (Traditional)',
3375 'mejs.croatian': 'Croatian',
3376 'mejs.czech': 'Czech',
3377 'mejs.danish': 'Danish',
3378 'mejs.dutch': 'Dutch',
3379 'mejs.english': 'English',
3380 'mejs.estonian': 'Estonian',
3381 'mejs.filipino': 'Filipino',
3382 'mejs.finnish': 'Finnish',
3383 'mejs.french': 'French',
3384 'mejs.galician': 'Galician',
3385 'mejs.german': 'German',
3386 'mejs.greek': 'Greek',
3387 'mejs.haitian-creole': 'Haitian Creole',
3388 'mejs.hebrew': 'Hebrew',
3389 'mejs.hindi': 'Hindi',
3390 'mejs.hungarian': 'Hungarian',
3391 'mejs.icelandic': 'Icelandic',
3392 'mejs.indonesian': 'Indonesian',
3393 'mejs.irish': 'Irish',
3394 'mejs.italian': 'Italian',
3395 'mejs.japanese': 'Japanese',
3396 'mejs.korean': 'Korean',
3397 'mejs.latvian': 'Latvian',
3398 'mejs.lithuanian': 'Lithuanian',
3399 'mejs.macedonian': 'Macedonian',
3400 'mejs.malay': 'Malay',
3401 'mejs.maltese': 'Maltese',
3402 'mejs.norwegian': 'Norwegian',
3403 'mejs.persian': 'Persian',
3404 'mejs.polish': 'Polish',
3405 'mejs.portuguese': 'Portuguese',
3406 'mejs.romanian': 'Romanian',
3407 'mejs.russian': 'Russian',
3408 'mejs.serbian': 'Serbian',
3409 'mejs.slovak': 'Slovak',
3410 'mejs.slovenian': 'Slovenian',
3411 'mejs.spanish': 'Spanish',
3412 'mejs.swahili': 'Swahili',
3413 'mejs.swedish': 'Swedish',
3414 'mejs.tagalog': 'Tagalog',
3415 'mejs.thai': 'Thai',
3416 'mejs.turkish': 'Turkish',
3417 'mejs.ukrainian': 'Ukrainian',
3418 'mejs.vietnamese': 'Vietnamese',
3419 'mejs.welsh': 'Welsh',
3420 'mejs.yiddish': 'Yiddish'
3423 },{}],16:[function(_dereq_
,module
,exports
){
3426 Object
.defineProperty(exports
, "__esModule", {
3429 exports
.config
= undefined;
3431 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
; };
3433 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
; }; }();
3435 var _window
= _dereq_(3);
3437 var _window2
= _interopRequireDefault(_window
);
3439 var _document
= _dereq_(2);
3441 var _document2
= _interopRequireDefault(_document
);
3443 var _mejs
= _dereq_(7);
3445 var _mejs2
= _interopRequireDefault(_mejs
);
3447 var _mediaelement
= _dereq_(6);
3449 var _mediaelement2
= _interopRequireDefault(_mediaelement
);
3451 var _default
= _dereq_(17);
3453 var _default2
= _interopRequireDefault(_default
);
3455 var _i18n
= _dereq_(5);
3457 var _i18n2
= _interopRequireDefault(_i18n
);
3459 var _constants
= _dereq_(25);
3461 var _general
= _dereq_(27);
3463 var _time
= _dereq_(30);
3465 var _media
= _dereq_(28);
3467 var _dom
= _dereq_(26);
3469 var dom
= _interopRequireWildcard(_dom
);
3471 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
; } }
3473 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
3475 function _classCallCheck(instance
, Constructor
) { if (!(instance
instanceof Constructor
)) { throw new TypeError("Cannot call a class as a function"); } }
3477 _mejs2
.default.mepIndex
= 0;
3479 _mejs2
.default.players
= {};
3481 var config
= exports
.config
= {
3484 showPosterWhenEnded
: false,
3486 showPosterWhenPaused
: false,
3488 defaultVideoWidth
: 480,
3490 defaultVideoHeight
: 270,
3496 defaultAudioWidth
: 400,
3498 defaultAudioHeight
: 40,
3500 defaultSeekBackwardInterval
: function defaultSeekBackwardInterval(media
) {
3501 return media
.getDuration() * 0.05;
3504 defaultSeekForwardInterval
: function defaultSeekForwardInterval(media
) {
3505 return media
.getDuration() * 0.05;
3508 setDimensions
: true,
3518 enableAutosize
: true,
3522 alwaysShowHours
: false,
3524 showTimecodeFrameCount
: false,
3526 framesPerSecond
: 25,
3528 alwaysShowControls
: false,
3530 hideVideoControlsOnLoad
: false,
3532 hideVideoControlsOnPause
: false,
3534 clickToPlayPause
: true,
3536 controlsTimeoutDefault
: 1500,
3538 controlsTimeoutMouseEnter
: 2500,
3540 controlsTimeoutMouseLeave
: 1000,
3542 iPadUseNativeControls
: false,
3544 iPhoneUseNativeControls
: false,
3546 AndroidUseNativeControls
: false,
3548 features
: ['playpause', 'current', 'progress', 'duration', 'tracks', 'volume', 'fullscreen'],
3550 useDefaultControls
: false,
3556 classPrefix
: 'mejs__',
3558 enableKeyboard
: true,
3560 pauseOtherPlayers
: true,
3562 secondsDecimalLength
: 0,
3568 action
: function action(player
) {
3570 if (!_constants
.IS_FIREFOX
) {
3571 if (player
.paused
|| player
.ended
) {
3581 _mejs2
.default.MepDefaults
= config
;
3583 var MediaElementPlayer = function () {
3584 function MediaElementPlayer(node
, o
) {
3585 _classCallCheck(this, MediaElementPlayer
);
3588 element
= typeof node
=== 'string' ? _document2
.default.getElementById(node
) : node
;
3590 if (!(t
instanceof MediaElementPlayer
)) {
3591 return new MediaElementPlayer(element
, o
);
3594 t
.node
= t
.media
= element
;
3600 if (t
.media
.player
) {
3601 return t
.media
.player
;
3606 t
.controlsAreVisible
= true;
3608 t
.controlsEnabled
= true;
3610 t
.controlsTimer
= null;
3612 t
.currentMediaTime
= 0;
3616 if (o
=== undefined) {
3617 var options
= t
.node
.getAttribute('data-mejsoptions');
3618 o
= options
? JSON
.parse(options
) : {};
3621 t
.options
= Object
.assign({}, config
, o
);
3623 if (t
.options
.loop
&& !t
.media
.getAttribute('loop')) {
3624 t
.media
.loop
= true;
3626 } else if (t
.media
.loop
) {
3627 t
.options
.loop
= true;
3630 if (!t
.options
.timeFormat
) {
3631 t
.options
.timeFormat
= 'mm:ss';
3632 if (t
.options
.alwaysShowHours
) {
3633 t
.options
.timeFormat
= 'hh:mm:ss';
3635 if (t
.options
.showTimecodeFrameCount
) {
3636 t
.options
.timeFormat
+= ':ff';
3640 (0, _time
.calculateTimeFormat
)(0, t
.options
, t
.options
.framesPerSecond
|| 25);
3642 t
.id
= 'mep_' + _mejs2
.default.mepIndex
++;
3644 _mejs2
.default.players
[t
.id
] = t
;
3651 _createClass(MediaElementPlayer
, [{
3653 value
: function getElement(element
) {
3658 value
: function init() {
3660 playerOptions
= Object
.assign({}, t
.options
, {
3661 success
: function success(media
, domNode
) {
3662 t
._meReady(media
, domNode
);
3664 error
: function error(e
) {
3668 tagName
= t
.node
.tagName
.toLowerCase();
3670 t
.isDynamic
= tagName
!== 'audio' && tagName
!== 'video' && tagName
!== 'iframe';
3671 t
.isVideo
= t
.isDynamic
? t
.options
.isVideo
: tagName
!== 'audio' && t
.options
.isVideo
;
3672 t
.mediaFiles
= null;
3673 t
.trackFiles
= null;
3675 if (_constants
.IS_IPAD
&& t
.options
.iPadUseNativeControls
|| _constants
.IS_IPHONE
&& t
.options
.iPhoneUseNativeControls
) {
3676 t
.node
.setAttribute('controls', true);
3678 if (_constants
.IS_IPAD
&& t
.node
.getAttribute('autoplay')) {
3681 } else if ((t
.isVideo
|| !t
.isVideo
&& (t
.options
.features
.length
|| t
.options
.useDefaultControls
)) && !(_constants
.IS_ANDROID
&& t
.options
.AndroidUseNativeControls
)) {
3682 t
.node
.removeAttribute('controls');
3683 var videoPlayerTitle
= t
.isVideo
? _i18n2
.default.t('mejs.video-player') : _i18n2
.default.t('mejs.audio-player');
3685 var offscreen
= _document2
.default.createElement('span');
3686 offscreen
.className
= t
.options
.classPrefix
+ 'offscreen';
3687 offscreen
.innerText
= videoPlayerTitle
;
3688 t
.media
.parentNode
.insertBefore(offscreen
, t
.media
);
3690 t
.container
= _document2
.default.createElement('div');
3691 t
.getElement(t
.container
).id
= t
.id
;
3692 t
.getElement(t
.container
).className
= t
.options
.classPrefix
+ 'container ' + t
.options
.classPrefix
+ 'container-keyboard-inactive ' + t
.media
.className
;
3693 t
.getElement(t
.container
).tabIndex
= 0;
3694 t
.getElement(t
.container
).setAttribute('role', 'application');
3695 t
.getElement(t
.container
).setAttribute('aria-label', videoPlayerTitle
);
3696 t
.getElement(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>';
3697 t
.getElement(t
.container
).addEventListener('focus', function (e
) {
3698 if (!t
.controlsAreVisible
&& !t
.hasFocus
&& t
.controlsEnabled
) {
3699 t
.showControls(true);
3701 var btnSelector
= (0, _general
.isNodeAfter
)(e
.relatedTarget
, t
.getElement(t
.container
)) ? '.' + t
.options
.classPrefix
+ 'controls .' + t
.options
.classPrefix
+ 'button:last-child > button' : '.' + t
.options
.classPrefix
+ 'playpause-button > button',
3702 button
= t
.getElement(t
.container
).querySelector(btnSelector
);
3707 t
.node
.parentNode
.insertBefore(t
.getElement(t
.container
), t
.node
);
3709 if (!t
.options
.features
.length
&& !t
.options
.useDefaultControls
) {
3710 t
.getElement(t
.container
).style
.background
= 'transparent';
3711 t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'controls').style
.display
= 'none';
3714 if (t
.isVideo
&& t
.options
.stretching
=== 'fill' && !dom
.hasClass(t
.getElement(t
.container
).parentNode
, t
.options
.classPrefix
+ 'fill-container')) {
3715 t
.outerContainer
= t
.media
.parentNode
;
3717 var wrapper
= _document2
.default.createElement('div');
3718 wrapper
.className
= t
.options
.classPrefix
+ 'fill-container';
3719 t
.getElement(t
.container
).parentNode
.insertBefore(wrapper
, t
.getElement(t
.container
));
3720 wrapper
.appendChild(t
.getElement(t
.container
));
3723 if (_constants
.IS_ANDROID
) {
3724 dom
.addClass(t
.getElement(t
.container
), t
.options
.classPrefix
+ 'android');
3726 if (_constants
.IS_IOS
) {
3727 dom
.addClass(t
.getElement(t
.container
), t
.options
.classPrefix
+ 'ios');
3729 if (_constants
.IS_IPAD
) {
3730 dom
.addClass(t
.getElement(t
.container
), t
.options
.classPrefix
+ 'ipad');
3732 if (_constants
.IS_IPHONE
) {
3733 dom
.addClass(t
.getElement(t
.container
), t
.options
.classPrefix
+ 'iphone');
3735 dom
.addClass(t
.getElement(t
.container
), t
.isVideo
? t
.options
.classPrefix
+ 'video' : t
.options
.classPrefix
+ 'audio');
3737 if (_constants
.IS_SAFARI
&& !_constants
.IS_IOS
) {
3739 dom
.addClass(t
.getElement(t
.container
), t
.options
.classPrefix
+ 'hide-cues');
3741 var cloneNode
= t
.node
.cloneNode(),
3742 children
= t
.node
.children
,
3746 for (var i
= 0, total
= children
.length
; i
< total
; i
++) {
3747 var childNode
= children
[i
];
3750 switch (childNode
.tagName
.toLowerCase()) {
3753 Array
.prototype.slice
.call(childNode
.attributes
).forEach(function (item
) {
3754 elements
[item
.name
] = item
.value
;
3756 elements
.type
= (0, _media
.formatType
)(elements
.src
, elements
.type
);
3757 mediaFiles
.push(elements
);
3760 childNode
.mode
= 'hidden';
3761 tracks
.push(childNode
);
3764 cloneNode
.appendChild(childNode
);
3771 t
.node
= t
.media
= cloneNode
;
3773 if (mediaFiles
.length
) {
3774 t
.mediaFiles
= mediaFiles
;
3776 if (tracks
.length
) {
3777 t
.trackFiles
= tracks
;
3781 t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'mediaelement').appendChild(t
.node
);
3785 t
.controls
= t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'controls');
3786 t
.layers
= t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'layers');
3788 var tagType
= t
.isVideo
? 'video' : 'audio',
3789 capsTagName
= tagType
.substring(0, 1).toUpperCase() + tagType
.substring(1);
3791 if (t
.options
[tagType
+ 'Width'] > 0 || t
.options
[tagType
+ 'Width'].toString().indexOf('%') > -1) {
3792 t
.width
= t
.options
[tagType
+ 'Width'];
3793 } else if (t
.node
.style
.width
!== '' && t
.node
.style
.width
!== null) {
3794 t
.width
= t
.node
.style
.width
;
3795 } else if (t
.node
.getAttribute('width')) {
3796 t
.width
= t
.node
.getAttribute('width');
3798 t
.width
= t
.options
['default' + capsTagName
+ 'Width'];
3801 if (t
.options
[tagType
+ 'Height'] > 0 || t
.options
[tagType
+ 'Height'].toString().indexOf('%') > -1) {
3802 t
.height
= t
.options
[tagType
+ 'Height'];
3803 } else if (t
.node
.style
.height
!== '' && t
.node
.style
.height
!== null) {
3804 t
.height
= t
.node
.style
.height
;
3805 } else if (t
.node
.getAttribute('height')) {
3806 t
.height
= t
.node
.getAttribute('height');
3808 t
.height
= t
.options
['default' + capsTagName
+ 'Height'];
3811 t
.initialAspectRatio
= t
.height
>= t
.width
? t
.width
/ t
.height
: t
.height
/ t
.width
;
3813 t
.setPlayerSize(t
.width
, t
.height
);
3815 playerOptions
.pluginWidth
= t
.width
;
3816 playerOptions
.pluginHeight
= t
.height
;
3817 } else if (!t
.isVideo
&& !t
.options
.features
.length
&& !t
.options
.useDefaultControls
) {
3818 t
.node
.style
.display
= 'none';
3821 _mejs2
.default.MepDefaults
= playerOptions
;
3823 new _mediaelement2
.default(t
.media
, playerOptions
, t
.mediaFiles
);
3825 if (t
.getElement(t
.container
) !== undefined && t
.options
.features
.length
&& t
.controlsAreVisible
&& !t
.options
.hideVideoControlsOnLoad
) {
3826 var event
= (0, _general
.createEvent
)('controlsshown', t
.getElement(t
.container
));
3827 t
.getElement(t
.container
).dispatchEvent(event
);
3831 key
: 'showControls',
3832 value
: function showControls(doAnimation
) {
3835 doAnimation
= doAnimation
=== undefined || doAnimation
;
3837 if (t
.controlsAreVisible
|| !t
.isVideo
) {
3843 dom
.fadeIn(t
.getElement(t
.controls
), 200, function () {
3844 dom
.removeClass(t
.getElement(t
.controls
), t
.options
.classPrefix
+ 'offscreen');
3845 var event
= (0, _general
.createEvent
)('controlsshown', t
.getElement(t
.container
));
3846 t
.getElement(t
.container
).dispatchEvent(event
);
3849 var controls
= t
.getElement(t
.container
).querySelectorAll('.' + t
.options
.classPrefix
+ 'control');
3851 var _loop
= function _loop(i
, total
) {
3852 dom
.fadeIn(controls
[i
], 200, function () {
3853 dom
.removeClass(controls
[i
], t
.options
.classPrefix
+ 'offscreen');
3857 for (var i
= 0, total
= controls
.length
; i
< total
; i
++) {
3862 dom
.removeClass(t
.getElement(t
.controls
), t
.options
.classPrefix
+ 'offscreen');
3863 t
.getElement(t
.controls
).style
.display
= '';
3864 t
.getElement(t
.controls
).style
.opacity
= 1;
3866 var controls
= t
.getElement(t
.container
).querySelectorAll('.' + t
.options
.classPrefix
+ 'control');
3867 for (var i
= 0, total
= controls
.length
; i
< total
; i
++) {
3868 dom
.removeClass(controls
[i
], t
.options
.classPrefix
+ 'offscreen');
3869 controls
[i
].style
.display
= '';
3872 var event
= (0, _general
.createEvent
)('controlsshown', t
.getElement(t
.container
));
3873 t
.getElement(t
.container
).dispatchEvent(event
);
3876 t
.controlsAreVisible
= true;
3877 t
.setControlsSize();
3880 key
: 'hideControls',
3881 value
: function hideControls(doAnimation
, forceHide
) {
3884 doAnimation
= doAnimation
=== undefined || doAnimation
;
3886 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
)) {
3892 dom
.fadeOut(t
.getElement(t
.controls
), 200, function () {
3893 dom
.addClass(t
.getElement(t
.controls
), t
.options
.classPrefix
+ 'offscreen');
3894 t
.getElement(t
.controls
).style
.display
= '';
3895 var event
= (0, _general
.createEvent
)('controlshidden', t
.getElement(t
.container
));
3896 t
.getElement(t
.container
).dispatchEvent(event
);
3899 var controls
= t
.getElement(t
.container
).querySelectorAll('.' + t
.options
.classPrefix
+ 'control');
3901 var _loop2
= function _loop2(i
, total
) {
3902 dom
.fadeOut(controls
[i
], 200, function () {
3903 dom
.addClass(controls
[i
], t
.options
.classPrefix
+ 'offscreen');
3904 controls
[i
].style
.display
= '';
3908 for (var i
= 0, total
= controls
.length
; i
< total
; i
++) {
3913 dom
.addClass(t
.getElement(t
.controls
), t
.options
.classPrefix
+ 'offscreen');
3914 t
.getElement(t
.controls
).style
.display
= '';
3915 t
.getElement(t
.controls
).style
.opacity
= 0;
3917 var controls
= t
.getElement(t
.container
).querySelectorAll('.' + t
.options
.classPrefix
+ 'control');
3918 for (var i
= 0, total
= controls
.length
; i
< total
; i
++) {
3919 dom
.addClass(controls
[i
], t
.options
.classPrefix
+ 'offscreen');
3920 controls
[i
].style
.display
= '';
3923 var event
= (0, _general
.createEvent
)('controlshidden', t
.getElement(t
.container
));
3924 t
.getElement(t
.container
).dispatchEvent(event
);
3927 t
.controlsAreVisible
= false;
3930 key
: 'startControlsTimer',
3931 value
: function startControlsTimer(timeout
) {
3934 timeout
= typeof timeout
!== 'undefined' ? timeout
: t
.options
.controlsTimeoutDefault
;
3936 t
.killControlsTimer('start');
3938 t
.controlsTimer
= setTimeout(function () {
3940 t
.killControlsTimer('hide');
3944 key
: 'killControlsTimer',
3945 value
: function killControlsTimer() {
3948 if (t
.controlsTimer
!== null) {
3949 clearTimeout(t
.controlsTimer
);
3950 delete t
.controlsTimer
;
3951 t
.controlsTimer
= null;
3955 key
: 'disableControls',
3956 value
: function disableControls() {
3959 t
.killControlsTimer();
3960 t
.controlsEnabled
= false;
3961 t
.hideControls(false, true);
3964 key
: 'enableControls',
3965 value
: function enableControls() {
3968 t
.controlsEnabled
= true;
3969 t
.showControls(false);
3972 key
: '_setDefaultPlayer',
3973 value
: function _setDefaultPlayer() {
3978 t
.proxy
= new _default2
.default(t
);
3979 t
.media
.addEventListener('loadedmetadata', function () {
3980 if (t
.getCurrentTime() > 0 && t
.currentMediaTime
> 0) {
3981 t
.setCurrentTime(t
.currentMediaTime
);
3982 if (!_constants
.IS_IOS
&& !_constants
.IS_ANDROID
) {
3990 value
: function _meReady(media
, domNode
) {
3992 autoplayAttr
= domNode
.getAttribute('autoplay'),
3993 autoplay
= !(autoplayAttr
=== undefined || autoplayAttr
=== null || autoplayAttr
=== 'false'),
3994 isNative
= media
.rendererName
!== null && /(native|html5)/i.test(t
.media
.rendererName
);
3996 if (t
.getElement(t
.controls
)) {
4000 if (t
.getElement(t
.container
) && t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'overlay-play')) {
4001 t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'overlay-play').style
.display
= '';
4010 t
.domNode
= domNode
;
4012 if (!(_constants
.IS_ANDROID
&& t
.options
.AndroidUseNativeControls
) && !(_constants
.IS_IPAD
&& t
.options
.iPadUseNativeControls
) && !(_constants
.IS_IPHONE
&& t
.options
.iPhoneUseNativeControls
)) {
4013 if (!t
.isVideo
&& !t
.options
.features
.length
&& !t
.options
.useDefaultControls
) {
4014 if (autoplay
&& isNative
) {
4018 if (t
.options
.success
) {
4020 if (typeof t
.options
.success
=== 'string') {
4021 _window2
.default[t
.options
.success
](t
.media
, t
.domNode
, t
);
4023 t
.options
.success(t
.media
, t
.domNode
, t
);
4030 t
.featurePosition
= {};
4032 t
._setDefaultPlayer();
4034 t
.buildposter(t
, t
.getElement(t
.controls
), t
.getElement(t
.layers
), t
.media
);
4035 t
.buildkeyboard(t
, t
.getElement(t
.controls
), t
.getElement(t
.layers
), t
.media
);
4036 t
.buildoverlays(t
, t
.getElement(t
.controls
), t
.getElement(t
.layers
), t
.media
);
4038 if (t
.options
.useDefaultControls
) {
4039 var defaultControls
= ['playpause', 'current', 'progress', 'duration', 'tracks', 'volume', 'fullscreen'];
4040 t
.options
.features
= defaultControls
.concat(t
.options
.features
.filter(function (item
) {
4041 return defaultControls
.indexOf(item
) === -1;
4045 t
.buildfeatures(t
, t
.getElement(t
.controls
), t
.getElement(t
.layers
), t
.media
);
4047 var event
= (0, _general
.createEvent
)('controlsready', t
.getElement(t
.container
));
4048 t
.getElement(t
.container
).dispatchEvent(event
);
4050 t
.setPlayerSize(t
.width
, t
.height
);
4051 t
.setControlsSize();
4054 t
.clickToPlayPauseCallback = function () {
4056 if (t
.options
.clickToPlayPause
) {
4057 var button
= t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'overlay-button'),
4058 pressed
= button
.getAttribute('aria-pressed');
4060 if (t
.paused
&& pressed
) {
4062 } else if (t
.paused
) {
4068 button
.setAttribute('aria-pressed', !pressed
);
4069 t
.getElement(t
.container
).focus();
4073 t
.createIframeLayer();
4075 t
.media
.addEventListener('click', t
.clickToPlayPauseCallback
);
4077 if ((_constants
.IS_ANDROID
|| _constants
.IS_IOS
) && !t
.options
.alwaysShowControls
) {
4078 t
.node
.addEventListener('touchstart', function () {
4079 if (t
.controlsAreVisible
) {
4080 t
.hideControls(false);
4082 if (t
.controlsEnabled
) {
4083 t
.showControls(false);
4086 }, _constants
.SUPPORT_PASSIVE_EVENT
? { passive
: true } : false);
4088 t
.getElement(t
.container
).addEventListener('mouseenter', function () {
4089 if (t
.controlsEnabled
) {
4090 if (!t
.options
.alwaysShowControls
) {
4091 t
.killControlsTimer('enter');
4093 t
.startControlsTimer(t
.options
.controlsTimeoutMouseEnter
);
4097 t
.getElement(t
.container
).addEventListener('mousemove', function () {
4098 if (t
.controlsEnabled
) {
4099 if (!t
.controlsAreVisible
) {
4102 if (!t
.options
.alwaysShowControls
) {
4103 t
.startControlsTimer(t
.options
.controlsTimeoutMouseEnter
);
4107 t
.getElement(t
.container
).addEventListener('mouseleave', function () {
4108 if (t
.controlsEnabled
) {
4109 if (!t
.paused
&& !t
.options
.alwaysShowControls
) {
4110 t
.startControlsTimer(t
.options
.controlsTimeoutMouseLeave
);
4116 if (t
.options
.hideVideoControlsOnLoad
) {
4117 t
.hideControls(false);
4120 if (t
.options
.enableAutosize
) {
4121 t
.media
.addEventListener('loadedmetadata', function (e
) {
4122 var target
= e
!== undefined ? e
.detail
.target
|| e
.target
: t
.media
;
4123 if (t
.options
.videoHeight
<= 0 && !t
.domNode
.getAttribute('height') && !t
.domNode
.style
.height
&& target
!== null && !isNaN(target
.videoHeight
)) {
4124 t
.setPlayerSize(target
.videoWidth
, target
.videoHeight
);
4125 t
.setControlsSize();
4126 t
.media
.setSize(target
.videoWidth
, target
.videoHeight
);
4132 t
.media
.addEventListener('play', function () {
4135 for (var playerIndex
in _mejs2
.default.players
) {
4136 if (_mejs2
.default.players
.hasOwnProperty(playerIndex
)) {
4137 var p
= _mejs2
.default.players
[playerIndex
];
4139 if (p
.id
!== t
.id
&& t
.options
.pauseOtherPlayers
&& !p
.paused
&& !p
.ended
) {
4146 if (!(_constants
.IS_ANDROID
|| _constants
.IS_IOS
) && !t
.options
.alwaysShowControls
&& t
.isVideo
) {
4151 t
.media
.addEventListener('ended', function () {
4152 if (t
.options
.autoRewind
) {
4154 t
.setCurrentTime(0);
4156 setTimeout(function () {
4157 var loadingElement
= t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'overlay-loading');
4158 if (loadingElement
&& loadingElement
.parentNode
) {
4159 loadingElement
.parentNode
.style
.display
= 'none';
4167 if (typeof t
.media
.renderer
.stop
=== 'function') {
4168 t
.media
.renderer
.stop();
4173 if (t
.setProgressRail
) {
4174 t
.setProgressRail();
4176 if (t
.setCurrentRail
) {
4180 if (t
.options
.loop
) {
4182 } else if (!t
.options
.alwaysShowControls
&& t
.controlsEnabled
) {
4187 t
.media
.addEventListener('loadedmetadata', function () {
4189 (0, _time
.calculateTimeFormat
)(t
.getDuration(), t
.options
, t
.options
.framesPerSecond
|| 25);
4191 if (t
.updateDuration
) {
4194 if (t
.updateCurrent
) {
4198 if (!t
.isFullScreen
) {
4199 t
.setPlayerSize(t
.width
, t
.height
);
4200 t
.setControlsSize();
4204 var duration
= null;
4205 t
.media
.addEventListener('timeupdate', function () {
4206 if (!isNaN(t
.getDuration()) && duration
!== t
.getDuration()) {
4207 duration
= t
.getDuration();
4208 (0, _time
.calculateTimeFormat
)(duration
, t
.options
, t
.options
.framesPerSecond
|| 25);
4210 if (t
.updateDuration
) {
4213 if (t
.updateCurrent
) {
4217 t
.setControlsSize();
4221 t
.getElement(t
.container
).addEventListener('click', function (e
) {
4222 dom
.addClass(e
.currentTarget
, t
.options
.classPrefix
+ 'container-keyboard-inactive');
4225 t
.getElement(t
.container
).addEventListener('focusin', function (e
) {
4226 dom
.removeClass(e
.currentTarget
, t
.options
.classPrefix
+ 'container-keyboard-inactive');
4227 if (t
.isVideo
&& !_constants
.IS_ANDROID
&& !_constants
.IS_IOS
&& t
.controlsEnabled
&& !t
.options
.alwaysShowControls
) {
4228 t
.killControlsTimer('enter');
4230 t
.startControlsTimer(t
.options
.controlsTimeoutMouseEnter
);
4234 t
.getElement(t
.container
).addEventListener('focusout', function (e
) {
4235 setTimeout(function () {
4236 if (e
.relatedTarget
) {
4237 if (t
.keyboardAction
&& !e
.relatedTarget
.closest('.' + t
.options
.classPrefix
+ 'container')) {
4238 t
.keyboardAction
= false;
4239 if (t
.isVideo
&& !t
.options
.alwaysShowControls
&& !t
.paused
) {
4240 t
.startControlsTimer(t
.options
.controlsTimeoutMouseLeave
);
4247 setTimeout(function () {
4248 t
.setPlayerSize(t
.width
, t
.height
);
4249 t
.setControlsSize();
4252 t
.globalResizeCallback = function () {
4253 if (!(t
.isFullScreen
|| _constants
.HAS_TRUE_NATIVE_FULLSCREEN
&& _document2
.default.webkitIsFullScreen
)) {
4254 t
.setPlayerSize(t
.width
, t
.height
);
4257 t
.setControlsSize();
4260 t
.globalBind('resize', t
.globalResizeCallback
);
4263 if (autoplay
&& isNative
) {
4267 if (t
.options
.success
) {
4268 if (typeof t
.options
.success
=== 'string') {
4269 _window2
.default[t
.options
.success
](t
.media
, t
.domNode
, t
);
4271 t
.options
.success(t
.media
, t
.domNode
, t
);
4276 key
: '_handleError',
4277 value
: function _handleError(e
, media
, node
) {
4279 play
= t
.getElement(t
.layers
).querySelector('.' + t
.options
.classPrefix
+ 'overlay-play');
4282 play
.style
.display
= 'none';
4285 if (t
.options
.error
) {
4286 t
.options
.error(e
, media
, node
);
4289 if (t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'cannotplay')) {
4290 t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'cannotplay').remove();
4293 var errorContainer
= _document2
.default.createElement('div');
4294 errorContainer
.className
= t
.options
.classPrefix
+ 'cannotplay';
4295 errorContainer
.style
.width
= '100%';
4296 errorContainer
.style
.height
= '100%';
4298 var errorContent
= typeof t
.options
.customError
=== 'function' ? t
.options
.customError(t
.media
, t
.media
.originalNode
) : t
.options
.customError
,
4301 if (!errorContent
) {
4302 var poster
= t
.media
.originalNode
.getAttribute('poster');
4304 imgError
= '<img src="' + poster
+ '" alt="' + _mejs2
.default.i18n
.t('mejs.download-file') + '">';
4308 errorContent
= '<p>' + e
.message
+ '</p>';
4312 for (var i
= 0, total
= e
.urls
.length
; i
< total
; i
++) {
4313 var url
= e
.urls
[i
];
4314 errorContent
+= '<a href="' + url
.src
+ '" data-type="' + url
.type
+ '"><span>' + _mejs2
.default.i18n
.t('mejs.download-file') + ': ' + url
.src
+ '</span></a>';
4319 if (errorContent
&& t
.getElement(t
.layers
).querySelector('.' + t
.options
.classPrefix
+ 'overlay-error')) {
4320 errorContainer
.innerHTML
= errorContent
;
4321 t
.getElement(t
.layers
).querySelector('.' + t
.options
.classPrefix
+ 'overlay-error').innerHTML
= '' + imgError
+ errorContainer
.outerHTML
;
4322 t
.getElement(t
.layers
).querySelector('.' + t
.options
.classPrefix
+ 'overlay-error').parentNode
.style
.display
= 'block';
4325 if (t
.controlsEnabled
) {
4326 t
.disableControls();
4330 key
: 'setPlayerSize',
4331 value
: function setPlayerSize(width
, height
) {
4334 if (!t
.options
.setDimensions
) {
4338 if (typeof width
!== 'undefined') {
4342 if (typeof height
!== 'undefined') {
4346 switch (t
.options
.stretching
) {
4351 t
.setDimensions(t
.width
, t
.height
);
4355 t
.setResponsiveMode();
4358 t
.setDimensions(t
.width
, t
.height
);
4362 if (t
.hasFluidMode() === true) {
4363 t
.setResponsiveMode();
4365 t
.setDimensions(t
.width
, t
.height
);
4371 key
: 'hasFluidMode',
4372 value
: function hasFluidMode() {
4375 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%';
4378 key
: 'setResponsiveMode',
4379 value
: function setResponsiveMode() {
4381 parent = function () {
4383 var parentEl
= void 0,
4384 el
= t
.getElement(t
.container
);
4388 if (_constants
.IS_FIREFOX
&& el
.tagName
.toLowerCase() === 'html' && _window2
.default.self
!== _window2
.default.top
&& _window2
.default.frameElement
!== null) {
4389 return _window2
.default.frameElement
;
4391 parentEl
= el
.parentElement
;
4394 parentEl
= el
.parentElement
;
4397 if (parentEl
&& dom
.visible(parentEl
)) {
4405 parentStyles
= parent
? getComputedStyle(parent
, null) : getComputedStyle(_document2
.default.body
, null),
4406 nativeWidth = function () {
4408 if (t
.node
.videoWidth
&& t
.node
.videoWidth
> 0) {
4409 return t
.node
.videoWidth
;
4410 } else if (t
.node
.getAttribute('width')) {
4411 return t
.node
.getAttribute('width');
4413 return t
.options
.defaultVideoWidth
;
4416 return t
.options
.defaultAudioWidth
;
4419 nativeHeight = function () {
4421 if (t
.node
.videoHeight
&& t
.node
.videoHeight
> 0) {
4422 return t
.node
.videoHeight
;
4423 } else if (t
.node
.getAttribute('height')) {
4424 return t
.node
.getAttribute('height');
4426 return t
.options
.defaultVideoHeight
;
4429 return t
.options
.defaultAudioHeight
;
4432 aspectRatio = function () {
4438 if (t
.node
.videoWidth
&& t
.node
.videoWidth
> 0 && t
.node
.videoHeight
&& t
.node
.videoHeight
> 0) {
4439 ratio
= t
.height
>= t
.width
? t
.node
.videoWidth
/ t
.node
.videoHeight
: t
.node
.videoHeight
/ t
.node
.videoWidth
;
4441 ratio
= t
.initialAspectRatio
;
4444 if (isNaN(ratio
) || ratio
< 0.01 || ratio
> 100) {
4450 parentHeight
= parseFloat(parentStyles
.height
);
4452 var newHeight
= void 0,
4453 parentWidth
= parseFloat(parentStyles
.width
);
4456 if (t
.height
=== '100%') {
4457 newHeight
= parseFloat(parentWidth
* nativeHeight
/ nativeWidth
, 10);
4459 newHeight
= t
.height
>= t
.width
? parseFloat(parentWidth
/ aspectRatio
, 10) : parseFloat(parentWidth
* aspectRatio
, 10);
4462 newHeight
= nativeHeight
;
4465 if (isNaN(newHeight
)) {
4466 newHeight
= parentHeight
;
4469 if (t
.getElement(t
.container
).parentNode
.length
> 0 && t
.getElement(t
.container
).parentNode
.tagName
.toLowerCase() === 'body') {
4470 parentWidth
= _window2
.default.innerWidth
|| _document2
.default.documentElement
.clientWidth
|| _document2
.default.body
.clientWidth
;
4471 newHeight
= _window2
.default.innerHeight
|| _document2
.default.documentElement
.clientHeight
|| _document2
.default.body
.clientHeight
;
4474 if (newHeight
&& parentWidth
) {
4475 t
.getElement(t
.container
).style
.width
= parentWidth
+ 'px';
4476 t
.getElement(t
.container
).style
.height
= newHeight
+ 'px';
4478 t
.node
.style
.width
= '100%';
4479 t
.node
.style
.height
= '100%';
4481 if (t
.isVideo
&& t
.media
.setSize
) {
4482 t
.media
.setSize(parentWidth
, newHeight
);
4485 var layerChildren
= t
.getElement(t
.layers
).children
;
4486 for (var i
= 0, total
= layerChildren
.length
; i
< total
; i
++) {
4487 layerChildren
[i
].style
.width
= '100%';
4488 layerChildren
[i
].style
.height
= '100%';
4494 value
: function setFillMode() {
4496 var isIframe
= _window2
.default.self
!== _window2
.default.top
&& _window2
.default.frameElement
!== null;
4497 var parent = function () {
4498 var parentEl
= void 0,
4499 el
= t
.getElement(t
.container
);
4503 if (_constants
.IS_FIREFOX
&& el
.tagName
.toLowerCase() === 'html' && _window2
.default.self
!== _window2
.default.top
&& _window2
.default.frameElement
!== null) {
4504 return _window2
.default.frameElement
;
4506 parentEl
= el
.parentElement
;
4509 parentEl
= el
.parentElement
;
4512 if (parentEl
&& dom
.visible(parentEl
)) {
4520 var parentStyles
= parent
? getComputedStyle(parent
, null) : getComputedStyle(_document2
.default.body
, null);
4522 if (t
.node
.style
.height
!== 'none' && t
.node
.style
.height
!== t
.height
) {
4523 t
.node
.style
.height
= 'auto';
4525 if (t
.node
.style
.maxWidth
!== 'none' && t
.node
.style
.maxWidth
!== t
.width
) {
4526 t
.node
.style
.maxWidth
= 'none';
4529 if (t
.node
.style
.maxHeight
!== 'none' && t
.node
.style
.maxHeight
!== t
.height
) {
4530 t
.node
.style
.maxHeight
= 'none';
4533 if (t
.node
.currentStyle
) {
4534 if (t
.node
.currentStyle
.height
=== '100%') {
4535 t
.node
.currentStyle
.height
= 'auto';
4537 if (t
.node
.currentStyle
.maxWidth
=== '100%') {
4538 t
.node
.currentStyle
.maxWidth
= 'none';
4540 if (t
.node
.currentStyle
.maxHeight
=== '100%') {
4541 t
.node
.currentStyle
.maxHeight
= 'none';
4545 if (!isIframe
&& !parseFloat(parentStyles
.width
)) {
4546 parent
.style
.width
= t
.media
.offsetWidth
+ 'px';
4549 if (!isIframe
&& !parseFloat(parentStyles
.height
)) {
4550 parent
.style
.height
= t
.media
.offsetHeight
+ 'px';
4553 parentStyles
= getComputedStyle(parent
);
4555 var parentWidth
= parseFloat(parentStyles
.width
),
4556 parentHeight
= parseFloat(parentStyles
.height
);
4558 t
.setDimensions('100%', '100%');
4560 var poster
= t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'poster>img');
4562 poster
.style
.display
= '';
4565 var targetElement
= t
.getElement(t
.container
).querySelectorAll('object, embed, iframe, video'),
4566 initHeight
= t
.height
,
4567 initWidth
= t
.width
,
4568 scaleX1
= parentWidth
,
4569 scaleY1
= initHeight
* parentWidth
/ initWidth
,
4570 scaleX2
= initWidth
* parentHeight
/ initHeight
,
4571 scaleY2
= parentHeight
,
4572 bScaleOnWidth
= scaleX2
> parentWidth
=== false,
4573 finalWidth
= bScaleOnWidth
? Math
.floor(scaleX1
) : Math
.floor(scaleX2
),
4574 finalHeight
= bScaleOnWidth
? Math
.floor(scaleY1
) : Math
.floor(scaleY2
),
4575 width
= bScaleOnWidth
? parentWidth
+ 'px' : finalWidth
+ 'px',
4576 height
= bScaleOnWidth
? finalHeight
+ 'px' : parentHeight
+ 'px';
4578 for (var i
= 0, total
= targetElement
.length
; i
< total
; i
++) {
4579 targetElement
[i
].style
.height
= height
;
4580 targetElement
[i
].style
.width
= width
;
4581 if (t
.media
.setSize
) {
4582 t
.media
.setSize(width
, height
);
4585 targetElement
[i
].style
.marginLeft
= Math
.floor((parentWidth
- finalWidth
) / 2) + 'px';
4586 targetElement
[i
].style
.marginTop
= 0;
4590 key
: 'setDimensions',
4591 value
: function setDimensions(width
, height
) {
4594 width
= (0, _general
.isString
)(width
) && width
.indexOf('%') > -1 ? width
: parseFloat(width
) + 'px';
4595 height
= (0, _general
.isString
)(height
) && height
.indexOf('%') > -1 ? height
: parseFloat(height
) + 'px';
4597 t
.getElement(t
.container
).style
.width
= width
;
4598 t
.getElement(t
.container
).style
.height
= height
;
4600 var layers
= t
.getElement(t
.layers
).children
;
4601 for (var i
= 0, total
= layers
.length
; i
< total
; i
++) {
4602 layers
[i
].style
.width
= width
;
4603 layers
[i
].style
.height
= height
;
4607 key
: 'setControlsSize',
4608 value
: function setControlsSize() {
4611 if (!dom
.visible(t
.getElement(t
.container
))) {
4615 if (t
.rail
&& dom
.visible(t
.rail
)) {
4616 var totalStyles
= t
.total
? getComputedStyle(t
.total
, null) : null,
4617 totalMargin
= totalStyles
? parseFloat(totalStyles
.marginLeft
) + parseFloat(totalStyles
.marginRight
) : 0,
4618 railStyles
= getComputedStyle(t
.rail
),
4619 railMargin
= parseFloat(railStyles
.marginLeft
) + parseFloat(railStyles
.marginRight
);
4621 var siblingsWidth
= 0;
4623 var siblings
= dom
.siblings(t
.rail
, function (el
) {
4624 return el
!== t
.rail
;
4626 total
= siblings
.length
;
4627 for (var i
= 0; i
< total
; i
++) {
4628 siblingsWidth
+= siblings
[i
].offsetWidth
;
4631 siblingsWidth
+= totalMargin
+ (totalMargin
=== 0 ? railMargin
* 2 : railMargin
) + 1;
4633 t
.getElement(t
.container
).style
.minWidth
= siblingsWidth
+ 'px';
4635 var event
= (0, _general
.createEvent
)('controlsresize', t
.getElement(t
.container
));
4636 t
.getElement(t
.container
).dispatchEvent(event
);
4638 var children
= t
.getElement(t
.controls
).children
;
4641 for (var _i
= 0, _total
= children
.length
; _i
< _total
; _i
++) {
4642 minWidth
+= children
[_i
].offsetWidth
;
4645 t
.getElement(t
.container
).style
.minWidth
= minWidth
+ 'px';
4649 key
: 'addControlElement',
4650 value
: function addControlElement(element
, key
) {
4654 if (t
.featurePosition
[key
] !== undefined) {
4655 var child
= t
.getElement(t
.controls
).children
[t
.featurePosition
[key
] - 1];
4656 child
.parentNode
.insertBefore(element
, child
.nextSibling
);
4658 t
.getElement(t
.controls
).appendChild(element
);
4659 var children
= t
.getElement(t
.controls
).children
;
4660 for (var i
= 0, total
= children
.length
; i
< total
; i
++) {
4661 if (element
=== children
[i
]) {
4662 t
.featurePosition
[key
] = i
;
4669 key
: 'createIframeLayer',
4670 value
: function createIframeLayer() {
4673 if (t
.isVideo
&& t
.media
.rendererName
!== null && t
.media
.rendererName
.indexOf('iframe') > -1 && !_document2
.default.getElementById(t
.media
.id
+ '-iframe-overlay')) {
4675 var layer
= _document2
.default.createElement('div'),
4676 target
= _document2
.default.getElementById(t
.media
.id
+ '_' + t
.media
.rendererName
);
4678 layer
.id
= t
.media
.id
+ '-iframe-overlay';
4679 layer
.className
= t
.options
.classPrefix
+ 'iframe-overlay';
4680 layer
.addEventListener('click', function (e
) {
4681 if (t
.options
.clickToPlayPause
) {
4689 e
.stopPropagation();
4693 target
.parentNode
.insertBefore(layer
, target
);
4698 value
: function resetSize() {
4701 setTimeout(function () {
4702 t
.setPlayerSize(t
.width
, t
.height
);
4703 t
.setControlsSize();
4708 value
: function setPoster(url
) {
4711 if (t
.getElement(t
.container
)) {
4712 var posterDiv
= t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'poster');
4715 posterDiv
= _document2
.default.createElement('div');
4716 posterDiv
.className
= t
.options
.classPrefix
+ 'poster ' + t
.options
.classPrefix
+ 'layer';
4717 t
.getElement(t
.layers
).appendChild(posterDiv
);
4720 var posterImg
= posterDiv
.querySelector('img');
4722 if (!posterImg
&& url
) {
4723 posterImg
= _document2
.default.createElement('img');
4724 posterImg
.className
= t
.options
.classPrefix
+ 'poster-img';
4725 posterImg
.width
= '100%';
4726 posterImg
.height
= '100%';
4727 posterDiv
.style
.display
= '';
4728 posterDiv
.appendChild(posterImg
);
4732 posterImg
.setAttribute('src', url
);
4733 posterDiv
.style
.backgroundImage
= 'url("' + url
+ '")';
4734 posterDiv
.style
.display
= '';
4735 } else if (posterImg
) {
4736 posterDiv
.style
.backgroundImage
= 'none';
4737 posterDiv
.style
.display
= 'none';
4740 posterDiv
.style
.display
= 'none';
4742 } else if (_constants
.IS_IPAD
&& t
.options
.iPadUseNativeControls
|| _constants
.IS_IPHONE
&& t
.options
.iPhoneUseNativeControls
|| _constants
.IS_ANDROID
&& t
.options
.AndroidUseNativeControls
) {
4743 t
.media
.originalNode
.poster
= url
;
4748 value
: function changeSkin(className
) {
4751 t
.getElement(t
.container
).className
= t
.options
.classPrefix
+ 'container ' + className
;
4752 t
.setPlayerSize(t
.width
, t
.height
);
4753 t
.setControlsSize();
4757 value
: function globalBind(events
, callback
) {
4759 doc
= t
.node
? t
.node
.ownerDocument
: _document2
.default;
4761 events
= (0, _general
.splitEvents
)(events
, t
.id
);
4763 var eventList
= events
.d
.split(' ');
4764 for (var i
= 0, total
= eventList
.length
; i
< total
; i
++) {
4765 eventList
[i
].split('.').reduce(function (part
, e
) {
4766 doc
.addEventListener(e
, callback
, false);
4772 var _eventList
= events
.w
.split(' ');
4773 for (var _i2
= 0, _total2
= _eventList
.length
; _i2
< _total2
; _i2
++) {
4774 _eventList
[_i2
].split('.').reduce(function (part
, e
) {
4775 _window2
.default.addEventListener(e
, callback
, false);
4782 key
: 'globalUnbind',
4783 value
: function globalUnbind(events
, callback
) {
4785 doc
= t
.node
? t
.node
.ownerDocument
: _document2
.default;
4787 events
= (0, _general
.splitEvents
)(events
, t
.id
);
4789 var eventList
= events
.d
.split(' ');
4790 for (var i
= 0, total
= eventList
.length
; i
< total
; i
++) {
4791 eventList
[i
].split('.').reduce(function (part
, e
) {
4792 doc
.removeEventListener(e
, callback
, false);
4798 var _eventList2
= events
.w
.split(' ');
4799 for (var _i3
= 0, _total3
= _eventList2
.length
; _i3
< _total3
; _i3
++) {
4800 _eventList2
[_i3
].split('.').reduce(function (part
, e
) {
4801 _window2
.default.removeEventListener(e
, callback
, false);
4808 key
: 'buildfeatures',
4809 value
: function buildfeatures(player
, controls
, layers
, media
) {
4812 for (var i
= 0, total
= t
.options
.features
.length
; i
< total
; i
++) {
4813 var feature
= t
.options
.features
[i
];
4814 if (t
['build' + feature
]) {
4816 t
['build' + feature
](player
, controls
, layers
, media
);
4818 console
.error('error building ' + feature
, e
);
4825 value
: function buildposter(player
, controls
, layers
, media
) {
4827 poster
= _document2
.default.createElement('div');
4829 poster
.className
= t
.options
.classPrefix
+ 'poster ' + t
.options
.classPrefix
+ 'layer';
4830 layers
.appendChild(poster
);
4832 var posterUrl
= media
.originalNode
.getAttribute('poster');
4834 if (player
.options
.poster
!== '') {
4835 if (posterUrl
&& _constants
.IS_IOS
) {
4836 media
.originalNode
.removeAttribute('poster');
4838 posterUrl
= player
.options
.poster
;
4842 t
.setPoster(posterUrl
);
4843 } else if (t
.media
.renderer
!== null && typeof t
.media
.renderer
.getPosterUrl
=== 'function') {
4844 t
.setPoster(t
.media
.renderer
.getPosterUrl());
4846 poster
.style
.display
= 'none';
4849 media
.addEventListener('play', function () {
4850 poster
.style
.display
= 'none';
4853 media
.addEventListener('playing', function () {
4854 poster
.style
.display
= 'none';
4857 if (player
.options
.showPosterWhenEnded
&& player
.options
.autoRewind
) {
4858 media
.addEventListener('ended', function () {
4859 poster
.style
.display
= '';
4863 media
.addEventListener('error', function () {
4864 poster
.style
.display
= 'none';
4867 if (player
.options
.showPosterWhenPaused
) {
4868 media
.addEventListener('pause', function () {
4869 if (!player
.ended
) {
4870 poster
.style
.display
= '';
4876 key
: 'buildoverlays',
4877 value
: function buildoverlays(player
, controls
, layers
, media
) {
4879 if (!player
.isVideo
) {
4884 loading
= _document2
.default.createElement('div'),
4885 error
= _document2
.default.createElement('div'),
4886 bigPlay
= _document2
.default.createElement('div');
4888 loading
.style
.display
= 'none';
4889 loading
.className
= t
.options
.classPrefix
+ 'overlay ' + t
.options
.classPrefix
+ 'layer';
4890 loading
.innerHTML
= '<div class="' + t
.options
.classPrefix
+ 'overlay-loading">' + ('<span class="' + t
.options
.classPrefix
+ 'overlay-loading-bg-img"></span>') + '</div>';
4891 layers
.appendChild(loading
);
4893 error
.style
.display
= 'none';
4894 error
.className
= t
.options
.classPrefix
+ 'overlay ' + t
.options
.classPrefix
+ 'layer';
4895 error
.innerHTML
= '<div class="' + t
.options
.classPrefix
+ 'overlay-error"></div>';
4896 layers
.appendChild(error
);
4898 bigPlay
.className
= t
.options
.classPrefix
+ 'overlay ' + t
.options
.classPrefix
+ 'layer ' + t
.options
.classPrefix
+ 'overlay-play';
4899 bigPlay
.innerHTML
= '<div class="' + t
.options
.classPrefix
+ 'overlay-button" role="button" tabindex="0" ' + ('aria-label="' + _i18n2
.default.t('mejs.play') + '" aria-pressed="false"></div>');
4900 bigPlay
.addEventListener('click', function () {
4901 if (t
.options
.clickToPlayPause
) {
4903 var button
= t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'overlay-button'),
4904 pressed
= button
.getAttribute('aria-pressed');
4912 button
.setAttribute('aria-pressed', !!pressed
);
4913 t
.getElement(t
.container
).focus();
4917 bigPlay
.addEventListener('keydown', function (e
) {
4918 var keyPressed
= e
.keyCode
|| e
.which
|| 0;
4920 if (keyPressed
=== 13 || _constants
.IS_FIREFOX
&& keyPressed
=== 32) {
4921 var event
= (0, _general
.createEvent
)('click', bigPlay
);
4922 bigPlay
.dispatchEvent(event
);
4927 layers
.appendChild(bigPlay
);
4929 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'))) {
4930 bigPlay
.style
.display
= 'none';
4933 var hasError
= false;
4935 media
.addEventListener('play', function () {
4936 bigPlay
.style
.display
= 'none';
4937 loading
.style
.display
= 'none';
4938 error
.style
.display
= 'none';
4941 media
.addEventListener('playing', function () {
4942 bigPlay
.style
.display
= 'none';
4943 loading
.style
.display
= 'none';
4944 error
.style
.display
= 'none';
4947 media
.addEventListener('seeking', function () {
4948 bigPlay
.style
.display
= 'none';
4949 loading
.style
.display
= '';
4952 media
.addEventListener('seeked', function () {
4953 bigPlay
.style
.display
= t
.paused
&& !_constants
.IS_STOCK_ANDROID
? '' : 'none';
4954 loading
.style
.display
= 'none';
4957 media
.addEventListener('pause', function () {
4958 loading
.style
.display
= 'none';
4959 if (!_constants
.IS_STOCK_ANDROID
&& !hasError
) {
4960 bigPlay
.style
.display
= '';
4964 media
.addEventListener('waiting', function () {
4965 loading
.style
.display
= '';
4969 media
.addEventListener('loadeddata', function () {
4970 loading
.style
.display
= '';
4972 if (_constants
.IS_ANDROID
) {
4973 media
.canplayTimeout
= setTimeout(function () {
4974 if (_document2
.default.createEvent
) {
4975 var evt
= _document2
.default.createEvent('HTMLEvents');
4976 evt
.initEvent('canplay', true, true);
4977 return media
.dispatchEvent(evt
);
4983 media
.addEventListener('canplay', function () {
4984 loading
.style
.display
= 'none';
4986 clearTimeout(media
.canplayTimeout
);
4990 media
.addEventListener('error', function (e
) {
4991 t
._handleError(e
, t
.media
, t
.node
);
4992 loading
.style
.display
= 'none';
4993 bigPlay
.style
.display
= 'none';
4997 media
.addEventListener('loadedmetadata', function () {
4998 if (!t
.controlsEnabled
) {
5003 media
.addEventListener('keydown', function (e
) {
5004 t
.onkeydown(player
, media
, e
);
5009 key
: 'buildkeyboard',
5010 value
: function buildkeyboard(player
, controls
, layers
, media
) {
5014 t
.getElement(t
.container
).addEventListener('keydown', function () {
5015 t
.keyboardAction
= true;
5018 t
.globalKeydownCallback = function (event
) {
5019 var container
= _document2
.default.activeElement
.closest('.' + t
.options
.classPrefix
+ 'container'),
5020 target
= t
.media
.closest('.' + t
.options
.classPrefix
+ 'container');
5021 t
.hasFocus
= !!(container
&& target
&& container
.id
=== target
.id
);
5022 return t
.onkeydown(player
, media
, event
);
5025 t
.globalClickCallback = function (event
) {
5026 t
.hasFocus
= !!event
.target
.closest('.' + t
.options
.classPrefix
+ 'container');
5029 t
.globalBind('keydown', t
.globalKeydownCallback
);
5031 t
.globalBind('click', t
.globalClickCallback
);
5035 value
: function onkeydown(player
, media
, e
) {
5037 if (player
.hasFocus
&& player
.options
.enableKeyboard
) {
5038 for (var i
= 0, total
= player
.options
.keyActions
.length
; i
< total
; i
++) {
5039 var keyAction
= player
.options
.keyActions
[i
];
5041 for (var j
= 0, jl
= keyAction
.keys
.length
; j
< jl
; j
++) {
5042 if (e
.keyCode
=== keyAction
.keys
[j
]) {
5043 keyAction
.action(player
, media
, e
.keyCode
, e
);
5045 e
.stopPropagation();
5056 value
: function play() {
5061 value
: function pause() {
5066 value
: function load() {
5070 key
: 'setCurrentTime',
5071 value
: function setCurrentTime(time
) {
5072 this.proxy
.setCurrentTime(time
);
5075 key
: 'getCurrentTime',
5076 value
: function getCurrentTime() {
5077 return this.proxy
.currentTime
;
5081 value
: function getDuration() {
5082 return this.proxy
.duration
;
5086 value
: function setVolume(volume
) {
5087 this.proxy
.volume
= volume
;
5091 value
: function getVolume() {
5092 return this.proxy
.getVolume();
5096 value
: function setMuted(value
) {
5097 this.proxy
.setMuted(value
);
5101 value
: function setSrc(src
) {
5102 if (!this.controlsEnabled
) {
5103 this.enableControls();
5105 this.proxy
.setSrc(src
);
5109 value
: function getSrc() {
5110 return this.proxy
.getSrc();
5114 value
: function canPlayType(type
) {
5115 return this.proxy
.canPlayType(type
);
5119 value
: function remove() {
5121 rendererName
= t
.media
.rendererName
,
5122 src
= t
.media
.originalNode
.src
;
5124 for (var featureIndex
in t
.options
.features
) {
5125 var feature
= t
.options
.features
[featureIndex
];
5126 if (t
['clean' + feature
]) {
5128 t
['clean' + feature
](t
, t
.getElement(t
.layers
), t
.getElement(t
.controls
), t
.media
);
5130 console
.error('error cleaning ' + feature
, e
);
5135 var nativeWidth
= t
.node
.getAttribute('width'),
5136 nativeHeight
= t
.node
.getAttribute('height');
5139 if (nativeWidth
.indexOf('%') === -1) {
5140 nativeWidth
= nativeWidth
+ 'px';
5143 nativeWidth
= 'auto';
5147 if (nativeHeight
.indexOf('%') === -1) {
5148 nativeHeight
= nativeHeight
+ 'px';
5151 nativeHeight
= 'auto';
5154 t
.node
.style
.width
= nativeWidth
;
5155 t
.node
.style
.height
= nativeHeight
;
5157 t
.setPlayerSize(0, 0);
5161 t
.node
.setAttribute('controls', true);
5162 t
.node
.setAttribute('id', t
.node
.getAttribute('id').replace('_' + rendererName
, '').replace('_from_mejs', ''));
5163 var poster
= t
.getElement(t
.container
).querySelector('.' + t
.options
.classPrefix
+ 'poster>img');
5165 t
.node
.setAttribute('poster', poster
.src
);
5168 delete t
.node
.autoplay
;
5170 if (t
.media
.canPlayType((0, _media
.getTypeFromFile
)(src
)) !== '') {
5171 t
.node
.setAttribute('src', src
);
5174 if (~rendererName
.indexOf('iframe')) {
5175 var layer
= _document2
.default.getElementById(t
.media
.id
+ '-iframe-overlay');
5179 var node
= t
.node
.cloneNode();
5180 node
.style
.display
= '';
5181 t
.getElement(t
.container
).parentNode
.insertBefore(node
, t
.getElement(t
.container
));
5185 for (var i
= 0, total
= t
.mediaFiles
.length
; i
< total
; i
++) {
5186 var source
= _document2
.default.createElement('source');
5187 source
.setAttribute('src', t
.mediaFiles
[i
].src
);
5188 source
.setAttribute('type', t
.mediaFiles
[i
].type
);
5189 node
.appendChild(source
);
5193 var _loop3
= function _loop3(_i4
, _total4
) {
5194 var track
= t
.trackFiles
[_i4
];
5195 var newTrack
= _document2
.default.createElement('track');
5196 newTrack
.kind
= track
.kind
;
5197 newTrack
.label
= track
.label
;
5198 newTrack
.srclang
= track
.srclang
;
5199 newTrack
.src
= track
.src
;
5201 node
.appendChild(newTrack
);
5202 newTrack
.addEventListener('load', function () {
5203 this.mode
= 'showing';
5204 node
.textTracks
[_i4
].mode
= 'showing';
5208 for (var _i4
= 0, _total4
= t
.trackFiles
.length
; _i4
< _total4
; _i4
++) {
5209 _loop3(_i4
, _total4
);
5214 delete t
.mediaFiles
;
5215 delete t
.trackFiles
;
5218 t
.getElement(t
.container
).parentNode
.insertBefore(t
.node
, t
.getElement(t
.container
));
5221 if (typeof t
.media
.renderer
.destroy
=== 'function') {
5222 t
.media
.renderer
.destroy();
5225 delete _mejs2
.default.players
[t
.id
];
5227 if (_typeof(t
.getElement(t
.container
)) === 'object') {
5228 var offscreen
= t
.getElement(t
.container
).parentNode
.querySelector('.' + t
.options
.classPrefix
+ 'offscreen');
5230 t
.getElement(t
.container
).remove();
5232 t
.globalUnbind('resize', t
.globalResizeCallback
);
5233 t
.globalUnbind('keydown', t
.globalKeydownCallback
);
5234 t
.globalUnbind('click', t
.globalClickCallback
);
5236 delete t
.media
.player
;
5240 get: function get() {
5241 return this.proxy
.paused
;
5245 get: function get() {
5246 return this.proxy
.muted
;
5248 set: function set(muted
) {
5249 this.setMuted(muted
);
5253 get: function get() {
5254 return this.proxy
.ended
;
5258 get: function get() {
5259 return this.proxy
.readyState
;
5263 set: function set(time
) {
5264 this.setCurrentTime(time
);
5266 get: function get() {
5267 return this.getCurrentTime();
5271 get: function get() {
5272 return this.getDuration();
5276 set: function set(volume
) {
5277 this.setVolume(volume
);
5279 get: function get() {
5280 return this.getVolume();
5284 set: function set(src
) {
5287 get: function get() {
5288 return this.getSrc();
5292 return MediaElementPlayer
;
5295 _window2
.default.MediaElementPlayer
= MediaElementPlayer
;
5296 _mejs2
.default.MediaElementPlayer
= MediaElementPlayer
;
5298 exports
.default = MediaElementPlayer
;
5300 },{"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
){
5303 Object
.defineProperty(exports
, "__esModule", {
5307 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
; }; }();
5309 var _window
= _dereq_(3);
5311 var _window2
= _interopRequireDefault(_window
);
5313 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
5315 function _classCallCheck(instance
, Constructor
) { if (!(instance
instanceof Constructor
)) { throw new TypeError("Cannot call a class as a function"); } }
5317 var DefaultPlayer = function () {
5318 function DefaultPlayer(player
) {
5319 _classCallCheck(this, DefaultPlayer
);
5321 this.media
= player
.media
;
5322 this.isVideo
= player
.isVideo
;
5323 this.classPrefix
= player
.options
.classPrefix
;
5324 this.createIframeLayer = function () {
5325 return player
.createIframeLayer();
5327 this.setPoster = function (url
) {
5328 return player
.setPoster(url
);
5333 _createClass(DefaultPlayer
, [{
5335 value
: function play() {
5340 value
: function pause() {
5345 value
: function load() {
5355 key
: 'setCurrentTime',
5356 value
: function setCurrentTime(time
) {
5357 this.media
.setCurrentTime(time
);
5360 key
: 'getCurrentTime',
5361 value
: function getCurrentTime() {
5362 return this.media
.currentTime
;
5366 value
: function getDuration() {
5367 return this.media
.getDuration();
5371 value
: function setVolume(volume
) {
5372 this.media
.setVolume(volume
);
5376 value
: function getVolume() {
5377 return this.media
.getVolume();
5381 value
: function setMuted(value
) {
5382 this.media
.setMuted(value
);
5386 value
: function setSrc(src
) {
5388 layer
= document
.getElementById(t
.media
.id
+ '-iframe-overlay');
5394 t
.media
.setSrc(src
);
5395 t
.createIframeLayer();
5396 if (t
.media
.renderer
!== null && typeof t
.media
.renderer
.getPosterUrl
=== 'function') {
5397 t
.setPoster(t
.media
.renderer
.getPosterUrl());
5402 value
: function getSrc() {
5403 return this.media
.getSrc();
5407 value
: function canPlayType(type
) {
5408 return this.media
.canPlayType(type
);
5412 get: function get() {
5413 return this.media
.paused
;
5417 set: function set(muted
) {
5418 this.setMuted(muted
);
5420 get: function get() {
5421 return this.media
.muted
;
5425 get: function get() {
5426 return this.media
.ended
;
5430 get: function get() {
5431 return this.media
.readyState
;
5435 set: function set(time
) {
5436 this.setCurrentTime(time
);
5438 get: function get() {
5439 return this.getCurrentTime();
5443 get: function get() {
5444 return this.getDuration();
5448 set: function set(volume
) {
5449 this.setVolume(volume
);
5451 get: function get() {
5452 return this.getVolume();
5456 set: function set(src
) {
5459 get: function get() {
5460 return this.getSrc();
5464 return DefaultPlayer
;
5467 exports
.default = DefaultPlayer
;
5470 _window2
.default.DefaultPlayer
= DefaultPlayer
;
5472 },{"3":3}],18:[function(_dereq_
,module
,exports
){
5475 var _window
= _dereq_(3);
5477 var _window2
= _interopRequireDefault(_window
);
5479 var _mejs
= _dereq_(7);
5481 var _mejs2
= _interopRequireDefault(_mejs
);
5483 var _player
= _dereq_(16);
5485 var _player2
= _interopRequireDefault(_player
);
5487 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
5489 if (typeof jQuery
!== 'undefined') {
5490 _mejs2
.default.$ = _window2
.default.jQuery
= _window2
.default.$ = jQuery
;
5491 } else if (typeof Zepto
!== 'undefined') {
5492 _mejs2
.default.$ = _window2
.default.Zepto
= _window2
.default.$ = Zepto
;
5493 } else if (typeof ender
!== 'undefined') {
5494 _mejs2
.default.$ = _window2
.default.ender
= _window2
.default.$ = ender
;
5498 if (typeof $ !== 'undefined') {
5499 $.fn
.mediaelementplayer = function (options
) {
5500 if (options
=== false) {
5501 this.each(function () {
5502 var player
= $(this).data('mediaelementplayer');
5506 $(this).removeData('mediaelementplayer');
5509 this.each(function () {
5510 $(this).data('mediaelementplayer', new _player2
.default(this, options
));
5516 $(document
).ready(function () {
5517 $('.' + _mejs2
.default.MepDefaults
.classPrefix
+ 'player').mediaelementplayer();
5520 })(_mejs2
.default.$);
5522 },{"16":16,"3":3,"7":7}],19:[function(_dereq_
,module
,exports
){
5525 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
; };
5527 var _window
= _dereq_(3);
5529 var _window2
= _interopRequireDefault(_window
);
5531 var _mejs
= _dereq_(7);
5533 var _mejs2
= _interopRequireDefault(_mejs
);
5535 var _renderer
= _dereq_(8);
5537 var _general
= _dereq_(27);
5539 var _media
= _dereq_(28);
5541 var _constants
= _dereq_(25);
5543 var _dom
= _dereq_(26);
5545 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
5551 load
: function load(settings
) {
5552 if (typeof dashjs
!== 'undefined') {
5553 NativeDash
.promise
= new Promise(function (resolve
) {
5555 }).then(function () {
5556 NativeDash
._createPlayer(settings
);
5559 settings
.options
.path
= typeof settings
.options
.path
=== 'string' ? settings
.options
.path
: 'https://cdn.dashjs.org/latest/dash.all.min.js';
5561 NativeDash
.promise
= NativeDash
.promise
|| (0, _dom
.loadScript
)(settings
.options
.path
);
5562 NativeDash
.promise
.then(function () {
5563 NativeDash
._createPlayer(settings
);
5567 return NativeDash
.promise
;
5570 _createPlayer
: function _createPlayer(settings
) {
5571 var player
= dashjs
.MediaPlayer().create();
5572 _window2
.default['__ready__' + settings
.id
](player
);
5577 var DashNativeRenderer
= {
5578 name
: 'native_dash',
5580 prefix
: 'native_dash',
5582 path
: 'https://cdn.dashjs.org/latest/dash.all.min.js',
5590 canPlayType
: function canPlayType(type
) {
5591 return _constants
.HAS_MSE
&& ['application/dash+xml'].indexOf(type
.toLowerCase()) > -1;
5594 create
: function create(mediaElement
, options
, mediaFiles
) {
5596 var originalNode
= mediaElement
.originalNode
,
5597 id
= mediaElement
.id
+ '_' + options
.prefix
,
5598 autoplay
= originalNode
.autoplay
,
5599 children
= originalNode
.children
;
5604 originalNode
.removeAttribute('type');
5605 for (var i
= 0, total
= children
.length
; i
< total
; i
++) {
5606 children
[i
].removeAttribute('type');
5609 node
= originalNode
.cloneNode(true);
5610 options
= Object
.assign(options
, mediaElement
.options
);
5612 var props
= _mejs2
.default.html5media
.properties
,
5613 events
= _mejs2
.default.html5media
.events
.concat(['click', 'mouseover', 'mouseout']).filter(function (e
) {
5614 return e
!== 'error';
5616 attachNativeEvents
= function attachNativeEvents(e
) {
5617 var event
= (0, _general
.createEvent
)(e
.type
, mediaElement
);
5618 mediaElement
.dispatchEvent(event
);
5620 assignGettersSetters
= function assignGettersSetters(propName
) {
5621 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
5623 node
['get' + capName
] = function () {
5624 return dashPlayer
!== null ? node
[propName
] : null;
5627 node
['set' + capName
] = function (value
) {
5628 if (_mejs2
.default.html5media
.readOnlyProperties
.indexOf(propName
) === -1) {
5629 if (propName
=== 'src') {
5630 var source
= (typeof value
=== 'undefined' ? 'undefined' : _typeof(value
)) === 'object' && value
.src
? value
.src
: value
;
5631 node
[propName
] = source
;
5632 if (dashPlayer
!== null) {
5634 for (var _i
= 0, _total
= events
.length
; _i
< _total
; _i
++) {
5635 node
.removeEventListener(events
[_i
], attachNativeEvents
);
5637 dashPlayer
= NativeDash
._createPlayer({
5638 options
: options
.dash
,
5642 if (value
&& (typeof value
=== 'undefined' ? 'undefined' : _typeof(value
)) === 'object' && _typeof(value
.drm
) === 'object') {
5643 dashPlayer
.setProtectionData(value
.drm
);
5644 if ((0, _general
.isString
)(options
.dash
.robustnessLevel
) && options
.dash
.robustnessLevel
) {
5645 dashPlayer
.getProtectionController().setRobustnessLevel(options
.dash
.robustnessLevel
);
5648 dashPlayer
.attachSource(source
);
5654 node
[propName
] = value
;
5660 for (var _i2
= 0, _total2
= props
.length
; _i2
< _total2
; _i2
++) {
5661 assignGettersSetters(props
[_i2
]);
5664 _window2
.default['__ready__' + id
] = function (_dashPlayer
) {
5665 mediaElement
.dashPlayer
= dashPlayer
= _dashPlayer
;
5667 var dashEvents
= dashjs
.MediaPlayer
.events
,
5668 assignEvents
= function assignEvents(eventName
) {
5669 if (eventName
=== 'loadedmetadata') {
5670 dashPlayer
.getDebug().setLogToBrowserConsole(options
.dash
.debug
);
5671 dashPlayer
.initialize();
5672 dashPlayer
.setScheduleWhilePaused(false);
5673 dashPlayer
.setFastSwitchEnabled(true);
5674 dashPlayer
.attachView(node
);
5675 dashPlayer
.setAutoPlay(false);
5677 if (_typeof(options
.dash
.drm
) === 'object' && !_mejs2
.default.Utils
.isObjectEmpty(options
.dash
.drm
)) {
5678 dashPlayer
.setProtectionData(options
.dash
.drm
);
5679 if ((0, _general
.isString
)(options
.dash
.robustnessLevel
) && options
.dash
.robustnessLevel
) {
5680 dashPlayer
.getProtectionController().setRobustnessLevel(options
.dash
.robustnessLevel
);
5683 dashPlayer
.attachSource(node
.getSrc());
5686 node
.addEventListener(eventName
, attachNativeEvents
);
5689 for (var _i3
= 0, _total3
= events
.length
; _i3
< _total3
; _i3
++) {
5690 assignEvents(events
[_i3
]);
5693 var assignMdashEvents
= function assignMdashEvents(e
) {
5694 if (e
.type
.toLowerCase() === 'error') {
5695 mediaElement
.generateError(e
.message
, node
.src
);
5698 var _event
= (0, _general
.createEvent
)(e
.type
, mediaElement
);
5700 mediaElement
.dispatchEvent(_event
);
5704 for (var eventType
in dashEvents
) {
5705 if (dashEvents
.hasOwnProperty(eventType
)) {
5706 dashPlayer
.on(dashEvents
[eventType
], function (e
) {
5707 return assignMdashEvents(e
);
5713 if (mediaFiles
&& mediaFiles
.length
> 0) {
5714 for (var _i4
= 0, _total4
= mediaFiles
.length
; _i4
< _total4
; _i4
++) {
5715 if (_renderer
.renderer
.renderers
[options
.prefix
].canPlayType(mediaFiles
[_i4
].type
)) {
5716 node
.setAttribute('src', mediaFiles
[_i4
].src
);
5717 if (typeof mediaFiles
[_i4
].drm
!== 'undefined') {
5718 options
.dash
.drm
= mediaFiles
[_i4
].drm
;
5725 node
.setAttribute('id', id
);
5727 originalNode
.parentNode
.insertBefore(node
, originalNode
);
5728 originalNode
.autoplay
= false;
5729 originalNode
.style
.display
= 'none';
5731 node
.setSize = function (width
, height
) {
5732 node
.style
.width
= width
+ 'px';
5733 node
.style
.height
= height
+ 'px';
5737 node
.hide = function () {
5739 node
.style
.display
= 'none';
5743 node
.show = function () {
5744 node
.style
.display
= '';
5748 node
.destroy = function () {
5749 if (dashPlayer
!== null) {
5754 var event
= (0, _general
.createEvent
)('rendererready', node
);
5755 mediaElement
.dispatchEvent(event
);
5757 mediaElement
.promises
.push(NativeDash
.load({
5758 options
: options
.dash
,
5766 _media
.typeChecks
.push(function (url
) {
5767 return ~url
.toLowerCase().indexOf('.mpd') ? 'application/dash+xml' : null;
5770 _renderer
.renderer
.add(DashNativeRenderer
);
5772 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],20:[function(_dereq_
,module
,exports
){
5775 Object
.defineProperty(exports
, "__esModule", {
5778 exports
.PluginDetector
= undefined;
5780 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
; };
5782 var _window
= _dereq_(3);
5784 var _window2
= _interopRequireDefault(_window
);
5786 var _document
= _dereq_(2);
5788 var _document2
= _interopRequireDefault(_document
);
5790 var _mejs
= _dereq_(7);
5792 var _mejs2
= _interopRequireDefault(_mejs
);
5794 var _i18n
= _dereq_(5);
5796 var _i18n2
= _interopRequireDefault(_i18n
);
5798 var _renderer
= _dereq_(8);
5800 var _general
= _dereq_(27);
5802 var _constants
= _dereq_(25);
5804 var _media
= _dereq_(28);
5806 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
5808 var PluginDetector
= exports
.PluginDetector
= {
5811 hasPluginVersion
: function hasPluginVersion(plugin
, v
) {
5812 var pv
= PluginDetector
.plugins
[plugin
];
5815 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];
5818 addPlugin
: function addPlugin(p
, pluginName
, mimeType
, activeX
, axDetect
) {
5819 PluginDetector
.plugins
[p
] = PluginDetector
.detectPlugin(pluginName
, mimeType
, activeX
, axDetect
);
5822 detectPlugin
: function detectPlugin(pluginName
, mimeType
, activeX
, axDetect
) {
5824 var version
= [0, 0, 0],
5825 description
= void 0,
5828 if (_constants
.NAV
.plugins
!== null && _constants
.NAV
.plugins
!== undefined && _typeof(_constants
.NAV
.plugins
[pluginName
]) === 'object') {
5829 description
= _constants
.NAV
.plugins
[pluginName
].description
;
5830 if (description
&& !(typeof _constants
.NAV
.mimeTypes
!== 'undefined' && _constants
.NAV
.mimeTypes
[mimeType
] && !_constants
.NAV
.mimeTypes
[mimeType
].enabledPlugin
)) {
5831 version
= description
.replace(pluginName
, '').replace(/^\s+/, '').replace(/\sr/gi, '.').split('.');
5832 for (var i
= 0, total
= version
.length
; i
< total
; i
++) {
5833 version
[i
] = parseInt(version
[i
].match(/\d+/), 10);
5836 } else if (_window2
.default.ActiveXObject
!== undefined) {
5838 ax
= new ActiveXObject(activeX
);
5840 version
= axDetect(ax
);
5850 PluginDetector
.addPlugin('flash', 'Shockwave Flash', 'application/x-shockwave-flash', 'ShockwaveFlash.ShockwaveFlash', function (ax
) {
5852 d
= ax
.GetVariable("$version");
5855 d
= d
.split(" ")[1].split(",");
5856 version
= [parseInt(d
[0], 10), parseInt(d
[1], 10), parseInt(d
[2], 10)];
5861 var FlashMediaElementRenderer
= {
5862 create
: function create(mediaElement
, options
, mediaFiles
) {
5865 var isActive
= false;
5867 flash
.options
= options
;
5868 flash
.id
= mediaElement
.id
+ '_' + flash
.options
.prefix
;
5869 flash
.mediaElement
= mediaElement
;
5870 flash
.flashState
= {};
5871 flash
.flashApi
= null;
5872 flash
.flashApiStack
= [];
5874 var props
= _mejs2
.default.html5media
.properties
,
5875 assignGettersSetters
= function assignGettersSetters(propName
) {
5876 flash
.flashState
[propName
] = null;
5878 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
5880 flash
['get' + capName
] = function () {
5881 if (flash
.flashApi
!== null) {
5882 if (typeof flash
.flashApi
['get_' + propName
] === 'function') {
5883 var value
= flash
.flashApi
['get_' + propName
]();
5885 if (propName
=== 'buffered') {
5887 start
: function start() {
5890 end
: function end() {
5905 flash
['set' + capName
] = function (value
) {
5906 if (propName
=== 'src') {
5907 value
= (0, _media
.absolutizeUrl
)(value
);
5910 if (flash
.flashApi
!== null && flash
.flashApi
['set_' + propName
] !== undefined) {
5912 flash
.flashApi
['set_' + propName
](value
);
5917 flash
.flashApiStack
.push({
5926 for (var i
= 0, total
= props
.length
; i
< total
; i
++) {
5927 assignGettersSetters(props
[i
]);
5930 var methods
= _mejs2
.default.html5media
.methods
,
5931 assignMethods
= function assignMethods(methodName
) {
5932 flash
[methodName
] = function () {
5934 if (flash
.flashApi
!== null) {
5935 if (flash
.flashApi
['fire_' + methodName
]) {
5937 flash
.flashApi
['fire_' + methodName
]();
5945 flash
.flashApiStack
.push({
5947 methodName
: methodName
5953 methods
.push('stop');
5954 for (var _i
= 0, _total
= methods
.length
; _i
< _total
; _i
++) {
5955 assignMethods(methods
[_i
]);
5958 var initEvents
= ['rendererready'];
5960 for (var _i2
= 0, _total2
= initEvents
.length
; _i2
< _total2
; _i2
++) {
5961 var event
= (0, _general
.createEvent
)(initEvents
[_i2
], flash
);
5962 mediaElement
.dispatchEvent(event
);
5965 _window2
.default['__ready__' + flash
.id
] = function () {
5967 flash
.flashReady
= true;
5968 flash
.flashApi
= _document2
.default.getElementById('__' + flash
.id
);
5970 if (flash
.flashApiStack
.length
) {
5971 for (var _i3
= 0, _total3
= flash
.flashApiStack
.length
; _i3
< _total3
; _i3
++) {
5972 var stackItem
= flash
.flashApiStack
[_i3
];
5974 if (stackItem
.type
=== 'set') {
5975 var propName
= stackItem
.propName
,
5976 capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
5978 flash
['set' + capName
](stackItem
.value
);
5979 } else if (stackItem
.type
=== 'call') {
5980 flash
[stackItem
.methodName
]();
5986 _window2
.default['__event__' + flash
.id
] = function (eventName
, message
) {
5987 var event
= (0, _general
.createEvent
)(eventName
, flash
);
5990 event
.data
= JSON
.parse(message
);
5991 event
.details
.data
= JSON
.parse(message
);
5993 event
.message
= message
;
5997 flash
.mediaElement
.dispatchEvent(event
);
6000 flash
.flashWrapper
= _document2
.default.createElement('div');
6002 if (['always', 'sameDomain'].indexOf(flash
.options
.shimScriptAccess
) === -1) {
6003 flash
.options
.shimScriptAccess
= 'sameDomain';
6006 var autoplay
= mediaElement
.originalNode
.autoplay
,
6007 flashVars
= ['uid=' + flash
.id
, 'autoplay=' + autoplay
, 'allowScriptAccess=' + flash
.options
.shimScriptAccess
, 'preload=' + (mediaElement
.originalNode
.getAttribute('preload') || '')],
6008 isVideo
= mediaElement
.originalNode
!== null && mediaElement
.originalNode
.tagName
.toLowerCase() === 'video',
6009 flashHeight
= isVideo
? mediaElement
.originalNode
.height
: 1,
6010 flashWidth
= isVideo
? mediaElement
.originalNode
.width
: 1;
6012 if (mediaElement
.originalNode
.getAttribute('src')) {
6013 flashVars
.push('src=' + mediaElement
.originalNode
.getAttribute('src'));
6016 if (flash
.options
.enablePseudoStreaming
=== true) {
6017 flashVars
.push('pseudostreamstart=' + flash
.options
.pseudoStreamingStartQueryParam
);
6018 flashVars
.push('pseudostreamtype=' + flash
.options
.pseudoStreamingType
);
6021 if (flash
.options
.streamDelimiter
) {
6022 flashVars
.push('streamdelimiter=' + encodeURIComponent(flash
.options
.streamDelimiter
));
6025 if (flash
.options
.proxyType
) {
6026 flashVars
.push('proxytype=' + flash
.options
.proxyType
);
6029 mediaElement
.appendChild(flash
.flashWrapper
);
6030 mediaElement
.originalNode
.style
.display
= 'none';
6034 if (_constants
.IS_IE
|| _constants
.IS_EDGE
) {
6035 var specialIEContainer
= _document2
.default.createElement('div');
6036 flash
.flashWrapper
.appendChild(specialIEContainer
);
6038 if (_constants
.IS_EDGE
) {
6039 settings
= ['type="application/x-shockwave-flash"', 'data="' + flash
.options
.pluginPath
+ flash
.options
.filename
+ '"', 'id="__' + flash
.id
+ '"', 'width="' + flashWidth
+ '"', 'height="' + flashHeight
+ '\'"'];
6041 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
+ '"'];
6045 settings
.push('style="clip: rect(0 0 0 0); position: absolute;"');
6048 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>';
6051 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('&') + '"'];
6054 settings
.push('width="' + flashWidth
+ '"');
6055 settings
.push('height="' + flashHeight
+ '"');
6057 settings
.push('style="position: fixed; left: -9999em; top: -9999em;"');
6060 flash
.flashWrapper
.innerHTML
= '<embed ' + settings
.join(' ') + '>';
6063 flash
.flashNode
= flash
.flashWrapper
.lastChild
;
6065 flash
.hide = function () {
6068 flash
.flashNode
.style
.display
= 'none';
6071 flash
.show = function () {
6074 flash
.flashNode
.style
.display
= '';
6077 flash
.setSize = function (width
, height
) {
6078 flash
.flashNode
.style
.width
= width
+ 'px';
6079 flash
.flashNode
.style
.height
= height
+ 'px';
6081 if (flash
.flashApi
!== null && typeof flash
.flashApi
.fire_setSize
=== 'function') {
6082 flash
.flashApi
.fire_setSize(width
, height
);
6086 flash
.destroy = function () {
6087 flash
.flashNode
.remove();
6090 if (mediaFiles
&& mediaFiles
.length
> 0) {
6091 for (var _i4
= 0, _total4
= mediaFiles
.length
; _i4
< _total4
; _i4
++) {
6092 if (_renderer
.renderer
.renderers
[options
.prefix
].canPlayType(mediaFiles
[_i4
].type
)) {
6093 flash
.setSrc(mediaFiles
[_i4
].src
);
6103 var hasFlash
= PluginDetector
.hasPluginVersion('flash', [10, 0, 0]);
6106 _media
.typeChecks
.push(function (url
) {
6107 url
= url
.toLowerCase();
6109 if (url
.startsWith('rtmp')) {
6110 if (~url
.indexOf('.mp3')) {
6111 return 'audio/rtmp';
6113 return 'video/rtmp';
6115 } else if (/\.og(a|g)/i.test(url
)) {
6117 } else if (~url
.indexOf('.m3u8')) {
6118 return 'application/x-mpegURL';
6119 } else if (~url
.indexOf('.mpd')) {
6120 return 'application/dash+xml';
6121 } else if (~url
.indexOf('.flv')) {
6128 var FlashMediaElementVideoRenderer
= {
6129 name
: 'flash_video',
6131 prefix
: 'flash_video',
6132 filename
: 'mediaelement-flash-video.swf',
6133 enablePseudoStreaming
: false,
6135 pseudoStreamingStartQueryParam
: 'start',
6137 pseudoStreamingType
: 'byte',
6144 canPlayType
: function canPlayType(type
) {
6145 return ~['video/mp4', 'video/rtmp', 'audio/rtmp', 'rtmp/mp4', 'audio/mp4', 'video/flv', 'video/x-flv'].indexOf(type
.toLowerCase());
6148 create
: FlashMediaElementRenderer
.create
6151 _renderer
.renderer
.add(FlashMediaElementVideoRenderer
);
6153 var FlashMediaElementHlsVideoRenderer
= {
6156 prefix
: 'flash_hls',
6157 filename
: 'mediaelement-flash-video-hls.swf'
6160 canPlayType
: function canPlayType(type
) {
6161 return ~['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type
.toLowerCase());
6164 create
: FlashMediaElementRenderer
.create
6166 _renderer
.renderer
.add(FlashMediaElementHlsVideoRenderer
);
6168 var FlashMediaElementMdashVideoRenderer
= {
6171 prefix
: 'flash_dash',
6172 filename
: 'mediaelement-flash-video-mdash.swf'
6175 canPlayType
: function canPlayType(type
) {
6176 return ~['application/dash+xml'].indexOf(type
.toLowerCase());
6179 create
: FlashMediaElementRenderer
.create
6181 _renderer
.renderer
.add(FlashMediaElementMdashVideoRenderer
);
6183 var FlashMediaElementAudioRenderer
= {
6184 name
: 'flash_audio',
6186 prefix
: 'flash_audio',
6187 filename
: 'mediaelement-flash-audio.swf'
6190 canPlayType
: function canPlayType(type
) {
6191 return ~['audio/mp3'].indexOf(type
.toLowerCase());
6194 create
: FlashMediaElementRenderer
.create
6196 _renderer
.renderer
.add(FlashMediaElementAudioRenderer
);
6198 var FlashMediaElementAudioOggRenderer
= {
6199 name
: 'flash_audio_ogg',
6201 prefix
: 'flash_audio_ogg',
6202 filename
: 'mediaelement-flash-audio-ogg.swf'
6205 canPlayType
: function canPlayType(type
) {
6206 return ~['audio/ogg', 'audio/oga', 'audio/ogv'].indexOf(type
.toLowerCase());
6209 create
: FlashMediaElementRenderer
.create
6211 _renderer
.renderer
.add(FlashMediaElementAudioOggRenderer
);
6214 },{"2":2,"25":25,"27":27,"28":28,"3":3,"5":5,"7":7,"8":8}],21:[function(_dereq_
,module
,exports
){
6217 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
; };
6219 var _window
= _dereq_(3);
6221 var _window2
= _interopRequireDefault(_window
);
6223 var _mejs
= _dereq_(7);
6225 var _mejs2
= _interopRequireDefault(_mejs
);
6227 var _renderer
= _dereq_(8);
6229 var _general
= _dereq_(27);
6231 var _constants
= _dereq_(25);
6233 var _media
= _dereq_(28);
6235 var _dom
= _dereq_(26);
6237 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
6243 load
: function load(settings
) {
6244 if (typeof flvjs
!== 'undefined') {
6245 NativeFlv
.promise
= new Promise(function (resolve
) {
6247 }).then(function () {
6248 NativeFlv
._createPlayer(settings
);
6251 settings
.options
.path
= typeof settings
.options
.path
=== 'string' ? settings
.options
.path
: 'https://cdn.jsdelivr.net/npm/flv.js@latest';
6253 NativeFlv
.promise
= NativeFlv
.promise
|| (0, _dom
.loadScript
)(settings
.options
.path
);
6254 NativeFlv
.promise
.then(function () {
6255 NativeFlv
._createPlayer(settings
);
6259 return NativeFlv
.promise
;
6262 _createPlayer
: function _createPlayer(settings
) {
6263 flvjs
.LoggingControl
.enableDebug
= settings
.options
.debug
;
6264 flvjs
.LoggingControl
.enableVerbose
= settings
.options
.debug
;
6265 var player
= flvjs
.createPlayer(settings
.options
, settings
.configs
);
6266 _window2
.default['__ready__' + settings
.id
](player
);
6271 var FlvNativeRenderer
= {
6274 prefix
: 'native_flv',
6276 path
: 'https://cdn.jsdelivr.net/npm/flv.js@latest',
6283 canPlayType
: function canPlayType(type
) {
6284 return _constants
.HAS_MSE
&& ['video/x-flv', 'video/flv'].indexOf(type
.toLowerCase()) > -1;
6287 create
: function create(mediaElement
, options
, mediaFiles
) {
6289 var originalNode
= mediaElement
.originalNode
,
6290 id
= mediaElement
.id
+ '_' + options
.prefix
;
6295 node
= originalNode
.cloneNode(true);
6296 options
= Object
.assign(options
, mediaElement
.options
);
6298 var props
= _mejs2
.default.html5media
.properties
,
6299 events
= _mejs2
.default.html5media
.events
.concat(['click', 'mouseover', 'mouseout']).filter(function (e
) {
6300 return e
!== 'error';
6302 attachNativeEvents
= function attachNativeEvents(e
) {
6303 var event
= (0, _general
.createEvent
)(e
.type
, mediaElement
);
6304 mediaElement
.dispatchEvent(event
);
6306 assignGettersSetters
= function assignGettersSetters(propName
) {
6307 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
6309 node
['get' + capName
] = function () {
6310 return flvPlayer
!== null ? node
[propName
] : null;
6313 node
['set' + capName
] = function (value
) {
6314 if (_mejs2
.default.html5media
.readOnlyProperties
.indexOf(propName
) === -1) {
6315 if (propName
=== 'src') {
6316 node
[propName
] = (typeof value
=== 'undefined' ? 'undefined' : _typeof(value
)) === 'object' && value
.src
? value
.src
: value
;
6317 if (flvPlayer
!== null) {
6318 var _flvOptions
= {};
6319 _flvOptions
.type
= 'flv';
6320 _flvOptions
.url
= value
;
6321 _flvOptions
.cors
= options
.flv
.cors
;
6322 _flvOptions
.debug
= options
.flv
.debug
;
6323 _flvOptions
.path
= options
.flv
.path
;
6324 var _flvConfigs
= options
.flv
.configs
;
6326 flvPlayer
.destroy();
6327 for (var i
= 0, total
= events
.length
; i
< total
; i
++) {
6328 node
.removeEventListener(events
[i
], attachNativeEvents
);
6330 flvPlayer
= NativeFlv
._createPlayer({
6331 options
: _flvOptions
,
6332 configs
: _flvConfigs
,
6335 flvPlayer
.attachMediaElement(node
);
6339 node
[propName
] = value
;
6345 for (var i
= 0, total
= props
.length
; i
< total
; i
++) {
6346 assignGettersSetters(props
[i
]);
6349 _window2
.default['__ready__' + id
] = function (_flvPlayer
) {
6350 mediaElement
.flvPlayer
= flvPlayer
= _flvPlayer
;
6352 var flvEvents
= flvjs
.Events
,
6353 assignEvents
= function assignEvents(eventName
) {
6354 if (eventName
=== 'loadedmetadata') {
6356 flvPlayer
.detachMediaElement();
6357 flvPlayer
.attachMediaElement(node
);
6361 node
.addEventListener(eventName
, attachNativeEvents
);
6364 for (var _i
= 0, _total
= events
.length
; _i
< _total
; _i
++) {
6365 assignEvents(events
[_i
]);
6368 var assignFlvEvents
= function assignFlvEvents(name
, data
) {
6369 if (name
=== 'error') {
6370 var message
= data
[0] + ': ' + data
[1] + ' ' + data
[2].msg
;
6371 mediaElement
.generateError(message
, node
.src
);
6373 var _event
= (0, _general
.createEvent
)(name
, mediaElement
);
6375 mediaElement
.dispatchEvent(_event
);
6379 var _loop
= function _loop(eventType
) {
6380 if (flvEvents
.hasOwnProperty(eventType
)) {
6381 flvPlayer
.on(flvEvents
[eventType
], function () {
6382 for (var _len
= arguments
.length
, args
= Array(_len
), _key
= 0; _key
< _len
; _key
++) {
6383 args
[_key
] = arguments
[_key
];
6386 return assignFlvEvents(flvEvents
[eventType
], args
);
6391 for (var eventType
in flvEvents
) {
6396 if (mediaFiles
&& mediaFiles
.length
> 0) {
6397 for (var _i2
= 0, _total2
= mediaFiles
.length
; _i2
< _total2
; _i2
++) {
6398 if (_renderer
.renderer
.renderers
[options
.prefix
].canPlayType(mediaFiles
[_i2
].type
)) {
6399 node
.setAttribute('src', mediaFiles
[_i2
].src
);
6405 node
.setAttribute('id', id
);
6407 originalNode
.parentNode
.insertBefore(node
, originalNode
);
6408 originalNode
.autoplay
= false;
6409 originalNode
.style
.display
= 'none';
6411 var flvOptions
= {};
6412 flvOptions
.type
= 'flv';
6413 flvOptions
.url
= node
.src
;
6414 flvOptions
.cors
= options
.flv
.cors
;
6415 flvOptions
.debug
= options
.flv
.debug
;
6416 flvOptions
.path
= options
.flv
.path
;
6417 var flvConfigs
= options
.flv
.configs
;
6419 node
.setSize = function (width
, height
) {
6420 node
.style
.width
= width
+ 'px';
6421 node
.style
.height
= height
+ 'px';
6425 node
.hide = function () {
6426 if (flvPlayer
!== null) {
6429 node
.style
.display
= 'none';
6433 node
.show = function () {
6434 node
.style
.display
= '';
6438 node
.destroy = function () {
6439 if (flvPlayer
!== null) {
6440 flvPlayer
.destroy();
6444 var event
= (0, _general
.createEvent
)('rendererready', node
);
6445 mediaElement
.dispatchEvent(event
);
6447 mediaElement
.promises
.push(NativeFlv
.load({
6448 options
: flvOptions
,
6449 configs
: flvConfigs
,
6457 _media
.typeChecks
.push(function (url
) {
6458 return ~url
.toLowerCase().indexOf('.flv') ? 'video/flv' : null;
6461 _renderer
.renderer
.add(FlvNativeRenderer
);
6463 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],22:[function(_dereq_
,module
,exports
){
6466 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
; };
6468 var _window
= _dereq_(3);
6470 var _window2
= _interopRequireDefault(_window
);
6472 var _mejs
= _dereq_(7);
6474 var _mejs2
= _interopRequireDefault(_mejs
);
6476 var _renderer
= _dereq_(8);
6478 var _general
= _dereq_(27);
6480 var _constants
= _dereq_(25);
6482 var _media
= _dereq_(28);
6484 var _dom
= _dereq_(26);
6486 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
6492 load
: function load(settings
) {
6493 if (typeof Hls
!== 'undefined') {
6494 NativeHls
.promise
= new Promise(function (resolve
) {
6496 }).then(function () {
6497 NativeHls
._createPlayer(settings
);
6500 settings
.options
.path
= typeof settings
.options
.path
=== 'string' ? settings
.options
.path
: 'https://cdn.jsdelivr.net/npm/hls.js@latest';
6502 NativeHls
.promise
= NativeHls
.promise
|| (0, _dom
.loadScript
)(settings
.options
.path
);
6503 NativeHls
.promise
.then(function () {
6504 NativeHls
._createPlayer(settings
);
6508 return NativeHls
.promise
;
6511 _createPlayer
: function _createPlayer(settings
) {
6512 var player
= new Hls(settings
.options
);
6513 _window2
.default['__ready__' + settings
.id
](player
);
6518 var HlsNativeRenderer
= {
6521 prefix
: 'native_hls',
6523 path
: 'https://cdn.jsdelivr.net/npm/hls.js@latest',
6525 autoStartLoad
: false,
6530 canPlayType
: function canPlayType(type
) {
6531 return _constants
.HAS_MSE
&& ['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type
.toLowerCase()) > -1;
6534 create
: function create(mediaElement
, options
, mediaFiles
) {
6536 var originalNode
= mediaElement
.originalNode
,
6537 id
= mediaElement
.id
+ '_' + options
.prefix
,
6538 preload
= originalNode
.getAttribute('preload'),
6539 autoplay
= originalNode
.autoplay
;
6541 var hlsPlayer
= null,
6544 total
= mediaFiles
.length
;
6546 node
= originalNode
.cloneNode(true);
6547 options
= Object
.assign(options
, mediaElement
.options
);
6548 options
.hls
.autoStartLoad
= preload
&& preload
!== 'none' || autoplay
;
6550 var props
= _mejs2
.default.html5media
.properties
,
6551 events
= _mejs2
.default.html5media
.events
.concat(['click', 'mouseover', 'mouseout']).filter(function (e
) {
6552 return e
!== 'error';
6554 attachNativeEvents
= function attachNativeEvents(e
) {
6555 var event
= (0, _general
.createEvent
)(e
.type
, mediaElement
);
6556 mediaElement
.dispatchEvent(event
);
6558 assignGettersSetters
= function assignGettersSetters(propName
) {
6559 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
6561 node
['get' + capName
] = function () {
6562 return hlsPlayer
!== null ? node
[propName
] : null;
6565 node
['set' + capName
] = function (value
) {
6566 if (_mejs2
.default.html5media
.readOnlyProperties
.indexOf(propName
) === -1) {
6567 if (propName
=== 'src') {
6568 node
[propName
] = (typeof value
=== 'undefined' ? 'undefined' : _typeof(value
)) === 'object' && value
.src
? value
.src
: value
;
6569 if (hlsPlayer
!== null) {
6570 hlsPlayer
.destroy();
6571 for (var i
= 0, _total
= events
.length
; i
< _total
; i
++) {
6572 node
.removeEventListener(events
[i
], attachNativeEvents
);
6574 hlsPlayer
= NativeHls
._createPlayer({
6575 options
: options
.hls
,
6578 hlsPlayer
.loadSource(value
);
6579 hlsPlayer
.attachMedia(node
);
6582 node
[propName
] = value
;
6588 for (var i
= 0, _total2
= props
.length
; i
< _total2
; i
++) {
6589 assignGettersSetters(props
[i
]);
6592 _window2
.default['__ready__' + id
] = function (_hlsPlayer
) {
6593 mediaElement
.hlsPlayer
= hlsPlayer
= _hlsPlayer
;
6594 var hlsEvents
= Hls
.Events
,
6595 assignEvents
= function assignEvents(eventName
) {
6596 if (eventName
=== 'loadedmetadata') {
6597 var url
= mediaElement
.originalNode
.src
;
6598 hlsPlayer
.detachMedia();
6599 hlsPlayer
.loadSource(url
);
6600 hlsPlayer
.attachMedia(node
);
6603 node
.addEventListener(eventName
, attachNativeEvents
);
6606 for (var _i
= 0, _total3
= events
.length
; _i
< _total3
; _i
++) {
6607 assignEvents(events
[_i
]);
6610 var recoverDecodingErrorDate
= void 0,
6611 recoverSwapAudioCodecDate
= void 0;
6612 var assignHlsEvents
= function assignHlsEvents(name
, data
) {
6613 if (name
=== 'hlsError') {
6618 switch (data
.type
) {
6620 var now
= new Date().getTime();
6621 if (!recoverDecodingErrorDate
|| now
- recoverDecodingErrorDate
> 3000) {
6622 recoverDecodingErrorDate
= new Date().getTime();
6623 hlsPlayer
.recoverMediaError();
6624 } else if (!recoverSwapAudioCodecDate
|| now
- recoverSwapAudioCodecDate
> 3000) {
6625 recoverSwapAudioCodecDate
= new Date().getTime();
6626 console
.warn('Attempting to swap Audio Codec and recover from media error');
6627 hlsPlayer
.swapAudioCodec();
6628 hlsPlayer
.recoverMediaError();
6630 var message
= 'Cannot recover, last media error recovery failed';
6631 mediaElement
.generateError(message
, node
.src
);
6632 console
.error(message
);
6635 case 'networkError':
6636 if (data
.details
=== 'manifestLoadError') {
6637 if (index
< total
&& mediaFiles
[index
+ 1] !== undefined) {
6638 node
.setSrc(mediaFiles
[index
++].src
);
6642 var _message
= 'Network error';
6643 mediaElement
.generateError(_message
, mediaFiles
);
6644 console
.error(_message
);
6647 var _message2
= 'Network error';
6648 mediaElement
.generateError(_message2
, mediaFiles
);
6649 console
.error(_message2
);
6653 hlsPlayer
.destroy();
6658 var _event
= (0, _general
.createEvent
)(name
, mediaElement
);
6660 mediaElement
.dispatchEvent(_event
);
6664 var _loop
= function _loop(eventType
) {
6665 if (hlsEvents
.hasOwnProperty(eventType
)) {
6666 hlsPlayer
.on(hlsEvents
[eventType
], function () {
6667 for (var _len
= arguments
.length
, args
= Array(_len
), _key
= 0; _key
< _len
; _key
++) {
6668 args
[_key
] = arguments
[_key
];
6671 return assignHlsEvents(hlsEvents
[eventType
], args
);
6676 for (var eventType
in hlsEvents
) {
6682 for (; index
< total
; index
++) {
6683 if (_renderer
.renderer
.renderers
[options
.prefix
].canPlayType(mediaFiles
[index
].type
)) {
6684 node
.setAttribute('src', mediaFiles
[index
].src
);
6690 if (preload
!== 'auto' && !autoplay
) {
6691 node
.addEventListener('play', function () {
6692 if (hlsPlayer
!== null) {
6693 hlsPlayer
.startLoad();
6697 node
.addEventListener('pause', function () {
6698 if (hlsPlayer
!== null) {
6699 hlsPlayer
.stopLoad();
6704 node
.setAttribute('id', id
);
6706 originalNode
.parentNode
.insertBefore(node
, originalNode
);
6707 originalNode
.autoplay
= false;
6708 originalNode
.style
.display
= 'none';
6710 node
.setSize = function (width
, height
) {
6711 node
.style
.width
= width
+ 'px';
6712 node
.style
.height
= height
+ 'px';
6716 node
.hide = function () {
6718 node
.style
.display
= 'none';
6722 node
.show = function () {
6723 node
.style
.display
= '';
6727 node
.destroy = function () {
6728 if (hlsPlayer
!== null) {
6729 hlsPlayer
.stopLoad();
6730 hlsPlayer
.destroy();
6734 var event
= (0, _general
.createEvent
)('rendererready', node
);
6735 mediaElement
.dispatchEvent(event
);
6737 mediaElement
.promises
.push(NativeHls
.load({
6738 options
: options
.hls
,
6746 _media
.typeChecks
.push(function (url
) {
6747 return ~url
.toLowerCase().indexOf('.m3u8') ? 'application/x-mpegURL' : null;
6750 _renderer
.renderer
.add(HlsNativeRenderer
);
6752 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],23:[function(_dereq_
,module
,exports
){
6755 var _window
= _dereq_(3);
6757 var _window2
= _interopRequireDefault(_window
);
6759 var _document
= _dereq_(2);
6761 var _document2
= _interopRequireDefault(_document
);
6763 var _mejs
= _dereq_(7);
6765 var _mejs2
= _interopRequireDefault(_mejs
);
6767 var _renderer
= _dereq_(8);
6769 var _general
= _dereq_(27);
6771 var _constants
= _dereq_(25);
6773 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
6775 var HtmlMediaElement
= {
6781 canPlayType
: function canPlayType(type
) {
6783 var mediaElement
= _document2
.default.createElement('video');
6785 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
) {
6787 } else if (mediaElement
.canPlayType
) {
6788 return mediaElement
.canPlayType(type
.toLowerCase()).replace(/no/, '');
6794 create
: function create(mediaElement
, options
, mediaFiles
) {
6796 var id
= mediaElement
.id
+ '_' + options
.prefix
;
6797 var isActive
= false;
6801 if (mediaElement
.originalNode
=== undefined || mediaElement
.originalNode
=== null) {
6802 node
= _document2
.default.createElement('audio');
6803 mediaElement
.appendChild(node
);
6805 node
= mediaElement
.originalNode
;
6808 node
.setAttribute('id', id
);
6810 var props
= _mejs2
.default.html5media
.properties
,
6811 assignGettersSetters
= function assignGettersSetters(propName
) {
6812 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
6814 node
['get' + capName
] = function () {
6815 return node
[propName
];
6818 node
['set' + capName
] = function (value
) {
6819 if (_mejs2
.default.html5media
.readOnlyProperties
.indexOf(propName
) === -1) {
6820 node
[propName
] = value
;
6825 for (var i
= 0, _total
= props
.length
; i
< _total
; i
++) {
6826 assignGettersSetters(props
[i
]);
6829 var events
= _mejs2
.default.html5media
.events
.concat(['click', 'mouseover', 'mouseout']).filter(function (e
) {
6830 return e
!== 'error';
6832 assignEvents
= function assignEvents(eventName
) {
6833 node
.addEventListener(eventName
, function (e
) {
6835 var _event
= (0, _general
.createEvent
)(e
.type
, e
.target
);
6836 mediaElement
.dispatchEvent(_event
);
6841 for (var _i
= 0, _total2
= events
.length
; _i
< _total2
; _i
++) {
6842 assignEvents(events
[_i
]);
6845 node
.setSize = function (width
, height
) {
6846 node
.style
.width
= width
+ 'px';
6847 node
.style
.height
= height
+ 'px';
6851 node
.hide = function () {
6853 node
.style
.display
= 'none';
6858 node
.show = function () {
6860 node
.style
.display
= '';
6866 total
= mediaFiles
.length
;
6868 for (; index
< total
; index
++) {
6869 if (_renderer
.renderer
.renderers
[options
.prefix
].canPlayType(mediaFiles
[index
].type
)) {
6870 node
.setAttribute('src', mediaFiles
[index
].src
);
6876 node
.addEventListener('error', function (e
) {
6877 if (e
.target
.error
.code
=== 4 && isActive
) {
6878 if (index
< total
&& mediaFiles
[index
+ 1] !== undefined) {
6879 node
.src
= mediaFiles
[index
++].src
;
6883 mediaElement
.generateError('Media error: Format(s) not supported or source(s) not found', mediaFiles
);
6888 var event
= (0, _general
.createEvent
)('rendererready', node
);
6889 mediaElement
.dispatchEvent(event
);
6895 _window2
.default.HtmlMediaElement
= _mejs2
.default.HtmlMediaElement
= HtmlMediaElement
;
6897 _renderer
.renderer
.add(HtmlMediaElement
);
6899 },{"2":2,"25":25,"27":27,"3":3,"7":7,"8":8}],24:[function(_dereq_
,module
,exports
){
6902 var _window
= _dereq_(3);
6904 var _window2
= _interopRequireDefault(_window
);
6906 var _document
= _dereq_(2);
6908 var _document2
= _interopRequireDefault(_document
);
6910 var _mejs
= _dereq_(7);
6912 var _mejs2
= _interopRequireDefault(_mejs
);
6914 var _renderer
= _dereq_(8);
6916 var _general
= _dereq_(27);
6918 var _media
= _dereq_(28);
6920 var _dom
= _dereq_(26);
6922 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
6925 isIframeStarted
: false,
6927 isIframeLoaded
: false,
6931 enqueueIframe
: function enqueueIframe(settings
) {
6932 YouTubeApi
.isLoaded
= typeof YT
!== 'undefined' && YT
.loaded
;
6934 if (YouTubeApi
.isLoaded
) {
6935 YouTubeApi
.createIframe(settings
);
6937 YouTubeApi
.loadIframeApi();
6938 YouTubeApi
.iframeQueue
.push(settings
);
6942 loadIframeApi
: function loadIframeApi() {
6943 if (!YouTubeApi
.isIframeStarted
) {
6944 (0, _dom
.loadScript
)('https://www.youtube.com/player_api');
6945 YouTubeApi
.isIframeStarted
= true;
6949 iFrameReady
: function iFrameReady() {
6951 YouTubeApi
.isLoaded
= true;
6952 YouTubeApi
.isIframeLoaded
= true;
6954 while (YouTubeApi
.iframeQueue
.length
> 0) {
6955 var settings
= YouTubeApi
.iframeQueue
.pop();
6956 YouTubeApi
.createIframe(settings
);
6960 createIframe
: function createIframe(settings
) {
6961 return new YT
.Player(settings
.containerId
, settings
);
6964 getYouTubeId
: function getYouTubeId(url
) {
6968 if (url
.indexOf('?') > 0) {
6969 youTubeId
= YouTubeApi
.getYouTubeIdFromParam(url
);
6971 if (youTubeId
=== '') {
6972 youTubeId
= YouTubeApi
.getYouTubeIdFromUrl(url
);
6975 youTubeId
= YouTubeApi
.getYouTubeIdFromUrl(url
);
6978 var id
= youTubeId
.substring(youTubeId
.lastIndexOf('/') + 1);
6979 youTubeId
= id
.split('?');
6980 return youTubeId
[0];
6983 getYouTubeIdFromParam
: function getYouTubeIdFromParam(url
) {
6985 if (url
=== undefined || url
=== null || !url
.trim().length
) {
6989 var parts
= url
.split('?'),
6990 parameters
= parts
[1].split('&');
6994 for (var i
= 0, total
= parameters
.length
; i
< total
; i
++) {
6995 var paramParts
= parameters
[i
].split('=');
6996 if (paramParts
[0] === 'v') {
6997 youTubeId
= paramParts
[1];
7005 getYouTubeIdFromUrl
: function getYouTubeIdFromUrl(url
) {
7007 if (url
=== undefined || url
=== null || !url
.trim().length
) {
7011 var parts
= url
.split('?');
7013 return url
.substring(url
.lastIndexOf('/') + 1);
7016 getYouTubeNoCookieUrl
: function getYouTubeNoCookieUrl(url
) {
7017 if (url
=== undefined || url
=== null || !url
.trim().length
|| url
.indexOf('//www.youtube') === -1) {
7021 var parts
= url
.split('/');
7022 parts
[2] = parts
[2].replace('.com', '-nocookie.com');
7023 return parts
.join('/');
7027 var YouTubeIframeRenderer
= {
7028 name
: 'youtube_iframe',
7031 prefix
: 'youtube_iframe',
7052 canPlayType
: function canPlayType(type
) {
7053 return ~['video/youtube', 'video/x-youtube'].indexOf(type
.toLowerCase());
7056 create
: function create(mediaElement
, options
, mediaFiles
) {
7062 var youTubeApi
= null,
7065 youTubeIframe
= null,
7068 youtube
.options
= options
;
7069 youtube
.id
= mediaElement
.id
+ '_' + options
.prefix
;
7070 youtube
.mediaElement
= mediaElement
;
7072 var props
= _mejs2
.default.html5media
.properties
,
7073 assignGettersSetters
= function assignGettersSetters(propName
) {
7075 var capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
7077 youtube
['get' + capName
] = function () {
7078 if (youTubeApi
!== null) {
7083 return youTubeApi
.getCurrentTime();
7085 return youTubeApi
.getDuration();
7087 volume
= youTubeApi
.getVolume() / 100;
7094 return youTubeApi
.isMuted();
7096 var percentLoaded
= youTubeApi
.getVideoLoadedFraction(),
7097 duration
= youTubeApi
.getDuration();
7099 start
: function start() {
7102 end
: function end() {
7103 return percentLoaded
* duration
;
7108 return youTubeApi
.getVideoUrl();
7119 youtube
['set' + capName
] = function (value
) {
7120 if (youTubeApi
!== null) {
7123 var url
= typeof value
=== 'string' ? value
: value
[0].src
,
7124 _videoId
= YouTubeApi
.getYouTubeId(url
);
7126 if (mediaElement
.originalNode
.autoplay
) {
7127 youTubeApi
.loadVideoById(_videoId
);
7129 youTubeApi
.cueVideoById(_videoId
);
7133 youTubeApi
.seekTo(value
);
7139 youTubeApi
.unMute();
7141 setTimeout(function () {
7142 var event
= (0, _general
.createEvent
)('volumechange', youtube
);
7143 mediaElement
.dispatchEvent(event
);
7148 youTubeApi
.setVolume(value
* 100);
7149 setTimeout(function () {
7150 var event
= (0, _general
.createEvent
)('volumechange', youtube
);
7151 mediaElement
.dispatchEvent(event
);
7155 var event
= (0, _general
.createEvent
)('canplay', youtube
);
7156 mediaElement
.dispatchEvent(event
);
7163 apiStack
.push({ type
: 'set', propName
: propName
, value
: value
});
7168 for (var i
= 0, total
= props
.length
; i
< total
; i
++) {
7169 assignGettersSetters(props
[i
]);
7172 var methods
= _mejs2
.default.html5media
.methods
,
7173 assignMethods
= function assignMethods(methodName
) {
7174 youtube
[methodName
] = function () {
7175 if (youTubeApi
!== null) {
7176 switch (methodName
) {
7179 return youTubeApi
.playVideo();
7182 return youTubeApi
.pauseVideo();
7187 apiStack
.push({ type
: 'call', methodName
: methodName
});
7192 for (var _i
= 0, _total
= methods
.length
; _i
< _total
; _i
++) {
7193 assignMethods(methods
[_i
]);
7196 var errorHandler
= function errorHandler(error
) {
7198 switch (error
.data
) {
7200 message
= 'The request contains an invalid parameter value. Verify that video ID has 11 characters and that contains no invalid characters, such as exclamation points or asterisks.';
7203 message
= 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';
7206 message
= 'The video requested was not found. Either video has been removed or has been marked as private.';
7210 message
= 'The owner of the requested video does not allow it to be played in embedded players.';
7213 message
= 'Unknown error.';
7216 mediaElement
.generateError('Code ' + error
.data
+ ': ' + message
, mediaFiles
);
7219 var youtubeContainer
= _document2
.default.createElement('div');
7220 youtubeContainer
.id
= youtube
.id
;
7222 if (youtube
.options
.youtube
.nocookie
) {
7223 mediaElement
.originalNode
.src
= YouTubeApi
.getYouTubeNoCookieUrl(mediaFiles
[0].src
);
7226 mediaElement
.originalNode
.parentNode
.insertBefore(youtubeContainer
, mediaElement
.originalNode
);
7227 mediaElement
.originalNode
.style
.display
= 'none';
7229 var isAudio
= mediaElement
.originalNode
.tagName
.toLowerCase() === 'audio',
7230 height
= isAudio
? '1' : mediaElement
.originalNode
.height
,
7231 width
= isAudio
? '1' : mediaElement
.originalNode
.width
,
7232 videoId
= YouTubeApi
.getYouTubeId(mediaFiles
[0].src
),
7235 containerId
: youtubeContainer
.id
,
7239 playerVars
: Object
.assign({
7247 }, youtube
.options
.youtube
),
7248 origin
: _window2
.default.location
.host
,
7250 onReady
: function onReady(e
) {
7251 mediaElement
.youTubeApi
= youTubeApi
= e
.target
;
7252 mediaElement
.youTubeState
= {
7257 if (apiStack
.length
) {
7258 for (var _i2
= 0, _total2
= apiStack
.length
; _i2
< _total2
; _i2
++) {
7260 var stackItem
= apiStack
[_i2
];
7262 if (stackItem
.type
=== 'set') {
7263 var propName
= stackItem
.propName
,
7264 capName
= '' + propName
.substring(0, 1).toUpperCase() + propName
.substring(1);
7266 youtube
['set' + capName
](stackItem
.value
);
7267 } else if (stackItem
.type
=== 'call') {
7268 youtube
[stackItem
.methodName
]();
7273 youTubeIframe
= youTubeApi
.getIframe();
7275 if (mediaElement
.originalNode
.muted
) {
7279 var events
= ['mouseover', 'mouseout'],
7280 assignEvents
= function assignEvents(e
) {
7281 var newEvent
= (0, _general
.createEvent
)(e
.type
, youtube
);
7282 mediaElement
.dispatchEvent(newEvent
);
7285 for (var _i3
= 0, _total3
= events
.length
; _i3
< _total3
; _i3
++) {
7286 youTubeIframe
.addEventListener(events
[_i3
], assignEvents
, false);
7289 var initEvents
= ['rendererready', 'loadedmetadata', 'loadeddata', 'canplay'];
7291 for (var _i4
= 0, _total4
= initEvents
.length
; _i4
< _total4
; _i4
++) {
7292 var event
= (0, _general
.createEvent
)(initEvents
[_i4
], youtube
);
7293 mediaElement
.dispatchEvent(event
);
7296 onStateChange
: function onStateChange(e
) {
7301 events
= ['loadedmetadata'];
7308 ended
= !youtube
.options
.youtube
.loop
;
7309 if (!youtube
.options
.youtube
.loop
) {
7310 youtube
.stopInterval();
7314 events
= ['play', 'playing'];
7317 youtube
.startInterval();
7323 youtube
.stopInterval();
7326 events
= ['progress'];
7330 events
= ['loadeddata', 'loadedmetadata', 'canplay'];
7336 for (var _i5
= 0, _total5
= events
.length
; _i5
< _total5
; _i5
++) {
7337 var event
= (0, _general
.createEvent
)(events
[_i5
], youtube
);
7338 mediaElement
.dispatchEvent(event
);
7341 onError
: function onError(e
) {
7342 return errorHandler(e
);
7347 if (isAudio
|| mediaElement
.originalNode
.hasAttribute('playsinline')) {
7348 youtubeSettings
.playerVars
.playsinline
= 1;
7351 if (mediaElement
.originalNode
.controls
) {
7352 youtubeSettings
.playerVars
.controls
= 1;
7354 if (mediaElement
.originalNode
.autoplay
) {
7355 youtubeSettings
.playerVars
.autoplay
= 1;
7357 if (mediaElement
.originalNode
.loop
) {
7358 youtubeSettings
.playerVars
.loop
= 1;
7361 if ((youtubeSettings
.playerVars
.loop
&& parseInt(youtubeSettings
.playerVars
.loop
, 10) === 1 || mediaElement
.originalNode
.src
.indexOf('loop=') > -1) && !youtubeSettings
.playerVars
.playlist
&& mediaElement
.originalNode
.src
.indexOf('playlist=') === -1) {
7362 youtubeSettings
.playerVars
.playlist
= YouTubeApi
.getYouTubeId(mediaElement
.originalNode
.src
);
7365 YouTubeApi
.enqueueIframe(youtubeSettings
);
7367 youtube
.onEvent = function (eventName
, player
, _youTubeState
) {
7368 if (_youTubeState
!== null && _youTubeState
!== undefined) {
7369 mediaElement
.youTubeState
= _youTubeState
;
7373 youtube
.setSize = function (width
, height
) {
7374 if (youTubeApi
!== null) {
7375 youTubeApi
.setSize(width
, height
);
7378 youtube
.hide = function () {
7379 youtube
.stopInterval();
7381 if (youTubeIframe
) {
7382 youTubeIframe
.style
.display
= 'none';
7385 youtube
.show = function () {
7386 if (youTubeIframe
) {
7387 youTubeIframe
.style
.display
= '';
7390 youtube
.destroy = function () {
7391 youTubeApi
.destroy();
7393 youtube
.interval
= null;
7395 youtube
.startInterval = function () {
7396 youtube
.interval
= setInterval(function () {
7397 var event
= (0, _general
.createEvent
)('timeupdate', youtube
);
7398 mediaElement
.dispatchEvent(event
);
7401 youtube
.stopInterval = function () {
7402 if (youtube
.interval
) {
7403 clearInterval(youtube
.interval
);
7406 youtube
.getPosterUrl = function () {
7407 var quality
= options
.youtube
.imageQuality
,
7408 resolutions
= ['default', 'hqdefault', 'mqdefault', 'sddefault', 'maxresdefault'],
7409 id
= YouTubeApi
.getYouTubeId(mediaElement
.originalNode
.src
);
7410 return quality
&& resolutions
.indexOf(quality
) > -1 && id
? 'https://img.youtube.com/vi/' + id
+ '/' + quality
+ '.jpg' : '';
7417 _window2
.default.onYouTubePlayerAPIReady = function () {
7418 YouTubeApi
.iFrameReady();
7421 _media
.typeChecks
.push(function (url
) {
7422 return (/\/\/(www\.youtube|youtu\.?be)/i.test(url
) ? 'video/x-youtube' : null
7426 _renderer
.renderer
.add(YouTubeIframeRenderer
);
7428 },{"2":2,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],25:[function(_dereq_
,module
,exports
){
7431 Object
.defineProperty(exports
, "__esModule", {
7434 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_PASSIVE_EVENT
= 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;
7436 var _window
= _dereq_(3);
7438 var _window2
= _interopRequireDefault(_window
);
7440 var _document
= _dereq_(2);
7442 var _document2
= _interopRequireDefault(_document
);
7444 var _mejs
= _dereq_(7);
7446 var _mejs2
= _interopRequireDefault(_mejs
);
7448 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
7450 var NAV
= exports
.NAV
= _window2
.default.navigator
;
7451 var UA
= exports
.UA
= NAV
.userAgent
.toLowerCase();
7452 var IS_IPAD
= exports
.IS_IPAD
= /ipad/i.test(UA
) && !_window2
.default.MSStream
;
7453 var IS_IPHONE
= exports
.IS_IPHONE
= /iphone/i.test(UA
) && !_window2
.default.MSStream
;
7454 var IS_IPOD
= exports
.IS_IPOD
= /ipod/i.test(UA
) && !_window2
.default.MSStream
;
7455 var IS_IOS
= exports
.IS_IOS
= /ipad|iphone|ipod/i.test(UA
) && !_window2
.default.MSStream
;
7456 var IS_ANDROID
= exports
.IS_ANDROID
= /android/i.test(UA
);
7457 var IS_IE
= exports
.IS_IE
= /(trident|microsoft)/i.test(NAV
.appName
);
7458 var IS_EDGE
= exports
.IS_EDGE
= 'msLaunchUri' in NAV
&& !('documentMode' in _document2
.default);
7459 var IS_CHROME
= exports
.IS_CHROME
= /chrome/i.test(UA
);
7460 var IS_FIREFOX
= exports
.IS_FIREFOX
= /firefox/i.test(UA
);
7461 var IS_SAFARI
= exports
.IS_SAFARI
= /safari/i.test(UA
) && !IS_CHROME
;
7462 var IS_STOCK_ANDROID
= exports
.IS_STOCK_ANDROID
= /^mozilla\/\d+\.\d+\s\(linux;\su;/i.test(UA
);
7463 var HAS_MSE
= exports
.HAS_MSE
= 'MediaSource' in _window2
.default;
7464 var SUPPORT_POINTER_EVENTS
= exports
.SUPPORT_POINTER_EVENTS = function () {
7465 var element
= _document2
.default.createElement('x'),
7466 documentElement
= _document2
.default.documentElement
,
7467 getComputedStyle
= _window2
.default.getComputedStyle
;
7469 if (!('pointerEvents' in element
.style
)) {
7473 element
.style
.pointerEvents
= 'auto';
7474 element
.style
.pointerEvents
= 'x';
7475 documentElement
.appendChild(element
);
7476 var supports
= getComputedStyle
&& getComputedStyle(element
, '').pointerEvents
=== 'auto';
7481 var SUPPORT_PASSIVE_EVENT
= exports
.SUPPORT_PASSIVE_EVENT = function () {
7482 var supportsPassive
= false;
7484 var opts
= Object
.defineProperty({}, 'passive', {
7485 get: function get() {
7486 supportsPassive
= true;
7489 _window2
.default.addEventListener('test', null, opts
);
7492 return supportsPassive
;
7495 var html5Elements
= ['source', 'track', 'audio', 'video'];
7498 for (var i
= 0, total
= html5Elements
.length
; i
< total
; i
++) {
7499 video
= _document2
.default.createElement(html5Elements
[i
]);
7502 var SUPPORTS_NATIVE_HLS
= exports
.SUPPORTS_NATIVE_HLS
= IS_SAFARI
|| IS_ANDROID
&& (IS_CHROME
|| IS_STOCK_ANDROID
) || IS_IE
&& /edge/i.test(UA
);
7504 var hasiOSFullScreen
= video
.webkitEnterFullscreen
!== undefined;
7506 var hasNativeFullscreen
= video
.requestFullscreen
!== undefined;
7508 if (hasiOSFullScreen
&& /mac os x 10_5/i.test(UA
)) {
7509 hasNativeFullscreen
= false;
7510 hasiOSFullScreen
= false;
7513 var hasWebkitNativeFullScreen
= video
.webkitRequestFullScreen
!== undefined;
7514 var hasMozNativeFullScreen
= video
.mozRequestFullScreen
!== undefined;
7515 var hasMsNativeFullScreen
= video
.msRequestFullscreen
!== undefined;
7516 var hasTrueNativeFullScreen
= hasWebkitNativeFullScreen
|| hasMozNativeFullScreen
|| hasMsNativeFullScreen
;
7517 var nativeFullScreenEnabled
= hasTrueNativeFullScreen
;
7518 var fullScreenEventName
= '';
7519 var isFullScreen
= void 0,
7520 requestFullScreen
= void 0,
7521 cancelFullScreen
= void 0;
7523 if (hasMozNativeFullScreen
) {
7524 nativeFullScreenEnabled
= _document2
.default.mozFullScreenEnabled
;
7525 } else if (hasMsNativeFullScreen
) {
7526 nativeFullScreenEnabled
= _document2
.default.msFullscreenEnabled
;
7530 hasiOSFullScreen
= false;
7533 if (hasTrueNativeFullScreen
) {
7534 if (hasWebkitNativeFullScreen
) {
7535 fullScreenEventName
= 'webkitfullscreenchange';
7536 } else if (hasMozNativeFullScreen
) {
7537 fullScreenEventName
= 'mozfullscreenchange';
7538 } else if (hasMsNativeFullScreen
) {
7539 fullScreenEventName
= 'MSFullscreenChange';
7542 exports
.isFullScreen
= isFullScreen
= function isFullScreen() {
7543 if (hasMozNativeFullScreen
) {
7544 return _document2
.default.mozFullScreen
;
7545 } else if (hasWebkitNativeFullScreen
) {
7546 return _document2
.default.webkitIsFullScreen
;
7547 } else if (hasMsNativeFullScreen
) {
7548 return _document2
.default.msFullscreenElement
!== null;
7552 exports
.requestFullScreen
= requestFullScreen
= function requestFullScreen(el
) {
7553 if (hasWebkitNativeFullScreen
) {
7554 el
.webkitRequestFullScreen();
7555 } else if (hasMozNativeFullScreen
) {
7556 el
.mozRequestFullScreen();
7557 } else if (hasMsNativeFullScreen
) {
7558 el
.msRequestFullscreen();
7562 exports
.cancelFullScreen
= cancelFullScreen
= function cancelFullScreen() {
7563 if (hasWebkitNativeFullScreen
) {
7564 _document2
.default.webkitCancelFullScreen();
7565 } else if (hasMozNativeFullScreen
) {
7566 _document2
.default.mozCancelFullScreen();
7567 } else if (hasMsNativeFullScreen
) {
7568 _document2
.default.msExitFullscreen();
7573 var HAS_NATIVE_FULLSCREEN
= exports
.HAS_NATIVE_FULLSCREEN
= hasNativeFullscreen
;
7574 var HAS_WEBKIT_NATIVE_FULLSCREEN
= exports
.HAS_WEBKIT_NATIVE_FULLSCREEN
= hasWebkitNativeFullScreen
;
7575 var HAS_MOZ_NATIVE_FULLSCREEN
= exports
.HAS_MOZ_NATIVE_FULLSCREEN
= hasMozNativeFullScreen
;
7576 var HAS_MS_NATIVE_FULLSCREEN
= exports
.HAS_MS_NATIVE_FULLSCREEN
= hasMsNativeFullScreen
;
7577 var HAS_IOS_FULLSCREEN
= exports
.HAS_IOS_FULLSCREEN
= hasiOSFullScreen
;
7578 var HAS_TRUE_NATIVE_FULLSCREEN
= exports
.HAS_TRUE_NATIVE_FULLSCREEN
= hasTrueNativeFullScreen
;
7579 var HAS_NATIVE_FULLSCREEN_ENABLED
= exports
.HAS_NATIVE_FULLSCREEN_ENABLED
= nativeFullScreenEnabled
;
7580 var FULLSCREEN_EVENT_NAME
= exports
.FULLSCREEN_EVENT_NAME
= fullScreenEventName
;
7581 exports
.isFullScreen
= isFullScreen
;
7582 exports
.requestFullScreen
= requestFullScreen
;
7583 exports
.cancelFullScreen
= cancelFullScreen
;
7586 _mejs2
.default.Features
= _mejs2
.default.Features
|| {};
7587 _mejs2
.default.Features
.isiPad
= IS_IPAD
;
7588 _mejs2
.default.Features
.isiPod
= IS_IPOD
;
7589 _mejs2
.default.Features
.isiPhone
= IS_IPHONE
;
7590 _mejs2
.default.Features
.isiOS
= _mejs2
.default.Features
.isiPhone
|| _mejs2
.default.Features
.isiPad
;
7591 _mejs2
.default.Features
.isAndroid
= IS_ANDROID
;
7592 _mejs2
.default.Features
.isIE
= IS_IE
;
7593 _mejs2
.default.Features
.isEdge
= IS_EDGE
;
7594 _mejs2
.default.Features
.isChrome
= IS_CHROME
;
7595 _mejs2
.default.Features
.isFirefox
= IS_FIREFOX
;
7596 _mejs2
.default.Features
.isSafari
= IS_SAFARI
;
7597 _mejs2
.default.Features
.isStockAndroid
= IS_STOCK_ANDROID
;
7598 _mejs2
.default.Features
.hasMSE
= HAS_MSE
;
7599 _mejs2
.default.Features
.supportsNativeHLS
= SUPPORTS_NATIVE_HLS
;
7600 _mejs2
.default.Features
.supportsPointerEvents
= SUPPORT_POINTER_EVENTS
;
7601 _mejs2
.default.Features
.supportsPassiveEvent
= SUPPORT_PASSIVE_EVENT
;
7602 _mejs2
.default.Features
.hasiOSFullScreen
= HAS_IOS_FULLSCREEN
;
7603 _mejs2
.default.Features
.hasNativeFullscreen
= HAS_NATIVE_FULLSCREEN
;
7604 _mejs2
.default.Features
.hasWebkitNativeFullScreen
= HAS_WEBKIT_NATIVE_FULLSCREEN
;
7605 _mejs2
.default.Features
.hasMozNativeFullScreen
= HAS_MOZ_NATIVE_FULLSCREEN
;
7606 _mejs2
.default.Features
.hasMsNativeFullScreen
= HAS_MS_NATIVE_FULLSCREEN
;
7607 _mejs2
.default.Features
.hasTrueNativeFullScreen
= HAS_TRUE_NATIVE_FULLSCREEN
;
7608 _mejs2
.default.Features
.nativeFullScreenEnabled
= HAS_NATIVE_FULLSCREEN_ENABLED
;
7609 _mejs2
.default.Features
.fullScreenEventName
= FULLSCREEN_EVENT_NAME
;
7610 _mejs2
.default.Features
.isFullScreen
= isFullScreen
;
7611 _mejs2
.default.Features
.requestFullScreen
= requestFullScreen
;
7612 _mejs2
.default.Features
.cancelFullScreen
= cancelFullScreen
;
7614 },{"2":2,"3":3,"7":7}],26:[function(_dereq_
,module
,exports
){
7617 Object
.defineProperty(exports
, "__esModule", {
7620 exports
.removeClass
= exports
.addClass
= exports
.hasClass
= undefined;
7621 exports
.loadScript
= loadScript
;
7622 exports
.offset
= offset
;
7623 exports
.toggleClass
= toggleClass
;
7624 exports
.fadeOut
= fadeOut
;
7625 exports
.fadeIn
= fadeIn
;
7626 exports
.siblings
= siblings
;
7627 exports
.visible
= visible
;
7628 exports
.ajax
= ajax
;
7630 var _window
= _dereq_(3);
7632 var _window2
= _interopRequireDefault(_window
);
7634 var _document
= _dereq_(2);
7636 var _document2
= _interopRequireDefault(_document
);
7638 var _mejs
= _dereq_(7);
7640 var _mejs2
= _interopRequireDefault(_mejs
);
7642 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
7644 function loadScript(url
) {
7645 return new Promise(function (resolve
, reject
) {
7646 var script
= _document2
.default.createElement('script');
7648 script
.async
= true;
7649 script
.onload = function () {
7653 script
.onerror = function () {
7657 _document2
.default.head
.appendChild(script
);
7661 function offset(el
) {
7662 var rect
= el
.getBoundingClientRect(),
7663 scrollLeft
= _window2
.default.pageXOffset
|| _document2
.default.documentElement
.scrollLeft
,
7664 scrollTop
= _window2
.default.pageYOffset
|| _document2
.default.documentElement
.scrollTop
;
7665 return { top
: rect
.top
+ scrollTop
, left
: rect
.left
+ scrollLeft
};
7668 var hasClassMethod
= void 0,
7669 addClassMethod
= void 0,
7670 removeClassMethod
= void 0;
7672 if ('classList' in _document2
.default.documentElement
) {
7673 hasClassMethod
= function hasClassMethod(el
, className
) {
7674 return el
.classList
!== undefined && el
.classList
.contains(className
);
7676 addClassMethod
= function addClassMethod(el
, className
) {
7677 return el
.classList
.add(className
);
7679 removeClassMethod
= function removeClassMethod(el
, className
) {
7680 return el
.classList
.remove(className
);
7683 hasClassMethod
= function hasClassMethod(el
, className
) {
7684 return new RegExp('\\b' + className
+ '\\b').test(el
.className
);
7686 addClassMethod
= function addClassMethod(el
, className
) {
7687 if (!hasClass(el
, className
)) {
7688 el
.className
+= ' ' + className
;
7691 removeClassMethod
= function removeClassMethod(el
, className
) {
7692 el
.className
= el
.className
.replace(new RegExp('\\b' + className
+ '\\b', 'g'), '');
7696 var hasClass
= exports
.hasClass
= hasClassMethod
;
7697 var addClass
= exports
.addClass
= addClassMethod
;
7698 var removeClass
= exports
.removeClass
= removeClassMethod
;
7700 function toggleClass(el
, className
) {
7701 hasClass(el
, className
) ? removeClass(el
, className
) : addClass(el
, className
);
7704 function fadeOut(el
) {
7705 var duration
= arguments
.length
> 1 && arguments
[1] !== undefined ? arguments
[1] : 400;
7706 var callback
= arguments
[2];
7708 if (!el
.style
.opacity
) {
7709 el
.style
.opacity
= 1;
7713 _window2
.default.requestAnimationFrame(function animate(timestamp
) {
7714 start
= start
|| timestamp
;
7715 var progress
= timestamp
- start
;
7716 var opacity
= parseFloat(1 - progress
/ duration
, 2);
7717 el
.style
.opacity
= opacity
< 0 ? 0 : opacity
;
7718 if (progress
> duration
) {
7719 if (callback
&& typeof callback
=== 'function') {
7723 _window2
.default.requestAnimationFrame(animate
);
7728 function fadeIn(el
) {
7729 var duration
= arguments
.length
> 1 && arguments
[1] !== undefined ? arguments
[1] : 400;
7730 var callback
= arguments
[2];
7732 if (!el
.style
.opacity
) {
7733 el
.style
.opacity
= 0;
7737 _window2
.default.requestAnimationFrame(function animate(timestamp
) {
7738 start
= start
|| timestamp
;
7739 var progress
= timestamp
- start
;
7740 var opacity
= parseFloat(progress
/ duration
, 2);
7741 el
.style
.opacity
= opacity
> 1 ? 1 : opacity
;
7742 if (progress
> duration
) {
7743 if (callback
&& typeof callback
=== 'function') {
7747 _window2
.default.requestAnimationFrame(animate
);
7752 function siblings(el
, filter
) {
7754 el
= el
.parentNode
.firstChild
;
7756 if (!filter
|| filter(el
)) {
7759 } while (el
= el
.nextSibling
);
7763 function visible(elem
) {
7764 if (elem
.getClientRects
!== undefined && elem
.getClientRects
=== 'function') {
7765 return !!(elem
.offsetWidth
|| elem
.offsetHeight
|| elem
.getClientRects().length
);
7767 return !!(elem
.offsetWidth
|| elem
.offsetHeight
);
7770 function ajax(url
, dataType
, success
, error
) {
7771 var xhr
= _window2
.default.XMLHttpRequest
? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
7773 var type
= 'application/x-www-form-urlencoded; charset=UTF-8',
7775 accept
= '*/'.concat('*');
7779 type
= 'text/plain';
7782 type
= 'application/json, text/javascript';
7788 type
= 'application/xml, text/xml';
7792 if (type
!== 'application/x-www-form-urlencoded') {
7793 accept
= type
+ ', */*; q=0.01';
7797 xhr
.open('GET', url
, true);
7798 xhr
.setRequestHeader('Accept', accept
);
7799 xhr
.onreadystatechange = function () {
7804 if (xhr
.readyState
=== 4) {
7805 if (xhr
.status
=== 200) {
7810 data
= JSON
.parse(xhr
.responseText
);
7813 data
= xhr
.responseXML
;
7816 data
= xhr
.responseText
;
7820 } else if (typeof error
=== 'function') {
7830 _mejs2
.default.Utils
= _mejs2
.default.Utils
|| {};
7831 _mejs2
.default.Utils
.offset
= offset
;
7832 _mejs2
.default.Utils
.hasClass
= hasClass
;
7833 _mejs2
.default.Utils
.addClass
= addClass
;
7834 _mejs2
.default.Utils
.removeClass
= removeClass
;
7835 _mejs2
.default.Utils
.toggleClass
= toggleClass
;
7836 _mejs2
.default.Utils
.fadeIn
= fadeIn
;
7837 _mejs2
.default.Utils
.fadeOut
= fadeOut
;
7838 _mejs2
.default.Utils
.siblings
= siblings
;
7839 _mejs2
.default.Utils
.visible
= visible
;
7840 _mejs2
.default.Utils
.ajax
= ajax
;
7841 _mejs2
.default.Utils
.loadScript
= loadScript
;
7843 },{"2":2,"3":3,"7":7}],27:[function(_dereq_
,module
,exports
){
7846 Object
.defineProperty(exports
, "__esModule", {
7849 exports
.escapeHTML
= escapeHTML
;
7850 exports
.debounce
= debounce
;
7851 exports
.isObjectEmpty
= isObjectEmpty
;
7852 exports
.splitEvents
= splitEvents
;
7853 exports
.createEvent
= createEvent
;
7854 exports
.isNodeAfter
= isNodeAfter
;
7855 exports
.isString
= isString
;
7857 var _mejs
= _dereq_(7);
7859 var _mejs2
= _interopRequireDefault(_mejs
);
7861 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
7863 function escapeHTML(input
) {
7865 if (typeof input
!== 'string') {
7866 throw new Error('Argument passed must be a string');
7876 return input
.replace(/[&<>"]/g, function (c
) {
7881 function debounce(func
, wait
) {
7883 _arguments
= arguments
;
7885 var immediate
= arguments
.length
> 2 && arguments
[2] !== undefined ? arguments
[2] : false;
7888 if (typeof func
!== 'function') {
7889 throw new Error('First argument must be a function');
7892 if (typeof wait
!== 'number') {
7893 throw new Error('Second argument must be a numeric value');
7896 var timeout
= void 0;
7897 return function () {
7898 var context
= _this
,
7900 var later
= function later() {
7903 func
.apply(context
, args
);
7906 var callNow
= immediate
&& !timeout
;
7907 clearTimeout(timeout
);
7908 timeout
= setTimeout(later
, wait
);
7911 func
.apply(context
, args
);
7916 function isObjectEmpty(instance
) {
7917 return Object
.getOwnPropertyNames(instance
).length
<= 0;
7920 function splitEvents(events
, id
) {
7921 var rwindow
= /^((after|before)print|(before)?unload|hashchange|message|o(ff|n)line|page(hide|show)|popstate|resize|storage)\b/;
7923 var ret
= { d
: [], w
: [] };
7924 (events
|| '').split(' ').forEach(function (v
) {
7925 var eventName
= '' + v
+ (id
? '.' + id
: '');
7927 if (eventName
.startsWith('.')) {
7928 ret
.d
.push(eventName
);
7929 ret
.w
.push(eventName
);
7931 ret
[rwindow
.test(v
) ? 'w' : 'd'].push(eventName
);
7935 ret
.d
= ret
.d
.join(' ');
7936 ret
.w
= ret
.w
.join(' ');
7940 function createEvent(eventName
, target
) {
7942 if (typeof eventName
!== 'string') {
7943 throw new Error('Event name must be a string');
7946 var eventFrags
= eventName
.match(/([a-z]+\.([a-z]+))/i),
7951 if (eventFrags
!== null) {
7952 eventName
= eventFrags
[1];
7953 detail
.namespace = eventFrags
[2];
7956 return new window
.CustomEvent(eventName
, {
7961 function isNodeAfter(sourceNode
, targetNode
) {
7963 return !!(sourceNode
&& targetNode
&& sourceNode
.compareDocumentPosition(targetNode
) & 2);
7966 function isString(value
) {
7967 return typeof value
=== 'string';
7970 _mejs2
.default.Utils
= _mejs2
.default.Utils
|| {};
7971 _mejs2
.default.Utils
.escapeHTML
= escapeHTML
;
7972 _mejs2
.default.Utils
.debounce
= debounce
;
7973 _mejs2
.default.Utils
.isObjectEmpty
= isObjectEmpty
;
7974 _mejs2
.default.Utils
.splitEvents
= splitEvents
;
7975 _mejs2
.default.Utils
.createEvent
= createEvent
;
7976 _mejs2
.default.Utils
.isNodeAfter
= isNodeAfter
;
7977 _mejs2
.default.Utils
.isString
= isString
;
7979 },{"7":7}],28:[function(_dereq_
,module
,exports
){
7982 Object
.defineProperty(exports
, "__esModule", {
7985 exports
.typeChecks
= undefined;
7986 exports
.absolutizeUrl
= absolutizeUrl
;
7987 exports
.formatType
= formatType
;
7988 exports
.getMimeFromType
= getMimeFromType
;
7989 exports
.getTypeFromFile
= getTypeFromFile
;
7990 exports
.getExtension
= getExtension
;
7991 exports
.normalizeExtension
= normalizeExtension
;
7993 var _mejs
= _dereq_(7);
7995 var _mejs2
= _interopRequireDefault(_mejs
);
7997 var _general
= _dereq_(27);
7999 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
8001 var typeChecks
= exports
.typeChecks
= [];
8003 function absolutizeUrl(url
) {
8005 if (typeof url
!== 'string') {
8006 throw new Error('`url` argument must be a string');
8009 var el
= document
.createElement('div');
8010 el
.innerHTML
= '<a href="' + (0, _general
.escapeHTML
)(url
) + '">x</a>';
8011 return el
.firstChild
.href
;
8014 function formatType(url
) {
8015 var type
= arguments
.length
> 1 && arguments
[1] !== undefined ? arguments
[1] : '';
8017 return url
&& !type
? getTypeFromFile(url
) : type
;
8020 function getMimeFromType(type
) {
8022 if (typeof type
!== 'string') {
8023 throw new Error('`type` argument must be a string');
8026 return type
&& type
.indexOf(';') > -1 ? type
.substr(0, type
.indexOf(';')) : type
;
8029 function getTypeFromFile(url
) {
8031 if (typeof url
!== 'string') {
8032 throw new Error('`url` argument must be a string');
8035 for (var i
= 0, total
= typeChecks
.length
; i
< total
; i
++) {
8036 var type
= typeChecks
[i
](url
);
8043 var ext
= getExtension(url
),
8044 normalizedExt
= normalizeExtension(ext
);
8046 var mime
= 'video/mp4';
8048 if (normalizedExt
) {
8049 if (~['mp4', 'm4v', 'ogg', 'ogv', 'webm', 'flv', 'mpeg', 'mov'].indexOf(normalizedExt
)) {
8050 mime
= 'video/' + normalizedExt
;
8051 } else if (~['mp3', 'oga', 'wav', 'mid', 'midi'].indexOf(normalizedExt
)) {
8052 mime
= 'audio/' + normalizedExt
;
8059 function getExtension(url
) {
8061 if (typeof url
!== 'string') {
8062 throw new Error('`url` argument must be a string');
8065 var baseUrl
= url
.split('?')[0],
8066 baseName
= baseUrl
.split('\\').pop().split('/').pop();
8067 return ~baseName
.indexOf('.') ? baseName
.substring(baseName
.lastIndexOf('.') + 1) : '';
8070 function normalizeExtension(extension
) {
8072 if (typeof extension
!== 'string') {
8073 throw new Error('`extension` argument must be a string');
8076 switch (extension
) {
8093 _mejs2
.default.Utils
= _mejs2
.default.Utils
|| {};
8094 _mejs2
.default.Utils
.typeChecks
= typeChecks
;
8095 _mejs2
.default.Utils
.absolutizeUrl
= absolutizeUrl
;
8096 _mejs2
.default.Utils
.formatType
= formatType
;
8097 _mejs2
.default.Utils
.getMimeFromType
= getMimeFromType
;
8098 _mejs2
.default.Utils
.getTypeFromFile
= getTypeFromFile
;
8099 _mejs2
.default.Utils
.getExtension
= getExtension
;
8100 _mejs2
.default.Utils
.normalizeExtension
= normalizeExtension
;
8102 },{"27":27,"7":7}],29:[function(_dereq_
,module
,exports
){
8105 var _document
= _dereq_(2);
8107 var _document2
= _interopRequireDefault(_document
);
8109 var _promisePolyfill
= _dereq_(4);
8111 var _promisePolyfill2
= _interopRequireDefault(_promisePolyfill
);
8113 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
8116 arr
.forEach(function (item
) {
8117 if (item
.hasOwnProperty('remove')) {
8120 Object
.defineProperty(item
, 'remove', {
8124 value
: function remove() {
8125 this.parentNode
.removeChild(this);
8129 })([Element
.prototype, CharacterData
.prototype, DocumentType
.prototype]);
8133 if (typeof window
.CustomEvent
=== 'function') {
8137 function CustomEvent(event
, params
) {
8138 params
= params
|| { bubbles
: false, cancelable
: false, detail
: undefined };
8139 var evt
= _document2
.default.createEvent('CustomEvent');
8140 evt
.initCustomEvent(event
, params
.bubbles
, params
.cancelable
, params
.detail
);
8144 CustomEvent
.prototype = window
.Event
.prototype;
8145 window
.CustomEvent
= CustomEvent
;
8148 if (typeof Object
.assign
!== 'function') {
8149 Object
.assign = function (target
) {
8151 if (target
=== null || target
=== undefined) {
8152 throw new TypeError('Cannot convert undefined or null to object');
8155 var to
= Object(target
);
8157 for (var index
= 1, total
= arguments
.length
; index
< total
; index
++) {
8158 var nextSource
= arguments
[index
];
8160 if (nextSource
!== null) {
8161 for (var nextKey
in nextSource
) {
8162 if (Object
.prototype.hasOwnProperty
.call(nextSource
, nextKey
)) {
8163 to
[nextKey
] = nextSource
[nextKey
];
8172 if (!String
.prototype.startsWith
) {
8173 String
.prototype.startsWith = function (searchString
, position
) {
8174 position
= position
|| 0;
8175 return this.substr(position
, searchString
.length
) === searchString
;
8179 if (!Element
.prototype.matches
) {
8180 Element
.prototype.matches
= Element
.prototype.matchesSelector
|| Element
.prototype.mozMatchesSelector
|| Element
.prototype.msMatchesSelector
|| Element
.prototype.oMatchesSelector
|| Element
.prototype.webkitMatchesSelector
|| function (s
) {
8181 var matches
= (this.document
|| this.ownerDocument
).querySelectorAll(s
),
8182 i
= matches
.length
- 1;
8183 while (--i
>= 0 && matches
.item(i
) !== this) {}
8188 if (window
.Element
&& !Element
.prototype.closest
) {
8189 Element
.prototype.closest = function (s
) {
8190 var matches
= (this.document
|| this.ownerDocument
).querySelectorAll(s
),
8195 while (--i
>= 0 && matches
.item(i
) !== el
) {}
8196 } while (i
< 0 && (el
= el
.parentElement
));
8203 var vendors
= ['ms', 'moz', 'webkit', 'o'];
8204 for (var x
= 0; x
< vendors
.length
&& !window
.requestAnimationFrame
; ++x
) {
8205 window
.requestAnimationFrame
= window
[vendors
[x
] + 'RequestAnimationFrame'];
8206 window
.cancelAnimationFrame
= window
[vendors
[x
] + 'CancelAnimationFrame'] || window
[vendors
[x
] + 'CancelRequestAnimationFrame'];
8209 if (!window
.requestAnimationFrame
) window
.requestAnimationFrame = function (callback
) {
8210 var currTime
= new Date().getTime();
8211 var timeToCall
= Math
.max(0, 16 - (currTime
- lastTime
));
8212 var id
= window
.setTimeout(function () {
8213 callback(currTime
+ timeToCall
);
8215 lastTime
= currTime
+ timeToCall
;
8219 if (!window
.cancelAnimationFrame
) window
.cancelAnimationFrame = function (id
) {
8224 if (/firefox/i.test(navigator
.userAgent
)) {
8225 var getComputedStyle
= window
.getComputedStyle
;
8226 window
.getComputedStyle = function (el
, pseudoEl
) {
8227 var t
= getComputedStyle(el
, pseudoEl
);
8228 return t
=== null ? { getPropertyValue
: function getPropertyValue() {} } : t
;
8232 if (!window
.Promise
) {
8233 window
.Promise
= _promisePolyfill2
.default;
8236 (function (constructor) {
8237 if (constructor && constructor.prototype && constructor.prototype.children
=== null) {
8238 Object
.defineProperty(constructor.prototype, 'children', {
8239 get: function get() {
8242 nodes
= this.childNodes
,
8244 while (node
= nodes
[i
++]) {
8245 if (node
.nodeType
=== 1) {
8246 children
.push(node
);
8253 })(window
.Node
|| window
.Element
);
8255 },{"2":2,"4":4}],30:[function(_dereq_
,module
,exports
){
8258 Object
.defineProperty(exports
, "__esModule", {
8261 exports
.isDropFrame
= isDropFrame
;
8262 exports
.secondsToTimeCode
= secondsToTimeCode
;
8263 exports
.timeCodeToSeconds
= timeCodeToSeconds
;
8264 exports
.calculateTimeFormat
= calculateTimeFormat
;
8265 exports
.convertSMPTEtoSeconds
= convertSMPTEtoSeconds
;
8267 var _mejs
= _dereq_(7);
8269 var _mejs2
= _interopRequireDefault(_mejs
);
8271 function _interopRequireDefault(obj
) { return obj
&& obj
.__esModule
? obj
: { default: obj
}; }
8273 function isDropFrame() {
8274 var fps
= arguments
.length
> 0 && arguments
[0] !== undefined ? arguments
[0] : 25;
8276 return !(fps
% 1 === 0);
8278 function secondsToTimeCode(time
) {
8279 var forceHours
= arguments
.length
> 1 && arguments
[1] !== undefined ? arguments
[1] : false;
8280 var showFrameCount
= arguments
.length
> 2 && arguments
[2] !== undefined ? arguments
[2] : false;
8281 var fps
= arguments
.length
> 3 && arguments
[3] !== undefined ? arguments
[3] : 25;
8282 var secondsDecimalLength
= arguments
.length
> 4 && arguments
[4] !== undefined ? arguments
[4] : 0;
8283 var timeFormat
= arguments
.length
> 5 && arguments
[5] !== undefined ? arguments
[5] : 'hh:mm:ss';
8286 time
= !time
|| typeof time
!== 'number' || time
< 0 ? 0 : time
;
8288 var dropFrames
= Math
.round(fps
* 0.066666),
8289 timeBase
= Math
.round(fps
),
8290 framesPer24Hours
= Math
.round(fps
* 3600) * 24,
8291 framesPer10Minutes
= Math
.round(fps
* 600),
8292 frameSep
= isDropFrame(fps
) ? ';' : ':',
8297 f
= Math
.round(time
* fps
);
8299 if (isDropFrame(fps
)) {
8302 f
= framesPer24Hours
+ f
;
8305 f
= f
% framesPer24Hours
;
8307 var d
= Math
.floor(f
/ framesPer10Minutes
);
8308 var m
= f
% framesPer10Minutes
;
8309 f
= f
+ dropFrames
* 9 * d
;
8310 if (m
> dropFrames
) {
8311 f
= f
+ dropFrames
* Math
.floor((m
- dropFrames
) / Math
.round(timeBase
* 60 - dropFrames
));
8314 var timeBaseDivision
= Math
.floor(f
/ timeBase
);
8316 hours
= Math
.floor(Math
.floor(timeBaseDivision
/ 60) / 60);
8317 minutes
= Math
.floor(timeBaseDivision
/ 60) % 60;
8319 if (showFrameCount
) {
8320 seconds
= timeBaseDivision
% 60;
8322 seconds
= Math
.floor(f
/ timeBase
% 60).toFixed(secondsDecimalLength
);
8325 hours
= Math
.floor(time
/ 3600) % 24;
8326 minutes
= Math
.floor(time
/ 60) % 60;
8327 if (showFrameCount
) {
8328 seconds
= Math
.floor(time
% 60);
8330 seconds
= Math
.floor(time
% 60).toFixed(secondsDecimalLength
);
8333 hours
= hours
<= 0 ? 0 : hours
;
8334 minutes
= minutes
<= 0 ? 0 : minutes
;
8335 seconds
= seconds
<= 0 ? 0 : seconds
;
8337 seconds
= seconds
=== 60 ? 0 : seconds
;
8338 minutes
= minutes
=== 60 ? 0 : minutes
;
8340 var timeFormatFrags
= timeFormat
.split(':');
8341 var timeFormatSettings
= {};
8342 for (var i
= 0, total
= timeFormatFrags
.length
; i
< total
; ++i
) {
8344 for (var j
= 0, t
= timeFormatFrags
[i
].length
; j
< t
; j
++) {
8345 if (unique
.indexOf(timeFormatFrags
[i
][j
]) < 0) {
8346 unique
+= timeFormatFrags
[i
][j
];
8349 if (~['f', 's', 'm', 'h'].indexOf(unique
)) {
8350 timeFormatSettings
[unique
] = timeFormatFrags
[i
].length
;
8354 var result
= forceHours
|| hours
> 0 ? (hours
< 10 && timeFormatSettings
.h
> 1 ? '0' + hours
: hours
) + ':' : '';
8355 result
+= (minutes
< 10 && timeFormatSettings
.m
> 1 ? '0' + minutes
: minutes
) + ':';
8356 result
+= '' + (seconds
< 10 && timeFormatSettings
.s
> 1 ? '0' + seconds
: seconds
);
8358 if (showFrameCount
) {
8359 frames
= (f
% timeBase
).toFixed(0);
8360 frames
= frames
<= 0 ? 0 : frames
;
8361 result
+= frames
< 10 && timeFormatSettings
.f
? frameSep
+ '0' + frames
: '' + frameSep
+ frames
;
8367 function timeCodeToSeconds(time
) {
8368 var fps
= arguments
.length
> 1 && arguments
[1] !== undefined ? arguments
[1] : 25;
8371 if (typeof time
!== 'string') {
8372 throw new TypeError('Time must be a string');
8375 if (time
.indexOf(';') > 0) {
8376 time
= time
.replace(';', ':');
8379 if (!/\d{2}(\:\d{2}){0,3}/i.test(time
)) {
8380 throw new TypeError('Time code must have the format `00:00:00`');
8383 var parts
= time
.split(':');
8385 var output
= void 0,
8391 dropFrames
= Math
.round(fps
* 0.066666),
8392 timeBase
= Math
.round(fps
),
8393 hFrames
= timeBase
* 3600,
8394 mFrames
= timeBase
* 60;
8396 switch (parts
.length
) {
8399 seconds
= parseInt(parts
[0], 10);
8402 minutes
= parseInt(parts
[0], 10);
8403 seconds
= parseInt(parts
[1], 10);
8406 hours
= parseInt(parts
[0], 10);
8407 minutes
= parseInt(parts
[1], 10);
8408 seconds
= parseInt(parts
[2], 10);
8411 hours
= parseInt(parts
[0], 10);
8412 minutes
= parseInt(parts
[1], 10);
8413 seconds
= parseInt(parts
[2], 10);
8414 frames
= parseInt(parts
[3], 10);
8418 if (isDropFrame(fps
)) {
8419 totalMinutes
= 60 * hours
+ minutes
;
8420 output
= hFrames
* hours
+ mFrames
* minutes
+ timeBase
* seconds
+ frames
- dropFrames
* (totalMinutes
- Math
.floor(totalMinutes
/ 10));
8422 output
= (hFrames
* hours
+ mFrames
* minutes
+ fps
* seconds
+ frames
) / fps
;
8425 return parseFloat(output
.toFixed(3));
8428 function calculateTimeFormat(time
, options
) {
8429 var fps
= arguments
.length
> 2 && arguments
[2] !== undefined ? arguments
[2] : 25;
8432 time
= !time
|| typeof time
!== 'number' || time
< 0 ? 0 : time
;
8434 var hours
= Math
.floor(time
/ 3600) % 24,
8435 minutes
= Math
.floor(time
/ 60) % 60,
8436 seconds
= Math
.floor(time
% 60),
8437 frames
= Math
.floor((time
% 1 * fps
).toFixed(3)),
8438 lis
= [[frames
, 'f'], [seconds
, 's'], [minutes
, 'm'], [hours
, 'h']];
8440 var format
= options
.timeFormat
,
8441 firstTwoPlaces
= format
[1] === format
[0],
8442 separatorIndex
= firstTwoPlaces
? 2 : 1,
8443 separator
= format
.length
< separatorIndex
? format
[separatorIndex
] : ':',
8444 firstChar
= format
[0],
8447 for (var i
= 0, len
= lis
.length
; i
< len
; i
++) {
8448 if (~format
.indexOf(lis
[i
][1])) {
8450 } else if (required
) {
8451 var hasNextValue
= false;
8452 for (var j
= i
; j
< len
; j
++) {
8453 if (lis
[j
][0] > 0) {
8454 hasNextValue
= true;
8459 if (!hasNextValue
) {
8463 if (!firstTwoPlaces
) {
8464 format
= firstChar
+ format
;
8466 format
= lis
[i
][1] + separator
+ format
;
8467 if (firstTwoPlaces
) {
8468 format
= lis
[i
][1] + format
;
8470 firstChar
= lis
[i
][1];
8474 options
.timeFormat
= format
;
8477 function convertSMPTEtoSeconds(SMPTE
) {
8479 if (typeof SMPTE
!== 'string') {
8480 throw new TypeError('Argument must be a string value');
8483 SMPTE
= SMPTE
.replace(',', '.');
8485 var decimalLen
= ~SMPTE
.indexOf('.') ? SMPTE
.split('.')[1].length
: 0;
8490 SMPTE
= SMPTE
.split(':').reverse();
8492 for (var i
= 0, total
= SMPTE
.length
; i
< total
; i
++) {
8495 multiplier
= Math
.pow(60, i
);
8497 secs
+= Number(SMPTE
[i
]) * multiplier
;
8499 return Number(secs
.toFixed(decimalLen
));
8502 _mejs2
.default.Utils
= _mejs2
.default.Utils
|| {};
8503 _mejs2
.default.Utils
.secondsToTimeCode
= secondsToTimeCode
;
8504 _mejs2
.default.Utils
.timeCodeToSeconds
= timeCodeToSeconds
;
8505 _mejs2
.default.Utils
.calculateTimeFormat
= calculateTimeFormat
;
8506 _mejs2
.default.Utils
.convertSMPTEtoSeconds
= convertSMPTEtoSeconds
;
8508 },{"7":7}]},{},[29,6,5,15,23,20,19,21,22,24,16,18,17,9,10,11,12,13,14]);