[SPIP] ~spip v3.2.0-->v3.2.1
[lhc/web/www.git] / www / plugins-dist / medias / lib / mejs / mediaelement-and-player.js
1 /*!
2 * MediaElement.js
3 * http://www.mediaelementjs.com/
4 *
5 * Wrapper that mimics native HTML5 MediaElement (audio and video)
6 * using a variety of technologies (pure JavaScript, Flash, iframe)
7 *
8 * Copyright 2010-2017, John Dyer (http://j.hn/)
9 * License: MIT
10 *
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){
12
13 },{}],2:[function(_dereq_,module,exports){
14 (function (global){
15 var topLevel = typeof global !== 'undefined' ? global :
16 typeof window !== 'undefined' ? window : {}
17 var minDoc = _dereq_(1);
18
19 var doccy;
20
21 if (typeof document !== 'undefined') {
22 doccy = document;
23 } else {
24 doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];
25
26 if (!doccy) {
27 doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;
28 }
29 }
30
31 module.exports = doccy;
32
33 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
34 },{"1":1}],3:[function(_dereq_,module,exports){
35 (function (global){
36 var win;
37
38 if (typeof window !== "undefined") {
39 win = window;
40 } else if (typeof global !== "undefined") {
41 win = global;
42 } else if (typeof self !== "undefined"){
43 win = self;
44 } else {
45 win = {};
46 }
47
48 module.exports = win;
49
50 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
51 },{}],4:[function(_dereq_,module,exports){
52 (function (root) {
53
54 // Store setTimeout reference so promise-polyfill will be unaffected by
55 // other code modifying setTimeout (like sinon.useFakeTimers())
56 var setTimeoutFunc = setTimeout;
57
58 function noop() {}
59
60 // Polyfill for Function.prototype.bind
61 function bind(fn, thisArg) {
62 return function () {
63 fn.apply(thisArg, arguments);
64 };
65 }
66
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');
70 this._state = 0;
71 this._handled = false;
72 this._value = undefined;
73 this._deferreds = [];
74
75 doResolve(fn, this);
76 }
77
78 function handle(self, deferred) {
79 while (self._state === 3) {
80 self = self._value;
81 }
82 if (self._state === 0) {
83 self._deferreds.push(deferred);
84 return;
85 }
86 self._handled = true;
87 Promise._immediateFn(function () {
88 var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
89 if (cb === null) {
90 (self._state === 1 ? resolve : reject)(deferred.promise, self._value);
91 return;
92 }
93 var ret;
94 try {
95 ret = cb(self._value);
96 } catch (e) {
97 reject(deferred.promise, e);
98 return;
99 }
100 resolve(deferred.promise, ret);
101 });
102 }
103
104 function resolve(self, newValue) {
105 try {
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) {
111 self._state = 3;
112 self._value = newValue;
113 finale(self);
114 return;
115 } else if (typeof then === 'function') {
116 doResolve(bind(then, newValue), self);
117 return;
118 }
119 }
120 self._state = 1;
121 self._value = newValue;
122 finale(self);
123 } catch (e) {
124 reject(self, e);
125 }
126 }
127
128 function reject(self, newValue) {
129 self._state = 2;
130 self._value = newValue;
131 finale(self);
132 }
133
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);
139 }
140 });
141 }
142
143 for (var i = 0, len = self._deferreds.length; i < len; i++) {
144 handle(self, self._deferreds[i]);
145 }
146 self._deferreds = null;
147 }
148
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;
153 }
154
155 /**
156 * Take a potentially misbehaving resolver function and make sure
157 * onFulfilled and onRejected are only called once.
158 *
159 * Makes no guarantees about asynchrony.
160 */
161 function doResolve(fn, self) {
162 var done = false;
163 try {
164 fn(function (value) {
165 if (done) return;
166 done = true;
167 resolve(self, value);
168 }, function (reason) {
169 if (done) return;
170 done = true;
171 reject(self, reason);
172 });
173 } catch (ex) {
174 if (done) return;
175 done = true;
176 reject(self, ex);
177 }
178 }
179
180 Promise.prototype['catch'] = function (onRejected) {
181 return this.then(null, onRejected);
182 };
183
184 Promise.prototype.then = function (onFulfilled, onRejected) {
185 var prom = new (this.constructor)(noop);
186
187 handle(this, new Handler(onFulfilled, onRejected, prom));
188 return prom;
189 };
190
191 Promise.all = function (arr) {
192 var args = Array.prototype.slice.call(arr);
193
194 return new Promise(function (resolve, reject) {
195 if (args.length === 0) return resolve([]);
196 var remaining = args.length;
197
198 function res(i, val) {
199 try {
200 if (val && (typeof val === 'object' || typeof val === 'function')) {
201 var then = val.then;
202 if (typeof then === 'function') {
203 then.call(val, function (val) {
204 res(i, val);
205 }, reject);
206 return;
207 }
208 }
209 args[i] = val;
210 if (--remaining === 0) {
211 resolve(args);
212 }
213 } catch (ex) {
214 reject(ex);
215 }
216 }
217
218 for (var i = 0; i < args.length; i++) {
219 res(i, args[i]);
220 }
221 });
222 };
223
224 Promise.resolve = function (value) {
225 if (value && typeof value === 'object' && value.constructor === Promise) {
226 return value;
227 }
228
229 return new Promise(function (resolve) {
230 resolve(value);
231 });
232 };
233
234 Promise.reject = function (value) {
235 return new Promise(function (resolve, reject) {
236 reject(value);
237 });
238 };
239
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);
244 }
245 });
246 };
247
248 // Use polyfill for setImmediate for performance gains
249 Promise._immediateFn = (typeof setImmediate === 'function' && function (fn) { setImmediate(fn); }) ||
250 function (fn) {
251 setTimeoutFunc(fn, 0);
252 };
253
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
257 }
258 };
259
260 /**
261 * Set the immediate function to execute callbacks
262 * @param fn {function} Function to execute
263 * @deprecated
264 */
265 Promise._setImmediateFn = function _setImmediateFn(fn) {
266 Promise._immediateFn = fn;
267 };
268
269 /**
270 * Change the function to execute on unhandled rejection
271 * @param {function} fn Function to execute on unhandled rejection
272 * @deprecated
273 */
274 Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {
275 Promise._unhandledRejectionFn = fn;
276 };
277
278 if (typeof module !== 'undefined' && module.exports) {
279 module.exports = Promise;
280 } else if (!root.Promise) {
281 root.Promise = Promise;
282 }
283
284 })(this);
285
286 },{}],5:[function(_dereq_,module,exports){
287 'use strict';
288
289 Object.defineProperty(exports, "__esModule", {
290 value: true
291 });
292
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; };
294
295 var _mejs = _dereq_(7);
296
297 var _mejs2 = _interopRequireDefault(_mejs);
298
299 var _en = _dereq_(15);
300
301 var _general = _dereq_(27);
302
303 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
304
305 var i18n = { lang: 'en', en: _en.EN };
306
307 i18n.language = function () {
308 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
309 args[_key] = arguments[_key];
310 }
311
312 if (args !== null && args !== undefined && args.length) {
313
314 if (typeof args[0] !== 'string') {
315 throw new TypeError('Language code must be a string value');
316 }
317
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');
320 }
321
322 i18n.lang = args[0];
323
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];
329 }
330 }
331
332 return i18n.lang;
333 };
334
335 i18n.t = function (message) {
336 var pluralParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
337
338
339 if (typeof message === 'string' && message.length) {
340
341 var str = void 0,
342 pluralForm = void 0;
343
344 var language = i18n.language();
345
346 var _plural = function _plural(input, number, form) {
347
348 if ((typeof input === 'undefined' ? 'undefined' : _typeof(input)) !== 'object' || typeof number !== 'number' || typeof form !== 'number') {
349 return input;
350 }
351
352 var _pluralForms = function () {
353 return [function () {
354 return arguments.length <= 1 ? undefined : arguments[1];
355 }, function () {
356 return (arguments.length <= 0 ? undefined : arguments[0]) === 1 ? arguments.length <= 1 ? undefined : arguments[1] : arguments.length <= 2 ? undefined : arguments[2];
357 }, function () {
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];
359 }, function () {
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];
364 } else {
365 return arguments.length <= 3 ? undefined : arguments[3];
366 }
367 }, function () {
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];
374 } else {
375 return arguments.length <= 4 ? undefined : arguments[4];
376 }
377 }, function () {
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];
382 } else {
383 return arguments.length <= 3 ? undefined : arguments[3];
384 }
385 }, function () {
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];
390 } else {
391 return [3];
392 }
393 }, function () {
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];
398 } else {
399 return arguments.length <= 3 ? undefined : arguments[3];
400 }
401 }, function () {
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];
406 } else {
407 return arguments.length <= 3 ? undefined : arguments[3];
408 }
409 }, function () {
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];
414 } else {
415 return arguments.length <= 3 ? undefined : arguments[3];
416 }
417 }, function () {
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];
424 } else {
425 return arguments.length <= 1 ? undefined : arguments[1];
426 }
427 }, function () {
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];
436 } else {
437 return arguments.length <= 5 ? undefined : arguments[5];
438 }
439 }, function () {
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];
450 } else {
451 return arguments.length <= 6 ? undefined : arguments[6];
452 }
453 }, function () {
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];
460 } else {
461 return arguments.length <= 4 ? undefined : arguments[4];
462 }
463 }, function () {
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];
468 } else {
469 return arguments.length <= 3 ? undefined : arguments[3];
470 }
471 }, function () {
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];
473 }, function () {
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];
478 } else {
479 return arguments.length <= 3 ? undefined : arguments[3];
480 }
481 }, function () {
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];
488 } else {
489 return arguments.length <= 4 ? undefined : arguments[4];
490 }
491 }, function () {
492 return (arguments.length <= 0 ? undefined : arguments[0]) === 0 ? arguments.length <= 1 ? undefined : arguments[1] : arguments.length <= 2 ? undefined : arguments[2];
493 }, function () {
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];
500 } else {
501 return arguments.length <= 4 ? undefined : arguments[4];
502 }
503 }, function () {
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];
508 } else {
509 return arguments.length <= 3 ? undefined : arguments[3];
510 }
511 }];
512 }();
513
514 return _pluralForms[form].apply(null, [number].concat(input));
515 };
516
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]);
522 }
523 }
524
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]);
530 }
531 }
532
533 str = str || message;
534
535 if (pluralParam !== null && typeof pluralParam === 'number') {
536 str = str.replace('%1', pluralParam);
537 }
538
539 return (0, _general.escapeHTML)(str);
540 }
541
542 return message;
543 };
544
545 _mejs2.default.i18n = i18n;
546
547 if (typeof mejsL10n !== 'undefined') {
548 _mejs2.default.i18n.language(mejsL10n.language, mejsL10n.strings);
549 }
550
551 exports.default = i18n;
552
553 },{"15":15,"27":27,"7":7}],6:[function(_dereq_,module,exports){
554 'use strict';
555
556 Object.defineProperty(exports, "__esModule", {
557 value: true
558 });
559
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; };
561
562 var _window = _dereq_(3);
563
564 var _window2 = _interopRequireDefault(_window);
565
566 var _document = _dereq_(2);
567
568 var _document2 = _interopRequireDefault(_document);
569
570 var _mejs = _dereq_(7);
571
572 var _mejs2 = _interopRequireDefault(_mejs);
573
574 var _general = _dereq_(27);
575
576 var _media2 = _dereq_(28);
577
578 var _renderer = _dereq_(8);
579
580 var _constants = _dereq_(25);
581
582 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
583
584 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
585
586 var MediaElement = function MediaElement(idOrNode, options, sources) {
587 var _this = this;
588
589 _classCallCheck(this, MediaElement);
590
591 var t = this;
592
593 sources = Array.isArray(sources) ? sources : null;
594
595 t.defaults = {
596 renderers: [],
597
598 fakeNodeName: 'mediaelementwrapper',
599
600 pluginPath: 'build/',
601
602 shimScriptAccess: 'sameDomain'
603 };
604
605 options = Object.assign(t.defaults, options);
606
607 t.mediaElement = _document2.default.createElement(options.fakeNodeName);
608
609 var id = idOrNode,
610 error = false;
611
612 if (typeof idOrNode === 'string') {
613 t.mediaElement.originalNode = _document2.default.getElementById(idOrNode);
614 } else {
615 t.mediaElement.originalNode = idOrNode;
616 id = idOrNode.id;
617 }
618
619 if (t.mediaElement.originalNode === undefined || t.mediaElement.originalNode === null) {
620 return null;
621 }
622
623 t.mediaElement.options = options;
624 id = id || 'mejs_' + Math.random().toString().slice(2);
625
626 t.mediaElement.originalNode.setAttribute('id', id + '_from_mejs');
627
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');
631 }
632
633 t.mediaElement.originalNode.parentNode.insertBefore(t.mediaElement, t.mediaElement.originalNode);
634
635 t.mediaElement.appendChild(t.mediaElement.originalNode);
636
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);
645 return blobUrl;
646 }
647 return url;
648 };
649 xhr.open('GET', url);
650 xhr.responseType = 'blob';
651 xhr.send();
652 }
653
654 return url;
655 };
656
657 var mediaFiles = void 0;
658
659 if (sources !== null) {
660 mediaFiles = sources;
661 } else if (t.mediaElement.originalNode !== null) {
662
663 mediaFiles = [];
664
665 switch (t.mediaElement.originalNode.nodeName.toLowerCase()) {
666 case 'iframe':
667 mediaFiles.push({
668 type: '',
669 src: t.mediaElement.originalNode.getAttribute('src')
670 });
671 break;
672 case 'audio':
673 case 'video':
674 var _sources = t.mediaElement.originalNode.children.length,
675 nodeSource = t.mediaElement.originalNode.getAttribute('src');
676
677 if (nodeSource) {
678 var node = t.mediaElement.originalNode,
679 type = (0, _media2.formatType)(nodeSource, node.getAttribute('type'));
680 mediaFiles.push({
681 type: type,
682 src: processURL(nodeSource, type)
683 });
684 }
685
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) });
692 }
693 }
694 break;
695 }
696 }
697
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;
704
705 t.mediaElement.changeRenderer = function (rendererName, mediaFiles) {
706
707 var t = _this,
708 media = Object.keys(mediaFiles[0]).length > 2 ? mediaFiles[0] : mediaFiles[0].src;
709
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();
714 }
715 t.mediaElement.renderer.show();
716 t.mediaElement.renderer.setSrc(media);
717 return true;
718 }
719
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();
724 }
725 t.mediaElement.renderer.hide();
726 }
727
728 var newRenderer = t.mediaElement.renderers[rendererName],
729 newRendererType = null;
730
731 if (newRenderer !== undefined && newRenderer !== null) {
732 newRenderer.show();
733 newRenderer.setSrc(media);
734 t.mediaElement.renderer = newRenderer;
735 t.mediaElement.rendererName = rendererName;
736 return true;
737 }
738
739 var rendererArray = t.mediaElement.options.renderers.length ? t.mediaElement.options.renderers : _renderer.renderer.order;
740
741 for (var _i = 0, total = rendererArray.length; _i < total; _i++) {
742 var index = rendererArray[_i];
743
744 if (index === rendererName) {
745 var rendererList = _renderer.renderer.renderers;
746 newRendererType = rendererList[index];
747
748 var renderOptions = Object.assign(newRendererType.options, t.mediaElement.options);
749 newRenderer = newRendererType.create(t.mediaElement, renderOptions, mediaFiles);
750 newRenderer.name = rendererName;
751
752 t.mediaElement.renderers[newRendererType.name] = newRenderer;
753 t.mediaElement.renderer = newRenderer;
754 t.mediaElement.rendererName = rendererName;
755 newRenderer.show();
756 return true;
757 }
758 }
759
760 return false;
761 };
762
763 t.mediaElement.setSize = function (width, height) {
764 if (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null) {
765 t.mediaElement.renderer.setSize(width, height);
766 }
767 };
768
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);
776 error = true;
777 };
778
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]);
785 },
786 setFn = function setFn(newValue) {
787 oldValue = onSet.apply(obj, [newValue]);
788 return oldValue;
789 };
790
791 Object.defineProperty(obj, name, {
792 get: getFn,
793 set: setFn
794 });
795 },
796 assignGettersSetters = function assignGettersSetters(propName) {
797 if (propName !== 'src') {
798
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;
802 },
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);
806 }
807 };
808
809 addProperty(t.mediaElement, propName, getFn, setFn);
810 t.mediaElement['get' + capName] = getFn;
811 t.mediaElement['set' + capName] = setFn;
812 }
813 },
814 getSrc = function getSrc() {
815 return t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null ? t.mediaElement.renderer.getSrc() : null;
816 },
817 setSrc = function setSrc(value) {
818 var mediaFiles = [];
819
820 if (typeof value === 'string') {
821 mediaFiles.push({
822 src: value,
823 type: value ? (0, _media2.getTypeFromFile)(value) : ''
824 });
825 } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src !== undefined) {
826 var _src = (0, _media2.absolutizeUrl)(value.src),
827 _type2 = value.type,
828 media = Object.assign(value, {
829 src: _src,
830 type: (_type2 === '' || _type2 === null || _type2 === undefined) && _src ? (0, _media2.getTypeFromFile)(_src) : _type2
831 });
832 mediaFiles.push(media);
833 } else if (Array.isArray(value)) {
834 for (var _i2 = 0, total = value.length; _i2 < total; _i2++) {
835
836 var _src2 = (0, _media2.absolutizeUrl)(value[_i2].src),
837 _type3 = value[_i2].type,
838 _media = Object.assign(value[_i2], {
839 src: _src2,
840 type: (_type3 === '' || _type3 === null || _type3 === undefined) && _src2 ? (0, _media2.getTypeFromFile)(_src2) : _type3
841 });
842
843 mediaFiles.push(_media);
844 }
845 }
846
847 var renderInfo = _renderer.renderer.select(mediaFiles, t.mediaElement.options.renderers.length ? t.mediaElement.options.renderers : []),
848 event = void 0;
849
850 if (!t.mediaElement.paused) {
851 t.mediaElement.pause();
852 event = (0, _general.createEvent)('pause', t.mediaElement);
853 t.mediaElement.dispatchEvent(event);
854 }
855 t.mediaElement.originalNode.src = mediaFiles[0].src || '';
856
857 if (renderInfo === null && mediaFiles[0].src) {
858 t.mediaElement.generateError('No renderer found', mediaFiles);
859 return;
860 }
861
862 return mediaFiles[0].src ? t.mediaElement.changeRenderer(renderInfo.rendererName, mediaFiles) : null;
863 },
864 triggerAction = function triggerAction(methodName, args) {
865 try {
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();
877 }
878 });
879 }
880 }, 150);
881 }
882 });
883 }
884 } else {
885 t.mediaElement.renderer[methodName](args);
886 }
887 } catch (e) {
888 t.mediaElement.generateError(e, mediaFiles);
889 }
890 },
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];
895 }
896
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);
903 });
904 } else {
905 triggerAction(methodName, args);
906 }
907 }
908 return null;
909 };
910 };
911
912 addProperty(t.mediaElement, 'src', getSrc, setSrc);
913 t.mediaElement.getSrc = getSrc;
914 t.mediaElement.setSrc = setSrc;
915
916 for (var _i3 = 0, total = props.length; _i3 < total; _i3++) {
917 assignGettersSetters(props[_i3]);
918 }
919
920 for (var _i4 = 0, _total = methods.length; _i4 < _total; _i4++) {
921 assignMethods(methods[_i4]);
922 }
923
924 t.mediaElement.addEventListener = function (eventName, callback) {
925 t.mediaElement.events[eventName] = t.mediaElement.events[eventName] || [];
926
927 t.mediaElement.events[eventName].push(callback);
928 };
929 t.mediaElement.removeEventListener = function (eventName, callback) {
930 if (!eventName) {
931 t.mediaElement.events = {};
932 return true;
933 }
934
935 var callbacks = t.mediaElement.events[eventName];
936
937 if (!callbacks) {
938 return true;
939 }
940
941 if (!callback) {
942 t.mediaElement.events[eventName] = [];
943 return true;
944 }
945
946 for (var _i5 = 0; _i5 < callbacks.length; _i5++) {
947 if (callbacks[_i5] === callback) {
948 t.mediaElement.events[eventName].splice(_i5, 1);
949 return true;
950 }
951 }
952 return false;
953 };
954
955 t.mediaElement.dispatchEvent = function (event) {
956 var callbacks = t.mediaElement.events[event.type];
957 if (callbacks) {
958 for (var _i6 = 0; _i6 < callbacks.length; _i6++) {
959 callbacks[_i6].apply(null, [event]);
960 }
961 }
962 };
963
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);
971 };
972
973 if (mediaFiles.length) {
974 t.mediaElement.src = mediaFiles;
975 }
976
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);
981 }
982 }).catch(function () {
983 if (error && t.mediaElement.options.error) {
984 t.mediaElement.options.error(t.mediaElement, t.mediaElement.originalNode);
985 }
986 });
987 } else {
988 if (t.mediaElement.options.success) {
989 t.mediaElement.options.success(t.mediaElement, t.mediaElement.originalNode);
990 }
991
992 if (error && t.mediaElement.options.error) {
993 t.mediaElement.options.error(t.mediaElement, t.mediaElement.originalNode);
994 }
995 }
996
997 return t.mediaElement;
998 };
999
1000 _window2.default.MediaElement = MediaElement;
1001 _mejs2.default.MediaElement = MediaElement;
1002
1003 exports.default = MediaElement;
1004
1005 },{"2":2,"25":25,"27":27,"28":28,"3":3,"7":7,"8":8}],7:[function(_dereq_,module,exports){
1006 'use strict';
1007
1008 Object.defineProperty(exports, "__esModule", {
1009 value: true
1010 });
1011
1012 var _window = _dereq_(3);
1013
1014 var _window2 = _interopRequireDefault(_window);
1015
1016 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1017
1018 var mejs = {};
1019
1020 mejs.version = '4.2.7';
1021
1022 mejs.html5media = {
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'],
1025
1026 methods: ['load', 'play', 'pause', 'canPlayType'],
1027
1028 events: ['loadstart', 'durationchange', 'loadedmetadata', 'loadeddata', 'progress', 'canplay', 'canplaythrough', 'suspend', 'abort', 'error', 'emptied', 'stalled', 'play', 'playing', 'pause', 'waiting', 'seeking', 'seeked', 'timeupdate', 'ended', 'ratechange', 'volumechange'],
1029
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']
1031 };
1032
1033 _window2.default.mejs = mejs;
1034
1035 exports.default = mejs;
1036
1037 },{"3":3}],8:[function(_dereq_,module,exports){
1038 'use strict';
1039
1040 Object.defineProperty(exports, "__esModule", {
1041 value: true
1042 });
1043 exports.renderer = undefined;
1044
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; };
1046
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; }; }();
1048
1049 var _mejs = _dereq_(7);
1050
1051 var _mejs2 = _interopRequireDefault(_mejs);
1052
1053 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1054
1055 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1056
1057 var Renderer = function () {
1058 function Renderer() {
1059 _classCallCheck(this, Renderer);
1060
1061 this.renderers = {};
1062 this.order = [];
1063 }
1064
1065 _createClass(Renderer, [{
1066 key: 'add',
1067 value: function add(renderer) {
1068 if (renderer.name === undefined) {
1069 throw new TypeError('renderer must contain at least `name` property');
1070 }
1071
1072 this.renderers[renderer.name] = renderer;
1073 this.order.push(renderer.name);
1074 }
1075 }, {
1076 key: 'select',
1077 value: function select(mediaFiles) {
1078 var renderers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
1079
1080 var renderersLength = renderers.length;
1081
1082 renderers = renderers.length ? renderers : this.order;
1083
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)) {
1089 return i;
1090 }
1091 }
1092 return rendererIndicator.length;
1093 };
1094
1095 renderers.sort(function (a, b) {
1096 return rendererRanking(a) - rendererRanking(b);
1097 });
1098 }
1099
1100 for (var i = 0, total = renderers.length; i < total; i++) {
1101 var key = renderers[i],
1102 _renderer = this.renderers[key];
1103
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)) {
1107 return {
1108 rendererName: _renderer.name,
1109 src: mediaFiles[j].src
1110 };
1111 }
1112 }
1113 }
1114 }
1115
1116 return null;
1117 }
1118 }, {
1119 key: 'order',
1120 set: function set(order) {
1121 if (!Array.isArray(order)) {
1122 throw new TypeError('order must be an array of strings.');
1123 }
1124
1125 this._order = order;
1126 },
1127 get: function get() {
1128 return this._order;
1129 }
1130 }, {
1131 key: 'renderers',
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.');
1135 }
1136
1137 this._renderers = renderers;
1138 },
1139 get: function get() {
1140 return this._renderers;
1141 }
1142 }]);
1143
1144 return Renderer;
1145 }();
1146
1147 var renderer = exports.renderer = new Renderer();
1148
1149 _mejs2.default.Renderers = renderer;
1150
1151 },{"7":7}],9:[function(_dereq_,module,exports){
1152 'use strict';
1153
1154 var _window = _dereq_(3);
1155
1156 var _window2 = _interopRequireDefault(_window);
1157
1158 var _document = _dereq_(2);
1159
1160 var _document2 = _interopRequireDefault(_document);
1161
1162 var _i18n = _dereq_(5);
1163
1164 var _i18n2 = _interopRequireDefault(_i18n);
1165
1166 var _player = _dereq_(16);
1167
1168 var _player2 = _interopRequireDefault(_player);
1169
1170 var _constants = _dereq_(25);
1171
1172 var Features = _interopRequireWildcard(_constants);
1173
1174 var _general = _dereq_(27);
1175
1176 var _dom = _dereq_(26);
1177
1178 var _media = _dereq_(28);
1179
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; } }
1181
1182 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1183
1184 Object.assign(_player.config, {
1185 usePluginFullScreen: true,
1186
1187 fullscreenText: null,
1188
1189 useFakeFullscreen: false
1190 });
1191
1192 Object.assign(_player2.default.prototype, {
1193 isFullScreen: false,
1194
1195 isNativeFullScreen: false,
1196
1197 isInIframe: false,
1198
1199 isPluginClickThroughCreated: false,
1200
1201 fullscreenMode: '',
1202
1203 containerSizeTimeout: null,
1204
1205 buildfullscreen: function buildfullscreen(player) {
1206 if (!player.isVideo) {
1207 return;
1208 }
1209
1210 player.isInIframe = _window2.default.location !== _window2.default.parent.location;
1211
1212 player.detectFullscreenMode();
1213
1214 var t = this,
1215 fullscreenTitle = (0, _general.isString)(t.options.fullscreenText) ? t.options.fullscreenText : _i18n2.default.t('mejs.fullscreen'),
1216 fullscreenBtn = _document2.default.createElement('div');
1217
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');
1221
1222 fullscreenBtn.addEventListener('click', function () {
1223 var isFullScreen = Features.HAS_TRUE_NATIVE_FULLSCREEN && Features.IS_FULLSCREEN || player.isFullScreen;
1224
1225 if (isFullScreen) {
1226 player.exitFullScreen();
1227 } else {
1228 player.enterFullScreen();
1229 }
1230 });
1231
1232 player.fullscreenBtn = fullscreenBtn;
1233
1234 t.options.keyActions.push({
1235 keys: [70],
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();
1241 } else {
1242 player.enterFullScreen();
1243 }
1244 }
1245 }
1246 }
1247 });
1248
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();
1253 }
1254 };
1255
1256 t.globalBind('keydown', t.exitFullscreenCallback);
1257
1258 t.normalHeight = 0;
1259 t.normalWidth = 0;
1260
1261 if (Features.HAS_TRUE_NATIVE_FULLSCREEN) {
1262 var fullscreenChanged = function fullscreenChanged() {
1263 if (player.isFullScreen) {
1264 if (Features.isFullScreen()) {
1265 player.isNativeFullScreen = true;
1266
1267 player.setControlsSize();
1268 } else {
1269 player.isNativeFullScreen = false;
1270
1271 player.exitFullScreen();
1272 }
1273 }
1274 };
1275
1276 player.globalBind(Features.FULLSCREEN_EVENT_NAME, fullscreenChanged);
1277 }
1278 },
1279 cleanfullscreen: function cleanfullscreen(player) {
1280 player.exitFullScreen();
1281 player.globalUnbind('keydown', player.exitFullscreenCallback);
1282 },
1283 detectFullscreenMode: function detectFullscreenMode() {
1284 var t = this,
1285 isNative = t.media.rendererName !== null && /(native|html5)/i.test(t.media.rendererName);
1286
1287 var mode = '';
1288
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';
1295 }
1296
1297 t.fullscreenMode = mode;
1298 return mode;
1299 },
1300 enterFullScreen: function enterFullScreen() {
1301 var t = this,
1302 isNative = t.media.rendererName !== null && /(html5|native)/i.test(t.media.rendererName),
1303 containerStyles = getComputedStyle(t.getElement(t.container));
1304
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();
1307 return;
1308 }
1309
1310 (0, _dom.addClass)(_document2.default.documentElement, t.options.classPrefix + 'fullscreen');
1311 (0, _dom.addClass)(t.getElement(t.container), t.options.classPrefix + 'container-fullscreen');
1312
1313 t.normalHeight = parseFloat(containerStyles.height);
1314 t.normalWidth = parseFloat(containerStyles.width);
1315
1316 if (t.fullscreenMode === 'native-native' || t.fullscreenMode === 'plugin-native') {
1317 Features.requestFullScreen(t.getElement(t.container));
1318
1319 if (t.isInIframe) {
1320 setTimeout(function checkFullscreen() {
1321
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;
1328
1329 if (absDiff > marginError) {
1330 t.exitFullScreen();
1331 } else {
1332 setTimeout(checkFullscreen, 500);
1333 }
1334 }
1335 }, 1000);
1336 }
1337 }
1338
1339 t.getElement(t.container).style.width = '100%';
1340 t.getElement(t.container).style.height = '100%';
1341
1342 t.containerSizeTimeout = setTimeout(function () {
1343 t.getElement(t.container).style.width = '100%';
1344 t.getElement(t.container).style.height = '100%';
1345 t.setControlsSize();
1346 }, 500);
1347
1348 if (isNative) {
1349 t.node.style.width = '100%';
1350 t.node.style.height = '100%';
1351 } else {
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%';
1357 }
1358 }
1359
1360 if (t.options.setDimensions && typeof t.media.setSize === 'function') {
1361 t.media.setSize(screen.width, screen.height);
1362 }
1363
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%';
1369 }
1370
1371 if (t.fullscreenBtn) {
1372 (0, _dom.removeClass)(t.fullscreenBtn, t.options.classPrefix + 'fullscreen');
1373 (0, _dom.addClass)(t.fullscreenBtn, t.options.classPrefix + 'unfullscreen');
1374 }
1375
1376 t.setControlsSize();
1377 t.isFullScreen = true;
1378
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');
1381 if (captionText) {
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';
1385 }
1386 var event = (0, _general.createEvent)('enteredfullscreen', t.getElement(t.container));
1387 t.getElement(t.container).dispatchEvent(event);
1388 },
1389 exitFullScreen: function exitFullScreen() {
1390 var t = this,
1391 isNative = t.media.rendererName !== null && /(native|html5)/i.test(t.media.rendererName);
1392
1393 clearTimeout(t.containerSizeTimeout);
1394
1395 if (Features.HAS_TRUE_NATIVE_FULLSCREEN && (Features.IS_FULLSCREEN || t.isFullScreen)) {
1396 Features.cancelFullScreen();
1397 }
1398
1399 (0, _dom.removeClass)(_document2.default.documentElement, t.options.classPrefix + 'fullscreen');
1400 (0, _dom.removeClass)(t.getElement(t.container), t.options.classPrefix + 'container-fullscreen');
1401
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';
1405
1406 if (isNative) {
1407 t.node.style.width = t.normalWidth + 'px';
1408 t.node.style.height = t.normalHeight + 'px';
1409 } else {
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';
1415 }
1416 }
1417
1418 if (typeof t.media.setSize === 'function') {
1419 t.media.setSize(t.normalWidth, t.normalHeight);
1420 }
1421
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';
1427 }
1428 }
1429
1430 if (t.fullscreenBtn) {
1431 (0, _dom.removeClass)(t.fullscreenBtn, t.options.classPrefix + 'unfullscreen');
1432 (0, _dom.addClass)(t.fullscreenBtn, t.options.classPrefix + 'fullscreen');
1433 }
1434
1435 t.setControlsSize();
1436 t.isFullScreen = false;
1437
1438 var captionText = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'captions-text');
1439 if (captionText) {
1440 captionText.style.fontSize = '';
1441 captionText.style.lineHeight = '';
1442 t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'captions-position').style.bottom = '';
1443 }
1444 var event = (0, _general.createEvent)('exitedfullscreen', t.getElement(t.container));
1445 t.getElement(t.container).dispatchEvent(event);
1446 }
1447 });
1448
1449 },{"16":16,"2":2,"25":25,"26":26,"27":27,"28":28,"3":3,"5":5}],10:[function(_dereq_,module,exports){
1450 'use strict';
1451
1452 var _document = _dereq_(2);
1453
1454 var _document2 = _interopRequireDefault(_document);
1455
1456 var _player = _dereq_(16);
1457
1458 var _player2 = _interopRequireDefault(_player);
1459
1460 var _i18n = _dereq_(5);
1461
1462 var _i18n2 = _interopRequireDefault(_i18n);
1463
1464 var _general = _dereq_(27);
1465
1466 var _dom = _dereq_(26);
1467
1468 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1469
1470 Object.assign(_player.config, {
1471 playText: null,
1472
1473 pauseText: null
1474 });
1475
1476 Object.assign(_player2.default.prototype, {
1477 buildplaypause: function buildplaypause(player, controls, layers, media) {
1478 var t = this,
1479 op = t.options,
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');
1483
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 () {
1487 if (t.paused) {
1488 t.play();
1489 } else {
1490 t.pause();
1491 }
1492 });
1493
1494 var playBtn = play.querySelector('button');
1495 t.addControlElement(play, 'playpause');
1496
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);
1504 } else {
1505
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);
1511 }
1512 }
1513
1514 togglePlayPause('pse');
1515
1516 media.addEventListener('loadedmetadata', function () {
1517 if (media.rendererName.indexOf('flash') === -1) {
1518 togglePlayPause('pse');
1519 }
1520 });
1521 media.addEventListener('play', function () {
1522 togglePlayPause('play');
1523 });
1524 media.addEventListener('playing', function () {
1525 togglePlayPause('play');
1526 });
1527 media.addEventListener('pause', function () {
1528 togglePlayPause('pse');
1529 });
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);
1537 }
1538 });
1539 }
1540 });
1541
1542 },{"16":16,"2":2,"26":26,"27":27,"5":5}],11:[function(_dereq_,module,exports){
1543 'use strict';
1544
1545 var _document = _dereq_(2);
1546
1547 var _document2 = _interopRequireDefault(_document);
1548
1549 var _player = _dereq_(16);
1550
1551 var _player2 = _interopRequireDefault(_player);
1552
1553 var _i18n = _dereq_(5);
1554
1555 var _i18n2 = _interopRequireDefault(_i18n);
1556
1557 var _constants = _dereq_(25);
1558
1559 var _time = _dereq_(30);
1560
1561 var _dom = _dereq_(26);
1562
1563 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1564
1565 Object.assign(_player.config, {
1566 enableProgressTooltip: true,
1567
1568 useSmoothHover: true,
1569
1570 forceLive: false
1571 });
1572
1573 Object.assign(_player2.default.prototype, {
1574 buildprogress: function buildprogress(player, controls, layers, media) {
1575
1576 var lastKeyPressTime = 0,
1577 mouseIsDown = false,
1578 startedPaused = false;
1579
1580 var t = this,
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');
1584
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>';
1587
1588 t.addControlElement(rail, 'progress');
1589
1590 t.options.keyActions.push({
1591 keys: [37, 227],
1592 action: function action(player) {
1593 if (!isNaN(player.duration) && player.duration > 0) {
1594 if (player.isVideo) {
1595 player.showControls();
1596 player.startControlsTimer();
1597 }
1598
1599 player.getElement(player.container).querySelector('.' + _player.config.classPrefix + 'time-total').focus();
1600
1601 var newTime = Math.max(player.currentTime - player.options.defaultSeekBackwardInterval(player), 0);
1602 player.setCurrentTime(newTime);
1603 }
1604 }
1605 }, {
1606 keys: [39, 228],
1607 action: function action(player) {
1608
1609 if (!isNaN(player.duration) && player.duration > 0) {
1610 if (player.isVideo) {
1611 player.showControls();
1612 player.startControlsTimer();
1613 }
1614
1615 player.getElement(player.container).querySelector('.' + _player.config.classPrefix + 'time-total').focus();
1616
1617 var newTime = Math.min(player.currentTime + player.options.defaultSeekForwardInterval(player), player.duration);
1618 player.setCurrentTime(newTime);
1619 }
1620 }
1621 });
1622
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');
1633 t.newTime = 0;
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;
1641 };
1642
1643 t.buffer.style.display = 'none';
1644
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';
1658 } else {
1659 return 'transform';
1660 }
1661 }(),
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) {
1668 return 'CSSMatrix';
1669 }
1670 }();
1671
1672 var percentage = 0,
1673 leftPos = 0,
1674 pos = 0,
1675 x = void 0;
1676
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;
1681 } else {
1682 x = e.pageX;
1683 }
1684
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;
1690 }
1691
1692 pos = x - offsetStyles.left;
1693 percentage = pos / width;
1694 t.newTime = percentage <= 0.02 ? 0 : percentage * t.getDuration();
1695
1696 if (mouseIsDown && t.getCurrentTime() !== null && t.newTime.toFixed(4) !== t.getCurrentTime().toFixed(4)) {
1697 t.setCurrentRailHandle(t.newTime);
1698 t.updateCurrent(t.newTime);
1699 }
1700
1701 if (!_constants.IS_IOS && !_constants.IS_ANDROID) {
1702 if (pos < 0) {
1703 pos = 0;
1704 }
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);
1709
1710 t.hovered.style.left = handleLocation + 'px';
1711 t.setTransformStyle(t.hovered, 'scaleX(' + hoverScaleX + ')');
1712 t.hovered.setAttribute('pos', pos);
1713
1714 if (hoverScaleX >= 0) {
1715 (0, _dom.removeClass)(t.hovered, 'negative');
1716 } else {
1717 (0, _dom.addClass)(t.hovered, 'negative');
1718 }
1719 }
1720
1721 if (t.timefloat) {
1722 var half = t.timefloat.offsetWidth / 2,
1723 offsetContainer = mejs.Utils.offset(t.getElement(t.container)),
1724 tooltipStyles = getComputedStyle(t.timefloat);
1725
1726 if (x - offsetContainer.left < t.timefloat.offsetWidth) {
1727 leftPos = half;
1728 } else if (x - offsetContainer.left >= t.getElement(t.container).offsetWidth - half) {
1729 leftPos = t.total.offsetWidth - half;
1730 } else {
1731 leftPos = pos;
1732 }
1733
1734 if ((0, _dom.hasClass)(t.getElement(t.container), t.options.classPrefix + 'long-video')) {
1735 leftPos += parseFloat(tooltipStyles.marginLeft) / 2 + t.timefloat.offsetWidth / 2;
1736 }
1737
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';
1741 }
1742 }
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';
1748 }
1749 },
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();
1755
1756 t.slider.setAttribute('role', 'slider');
1757 t.slider.tabIndex = 0;
1758
1759 if (media.paused) {
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);
1765 } else {
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');
1771 }
1772 },
1773 restartPlayer = function restartPlayer() {
1774 if (new Date() - lastKeyPressTime >= 1000) {
1775 t.play();
1776 }
1777 },
1778 handleMouseup = function handleMouseup() {
1779 if (mouseIsDown && t.getCurrentTime() !== null && t.newTime.toFixed(4) !== t.getCurrentTime().toFixed(4)) {
1780 t.setCurrentTime(t.newTime);
1781 t.setCurrentRail();
1782 t.updateCurrent(t.newTime);
1783 }
1784 if (t.forcedHandlePause) {
1785 t.slider.focus();
1786 t.play();
1787 }
1788 t.forcedHandlePause = false;
1789 };
1790
1791 t.slider.addEventListener('focus', function () {
1792 player.options.autoRewind = false;
1793 });
1794 t.slider.addEventListener('blur', function () {
1795 player.options.autoRewind = autoRewindInitial;
1796 });
1797 t.slider.addEventListener('keydown', function (e) {
1798 if (new Date() - lastKeyPressTime >= 1000) {
1799 startedPaused = t.paused;
1800 }
1801
1802 if (t.options.keyActions.length) {
1803
1804 var keyCode = e.which || e.keyCode || 0,
1805 duration = t.getDuration(),
1806 seekForward = player.options.defaultSeekForwardInterval(media),
1807 seekBackward = player.options.defaultSeekBackwardInterval(media);
1808
1809 var seekTime = t.getCurrentTime();
1810 var volume = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-slider');
1811
1812 if (keyCode === 38 || keyCode === 40) {
1813 if (volume) {
1814 volume.style.display = 'block';
1815 }
1816 if (t.isVideo) {
1817 t.showControls();
1818 t.startControlsTimer();
1819 }
1820
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);
1825 return;
1826 } else {
1827 if (volume) {
1828 volume.style.display = 'none';
1829 }
1830 }
1831
1832 switch (keyCode) {
1833 case 37:
1834 if (t.getDuration() !== Infinity) {
1835 seekTime -= seekBackward;
1836 }
1837 break;
1838 case 39:
1839 if (t.getDuration() !== Infinity) {
1840 seekTime += seekForward;
1841 }
1842 break;
1843 case 36:
1844 seekTime = 0;
1845 break;
1846 case 35:
1847 seekTime = duration;
1848 break;
1849 case 13:
1850 case 32:
1851 if (_constants.IS_FIREFOX) {
1852 if (t.paused) {
1853 t.play();
1854 } else {
1855 t.pause();
1856 }
1857 }
1858 return;
1859 default:
1860 return;
1861 }
1862
1863 seekTime = seekTime < 0 ? 0 : seekTime >= duration ? duration : Math.floor(seekTime);
1864 lastKeyPressTime = new Date();
1865 if (!startedPaused) {
1866 player.pause();
1867 }
1868
1869 if (seekTime < t.getDuration() && !startedPaused) {
1870 setTimeout(restartPlayer, 1100);
1871 }
1872
1873 t.setCurrentTime(seekTime);
1874 player.showControls();
1875
1876 e.preventDefault();
1877 e.stopPropagation();
1878 }
1879 });
1880
1881 var events = ['mousedown', 'touchstart'];
1882
1883 t.slider.addEventListener('dragstart', function () {
1884 return false;
1885 });
1886
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) {
1892 if (!t.paused) {
1893 t.pause();
1894 t.forcedHandlePause = true;
1895 }
1896
1897 mouseIsDown = true;
1898 handleMouseMove(e);
1899 var endEvents = ['mouseup', 'touchend'];
1900
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);
1906 }
1907 });
1908 }
1909 t.globalBind('mouseup.dur touchend.dur', function () {
1910 handleMouseup();
1911 mouseIsDown = false;
1912 if (t.timefloat) {
1913 t.timefloat.style.display = 'none';
1914 }
1915 });
1916 }
1917 }
1918 }, _constants.SUPPORT_PASSIVE_EVENT && events[i] === 'touchstart' ? { passive: true } : false);
1919 }
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);
1926 }
1927 });
1928 if (t.timefloat && !_constants.IS_IOS && !_constants.IS_ANDROID) {
1929 t.timefloat.style.display = 'block';
1930 }
1931 if (t.hovered && !_constants.IS_IOS && !_constants.IS_ANDROID && t.options.useSmoothHover) {
1932 (0, _dom.removeClass)(t.hovered, 'no-hover');
1933 }
1934 }
1935 });
1936 t.slider.addEventListener('mouseleave', function () {
1937 if (t.getDuration() !== Infinity) {
1938 if (!mouseIsDown) {
1939 if (t.timefloat) {
1940 t.timefloat.style.display = 'none';
1941 }
1942 if (t.hovered && t.options.useSmoothHover) {
1943 (0, _dom.addClass)(t.hovered, 'no-hover');
1944 }
1945 }
1946 }
1947 });
1948
1949 t.broadcastCallback = function (e) {
1950 var broadcast = controls.querySelector('.' + t.options.classPrefix + 'broadcast');
1951 if (!t.options.forceLive && t.getDuration() !== Infinity) {
1952 if (broadcast) {
1953 t.slider.style.display = '';
1954 broadcast.remove();
1955 }
1956
1957 player.setProgressRail(e);
1958 if (!t.forcedHandlePause) {
1959 player.setCurrentRail(e);
1960 }
1961 updateSlider();
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);
1968 }
1969 };
1970
1971 media.addEventListener('progress', t.broadcastCallback);
1972 media.addEventListener('timeupdate', t.broadcastCallback);
1973 media.addEventListener('play', function () {
1974 t.buffer.style.display = 'none';
1975 });
1976 media.addEventListener('playing', function () {
1977 t.buffer.style.display = 'none';
1978 });
1979 media.addEventListener('seeking', function () {
1980 t.buffer.style.display = '';
1981 });
1982 media.addEventListener('seeked', function () {
1983 t.buffer.style.display = 'none';
1984 });
1985 media.addEventListener('pause', function () {
1986 t.buffer.style.display = 'none';
1987 });
1988 media.addEventListener('waiting', function () {
1989 t.buffer.style.display = '';
1990 });
1991 media.addEventListener('loadeddata', function () {
1992 t.buffer.style.display = '';
1993 });
1994 media.addEventListener('canplay', function () {
1995 t.buffer.style.display = 'none';
1996 });
1997 media.addEventListener('error', function () {
1998 t.buffer.style.display = 'none';
1999 });
2000
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);
2006 }
2007 }
2008 });
2009 },
2010 cleanprogress: function cleanprogress(player, controls, layers, media) {
2011 media.removeEventListener('progress', player.broadcastCallback);
2012 media.removeEventListener('timeupdate', player.broadcastCallback);
2013 if (player.rail) {
2014 player.rail.remove();
2015 }
2016 },
2017 setProgressRail: function setProgressRail(e) {
2018 var t = this,
2019 target = e !== undefined ? e.detail.target || e.target : t.media;
2020
2021 var percent = null;
2022
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;
2029 }
2030
2031 if (percent !== null) {
2032 percent = Math.min(1, Math.max(0, percent));
2033
2034 if (t.loaded) {
2035 t.setTransformStyle(t.loaded, 'scaleX(' + percent + ')');
2036 }
2037 }
2038 },
2039 setCurrentRailHandle: function setCurrentRailHandle(fakeTime) {
2040 var t = this;
2041 t.setCurrentRailMain(t, fakeTime);
2042 },
2043 setCurrentRail: function setCurrentRail() {
2044 var t = this;
2045 t.setCurrentRailMain(t);
2046 },
2047 setCurrentRailMain: function setCurrentRailMain(t, fakeTime) {
2048 if (t.getCurrentTime() !== undefined && t.getDuration()) {
2049 var nTime = typeof fakeTime === 'undefined' ? t.getCurrentTime() : fakeTime;
2050
2051 if (t.total && t.handle) {
2052 var tW = parseFloat(getComputedStyle(t.total).width);
2053
2054 var newWidth = Math.round(tW * nTime / t.getDuration()),
2055 handlePos = newWidth - Math.round(t.handle.offsetWidth / 2);
2056
2057 handlePos = handlePos < 0 ? 0 : handlePos;
2058 t.setTransformStyle(t.current, 'scaleX(' + newWidth / tW + ')');
2059 t.setTransformStyle(t.handle, 'translateX(' + handlePos + 'px)');
2060
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;
2064
2065 var hoverScaleX = pos / tW - handlePos / tW;
2066
2067 t.hovered.style.left = handlePos + 'px';
2068 t.setTransformStyle(t.hovered, 'scaleX(' + hoverScaleX + ')');
2069
2070 if (hoverScaleX >= 0) {
2071 (0, _dom.removeClass)(t.hovered, 'negative');
2072 } else {
2073 (0, _dom.addClass)(t.hovered, 'negative');
2074 }
2075 }
2076 }
2077 }
2078 }
2079 });
2080
2081 },{"16":16,"2":2,"25":25,"26":26,"30":30,"5":5}],12:[function(_dereq_,module,exports){
2082 'use strict';
2083
2084 var _document = _dereq_(2);
2085
2086 var _document2 = _interopRequireDefault(_document);
2087
2088 var _player = _dereq_(16);
2089
2090 var _player2 = _interopRequireDefault(_player);
2091
2092 var _time = _dereq_(30);
2093
2094 var _dom = _dereq_(26);
2095
2096 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2097
2098 Object.assign(_player.config, {
2099 duration: 0,
2100
2101 timeAndDurationSeparator: '<span> | </span>'
2102 });
2103
2104 Object.assign(_player2.default.prototype, {
2105 buildcurrent: function buildcurrent(player, controls, layers, media) {
2106 var t = this,
2107 time = _document2.default.createElement('div');
2108
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>';
2113
2114 t.addControlElement(time, 'current');
2115 player.updateCurrent();
2116 t.updateTimeCallback = function () {
2117 if (t.controlsAreVisible) {
2118 player.updateCurrent();
2119 }
2120 };
2121 media.addEventListener('timeupdate', t.updateTimeCallback);
2122 },
2123 cleancurrent: function cleancurrent(player, controls, layers, media) {
2124 media.removeEventListener('timeupdate', player.updateTimeCallback);
2125 },
2126 buildduration: function buildduration(player, controls, layers, media) {
2127 var t = this,
2128 currTime = controls.lastChild.querySelector('.' + t.options.classPrefix + 'currenttime');
2129
2130 if (currTime) {
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>');
2132 } else {
2133 if (controls.querySelector('.' + t.options.classPrefix + 'currenttime')) {
2134 (0, _dom.addClass)(controls.querySelector('.' + t.options.classPrefix + 'currenttime').parentNode, t.options.classPrefix + 'currenttime-container');
2135 }
2136
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>');
2140
2141 t.addControlElement(duration, 'duration');
2142 }
2143
2144 t.updateDurationCallback = function () {
2145 if (t.controlsAreVisible) {
2146 player.updateDuration();
2147 }
2148 };
2149
2150 media.addEventListener('timeupdate', t.updateDurationCallback);
2151 },
2152 cleanduration: function cleanduration(player, controls, layers, media) {
2153 media.removeEventListener('timeupdate', player.updateDurationCallback);
2154 },
2155 updateCurrent: function updateCurrent() {
2156 var t = this;
2157
2158 var currentTime = t.getCurrentTime();
2159
2160 if (isNaN(currentTime)) {
2161 currentTime = 0;
2162 }
2163
2164 var timecode = (0, _time.secondsToTimeCode)(currentTime, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength, t.options.timeFormat);
2165
2166 if (timecode.length > 5) {
2167 (0, _dom.addClass)(t.getElement(t.container), t.options.classPrefix + 'long-video');
2168 } else {
2169 (0, _dom.removeClass)(t.getElement(t.container), t.options.classPrefix + 'long-video');
2170 }
2171
2172 if (t.getElement(t.controls).querySelector('.' + t.options.classPrefix + 'currenttime')) {
2173 t.getElement(t.controls).querySelector('.' + t.options.classPrefix + 'currenttime').innerText = timecode;
2174 }
2175 },
2176 updateDuration: function updateDuration() {
2177 var t = this;
2178
2179 var duration = t.getDuration();
2180
2181 if (isNaN(duration) || duration === Infinity || duration < 0) {
2182 t.media.duration = t.options.duration = duration = 0;
2183 }
2184
2185 if (t.options.duration > 0) {
2186 duration = t.options.duration;
2187 }
2188
2189 var timecode = (0, _time.secondsToTimeCode)(duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength, t.options.timeFormat);
2190
2191 if (timecode.length > 5) {
2192 (0, _dom.addClass)(t.getElement(t.container), t.options.classPrefix + 'long-video');
2193 } else {
2194 (0, _dom.removeClass)(t.getElement(t.container), t.options.classPrefix + 'long-video');
2195 }
2196
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;
2199 }
2200 }
2201 });
2202
2203 },{"16":16,"2":2,"26":26,"30":30}],13:[function(_dereq_,module,exports){
2204 'use strict';
2205
2206 var _document = _dereq_(2);
2207
2208 var _document2 = _interopRequireDefault(_document);
2209
2210 var _mejs = _dereq_(7);
2211
2212 var _mejs2 = _interopRequireDefault(_mejs);
2213
2214 var _i18n = _dereq_(5);
2215
2216 var _i18n2 = _interopRequireDefault(_i18n);
2217
2218 var _player = _dereq_(16);
2219
2220 var _player2 = _interopRequireDefault(_player);
2221
2222 var _time = _dereq_(30);
2223
2224 var _general = _dereq_(27);
2225
2226 var _dom = _dereq_(26);
2227
2228 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2229
2230 Object.assign(_player.config, {
2231 startLanguage: '',
2232
2233 tracksText: null,
2234
2235 chaptersText: null,
2236
2237 tracksAriaLive: false,
2238
2239 hideCaptionsButtonWhenEmpty: true,
2240
2241 toggleCaptionsButtonWhenOnlyOne: false,
2242
2243 slidesSelector: ''
2244 });
2245
2246 Object.assign(_player2.default.prototype, {
2247 hasChapters: false,
2248
2249 buildtracks: function buildtracks(player, controls, layers, media) {
2250
2251 this.findTracks();
2252
2253 if (!player.tracks.length && (!player.trackFiles || !player.trackFiles.length === 0)) {
2254 return;
2255 }
2256
2257 var t = this,
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;
2262
2263 if (t.domNode.textTracks) {
2264 for (var i = t.domNode.textTracks.length - 1; i >= 0; i--) {
2265 t.domNode.textTracks[i].mode = 'hidden';
2266 }
2267 }
2268
2269 t.cleartracks(player);
2270
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);
2276
2277 player.captionsText = player.captions.querySelector('.' + t.options.classPrefix + 'captions-text');
2278
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>';
2282
2283 t.addControlElement(player.captionsButton, 'tracks');
2284
2285 player.captionsButton.querySelector('.' + t.options.classPrefix + 'captions-selector-input').disabled = false;
2286
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>';
2290
2291 var subtitleCount = 0;
2292
2293 for (var _i = 0; _i < total; _i++) {
2294 var kind = player.tracks[_i].kind,
2295 src = player.tracks[_i].src;
2296 if (src.trim()) {
2297 if (kind === 'subtitles' || kind === 'captions') {
2298 subtitleCount++;
2299 } else if (kind === 'chapters' && !controls.querySelector('.' + t.options.classPrefix + 'chapter-selector')) {
2300 player.captionsButton.parentNode.insertBefore(player.chaptersButton, player.captionsButton);
2301 }
2302 }
2303 }
2304
2305 player.trackToLoad = -1;
2306 player.selectedTrack = null;
2307 player.isLoadingTrack = false;
2308
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);
2313 }
2314 }
2315
2316 player.loadNextTrack();
2317
2318 var inEvents = ['mouseenter', 'focusin'],
2319 outEvents = ['mouseleave', 'focusout'];
2320
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;
2326 }
2327 var keyboard = e.keyCode || e.which;
2328 player.setTrack(trackId, typeof keyboard !== 'undefined');
2329 });
2330 } else {
2331 var labels = player.captionsButton.querySelectorAll('.' + t.options.classPrefix + 'captions-selector-label'),
2332 captions = player.captionsButton.querySelectorAll('input[type=radio]');
2333
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');
2337 });
2338 }
2339
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');
2343 });
2344 }
2345
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');
2350 });
2351 }
2352
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';
2357 })[0],
2358 event = (0, _general.createEvent)('click', radio);
2359 radio.dispatchEvent(event);
2360 e.preventDefault();
2361 });
2362 }
2363
2364 player.captionsButton.addEventListener('keydown', function (e) {
2365 e.stopPropagation();
2366 });
2367 }
2368
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');
2373 }
2374 });
2375 }
2376
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');
2380 });
2381 }
2382
2383 player.chaptersButton.addEventListener('keydown', function (e) {
2384 e.stopPropagation();
2385 });
2386
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');
2390 });
2391
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');
2395 }
2396 });
2397 } else {
2398 (0, _dom.addClass)(player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'captions-position'), t.options.classPrefix + 'captions-position-hover');
2399 }
2400
2401 media.addEventListener('timeupdate', function () {
2402 player.displayCaptions();
2403 });
2404
2405 if (player.options.slidesSelector !== '') {
2406 player.slidesContainer = _document2.default.querySelectorAll(player.options.slidesSelector);
2407
2408 media.addEventListener('timeupdate', function () {
2409 player.displaySlides();
2410 });
2411 }
2412 },
2413 cleartracks: function cleartracks(player) {
2414 if (player) {
2415 if (player.captions) {
2416 player.captions.remove();
2417 }
2418 if (player.chapters) {
2419 player.chapters.remove();
2420 }
2421 if (player.captionsText) {
2422 player.captionsText.remove();
2423 }
2424 if (player.captionsButton) {
2425 player.captionsButton.remove();
2426 }
2427 if (player.chaptersButton) {
2428 player.chaptersButton.remove();
2429 }
2430 }
2431 },
2432 rebuildtracks: function rebuildtracks() {
2433 var t = this;
2434 t.findTracks();
2435 t.buildtracks(t, t.getElement(t.controls), t.getElement(t.layers), t.media);
2436 },
2437 findTracks: function findTracks() {
2438 var t = this,
2439 tracktags = t.trackFiles === null ? t.node.querySelectorAll('track') : t.trackFiles,
2440 total = tracktags.length;
2441
2442 t.tracks = [];
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;
2447 t.tracks.push({
2448 trackId: trackId,
2449 srclang: srclang,
2450 src: track.getAttribute('src'),
2451 kind: track.getAttribute('kind'),
2452 label: track.getAttribute('label') || '',
2453 entries: [],
2454 isLoaded: false
2455 });
2456 }
2457 },
2458 setTrack: function setTrack(trackId, setByKeyboard) {
2459
2460 var t = this,
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 + '"]');
2464
2465 for (var i = 0, total = radios.length; i < total; i++) {
2466 radios[i].checked = false;
2467 }
2468
2469 for (var _i9 = 0, _total7 = captions.length; _i9 < _total7; _i9++) {
2470 (0, _dom.removeClass)(captions[_i9], t.options.classPrefix + 'captions-selected');
2471 }
2472
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');
2476 });
2477 for (var _i10 = 0, _total8 = labels.length; _i10 < _total8; _i10++) {
2478 (0, _dom.addClass)(labels[_i10], t.options.classPrefix + 'captions-selected');
2479 }
2480
2481 if (trackId === 'none') {
2482 t.selectedTrack = null;
2483 (0, _dom.removeClass)(t.captionsButton, t.options.classPrefix + 'captions-enabled');
2484 } else {
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');
2490 }
2491 t.selectedTrack = _track;
2492 t.captions.setAttribute('lang', t.selectedTrack.srclang);
2493 t.displayCaptions();
2494 break;
2495 }
2496 }
2497 }
2498
2499 var event = (0, _general.createEvent)('captionschange', t.media);
2500 event.detail.caption = t.selectedTrack;
2501 t.media.dispatchEvent(event);
2502
2503 if (!setByKeyboard) {
2504 setTimeout(function () {
2505 t.getElement(t.container).focus();
2506 }, 500);
2507 }
2508 },
2509 loadNextTrack: function loadNextTrack() {
2510 var t = this;
2511
2512 t.trackToLoad++;
2513 if (t.trackToLoad < t.tracks.length) {
2514 t.isLoadingTrack = true;
2515 t.loadTrack(t.trackToLoad);
2516 } else {
2517 t.isLoadingTrack = false;
2518 t.checkForTracks();
2519 }
2520 },
2521 loadTrack: function loadTrack(index) {
2522 var t = this,
2523 track = t.tracks[index];
2524
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);
2528
2529 track.isLoaded = true;
2530 t.enableTrackButton(track);
2531 t.loadNextTrack();
2532
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;
2538 }
2539 }, function () {
2540 t.removeTrackButton(track.trackId);
2541 t.loadNextTrack();
2542 });
2543 }
2544 },
2545 enableTrackButton: function enableTrackButton(track) {
2546 var t = this,
2547 lang = track.srclang,
2548 target = _document2.default.getElementById('' + track.trackId);
2549
2550 if (!target) {
2551 return;
2552 }
2553
2554 var label = track.label;
2555
2556 if (label === '') {
2557 label = _i18n2.default.t(_mejs2.default.language.codes[lang]) || lang;
2558 }
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');
2562 });
2563 for (var i = 0, total = targetSiblings.length; i < total; i++) {
2564 targetSiblings[i].innerHTML = label;
2565 }
2566
2567 if (t.options.startLanguage === lang) {
2568 target.checked = true;
2569 var event = (0, _general.createEvent)('click', target);
2570 target.dispatchEvent(event);
2571 }
2572 },
2573 removeTrackButton: function removeTrackButton(trackId) {
2574 var element = _document2.default.getElementById('' + trackId);
2575 if (element) {
2576 var button = element.closest('li');
2577 if (button) {
2578 button.remove();
2579 }
2580 }
2581 },
2582 addTrackButton: function addTrackButton(trackId, lang, label) {
2583 var t = this;
2584 if (label === '') {
2585 label = _i18n2.default.t(_mejs2.default.language.codes[lang]) || lang;
2586 }
2587
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>';
2589 },
2590 checkForTracks: function checkForTracks() {
2591 var t = this;
2592
2593 var hasSubtitles = false;
2594
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;
2600 break;
2601 }
2602 }
2603
2604 t.captionsButton.style.display = hasSubtitles ? '' : 'none';
2605 t.setControlsSize();
2606 }
2607 },
2608 displayCaptions: function displayCaptions() {
2609 if (this.tracks === undefined) {
2610 return;
2611 }
2612
2613 var t = this,
2614 track = t.selectedTrack,
2615 sanitize = function sanitize(html) {
2616 var div = _document2.default.createElement('div');
2617 div.innerHTML = html;
2618
2619 var scripts = div.getElementsByTagName('script');
2620 var i = scripts.length;
2621 while (i--) {
2622 scripts[i].remove();
2623 }
2624
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);
2629
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);
2635 }
2636 }
2637 }
2638 return div.innerHTML;
2639 };
2640
2641 if (track !== null && track.isLoaded) {
2642 var i = t.searchTrackPosition(track.entries, t.media.currentTime);
2643 if (i > -1) {
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';
2648 return;
2649 }
2650 t.captions.style.display = 'none';
2651 } else {
2652 t.captions.style.display = 'none';
2653 }
2654 },
2655 setupSlides: function setupSlides(track) {
2656 var t = this;
2657 t.slides = track;
2658 t.slides.entries.imgs = [t.slides.entries.length];
2659 t.showSlide(0);
2660 },
2661 showSlide: function showSlide(index) {
2662 var _this = this;
2663
2664 var t = this;
2665
2666 if (t.tracks === undefined || t.slidesContainer === undefined) {
2667 return;
2668 }
2669
2670 var url = t.slides.entries[index].text;
2671
2672 var img = t.slides.entries[index].imgs;
2673
2674 if (img === undefined || img.fadeIn === undefined) {
2675 var image = _document2.default.createElement('img');
2676 image.src = url;
2677 image.addEventListener('load', function () {
2678 var self = _this,
2679 visible = (0, _dom.siblings)(self, function (el) {
2680 return visible(el);
2681 });
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);
2687 }
2688 });
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);
2693 });
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]);
2697 }
2698 }
2699 },
2700 displaySlides: function displaySlides() {
2701 var t = this;
2702
2703 if (this.slides === undefined) {
2704 return;
2705 }
2706
2707 var slides = t.slides,
2708 i = t.searchTrackPosition(slides.entries, t.media.currentTime);
2709
2710 if (i > -1) {
2711 t.showSlide(i);
2712 }
2713 },
2714 drawChapters: function drawChapters(chapters) {
2715 var t = this,
2716 total = chapters.entries.length;
2717
2718 if (!total) {
2719 return;
2720 }
2721
2722 t.chaptersButton.querySelector('ul').innerHTML = '';
2723
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>';
2726 }
2727
2728 var radios = t.chaptersButton.querySelectorAll('input[type="radio"]'),
2729 labels = t.chaptersButton.querySelectorAll('.' + t.options.classPrefix + 'chapters-selector-label');
2730
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) {
2735 var self = this,
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');
2739 })[0];
2740
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');
2745
2746 for (var _i14 = 0, _total11 = listItems.length; _i14 < _total11; _i14++) {
2747 listItems[_i14].setAttribute('aria-checked', false);
2748 }
2749
2750 var keyboard = e.keyCode || e.which;
2751 if (typeof keyboard === 'undefined') {
2752 setTimeout(function () {
2753 t.getElement(t.container).focus();
2754 }, 500);
2755 }
2756
2757 t.media.setCurrentTime(parseFloat(self.value));
2758 if (t.media.paused) {
2759 t.media.play();
2760 }
2761 });
2762 }
2763
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';
2768 })[0],
2769 event = (0, _general.createEvent)('click', radio);
2770 radio.dispatchEvent(event);
2771 e.preventDefault();
2772 });
2773 }
2774 },
2775 searchTrackPosition: function searchTrackPosition(tracks, currentTime) {
2776 var lo = 0,
2777 hi = tracks.length - 1,
2778 mid = void 0,
2779 start = void 0,
2780 stop = void 0;
2781
2782 while (lo <= hi) {
2783 mid = lo + hi >> 1;
2784 start = tracks[mid].start;
2785 stop = tracks[mid].stop;
2786
2787 if (currentTime >= start && currentTime < stop) {
2788 return mid;
2789 } else if (start < currentTime) {
2790 lo = mid + 1;
2791 } else if (start > currentTime) {
2792 hi = mid - 1;
2793 }
2794 }
2795
2796 return -1;
2797 }
2798 });
2799
2800 _mejs2.default.language = {
2801 codes: {
2802 af: 'mejs.afrikaans',
2803 sq: 'mejs.albanian',
2804 ar: 'mejs.arabic',
2805 be: 'mejs.belarusian',
2806 bg: 'mejs.bulgarian',
2807 ca: 'mejs.catalan',
2808 zh: 'mejs.chinese',
2809 'zh-cn': 'mejs.chinese-simplified',
2810 'zh-tw': 'mejs.chines-traditional',
2811 hr: 'mejs.croatian',
2812 cs: 'mejs.czech',
2813 da: 'mejs.danish',
2814 nl: 'mejs.dutch',
2815 en: 'mejs.english',
2816 et: 'mejs.estonian',
2817 fl: 'mejs.filipino',
2818 fi: 'mejs.finnish',
2819 fr: 'mejs.french',
2820 gl: 'mejs.galician',
2821 de: 'mejs.german',
2822 el: 'mejs.greek',
2823 ht: 'mejs.haitian-creole',
2824 iw: 'mejs.hebrew',
2825 hi: 'mejs.hindi',
2826 hu: 'mejs.hungarian',
2827 is: 'mejs.icelandic',
2828 id: 'mejs.indonesian',
2829 ga: 'mejs.irish',
2830 it: 'mejs.italian',
2831 ja: 'mejs.japanese',
2832 ko: 'mejs.korean',
2833 lv: 'mejs.latvian',
2834 lt: 'mejs.lithuanian',
2835 mk: 'mejs.macedonian',
2836 ms: 'mejs.malay',
2837 mt: 'mejs.maltese',
2838 no: 'mejs.norwegian',
2839 fa: 'mejs.persian',
2840 pl: 'mejs.polish',
2841 pt: 'mejs.portuguese',
2842 ro: 'mejs.romanian',
2843 ru: 'mejs.russian',
2844 sr: 'mejs.serbian',
2845 sk: 'mejs.slovak',
2846 sl: 'mejs.slovenian',
2847 es: 'mejs.spanish',
2848 sw: 'mejs.swahili',
2849 sv: 'mejs.swedish',
2850 tl: 'mejs.tagalog',
2851 th: 'mejs.thai',
2852 tr: 'mejs.turkish',
2853 uk: 'mejs.ukrainian',
2854 vi: 'mejs.vietnamese',
2855 cy: 'mejs.welsh',
2856 yi: 'mejs.yiddish'
2857 }
2858 };
2859
2860 _mejs2.default.TrackFormatParser = {
2861 webvtt: {
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})?)(.*)$/,
2863
2864 parse: function parse(trackText) {
2865 var lines = trackText.split(/\r?\n/),
2866 entries = [];
2867
2868 var timecode = void 0,
2869 text = void 0,
2870 identifier = void 0;
2871
2872 for (var i = 0, total = lines.length; i < total; i++) {
2873 timecode = this.pattern.exec(lines[i]);
2874
2875 if (timecode && i < lines.length) {
2876 if (i - 1 >= 0 && lines[i - 1] !== '') {
2877 identifier = lines[i - 1];
2878 }
2879 i++;
2880
2881 text = lines[i];
2882 i++;
2883 while (lines[i] !== '' && i < lines.length) {
2884 text = text + '\n' + lines[i];
2885 i++;
2886 }
2887 text = text.trim().replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>");
2888 entries.push({
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]),
2892 text: text,
2893 settings: timecode[5]
2894 });
2895 }
2896 identifier = '';
2897 }
2898 return entries;
2899 }
2900 },
2901
2902 dfxp: {
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')),
2908 entries = [];
2909
2910 var styles = void 0;
2911
2912 if (styleNode.length) {
2913 styleNode.removeAttribute('id');
2914 var attributes = styleNode.attributes;
2915 if (attributes.length) {
2916 styles = {};
2917 for (var i = 0, total = attributes.length; i < total; i++) {
2918 styles[attributes[i].name.split(":")[1]] = attributes[i].value;
2919 }
2920 }
2921 }
2922
2923 for (var _i16 = 0, _total13 = lines.length; _i16 < _total13; _i16++) {
2924 var style = void 0,
2925 _temp = {
2926 start: null,
2927 stop: null,
2928 style: null,
2929 text: null
2930 };
2931
2932 if (lines.eq(_i16).attr('begin')) {
2933 _temp.start = (0, _time.convertSMPTEtoSeconds)(lines.eq(_i16).attr('begin'));
2934 }
2935 if (!_temp.start && lines.eq(_i16 - 1).attr('end')) {
2936 _temp.start = (0, _time.convertSMPTEtoSeconds)(lines.eq(_i16 - 1).attr('end'));
2937 }
2938 if (lines.eq(_i16).attr('end')) {
2939 _temp.stop = (0, _time.convertSMPTEtoSeconds)(lines.eq(_i16).attr('end'));
2940 }
2941 if (!_temp.stop && lines.eq(_i16 + 1).attr('begin')) {
2942 _temp.stop = (0, _time.convertSMPTEtoSeconds)(lines.eq(_i16 + 1).attr('begin'));
2943 }
2944
2945 if (styles) {
2946 style = '';
2947 for (var _style in styles) {
2948 style += _style + ':' + styles[_style] + ';';
2949 }
2950 }
2951 if (style) {
2952 _temp.style = style;
2953 }
2954 if (_temp.start === 0) {
2955 _temp.start = 0.200;
2956 }
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);
2959 }
2960 return entries;
2961 }
2962 }
2963 };
2964
2965 },{"16":16,"2":2,"26":26,"27":27,"30":30,"5":5,"7":7}],14:[function(_dereq_,module,exports){
2966 'use strict';
2967
2968 var _document = _dereq_(2);
2969
2970 var _document2 = _interopRequireDefault(_document);
2971
2972 var _player = _dereq_(16);
2973
2974 var _player2 = _interopRequireDefault(_player);
2975
2976 var _i18n = _dereq_(5);
2977
2978 var _i18n2 = _interopRequireDefault(_i18n);
2979
2980 var _constants = _dereq_(25);
2981
2982 var _general = _dereq_(27);
2983
2984 var _dom = _dereq_(26);
2985
2986 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2987
2988 Object.assign(_player.config, {
2989 muteText: null,
2990
2991 unmuteText: null,
2992
2993 allyVolumeControlText: null,
2994
2995 hideVolumeOnTouchDevices: true,
2996
2997 audioVolume: 'horizontal',
2998
2999 videoVolume: 'vertical',
3000
3001 startVolume: 0.8
3002 });
3003
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) {
3007 return;
3008 }
3009
3010 var t = this,
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');
3016
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>';
3019
3020 t.addControlElement(mute, 'volume');
3021
3022 t.options.keyActions.push({
3023 keys: [38],
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';
3028 }
3029 if (player.isVideo) {
3030 player.showControls();
3031 player.startControlsTimer();
3032 }
3033
3034 var newVolume = Math.min(player.volume + 0.1, 1);
3035 player.setVolume(newVolume);
3036 if (newVolume > 0) {
3037 player.setMuted(false);
3038 }
3039 }
3040 }, {
3041 keys: [40],
3042 action: function action(player) {
3043 var volumeSlider = player.getElement(player.container).querySelector('.' + _player.config.classPrefix + 'volume-slider');
3044 if (volumeSlider) {
3045 volumeSlider.style.display = 'block';
3046 }
3047
3048 if (player.isVideo) {
3049 player.showControls();
3050 player.startControlsTimer();
3051 }
3052
3053 var newVolume = Math.max(player.volume - 0.1, 0);
3054 player.setVolume(newVolume);
3055
3056 if (newVolume <= 0.1) {
3057 player.setMuted(true);
3058 }
3059 }
3060 }, {
3061 keys: [77],
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();
3067 }
3068 if (player.media.muted) {
3069 player.setMuted(false);
3070 } else {
3071 player.setMuted(true);
3072 }
3073 }
3074 });
3075
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);
3086 }
3087
3088 var mouseIsDown = false,
3089 mouseIsOver = false,
3090 modified = 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 + '%');
3095 };
3096
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) {
3102
3103 if (volume === null || isNaN(volume) || volume === undefined) {
3104 return;
3105 }
3106
3107 volume = Math.max(0, volume);
3108 volume = Math.min(volume, 1);
3109
3110 if (volume === 0) {
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);
3116 } else {
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);
3122 }
3123
3124 var volumePercentage = volume * 100 + '%',
3125 volumeStyles = getComputedStyle(volumeHandle);
3126
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';
3132 } else {
3133 volumeCurrent.style.left = 0;
3134 volumeCurrent.style.width = volumePercentage;
3135 volumeHandle.style.left = volumePercentage;
3136 volumeHandle.style.marginLeft = -parseFloat(volumeStyles.width) / 2 + 'px';
3137 }
3138 },
3139 handleVolumeMove = function handleVolumeMove(e) {
3140 var totalOffset = (0, _dom.offset)(volumeTotal),
3141 volumeStyles = getComputedStyle(volumeTotal);
3142
3143 modified = true;
3144
3145 var volume = null;
3146
3147 if (mode === 'vertical') {
3148 var railHeight = parseFloat(volumeStyles.height),
3149 newY = e.pageY - totalOffset.top;
3150
3151 volume = (railHeight - newY) / railHeight;
3152
3153 if (totalOffset.top === 0 || totalOffset.left === 0) {
3154 return;
3155 }
3156 } else {
3157 var railWidth = parseFloat(volumeStyles.width),
3158 newX = e.pageX - totalOffset.left;
3159
3160 volume = newX / railWidth;
3161 }
3162
3163 volume = Math.max(0, volume);
3164 volume = Math.min(volume, 1);
3165
3166 positionVolumeHandle(volume);
3167
3168 t.setMuted(volume === 0);
3169 t.setVolume(volume);
3170
3171 e.preventDefault();
3172 e.stopPropagation();
3173 },
3174 toggleMute = function toggleMute() {
3175 if (t.muted) {
3176 positionVolumeHandle(0);
3177 (0, _dom.removeClass)(mute, t.options.classPrefix + 'mute');
3178 (0, _dom.addClass)(mute, t.options.classPrefix + 'unmute');
3179 } else {
3180 positionVolumeHandle(media.volume);
3181 (0, _dom.removeClass)(mute, t.options.classPrefix + 'unmute');
3182 (0, _dom.addClass)(mute, t.options.classPrefix + 'mute');
3183 }
3184 };
3185
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';
3190 }
3191 });
3192
3193 mute.addEventListener('mouseenter', function (e) {
3194 if (e.target === mute) {
3195 volumeSlider.style.display = 'block';
3196 mouseIsOver = true;
3197 e.preventDefault();
3198 e.stopPropagation();
3199 }
3200 });
3201 mute.addEventListener('focusin', function () {
3202 volumeSlider.style.display = 'block';
3203 mouseIsOver = true;
3204 });
3205
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';
3209 }
3210 });
3211 mute.addEventListener('mouseleave', function () {
3212 mouseIsOver = false;
3213 if (!mouseIsDown && mode === 'vertical') {
3214 volumeSlider.style.display = 'none';
3215 }
3216 });
3217 mute.addEventListener('focusout', function () {
3218 mouseIsOver = false;
3219 });
3220 mute.addEventListener('keydown', function (e) {
3221 if (t.options.keyActions.length) {
3222 var keyCode = e.which || e.keyCode || 0,
3223 volume = media.volume;
3224
3225 switch (keyCode) {
3226 case 38:
3227 volume = Math.min(volume + 0.1, 1);
3228 break;
3229 case 40:
3230 volume = Math.max(0, volume - 0.1);
3231 break;
3232 default:
3233 return true;
3234 }
3235
3236 mouseIsDown = false;
3237 positionVolumeHandle(volume);
3238 media.setVolume(volume);
3239
3240 e.preventDefault();
3241 e.stopPropagation();
3242 }
3243 });
3244 mute.querySelector('button').addEventListener('click', function () {
3245 media.setMuted(!media.muted);
3246 var event = (0, _general.createEvent)('volumechange', media);
3247 media.dispatchEvent(event);
3248 });
3249
3250 volumeSlider.addEventListener('dragstart', function () {
3251 return false;
3252 });
3253
3254 volumeSlider.addEventListener('mouseover', function () {
3255 mouseIsOver = true;
3256 });
3257 volumeSlider.addEventListener('focusin', function () {
3258 volumeSlider.style.display = 'block';
3259 mouseIsOver = true;
3260 });
3261 volumeSlider.addEventListener('focusout', function () {
3262 mouseIsOver = false;
3263 if (!mouseIsDown && mode === 'vertical') {
3264 volumeSlider.style.display = 'none';
3265 }
3266 });
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);
3273 }
3274 });
3275 t.globalBind('mouseup.vol', function () {
3276 mouseIsDown = false;
3277 if (!mouseIsOver && mode === 'vertical') {
3278 volumeSlider.style.display = 'none';
3279 }
3280 });
3281 mouseIsDown = true;
3282 e.preventDefault();
3283 e.stopPropagation();
3284 });
3285
3286 media.addEventListener('volumechange', function (e) {
3287 if (!mouseIsDown) {
3288 toggleMute();
3289 }
3290 updateVolumeSlider(e);
3291 });
3292
3293 var rendered = false;
3294 media.addEventListener('rendererready', function () {
3295 if (!modified) {
3296 setTimeout(function () {
3297 rendered = true;
3298 if (player.options.startVolume === 0 || media.originalNode.muted) {
3299 media.setMuted(true);
3300 player.options.startVolume = 0;
3301 }
3302 media.setVolume(player.options.startVolume);
3303 t.setControlsSize();
3304 }, 250);
3305 }
3306 });
3307
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);
3313 }
3314 media.setVolume(player.options.startVolume);
3315 t.setControlsSize();
3316 }
3317 rendered = false;
3318 }, 250);
3319 });
3320
3321 if (player.options.startVolume === 0 || media.originalNode.muted) {
3322 media.setMuted(true);
3323 player.options.startVolume = 0;
3324 toggleMute();
3325 }
3326
3327 t.getElement(t.container).addEventListener('controlsresize', function () {
3328 toggleMute();
3329 });
3330 }
3331 });
3332
3333 },{"16":16,"2":2,"25":25,"26":26,"27":27,"5":5}],15:[function(_dereq_,module,exports){
3334 'use strict';
3335
3336 Object.defineProperty(exports, "__esModule", {
3337 value: true
3338 });
3339 var EN = exports.EN = {
3340 'mejs.plural-form': 1,
3341
3342 'mejs.download-file': 'Download File',
3343
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/',
3345
3346 'mejs.fullscreen': 'Fullscreen',
3347
3348 'mejs.play': 'Play',
3349 'mejs.pause': 'Pause',
3350
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',
3354
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',
3359
3360 'mejs.video-player': 'Video Player',
3361 'mejs.audio-player': 'Audio Player',
3362
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'
3421 };
3422
3423 },{}],16:[function(_dereq_,module,exports){
3424 'use strict';
3425
3426 Object.defineProperty(exports, "__esModule", {
3427 value: true
3428 });
3429 exports.config = undefined;
3430
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; };
3432
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; }; }();
3434
3435 var _window = _dereq_(3);
3436
3437 var _window2 = _interopRequireDefault(_window);
3438
3439 var _document = _dereq_(2);
3440
3441 var _document2 = _interopRequireDefault(_document);
3442
3443 var _mejs = _dereq_(7);
3444
3445 var _mejs2 = _interopRequireDefault(_mejs);
3446
3447 var _mediaelement = _dereq_(6);
3448
3449 var _mediaelement2 = _interopRequireDefault(_mediaelement);
3450
3451 var _default = _dereq_(17);
3452
3453 var _default2 = _interopRequireDefault(_default);
3454
3455 var _i18n = _dereq_(5);
3456
3457 var _i18n2 = _interopRequireDefault(_i18n);
3458
3459 var _constants = _dereq_(25);
3460
3461 var _general = _dereq_(27);
3462
3463 var _time = _dereq_(30);
3464
3465 var _media = _dereq_(28);
3466
3467 var _dom = _dereq_(26);
3468
3469 var dom = _interopRequireWildcard(_dom);
3470
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; } }
3472
3473 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3474
3475 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3476
3477 _mejs2.default.mepIndex = 0;
3478
3479 _mejs2.default.players = {};
3480
3481 var config = exports.config = {
3482 poster: '',
3483
3484 showPosterWhenEnded: false,
3485
3486 showPosterWhenPaused: false,
3487
3488 defaultVideoWidth: 480,
3489
3490 defaultVideoHeight: 270,
3491
3492 videoWidth: -1,
3493
3494 videoHeight: -1,
3495
3496 defaultAudioWidth: 400,
3497
3498 defaultAudioHeight: 40,
3499
3500 defaultSeekBackwardInterval: function defaultSeekBackwardInterval(media) {
3501 return media.getDuration() * 0.05;
3502 },
3503
3504 defaultSeekForwardInterval: function defaultSeekForwardInterval(media) {
3505 return media.getDuration() * 0.05;
3506 },
3507
3508 setDimensions: true,
3509
3510 audioWidth: -1,
3511
3512 audioHeight: -1,
3513
3514 loop: false,
3515
3516 autoRewind: true,
3517
3518 enableAutosize: true,
3519
3520 timeFormat: '',
3521
3522 alwaysShowHours: false,
3523
3524 showTimecodeFrameCount: false,
3525
3526 framesPerSecond: 25,
3527
3528 alwaysShowControls: false,
3529
3530 hideVideoControlsOnLoad: false,
3531
3532 hideVideoControlsOnPause: false,
3533
3534 clickToPlayPause: true,
3535
3536 controlsTimeoutDefault: 1500,
3537
3538 controlsTimeoutMouseEnter: 2500,
3539
3540 controlsTimeoutMouseLeave: 1000,
3541
3542 iPadUseNativeControls: false,
3543
3544 iPhoneUseNativeControls: false,
3545
3546 AndroidUseNativeControls: false,
3547
3548 features: ['playpause', 'current', 'progress', 'duration', 'tracks', 'volume', 'fullscreen'],
3549
3550 useDefaultControls: false,
3551
3552 isVideo: true,
3553
3554 stretching: 'auto',
3555
3556 classPrefix: 'mejs__',
3557
3558 enableKeyboard: true,
3559
3560 pauseOtherPlayers: true,
3561
3562 secondsDecimalLength: 0,
3563
3564 customError: null,
3565
3566 keyActions: [{
3567 keys: [32, 179],
3568 action: function action(player) {
3569
3570 if (!_constants.IS_FIREFOX) {
3571 if (player.paused || player.ended) {
3572 player.play();
3573 } else {
3574 player.pause();
3575 }
3576 }
3577 }
3578 }]
3579 };
3580
3581 _mejs2.default.MepDefaults = config;
3582
3583 var MediaElementPlayer = function () {
3584 function MediaElementPlayer(node, o) {
3585 _classCallCheck(this, MediaElementPlayer);
3586
3587 var t = this,
3588 element = typeof node === 'string' ? _document2.default.getElementById(node) : node;
3589
3590 if (!(t instanceof MediaElementPlayer)) {
3591 return new MediaElementPlayer(element, o);
3592 }
3593
3594 t.node = t.media = element;
3595
3596 if (!t.node) {
3597 return;
3598 }
3599
3600 if (t.media.player) {
3601 return t.media.player;
3602 }
3603
3604 t.hasFocus = false;
3605
3606 t.controlsAreVisible = true;
3607
3608 t.controlsEnabled = true;
3609
3610 t.controlsTimer = null;
3611
3612 t.currentMediaTime = 0;
3613
3614 t.proxy = null;
3615
3616 if (o === undefined) {
3617 var options = t.node.getAttribute('data-mejsoptions');
3618 o = options ? JSON.parse(options) : {};
3619 }
3620
3621 t.options = Object.assign({}, config, o);
3622
3623 if (t.options.loop && !t.media.getAttribute('loop')) {
3624 t.media.loop = true;
3625 t.node.loop = true;
3626 } else if (t.media.loop) {
3627 t.options.loop = true;
3628 }
3629
3630 if (!t.options.timeFormat) {
3631 t.options.timeFormat = 'mm:ss';
3632 if (t.options.alwaysShowHours) {
3633 t.options.timeFormat = 'hh:mm:ss';
3634 }
3635 if (t.options.showTimecodeFrameCount) {
3636 t.options.timeFormat += ':ff';
3637 }
3638 }
3639
3640 (0, _time.calculateTimeFormat)(0, t.options, t.options.framesPerSecond || 25);
3641
3642 t.id = 'mep_' + _mejs2.default.mepIndex++;
3643
3644 _mejs2.default.players[t.id] = t;
3645
3646 t.init();
3647
3648 return t;
3649 }
3650
3651 _createClass(MediaElementPlayer, [{
3652 key: 'getElement',
3653 value: function getElement(element) {
3654 return element;
3655 }
3656 }, {
3657 key: 'init',
3658 value: function init() {
3659 var t = this,
3660 playerOptions = Object.assign({}, t.options, {
3661 success: function success(media, domNode) {
3662 t._meReady(media, domNode);
3663 },
3664 error: function error(e) {
3665 t._handleError(e);
3666 }
3667 }),
3668 tagName = t.node.tagName.toLowerCase();
3669
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;
3674
3675 if (_constants.IS_IPAD && t.options.iPadUseNativeControls || _constants.IS_IPHONE && t.options.iPhoneUseNativeControls) {
3676 t.node.setAttribute('controls', true);
3677
3678 if (_constants.IS_IPAD && t.node.getAttribute('autoplay')) {
3679 t.play();
3680 }
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');
3684
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);
3689
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);
3700
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);
3703
3704 button.focus();
3705 }
3706 });
3707 t.node.parentNode.insertBefore(t.getElement(t.container), t.node);
3708
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';
3712 }
3713
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;
3716
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));
3721 }
3722
3723 if (_constants.IS_ANDROID) {
3724 dom.addClass(t.getElement(t.container), t.options.classPrefix + 'android');
3725 }
3726 if (_constants.IS_IOS) {
3727 dom.addClass(t.getElement(t.container), t.options.classPrefix + 'ios');
3728 }
3729 if (_constants.IS_IPAD) {
3730 dom.addClass(t.getElement(t.container), t.options.classPrefix + 'ipad');
3731 }
3732 if (_constants.IS_IPHONE) {
3733 dom.addClass(t.getElement(t.container), t.options.classPrefix + 'iphone');
3734 }
3735 dom.addClass(t.getElement(t.container), t.isVideo ? t.options.classPrefix + 'video' : t.options.classPrefix + 'audio');
3736
3737 if (_constants.IS_SAFARI && !_constants.IS_IOS) {
3738
3739 dom.addClass(t.getElement(t.container), t.options.classPrefix + 'hide-cues');
3740
3741 var cloneNode = t.node.cloneNode(),
3742 children = t.node.children,
3743 mediaFiles = [],
3744 tracks = [];
3745
3746 for (var i = 0, total = children.length; i < total; i++) {
3747 var childNode = children[i];
3748
3749 (function () {
3750 switch (childNode.tagName.toLowerCase()) {
3751 case 'source':
3752 var elements = {};
3753 Array.prototype.slice.call(childNode.attributes).forEach(function (item) {
3754 elements[item.name] = item.value;
3755 });
3756 elements.type = (0, _media.formatType)(elements.src, elements.type);
3757 mediaFiles.push(elements);
3758 break;
3759 case 'track':
3760 childNode.mode = 'hidden';
3761 tracks.push(childNode);
3762 break;
3763 default:
3764 cloneNode.appendChild(childNode);
3765 break;
3766 }
3767 })();
3768 }
3769
3770 t.node.remove();
3771 t.node = t.media = cloneNode;
3772
3773 if (mediaFiles.length) {
3774 t.mediaFiles = mediaFiles;
3775 }
3776 if (tracks.length) {
3777 t.trackFiles = tracks;
3778 }
3779 }
3780
3781 t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'mediaelement').appendChild(t.node);
3782
3783 t.media.player = t;
3784
3785 t.controls = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'controls');
3786 t.layers = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'layers');
3787
3788 var tagType = t.isVideo ? 'video' : 'audio',
3789 capsTagName = tagType.substring(0, 1).toUpperCase() + tagType.substring(1);
3790
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');
3797 } else {
3798 t.width = t.options['default' + capsTagName + 'Width'];
3799 }
3800
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');
3807 } else {
3808 t.height = t.options['default' + capsTagName + 'Height'];
3809 }
3810
3811 t.initialAspectRatio = t.height >= t.width ? t.width / t.height : t.height / t.width;
3812
3813 t.setPlayerSize(t.width, t.height);
3814
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';
3819 }
3820
3821 _mejs2.default.MepDefaults = playerOptions;
3822
3823 new _mediaelement2.default(t.media, playerOptions, t.mediaFiles);
3824
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);
3828 }
3829 }
3830 }, {
3831 key: 'showControls',
3832 value: function showControls(doAnimation) {
3833 var t = this;
3834
3835 doAnimation = doAnimation === undefined || doAnimation;
3836
3837 if (t.controlsAreVisible || !t.isVideo) {
3838 return;
3839 }
3840
3841 if (doAnimation) {
3842 (function () {
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);
3847 });
3848
3849 var controls = t.getElement(t.container).querySelectorAll('.' + t.options.classPrefix + 'control');
3850
3851 var _loop = function _loop(i, total) {
3852 dom.fadeIn(controls[i], 200, function () {
3853 dom.removeClass(controls[i], t.options.classPrefix + 'offscreen');
3854 });
3855 };
3856
3857 for (var i = 0, total = controls.length; i < total; i++) {
3858 _loop(i, total);
3859 }
3860 })();
3861 } else {
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;
3865
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 = '';
3870 }
3871
3872 var event = (0, _general.createEvent)('controlsshown', t.getElement(t.container));
3873 t.getElement(t.container).dispatchEvent(event);
3874 }
3875
3876 t.controlsAreVisible = true;
3877 t.setControlsSize();
3878 }
3879 }, {
3880 key: 'hideControls',
3881 value: function hideControls(doAnimation, forceHide) {
3882 var t = this;
3883
3884 doAnimation = doAnimation === undefined || doAnimation;
3885
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)) {
3887 return;
3888 }
3889
3890 if (doAnimation) {
3891 (function () {
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);
3897 });
3898
3899 var controls = t.getElement(t.container).querySelectorAll('.' + t.options.classPrefix + 'control');
3900
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 = '';
3905 });
3906 };
3907
3908 for (var i = 0, total = controls.length; i < total; i++) {
3909 _loop2(i, total);
3910 }
3911 })();
3912 } else {
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;
3916
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 = '';
3921 }
3922
3923 var event = (0, _general.createEvent)('controlshidden', t.getElement(t.container));
3924 t.getElement(t.container).dispatchEvent(event);
3925 }
3926
3927 t.controlsAreVisible = false;
3928 }
3929 }, {
3930 key: 'startControlsTimer',
3931 value: function startControlsTimer(timeout) {
3932 var t = this;
3933
3934 timeout = typeof timeout !== 'undefined' ? timeout : t.options.controlsTimeoutDefault;
3935
3936 t.killControlsTimer('start');
3937
3938 t.controlsTimer = setTimeout(function () {
3939 t.hideControls();
3940 t.killControlsTimer('hide');
3941 }, timeout);
3942 }
3943 }, {
3944 key: 'killControlsTimer',
3945 value: function killControlsTimer() {
3946 var t = this;
3947
3948 if (t.controlsTimer !== null) {
3949 clearTimeout(t.controlsTimer);
3950 delete t.controlsTimer;
3951 t.controlsTimer = null;
3952 }
3953 }
3954 }, {
3955 key: 'disableControls',
3956 value: function disableControls() {
3957 var t = this;
3958
3959 t.killControlsTimer();
3960 t.controlsEnabled = false;
3961 t.hideControls(false, true);
3962 }
3963 }, {
3964 key: 'enableControls',
3965 value: function enableControls() {
3966 var t = this;
3967
3968 t.controlsEnabled = true;
3969 t.showControls(false);
3970 }
3971 }, {
3972 key: '_setDefaultPlayer',
3973 value: function _setDefaultPlayer() {
3974 var t = this;
3975 if (t.proxy) {
3976 t.proxy.pause();
3977 }
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) {
3983 t.play();
3984 }
3985 }
3986 });
3987 }
3988 }, {
3989 key: '_meReady',
3990 value: function _meReady(media, domNode) {
3991 var t = this,
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);
3995
3996 if (t.getElement(t.controls)) {
3997 t.enableControls();
3998 }
3999
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 = '';
4002 }
4003
4004 if (t.created) {
4005 return;
4006 }
4007
4008 t.created = true;
4009 t.media = media;
4010 t.domNode = domNode;
4011
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) {
4015 t.play();
4016 }
4017
4018 if (t.options.success) {
4019
4020 if (typeof t.options.success === 'string') {
4021 _window2.default[t.options.success](t.media, t.domNode, t);
4022 } else {
4023 t.options.success(t.media, t.domNode, t);
4024 }
4025 }
4026
4027 return;
4028 }
4029
4030 t.featurePosition = {};
4031
4032 t._setDefaultPlayer();
4033
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);
4037
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;
4042 }));
4043 }
4044
4045 t.buildfeatures(t, t.getElement(t.controls), t.getElement(t.layers), t.media);
4046
4047 var event = (0, _general.createEvent)('controlsready', t.getElement(t.container));
4048 t.getElement(t.container).dispatchEvent(event);
4049
4050 t.setPlayerSize(t.width, t.height);
4051 t.setControlsSize();
4052
4053 if (t.isVideo) {
4054 t.clickToPlayPauseCallback = function () {
4055
4056 if (t.options.clickToPlayPause) {
4057 var button = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-button'),
4058 pressed = button.getAttribute('aria-pressed');
4059
4060 if (t.paused && pressed) {
4061 t.pause();
4062 } else if (t.paused) {
4063 t.play();
4064 } else {
4065 t.pause();
4066 }
4067
4068 button.setAttribute('aria-pressed', !pressed);
4069 t.getElement(t.container).focus();
4070 }
4071 };
4072
4073 t.createIframeLayer();
4074
4075 t.media.addEventListener('click', t.clickToPlayPauseCallback);
4076
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);
4081 } else {
4082 if (t.controlsEnabled) {
4083 t.showControls(false);
4084 }
4085 }
4086 }, _constants.SUPPORT_PASSIVE_EVENT ? { passive: true } : false);
4087 } else {
4088 t.getElement(t.container).addEventListener('mouseenter', function () {
4089 if (t.controlsEnabled) {
4090 if (!t.options.alwaysShowControls) {
4091 t.killControlsTimer('enter');
4092 t.showControls();
4093 t.startControlsTimer(t.options.controlsTimeoutMouseEnter);
4094 }
4095 }
4096 });
4097 t.getElement(t.container).addEventListener('mousemove', function () {
4098 if (t.controlsEnabled) {
4099 if (!t.controlsAreVisible) {
4100 t.showControls();
4101 }
4102 if (!t.options.alwaysShowControls) {
4103 t.startControlsTimer(t.options.controlsTimeoutMouseEnter);
4104 }
4105 }
4106 });
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);
4111 }
4112 }
4113 });
4114 }
4115
4116 if (t.options.hideVideoControlsOnLoad) {
4117 t.hideControls(false);
4118 }
4119
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);
4127 }
4128 });
4129 }
4130 }
4131
4132 t.media.addEventListener('play', function () {
4133 t.hasFocus = true;
4134
4135 for (var playerIndex in _mejs2.default.players) {
4136 if (_mejs2.default.players.hasOwnProperty(playerIndex)) {
4137 var p = _mejs2.default.players[playerIndex];
4138
4139 if (p.id !== t.id && t.options.pauseOtherPlayers && !p.paused && !p.ended) {
4140 p.pause();
4141 p.hasFocus = false;
4142 }
4143 }
4144 }
4145
4146 if (!(_constants.IS_ANDROID || _constants.IS_IOS) && !t.options.alwaysShowControls && t.isVideo) {
4147 t.hideControls();
4148 }
4149 });
4150
4151 t.media.addEventListener('ended', function () {
4152 if (t.options.autoRewind) {
4153 try {
4154 t.setCurrentTime(0);
4155
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';
4160 }
4161 }, 20);
4162 } catch (exp) {
4163
4164 }
4165 }
4166
4167 if (typeof t.media.renderer.stop === 'function') {
4168 t.media.renderer.stop();
4169 } else {
4170 t.pause();
4171 }
4172
4173 if (t.setProgressRail) {
4174 t.setProgressRail();
4175 }
4176 if (t.setCurrentRail) {
4177 t.setCurrentRail();
4178 }
4179
4180 if (t.options.loop) {
4181 t.play();
4182 } else if (!t.options.alwaysShowControls && t.controlsEnabled) {
4183 t.showControls();
4184 }
4185 });
4186
4187 t.media.addEventListener('loadedmetadata', function () {
4188
4189 (0, _time.calculateTimeFormat)(t.getDuration(), t.options, t.options.framesPerSecond || 25);
4190
4191 if (t.updateDuration) {
4192 t.updateDuration();
4193 }
4194 if (t.updateCurrent) {
4195 t.updateCurrent();
4196 }
4197
4198 if (!t.isFullScreen) {
4199 t.setPlayerSize(t.width, t.height);
4200 t.setControlsSize();
4201 }
4202 });
4203
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);
4209
4210 if (t.updateDuration) {
4211 t.updateDuration();
4212 }
4213 if (t.updateCurrent) {
4214 t.updateCurrent();
4215 }
4216
4217 t.setControlsSize();
4218 }
4219 });
4220
4221 t.getElement(t.container).addEventListener('click', function (e) {
4222 dom.addClass(e.currentTarget, t.options.classPrefix + 'container-keyboard-inactive');
4223 });
4224
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');
4229 t.showControls();
4230 t.startControlsTimer(t.options.controlsTimeoutMouseEnter);
4231 }
4232 });
4233
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);
4241 }
4242 }
4243 }
4244 }, 0);
4245 });
4246
4247 setTimeout(function () {
4248 t.setPlayerSize(t.width, t.height);
4249 t.setControlsSize();
4250 }, 0);
4251
4252 t.globalResizeCallback = function () {
4253 if (!(t.isFullScreen || _constants.HAS_TRUE_NATIVE_FULLSCREEN && _document2.default.webkitIsFullScreen)) {
4254 t.setPlayerSize(t.width, t.height);
4255 }
4256
4257 t.setControlsSize();
4258 };
4259
4260 t.globalBind('resize', t.globalResizeCallback);
4261 }
4262
4263 if (autoplay && isNative) {
4264 t.play();
4265 }
4266
4267 if (t.options.success) {
4268 if (typeof t.options.success === 'string') {
4269 _window2.default[t.options.success](t.media, t.domNode, t);
4270 } else {
4271 t.options.success(t.media, t.domNode, t);
4272 }
4273 }
4274 }
4275 }, {
4276 key: '_handleError',
4277 value: function _handleError(e, media, node) {
4278 var t = this,
4279 play = t.getElement(t.layers).querySelector('.' + t.options.classPrefix + 'overlay-play');
4280
4281 if (play) {
4282 play.style.display = 'none';
4283 }
4284
4285 if (t.options.error) {
4286 t.options.error(e, media, node);
4287 }
4288
4289 if (t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'cannotplay')) {
4290 t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'cannotplay').remove();
4291 }
4292
4293 var errorContainer = _document2.default.createElement('div');
4294 errorContainer.className = t.options.classPrefix + 'cannotplay';
4295 errorContainer.style.width = '100%';
4296 errorContainer.style.height = '100%';
4297
4298 var errorContent = typeof t.options.customError === 'function' ? t.options.customError(t.media, t.media.originalNode) : t.options.customError,
4299 imgError = '';
4300
4301 if (!errorContent) {
4302 var poster = t.media.originalNode.getAttribute('poster');
4303 if (poster) {
4304 imgError = '<img src="' + poster + '" alt="' + _mejs2.default.i18n.t('mejs.download-file') + '">';
4305 }
4306
4307 if (e.message) {
4308 errorContent = '<p>' + e.message + '</p>';
4309 }
4310
4311 if (e.urls) {
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>';
4315 }
4316 }
4317 }
4318
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';
4323 }
4324
4325 if (t.controlsEnabled) {
4326 t.disableControls();
4327 }
4328 }
4329 }, {
4330 key: 'setPlayerSize',
4331 value: function setPlayerSize(width, height) {
4332 var t = this;
4333
4334 if (!t.options.setDimensions) {
4335 return false;
4336 }
4337
4338 if (typeof width !== 'undefined') {
4339 t.width = width;
4340 }
4341
4342 if (typeof height !== 'undefined') {
4343 t.height = height;
4344 }
4345
4346 switch (t.options.stretching) {
4347 case 'fill':
4348 if (t.isVideo) {
4349 t.setFillMode();
4350 } else {
4351 t.setDimensions(t.width, t.height);
4352 }
4353 break;
4354 case 'responsive':
4355 t.setResponsiveMode();
4356 break;
4357 case 'none':
4358 t.setDimensions(t.width, t.height);
4359 break;
4360
4361 default:
4362 if (t.hasFluidMode() === true) {
4363 t.setResponsiveMode();
4364 } else {
4365 t.setDimensions(t.width, t.height);
4366 }
4367 break;
4368 }
4369 }
4370 }, {
4371 key: 'hasFluidMode',
4372 value: function hasFluidMode() {
4373 var t = this;
4374
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%';
4376 }
4377 }, {
4378 key: 'setResponsiveMode',
4379 value: function setResponsiveMode() {
4380 var t = this,
4381 parent = function () {
4382
4383 var parentEl = void 0,
4384 el = t.getElement(t.container);
4385
4386 while (el) {
4387 try {
4388 if (_constants.IS_FIREFOX && el.tagName.toLowerCase() === 'html' && _window2.default.self !== _window2.default.top && _window2.default.frameElement !== null) {
4389 return _window2.default.frameElement;
4390 } else {
4391 parentEl = el.parentElement;
4392 }
4393 } catch (e) {
4394 parentEl = el.parentElement;
4395 }
4396
4397 if (parentEl && dom.visible(parentEl)) {
4398 return parentEl;
4399 }
4400 el = parentEl;
4401 }
4402
4403 return null;
4404 }(),
4405 parentStyles = parent ? getComputedStyle(parent, null) : getComputedStyle(_document2.default.body, null),
4406 nativeWidth = function () {
4407 if (t.isVideo) {
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');
4412 } else {
4413 return t.options.defaultVideoWidth;
4414 }
4415 } else {
4416 return t.options.defaultAudioWidth;
4417 }
4418 }(),
4419 nativeHeight = function () {
4420 if (t.isVideo) {
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');
4425 } else {
4426 return t.options.defaultVideoHeight;
4427 }
4428 } else {
4429 return t.options.defaultAudioHeight;
4430 }
4431 }(),
4432 aspectRatio = function () {
4433 var ratio = 1;
4434 if (!t.isVideo) {
4435 return ratio;
4436 }
4437
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;
4440 } else {
4441 ratio = t.initialAspectRatio;
4442 }
4443
4444 if (isNaN(ratio) || ratio < 0.01 || ratio > 100) {
4445 ratio = 1;
4446 }
4447
4448 return ratio;
4449 }(),
4450 parentHeight = parseFloat(parentStyles.height);
4451
4452 var newHeight = void 0,
4453 parentWidth = parseFloat(parentStyles.width);
4454
4455 if (t.isVideo) {
4456 if (t.height === '100%') {
4457 newHeight = parseFloat(parentWidth * nativeHeight / nativeWidth, 10);
4458 } else {
4459 newHeight = t.height >= t.width ? parseFloat(parentWidth / aspectRatio, 10) : parseFloat(parentWidth * aspectRatio, 10);
4460 }
4461 } else {
4462 newHeight = nativeHeight;
4463 }
4464
4465 if (isNaN(newHeight)) {
4466 newHeight = parentHeight;
4467 }
4468
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;
4472 }
4473
4474 if (newHeight && parentWidth) {
4475 t.getElement(t.container).style.width = parentWidth + 'px';
4476 t.getElement(t.container).style.height = newHeight + 'px';
4477
4478 t.node.style.width = '100%';
4479 t.node.style.height = '100%';
4480
4481 if (t.isVideo && t.media.setSize) {
4482 t.media.setSize(parentWidth, newHeight);
4483 }
4484
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%';
4489 }
4490 }
4491 }
4492 }, {
4493 key: 'setFillMode',
4494 value: function setFillMode() {
4495 var t = this;
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);
4500
4501 while (el) {
4502 try {
4503 if (_constants.IS_FIREFOX && el.tagName.toLowerCase() === 'html' && _window2.default.self !== _window2.default.top && _window2.default.frameElement !== null) {
4504 return _window2.default.frameElement;
4505 } else {
4506 parentEl = el.parentElement;
4507 }
4508 } catch (e) {
4509 parentEl = el.parentElement;
4510 }
4511
4512 if (parentEl && dom.visible(parentEl)) {
4513 return parentEl;
4514 }
4515 el = parentEl;
4516 }
4517
4518 return null;
4519 }();
4520 var parentStyles = parent ? getComputedStyle(parent, null) : getComputedStyle(_document2.default.body, null);
4521
4522 if (t.node.style.height !== 'none' && t.node.style.height !== t.height) {
4523 t.node.style.height = 'auto';
4524 }
4525 if (t.node.style.maxWidth !== 'none' && t.node.style.maxWidth !== t.width) {
4526 t.node.style.maxWidth = 'none';
4527 }
4528
4529 if (t.node.style.maxHeight !== 'none' && t.node.style.maxHeight !== t.height) {
4530 t.node.style.maxHeight = 'none';
4531 }
4532
4533 if (t.node.currentStyle) {
4534 if (t.node.currentStyle.height === '100%') {
4535 t.node.currentStyle.height = 'auto';
4536 }
4537 if (t.node.currentStyle.maxWidth === '100%') {
4538 t.node.currentStyle.maxWidth = 'none';
4539 }
4540 if (t.node.currentStyle.maxHeight === '100%') {
4541 t.node.currentStyle.maxHeight = 'none';
4542 }
4543 }
4544
4545 if (!isIframe && !parseFloat(parentStyles.width)) {
4546 parent.style.width = t.media.offsetWidth + 'px';
4547 }
4548
4549 if (!isIframe && !parseFloat(parentStyles.height)) {
4550 parent.style.height = t.media.offsetHeight + 'px';
4551 }
4552
4553 parentStyles = getComputedStyle(parent);
4554
4555 var parentWidth = parseFloat(parentStyles.width),
4556 parentHeight = parseFloat(parentStyles.height);
4557
4558 t.setDimensions('100%', '100%');
4559
4560 var poster = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'poster>img');
4561 if (poster) {
4562 poster.style.display = '';
4563 }
4564
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';
4577
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);
4583 }
4584
4585 targetElement[i].style.marginLeft = Math.floor((parentWidth - finalWidth) / 2) + 'px';
4586 targetElement[i].style.marginTop = 0;
4587 }
4588 }
4589 }, {
4590 key: 'setDimensions',
4591 value: function setDimensions(width, height) {
4592 var t = this;
4593
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';
4596
4597 t.getElement(t.container).style.width = width;
4598 t.getElement(t.container).style.height = height;
4599
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;
4604 }
4605 }
4606 }, {
4607 key: 'setControlsSize',
4608 value: function setControlsSize() {
4609 var t = this;
4610
4611 if (!dom.visible(t.getElement(t.container))) {
4612 return;
4613 }
4614
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);
4620
4621 var siblingsWidth = 0;
4622
4623 var siblings = dom.siblings(t.rail, function (el) {
4624 return el !== t.rail;
4625 }),
4626 total = siblings.length;
4627 for (var i = 0; i < total; i++) {
4628 siblingsWidth += siblings[i].offsetWidth;
4629 }
4630
4631 siblingsWidth += totalMargin + (totalMargin === 0 ? railMargin * 2 : railMargin) + 1;
4632
4633 t.getElement(t.container).style.minWidth = siblingsWidth + 'px';
4634
4635 var event = (0, _general.createEvent)('controlsresize', t.getElement(t.container));
4636 t.getElement(t.container).dispatchEvent(event);
4637 } else {
4638 var children = t.getElement(t.controls).children;
4639 var minWidth = 0;
4640
4641 for (var _i = 0, _total = children.length; _i < _total; _i++) {
4642 minWidth += children[_i].offsetWidth;
4643 }
4644
4645 t.getElement(t.container).style.minWidth = minWidth + 'px';
4646 }
4647 }
4648 }, {
4649 key: 'addControlElement',
4650 value: function addControlElement(element, key) {
4651
4652 var t = this;
4653
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);
4657 } else {
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;
4663 break;
4664 }
4665 }
4666 }
4667 }
4668 }, {
4669 key: 'createIframeLayer',
4670 value: function createIframeLayer() {
4671 var t = this;
4672
4673 if (t.isVideo && t.media.rendererName !== null && t.media.rendererName.indexOf('iframe') > -1 && !_document2.default.getElementById(t.media.id + '-iframe-overlay')) {
4674
4675 var layer = _document2.default.createElement('div'),
4676 target = _document2.default.getElementById(t.media.id + '_' + t.media.rendererName);
4677
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) {
4682 if (t.paused) {
4683 t.play();
4684 } else {
4685 t.pause();
4686 }
4687
4688 e.preventDefault();
4689 e.stopPropagation();
4690 }
4691 });
4692
4693 target.parentNode.insertBefore(layer, target);
4694 }
4695 }
4696 }, {
4697 key: 'resetSize',
4698 value: function resetSize() {
4699 var t = this;
4700
4701 setTimeout(function () {
4702 t.setPlayerSize(t.width, t.height);
4703 t.setControlsSize();
4704 }, 50);
4705 }
4706 }, {
4707 key: 'setPoster',
4708 value: function setPoster(url) {
4709 var t = this;
4710
4711 if (t.getElement(t.container)) {
4712 var posterDiv = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'poster');
4713
4714 if (!posterDiv) {
4715 posterDiv = _document2.default.createElement('div');
4716 posterDiv.className = t.options.classPrefix + 'poster ' + t.options.classPrefix + 'layer';
4717 t.getElement(t.layers).appendChild(posterDiv);
4718 }
4719
4720 var posterImg = posterDiv.querySelector('img');
4721
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);
4729 }
4730
4731 if (url) {
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';
4738 posterImg.remove();
4739 } else {
4740 posterDiv.style.display = 'none';
4741 }
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;
4744 }
4745 }
4746 }, {
4747 key: 'changeSkin',
4748 value: function changeSkin(className) {
4749 var t = this;
4750
4751 t.getElement(t.container).className = t.options.classPrefix + 'container ' + className;
4752 t.setPlayerSize(t.width, t.height);
4753 t.setControlsSize();
4754 }
4755 }, {
4756 key: 'globalBind',
4757 value: function globalBind(events, callback) {
4758 var t = this,
4759 doc = t.node ? t.node.ownerDocument : _document2.default;
4760
4761 events = (0, _general.splitEvents)(events, t.id);
4762 if (events.d) {
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);
4767 return e;
4768 }, '');
4769 }
4770 }
4771 if (events.w) {
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);
4776 return e;
4777 }, '');
4778 }
4779 }
4780 }
4781 }, {
4782 key: 'globalUnbind',
4783 value: function globalUnbind(events, callback) {
4784 var t = this,
4785 doc = t.node ? t.node.ownerDocument : _document2.default;
4786
4787 events = (0, _general.splitEvents)(events, t.id);
4788 if (events.d) {
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);
4793 return e;
4794 }, '');
4795 }
4796 }
4797 if (events.w) {
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);
4802 return e;
4803 }, '');
4804 }
4805 }
4806 }
4807 }, {
4808 key: 'buildfeatures',
4809 value: function buildfeatures(player, controls, layers, media) {
4810 var t = this;
4811
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]) {
4815 try {
4816 t['build' + feature](player, controls, layers, media);
4817 } catch (e) {
4818 console.error('error building ' + feature, e);
4819 }
4820 }
4821 }
4822 }
4823 }, {
4824 key: 'buildposter',
4825 value: function buildposter(player, controls, layers, media) {
4826 var t = this,
4827 poster = _document2.default.createElement('div');
4828
4829 poster.className = t.options.classPrefix + 'poster ' + t.options.classPrefix + 'layer';
4830 layers.appendChild(poster);
4831
4832 var posterUrl = media.originalNode.getAttribute('poster');
4833
4834 if (player.options.poster !== '') {
4835 if (posterUrl && _constants.IS_IOS) {
4836 media.originalNode.removeAttribute('poster');
4837 }
4838 posterUrl = player.options.poster;
4839 }
4840
4841 if (posterUrl) {
4842 t.setPoster(posterUrl);
4843 } else if (t.media.renderer !== null && typeof t.media.renderer.getPosterUrl === 'function') {
4844 t.setPoster(t.media.renderer.getPosterUrl());
4845 } else {
4846 poster.style.display = 'none';
4847 }
4848
4849 media.addEventListener('play', function () {
4850 poster.style.display = 'none';
4851 });
4852
4853 media.addEventListener('playing', function () {
4854 poster.style.display = 'none';
4855 });
4856
4857 if (player.options.showPosterWhenEnded && player.options.autoRewind) {
4858 media.addEventListener('ended', function () {
4859 poster.style.display = '';
4860 });
4861 }
4862
4863 media.addEventListener('error', function () {
4864 poster.style.display = 'none';
4865 });
4866
4867 if (player.options.showPosterWhenPaused) {
4868 media.addEventListener('pause', function () {
4869 if (!player.ended) {
4870 poster.style.display = '';
4871 }
4872 });
4873 }
4874 }
4875 }, {
4876 key: 'buildoverlays',
4877 value: function buildoverlays(player, controls, layers, media) {
4878
4879 if (!player.isVideo) {
4880 return;
4881 }
4882
4883 var t = this,
4884 loading = _document2.default.createElement('div'),
4885 error = _document2.default.createElement('div'),
4886 bigPlay = _document2.default.createElement('div');
4887
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);
4892
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);
4897
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) {
4902
4903 var button = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-button'),
4904 pressed = button.getAttribute('aria-pressed');
4905
4906 if (t.paused) {
4907 t.play();
4908 } else {
4909 t.pause();
4910 }
4911
4912 button.setAttribute('aria-pressed', !!pressed);
4913 t.getElement(t.container).focus();
4914 }
4915 });
4916
4917 bigPlay.addEventListener('keydown', function (e) {
4918 var keyPressed = e.keyCode || e.which || 0;
4919
4920 if (keyPressed === 13 || _constants.IS_FIREFOX && keyPressed === 32) {
4921 var event = (0, _general.createEvent)('click', bigPlay);
4922 bigPlay.dispatchEvent(event);
4923 return false;
4924 }
4925 });
4926
4927 layers.appendChild(bigPlay);
4928
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';
4931 }
4932
4933 var hasError = false;
4934
4935 media.addEventListener('play', function () {
4936 bigPlay.style.display = 'none';
4937 loading.style.display = 'none';
4938 error.style.display = 'none';
4939 hasError = false;
4940 });
4941 media.addEventListener('playing', function () {
4942 bigPlay.style.display = 'none';
4943 loading.style.display = 'none';
4944 error.style.display = 'none';
4945 hasError = false;
4946 });
4947 media.addEventListener('seeking', function () {
4948 bigPlay.style.display = 'none';
4949 loading.style.display = '';
4950 hasError = false;
4951 });
4952 media.addEventListener('seeked', function () {
4953 bigPlay.style.display = t.paused && !_constants.IS_STOCK_ANDROID ? '' : 'none';
4954 loading.style.display = 'none';
4955 hasError = false;
4956 });
4957 media.addEventListener('pause', function () {
4958 loading.style.display = 'none';
4959 if (!_constants.IS_STOCK_ANDROID && !hasError) {
4960 bigPlay.style.display = '';
4961 }
4962 hasError = false;
4963 });
4964 media.addEventListener('waiting', function () {
4965 loading.style.display = '';
4966 hasError = false;
4967 });
4968
4969 media.addEventListener('loadeddata', function () {
4970 loading.style.display = '';
4971
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);
4978 }
4979 }, 300);
4980 }
4981 hasError = false;
4982 });
4983 media.addEventListener('canplay', function () {
4984 loading.style.display = 'none';
4985
4986 clearTimeout(media.canplayTimeout);
4987 hasError = false;
4988 });
4989
4990 media.addEventListener('error', function (e) {
4991 t._handleError(e, t.media, t.node);
4992 loading.style.display = 'none';
4993 bigPlay.style.display = 'none';
4994 hasError = true;
4995 });
4996
4997 media.addEventListener('loadedmetadata', function () {
4998 if (!t.controlsEnabled) {
4999 t.enableControls();
5000 }
5001 });
5002
5003 media.addEventListener('keydown', function (e) {
5004 t.onkeydown(player, media, e);
5005 hasError = false;
5006 });
5007 }
5008 }, {
5009 key: 'buildkeyboard',
5010 value: function buildkeyboard(player, controls, layers, media) {
5011
5012 var t = this;
5013
5014 t.getElement(t.container).addEventListener('keydown', function () {
5015 t.keyboardAction = true;
5016 });
5017
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);
5023 };
5024
5025 t.globalClickCallback = function (event) {
5026 t.hasFocus = !!event.target.closest('.' + t.options.classPrefix + 'container');
5027 };
5028
5029 t.globalBind('keydown', t.globalKeydownCallback);
5030
5031 t.globalBind('click', t.globalClickCallback);
5032 }
5033 }, {
5034 key: 'onkeydown',
5035 value: function onkeydown(player, media, e) {
5036
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];
5040
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);
5044 e.preventDefault();
5045 e.stopPropagation();
5046 return;
5047 }
5048 }
5049 }
5050 }
5051
5052 return true;
5053 }
5054 }, {
5055 key: 'play',
5056 value: function play() {
5057 this.proxy.play();
5058 }
5059 }, {
5060 key: 'pause',
5061 value: function pause() {
5062 this.proxy.pause();
5063 }
5064 }, {
5065 key: 'load',
5066 value: function load() {
5067 this.proxy.load();
5068 }
5069 }, {
5070 key: 'setCurrentTime',
5071 value: function setCurrentTime(time) {
5072 this.proxy.setCurrentTime(time);
5073 }
5074 }, {
5075 key: 'getCurrentTime',
5076 value: function getCurrentTime() {
5077 return this.proxy.currentTime;
5078 }
5079 }, {
5080 key: 'getDuration',
5081 value: function getDuration() {
5082 return this.proxy.duration;
5083 }
5084 }, {
5085 key: 'setVolume',
5086 value: function setVolume(volume) {
5087 this.proxy.volume = volume;
5088 }
5089 }, {
5090 key: 'getVolume',
5091 value: function getVolume() {
5092 return this.proxy.getVolume();
5093 }
5094 }, {
5095 key: 'setMuted',
5096 value: function setMuted(value) {
5097 this.proxy.setMuted(value);
5098 }
5099 }, {
5100 key: 'setSrc',
5101 value: function setSrc(src) {
5102 if (!this.controlsEnabled) {
5103 this.enableControls();
5104 }
5105 this.proxy.setSrc(src);
5106 }
5107 }, {
5108 key: 'getSrc',
5109 value: function getSrc() {
5110 return this.proxy.getSrc();
5111 }
5112 }, {
5113 key: 'canPlayType',
5114 value: function canPlayType(type) {
5115 return this.proxy.canPlayType(type);
5116 }
5117 }, {
5118 key: 'remove',
5119 value: function remove() {
5120 var t = this,
5121 rendererName = t.media.rendererName,
5122 src = t.media.originalNode.src;
5123
5124 for (var featureIndex in t.options.features) {
5125 var feature = t.options.features[featureIndex];
5126 if (t['clean' + feature]) {
5127 try {
5128 t['clean' + feature](t, t.getElement(t.layers), t.getElement(t.controls), t.media);
5129 } catch (e) {
5130 console.error('error cleaning ' + feature, e);
5131 }
5132 }
5133 }
5134
5135 var nativeWidth = t.node.getAttribute('width'),
5136 nativeHeight = t.node.getAttribute('height');
5137
5138 if (nativeWidth) {
5139 if (nativeWidth.indexOf('%') === -1) {
5140 nativeWidth = nativeWidth + 'px';
5141 }
5142 } else {
5143 nativeWidth = 'auto';
5144 }
5145
5146 if (nativeHeight) {
5147 if (nativeHeight.indexOf('%') === -1) {
5148 nativeHeight = nativeHeight + 'px';
5149 }
5150 } else {
5151 nativeHeight = 'auto';
5152 }
5153
5154 t.node.style.width = nativeWidth;
5155 t.node.style.height = nativeHeight;
5156
5157 t.setPlayerSize(0, 0);
5158
5159 if (!t.isDynamic) {
5160 (function () {
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');
5164 if (poster) {
5165 t.node.setAttribute('poster', poster.src);
5166 }
5167
5168 delete t.node.autoplay;
5169
5170 if (t.media.canPlayType((0, _media.getTypeFromFile)(src)) !== '') {
5171 t.node.setAttribute('src', src);
5172 }
5173
5174 if (~rendererName.indexOf('iframe')) {
5175 var layer = _document2.default.getElementById(t.media.id + '-iframe-overlay');
5176 layer.remove();
5177 }
5178
5179 var node = t.node.cloneNode();
5180 node.style.display = '';
5181 t.getElement(t.container).parentNode.insertBefore(node, t.getElement(t.container));
5182 t.node.remove();
5183
5184 if (t.mediaFiles) {
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);
5190 }
5191 }
5192 if (t.trackFiles) {
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;
5200
5201 node.appendChild(newTrack);
5202 newTrack.addEventListener('load', function () {
5203 this.mode = 'showing';
5204 node.textTracks[_i4].mode = 'showing';
5205 });
5206 };
5207
5208 for (var _i4 = 0, _total4 = t.trackFiles.length; _i4 < _total4; _i4++) {
5209 _loop3(_i4, _total4);
5210 }
5211 }
5212
5213 delete t.node;
5214 delete t.mediaFiles;
5215 delete t.trackFiles;
5216 })();
5217 } else {
5218 t.getElement(t.container).parentNode.insertBefore(t.node, t.getElement(t.container));
5219 }
5220
5221 if (typeof t.media.renderer.destroy === 'function') {
5222 t.media.renderer.destroy();
5223 }
5224
5225 delete _mejs2.default.players[t.id];
5226
5227 if (_typeof(t.getElement(t.container)) === 'object') {
5228 var offscreen = t.getElement(t.container).parentNode.querySelector('.' + t.options.classPrefix + 'offscreen');
5229 offscreen.remove();
5230 t.getElement(t.container).remove();
5231 }
5232 t.globalUnbind('resize', t.globalResizeCallback);
5233 t.globalUnbind('keydown', t.globalKeydownCallback);
5234 t.globalUnbind('click', t.globalClickCallback);
5235
5236 delete t.media.player;
5237 }
5238 }, {
5239 key: 'paused',
5240 get: function get() {
5241 return this.proxy.paused;
5242 }
5243 }, {
5244 key: 'muted',
5245 get: function get() {
5246 return this.proxy.muted;
5247 },
5248 set: function set(muted) {
5249 this.setMuted(muted);
5250 }
5251 }, {
5252 key: 'ended',
5253 get: function get() {
5254 return this.proxy.ended;
5255 }
5256 }, {
5257 key: 'readyState',
5258 get: function get() {
5259 return this.proxy.readyState;
5260 }
5261 }, {
5262 key: 'currentTime',
5263 set: function set(time) {
5264 this.setCurrentTime(time);
5265 },
5266 get: function get() {
5267 return this.getCurrentTime();
5268 }
5269 }, {
5270 key: 'duration',
5271 get: function get() {
5272 return this.getDuration();
5273 }
5274 }, {
5275 key: 'volume',
5276 set: function set(volume) {
5277 this.setVolume(volume);
5278 },
5279 get: function get() {
5280 return this.getVolume();
5281 }
5282 }, {
5283 key: 'src',
5284 set: function set(src) {
5285 this.setSrc(src);
5286 },
5287 get: function get() {
5288 return this.getSrc();
5289 }
5290 }]);
5291
5292 return MediaElementPlayer;
5293 }();
5294
5295 _window2.default.MediaElementPlayer = MediaElementPlayer;
5296 _mejs2.default.MediaElementPlayer = MediaElementPlayer;
5297
5298 exports.default = MediaElementPlayer;
5299
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){
5301 'use strict';
5302
5303 Object.defineProperty(exports, "__esModule", {
5304 value: true
5305 });
5306
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; }; }();
5308
5309 var _window = _dereq_(3);
5310
5311 var _window2 = _interopRequireDefault(_window);
5312
5313 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5314
5315 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
5316
5317 var DefaultPlayer = function () {
5318 function DefaultPlayer(player) {
5319 _classCallCheck(this, DefaultPlayer);
5320
5321 this.media = player.media;
5322 this.isVideo = player.isVideo;
5323 this.classPrefix = player.options.classPrefix;
5324 this.createIframeLayer = function () {
5325 return player.createIframeLayer();
5326 };
5327 this.setPoster = function (url) {
5328 return player.setPoster(url);
5329 };
5330 return this;
5331 }
5332
5333 _createClass(DefaultPlayer, [{
5334 key: 'play',
5335 value: function play() {
5336 this.media.play();
5337 }
5338 }, {
5339 key: 'pause',
5340 value: function pause() {
5341 this.media.pause();
5342 }
5343 }, {
5344 key: 'load',
5345 value: function load() {
5346 var t = this;
5347
5348 if (!t.isLoaded) {
5349 t.media.load();
5350 }
5351
5352 t.isLoaded = true;
5353 }
5354 }, {
5355 key: 'setCurrentTime',
5356 value: function setCurrentTime(time) {
5357 this.media.setCurrentTime(time);
5358 }
5359 }, {
5360 key: 'getCurrentTime',
5361 value: function getCurrentTime() {
5362 return this.media.currentTime;
5363 }
5364 }, {
5365 key: 'getDuration',
5366 value: function getDuration() {
5367 return this.media.getDuration();
5368 }
5369 }, {
5370 key: 'setVolume',
5371 value: function setVolume(volume) {
5372 this.media.setVolume(volume);
5373 }
5374 }, {
5375 key: 'getVolume',
5376 value: function getVolume() {
5377 return this.media.getVolume();
5378 }
5379 }, {
5380 key: 'setMuted',
5381 value: function setMuted(value) {
5382 this.media.setMuted(value);
5383 }
5384 }, {
5385 key: 'setSrc',
5386 value: function setSrc(src) {
5387 var t = this,
5388 layer = document.getElementById(t.media.id + '-iframe-overlay');
5389
5390 if (layer) {
5391 layer.remove();
5392 }
5393
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());
5398 }
5399 }
5400 }, {
5401 key: 'getSrc',
5402 value: function getSrc() {
5403 return this.media.getSrc();
5404 }
5405 }, {
5406 key: 'canPlayType',
5407 value: function canPlayType(type) {
5408 return this.media.canPlayType(type);
5409 }
5410 }, {
5411 key: 'paused',
5412 get: function get() {
5413 return this.media.paused;
5414 }
5415 }, {
5416 key: 'muted',
5417 set: function set(muted) {
5418 this.setMuted(muted);
5419 },
5420 get: function get() {
5421 return this.media.muted;
5422 }
5423 }, {
5424 key: 'ended',
5425 get: function get() {
5426 return this.media.ended;
5427 }
5428 }, {
5429 key: 'readyState',
5430 get: function get() {
5431 return this.media.readyState;
5432 }
5433 }, {
5434 key: 'currentTime',
5435 set: function set(time) {
5436 this.setCurrentTime(time);
5437 },
5438 get: function get() {
5439 return this.getCurrentTime();
5440 }
5441 }, {
5442 key: 'duration',
5443 get: function get() {
5444 return this.getDuration();
5445 }
5446 }, {
5447 key: 'volume',
5448 set: function set(volume) {
5449 this.setVolume(volume);
5450 },
5451 get: function get() {
5452 return this.getVolume();
5453 }
5454 }, {
5455 key: 'src',
5456 set: function set(src) {
5457 this.setSrc(src);
5458 },
5459 get: function get() {
5460 return this.getSrc();
5461 }
5462 }]);
5463
5464 return DefaultPlayer;
5465 }();
5466
5467 exports.default = DefaultPlayer;
5468
5469
5470 _window2.default.DefaultPlayer = DefaultPlayer;
5471
5472 },{"3":3}],18:[function(_dereq_,module,exports){
5473 'use strict';
5474
5475 var _window = _dereq_(3);
5476
5477 var _window2 = _interopRequireDefault(_window);
5478
5479 var _mejs = _dereq_(7);
5480
5481 var _mejs2 = _interopRequireDefault(_mejs);
5482
5483 var _player = _dereq_(16);
5484
5485 var _player2 = _interopRequireDefault(_player);
5486
5487 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5488
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;
5495 }
5496
5497 (function ($) {
5498 if (typeof $ !== 'undefined') {
5499 $.fn.mediaelementplayer = function (options) {
5500 if (options === false) {
5501 this.each(function () {
5502 var player = $(this).data('mediaelementplayer');
5503 if (player) {
5504 player.remove();
5505 }
5506 $(this).removeData('mediaelementplayer');
5507 });
5508 } else {
5509 this.each(function () {
5510 $(this).data('mediaelementplayer', new _player2.default(this, options));
5511 });
5512 }
5513 return this;
5514 };
5515
5516 $(document).ready(function () {
5517 $('.' + _mejs2.default.MepDefaults.classPrefix + 'player').mediaelementplayer();
5518 });
5519 }
5520 })(_mejs2.default.$);
5521
5522 },{"16":16,"3":3,"7":7}],19:[function(_dereq_,module,exports){
5523 'use strict';
5524
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; };
5526
5527 var _window = _dereq_(3);
5528
5529 var _window2 = _interopRequireDefault(_window);
5530
5531 var _mejs = _dereq_(7);
5532
5533 var _mejs2 = _interopRequireDefault(_mejs);
5534
5535 var _renderer = _dereq_(8);
5536
5537 var _general = _dereq_(27);
5538
5539 var _media = _dereq_(28);
5540
5541 var _constants = _dereq_(25);
5542
5543 var _dom = _dereq_(26);
5544
5545 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5546
5547 var NativeDash = {
5548
5549 promise: null,
5550
5551 load: function load(settings) {
5552 if (typeof dashjs !== 'undefined') {
5553 NativeDash.promise = new Promise(function (resolve) {
5554 resolve();
5555 }).then(function () {
5556 NativeDash._createPlayer(settings);
5557 });
5558 } else {
5559 settings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdn.dashjs.org/latest/dash.all.min.js';
5560
5561 NativeDash.promise = NativeDash.promise || (0, _dom.loadScript)(settings.options.path);
5562 NativeDash.promise.then(function () {
5563 NativeDash._createPlayer(settings);
5564 });
5565 }
5566
5567 return NativeDash.promise;
5568 },
5569
5570 _createPlayer: function _createPlayer(settings) {
5571 var player = dashjs.MediaPlayer().create();
5572 _window2.default['__ready__' + settings.id](player);
5573 return player;
5574 }
5575 };
5576
5577 var DashNativeRenderer = {
5578 name: 'native_dash',
5579 options: {
5580 prefix: 'native_dash',
5581 dash: {
5582 path: 'https://cdn.dashjs.org/latest/dash.all.min.js',
5583 debug: false,
5584 drm: {},
5585
5586 robustnessLevel: ''
5587 }
5588 },
5589
5590 canPlayType: function canPlayType(type) {
5591 return _constants.HAS_MSE && ['application/dash+xml'].indexOf(type.toLowerCase()) > -1;
5592 },
5593
5594 create: function create(mediaElement, options, mediaFiles) {
5595
5596 var originalNode = mediaElement.originalNode,
5597 id = mediaElement.id + '_' + options.prefix,
5598 autoplay = originalNode.autoplay,
5599 children = originalNode.children;
5600
5601 var node = null,
5602 dashPlayer = null;
5603
5604 originalNode.removeAttribute('type');
5605 for (var i = 0, total = children.length; i < total; i++) {
5606 children[i].removeAttribute('type');
5607 }
5608
5609 node = originalNode.cloneNode(true);
5610 options = Object.assign(options, mediaElement.options);
5611
5612 var props = _mejs2.default.html5media.properties,
5613 events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) {
5614 return e !== 'error';
5615 }),
5616 attachNativeEvents = function attachNativeEvents(e) {
5617 var event = (0, _general.createEvent)(e.type, mediaElement);
5618 mediaElement.dispatchEvent(event);
5619 },
5620 assignGettersSetters = function assignGettersSetters(propName) {
5621 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
5622
5623 node['get' + capName] = function () {
5624 return dashPlayer !== null ? node[propName] : null;
5625 };
5626
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) {
5633 dashPlayer.reset();
5634 for (var _i = 0, _total = events.length; _i < _total; _i++) {
5635 node.removeEventListener(events[_i], attachNativeEvents);
5636 }
5637 dashPlayer = NativeDash._createPlayer({
5638 options: options.dash,
5639 id: id
5640 });
5641
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);
5646 }
5647 }
5648 dashPlayer.attachSource(source);
5649 if (autoplay) {
5650 dashPlayer.play();
5651 }
5652 }
5653 } else {
5654 node[propName] = value;
5655 }
5656 }
5657 };
5658 };
5659
5660 for (var _i2 = 0, _total2 = props.length; _i2 < _total2; _i2++) {
5661 assignGettersSetters(props[_i2]);
5662 }
5663
5664 _window2.default['__ready__' + id] = function (_dashPlayer) {
5665 mediaElement.dashPlayer = dashPlayer = _dashPlayer;
5666
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);
5676
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);
5681 }
5682 }
5683 dashPlayer.attachSource(node.getSrc());
5684 }
5685
5686 node.addEventListener(eventName, attachNativeEvents);
5687 };
5688
5689 for (var _i3 = 0, _total3 = events.length; _i3 < _total3; _i3++) {
5690 assignEvents(events[_i3]);
5691 }
5692
5693 var assignMdashEvents = function assignMdashEvents(e) {
5694 if (e.type.toLowerCase() === 'error') {
5695 mediaElement.generateError(e.message, node.src);
5696 console.error(e);
5697 } else {
5698 var _event = (0, _general.createEvent)(e.type, mediaElement);
5699 _event.data = e;
5700 mediaElement.dispatchEvent(_event);
5701 }
5702 };
5703
5704 for (var eventType in dashEvents) {
5705 if (dashEvents.hasOwnProperty(eventType)) {
5706 dashPlayer.on(dashEvents[eventType], function (e) {
5707 return assignMdashEvents(e);
5708 });
5709 }
5710 }
5711 };
5712
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;
5719 }
5720 break;
5721 }
5722 }
5723 }
5724
5725 node.setAttribute('id', id);
5726
5727 originalNode.parentNode.insertBefore(node, originalNode);
5728 originalNode.autoplay = false;
5729 originalNode.style.display = 'none';
5730
5731 node.setSize = function (width, height) {
5732 node.style.width = width + 'px';
5733 node.style.height = height + 'px';
5734 return node;
5735 };
5736
5737 node.hide = function () {
5738 node.pause();
5739 node.style.display = 'none';
5740 return node;
5741 };
5742
5743 node.show = function () {
5744 node.style.display = '';
5745 return node;
5746 };
5747
5748 node.destroy = function () {
5749 if (dashPlayer !== null) {
5750 dashPlayer.reset();
5751 }
5752 };
5753
5754 var event = (0, _general.createEvent)('rendererready', node);
5755 mediaElement.dispatchEvent(event);
5756
5757 mediaElement.promises.push(NativeDash.load({
5758 options: options.dash,
5759 id: id
5760 }));
5761
5762 return node;
5763 }
5764 };
5765
5766 _media.typeChecks.push(function (url) {
5767 return ~url.toLowerCase().indexOf('.mpd') ? 'application/dash+xml' : null;
5768 });
5769
5770 _renderer.renderer.add(DashNativeRenderer);
5771
5772 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],20:[function(_dereq_,module,exports){
5773 'use strict';
5774
5775 Object.defineProperty(exports, "__esModule", {
5776 value: true
5777 });
5778 exports.PluginDetector = undefined;
5779
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; };
5781
5782 var _window = _dereq_(3);
5783
5784 var _window2 = _interopRequireDefault(_window);
5785
5786 var _document = _dereq_(2);
5787
5788 var _document2 = _interopRequireDefault(_document);
5789
5790 var _mejs = _dereq_(7);
5791
5792 var _mejs2 = _interopRequireDefault(_mejs);
5793
5794 var _i18n = _dereq_(5);
5795
5796 var _i18n2 = _interopRequireDefault(_i18n);
5797
5798 var _renderer = _dereq_(8);
5799
5800 var _general = _dereq_(27);
5801
5802 var _constants = _dereq_(25);
5803
5804 var _media = _dereq_(28);
5805
5806 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5807
5808 var PluginDetector = exports.PluginDetector = {
5809 plugins: [],
5810
5811 hasPluginVersion: function hasPluginVersion(plugin, v) {
5812 var pv = PluginDetector.plugins[plugin];
5813 v[1] = v[1] || 0;
5814 v[2] = v[2] || 0;
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];
5816 },
5817
5818 addPlugin: function addPlugin(p, pluginName, mimeType, activeX, axDetect) {
5819 PluginDetector.plugins[p] = PluginDetector.detectPlugin(pluginName, mimeType, activeX, axDetect);
5820 },
5821
5822 detectPlugin: function detectPlugin(pluginName, mimeType, activeX, axDetect) {
5823
5824 var version = [0, 0, 0],
5825 description = void 0,
5826 ax = void 0;
5827
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);
5834 }
5835 }
5836 } else if (_window2.default.ActiveXObject !== undefined) {
5837 try {
5838 ax = new ActiveXObject(activeX);
5839 if (ax) {
5840 version = axDetect(ax);
5841 }
5842 } catch (e) {
5843
5844 }
5845 }
5846 return version;
5847 }
5848 };
5849
5850 PluginDetector.addPlugin('flash', 'Shockwave Flash', 'application/x-shockwave-flash', 'ShockwaveFlash.ShockwaveFlash', function (ax) {
5851 var version = [],
5852 d = ax.GetVariable("$version");
5853
5854 if (d) {
5855 d = d.split(" ")[1].split(",");
5856 version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
5857 }
5858 return version;
5859 });
5860
5861 var FlashMediaElementRenderer = {
5862 create: function create(mediaElement, options, mediaFiles) {
5863
5864 var flash = {};
5865 var isActive = false;
5866
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 = [];
5873
5874 var props = _mejs2.default.html5media.properties,
5875 assignGettersSetters = function assignGettersSetters(propName) {
5876 flash.flashState[propName] = null;
5877
5878 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
5879
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]();
5884
5885 if (propName === 'buffered') {
5886 return {
5887 start: function start() {
5888 return 0;
5889 },
5890 end: function end() {
5891 return value;
5892 },
5893 length: 1
5894 };
5895 }
5896 return value;
5897 } else {
5898 return null;
5899 }
5900 } else {
5901 return null;
5902 }
5903 };
5904
5905 flash['set' + capName] = function (value) {
5906 if (propName === 'src') {
5907 value = (0, _media.absolutizeUrl)(value);
5908 }
5909
5910 if (flash.flashApi !== null && flash.flashApi['set_' + propName] !== undefined) {
5911 try {
5912 flash.flashApi['set_' + propName](value);
5913 } catch (e) {
5914
5915 }
5916 } else {
5917 flash.flashApiStack.push({
5918 type: 'set',
5919 propName: propName,
5920 value: value
5921 });
5922 }
5923 };
5924 };
5925
5926 for (var i = 0, total = props.length; i < total; i++) {
5927 assignGettersSetters(props[i]);
5928 }
5929
5930 var methods = _mejs2.default.html5media.methods,
5931 assignMethods = function assignMethods(methodName) {
5932 flash[methodName] = function () {
5933 if (isActive) {
5934 if (flash.flashApi !== null) {
5935 if (flash.flashApi['fire_' + methodName]) {
5936 try {
5937 flash.flashApi['fire_' + methodName]();
5938 } catch (e) {
5939
5940 }
5941 } else {
5942
5943 }
5944 } else {
5945 flash.flashApiStack.push({
5946 type: 'call',
5947 methodName: methodName
5948 });
5949 }
5950 }
5951 };
5952 };
5953 methods.push('stop');
5954 for (var _i = 0, _total = methods.length; _i < _total; _i++) {
5955 assignMethods(methods[_i]);
5956 }
5957
5958 var initEvents = ['rendererready'];
5959
5960 for (var _i2 = 0, _total2 = initEvents.length; _i2 < _total2; _i2++) {
5961 var event = (0, _general.createEvent)(initEvents[_i2], flash);
5962 mediaElement.dispatchEvent(event);
5963 }
5964
5965 _window2.default['__ready__' + flash.id] = function () {
5966
5967 flash.flashReady = true;
5968 flash.flashApi = _document2.default.getElementById('__' + flash.id);
5969
5970 if (flash.flashApiStack.length) {
5971 for (var _i3 = 0, _total3 = flash.flashApiStack.length; _i3 < _total3; _i3++) {
5972 var stackItem = flash.flashApiStack[_i3];
5973
5974 if (stackItem.type === 'set') {
5975 var propName = stackItem.propName,
5976 capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
5977
5978 flash['set' + capName](stackItem.value);
5979 } else if (stackItem.type === 'call') {
5980 flash[stackItem.methodName]();
5981 }
5982 }
5983 }
5984 };
5985
5986 _window2.default['__event__' + flash.id] = function (eventName, message) {
5987 var event = (0, _general.createEvent)(eventName, flash);
5988 if (message) {
5989 try {
5990 event.data = JSON.parse(message);
5991 event.details.data = JSON.parse(message);
5992 } catch (e) {
5993 event.message = message;
5994 }
5995 }
5996
5997 flash.mediaElement.dispatchEvent(event);
5998 };
5999
6000 flash.flashWrapper = _document2.default.createElement('div');
6001
6002 if (['always', 'sameDomain'].indexOf(flash.options.shimScriptAccess) === -1) {
6003 flash.options.shimScriptAccess = 'sameDomain';
6004 }
6005
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;
6011
6012 if (mediaElement.originalNode.getAttribute('src')) {
6013 flashVars.push('src=' + mediaElement.originalNode.getAttribute('src'));
6014 }
6015
6016 if (flash.options.enablePseudoStreaming === true) {
6017 flashVars.push('pseudostreamstart=' + flash.options.pseudoStreamingStartQueryParam);
6018 flashVars.push('pseudostreamtype=' + flash.options.pseudoStreamingType);
6019 }
6020
6021 if (flash.options.streamDelimiter) {
6022 flashVars.push('streamdelimiter=' + encodeURIComponent(flash.options.streamDelimiter));
6023 }
6024
6025 if (flash.options.proxyType) {
6026 flashVars.push('proxytype=' + flash.options.proxyType);
6027 }
6028
6029 mediaElement.appendChild(flash.flashWrapper);
6030 mediaElement.originalNode.style.display = 'none';
6031
6032 var settings = [];
6033
6034 if (_constants.IS_IE || _constants.IS_EDGE) {
6035 var specialIEContainer = _document2.default.createElement('div');
6036 flash.flashWrapper.appendChild(specialIEContainer);
6037
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 + '\'"'];
6040 } else {
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 + '"'];
6042 }
6043
6044 if (!isVideo) {
6045 settings.push('style="clip: rect(0 0 0 0); position: absolute;"');
6046 }
6047
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('&amp;') + '" />') + '<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>';
6049 } else {
6050
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('&') + '"'];
6052
6053 if (isVideo) {
6054 settings.push('width="' + flashWidth + '"');
6055 settings.push('height="' + flashHeight + '"');
6056 } else {
6057 settings.push('style="position: fixed; left: -9999em; top: -9999em;"');
6058 }
6059
6060 flash.flashWrapper.innerHTML = '<embed ' + settings.join(' ') + '>';
6061 }
6062
6063 flash.flashNode = flash.flashWrapper.lastChild;
6064
6065 flash.hide = function () {
6066 isActive = false;
6067 if (isVideo) {
6068 flash.flashNode.style.display = 'none';
6069 }
6070 };
6071 flash.show = function () {
6072 isActive = true;
6073 if (isVideo) {
6074 flash.flashNode.style.display = '';
6075 }
6076 };
6077 flash.setSize = function (width, height) {
6078 flash.flashNode.style.width = width + 'px';
6079 flash.flashNode.style.height = height + 'px';
6080
6081 if (flash.flashApi !== null && typeof flash.flashApi.fire_setSize === 'function') {
6082 flash.flashApi.fire_setSize(width, height);
6083 }
6084 };
6085
6086 flash.destroy = function () {
6087 flash.flashNode.remove();
6088 };
6089
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);
6094 break;
6095 }
6096 }
6097 }
6098
6099 return flash;
6100 }
6101 };
6102
6103 var hasFlash = PluginDetector.hasPluginVersion('flash', [10, 0, 0]);
6104
6105 if (hasFlash) {
6106 _media.typeChecks.push(function (url) {
6107 url = url.toLowerCase();
6108
6109 if (url.startsWith('rtmp')) {
6110 if (~url.indexOf('.mp3')) {
6111 return 'audio/rtmp';
6112 } else {
6113 return 'video/rtmp';
6114 }
6115 } else if (/\.og(a|g)/i.test(url)) {
6116 return 'audio/ogg';
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')) {
6122 return 'video/flv';
6123 } else {
6124 return null;
6125 }
6126 });
6127
6128 var FlashMediaElementVideoRenderer = {
6129 name: 'flash_video',
6130 options: {
6131 prefix: 'flash_video',
6132 filename: 'mediaelement-flash-video.swf',
6133 enablePseudoStreaming: false,
6134
6135 pseudoStreamingStartQueryParam: 'start',
6136
6137 pseudoStreamingType: 'byte',
6138
6139 proxyType: '',
6140
6141 streamDelimiter: ''
6142 },
6143
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());
6146 },
6147
6148 create: FlashMediaElementRenderer.create
6149
6150 };
6151 _renderer.renderer.add(FlashMediaElementVideoRenderer);
6152
6153 var FlashMediaElementHlsVideoRenderer = {
6154 name: 'flash_hls',
6155 options: {
6156 prefix: 'flash_hls',
6157 filename: 'mediaelement-flash-video-hls.swf'
6158 },
6159
6160 canPlayType: function canPlayType(type) {
6161 return ~['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type.toLowerCase());
6162 },
6163
6164 create: FlashMediaElementRenderer.create
6165 };
6166 _renderer.renderer.add(FlashMediaElementHlsVideoRenderer);
6167
6168 var FlashMediaElementMdashVideoRenderer = {
6169 name: 'flash_dash',
6170 options: {
6171 prefix: 'flash_dash',
6172 filename: 'mediaelement-flash-video-mdash.swf'
6173 },
6174
6175 canPlayType: function canPlayType(type) {
6176 return ~['application/dash+xml'].indexOf(type.toLowerCase());
6177 },
6178
6179 create: FlashMediaElementRenderer.create
6180 };
6181 _renderer.renderer.add(FlashMediaElementMdashVideoRenderer);
6182
6183 var FlashMediaElementAudioRenderer = {
6184 name: 'flash_audio',
6185 options: {
6186 prefix: 'flash_audio',
6187 filename: 'mediaelement-flash-audio.swf'
6188 },
6189
6190 canPlayType: function canPlayType(type) {
6191 return ~['audio/mp3'].indexOf(type.toLowerCase());
6192 },
6193
6194 create: FlashMediaElementRenderer.create
6195 };
6196 _renderer.renderer.add(FlashMediaElementAudioRenderer);
6197
6198 var FlashMediaElementAudioOggRenderer = {
6199 name: 'flash_audio_ogg',
6200 options: {
6201 prefix: 'flash_audio_ogg',
6202 filename: 'mediaelement-flash-audio-ogg.swf'
6203 },
6204
6205 canPlayType: function canPlayType(type) {
6206 return ~['audio/ogg', 'audio/oga', 'audio/ogv'].indexOf(type.toLowerCase());
6207 },
6208
6209 create: FlashMediaElementRenderer.create
6210 };
6211 _renderer.renderer.add(FlashMediaElementAudioOggRenderer);
6212 }
6213
6214 },{"2":2,"25":25,"27":27,"28":28,"3":3,"5":5,"7":7,"8":8}],21:[function(_dereq_,module,exports){
6215 'use strict';
6216
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; };
6218
6219 var _window = _dereq_(3);
6220
6221 var _window2 = _interopRequireDefault(_window);
6222
6223 var _mejs = _dereq_(7);
6224
6225 var _mejs2 = _interopRequireDefault(_mejs);
6226
6227 var _renderer = _dereq_(8);
6228
6229 var _general = _dereq_(27);
6230
6231 var _constants = _dereq_(25);
6232
6233 var _media = _dereq_(28);
6234
6235 var _dom = _dereq_(26);
6236
6237 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6238
6239 var NativeFlv = {
6240
6241 promise: null,
6242
6243 load: function load(settings) {
6244 if (typeof flvjs !== 'undefined') {
6245 NativeFlv.promise = new Promise(function (resolve) {
6246 resolve();
6247 }).then(function () {
6248 NativeFlv._createPlayer(settings);
6249 });
6250 } else {
6251 settings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdn.jsdelivr.net/npm/flv.js@latest';
6252
6253 NativeFlv.promise = NativeFlv.promise || (0, _dom.loadScript)(settings.options.path);
6254 NativeFlv.promise.then(function () {
6255 NativeFlv._createPlayer(settings);
6256 });
6257 }
6258
6259 return NativeFlv.promise;
6260 },
6261
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);
6267 return player;
6268 }
6269 };
6270
6271 var FlvNativeRenderer = {
6272 name: 'native_flv',
6273 options: {
6274 prefix: 'native_flv',
6275 flv: {
6276 path: 'https://cdn.jsdelivr.net/npm/flv.js@latest',
6277
6278 cors: true,
6279 debug: false
6280 }
6281 },
6282
6283 canPlayType: function canPlayType(type) {
6284 return _constants.HAS_MSE && ['video/x-flv', 'video/flv'].indexOf(type.toLowerCase()) > -1;
6285 },
6286
6287 create: function create(mediaElement, options, mediaFiles) {
6288
6289 var originalNode = mediaElement.originalNode,
6290 id = mediaElement.id + '_' + options.prefix;
6291
6292 var node = null,
6293 flvPlayer = null;
6294
6295 node = originalNode.cloneNode(true);
6296 options = Object.assign(options, mediaElement.options);
6297
6298 var props = _mejs2.default.html5media.properties,
6299 events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) {
6300 return e !== 'error';
6301 }),
6302 attachNativeEvents = function attachNativeEvents(e) {
6303 var event = (0, _general.createEvent)(e.type, mediaElement);
6304 mediaElement.dispatchEvent(event);
6305 },
6306 assignGettersSetters = function assignGettersSetters(propName) {
6307 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
6308
6309 node['get' + capName] = function () {
6310 return flvPlayer !== null ? node[propName] : null;
6311 };
6312
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;
6325
6326 flvPlayer.destroy();
6327 for (var i = 0, total = events.length; i < total; i++) {
6328 node.removeEventListener(events[i], attachNativeEvents);
6329 }
6330 flvPlayer = NativeFlv._createPlayer({
6331 options: _flvOptions,
6332 configs: _flvConfigs,
6333 id: id
6334 });
6335 flvPlayer.attachMediaElement(node);
6336 flvPlayer.load();
6337 }
6338 } else {
6339 node[propName] = value;
6340 }
6341 }
6342 };
6343 };
6344
6345 for (var i = 0, total = props.length; i < total; i++) {
6346 assignGettersSetters(props[i]);
6347 }
6348
6349 _window2.default['__ready__' + id] = function (_flvPlayer) {
6350 mediaElement.flvPlayer = flvPlayer = _flvPlayer;
6351
6352 var flvEvents = flvjs.Events,
6353 assignEvents = function assignEvents(eventName) {
6354 if (eventName === 'loadedmetadata') {
6355 flvPlayer.unload();
6356 flvPlayer.detachMediaElement();
6357 flvPlayer.attachMediaElement(node);
6358 flvPlayer.load();
6359 }
6360
6361 node.addEventListener(eventName, attachNativeEvents);
6362 };
6363
6364 for (var _i = 0, _total = events.length; _i < _total; _i++) {
6365 assignEvents(events[_i]);
6366 }
6367
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);
6372 } else {
6373 var _event = (0, _general.createEvent)(name, mediaElement);
6374 _event.data = data;
6375 mediaElement.dispatchEvent(_event);
6376 }
6377 };
6378
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];
6384 }
6385
6386 return assignFlvEvents(flvEvents[eventType], args);
6387 });
6388 }
6389 };
6390
6391 for (var eventType in flvEvents) {
6392 _loop(eventType);
6393 }
6394 };
6395
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);
6400 break;
6401 }
6402 }
6403 }
6404
6405 node.setAttribute('id', id);
6406
6407 originalNode.parentNode.insertBefore(node, originalNode);
6408 originalNode.autoplay = false;
6409 originalNode.style.display = 'none';
6410
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;
6418
6419 node.setSize = function (width, height) {
6420 node.style.width = width + 'px';
6421 node.style.height = height + 'px';
6422 return node;
6423 };
6424
6425 node.hide = function () {
6426 if (flvPlayer !== null) {
6427 flvPlayer.pause();
6428 }
6429 node.style.display = 'none';
6430 return node;
6431 };
6432
6433 node.show = function () {
6434 node.style.display = '';
6435 return node;
6436 };
6437
6438 node.destroy = function () {
6439 if (flvPlayer !== null) {
6440 flvPlayer.destroy();
6441 }
6442 };
6443
6444 var event = (0, _general.createEvent)('rendererready', node);
6445 mediaElement.dispatchEvent(event);
6446
6447 mediaElement.promises.push(NativeFlv.load({
6448 options: flvOptions,
6449 configs: flvConfigs,
6450 id: id
6451 }));
6452
6453 return node;
6454 }
6455 };
6456
6457 _media.typeChecks.push(function (url) {
6458 return ~url.toLowerCase().indexOf('.flv') ? 'video/flv' : null;
6459 });
6460
6461 _renderer.renderer.add(FlvNativeRenderer);
6462
6463 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],22:[function(_dereq_,module,exports){
6464 'use strict';
6465
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; };
6467
6468 var _window = _dereq_(3);
6469
6470 var _window2 = _interopRequireDefault(_window);
6471
6472 var _mejs = _dereq_(7);
6473
6474 var _mejs2 = _interopRequireDefault(_mejs);
6475
6476 var _renderer = _dereq_(8);
6477
6478 var _general = _dereq_(27);
6479
6480 var _constants = _dereq_(25);
6481
6482 var _media = _dereq_(28);
6483
6484 var _dom = _dereq_(26);
6485
6486 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6487
6488 var NativeHls = {
6489
6490 promise: null,
6491
6492 load: function load(settings) {
6493 if (typeof Hls !== 'undefined') {
6494 NativeHls.promise = new Promise(function (resolve) {
6495 resolve();
6496 }).then(function () {
6497 NativeHls._createPlayer(settings);
6498 });
6499 } else {
6500 settings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdn.jsdelivr.net/npm/hls.js@latest';
6501
6502 NativeHls.promise = NativeHls.promise || (0, _dom.loadScript)(settings.options.path);
6503 NativeHls.promise.then(function () {
6504 NativeHls._createPlayer(settings);
6505 });
6506 }
6507
6508 return NativeHls.promise;
6509 },
6510
6511 _createPlayer: function _createPlayer(settings) {
6512 var player = new Hls(settings.options);
6513 _window2.default['__ready__' + settings.id](player);
6514 return player;
6515 }
6516 };
6517
6518 var HlsNativeRenderer = {
6519 name: 'native_hls',
6520 options: {
6521 prefix: 'native_hls',
6522 hls: {
6523 path: 'https://cdn.jsdelivr.net/npm/hls.js@latest',
6524
6525 autoStartLoad: false,
6526 debug: false
6527 }
6528 },
6529
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;
6532 },
6533
6534 create: function create(mediaElement, options, mediaFiles) {
6535
6536 var originalNode = mediaElement.originalNode,
6537 id = mediaElement.id + '_' + options.prefix,
6538 preload = originalNode.getAttribute('preload'),
6539 autoplay = originalNode.autoplay;
6540
6541 var hlsPlayer = null,
6542 node = null,
6543 index = 0,
6544 total = mediaFiles.length;
6545
6546 node = originalNode.cloneNode(true);
6547 options = Object.assign(options, mediaElement.options);
6548 options.hls.autoStartLoad = preload && preload !== 'none' || autoplay;
6549
6550 var props = _mejs2.default.html5media.properties,
6551 events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) {
6552 return e !== 'error';
6553 }),
6554 attachNativeEvents = function attachNativeEvents(e) {
6555 var event = (0, _general.createEvent)(e.type, mediaElement);
6556 mediaElement.dispatchEvent(event);
6557 },
6558 assignGettersSetters = function assignGettersSetters(propName) {
6559 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
6560
6561 node['get' + capName] = function () {
6562 return hlsPlayer !== null ? node[propName] : null;
6563 };
6564
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);
6573 }
6574 hlsPlayer = NativeHls._createPlayer({
6575 options: options.hls,
6576 id: id
6577 });
6578 hlsPlayer.loadSource(value);
6579 hlsPlayer.attachMedia(node);
6580 }
6581 } else {
6582 node[propName] = value;
6583 }
6584 }
6585 };
6586 };
6587
6588 for (var i = 0, _total2 = props.length; i < _total2; i++) {
6589 assignGettersSetters(props[i]);
6590 }
6591
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);
6601 }
6602
6603 node.addEventListener(eventName, attachNativeEvents);
6604 };
6605
6606 for (var _i = 0, _total3 = events.length; _i < _total3; _i++) {
6607 assignEvents(events[_i]);
6608 }
6609
6610 var recoverDecodingErrorDate = void 0,
6611 recoverSwapAudioCodecDate = void 0;
6612 var assignHlsEvents = function assignHlsEvents(name, data) {
6613 if (name === 'hlsError') {
6614 console.warn(data);
6615 data = data[1];
6616
6617 if (data.fatal) {
6618 switch (data.type) {
6619 case 'mediaError':
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();
6629 } else {
6630 var message = 'Cannot recover, last media error recovery failed';
6631 mediaElement.generateError(message, node.src);
6632 console.error(message);
6633 }
6634 break;
6635 case 'networkError':
6636 if (data.details === 'manifestLoadError') {
6637 if (index < total && mediaFiles[index + 1] !== undefined) {
6638 node.setSrc(mediaFiles[index++].src);
6639 node.load();
6640 node.play();
6641 } else {
6642 var _message = 'Network error';
6643 mediaElement.generateError(_message, mediaFiles);
6644 console.error(_message);
6645 }
6646 } else {
6647 var _message2 = 'Network error';
6648 mediaElement.generateError(_message2, mediaFiles);
6649 console.error(_message2);
6650 }
6651 break;
6652 default:
6653 hlsPlayer.destroy();
6654 break;
6655 }
6656 }
6657 } else {
6658 var _event = (0, _general.createEvent)(name, mediaElement);
6659 _event.data = data;
6660 mediaElement.dispatchEvent(_event);
6661 }
6662 };
6663
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];
6669 }
6670
6671 return assignHlsEvents(hlsEvents[eventType], args);
6672 });
6673 }
6674 };
6675
6676 for (var eventType in hlsEvents) {
6677 _loop(eventType);
6678 }
6679 };
6680
6681 if (total > 0) {
6682 for (; index < total; index++) {
6683 if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[index].type)) {
6684 node.setAttribute('src', mediaFiles[index].src);
6685 break;
6686 }
6687 }
6688 }
6689
6690 if (preload !== 'auto' && !autoplay) {
6691 node.addEventListener('play', function () {
6692 if (hlsPlayer !== null) {
6693 hlsPlayer.startLoad();
6694 }
6695 });
6696
6697 node.addEventListener('pause', function () {
6698 if (hlsPlayer !== null) {
6699 hlsPlayer.stopLoad();
6700 }
6701 });
6702 }
6703
6704 node.setAttribute('id', id);
6705
6706 originalNode.parentNode.insertBefore(node, originalNode);
6707 originalNode.autoplay = false;
6708 originalNode.style.display = 'none';
6709
6710 node.setSize = function (width, height) {
6711 node.style.width = width + 'px';
6712 node.style.height = height + 'px';
6713 return node;
6714 };
6715
6716 node.hide = function () {
6717 node.pause();
6718 node.style.display = 'none';
6719 return node;
6720 };
6721
6722 node.show = function () {
6723 node.style.display = '';
6724 return node;
6725 };
6726
6727 node.destroy = function () {
6728 if (hlsPlayer !== null) {
6729 hlsPlayer.stopLoad();
6730 hlsPlayer.destroy();
6731 }
6732 };
6733
6734 var event = (0, _general.createEvent)('rendererready', node);
6735 mediaElement.dispatchEvent(event);
6736
6737 mediaElement.promises.push(NativeHls.load({
6738 options: options.hls,
6739 id: id
6740 }));
6741
6742 return node;
6743 }
6744 };
6745
6746 _media.typeChecks.push(function (url) {
6747 return ~url.toLowerCase().indexOf('.m3u8') ? 'application/x-mpegURL' : null;
6748 });
6749
6750 _renderer.renderer.add(HlsNativeRenderer);
6751
6752 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],23:[function(_dereq_,module,exports){
6753 'use strict';
6754
6755 var _window = _dereq_(3);
6756
6757 var _window2 = _interopRequireDefault(_window);
6758
6759 var _document = _dereq_(2);
6760
6761 var _document2 = _interopRequireDefault(_document);
6762
6763 var _mejs = _dereq_(7);
6764
6765 var _mejs2 = _interopRequireDefault(_mejs);
6766
6767 var _renderer = _dereq_(8);
6768
6769 var _general = _dereq_(27);
6770
6771 var _constants = _dereq_(25);
6772
6773 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6774
6775 var HtmlMediaElement = {
6776 name: 'html5',
6777 options: {
6778 prefix: 'html5'
6779 },
6780
6781 canPlayType: function canPlayType(type) {
6782
6783 var mediaElement = _document2.default.createElement('video');
6784
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) {
6786 return 'yes';
6787 } else if (mediaElement.canPlayType) {
6788 return mediaElement.canPlayType(type.toLowerCase()).replace(/no/, '');
6789 } else {
6790 return '';
6791 }
6792 },
6793
6794 create: function create(mediaElement, options, mediaFiles) {
6795
6796 var id = mediaElement.id + '_' + options.prefix;
6797 var isActive = false;
6798
6799 var node = null;
6800
6801 if (mediaElement.originalNode === undefined || mediaElement.originalNode === null) {
6802 node = _document2.default.createElement('audio');
6803 mediaElement.appendChild(node);
6804 } else {
6805 node = mediaElement.originalNode;
6806 }
6807
6808 node.setAttribute('id', id);
6809
6810 var props = _mejs2.default.html5media.properties,
6811 assignGettersSetters = function assignGettersSetters(propName) {
6812 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
6813
6814 node['get' + capName] = function () {
6815 return node[propName];
6816 };
6817
6818 node['set' + capName] = function (value) {
6819 if (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) {
6820 node[propName] = value;
6821 }
6822 };
6823 };
6824
6825 for (var i = 0, _total = props.length; i < _total; i++) {
6826 assignGettersSetters(props[i]);
6827 }
6828
6829 var events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) {
6830 return e !== 'error';
6831 }),
6832 assignEvents = function assignEvents(eventName) {
6833 node.addEventListener(eventName, function (e) {
6834 if (isActive) {
6835 var _event = (0, _general.createEvent)(e.type, e.target);
6836 mediaElement.dispatchEvent(_event);
6837 }
6838 });
6839 };
6840
6841 for (var _i = 0, _total2 = events.length; _i < _total2; _i++) {
6842 assignEvents(events[_i]);
6843 }
6844
6845 node.setSize = function (width, height) {
6846 node.style.width = width + 'px';
6847 node.style.height = height + 'px';
6848 return node;
6849 };
6850
6851 node.hide = function () {
6852 isActive = false;
6853 node.style.display = 'none';
6854
6855 return node;
6856 };
6857
6858 node.show = function () {
6859 isActive = true;
6860 node.style.display = '';
6861
6862 return node;
6863 };
6864
6865 var index = 0,
6866 total = mediaFiles.length;
6867 if (total > 0) {
6868 for (; index < total; index++) {
6869 if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[index].type)) {
6870 node.setAttribute('src', mediaFiles[index].src);
6871 break;
6872 }
6873 }
6874 }
6875
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;
6880 node.load();
6881 node.play();
6882 } else {
6883 mediaElement.generateError('Media error: Format(s) not supported or source(s) not found', mediaFiles);
6884 }
6885 }
6886 });
6887
6888 var event = (0, _general.createEvent)('rendererready', node);
6889 mediaElement.dispatchEvent(event);
6890
6891 return node;
6892 }
6893 };
6894
6895 _window2.default.HtmlMediaElement = _mejs2.default.HtmlMediaElement = HtmlMediaElement;
6896
6897 _renderer.renderer.add(HtmlMediaElement);
6898
6899 },{"2":2,"25":25,"27":27,"3":3,"7":7,"8":8}],24:[function(_dereq_,module,exports){
6900 'use strict';
6901
6902 var _window = _dereq_(3);
6903
6904 var _window2 = _interopRequireDefault(_window);
6905
6906 var _document = _dereq_(2);
6907
6908 var _document2 = _interopRequireDefault(_document);
6909
6910 var _mejs = _dereq_(7);
6911
6912 var _mejs2 = _interopRequireDefault(_mejs);
6913
6914 var _renderer = _dereq_(8);
6915
6916 var _general = _dereq_(27);
6917
6918 var _media = _dereq_(28);
6919
6920 var _dom = _dereq_(26);
6921
6922 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6923
6924 var YouTubeApi = {
6925 isIframeStarted: false,
6926
6927 isIframeLoaded: false,
6928
6929 iframeQueue: [],
6930
6931 enqueueIframe: function enqueueIframe(settings) {
6932 YouTubeApi.isLoaded = typeof YT !== 'undefined' && YT.loaded;
6933
6934 if (YouTubeApi.isLoaded) {
6935 YouTubeApi.createIframe(settings);
6936 } else {
6937 YouTubeApi.loadIframeApi();
6938 YouTubeApi.iframeQueue.push(settings);
6939 }
6940 },
6941
6942 loadIframeApi: function loadIframeApi() {
6943 if (!YouTubeApi.isIframeStarted) {
6944 (0, _dom.loadScript)('https://www.youtube.com/player_api');
6945 YouTubeApi.isIframeStarted = true;
6946 }
6947 },
6948
6949 iFrameReady: function iFrameReady() {
6950
6951 YouTubeApi.isLoaded = true;
6952 YouTubeApi.isIframeLoaded = true;
6953
6954 while (YouTubeApi.iframeQueue.length > 0) {
6955 var settings = YouTubeApi.iframeQueue.pop();
6956 YouTubeApi.createIframe(settings);
6957 }
6958 },
6959
6960 createIframe: function createIframe(settings) {
6961 return new YT.Player(settings.containerId, settings);
6962 },
6963
6964 getYouTubeId: function getYouTubeId(url) {
6965
6966 var youTubeId = '';
6967
6968 if (url.indexOf('?') > 0) {
6969 youTubeId = YouTubeApi.getYouTubeIdFromParam(url);
6970
6971 if (youTubeId === '') {
6972 youTubeId = YouTubeApi.getYouTubeIdFromUrl(url);
6973 }
6974 } else {
6975 youTubeId = YouTubeApi.getYouTubeIdFromUrl(url);
6976 }
6977
6978 var id = youTubeId.substring(youTubeId.lastIndexOf('/') + 1);
6979 youTubeId = id.split('?');
6980 return youTubeId[0];
6981 },
6982
6983 getYouTubeIdFromParam: function getYouTubeIdFromParam(url) {
6984
6985 if (url === undefined || url === null || !url.trim().length) {
6986 return null;
6987 }
6988
6989 var parts = url.split('?'),
6990 parameters = parts[1].split('&');
6991
6992 var youTubeId = '';
6993
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];
6998 break;
6999 }
7000 }
7001
7002 return youTubeId;
7003 },
7004
7005 getYouTubeIdFromUrl: function getYouTubeIdFromUrl(url) {
7006
7007 if (url === undefined || url === null || !url.trim().length) {
7008 return null;
7009 }
7010
7011 var parts = url.split('?');
7012 url = parts[0];
7013 return url.substring(url.lastIndexOf('/') + 1);
7014 },
7015
7016 getYouTubeNoCookieUrl: function getYouTubeNoCookieUrl(url) {
7017 if (url === undefined || url === null || !url.trim().length || url.indexOf('//www.youtube') === -1) {
7018 return url;
7019 }
7020
7021 var parts = url.split('/');
7022 parts[2] = parts[2].replace('.com', '-nocookie.com');
7023 return parts.join('/');
7024 }
7025 };
7026
7027 var YouTubeIframeRenderer = {
7028 name: 'youtube_iframe',
7029
7030 options: {
7031 prefix: 'youtube_iframe',
7032
7033 youtube: {
7034 autoplay: 0,
7035 controls: 0,
7036 disablekb: 1,
7037 end: 0,
7038 loop: 0,
7039 modestbranding: 0,
7040 playsinline: 0,
7041 rel: 0,
7042 showinfo: 0,
7043 start: 0,
7044 iv_load_policy: 3,
7045
7046 nocookie: false,
7047
7048 imageQuality: null
7049 }
7050 },
7051
7052 canPlayType: function canPlayType(type) {
7053 return ~['video/youtube', 'video/x-youtube'].indexOf(type.toLowerCase());
7054 },
7055
7056 create: function create(mediaElement, options, mediaFiles) {
7057
7058 var youtube = {},
7059 apiStack = [],
7060 readyState = 4;
7061
7062 var youTubeApi = null,
7063 paused = true,
7064 ended = false,
7065 youTubeIframe = null,
7066 volume = 1;
7067
7068 youtube.options = options;
7069 youtube.id = mediaElement.id + '_' + options.prefix;
7070 youtube.mediaElement = mediaElement;
7071
7072 var props = _mejs2.default.html5media.properties,
7073 assignGettersSetters = function assignGettersSetters(propName) {
7074
7075 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
7076
7077 youtube['get' + capName] = function () {
7078 if (youTubeApi !== null) {
7079 var value = null;
7080
7081 switch (propName) {
7082 case 'currentTime':
7083 return youTubeApi.getCurrentTime();
7084 case 'duration':
7085 return youTubeApi.getDuration();
7086 case 'volume':
7087 volume = youTubeApi.getVolume() / 100;
7088 return volume;
7089 case 'paused':
7090 return paused;
7091 case 'ended':
7092 return ended;
7093 case 'muted':
7094 return youTubeApi.isMuted();
7095 case 'buffered':
7096 var percentLoaded = youTubeApi.getVideoLoadedFraction(),
7097 duration = youTubeApi.getDuration();
7098 return {
7099 start: function start() {
7100 return 0;
7101 },
7102 end: function end() {
7103 return percentLoaded * duration;
7104 },
7105 length: 1
7106 };
7107 case 'src':
7108 return youTubeApi.getVideoUrl();
7109 case 'readyState':
7110 return readyState;
7111 }
7112
7113 return value;
7114 } else {
7115 return null;
7116 }
7117 };
7118
7119 youtube['set' + capName] = function (value) {
7120 if (youTubeApi !== null) {
7121 switch (propName) {
7122 case 'src':
7123 var url = typeof value === 'string' ? value : value[0].src,
7124 _videoId = YouTubeApi.getYouTubeId(url);
7125
7126 if (mediaElement.originalNode.autoplay) {
7127 youTubeApi.loadVideoById(_videoId);
7128 } else {
7129 youTubeApi.cueVideoById(_videoId);
7130 }
7131 break;
7132 case 'currentTime':
7133 youTubeApi.seekTo(value);
7134 break;
7135 case 'muted':
7136 if (value) {
7137 youTubeApi.mute();
7138 } else {
7139 youTubeApi.unMute();
7140 }
7141 setTimeout(function () {
7142 var event = (0, _general.createEvent)('volumechange', youtube);
7143 mediaElement.dispatchEvent(event);
7144 }, 50);
7145 break;
7146 case 'volume':
7147 volume = value;
7148 youTubeApi.setVolume(value * 100);
7149 setTimeout(function () {
7150 var event = (0, _general.createEvent)('volumechange', youtube);
7151 mediaElement.dispatchEvent(event);
7152 }, 50);
7153 break;
7154 case 'readyState':
7155 var event = (0, _general.createEvent)('canplay', youtube);
7156 mediaElement.dispatchEvent(event);
7157 break;
7158 default:
7159
7160 break;
7161 }
7162 } else {
7163 apiStack.push({ type: 'set', propName: propName, value: value });
7164 }
7165 };
7166 };
7167
7168 for (var i = 0, total = props.length; i < total; i++) {
7169 assignGettersSetters(props[i]);
7170 }
7171
7172 var methods = _mejs2.default.html5media.methods,
7173 assignMethods = function assignMethods(methodName) {
7174 youtube[methodName] = function () {
7175 if (youTubeApi !== null) {
7176 switch (methodName) {
7177 case 'play':
7178 paused = false;
7179 return youTubeApi.playVideo();
7180 case 'pause':
7181 paused = true;
7182 return youTubeApi.pauseVideo();
7183 case 'load':
7184 return null;
7185 }
7186 } else {
7187 apiStack.push({ type: 'call', methodName: methodName });
7188 }
7189 };
7190 };
7191
7192 for (var _i = 0, _total = methods.length; _i < _total; _i++) {
7193 assignMethods(methods[_i]);
7194 }
7195
7196 var errorHandler = function errorHandler(error) {
7197 var message = '';
7198 switch (error.data) {
7199 case 2:
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.';
7201 break;
7202 case 5:
7203 message = 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';
7204 break;
7205 case 100:
7206 message = 'The video requested was not found. Either video has been removed or has been marked as private.';
7207 break;
7208 case 101:
7209 case 105:
7210 message = 'The owner of the requested video does not allow it to be played in embedded players.';
7211 break;
7212 default:
7213 message = 'Unknown error.';
7214 break;
7215 }
7216 mediaElement.generateError('Code ' + error.data + ': ' + message, mediaFiles);
7217 };
7218
7219 var youtubeContainer = _document2.default.createElement('div');
7220 youtubeContainer.id = youtube.id;
7221
7222 if (youtube.options.youtube.nocookie) {
7223 mediaElement.originalNode.src = YouTubeApi.getYouTubeNoCookieUrl(mediaFiles[0].src);
7224 }
7225
7226 mediaElement.originalNode.parentNode.insertBefore(youtubeContainer, mediaElement.originalNode);
7227 mediaElement.originalNode.style.display = 'none';
7228
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),
7233 youtubeSettings = {
7234 id: youtube.id,
7235 containerId: youtubeContainer.id,
7236 videoId: videoId,
7237 height: height,
7238 width: width,
7239 playerVars: Object.assign({
7240 controls: 0,
7241 rel: 0,
7242 disablekb: 1,
7243 showinfo: 0,
7244 modestbranding: 0,
7245 html5: 1,
7246 iv_load_policy: 3
7247 }, youtube.options.youtube),
7248 origin: _window2.default.location.host,
7249 events: {
7250 onReady: function onReady(e) {
7251 mediaElement.youTubeApi = youTubeApi = e.target;
7252 mediaElement.youTubeState = {
7253 paused: true,
7254 ended: false
7255 };
7256
7257 if (apiStack.length) {
7258 for (var _i2 = 0, _total2 = apiStack.length; _i2 < _total2; _i2++) {
7259
7260 var stackItem = apiStack[_i2];
7261
7262 if (stackItem.type === 'set') {
7263 var propName = stackItem.propName,
7264 capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
7265
7266 youtube['set' + capName](stackItem.value);
7267 } else if (stackItem.type === 'call') {
7268 youtube[stackItem.methodName]();
7269 }
7270 }
7271 }
7272
7273 youTubeIframe = youTubeApi.getIframe();
7274
7275 if (mediaElement.originalNode.muted) {
7276 youTubeApi.mute();
7277 }
7278
7279 var events = ['mouseover', 'mouseout'],
7280 assignEvents = function assignEvents(e) {
7281 var newEvent = (0, _general.createEvent)(e.type, youtube);
7282 mediaElement.dispatchEvent(newEvent);
7283 };
7284
7285 for (var _i3 = 0, _total3 = events.length; _i3 < _total3; _i3++) {
7286 youTubeIframe.addEventListener(events[_i3], assignEvents, false);
7287 }
7288
7289 var initEvents = ['rendererready', 'loadedmetadata', 'loadeddata', 'canplay'];
7290
7291 for (var _i4 = 0, _total4 = initEvents.length; _i4 < _total4; _i4++) {
7292 var event = (0, _general.createEvent)(initEvents[_i4], youtube);
7293 mediaElement.dispatchEvent(event);
7294 }
7295 },
7296 onStateChange: function onStateChange(e) {
7297 var events = [];
7298
7299 switch (e.data) {
7300 case -1:
7301 events = ['loadedmetadata'];
7302 paused = true;
7303 ended = false;
7304 break;
7305 case 0:
7306 events = ['ended'];
7307 paused = false;
7308 ended = !youtube.options.youtube.loop;
7309 if (!youtube.options.youtube.loop) {
7310 youtube.stopInterval();
7311 }
7312 break;
7313 case 1:
7314 events = ['play', 'playing'];
7315 paused = false;
7316 ended = false;
7317 youtube.startInterval();
7318 break;
7319 case 2:
7320 events = ['pause'];
7321 paused = true;
7322 ended = false;
7323 youtube.stopInterval();
7324 break;
7325 case 3:
7326 events = ['progress'];
7327 ended = false;
7328 break;
7329 case 5:
7330 events = ['loadeddata', 'loadedmetadata', 'canplay'];
7331 paused = true;
7332 ended = false;
7333 break;
7334 }
7335
7336 for (var _i5 = 0, _total5 = events.length; _i5 < _total5; _i5++) {
7337 var event = (0, _general.createEvent)(events[_i5], youtube);
7338 mediaElement.dispatchEvent(event);
7339 }
7340 },
7341 onError: function onError(e) {
7342 return errorHandler(e);
7343 }
7344 }
7345 };
7346
7347 if (isAudio || mediaElement.originalNode.hasAttribute('playsinline')) {
7348 youtubeSettings.playerVars.playsinline = 1;
7349 }
7350
7351 if (mediaElement.originalNode.controls) {
7352 youtubeSettings.playerVars.controls = 1;
7353 }
7354 if (mediaElement.originalNode.autoplay) {
7355 youtubeSettings.playerVars.autoplay = 1;
7356 }
7357 if (mediaElement.originalNode.loop) {
7358 youtubeSettings.playerVars.loop = 1;
7359 }
7360
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);
7363 }
7364
7365 YouTubeApi.enqueueIframe(youtubeSettings);
7366
7367 youtube.onEvent = function (eventName, player, _youTubeState) {
7368 if (_youTubeState !== null && _youTubeState !== undefined) {
7369 mediaElement.youTubeState = _youTubeState;
7370 }
7371 };
7372
7373 youtube.setSize = function (width, height) {
7374 if (youTubeApi !== null) {
7375 youTubeApi.setSize(width, height);
7376 }
7377 };
7378 youtube.hide = function () {
7379 youtube.stopInterval();
7380 youtube.pause();
7381 if (youTubeIframe) {
7382 youTubeIframe.style.display = 'none';
7383 }
7384 };
7385 youtube.show = function () {
7386 if (youTubeIframe) {
7387 youTubeIframe.style.display = '';
7388 }
7389 };
7390 youtube.destroy = function () {
7391 youTubeApi.destroy();
7392 };
7393 youtube.interval = null;
7394
7395 youtube.startInterval = function () {
7396 youtube.interval = setInterval(function () {
7397 var event = (0, _general.createEvent)('timeupdate', youtube);
7398 mediaElement.dispatchEvent(event);
7399 }, 250);
7400 };
7401 youtube.stopInterval = function () {
7402 if (youtube.interval) {
7403 clearInterval(youtube.interval);
7404 }
7405 };
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' : '';
7411 };
7412
7413 return youtube;
7414 }
7415 };
7416
7417 _window2.default.onYouTubePlayerAPIReady = function () {
7418 YouTubeApi.iFrameReady();
7419 };
7420
7421 _media.typeChecks.push(function (url) {
7422 return (/\/\/(www\.youtube|youtu\.?be)/i.test(url) ? 'video/x-youtube' : null
7423 );
7424 });
7425
7426 _renderer.renderer.add(YouTubeIframeRenderer);
7427
7428 },{"2":2,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],25:[function(_dereq_,module,exports){
7429 'use strict';
7430
7431 Object.defineProperty(exports, "__esModule", {
7432 value: true
7433 });
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;
7435
7436 var _window = _dereq_(3);
7437
7438 var _window2 = _interopRequireDefault(_window);
7439
7440 var _document = _dereq_(2);
7441
7442 var _document2 = _interopRequireDefault(_document);
7443
7444 var _mejs = _dereq_(7);
7445
7446 var _mejs2 = _interopRequireDefault(_mejs);
7447
7448 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7449
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;
7468
7469 if (!('pointerEvents' in element.style)) {
7470 return false;
7471 }
7472
7473 element.style.pointerEvents = 'auto';
7474 element.style.pointerEvents = 'x';
7475 documentElement.appendChild(element);
7476 var supports = getComputedStyle && getComputedStyle(element, '').pointerEvents === 'auto';
7477 element.remove();
7478 return !!supports;
7479 }();
7480
7481 var SUPPORT_PASSIVE_EVENT = exports.SUPPORT_PASSIVE_EVENT = function () {
7482 var supportsPassive = false;
7483 try {
7484 var opts = Object.defineProperty({}, 'passive', {
7485 get: function get() {
7486 supportsPassive = true;
7487 }
7488 });
7489 _window2.default.addEventListener('test', null, opts);
7490 } catch (e) {}
7491
7492 return supportsPassive;
7493 }();
7494
7495 var html5Elements = ['source', 'track', 'audio', 'video'];
7496 var video = void 0;
7497
7498 for (var i = 0, total = html5Elements.length; i < total; i++) {
7499 video = _document2.default.createElement(html5Elements[i]);
7500 }
7501
7502 var SUPPORTS_NATIVE_HLS = exports.SUPPORTS_NATIVE_HLS = IS_SAFARI || IS_ANDROID && (IS_CHROME || IS_STOCK_ANDROID) || IS_IE && /edge/i.test(UA);
7503
7504 var hasiOSFullScreen = video.webkitEnterFullscreen !== undefined;
7505
7506 var hasNativeFullscreen = video.requestFullscreen !== undefined;
7507
7508 if (hasiOSFullScreen && /mac os x 10_5/i.test(UA)) {
7509 hasNativeFullscreen = false;
7510 hasiOSFullScreen = false;
7511 }
7512
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;
7522
7523 if (hasMozNativeFullScreen) {
7524 nativeFullScreenEnabled = _document2.default.mozFullScreenEnabled;
7525 } else if (hasMsNativeFullScreen) {
7526 nativeFullScreenEnabled = _document2.default.msFullscreenEnabled;
7527 }
7528
7529 if (IS_CHROME) {
7530 hasiOSFullScreen = false;
7531 }
7532
7533 if (hasTrueNativeFullScreen) {
7534 if (hasWebkitNativeFullScreen) {
7535 fullScreenEventName = 'webkitfullscreenchange';
7536 } else if (hasMozNativeFullScreen) {
7537 fullScreenEventName = 'mozfullscreenchange';
7538 } else if (hasMsNativeFullScreen) {
7539 fullScreenEventName = 'MSFullscreenChange';
7540 }
7541
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;
7549 }
7550 };
7551
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();
7559 }
7560 };
7561
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();
7569 }
7570 };
7571 }
7572
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;
7584
7585
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;
7613
7614 },{"2":2,"3":3,"7":7}],26:[function(_dereq_,module,exports){
7615 'use strict';
7616
7617 Object.defineProperty(exports, "__esModule", {
7618 value: true
7619 });
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;
7629
7630 var _window = _dereq_(3);
7631
7632 var _window2 = _interopRequireDefault(_window);
7633
7634 var _document = _dereq_(2);
7635
7636 var _document2 = _interopRequireDefault(_document);
7637
7638 var _mejs = _dereq_(7);
7639
7640 var _mejs2 = _interopRequireDefault(_mejs);
7641
7642 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7643
7644 function loadScript(url) {
7645 return new Promise(function (resolve, reject) {
7646 var script = _document2.default.createElement('script');
7647 script.src = url;
7648 script.async = true;
7649 script.onload = function () {
7650 script.remove();
7651 resolve();
7652 };
7653 script.onerror = function () {
7654 script.remove();
7655 reject();
7656 };
7657 _document2.default.head.appendChild(script);
7658 });
7659 }
7660
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 };
7666 }
7667
7668 var hasClassMethod = void 0,
7669 addClassMethod = void 0,
7670 removeClassMethod = void 0;
7671
7672 if ('classList' in _document2.default.documentElement) {
7673 hasClassMethod = function hasClassMethod(el, className) {
7674 return el.classList !== undefined && el.classList.contains(className);
7675 };
7676 addClassMethod = function addClassMethod(el, className) {
7677 return el.classList.add(className);
7678 };
7679 removeClassMethod = function removeClassMethod(el, className) {
7680 return el.classList.remove(className);
7681 };
7682 } else {
7683 hasClassMethod = function hasClassMethod(el, className) {
7684 return new RegExp('\\b' + className + '\\b').test(el.className);
7685 };
7686 addClassMethod = function addClassMethod(el, className) {
7687 if (!hasClass(el, className)) {
7688 el.className += ' ' + className;
7689 }
7690 };
7691 removeClassMethod = function removeClassMethod(el, className) {
7692 el.className = el.className.replace(new RegExp('\\b' + className + '\\b', 'g'), '');
7693 };
7694 }
7695
7696 var hasClass = exports.hasClass = hasClassMethod;
7697 var addClass = exports.addClass = addClassMethod;
7698 var removeClass = exports.removeClass = removeClassMethod;
7699
7700 function toggleClass(el, className) {
7701 hasClass(el, className) ? removeClass(el, className) : addClass(el, className);
7702 }
7703
7704 function fadeOut(el) {
7705 var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 400;
7706 var callback = arguments[2];
7707
7708 if (!el.style.opacity) {
7709 el.style.opacity = 1;
7710 }
7711
7712 var start = null;
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') {
7720 callback();
7721 }
7722 } else {
7723 _window2.default.requestAnimationFrame(animate);
7724 }
7725 });
7726 }
7727
7728 function fadeIn(el) {
7729 var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 400;
7730 var callback = arguments[2];
7731
7732 if (!el.style.opacity) {
7733 el.style.opacity = 0;
7734 }
7735
7736 var start = null;
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') {
7744 callback();
7745 }
7746 } else {
7747 _window2.default.requestAnimationFrame(animate);
7748 }
7749 });
7750 }
7751
7752 function siblings(el, filter) {
7753 var siblings = [];
7754 el = el.parentNode.firstChild;
7755 do {
7756 if (!filter || filter(el)) {
7757 siblings.push(el);
7758 }
7759 } while (el = el.nextSibling);
7760 return siblings;
7761 }
7762
7763 function visible(elem) {
7764 if (elem.getClientRects !== undefined && elem.getClientRects === 'function') {
7765 return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
7766 }
7767 return !!(elem.offsetWidth || elem.offsetHeight);
7768 }
7769
7770 function ajax(url, dataType, success, error) {
7771 var xhr = _window2.default.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
7772
7773 var type = 'application/x-www-form-urlencoded; charset=UTF-8',
7774 completed = false,
7775 accept = '*/'.concat('*');
7776
7777 switch (dataType) {
7778 case 'text':
7779 type = 'text/plain';
7780 break;
7781 case 'json':
7782 type = 'application/json, text/javascript';
7783 break;
7784 case 'html':
7785 type = 'text/html';
7786 break;
7787 case 'xml':
7788 type = 'application/xml, text/xml';
7789 break;
7790 }
7791
7792 if (type !== 'application/x-www-form-urlencoded') {
7793 accept = type + ', */*; q=0.01';
7794 }
7795
7796 if (xhr) {
7797 xhr.open('GET', url, true);
7798 xhr.setRequestHeader('Accept', accept);
7799 xhr.onreadystatechange = function () {
7800 if (completed) {
7801 return;
7802 }
7803
7804 if (xhr.readyState === 4) {
7805 if (xhr.status === 200) {
7806 completed = true;
7807 var data = void 0;
7808 switch (dataType) {
7809 case 'json':
7810 data = JSON.parse(xhr.responseText);
7811 break;
7812 case 'xml':
7813 data = xhr.responseXML;
7814 break;
7815 default:
7816 data = xhr.responseText;
7817 break;
7818 }
7819 success(data);
7820 } else if (typeof error === 'function') {
7821 error(xhr.status);
7822 }
7823 }
7824 };
7825
7826 xhr.send();
7827 }
7828 }
7829
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;
7842
7843 },{"2":2,"3":3,"7":7}],27:[function(_dereq_,module,exports){
7844 'use strict';
7845
7846 Object.defineProperty(exports, "__esModule", {
7847 value: true
7848 });
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;
7856
7857 var _mejs = _dereq_(7);
7858
7859 var _mejs2 = _interopRequireDefault(_mejs);
7860
7861 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7862
7863 function escapeHTML(input) {
7864
7865 if (typeof input !== 'string') {
7866 throw new Error('Argument passed must be a string');
7867 }
7868
7869 var map = {
7870 '&': '&amp;',
7871 '<': '&lt;',
7872 '>': '&gt;',
7873 '"': '&quot;'
7874 };
7875
7876 return input.replace(/[&<>"]/g, function (c) {
7877 return map[c];
7878 });
7879 }
7880
7881 function debounce(func, wait) {
7882 var _this = this,
7883 _arguments = arguments;
7884
7885 var immediate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
7886
7887
7888 if (typeof func !== 'function') {
7889 throw new Error('First argument must be a function');
7890 }
7891
7892 if (typeof wait !== 'number') {
7893 throw new Error('Second argument must be a numeric value');
7894 }
7895
7896 var timeout = void 0;
7897 return function () {
7898 var context = _this,
7899 args = _arguments;
7900 var later = function later() {
7901 timeout = null;
7902 if (!immediate) {
7903 func.apply(context, args);
7904 }
7905 };
7906 var callNow = immediate && !timeout;
7907 clearTimeout(timeout);
7908 timeout = setTimeout(later, wait);
7909
7910 if (callNow) {
7911 func.apply(context, args);
7912 }
7913 };
7914 }
7915
7916 function isObjectEmpty(instance) {
7917 return Object.getOwnPropertyNames(instance).length <= 0;
7918 }
7919
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/;
7922
7923 var ret = { d: [], w: [] };
7924 (events || '').split(' ').forEach(function (v) {
7925 var eventName = '' + v + (id ? '.' + id : '');
7926
7927 if (eventName.startsWith('.')) {
7928 ret.d.push(eventName);
7929 ret.w.push(eventName);
7930 } else {
7931 ret[rwindow.test(v) ? 'w' : 'd'].push(eventName);
7932 }
7933 });
7934
7935 ret.d = ret.d.join(' ');
7936 ret.w = ret.w.join(' ');
7937 return ret;
7938 }
7939
7940 function createEvent(eventName, target) {
7941
7942 if (typeof eventName !== 'string') {
7943 throw new Error('Event name must be a string');
7944 }
7945
7946 var eventFrags = eventName.match(/([a-z]+\.([a-z]+))/i),
7947 detail = {
7948 target: target
7949 };
7950
7951 if (eventFrags !== null) {
7952 eventName = eventFrags[1];
7953 detail.namespace = eventFrags[2];
7954 }
7955
7956 return new window.CustomEvent(eventName, {
7957 detail: detail
7958 });
7959 }
7960
7961 function isNodeAfter(sourceNode, targetNode) {
7962
7963 return !!(sourceNode && targetNode && sourceNode.compareDocumentPosition(targetNode) & 2);
7964 }
7965
7966 function isString(value) {
7967 return typeof value === 'string';
7968 }
7969
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;
7978
7979 },{"7":7}],28:[function(_dereq_,module,exports){
7980 'use strict';
7981
7982 Object.defineProperty(exports, "__esModule", {
7983 value: true
7984 });
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;
7992
7993 var _mejs = _dereq_(7);
7994
7995 var _mejs2 = _interopRequireDefault(_mejs);
7996
7997 var _general = _dereq_(27);
7998
7999 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8000
8001 var typeChecks = exports.typeChecks = [];
8002
8003 function absolutizeUrl(url) {
8004
8005 if (typeof url !== 'string') {
8006 throw new Error('`url` argument must be a string');
8007 }
8008
8009 var el = document.createElement('div');
8010 el.innerHTML = '<a href="' + (0, _general.escapeHTML)(url) + '">x</a>';
8011 return el.firstChild.href;
8012 }
8013
8014 function formatType(url) {
8015 var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
8016
8017 return url && !type ? getTypeFromFile(url) : type;
8018 }
8019
8020 function getMimeFromType(type) {
8021
8022 if (typeof type !== 'string') {
8023 throw new Error('`type` argument must be a string');
8024 }
8025
8026 return type && type.indexOf(';') > -1 ? type.substr(0, type.indexOf(';')) : type;
8027 }
8028
8029 function getTypeFromFile(url) {
8030
8031 if (typeof url !== 'string') {
8032 throw new Error('`url` argument must be a string');
8033 }
8034
8035 for (var i = 0, total = typeChecks.length; i < total; i++) {
8036 var type = typeChecks[i](url);
8037
8038 if (type) {
8039 return type;
8040 }
8041 }
8042
8043 var ext = getExtension(url),
8044 normalizedExt = normalizeExtension(ext);
8045
8046 var mime = 'video/mp4';
8047
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;
8053 }
8054 }
8055
8056 return mime;
8057 }
8058
8059 function getExtension(url) {
8060
8061 if (typeof url !== 'string') {
8062 throw new Error('`url` argument must be a string');
8063 }
8064
8065 var baseUrl = url.split('?')[0],
8066 baseName = baseUrl.split('\\').pop().split('/').pop();
8067 return ~baseName.indexOf('.') ? baseName.substring(baseName.lastIndexOf('.') + 1) : '';
8068 }
8069
8070 function normalizeExtension(extension) {
8071
8072 if (typeof extension !== 'string') {
8073 throw new Error('`extension` argument must be a string');
8074 }
8075
8076 switch (extension) {
8077 case 'mp4':
8078 case 'm4v':
8079 return 'mp4';
8080 case 'webm':
8081 case 'webma':
8082 case 'webmv':
8083 return 'webm';
8084 case 'ogg':
8085 case 'oga':
8086 case 'ogv':
8087 return 'ogg';
8088 default:
8089 return extension;
8090 }
8091 }
8092
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;
8101
8102 },{"27":27,"7":7}],29:[function(_dereq_,module,exports){
8103 'use strict';
8104
8105 var _document = _dereq_(2);
8106
8107 var _document2 = _interopRequireDefault(_document);
8108
8109 var _promisePolyfill = _dereq_(4);
8110
8111 var _promisePolyfill2 = _interopRequireDefault(_promisePolyfill);
8112
8113 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8114
8115 (function (arr) {
8116 arr.forEach(function (item) {
8117 if (item.hasOwnProperty('remove')) {
8118 return;
8119 }
8120 Object.defineProperty(item, 'remove', {
8121 configurable: true,
8122 enumerable: true,
8123 writable: true,
8124 value: function remove() {
8125 this.parentNode.removeChild(this);
8126 }
8127 });
8128 });
8129 })([Element.prototype, CharacterData.prototype, DocumentType.prototype]);
8130
8131 (function () {
8132
8133 if (typeof window.CustomEvent === 'function') {
8134 return false;
8135 }
8136
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);
8141 return evt;
8142 }
8143
8144 CustomEvent.prototype = window.Event.prototype;
8145 window.CustomEvent = CustomEvent;
8146 })();
8147
8148 if (typeof Object.assign !== 'function') {
8149 Object.assign = function (target) {
8150
8151 if (target === null || target === undefined) {
8152 throw new TypeError('Cannot convert undefined or null to object');
8153 }
8154
8155 var to = Object(target);
8156
8157 for (var index = 1, total = arguments.length; index < total; index++) {
8158 var nextSource = arguments[index];
8159
8160 if (nextSource !== null) {
8161 for (var nextKey in nextSource) {
8162 if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
8163 to[nextKey] = nextSource[nextKey];
8164 }
8165 }
8166 }
8167 }
8168 return to;
8169 };
8170 }
8171
8172 if (!String.prototype.startsWith) {
8173 String.prototype.startsWith = function (searchString, position) {
8174 position = position || 0;
8175 return this.substr(position, searchString.length) === searchString;
8176 };
8177 }
8178
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) {}
8184 return i > -1;
8185 };
8186 }
8187
8188 if (window.Element && !Element.prototype.closest) {
8189 Element.prototype.closest = function (s) {
8190 var matches = (this.document || this.ownerDocument).querySelectorAll(s),
8191 i = void 0,
8192 el = this;
8193 do {
8194 i = matches.length;
8195 while (--i >= 0 && matches.item(i) !== el) {}
8196 } while (i < 0 && (el = el.parentElement));
8197 return el;
8198 };
8199 }
8200
8201 (function () {
8202 var lastTime = 0;
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'];
8207 }
8208
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);
8214 }, timeToCall);
8215 lastTime = currTime + timeToCall;
8216 return id;
8217 };
8218
8219 if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {
8220 clearTimeout(id);
8221 };
8222 })();
8223
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;
8229 };
8230 }
8231
8232 if (!window.Promise) {
8233 window.Promise = _promisePolyfill2.default;
8234 }
8235
8236 (function (constructor) {
8237 if (constructor && constructor.prototype && constructor.prototype.children === null) {
8238 Object.defineProperty(constructor.prototype, 'children', {
8239 get: function get() {
8240 var i = 0,
8241 node = void 0,
8242 nodes = this.childNodes,
8243 children = [];
8244 while (node = nodes[i++]) {
8245 if (node.nodeType === 1) {
8246 children.push(node);
8247 }
8248 }
8249 return children;
8250 }
8251 });
8252 }
8253 })(window.Node || window.Element);
8254
8255 },{"2":2,"4":4}],30:[function(_dereq_,module,exports){
8256 'use strict';
8257
8258 Object.defineProperty(exports, "__esModule", {
8259 value: true
8260 });
8261 exports.isDropFrame = isDropFrame;
8262 exports.secondsToTimeCode = secondsToTimeCode;
8263 exports.timeCodeToSeconds = timeCodeToSeconds;
8264 exports.calculateTimeFormat = calculateTimeFormat;
8265 exports.convertSMPTEtoSeconds = convertSMPTEtoSeconds;
8266
8267 var _mejs = _dereq_(7);
8268
8269 var _mejs2 = _interopRequireDefault(_mejs);
8270
8271 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8272
8273 function isDropFrame() {
8274 var fps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 25;
8275
8276 return !(fps % 1 === 0);
8277 }
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';
8284
8285
8286 time = !time || typeof time !== 'number' || time < 0 ? 0 : time;
8287
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) ? ';' : ':',
8293 hours = void 0,
8294 minutes = void 0,
8295 seconds = void 0,
8296 frames = void 0,
8297 f = Math.round(time * fps);
8298
8299 if (isDropFrame(fps)) {
8300
8301 if (f < 0) {
8302 f = framesPer24Hours + f;
8303 }
8304
8305 f = f % framesPer24Hours;
8306
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));
8312 }
8313
8314 var timeBaseDivision = Math.floor(f / timeBase);
8315
8316 hours = Math.floor(Math.floor(timeBaseDivision / 60) / 60);
8317 minutes = Math.floor(timeBaseDivision / 60) % 60;
8318
8319 if (showFrameCount) {
8320 seconds = timeBaseDivision % 60;
8321 } else {
8322 seconds = Math.floor(f / timeBase % 60).toFixed(secondsDecimalLength);
8323 }
8324 } else {
8325 hours = Math.floor(time / 3600) % 24;
8326 minutes = Math.floor(time / 60) % 60;
8327 if (showFrameCount) {
8328 seconds = Math.floor(time % 60);
8329 } else {
8330 seconds = Math.floor(time % 60).toFixed(secondsDecimalLength);
8331 }
8332 }
8333 hours = hours <= 0 ? 0 : hours;
8334 minutes = minutes <= 0 ? 0 : minutes;
8335 seconds = seconds <= 0 ? 0 : seconds;
8336
8337 seconds = seconds === 60 ? 0 : seconds;
8338 minutes = minutes === 60 ? 0 : minutes;
8339
8340 var timeFormatFrags = timeFormat.split(':');
8341 var timeFormatSettings = {};
8342 for (var i = 0, total = timeFormatFrags.length; i < total; ++i) {
8343 var unique = '';
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];
8347 }
8348 }
8349 if (~['f', 's', 'm', 'h'].indexOf(unique)) {
8350 timeFormatSettings[unique] = timeFormatFrags[i].length;
8351 }
8352 }
8353
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);
8357
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;
8362 }
8363
8364 return result;
8365 }
8366
8367 function timeCodeToSeconds(time) {
8368 var fps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 25;
8369
8370
8371 if (typeof time !== 'string') {
8372 throw new TypeError('Time must be a string');
8373 }
8374
8375 if (time.indexOf(';') > 0) {
8376 time = time.replace(';', ':');
8377 }
8378
8379 if (!/\d{2}(\:\d{2}){0,3}/i.test(time)) {
8380 throw new TypeError('Time code must have the format `00:00:00`');
8381 }
8382
8383 var parts = time.split(':');
8384
8385 var output = void 0,
8386 hours = 0,
8387 minutes = 0,
8388 seconds = 0,
8389 frames = 0,
8390 totalMinutes = 0,
8391 dropFrames = Math.round(fps * 0.066666),
8392 timeBase = Math.round(fps),
8393 hFrames = timeBase * 3600,
8394 mFrames = timeBase * 60;
8395
8396 switch (parts.length) {
8397 default:
8398 case 1:
8399 seconds = parseInt(parts[0], 10);
8400 break;
8401 case 2:
8402 minutes = parseInt(parts[0], 10);
8403 seconds = parseInt(parts[1], 10);
8404 break;
8405 case 3:
8406 hours = parseInt(parts[0], 10);
8407 minutes = parseInt(parts[1], 10);
8408 seconds = parseInt(parts[2], 10);
8409 break;
8410 case 4:
8411 hours = parseInt(parts[0], 10);
8412 minutes = parseInt(parts[1], 10);
8413 seconds = parseInt(parts[2], 10);
8414 frames = parseInt(parts[3], 10);
8415 break;
8416 }
8417
8418 if (isDropFrame(fps)) {
8419 totalMinutes = 60 * hours + minutes;
8420 output = hFrames * hours + mFrames * minutes + timeBase * seconds + frames - dropFrames * (totalMinutes - Math.floor(totalMinutes / 10));
8421 } else {
8422 output = (hFrames * hours + mFrames * minutes + fps * seconds + frames) / fps;
8423 }
8424
8425 return parseFloat(output.toFixed(3));
8426 }
8427
8428 function calculateTimeFormat(time, options) {
8429 var fps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 25;
8430
8431
8432 time = !time || typeof time !== 'number' || time < 0 ? 0 : time;
8433
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']];
8439
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],
8445 required = false;
8446
8447 for (var i = 0, len = lis.length; i < len; i++) {
8448 if (~format.indexOf(lis[i][1])) {
8449 required = true;
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;
8455 break;
8456 }
8457 }
8458
8459 if (!hasNextValue) {
8460 break;
8461 }
8462
8463 if (!firstTwoPlaces) {
8464 format = firstChar + format;
8465 }
8466 format = lis[i][1] + separator + format;
8467 if (firstTwoPlaces) {
8468 format = lis[i][1] + format;
8469 }
8470 firstChar = lis[i][1];
8471 }
8472 }
8473
8474 options.timeFormat = format;
8475 }
8476
8477 function convertSMPTEtoSeconds(SMPTE) {
8478
8479 if (typeof SMPTE !== 'string') {
8480 throw new TypeError('Argument must be a string value');
8481 }
8482
8483 SMPTE = SMPTE.replace(',', '.');
8484
8485 var decimalLen = ~SMPTE.indexOf('.') ? SMPTE.split('.')[1].length : 0;
8486
8487 var secs = 0,
8488 multiplier = 1;
8489
8490 SMPTE = SMPTE.split(':').reverse();
8491
8492 for (var i = 0, total = SMPTE.length; i < total; i++) {
8493 multiplier = 1;
8494 if (i > 0) {
8495 multiplier = Math.pow(60, i);
8496 }
8497 secs += Number(SMPTE[i]) * multiplier;
8498 }
8499 return Number(secs.toFixed(decimalLen));
8500 }
8501
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;
8507
8508 },{"7":7}]},{},[29,6,5,15,23,20,19,21,22,24,16,18,17,9,10,11,12,13,14]);