e9d3a85256043c78768ec7bfbdd65fdae25438c4
[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}(\-[a-z]{2})?$/i.test(args[0])) {
319 throw new TypeError('Language code must have format `xx` or `xx-xx`');
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 setTimeout(function () {
868 t.mediaElement.renderer[methodName](args);
869 }, 100);
870 } else {
871 t.mediaElement.renderer[methodName](args);
872 }
873 } catch (e) {
874 t.mediaElement.generateError(e, mediaFiles);
875 }
876 },
877 assignMethods = function assignMethods(methodName) {
878 t.mediaElement[methodName] = function () {
879 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
880 args[_key] = arguments[_key];
881 }
882
883 if (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null && typeof t.mediaElement.renderer[methodName] === 'function') {
884 if (t.mediaElement.promises.length) {
885 Promise.all(t.mediaElement.promises).then(function () {
886 triggerAction(methodName, args);
887 }).catch(function (e) {
888 t.mediaElement.generateError(e, mediaFiles);
889 });
890 } else {
891 triggerAction(methodName, args);
892 }
893 }
894 return null;
895 };
896 };
897
898 addProperty(t.mediaElement, 'src', getSrc, setSrc);
899 t.mediaElement.getSrc = getSrc;
900 t.mediaElement.setSrc = setSrc;
901
902 for (var _i3 = 0, total = props.length; _i3 < total; _i3++) {
903 assignGettersSetters(props[_i3]);
904 }
905
906 for (var _i4 = 0, _total = methods.length; _i4 < _total; _i4++) {
907 assignMethods(methods[_i4]);
908 }
909
910 t.mediaElement.addEventListener = function (eventName, callback) {
911 t.mediaElement.events[eventName] = t.mediaElement.events[eventName] || [];
912
913 t.mediaElement.events[eventName].push(callback);
914 };
915 t.mediaElement.removeEventListener = function (eventName, callback) {
916 if (!eventName) {
917 t.mediaElement.events = {};
918 return true;
919 }
920
921 var callbacks = t.mediaElement.events[eventName];
922
923 if (!callbacks) {
924 return true;
925 }
926
927 if (!callback) {
928 t.mediaElement.events[eventName] = [];
929 return true;
930 }
931
932 for (var _i5 = 0; _i5 < callbacks.length; _i5++) {
933 if (callbacks[_i5] === callback) {
934 t.mediaElement.events[eventName].splice(_i5, 1);
935 return true;
936 }
937 }
938 return false;
939 };
940
941 t.mediaElement.dispatchEvent = function (event) {
942 var callbacks = t.mediaElement.events[event.type];
943 if (callbacks) {
944 for (var _i6 = 0; _i6 < callbacks.length; _i6++) {
945 callbacks[_i6].apply(null, [event]);
946 }
947 }
948 };
949
950 if (mediaFiles.length) {
951 t.mediaElement.src = mediaFiles;
952 }
953
954 if (t.mediaElement.promises.length) {
955 Promise.all(t.mediaElement.promises).then(function () {
956 if (t.mediaElement.options.success) {
957 t.mediaElement.options.success(t.mediaElement, t.mediaElement.originalNode);
958 }
959 }).catch(function () {
960 if (error && t.mediaElement.options.error) {
961 t.mediaElement.options.error(t.mediaElement, t.mediaElement.originalNode);
962 }
963 });
964 } else {
965 if (t.mediaElement.options.success) {
966 t.mediaElement.options.success(t.mediaElement, t.mediaElement.originalNode);
967 }
968
969 if (error && t.mediaElement.options.error) {
970 t.mediaElement.options.error(t.mediaElement, t.mediaElement.originalNode);
971 }
972 }
973
974 return t.mediaElement;
975 };
976
977 _window2.default.MediaElement = MediaElement;
978
979 exports.default = MediaElement;
980
981 },{"2":2,"25":25,"27":27,"28":28,"3":3,"7":7,"8":8}],7:[function(_dereq_,module,exports){
982 'use strict';
983
984 Object.defineProperty(exports, "__esModule", {
985 value: true
986 });
987
988 var _window = _dereq_(3);
989
990 var _window2 = _interopRequireDefault(_window);
991
992 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
993
994 var mejs = {};
995
996 mejs.version = '4.2.5';
997
998 mejs.html5media = {
999 properties: ['volume', 'src', 'currentTime', 'muted', 'duration', 'paused', 'ended', 'buffered', 'error', 'networkState', 'readyState', 'seeking', 'seekable', 'currentSrc', 'preload', 'bufferedBytes', 'bufferedTime', 'initialTime', 'startOffsetTime', 'defaultPlaybackRate', 'playbackRate', 'played', 'autoplay', 'loop', 'controls'],
1000 readOnlyProperties: ['duration', 'paused', 'ended', 'buffered', 'error', 'networkState', 'readyState', 'seeking', 'seekable'],
1001
1002 methods: ['load', 'play', 'pause', 'canPlayType'],
1003
1004 events: ['loadstart', 'durationchange', 'loadedmetadata', 'loadeddata', 'progress', 'canplay', 'canplaythrough', 'suspend', 'abort', 'error', 'emptied', 'stalled', 'play', 'playing', 'pause', 'waiting', 'seeking', 'seeked', 'timeupdate', 'ended', 'ratechange', 'volumechange'],
1005
1006 mediaTypes: ['audio/mp3', 'audio/ogg', 'audio/oga', 'audio/wav', 'audio/x-wav', 'audio/wave', 'audio/x-pn-wav', 'audio/mpeg', 'audio/mp4', 'video/mp4', 'video/webm', 'video/ogg', 'video/ogv']
1007 };
1008
1009 _window2.default.mejs = mejs;
1010
1011 exports.default = mejs;
1012
1013 },{"3":3}],8:[function(_dereq_,module,exports){
1014 'use strict';
1015
1016 Object.defineProperty(exports, "__esModule", {
1017 value: true
1018 });
1019 exports.renderer = undefined;
1020
1021 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
1022
1023 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
1024
1025 var _mejs = _dereq_(7);
1026
1027 var _mejs2 = _interopRequireDefault(_mejs);
1028
1029 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1030
1031 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1032
1033 var Renderer = function () {
1034 function Renderer() {
1035 _classCallCheck(this, Renderer);
1036
1037 this.renderers = {};
1038 this.order = [];
1039 }
1040
1041 _createClass(Renderer, [{
1042 key: 'add',
1043 value: function add(renderer) {
1044 if (renderer.name === undefined) {
1045 throw new TypeError('renderer must contain at least `name` property');
1046 }
1047
1048 this.renderers[renderer.name] = renderer;
1049 this.order.push(renderer.name);
1050 }
1051 }, {
1052 key: 'select',
1053 value: function select(mediaFiles) {
1054 var renderers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
1055
1056 var renderersLength = renderers.length;
1057
1058 renderers = renderers.length ? renderers : this.order;
1059
1060 if (!renderersLength) {
1061 var rendererIndicator = [/^(html5|native)/i, /^flash/i, /iframe$/i],
1062 rendererRanking = function rendererRanking(renderer) {
1063 for (var i = 0, total = rendererIndicator.length; i < total; i++) {
1064 if (rendererIndicator[i].test(renderer)) {
1065 return i;
1066 }
1067 }
1068 return rendererIndicator.length;
1069 };
1070
1071 renderers.sort(function (a, b) {
1072 return rendererRanking(a) - rendererRanking(b);
1073 });
1074 }
1075
1076 for (var i = 0, total = renderers.length; i < total; i++) {
1077 var key = renderers[i],
1078 _renderer = this.renderers[key];
1079
1080 if (_renderer !== null && _renderer !== undefined) {
1081 for (var j = 0, jl = mediaFiles.length; j < jl; j++) {
1082 if (typeof _renderer.canPlayType === 'function' && typeof mediaFiles[j].type === 'string' && _renderer.canPlayType(mediaFiles[j].type)) {
1083 return {
1084 rendererName: _renderer.name,
1085 src: mediaFiles[j].src
1086 };
1087 }
1088 }
1089 }
1090 }
1091
1092 return null;
1093 }
1094 }, {
1095 key: 'order',
1096 set: function set(order) {
1097 if (!Array.isArray(order)) {
1098 throw new TypeError('order must be an array of strings.');
1099 }
1100
1101 this._order = order;
1102 },
1103 get: function get() {
1104 return this._order;
1105 }
1106 }, {
1107 key: 'renderers',
1108 set: function set(renderers) {
1109 if (renderers !== null && (typeof renderers === 'undefined' ? 'undefined' : _typeof(renderers)) !== 'object') {
1110 throw new TypeError('renderers must be an array of objects.');
1111 }
1112
1113 this._renderers = renderers;
1114 },
1115 get: function get() {
1116 return this._renderers;
1117 }
1118 }]);
1119
1120 return Renderer;
1121 }();
1122
1123 var renderer = exports.renderer = new Renderer();
1124
1125 _mejs2.default.Renderers = renderer;
1126
1127 },{"7":7}],9:[function(_dereq_,module,exports){
1128 'use strict';
1129
1130 var _window = _dereq_(3);
1131
1132 var _window2 = _interopRequireDefault(_window);
1133
1134 var _document = _dereq_(2);
1135
1136 var _document2 = _interopRequireDefault(_document);
1137
1138 var _i18n = _dereq_(5);
1139
1140 var _i18n2 = _interopRequireDefault(_i18n);
1141
1142 var _player = _dereq_(16);
1143
1144 var _player2 = _interopRequireDefault(_player);
1145
1146 var _constants = _dereq_(25);
1147
1148 var Features = _interopRequireWildcard(_constants);
1149
1150 var _general = _dereq_(27);
1151
1152 var _dom = _dereq_(26);
1153
1154 var _media = _dereq_(28);
1155
1156 function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
1157
1158 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1159
1160 Object.assign(_player.config, {
1161 usePluginFullScreen: true,
1162
1163 fullscreenText: null,
1164
1165 useFakeFullscreen: false
1166 });
1167
1168 Object.assign(_player2.default.prototype, {
1169 isFullScreen: false,
1170
1171 isNativeFullScreen: false,
1172
1173 isInIframe: false,
1174
1175 isPluginClickThroughCreated: false,
1176
1177 fullscreenMode: '',
1178
1179 containerSizeTimeout: null,
1180
1181 buildfullscreen: function buildfullscreen(player) {
1182 if (!player.isVideo) {
1183 return;
1184 }
1185
1186 player.isInIframe = _window2.default.location !== _window2.default.parent.location;
1187
1188 player.detectFullscreenMode();
1189
1190 var t = this,
1191 fullscreenTitle = (0, _general.isString)(t.options.fullscreenText) ? t.options.fullscreenText : _i18n2.default.t('mejs.fullscreen'),
1192 fullscreenBtn = _document2.default.createElement('div');
1193
1194 fullscreenBtn.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'fullscreen-button';
1195 fullscreenBtn.innerHTML = '<button type="button" aria-controls="' + t.id + '" title="' + fullscreenTitle + '" aria-label="' + fullscreenTitle + '" tabindex="0"></button>';
1196 t.addControlElement(fullscreenBtn, 'fullscreen');
1197
1198 fullscreenBtn.addEventListener('click', function () {
1199 var isFullScreen = Features.HAS_TRUE_NATIVE_FULLSCREEN && Features.IS_FULLSCREEN || player.isFullScreen;
1200
1201 if (isFullScreen) {
1202 player.exitFullScreen();
1203 } else {
1204 player.enterFullScreen();
1205 }
1206 });
1207
1208 player.fullscreenBtn = fullscreenBtn;
1209
1210 t.exitFullscreenCallback = function (e) {
1211 var key = e.which || e.keyCode || 0;
1212 if (key === 27 && (Features.HAS_TRUE_NATIVE_FULLSCREEN && Features.IS_FULLSCREEN || t.isFullScreen)) {
1213 player.exitFullScreen();
1214 }
1215 };
1216
1217 t.globalBind('keydown', t.exitFullscreenCallback);
1218
1219 t.normalHeight = 0;
1220 t.normalWidth = 0;
1221
1222 if (Features.HAS_TRUE_NATIVE_FULLSCREEN) {
1223 var fullscreenChanged = function fullscreenChanged() {
1224 if (player.isFullScreen) {
1225 if (Features.isFullScreen()) {
1226 player.isNativeFullScreen = true;
1227
1228 player.setControlsSize();
1229 } else {
1230 player.isNativeFullScreen = false;
1231
1232 player.exitFullScreen();
1233 }
1234 }
1235 };
1236
1237 player.globalBind(Features.FULLSCREEN_EVENT_NAME, fullscreenChanged);
1238 }
1239 },
1240 cleanfullscreen: function cleanfullscreen(player) {
1241 player.exitFullScreen();
1242 player.globalUnbind('keydown', player.exitFullscreenCallback);
1243 },
1244 detectFullscreenMode: function detectFullscreenMode() {
1245 var t = this,
1246 isNative = t.media.rendererName !== null && /(native|html5)/i.test(t.media.rendererName);
1247
1248 var mode = '';
1249
1250 if (Features.HAS_TRUE_NATIVE_FULLSCREEN && isNative) {
1251 mode = 'native-native';
1252 } else if (Features.HAS_TRUE_NATIVE_FULLSCREEN && !isNative) {
1253 mode = 'plugin-native';
1254 } else if (t.usePluginFullScreen && Features.SUPPORT_POINTER_EVENTS) {
1255 mode = 'plugin-click';
1256 }
1257
1258 t.fullscreenMode = mode;
1259 return mode;
1260 },
1261 enterFullScreen: function enterFullScreen() {
1262 var t = this,
1263 isNative = t.media.rendererName !== null && /(html5|native)/i.test(t.media.rendererName),
1264 containerStyles = getComputedStyle(t.container);
1265
1266 if (t.options.useFakeFullscreen === false && Features.IS_IOS && Features.HAS_IOS_FULLSCREEN && typeof t.media.originalNode.webkitEnterFullscreen === 'function' && t.media.originalNode.canPlayType((0, _media.getTypeFromFile)(t.media.getSrc()))) {
1267 t.media.originalNode.webkitEnterFullscreen();
1268 return;
1269 }
1270
1271 (0, _dom.addClass)(_document2.default.documentElement, t.options.classPrefix + 'fullscreen');
1272 (0, _dom.addClass)(t.container, t.options.classPrefix + 'container-fullscreen');
1273
1274 t.normalHeight = parseFloat(containerStyles.height);
1275 t.normalWidth = parseFloat(containerStyles.width);
1276
1277 if (t.fullscreenMode === 'native-native' || t.fullscreenMode === 'plugin-native') {
1278 Features.requestFullScreen(t.container);
1279
1280 if (t.isInIframe) {
1281 setTimeout(function checkFullscreen() {
1282
1283 if (t.isNativeFullScreen) {
1284 var percentErrorMargin = 0.002,
1285 windowWidth = _window2.default.innerWidth || _document2.default.documentElement.clientWidth || _document2.default.body.clientWidth,
1286 screenWidth = screen.width,
1287 absDiff = Math.abs(screenWidth - windowWidth),
1288 marginError = screenWidth * percentErrorMargin;
1289
1290 if (absDiff > marginError) {
1291 t.exitFullScreen();
1292 } else {
1293 setTimeout(checkFullscreen, 500);
1294 }
1295 }
1296 }, 1000);
1297 }
1298 }
1299
1300 t.container.style.width = '100%';
1301 t.container.style.height = '100%';
1302
1303 t.containerSizeTimeout = setTimeout(function () {
1304 t.container.style.width = '100%';
1305 t.container.style.height = '100%';
1306 t.setControlsSize();
1307 }, 500);
1308
1309 if (isNative) {
1310 t.node.style.width = '100%';
1311 t.node.style.height = '100%';
1312 } else {
1313 var elements = t.container.querySelectorAll('embed, object, video'),
1314 _total = elements.length;
1315 for (var i = 0; i < _total; i++) {
1316 elements[i].style.width = '100%';
1317 elements[i].style.height = '100%';
1318 }
1319 }
1320
1321 if (t.options.setDimensions && typeof t.media.setSize === 'function') {
1322 t.media.setSize(screen.width, screen.height);
1323 }
1324
1325 var layers = t.layers.children,
1326 total = layers.length;
1327 for (var _i = 0; _i < total; _i++) {
1328 layers[_i].style.width = '100%';
1329 layers[_i].style.height = '100%';
1330 }
1331
1332 if (t.fullscreenBtn) {
1333 (0, _dom.removeClass)(t.fullscreenBtn, t.options.classPrefix + 'fullscreen');
1334 (0, _dom.addClass)(t.fullscreenBtn, t.options.classPrefix + 'unfullscreen');
1335 }
1336
1337 t.setControlsSize();
1338 t.isFullScreen = true;
1339
1340 var zoomFactor = Math.min(screen.width / t.width, screen.height / t.height),
1341 captionText = t.container.querySelector('.' + t.options.classPrefix + 'captions-text');
1342 if (captionText) {
1343 captionText.style.fontSize = zoomFactor * 100 + '%';
1344 captionText.style.lineHeight = 'normal';
1345 t.container.querySelector('.' + t.options.classPrefix + 'captions-position').style.bottom = '45px';
1346 }
1347 var event = (0, _general.createEvent)('enteredfullscreen', t.container);
1348 t.container.dispatchEvent(event);
1349 },
1350 exitFullScreen: function exitFullScreen() {
1351 var t = this,
1352 isNative = t.media.rendererName !== null && /(native|html5)/i.test(t.media.rendererName);
1353
1354 clearTimeout(t.containerSizeTimeout);
1355
1356 if (Features.HAS_TRUE_NATIVE_FULLSCREEN && (Features.IS_FULLSCREEN || t.isFullScreen)) {
1357 Features.cancelFullScreen();
1358 }
1359
1360 (0, _dom.removeClass)(_document2.default.documentElement, t.options.classPrefix + 'fullscreen');
1361 (0, _dom.removeClass)(t.container, t.options.classPrefix + 'container-fullscreen');
1362
1363 if (t.options.setDimensions) {
1364 t.container.style.width = t.normalWidth + 'px';
1365 t.container.style.height = t.normalHeight + 'px';
1366
1367 if (isNative) {
1368 t.node.style.width = t.normalWidth + 'px';
1369 t.node.style.height = t.normalHeight + 'px';
1370 } else {
1371 var elements = t.container.querySelectorAll('embed, object, video'),
1372 _total2 = elements.length;
1373 for (var i = 0; i < _total2; i++) {
1374 elements[i].style.width = t.normalWidth + 'px';
1375 elements[i].style.height = t.normalHeight + 'px';
1376 }
1377 }
1378
1379 if (typeof t.media.setSize === 'function') {
1380 t.media.setSize(t.normalWidth, t.normalHeight);
1381 }
1382
1383 var layers = t.layers.children,
1384 total = layers.length;
1385 for (var _i2 = 0; _i2 < total; _i2++) {
1386 layers[_i2].style.width = t.normalWidth + 'px';
1387 layers[_i2].style.height = t.normalHeight + 'px';
1388 }
1389 }
1390
1391 if (t.fullscreenBtn) {
1392 (0, _dom.removeClass)(t.fullscreenBtn, t.options.classPrefix + 'unfullscreen');
1393 (0, _dom.addClass)(t.fullscreenBtn, t.options.classPrefix + 'fullscreen');
1394 }
1395
1396 t.setControlsSize();
1397 t.isFullScreen = false;
1398
1399 var captionText = t.container.querySelector('.' + t.options.classPrefix + 'captions-text');
1400 if (captionText) {
1401 captionText.style.fontSize = '';
1402 captionText.style.lineHeight = '';
1403 t.container.querySelector('.' + t.options.classPrefix + 'captions-position').style.bottom = '';
1404 }
1405 var event = (0, _general.createEvent)('exitedfullscreen', t.container);
1406 t.container.dispatchEvent(event);
1407 }
1408 });
1409
1410 },{"16":16,"2":2,"25":25,"26":26,"27":27,"28":28,"3":3,"5":5}],10:[function(_dereq_,module,exports){
1411 'use strict';
1412
1413 var _document = _dereq_(2);
1414
1415 var _document2 = _interopRequireDefault(_document);
1416
1417 var _player = _dereq_(16);
1418
1419 var _player2 = _interopRequireDefault(_player);
1420
1421 var _i18n = _dereq_(5);
1422
1423 var _i18n2 = _interopRequireDefault(_i18n);
1424
1425 var _general = _dereq_(27);
1426
1427 var _dom = _dereq_(26);
1428
1429 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1430
1431 Object.assign(_player.config, {
1432 playText: null,
1433
1434 pauseText: null
1435 });
1436
1437 Object.assign(_player2.default.prototype, {
1438 buildplaypause: function buildplaypause(player, controls, layers, media) {
1439 var t = this,
1440 op = t.options,
1441 playTitle = (0, _general.isString)(op.playText) ? op.playText : _i18n2.default.t('mejs.play'),
1442 pauseTitle = (0, _general.isString)(op.pauseText) ? op.pauseText : _i18n2.default.t('mejs.pause'),
1443 play = _document2.default.createElement('div');
1444
1445 play.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'playpause-button ' + t.options.classPrefix + 'play';
1446 play.innerHTML = '<button type="button" aria-controls="' + t.id + '" title="' + playTitle + '" aria-label="' + pauseTitle + '" tabindex="0"></button>';
1447 play.addEventListener('click', function () {
1448 if (t.paused) {
1449 t.play();
1450 } else {
1451 t.pause();
1452 }
1453 });
1454
1455 var playBtn = play.querySelector('button');
1456 t.addControlElement(play, 'playpause');
1457
1458 function togglePlayPause(which) {
1459 if ('play' === which) {
1460 (0, _dom.removeClass)(play, t.options.classPrefix + 'play');
1461 (0, _dom.removeClass)(play, t.options.classPrefix + 'replay');
1462 (0, _dom.addClass)(play, t.options.classPrefix + 'pause');
1463 playBtn.setAttribute('title', pauseTitle);
1464 playBtn.setAttribute('aria-label', pauseTitle);
1465 } else {
1466
1467 (0, _dom.removeClass)(play, t.options.classPrefix + 'pause');
1468 (0, _dom.removeClass)(play, t.options.classPrefix + 'replay');
1469 (0, _dom.addClass)(play, t.options.classPrefix + 'play');
1470 playBtn.setAttribute('title', playTitle);
1471 playBtn.setAttribute('aria-label', playTitle);
1472 }
1473 }
1474
1475 togglePlayPause('pse');
1476
1477 media.addEventListener('loadedmetadata', function () {
1478 if (media.rendererName.indexOf('flash') === -1) {
1479 togglePlayPause('pse');
1480 }
1481 });
1482 media.addEventListener('play', function () {
1483 togglePlayPause('play');
1484 });
1485 media.addEventListener('playing', function () {
1486 togglePlayPause('play');
1487 });
1488 media.addEventListener('pause', function () {
1489 togglePlayPause('pse');
1490 });
1491 media.addEventListener('ended', function () {
1492 if (!player.options.loop) {
1493 (0, _dom.removeClass)(play, t.options.classPrefix + 'pause');
1494 (0, _dom.removeClass)(play, t.options.classPrefix + 'play');
1495 (0, _dom.addClass)(play, t.options.classPrefix + 'replay');
1496 playBtn.setAttribute('title', playTitle);
1497 playBtn.setAttribute('aria-label', playTitle);
1498 }
1499 });
1500 }
1501 });
1502
1503 },{"16":16,"2":2,"26":26,"27":27,"5":5}],11:[function(_dereq_,module,exports){
1504 'use strict';
1505
1506 var _document = _dereq_(2);
1507
1508 var _document2 = _interopRequireDefault(_document);
1509
1510 var _player = _dereq_(16);
1511
1512 var _player2 = _interopRequireDefault(_player);
1513
1514 var _i18n = _dereq_(5);
1515
1516 var _i18n2 = _interopRequireDefault(_i18n);
1517
1518 var _constants = _dereq_(25);
1519
1520 var _time = _dereq_(30);
1521
1522 var _dom = _dereq_(26);
1523
1524 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1525
1526 Object.assign(_player.config, {
1527 enableProgressTooltip: true,
1528
1529 useSmoothHover: true,
1530
1531 forceLive: false
1532 });
1533
1534 Object.assign(_player2.default.prototype, {
1535 buildprogress: function buildprogress(player, controls, layers, media) {
1536
1537 var lastKeyPressTime = 0,
1538 mouseIsDown = false,
1539 startedPaused = false;
1540
1541 var t = this,
1542 autoRewindInitial = player.options.autoRewind,
1543 tooltip = player.options.enableProgressTooltip ? '<span class="' + t.options.classPrefix + 'time-float">' + ('<span class="' + t.options.classPrefix + 'time-float-current">00:00</span>') + ('<span class="' + t.options.classPrefix + 'time-float-corner"></span>') + '</span>' : '',
1544 rail = _document2.default.createElement('div');
1545
1546 rail.className = t.options.classPrefix + 'time-rail';
1547 rail.innerHTML = '<span class="' + t.options.classPrefix + 'time-total ' + t.options.classPrefix + 'time-slider">' + ('<span class="' + t.options.classPrefix + 'time-buffering"></span>') + ('<span class="' + t.options.classPrefix + 'time-loaded"></span>') + ('<span class="' + t.options.classPrefix + 'time-current"></span>') + ('<span class="' + t.options.classPrefix + 'time-hovered no-hover"></span>') + ('<span class="' + t.options.classPrefix + 'time-handle"><span class="' + t.options.classPrefix + 'time-handle-content"></span></span>') + ('' + tooltip) + '</span>';
1548
1549 t.addControlElement(rail, 'progress');
1550
1551 controls.querySelector('.' + t.options.classPrefix + 'time-buffering').style.display = 'none';
1552
1553 t.rail = controls.querySelector('.' + t.options.classPrefix + 'time-rail');
1554 t.total = controls.querySelector('.' + t.options.classPrefix + 'time-total');
1555 t.loaded = controls.querySelector('.' + t.options.classPrefix + 'time-loaded');
1556 t.current = controls.querySelector('.' + t.options.classPrefix + 'time-current');
1557 t.handle = controls.querySelector('.' + t.options.classPrefix + 'time-handle');
1558 t.timefloat = controls.querySelector('.' + t.options.classPrefix + 'time-float');
1559 t.timefloatcurrent = controls.querySelector('.' + t.options.classPrefix + 'time-float-current');
1560 t.slider = controls.querySelector('.' + t.options.classPrefix + 'time-slider');
1561 t.hovered = controls.querySelector('.' + t.options.classPrefix + 'time-hovered');
1562 t.newTime = 0;
1563 t.forcedHandlePause = false;
1564 t.setTransformStyle = function (element, value) {
1565 element.style.transform = value;
1566 element.style.webkitTransform = value;
1567 element.style.MozTransform = value;
1568 element.style.msTransform = value;
1569 element.style.OTransform = value;
1570 };
1571
1572 var handleMouseMove = function handleMouseMove(e) {
1573 var totalStyles = getComputedStyle(t.total),
1574 offsetStyles = (0, _dom.offset)(t.total),
1575 width = t.total.offsetWidth,
1576 transform = function () {
1577 if (totalStyles.webkitTransform !== undefined) {
1578 return 'webkitTransform';
1579 } else if (totalStyles.mozTransform !== undefined) {
1580 return 'mozTransform ';
1581 } else if (totalStyles.oTransform !== undefined) {
1582 return 'oTransform';
1583 } else if (totalStyles.msTransform !== undefined) {
1584 return 'msTransform';
1585 } else {
1586 return 'transform';
1587 }
1588 }(),
1589 cssMatrix = function () {
1590 if ('WebKitCSSMatrix' in window) {
1591 return 'WebKitCSSMatrix';
1592 } else if ('MSCSSMatrix' in window) {
1593 return 'MSCSSMatrix';
1594 } else if ('CSSMatrix' in window) {
1595 return 'CSSMatrix';
1596 }
1597 }();
1598
1599 var percentage = 0,
1600 leftPos = 0,
1601 pos = 0,
1602 x = void 0;
1603
1604 if (e.originalEvent && e.originalEvent.changedTouches) {
1605 x = e.originalEvent.changedTouches[0].pageX;
1606 } else if (e.changedTouches) {
1607 x = e.changedTouches[0].pageX;
1608 } else {
1609 x = e.pageX;
1610 }
1611
1612 if (t.getDuration()) {
1613 if (x < offsetStyles.left) {
1614 x = offsetStyles.left;
1615 } else if (x > width + offsetStyles.left) {
1616 x = width + offsetStyles.left;
1617 }
1618
1619 pos = x - offsetStyles.left;
1620 percentage = pos / width;
1621 t.newTime = percentage <= 0.02 ? 0 : percentage * t.getDuration();
1622
1623 if (mouseIsDown && t.getCurrentTime() !== null && t.newTime.toFixed(4) !== t.getCurrentTime().toFixed(4)) {
1624 t.setCurrentRailHandle(t.newTime);
1625 t.updateCurrent(t.newTime);
1626 }
1627
1628 if (!_constants.IS_IOS && !_constants.IS_ANDROID && t.timefloat) {
1629 if (pos < 0) {
1630 pos = 0;
1631 }
1632 if (t.options.useSmoothHover && cssMatrix !== null && typeof window[cssMatrix] !== 'undefined') {
1633 var matrix = new window[cssMatrix](getComputedStyle(t.handle)[transform]),
1634 handleLocation = matrix.m41,
1635 hoverScaleX = pos / parseFloat(getComputedStyle(t.total).width) - handleLocation / parseFloat(getComputedStyle(t.total).width);
1636
1637 t.hovered.style.left = handleLocation + 'px';
1638 t.setTransformStyle(t.hovered, 'scaleX(' + hoverScaleX + ')');
1639 t.hovered.setAttribute('pos', pos);
1640
1641 if (hoverScaleX >= 0) {
1642 (0, _dom.removeClass)(t.hovered, 'negative');
1643 } else {
1644 (0, _dom.addClass)(t.hovered, 'negative');
1645 }
1646 }
1647
1648 var half = t.timefloat.offsetWidth / 2;
1649 if (x <= t.timefloat.offsetWidth + half) {
1650 leftPos = half;
1651 } else if (x >= t.container.offsetWidth - half) {
1652 leftPos = t.total.offsetWidth - half;
1653 } else {
1654 leftPos = pos;
1655 }
1656
1657 t.timefloat.style.left = leftPos + 'px';
1658 t.timefloatcurrent.innerHTML = (0, _time.secondsToTimeCode)(t.newTime, player.options.alwaysShowHours, player.options.showTimecodeFrameCount, player.options.framesPerSecond, player.options.secondsDecimalLength);
1659 t.timefloat.style.display = 'block';
1660 }
1661 } else if (!_constants.IS_IOS && !_constants.IS_ANDROID && t.timefloat) {
1662 leftPos = t.timefloat.offsetWidth + width >= t.container.offsetWidth ? t.timefloat.offsetWidth / 2 : 0;
1663 t.timefloat.style.left = leftPos + 'px';
1664 t.timefloat.style.left = leftPos + 'px';
1665 t.timefloat.style.display = 'block';
1666 }
1667 },
1668 updateSlider = function updateSlider() {
1669 var seconds = t.getCurrentTime(),
1670 timeSliderText = _i18n2.default.t('mejs.time-slider'),
1671 time = (0, _time.secondsToTimeCode)(seconds, player.options.alwaysShowHours, player.options.showTimecodeFrameCount, player.options.framesPerSecond, player.options.secondsDecimalLength),
1672 duration = t.getDuration();
1673
1674 t.slider.setAttribute('role', 'slider');
1675 t.slider.tabIndex = 0;
1676
1677 if (media.paused) {
1678 t.slider.setAttribute('aria-label', timeSliderText);
1679 t.slider.setAttribute('aria-valuemin', 0);
1680 t.slider.setAttribute('aria-valuemax', duration);
1681 t.slider.setAttribute('aria-valuenow', seconds);
1682 t.slider.setAttribute('aria-valuetext', time);
1683 } else {
1684 t.slider.removeAttribute('aria-label');
1685 t.slider.removeAttribute('aria-valuemin');
1686 t.slider.removeAttribute('aria-valuemax');
1687 t.slider.removeAttribute('aria-valuenow');
1688 t.slider.removeAttribute('aria-valuetext');
1689 }
1690 },
1691 restartPlayer = function restartPlayer() {
1692 if (new Date() - lastKeyPressTime >= 1000) {
1693 t.play();
1694 }
1695 },
1696 handleMouseup = function handleMouseup() {
1697 if (mouseIsDown && t.getCurrentTime() !== null && t.newTime.toFixed(4) !== t.getCurrentTime().toFixed(4)) {
1698 t.setCurrentTime(t.newTime);
1699 t.setCurrentRail();
1700 t.updateCurrent(t.newTime);
1701 }
1702 if (t.forcedHandlePause) {
1703 t.slider.focus();
1704 t.play();
1705 }
1706 t.forcedHandlePause = false;
1707 };
1708
1709 t.slider.addEventListener('focus', function () {
1710 player.options.autoRewind = false;
1711 });
1712 t.slider.addEventListener('blur', function () {
1713 player.options.autoRewind = autoRewindInitial;
1714 });
1715 t.slider.addEventListener('keydown', function (e) {
1716 if (new Date() - lastKeyPressTime >= 1000) {
1717 startedPaused = t.paused;
1718 }
1719
1720 if (t.options.keyActions.length) {
1721
1722 var keyCode = e.which || e.keyCode || 0,
1723 duration = t.getDuration(),
1724 seekForward = player.options.defaultSeekForwardInterval(media),
1725 seekBackward = player.options.defaultSeekBackwardInterval(media);
1726
1727 var seekTime = t.getCurrentTime();
1728
1729 switch (keyCode) {
1730 case 37:
1731 case 40:
1732 if (t.getDuration() !== Infinity) {
1733 seekTime -= seekBackward;
1734 }
1735 break;
1736 case 39:
1737 case 38:
1738 if (t.getDuration() !== Infinity) {
1739 seekTime += seekForward;
1740 }
1741 break;
1742 case 36:
1743 seekTime = 0;
1744 break;
1745 case 35:
1746 seekTime = duration;
1747 break;
1748 case 32:
1749 if (!_constants.IS_FIREFOX) {
1750 if (t.paused) {
1751 t.play();
1752 } else {
1753 t.pause();
1754 }
1755 }
1756 return;
1757 case 13:
1758 if (t.paused) {
1759 t.play();
1760 } else {
1761 t.pause();
1762 }
1763 return;
1764 default:
1765 return;
1766 }
1767
1768 seekTime = seekTime < 0 ? 0 : seekTime >= duration ? duration : Math.floor(seekTime);
1769 lastKeyPressTime = new Date();
1770 if (!startedPaused) {
1771 player.pause();
1772 }
1773
1774 if (seekTime < t.getDuration() && !startedPaused) {
1775 setTimeout(restartPlayer, 1100);
1776 }
1777
1778 t.setCurrentTime(seekTime);
1779
1780 e.preventDefault();
1781 e.stopPropagation();
1782 }
1783 });
1784
1785 var events = ['mousedown', 'touchstart'];
1786
1787 t.slider.addEventListener('dragstart', function () {
1788 return false;
1789 });
1790
1791 for (var i = 0, total = events.length; i < total; i++) {
1792 t.slider.addEventListener(events[i], function (e) {
1793 t.forcedHandlePause = false;
1794 if (t.getDuration() !== Infinity) {
1795 if (e.which === 1 || e.which === 0) {
1796 if (!t.paused) {
1797 t.pause();
1798 t.forcedHandlePause = true;
1799 }
1800
1801 mouseIsDown = true;
1802 handleMouseMove(e);
1803 var endEvents = ['mouseup', 'touchend'];
1804
1805 for (var j = 0, totalEvents = endEvents.length; j < totalEvents; j++) {
1806 t.container.addEventListener(endEvents[j], function (event) {
1807 var target = event.target;
1808 if (target === t.slider || target.closest('.' + t.options.classPrefix + 'time-slider')) {
1809 handleMouseMove(event);
1810 }
1811 });
1812 }
1813 t.globalBind('mouseup.dur touchend.dur', function () {
1814 handleMouseup();
1815 mouseIsDown = false;
1816 if (t.timefloat) {
1817 t.timefloat.style.display = 'none';
1818 }
1819 });
1820 }
1821 }
1822 });
1823 }
1824 t.slider.addEventListener('mouseenter', function (e) {
1825 if (e.target === t.slider && t.getDuration() !== Infinity) {
1826 t.container.addEventListener('mousemove', function (event) {
1827 var target = event.target;
1828 if (target === t.slider || target.closest('.' + t.options.classPrefix + 'time-slider')) {
1829 handleMouseMove(event);
1830 }
1831 });
1832 if (t.timefloat && !_constants.IS_IOS && !_constants.IS_ANDROID) {
1833 t.timefloat.style.display = 'block';
1834 }
1835 if (t.hovered && !_constants.IS_IOS && !_constants.IS_ANDROID && t.options.useSmoothHover) {
1836 (0, _dom.removeClass)(t.hovered, 'no-hover');
1837 }
1838 }
1839 });
1840 t.slider.addEventListener('mouseleave', function () {
1841 if (t.getDuration() !== Infinity) {
1842 if (!mouseIsDown) {
1843 if (t.timefloat) {
1844 t.timefloat.style.display = 'none';
1845 }
1846 if (t.hovered && t.options.useSmoothHover) {
1847 (0, _dom.addClass)(t.hovered, 'no-hover');
1848 }
1849 }
1850 }
1851 });
1852
1853 t.broadcastCallback = function (e) {
1854 var broadcast = controls.querySelector('.' + t.options.classPrefix + 'broadcast');
1855 if (!t.options.forceLive && t.getDuration() !== Infinity) {
1856 if (broadcast) {
1857 t.slider.style.display = '';
1858 broadcast.remove();
1859 }
1860
1861 player.setProgressRail(e);
1862 if (!t.forcedHandlePause) {
1863 player.setCurrentRail(e);
1864 }
1865 updateSlider();
1866 } else if (!broadcast || t.options.forceLive) {
1867 var label = _document2.default.createElement('span');
1868 label.className = t.options.classPrefix + 'broadcast';
1869 label.innerText = _i18n2.default.t('mejs.live-broadcast');
1870 t.slider.style.display = 'none';
1871 t.rail.appendChild(label);
1872 }
1873 };
1874
1875 media.addEventListener('progress', t.broadcastCallback);
1876 media.addEventListener('timeupdate', t.broadcastCallback);
1877
1878 t.container.addEventListener('controlsresize', function (e) {
1879 if (t.getDuration() !== Infinity) {
1880 player.setProgressRail(e);
1881 if (!t.forcedHandlePause) {
1882 player.setCurrentRail(e);
1883 }
1884 }
1885 });
1886 },
1887 cleanprogress: function cleanprogress(player, controls, layers, media) {
1888 media.removeEventListener('progress', player.broadcastCallback);
1889 media.removeEventListener('timeupdate', player.broadcastCallback);
1890 if (player.rail) {
1891 player.rail.remove();
1892 }
1893 },
1894 setProgressRail: function setProgressRail(e) {
1895 var t = this,
1896 target = e !== undefined ? e.detail.target || e.target : t.media;
1897
1898 var percent = null;
1899
1900 if (target && target.buffered && target.buffered.length > 0 && target.buffered.end && t.getDuration()) {
1901 percent = target.buffered.end(target.buffered.length - 1) / t.getDuration();
1902 } else if (target && target.bytesTotal !== undefined && target.bytesTotal > 0 && target.bufferedBytes !== undefined) {
1903 percent = target.bufferedBytes / target.bytesTotal;
1904 } else if (e && e.lengthComputable && e.total !== 0) {
1905 percent = e.loaded / e.total;
1906 }
1907
1908 if (percent !== null) {
1909 percent = Math.min(1, Math.max(0, percent));
1910
1911 if (t.loaded) {
1912 t.setTransformStyle(t.loaded, 'scaleX(' + percent + ')');
1913 }
1914 }
1915 },
1916 setCurrentRailHandle: function setCurrentRailHandle(fakeTime) {
1917 var t = this;
1918 t.setCurrentRailMain(t, fakeTime);
1919 },
1920 setCurrentRail: function setCurrentRail() {
1921 var t = this;
1922 t.setCurrentRailMain(t);
1923 },
1924 setCurrentRailMain: function setCurrentRailMain(t, fakeTime) {
1925 if (t.getCurrentTime() !== undefined && t.getDuration()) {
1926 var nTime = typeof fakeTime === 'undefined' ? t.getCurrentTime() : fakeTime;
1927
1928 if (t.total && t.handle) {
1929 var tW = parseFloat(getComputedStyle(t.total).width);
1930
1931 var newWidth = Math.round(tW * nTime / t.getDuration()),
1932 handlePos = newWidth - Math.round(t.handle.offsetWidth / 2);
1933
1934 handlePos = handlePos < 0 ? 0 : handlePos;
1935 t.setTransformStyle(t.current, 'scaleX(' + newWidth / tW + ')');
1936 t.setTransformStyle(t.handle, 'translateX(' + handlePos + 'px)');
1937
1938 if (t.options.useSmoothHover && !(0, _dom.hasClass)(t.hovered, 'no-hover')) {
1939 var pos = parseInt(t.hovered.getAttribute('pos'));
1940 pos = isNaN(pos) ? 0 : pos;
1941
1942 var hoverScaleX = pos / tW - handlePos / tW;
1943
1944 t.hovered.style.left = handlePos + 'px';
1945 t.setTransformStyle(t.hovered, 'scaleX(' + hoverScaleX + ')');
1946
1947 if (hoverScaleX >= 0) {
1948 (0, _dom.removeClass)(t.hovered, 'negative');
1949 } else {
1950 (0, _dom.addClass)(t.hovered, 'negative');
1951 }
1952 }
1953 }
1954 }
1955 }
1956 });
1957
1958 },{"16":16,"2":2,"25":25,"26":26,"30":30,"5":5}],12:[function(_dereq_,module,exports){
1959 'use strict';
1960
1961 var _document = _dereq_(2);
1962
1963 var _document2 = _interopRequireDefault(_document);
1964
1965 var _player = _dereq_(16);
1966
1967 var _player2 = _interopRequireDefault(_player);
1968
1969 var _time = _dereq_(30);
1970
1971 var _dom = _dereq_(26);
1972
1973 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1974
1975 Object.assign(_player.config, {
1976 duration: 0,
1977
1978 timeAndDurationSeparator: '<span> | </span>'
1979 });
1980
1981 Object.assign(_player2.default.prototype, {
1982 buildcurrent: function buildcurrent(player, controls, layers, media) {
1983 var t = this,
1984 time = _document2.default.createElement('div');
1985
1986 time.className = t.options.classPrefix + 'time';
1987 time.setAttribute('role', 'timer');
1988 time.setAttribute('aria-live', 'off');
1989 time.innerHTML = '<span class="' + t.options.classPrefix + 'currenttime">' + (0, _time.secondsToTimeCode)(0, player.options.alwaysShowHours, player.options.showTimecodeFrameCount, player.options.framesPerSecond, player.options.secondsDecimalLength) + '</span>';
1990
1991 t.addControlElement(time, 'current');
1992 t.updateTimeCallback = function () {
1993 if (t.controlsAreVisible) {
1994 player.updateCurrent();
1995 }
1996 };
1997 media.addEventListener('timeupdate', t.updateTimeCallback);
1998 },
1999 cleancurrent: function cleancurrent(player, controls, layers, media) {
2000 media.removeEventListener('timeupdate', player.updateTimeCallback);
2001 },
2002 buildduration: function buildduration(player, controls, layers, media) {
2003 var t = this,
2004 currTime = controls.lastChild.querySelector('.' + t.options.classPrefix + 'currenttime');
2005
2006 if (currTime) {
2007 controls.querySelector('.' + t.options.classPrefix + 'time').innerHTML += t.options.timeAndDurationSeparator + '<span class="' + t.options.classPrefix + 'duration">' + ((0, _time.secondsToTimeCode)(t.options.duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength) + '</span>');
2008 } else {
2009 if (controls.querySelector('.' + t.options.classPrefix + 'currenttime')) {
2010 (0, _dom.addClass)(controls.querySelector('.' + t.options.classPrefix + 'currenttime').parentNode, t.options.classPrefix + 'currenttime-container');
2011 }
2012
2013 var duration = _document2.default.createElement('div');
2014 duration.className = t.options.classPrefix + 'time ' + t.options.classPrefix + 'duration-container';
2015 duration.innerHTML = '<span class="' + t.options.classPrefix + 'duration">' + ((0, _time.secondsToTimeCode)(t.options.duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength) + '</span>');
2016
2017 t.addControlElement(duration, 'duration');
2018 }
2019
2020 media.addEventListener('timeupdate', t.updateTimeCallback);
2021 },
2022 cleanduration: function cleanduration(player, controls, layers, media) {
2023 media.removeEventListener('timeupdate', player.updateTimeCallback);
2024 },
2025 updateCurrent: function updateCurrent() {
2026 var t = this;
2027
2028 var currentTime = t.getCurrentTime();
2029
2030 if (isNaN(currentTime)) {
2031 currentTime = 0;
2032 }
2033
2034 var timecode = (0, _time.secondsToTimeCode)(currentTime, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength);
2035
2036 if (timecode.length > 5) {
2037 (0, _dom.addClass)(t.container, t.options.classPrefix + 'long-video');
2038 } else {
2039 (0, _dom.removeClass)(t.container, t.options.classPrefix + 'long-video');
2040 }
2041
2042 if (t.controls.querySelector('.' + t.options.classPrefix + 'currenttime')) {
2043 t.controls.querySelector('.' + t.options.classPrefix + 'currenttime').innerText = timecode;
2044 }
2045 },
2046 updateDuration: function updateDuration() {
2047 var t = this;
2048
2049 var duration = t.getDuration();
2050
2051 if (isNaN(duration) || duration === Infinity || duration < 0) {
2052 t.media.duration = t.options.duration = duration = 0;
2053 }
2054
2055 if (t.options.duration > 0) {
2056 duration = t.options.duration;
2057 }
2058
2059 var timecode = (0, _time.secondsToTimeCode)(duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength);
2060
2061 if (timecode.length > 5) {
2062 (0, _dom.addClass)(t.container, t.options.classPrefix + 'long-video');
2063 } else {
2064 (0, _dom.removeClass)(t.container, t.options.classPrefix + 'long-video');
2065 }
2066
2067 if (t.controls.querySelector('.' + t.options.classPrefix + 'duration') && duration > 0) {
2068 t.controls.querySelector('.' + t.options.classPrefix + 'duration').innerHTML = timecode;
2069 }
2070 }
2071 });
2072
2073 },{"16":16,"2":2,"26":26,"30":30}],13:[function(_dereq_,module,exports){
2074 'use strict';
2075
2076 var _document = _dereq_(2);
2077
2078 var _document2 = _interopRequireDefault(_document);
2079
2080 var _mejs = _dereq_(7);
2081
2082 var _mejs2 = _interopRequireDefault(_mejs);
2083
2084 var _i18n = _dereq_(5);
2085
2086 var _i18n2 = _interopRequireDefault(_i18n);
2087
2088 var _player = _dereq_(16);
2089
2090 var _player2 = _interopRequireDefault(_player);
2091
2092 var _time = _dereq_(30);
2093
2094 var _general = _dereq_(27);
2095
2096 var _dom = _dereq_(26);
2097
2098 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2099
2100 Object.assign(_player.config, {
2101 startLanguage: '',
2102
2103 tracksText: null,
2104
2105 chaptersText: null,
2106
2107 tracksAriaLive: false,
2108
2109 hideCaptionsButtonWhenEmpty: true,
2110
2111 toggleCaptionsButtonWhenOnlyOne: false,
2112
2113 slidesSelector: ''
2114 });
2115
2116 Object.assign(_player2.default.prototype, {
2117 hasChapters: false,
2118
2119 buildtracks: function buildtracks(player, controls, layers, media) {
2120
2121 if (!player.tracks.length && (!player.trackFiles || !player.trackFiles.length === 0)) {
2122 return;
2123 }
2124
2125 var t = this,
2126 attr = t.options.tracksAriaLive ? ' role="log" aria-live="assertive" aria-atomic="false"' : '',
2127 tracksTitle = (0, _general.isString)(t.options.tracksText) ? t.options.tracksText : _i18n2.default.t('mejs.captions-subtitles'),
2128 chaptersTitle = (0, _general.isString)(t.options.chaptersText) ? t.options.chaptersText : _i18n2.default.t('mejs.captions-chapters'),
2129 total = player.trackFiles === null ? player.tracks.length : player.trackFiles.length;
2130
2131 if (t.domNode.textTracks) {
2132 for (var i = t.domNode.textTracks.length - 1; i >= 0; i--) {
2133 t.domNode.textTracks[i].mode = 'hidden';
2134 }
2135 }
2136
2137 t.cleartracks(player);
2138
2139 player.captions = _document2.default.createElement('div');
2140 player.captions.className = t.options.classPrefix + 'captions-layer ' + t.options.classPrefix + 'layer';
2141 player.captions.innerHTML = '<div class="' + t.options.classPrefix + 'captions-position ' + t.options.classPrefix + 'captions-position-hover"' + attr + '>' + ('<span class="' + t.options.classPrefix + 'captions-text"></span>') + '</div>';
2142 player.captions.style.display = 'none';
2143 layers.insertBefore(player.captions, layers.firstChild);
2144
2145 player.captionsText = player.captions.querySelector('.' + t.options.classPrefix + 'captions-text');
2146
2147 player.captionsButton = _document2.default.createElement('div');
2148 player.captionsButton.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'captions-button';
2149 player.captionsButton.innerHTML = '<button type="button" aria-controls="' + t.id + '" title="' + tracksTitle + '" aria-label="' + tracksTitle + '" tabindex="0"></button>' + ('<div class="' + t.options.classPrefix + 'captions-selector ' + t.options.classPrefix + 'offscreen">') + ('<ul class="' + t.options.classPrefix + 'captions-selector-list">') + ('<li class="' + t.options.classPrefix + 'captions-selector-list-item">') + ('<input type="radio" class="' + t.options.classPrefix + 'captions-selector-input" ') + ('name="' + player.id + '_captions" id="' + player.id + '_captions_none" ') + 'value="none" checked disabled>' + ('<label class="' + t.options.classPrefix + 'captions-selector-label ') + (t.options.classPrefix + 'captions-selected" ') + ('for="' + player.id + '_captions_none">' + _i18n2.default.t('mejs.none') + '</label>') + '</li>' + '</ul>' + '</div>';
2150
2151 t.addControlElement(player.captionsButton, 'tracks');
2152
2153 player.captionsButton.querySelector('.' + t.options.classPrefix + 'captions-selector-input').disabled = false;
2154
2155 player.chaptersButton = _document2.default.createElement('div');
2156 player.chaptersButton.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'chapters-button';
2157 player.chaptersButton.innerHTML = '<button type="button" aria-controls="' + t.id + '" title="' + chaptersTitle + '" aria-label="' + chaptersTitle + '" tabindex="0"></button>' + ('<div class="' + t.options.classPrefix + 'chapters-selector ' + t.options.classPrefix + 'offscreen">') + ('<ul class="' + t.options.classPrefix + 'chapters-selector-list"></ul>') + '</div>';
2158
2159 var subtitleCount = 0;
2160
2161 for (var _i = 0; _i < total; _i++) {
2162 var kind = player.tracks[_i].kind,
2163 src = player.tracks[_i].src;
2164 if (src.trim()) {
2165 if (kind === 'subtitles' || kind === 'captions') {
2166 subtitleCount++;
2167 } else if (kind === 'chapters' && !controls.querySelector('.' + t.options.classPrefix + 'chapter-selector')) {
2168 player.captionsButton.parentNode.insertBefore(player.chaptersButton, player.captionsButton);
2169 }
2170 }
2171 }
2172
2173 player.trackToLoad = -1;
2174 player.selectedTrack = null;
2175 player.isLoadingTrack = false;
2176
2177 for (var _i2 = 0; _i2 < total; _i2++) {
2178 var _kind = player.tracks[_i2].kind;
2179 if (player.tracks[_i2].src.trim() && (_kind === 'subtitles' || _kind === 'captions')) {
2180 player.addTrackButton(player.tracks[_i2].trackId, player.tracks[_i2].srclang, player.tracks[_i2].label);
2181 }
2182 }
2183
2184 player.loadNextTrack();
2185
2186 var inEvents = ['mouseenter', 'focusin'],
2187 outEvents = ['mouseleave', 'focusout'];
2188
2189 if (t.options.toggleCaptionsButtonWhenOnlyOne && subtitleCount === 1) {
2190 player.captionsButton.addEventListener('click', function () {
2191 var trackId = 'none';
2192 if (player.selectedTrack === null) {
2193 trackId = player.tracks[0].trackId;
2194 }
2195 player.setTrack(trackId);
2196 });
2197 } else {
2198 var labels = player.captionsButton.querySelectorAll('.' + t.options.classPrefix + 'captions-selector-label'),
2199 captions = player.captionsButton.querySelectorAll('input[type=radio]');
2200
2201 for (var _i3 = 0, _total = inEvents.length; _i3 < _total; _i3++) {
2202 player.captionsButton.addEventListener(inEvents[_i3], function () {
2203 (0, _dom.removeClass)(this.querySelector('.' + t.options.classPrefix + 'captions-selector'), t.options.classPrefix + 'offscreen');
2204 });
2205 }
2206
2207 for (var _i4 = 0, _total2 = outEvents.length; _i4 < _total2; _i4++) {
2208 player.captionsButton.addEventListener(outEvents[_i4], function () {
2209 (0, _dom.addClass)(this.querySelector('.' + t.options.classPrefix + 'captions-selector'), t.options.classPrefix + 'offscreen');
2210 });
2211 }
2212
2213 for (var _i5 = 0, _total3 = captions.length; _i5 < _total3; _i5++) {
2214 captions[_i5].addEventListener('click', function () {
2215 player.setTrack(this.value);
2216 });
2217 }
2218
2219 for (var _i6 = 0, _total4 = labels.length; _i6 < _total4; _i6++) {
2220 labels[_i6].addEventListener('click', function () {
2221 var radio = (0, _dom.siblings)(this, function (el) {
2222 return el.tagName === 'INPUT';
2223 })[0],
2224 event = (0, _general.createEvent)('click', radio);
2225 radio.dispatchEvent(event);
2226 });
2227 }
2228
2229 player.captionsButton.addEventListener('keydown', function (e) {
2230 e.stopPropagation();
2231 });
2232 }
2233
2234 for (var _i7 = 0, _total5 = inEvents.length; _i7 < _total5; _i7++) {
2235 player.chaptersButton.addEventListener(inEvents[_i7], function () {
2236 if (this.querySelector('.' + t.options.classPrefix + 'chapters-selector-list').children.length) {
2237 (0, _dom.removeClass)(this.querySelector('.' + t.options.classPrefix + 'chapters-selector'), t.options.classPrefix + 'offscreen');
2238 }
2239 });
2240 }
2241
2242 for (var _i8 = 0, _total6 = outEvents.length; _i8 < _total6; _i8++) {
2243 player.chaptersButton.addEventListener(outEvents[_i8], function () {
2244 (0, _dom.addClass)(this.querySelector('.' + t.options.classPrefix + 'chapters-selector'), t.options.classPrefix + 'offscreen');
2245 });
2246 }
2247
2248 player.chaptersButton.addEventListener('keydown', function (e) {
2249 e.stopPropagation();
2250 });
2251
2252 if (!player.options.alwaysShowControls) {
2253 player.container.addEventListener('controlsshown', function () {
2254 (0, _dom.addClass)(player.container.querySelector('.' + t.options.classPrefix + 'captions-position'), t.options.classPrefix + 'captions-position-hover');
2255 });
2256
2257 player.container.addEventListener('controlshidden', function () {
2258 if (!media.paused) {
2259 (0, _dom.removeClass)(player.container.querySelector('.' + t.options.classPrefix + 'captions-position'), t.options.classPrefix + 'captions-position-hover');
2260 }
2261 });
2262 } else {
2263 (0, _dom.addClass)(player.container.querySelector('.' + t.options.classPrefix + 'captions-position'), t.options.classPrefix + 'captions-position-hover');
2264 }
2265
2266 media.addEventListener('timeupdate', function () {
2267 player.displayCaptions();
2268 });
2269
2270 if (player.options.slidesSelector !== '') {
2271 player.slidesContainer = _document2.default.querySelectorAll(player.options.slidesSelector);
2272
2273 media.addEventListener('timeupdate', function () {
2274 player.displaySlides();
2275 });
2276 }
2277 },
2278 cleartracks: function cleartracks(player) {
2279 if (player) {
2280 if (player.captions) {
2281 player.captions.remove();
2282 }
2283 if (player.chapters) {
2284 player.chapters.remove();
2285 }
2286 if (player.captionsText) {
2287 player.captionsText.remove();
2288 }
2289 if (player.captionsButton) {
2290 player.captionsButton.remove();
2291 }
2292 if (player.chaptersButton) {
2293 player.chaptersButton.remove();
2294 }
2295 }
2296 },
2297 rebuildtracks: function rebuildtracks() {
2298 var t = this;
2299 t.findTracks();
2300 t.buildtracks(t, t.controls, t.layers, t.media);
2301 },
2302 findTracks: function findTracks() {
2303 var t = this,
2304 tracktags = t.trackFiles === null ? t.node.querySelectorAll('track') : t.trackFiles,
2305 total = tracktags.length;
2306
2307 t.tracks = [];
2308 for (var i = 0; i < total; i++) {
2309 var track = tracktags[i],
2310 srclang = track.getAttribute('srclang').toLowerCase() || '',
2311 trackId = t.id + '_track_' + i + '_' + track.getAttribute('kind') + '_' + srclang;
2312 t.tracks.push({
2313 trackId: trackId,
2314 srclang: srclang,
2315 src: track.getAttribute('src'),
2316 kind: track.getAttribute('kind'),
2317 label: track.getAttribute('label') || '',
2318 entries: [],
2319 isLoaded: false
2320 });
2321 }
2322 },
2323 setTrack: function setTrack(trackId) {
2324
2325 var t = this,
2326 radios = t.captionsButton.querySelectorAll('input[type="radio"]'),
2327 captions = t.captionsButton.querySelectorAll('.' + t.options.classPrefix + 'captions-selected'),
2328 track = t.captionsButton.querySelector('input[value="' + trackId + '"]');
2329
2330 for (var i = 0, total = radios.length; i < total; i++) {
2331 radios[i].checked = false;
2332 }
2333
2334 for (var _i9 = 0, _total7 = captions.length; _i9 < _total7; _i9++) {
2335 (0, _dom.removeClass)(captions[_i9], t.options.classPrefix + 'captions-selected');
2336 }
2337
2338 track.checked = true;
2339 var labels = (0, _dom.siblings)(track, function (el) {
2340 return (0, _dom.hasClass)(el, t.options.classPrefix + 'captions-selector-label');
2341 });
2342 for (var _i10 = 0, _total8 = labels.length; _i10 < _total8; _i10++) {
2343 (0, _dom.addClass)(labels[_i10], t.options.classPrefix + 'captions-selected');
2344 }
2345
2346 if (trackId === 'none') {
2347 t.selectedTrack = null;
2348 (0, _dom.removeClass)(t.captionsButton, t.options.classPrefix + 'captions-enabled');
2349 } else {
2350 for (var _i11 = 0, _total9 = t.tracks.length; _i11 < _total9; _i11++) {
2351 var _track = t.tracks[_i11];
2352 if (_track.trackId === trackId) {
2353 if (t.selectedTrack === null) {
2354 (0, _dom.addClass)(t.captionsButton, t.options.classPrefix + 'captions-enabled');
2355 }
2356 t.selectedTrack = _track;
2357 t.captions.setAttribute('lang', t.selectedTrack.srclang);
2358 t.displayCaptions();
2359 break;
2360 }
2361 }
2362 }
2363
2364 var event = (0, _general.createEvent)('captionschange', t.media);
2365 event.detail.caption = t.selectedTrack;
2366 t.media.dispatchEvent(event);
2367 },
2368 loadNextTrack: function loadNextTrack() {
2369 var t = this;
2370
2371 t.trackToLoad++;
2372 if (t.trackToLoad < t.tracks.length) {
2373 t.isLoadingTrack = true;
2374 t.loadTrack(t.trackToLoad);
2375 } else {
2376 t.isLoadingTrack = false;
2377 t.checkForTracks();
2378 }
2379 },
2380 loadTrack: function loadTrack(index) {
2381 var t = this,
2382 track = t.tracks[index];
2383
2384 if (track !== undefined && (track.src !== undefined || track.src !== "")) {
2385 (0, _dom.ajax)(track.src, 'text', function (d) {
2386 track.entries = typeof d === 'string' && /<tt\s+xml/ig.exec(d) ? _mejs2.default.TrackFormatParser.dfxp.parse(d) : _mejs2.default.TrackFormatParser.webvtt.parse(d);
2387
2388 track.isLoaded = true;
2389 t.enableTrackButton(track);
2390 t.loadNextTrack();
2391
2392 if (track.kind === 'slides') {
2393 t.setupSlides(track);
2394 } else if (track.kind === 'chapters' && !t.hasChapters) {
2395 t.drawChapters(track);
2396 t.hasChapters = true;
2397 }
2398 }, function () {
2399 t.removeTrackButton(track.trackId);
2400 t.loadNextTrack();
2401 });
2402 }
2403 },
2404 enableTrackButton: function enableTrackButton(track) {
2405 var t = this,
2406 lang = track.srclang,
2407 target = _document2.default.getElementById('' + track.trackId);
2408
2409 if (!target) {
2410 return;
2411 }
2412
2413 var label = track.label;
2414
2415 if (label === '') {
2416 label = _i18n2.default.t(_mejs2.default.language.codes[lang]) || lang;
2417 }
2418 target.disabled = false;
2419 var targetSiblings = (0, _dom.siblings)(target, function (el) {
2420 return (0, _dom.hasClass)(el, t.options.classPrefix + 'captions-selector-label');
2421 });
2422 for (var i = 0, total = targetSiblings.length; i < total; i++) {
2423 targetSiblings[i].innerHTML = label;
2424 }
2425
2426 if (t.options.startLanguage === lang) {
2427 target.checked = true;
2428 var event = (0, _general.createEvent)('click', target);
2429 target.dispatchEvent(event);
2430 }
2431 },
2432 removeTrackButton: function removeTrackButton(trackId) {
2433 var element = _document2.default.getElementById('' + trackId);
2434 if (element) {
2435 var button = element.closest('li');
2436 if (button) {
2437 button.remove();
2438 }
2439 }
2440 },
2441 addTrackButton: function addTrackButton(trackId, lang, label) {
2442 var t = this;
2443 if (label === '') {
2444 label = _i18n2.default.t(_mejs2.default.language.codes[lang]) || lang;
2445 }
2446
2447 t.captionsButton.querySelector('ul').innerHTML += '<li class="' + t.options.classPrefix + 'captions-selector-list-item">' + ('<input type="radio" class="' + t.options.classPrefix + 'captions-selector-input" ') + ('name="' + t.id + '_captions" id="' + trackId + '" value="' + trackId + '" disabled>') + ('<label class="' + t.options.classPrefix + 'captions-selector-label"') + ('for="' + trackId + '">' + label + ' (loading)</label>') + '</li>';
2448 },
2449 checkForTracks: function checkForTracks() {
2450 var t = this;
2451
2452 var hasSubtitles = false;
2453
2454 if (t.options.hideCaptionsButtonWhenEmpty) {
2455 for (var i = 0, total = t.tracks.length; i < total; i++) {
2456 var kind = t.tracks[i].kind;
2457 if ((kind === 'subtitles' || kind === 'captions') && t.tracks[i].isLoaded) {
2458 hasSubtitles = true;
2459 break;
2460 }
2461 }
2462
2463 t.captionsButton.style.display = hasSubtitles ? '' : 'none';
2464 t.setControlsSize();
2465 }
2466 },
2467 displayCaptions: function displayCaptions() {
2468 if (this.tracks === undefined) {
2469 return;
2470 }
2471
2472 var t = this,
2473 track = t.selectedTrack,
2474 sanitize = function sanitize(html) {
2475 var div = _document2.default.createElement('div');
2476 div.innerHTML = html;
2477
2478 var scripts = div.getElementsByTagName('script');
2479 var i = scripts.length;
2480 while (i--) {
2481 scripts[i].remove();
2482 }
2483
2484 var allElements = div.getElementsByTagName('*');
2485 for (var _i12 = 0, n = allElements.length; _i12 < n; _i12++) {
2486 var attributesObj = allElements[_i12].attributes,
2487 attributes = Array.prototype.slice.call(attributesObj);
2488
2489 for (var j = 0, total = attributes.length; j < total; j++) {
2490 if (attributes[j].name.startsWith('on') || attributes[j].value.startsWith('javascript')) {
2491 allElements[_i12].remove();
2492 } else if (attributes[j].name === 'style') {
2493 allElements[_i12].removeAttribute(attributes[j].name);
2494 }
2495 }
2496 }
2497 return div.innerHTML;
2498 };
2499
2500 if (track !== null && track.isLoaded) {
2501 var i = t.searchTrackPosition(track.entries, t.media.currentTime);
2502 if (i > -1) {
2503 t.captionsText.innerHTML = sanitize(track.entries[i].text);
2504 t.captionsText.className = t.options.classPrefix + 'captions-text ' + (track.entries[i].identifier || '');
2505 t.captions.style.display = '';
2506 t.captions.style.height = '0px';
2507 return;
2508 }
2509 t.captions.style.display = 'none';
2510 } else {
2511 t.captions.style.display = 'none';
2512 }
2513 },
2514 setupSlides: function setupSlides(track) {
2515 var t = this;
2516 t.slides = track;
2517 t.slides.entries.imgs = [t.slides.entries.length];
2518 t.showSlide(0);
2519 },
2520 showSlide: function showSlide(index) {
2521 var _this = this;
2522
2523 var t = this;
2524
2525 if (t.tracks === undefined || t.slidesContainer === undefined) {
2526 return;
2527 }
2528
2529 var url = t.slides.entries[index].text;
2530
2531 var img = t.slides.entries[index].imgs;
2532
2533 if (img === undefined || img.fadeIn === undefined) {
2534 var image = _document2.default.createElement('img');
2535 image.src = url;
2536 image.addEventListener('load', function () {
2537 var self = _this,
2538 visible = (0, _dom.siblings)(self, function (el) {
2539 return visible(el);
2540 });
2541 self.style.display = 'none';
2542 t.slidesContainer.innerHTML += self.innerHTML;
2543 (0, _dom.fadeIn)(t.slidesContainer.querySelector(image));
2544 for (var i = 0, total = visible.length; i < total; i++) {
2545 (0, _dom.fadeOut)(visible[i], 400);
2546 }
2547 });
2548 t.slides.entries[index].imgs = img = image;
2549 } else if (!(0, _dom.visible)(img)) {
2550 var _visible = (0, _dom.siblings)(self, function (el) {
2551 return _visible(el);
2552 });
2553 (0, _dom.fadeIn)(t.slidesContainer.querySelector(img));
2554 for (var i = 0, total = _visible.length; i < total; i++) {
2555 (0, _dom.fadeOut)(_visible[i]);
2556 }
2557 }
2558 },
2559 displaySlides: function displaySlides() {
2560 var t = this;
2561
2562 if (this.slides === undefined) {
2563 return;
2564 }
2565
2566 var slides = t.slides,
2567 i = t.searchTrackPosition(slides.entries, t.media.currentTime);
2568
2569 if (i > -1) {
2570 t.showSlide(i);
2571 }
2572 },
2573 drawChapters: function drawChapters(chapters) {
2574 var t = this,
2575 total = chapters.entries.length;
2576
2577 if (!total) {
2578 return;
2579 }
2580
2581 t.chaptersButton.querySelector('ul').innerHTML = '';
2582
2583 for (var i = 0; i < total; i++) {
2584 t.chaptersButton.querySelector('ul').innerHTML += '<li class="' + t.options.classPrefix + 'chapters-selector-list-item" ' + 'role="menuitemcheckbox" aria-live="polite" aria-disabled="false" aria-checked="false">' + ('<input type="radio" class="' + t.options.classPrefix + 'captions-selector-input" ') + ('name="' + t.id + '_chapters" id="' + t.id + '_chapters_' + i + '" value="' + chapters.entries[i].start + '" disabled>') + ('<label class="' + t.options.classPrefix + 'chapters-selector-label"') + ('for="' + t.id + '_chapters_' + i + '">' + chapters.entries[i].text + '</label>') + '</li>';
2585 }
2586
2587 var radios = t.chaptersButton.querySelectorAll('input[type="radio"]'),
2588 labels = t.chaptersButton.querySelectorAll('.' + t.options.classPrefix + 'chapters-selector-label');
2589
2590 for (var _i13 = 0, _total10 = radios.length; _i13 < _total10; _i13++) {
2591 radios[_i13].disabled = false;
2592 radios[_i13].checked = false;
2593 radios[_i13].addEventListener('click', function () {
2594 var self = this,
2595 listItems = t.chaptersButton.querySelectorAll('li'),
2596 label = (0, _dom.siblings)(self, function (el) {
2597 return (0, _dom.hasClass)(el, t.options.classPrefix + 'chapters-selector-label');
2598 })[0];
2599
2600 self.checked = true;
2601 self.parentNode.setAttribute('aria-checked', true);
2602 (0, _dom.addClass)(label, t.options.classPrefix + 'chapters-selected');
2603 (0, _dom.removeClass)(t.chaptersButton.querySelector('.' + t.options.classPrefix + 'chapters-selected'), t.options.classPrefix + 'chapters-selected');
2604
2605 for (var _i14 = 0, _total11 = listItems.length; _i14 < _total11; _i14++) {
2606 listItems[_i14].setAttribute('aria-checked', false);
2607 }
2608
2609 t.media.setCurrentTime(parseFloat(self.value));
2610 if (t.media.paused) {
2611 t.media.play();
2612 }
2613 });
2614 }
2615
2616 for (var _i15 = 0, _total12 = labels.length; _i15 < _total12; _i15++) {
2617 labels[_i15].addEventListener('click', function () {
2618 var radio = (0, _dom.siblings)(this, function (el) {
2619 return el.tagName === 'INPUT';
2620 })[0],
2621 event = (0, _general.createEvent)('click', radio);
2622 radio.dispatchEvent(event);
2623 });
2624 }
2625 },
2626 searchTrackPosition: function searchTrackPosition(tracks, currentTime) {
2627 var lo = 0,
2628 hi = tracks.length - 1,
2629 mid = void 0,
2630 start = void 0,
2631 stop = void 0;
2632
2633 while (lo <= hi) {
2634 mid = lo + hi >> 1;
2635 start = tracks[mid].start;
2636 stop = tracks[mid].stop;
2637
2638 if (currentTime >= start && currentTime < stop) {
2639 return mid;
2640 } else if (start < currentTime) {
2641 lo = mid + 1;
2642 } else if (start > currentTime) {
2643 hi = mid - 1;
2644 }
2645 }
2646
2647 return -1;
2648 }
2649 });
2650
2651 _mejs2.default.language = {
2652 codes: {
2653 af: 'mejs.afrikaans',
2654 sq: 'mejs.albanian',
2655 ar: 'mejs.arabic',
2656 be: 'mejs.belarusian',
2657 bg: 'mejs.bulgarian',
2658 ca: 'mejs.catalan',
2659 zh: 'mejs.chinese',
2660 'zh-cn': 'mejs.chinese-simplified',
2661 'zh-tw': 'mejs.chines-traditional',
2662 hr: 'mejs.croatian',
2663 cs: 'mejs.czech',
2664 da: 'mejs.danish',
2665 nl: 'mejs.dutch',
2666 en: 'mejs.english',
2667 et: 'mejs.estonian',
2668 fl: 'mejs.filipino',
2669 fi: 'mejs.finnish',
2670 fr: 'mejs.french',
2671 gl: 'mejs.galician',
2672 de: 'mejs.german',
2673 el: 'mejs.greek',
2674 ht: 'mejs.haitian-creole',
2675 iw: 'mejs.hebrew',
2676 hi: 'mejs.hindi',
2677 hu: 'mejs.hungarian',
2678 is: 'mejs.icelandic',
2679 id: 'mejs.indonesian',
2680 ga: 'mejs.irish',
2681 it: 'mejs.italian',
2682 ja: 'mejs.japanese',
2683 ko: 'mejs.korean',
2684 lv: 'mejs.latvian',
2685 lt: 'mejs.lithuanian',
2686 mk: 'mejs.macedonian',
2687 ms: 'mejs.malay',
2688 mt: 'mejs.maltese',
2689 no: 'mejs.norwegian',
2690 fa: 'mejs.persian',
2691 pl: 'mejs.polish',
2692 pt: 'mejs.portuguese',
2693 ro: 'mejs.romanian',
2694 ru: 'mejs.russian',
2695 sr: 'mejs.serbian',
2696 sk: 'mejs.slovak',
2697 sl: 'mejs.slovenian',
2698 es: 'mejs.spanish',
2699 sw: 'mejs.swahili',
2700 sv: 'mejs.swedish',
2701 tl: 'mejs.tagalog',
2702 th: 'mejs.thai',
2703 tr: 'mejs.turkish',
2704 uk: 'mejs.ukrainian',
2705 vi: 'mejs.vietnamese',
2706 cy: 'mejs.welsh',
2707 yi: 'mejs.yiddish'
2708 }
2709 };
2710
2711 _mejs2.default.TrackFormatParser = {
2712 webvtt: {
2713 pattern: /^((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{1,3})?) --\> ((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/,
2714
2715 parse: function parse(trackText) {
2716 var lines = trackText.split(/\r?\n/),
2717 entries = [];
2718
2719 var timecode = void 0,
2720 text = void 0,
2721 identifier = void 0;
2722
2723 for (var i = 0, total = lines.length; i < total; i++) {
2724 timecode = this.pattern.exec(lines[i]);
2725
2726 if (timecode && i < lines.length) {
2727 if (i - 1 >= 0 && lines[i - 1] !== '') {
2728 identifier = lines[i - 1];
2729 }
2730 i++;
2731
2732 text = lines[i];
2733 i++;
2734 while (lines[i] !== '' && i < lines.length) {
2735 text = text + '\n' + lines[i];
2736 i++;
2737 }
2738 text = text.trim().replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>");
2739 entries.push({
2740 identifier: identifier,
2741 start: (0, _time.convertSMPTEtoSeconds)(timecode[1]) === 0 ? 0.200 : (0, _time.convertSMPTEtoSeconds)(timecode[1]),
2742 stop: (0, _time.convertSMPTEtoSeconds)(timecode[3]),
2743 text: text,
2744 settings: timecode[5]
2745 });
2746 }
2747 identifier = '';
2748 }
2749 return entries;
2750 }
2751 },
2752
2753 dfxp: {
2754 parse: function parse(trackText) {
2755 trackText = $(trackText).filter('tt');
2756 var container = trackText.firstChild,
2757 lines = container.querySelectorAll('p'),
2758 styleNode = trackText.getElementById('' + container.attr('style')),
2759 entries = [];
2760
2761 var styles = void 0;
2762
2763 if (styleNode.length) {
2764 styleNode.removeAttribute('id');
2765 var attributes = styleNode.attributes;
2766 if (attributes.length) {
2767 styles = {};
2768 for (var i = 0, total = attributes.length; i < total; i++) {
2769 styles[attributes[i].name.split(":")[1]] = attributes[i].value;
2770 }
2771 }
2772 }
2773
2774 for (var _i16 = 0, _total13 = lines.length; _i16 < _total13; _i16++) {
2775 var style = void 0,
2776 _temp = {
2777 start: null,
2778 stop: null,
2779 style: null,
2780 text: null
2781 };
2782
2783 if (lines.eq(_i16).attr('begin')) {
2784 _temp.start = (0, _time.convertSMPTEtoSeconds)(lines.eq(_i16).attr('begin'));
2785 }
2786 if (!_temp.start && lines.eq(_i16 - 1).attr('end')) {
2787 _temp.start = (0, _time.convertSMPTEtoSeconds)(lines.eq(_i16 - 1).attr('end'));
2788 }
2789 if (lines.eq(_i16).attr('end')) {
2790 _temp.stop = (0, _time.convertSMPTEtoSeconds)(lines.eq(_i16).attr('end'));
2791 }
2792 if (!_temp.stop && lines.eq(_i16 + 1).attr('begin')) {
2793 _temp.stop = (0, _time.convertSMPTEtoSeconds)(lines.eq(_i16 + 1).attr('begin'));
2794 }
2795
2796 if (styles) {
2797 style = '';
2798 for (var _style in styles) {
2799 style += _style + ':' + styles[_style] + ';';
2800 }
2801 }
2802 if (style) {
2803 _temp.style = style;
2804 }
2805 if (_temp.start === 0) {
2806 _temp.start = 0.200;
2807 }
2808 _temp.text = lines.eq(_i16).innerHTML.trim().replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>");
2809 entries.push(_temp);
2810 }
2811 return entries;
2812 }
2813 }
2814 };
2815
2816 },{"16":16,"2":2,"26":26,"27":27,"30":30,"5":5,"7":7}],14:[function(_dereq_,module,exports){
2817 'use strict';
2818
2819 var _document = _dereq_(2);
2820
2821 var _document2 = _interopRequireDefault(_document);
2822
2823 var _player = _dereq_(16);
2824
2825 var _player2 = _interopRequireDefault(_player);
2826
2827 var _i18n = _dereq_(5);
2828
2829 var _i18n2 = _interopRequireDefault(_i18n);
2830
2831 var _constants = _dereq_(25);
2832
2833 var _general = _dereq_(27);
2834
2835 var _dom = _dereq_(26);
2836
2837 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2838
2839 Object.assign(_player.config, {
2840 muteText: null,
2841
2842 unmuteText: null,
2843
2844 allyVolumeControlText: null,
2845
2846 hideVolumeOnTouchDevices: true,
2847
2848 audioVolume: 'horizontal',
2849
2850 videoVolume: 'vertical',
2851
2852 startVolume: 0.8
2853 });
2854
2855 Object.assign(_player2.default.prototype, {
2856 buildvolume: function buildvolume(player, controls, layers, media) {
2857 if ((_constants.IS_ANDROID || _constants.IS_IOS) && this.options.hideVolumeOnTouchDevices) {
2858 return;
2859 }
2860
2861 var t = this,
2862 mode = t.isVideo ? t.options.videoVolume : t.options.audioVolume,
2863 muteText = (0, _general.isString)(t.options.muteText) ? t.options.muteText : _i18n2.default.t('mejs.mute'),
2864 unmuteText = (0, _general.isString)(t.options.unmuteText) ? t.options.unmuteText : _i18n2.default.t('mejs.unmute'),
2865 volumeControlText = (0, _general.isString)(t.options.allyVolumeControlText) ? t.options.allyVolumeControlText : _i18n2.default.t('mejs.volume-help-text'),
2866 mute = _document2.default.createElement('div');
2867
2868 mute.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'volume-button ' + t.options.classPrefix + 'mute';
2869 mute.innerHTML = mode === 'horizontal' ? '<button type="button" aria-controls="' + t.id + '" title="' + muteText + '" aria-label="' + muteText + '" tabindex="0"></button>' : '<button type="button" aria-controls="' + t.id + '" title="' + muteText + '" aria-label="' + muteText + '" tabindex="0"></button>' + ('<a href="javascript:void(0);" class="' + t.options.classPrefix + 'volume-slider" ') + ('aria-label="' + _i18n2.default.t('mejs.volume-slider') + '" aria-valuemin="0" aria-valuemax="100" role="slider" ') + 'aria-orientation="vertical">' + ('<span class="' + t.options.classPrefix + 'offscreen">' + volumeControlText + '</span>') + ('<div class="' + t.options.classPrefix + 'volume-total">') + ('<div class="' + t.options.classPrefix + 'volume-current"></div>') + ('<div class="' + t.options.classPrefix + 'volume-handle"></div>') + '</div>' + '</a>';
2870
2871 t.addControlElement(mute, 'volume');
2872
2873 if (mode === 'horizontal') {
2874 var anchor = _document2.default.createElement('a');
2875 anchor.className = t.options.classPrefix + 'horizontal-volume-slider';
2876 anchor.href = 'javascript:void(0);';
2877 anchor.setAttribute('aria-label', _i18n2.default.t('mejs.volume-slider'));
2878 anchor.setAttribute('aria-valuemin', 0);
2879 anchor.setAttribute('aria-valuemax', 100);
2880 anchor.setAttribute('role', 'slider');
2881 anchor.innerHTML += '<span class="' + t.options.classPrefix + 'offscreen">' + volumeControlText + '</span>' + ('<div class="' + t.options.classPrefix + 'horizontal-volume-total">') + ('<div class="' + t.options.classPrefix + 'horizontal-volume-current"></div>') + ('<div class="' + t.options.classPrefix + 'horizontal-volume-handle"></div>') + '</div>';
2882 mute.parentNode.insertBefore(anchor, mute.nextSibling);
2883 }
2884
2885 var mouseIsDown = false,
2886 mouseIsOver = false,
2887 modified = false,
2888 updateVolumeSlider = function updateVolumeSlider() {
2889 var volume = Math.floor(media.volume * 100);
2890 volumeSlider.setAttribute('aria-valuenow', volume);
2891 volumeSlider.setAttribute('aria-valuetext', volume + '%');
2892 };
2893
2894 var volumeSlider = mode === 'vertical' ? t.container.querySelector('.' + t.options.classPrefix + 'volume-slider') : t.container.querySelector('.' + t.options.classPrefix + 'horizontal-volume-slider'),
2895 volumeTotal = mode === 'vertical' ? t.container.querySelector('.' + t.options.classPrefix + 'volume-total') : t.container.querySelector('.' + t.options.classPrefix + 'horizontal-volume-total'),
2896 volumeCurrent = mode === 'vertical' ? t.container.querySelector('.' + t.options.classPrefix + 'volume-current') : t.container.querySelector('.' + t.options.classPrefix + 'horizontal-volume-current'),
2897 volumeHandle = mode === 'vertical' ? t.container.querySelector('.' + t.options.classPrefix + 'volume-handle') : t.container.querySelector('.' + t.options.classPrefix + 'horizontal-volume-handle'),
2898 positionVolumeHandle = function positionVolumeHandle(volume) {
2899
2900 if (volume === null || isNaN(volume) || volume === undefined) {
2901 return;
2902 }
2903
2904 volume = Math.max(0, volume);
2905 volume = Math.min(volume, 1);
2906
2907 if (volume === 0) {
2908 (0, _dom.removeClass)(mute, t.options.classPrefix + 'mute');
2909 (0, _dom.addClass)(mute, t.options.classPrefix + 'unmute');
2910 var button = mute.firstElementChild;
2911 button.setAttribute('title', unmuteText);
2912 button.setAttribute('aria-label', unmuteText);
2913 } else {
2914 (0, _dom.removeClass)(mute, t.options.classPrefix + 'unmute');
2915 (0, _dom.addClass)(mute, t.options.classPrefix + 'mute');
2916 var _button = mute.firstElementChild;
2917 _button.setAttribute('title', muteText);
2918 _button.setAttribute('aria-label', muteText);
2919 }
2920
2921 var volumePercentage = volume * 100 + '%',
2922 volumeStyles = getComputedStyle(volumeHandle);
2923
2924 if (mode === 'vertical') {
2925 volumeCurrent.style.bottom = 0;
2926 volumeCurrent.style.height = volumePercentage;
2927 volumeHandle.style.bottom = volumePercentage;
2928 volumeHandle.style.marginBottom = -parseFloat(volumeStyles.height) / 2 + 'px';
2929 } else {
2930 volumeCurrent.style.left = 0;
2931 volumeCurrent.style.width = volumePercentage;
2932 volumeHandle.style.left = volumePercentage;
2933 volumeHandle.style.marginLeft = -parseFloat(volumeStyles.width) / 2 + 'px';
2934 }
2935 },
2936 handleVolumeMove = function handleVolumeMove(e) {
2937 var totalOffset = (0, _dom.offset)(volumeTotal),
2938 volumeStyles = getComputedStyle(volumeTotal);
2939
2940 modified = true;
2941
2942 var volume = null;
2943
2944 if (mode === 'vertical') {
2945 var railHeight = parseFloat(volumeStyles.height),
2946 newY = e.pageY - totalOffset.top;
2947
2948 volume = (railHeight - newY) / railHeight;
2949
2950 if (totalOffset.top === 0 || totalOffset.left === 0) {
2951 return;
2952 }
2953 } else {
2954 var railWidth = parseFloat(volumeStyles.width),
2955 newX = e.pageX - totalOffset.left;
2956
2957 volume = newX / railWidth;
2958 }
2959
2960 volume = Math.max(0, volume);
2961 volume = Math.min(volume, 1);
2962
2963 positionVolumeHandle(volume);
2964
2965 t.setMuted(volume === 0);
2966 t.setVolume(volume);
2967
2968 e.preventDefault();
2969 e.stopPropagation();
2970 },
2971 toggleMute = function toggleMute() {
2972 if (t.muted) {
2973 positionVolumeHandle(0);
2974 (0, _dom.removeClass)(mute, t.options.classPrefix + 'mute');
2975 (0, _dom.addClass)(mute, t.options.classPrefix + 'unmute');
2976 } else {
2977 positionVolumeHandle(media.volume);
2978 (0, _dom.removeClass)(mute, t.options.classPrefix + 'unmute');
2979 (0, _dom.addClass)(mute, t.options.classPrefix + 'mute');
2980 }
2981 };
2982
2983 mute.addEventListener('mouseenter', function (e) {
2984 if (e.target === mute) {
2985 volumeSlider.style.display = 'block';
2986 mouseIsOver = true;
2987 e.preventDefault();
2988 e.stopPropagation();
2989 }
2990 });
2991 mute.addEventListener('focusin', function () {
2992 volumeSlider.style.display = 'block';
2993 mouseIsOver = true;
2994 });
2995
2996 mute.addEventListener('focusout', function (e) {
2997 if ((!e.relatedTarget || e.relatedTarget && !e.relatedTarget.matches('.' + t.options.classPrefix + 'volume-slider')) && mode === 'vertical') {
2998 volumeSlider.style.display = 'none';
2999 }
3000 });
3001 mute.addEventListener('mouseleave', function () {
3002 mouseIsOver = false;
3003 if (!mouseIsDown && mode === 'vertical') {
3004 volumeSlider.style.display = 'none';
3005 }
3006 });
3007 mute.addEventListener('focusout', function () {
3008 mouseIsOver = false;
3009 });
3010 mute.addEventListener('keydown', function (e) {
3011 if (t.options.keyActions.length) {
3012 var keyCode = e.which || e.keyCode || 0,
3013 volume = media.volume;
3014
3015 switch (keyCode) {
3016 case 38:
3017 volume = Math.min(volume + 0.1, 1);
3018 break;
3019 case 40:
3020 volume = Math.max(0, volume - 0.1);
3021 break;
3022 default:
3023 return true;
3024 }
3025
3026 mouseIsDown = false;
3027 positionVolumeHandle(volume);
3028 media.setVolume(volume);
3029
3030 e.preventDefault();
3031 e.stopPropagation();
3032 }
3033 });
3034 mute.querySelector('button').addEventListener('click', function () {
3035 media.setMuted(!media.muted);
3036 var event = (0, _general.createEvent)('volumechange', media);
3037 media.dispatchEvent(event);
3038 });
3039
3040 volumeSlider.addEventListener('dragstart', function () {
3041 return false;
3042 });
3043
3044 volumeSlider.addEventListener('mouseover', function () {
3045 mouseIsOver = true;
3046 });
3047 volumeSlider.addEventListener('focusin', function () {
3048 volumeSlider.style.display = 'block';
3049 mouseIsOver = true;
3050 });
3051 volumeSlider.addEventListener('focusout', function () {
3052 mouseIsOver = false;
3053 if (!mouseIsDown && mode === 'vertical') {
3054 volumeSlider.style.display = 'none';
3055 }
3056 });
3057 volumeSlider.addEventListener('mousedown', function (e) {
3058 handleVolumeMove(e);
3059 t.globalBind('mousemove.vol', function (event) {
3060 var target = event.target;
3061 if (mouseIsDown && (target === volumeSlider || target.closest(mode === 'vertical' ? '.' + t.options.classPrefix + 'volume-slider' : '.' + t.options.classPrefix + 'horizontal-volume-slider'))) {
3062 handleVolumeMove(event);
3063 }
3064 });
3065 t.globalBind('mouseup.vol', function () {
3066 mouseIsDown = false;
3067 if (!mouseIsOver && mode === 'vertical') {
3068 volumeSlider.style.display = 'none';
3069 }
3070 });
3071 mouseIsDown = true;
3072 e.preventDefault();
3073 e.stopPropagation();
3074 });
3075
3076 media.addEventListener('volumechange', function (e) {
3077 if (!mouseIsDown) {
3078 toggleMute();
3079 }
3080 updateVolumeSlider(e);
3081 });
3082
3083 var rendered = false;
3084 media.addEventListener('rendererready', function () {
3085 if (!modified) {
3086 setTimeout(function () {
3087 rendered = true;
3088 if (player.options.startVolume === 0 || media.originalNode.muted) {
3089 media.setMuted(true);
3090 player.options.startVolume = 0;
3091 }
3092 media.setVolume(player.options.startVolume);
3093 t.setControlsSize();
3094 }, 250);
3095 }
3096 });
3097
3098 media.addEventListener('loadedmetadata', function () {
3099 setTimeout(function () {
3100 if (!modified && !rendered) {
3101 if (player.options.startVolume === 0 || media.originalNode.muted) {
3102 media.setMuted(true);
3103 player.options.startVolume = 0;
3104 }
3105 media.setVolume(player.options.startVolume);
3106 t.setControlsSize();
3107 }
3108 rendered = false;
3109 }, 250);
3110 });
3111
3112 if (player.options.startVolume === 0 || media.originalNode.muted) {
3113 media.setMuted(true);
3114 player.options.startVolume = 0;
3115 toggleMute();
3116 }
3117
3118 t.container.addEventListener('controlsresize', function () {
3119 toggleMute();
3120 });
3121 }
3122 });
3123
3124 },{"16":16,"2":2,"25":25,"26":26,"27":27,"5":5}],15:[function(_dereq_,module,exports){
3125 'use strict';
3126
3127 Object.defineProperty(exports, "__esModule", {
3128 value: true
3129 });
3130 var EN = exports.EN = {
3131 'mejs.plural-form': 1,
3132
3133 'mejs.download-file': 'Download File',
3134
3135 'mejs.install-flash': 'You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https://get.adobe.com/flashplayer/',
3136
3137 'mejs.fullscreen': 'Fullscreen',
3138
3139 'mejs.play': 'Play',
3140 'mejs.pause': 'Pause',
3141
3142 'mejs.time-slider': 'Time Slider',
3143 'mejs.time-help-text': 'Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.',
3144 'mejs.live-broadcast': 'Live Broadcast',
3145
3146 'mejs.volume-help-text': 'Use Up/Down Arrow keys to increase or decrease volume.',
3147 'mejs.unmute': 'Unmute',
3148 'mejs.mute': 'Mute',
3149 'mejs.volume-slider': 'Volume Slider',
3150
3151 'mejs.video-player': 'Video Player',
3152 'mejs.audio-player': 'Audio Player',
3153
3154 'mejs.captions-subtitles': 'Captions/Subtitles',
3155 'mejs.captions-chapters': 'Chapters',
3156 'mejs.none': 'None',
3157 'mejs.afrikaans': 'Afrikaans',
3158 'mejs.albanian': 'Albanian',
3159 'mejs.arabic': 'Arabic',
3160 'mejs.belarusian': 'Belarusian',
3161 'mejs.bulgarian': 'Bulgarian',
3162 'mejs.catalan': 'Catalan',
3163 'mejs.chinese': 'Chinese',
3164 'mejs.chinese-simplified': 'Chinese (Simplified)',
3165 'mejs.chinese-traditional': 'Chinese (Traditional)',
3166 'mejs.croatian': 'Croatian',
3167 'mejs.czech': 'Czech',
3168 'mejs.danish': 'Danish',
3169 'mejs.dutch': 'Dutch',
3170 'mejs.english': 'English',
3171 'mejs.estonian': 'Estonian',
3172 'mejs.filipino': 'Filipino',
3173 'mejs.finnish': 'Finnish',
3174 'mejs.french': 'French',
3175 'mejs.galician': 'Galician',
3176 'mejs.german': 'German',
3177 'mejs.greek': 'Greek',
3178 'mejs.haitian-creole': 'Haitian Creole',
3179 'mejs.hebrew': 'Hebrew',
3180 'mejs.hindi': 'Hindi',
3181 'mejs.hungarian': 'Hungarian',
3182 'mejs.icelandic': 'Icelandic',
3183 'mejs.indonesian': 'Indonesian',
3184 'mejs.irish': 'Irish',
3185 'mejs.italian': 'Italian',
3186 'mejs.japanese': 'Japanese',
3187 'mejs.korean': 'Korean',
3188 'mejs.latvian': 'Latvian',
3189 'mejs.lithuanian': 'Lithuanian',
3190 'mejs.macedonian': 'Macedonian',
3191 'mejs.malay': 'Malay',
3192 'mejs.maltese': 'Maltese',
3193 'mejs.norwegian': 'Norwegian',
3194 'mejs.persian': 'Persian',
3195 'mejs.polish': 'Polish',
3196 'mejs.portuguese': 'Portuguese',
3197 'mejs.romanian': 'Romanian',
3198 'mejs.russian': 'Russian',
3199 'mejs.serbian': 'Serbian',
3200 'mejs.slovak': 'Slovak',
3201 'mejs.slovenian': 'Slovenian',
3202 'mejs.spanish': 'Spanish',
3203 'mejs.swahili': 'Swahili',
3204 'mejs.swedish': 'Swedish',
3205 'mejs.tagalog': 'Tagalog',
3206 'mejs.thai': 'Thai',
3207 'mejs.turkish': 'Turkish',
3208 'mejs.ukrainian': 'Ukrainian',
3209 'mejs.vietnamese': 'Vietnamese',
3210 'mejs.welsh': 'Welsh',
3211 'mejs.yiddish': 'Yiddish'
3212 };
3213
3214 },{}],16:[function(_dereq_,module,exports){
3215 'use strict';
3216
3217 Object.defineProperty(exports, "__esModule", {
3218 value: true
3219 });
3220 exports.config = undefined;
3221
3222 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
3223
3224 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
3225
3226 var _window = _dereq_(3);
3227
3228 var _window2 = _interopRequireDefault(_window);
3229
3230 var _document = _dereq_(2);
3231
3232 var _document2 = _interopRequireDefault(_document);
3233
3234 var _mejs = _dereq_(7);
3235
3236 var _mejs2 = _interopRequireDefault(_mejs);
3237
3238 var _mediaelement = _dereq_(6);
3239
3240 var _mediaelement2 = _interopRequireDefault(_mediaelement);
3241
3242 var _default = _dereq_(17);
3243
3244 var _default2 = _interopRequireDefault(_default);
3245
3246 var _i18n = _dereq_(5);
3247
3248 var _i18n2 = _interopRequireDefault(_i18n);
3249
3250 var _constants = _dereq_(25);
3251
3252 var _general = _dereq_(27);
3253
3254 var _time = _dereq_(30);
3255
3256 var _media = _dereq_(28);
3257
3258 var _dom = _dereq_(26);
3259
3260 var dom = _interopRequireWildcard(_dom);
3261
3262 function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
3263
3264 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3265
3266 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3267
3268 _mejs2.default.mepIndex = 0;
3269
3270 _mejs2.default.players = {};
3271
3272 var config = exports.config = {
3273 poster: '',
3274
3275 showPosterWhenEnded: false,
3276
3277 showPosterWhenPaused: false,
3278
3279 defaultVideoWidth: 480,
3280
3281 defaultVideoHeight: 270,
3282
3283 videoWidth: -1,
3284
3285 videoHeight: -1,
3286
3287 defaultAudioWidth: 400,
3288
3289 defaultAudioHeight: 40,
3290
3291 defaultSeekBackwardInterval: function defaultSeekBackwardInterval(media) {
3292 return media.getDuration() * 0.05;
3293 },
3294
3295 defaultSeekForwardInterval: function defaultSeekForwardInterval(media) {
3296 return media.getDuration() * 0.05;
3297 },
3298
3299 setDimensions: true,
3300
3301 audioWidth: -1,
3302
3303 audioHeight: -1,
3304
3305 loop: false,
3306
3307 autoRewind: true,
3308
3309 enableAutosize: true,
3310
3311 timeFormat: '',
3312
3313 alwaysShowHours: false,
3314
3315 showTimecodeFrameCount: false,
3316
3317 framesPerSecond: 25,
3318
3319 alwaysShowControls: false,
3320
3321 hideVideoControlsOnLoad: false,
3322
3323 hideVideoControlsOnPause: false,
3324
3325 clickToPlayPause: true,
3326
3327 controlsTimeoutDefault: 1500,
3328
3329 controlsTimeoutMouseEnter: 2500,
3330
3331 controlsTimeoutMouseLeave: 1000,
3332
3333 iPadUseNativeControls: false,
3334
3335 iPhoneUseNativeControls: false,
3336
3337 AndroidUseNativeControls: false,
3338
3339 features: ['playpause', 'current', 'progress', 'duration', 'tracks', 'volume', 'fullscreen'],
3340
3341 useDefaultControls: false,
3342
3343 isVideo: true,
3344
3345 stretching: 'auto',
3346
3347 classPrefix: 'mejs__',
3348
3349 enableKeyboard: true,
3350
3351 pauseOtherPlayers: true,
3352
3353 secondsDecimalLength: 0,
3354
3355 customError: null,
3356
3357 keyActions: [{
3358 keys: [32, 179],
3359 action: function action(player) {
3360
3361 if (!_constants.IS_FIREFOX) {
3362 if (player.paused || player.ended) {
3363 player.play();
3364 } else {
3365 player.pause();
3366 }
3367 }
3368 }
3369 }, {
3370 keys: [38],
3371 action: function action(player) {
3372
3373 if (player.container.querySelector('.' + config.classPrefix + 'volume-button>button').matches(':focus') || player.container.querySelector('.' + config.classPrefix + 'volume-slider').matches(':focus')) {
3374 player.container.querySelector('.' + config.classPrefix + 'volume-slider').style.display = '';
3375 }
3376 if (player.isVideo) {
3377 player.showControls();
3378 player.startControlsTimer();
3379 }
3380
3381 var newVolume = Math.min(player.volume + 0.1, 1);
3382 player.setVolume(newVolume);
3383 if (newVolume > 0) {
3384 player.setMuted(false);
3385 }
3386 }
3387 }, {
3388 keys: [40],
3389 action: function action(player) {
3390
3391 if (player.container.querySelector('.' + config.classPrefix + 'volume-button>button').matches(':focus') || player.container.querySelector('.' + config.classPrefix + 'volume-slider').matches(':focus')) {
3392 player.container.querySelector('.' + config.classPrefix + 'volume-slider').style.display = '';
3393 }
3394
3395 if (player.isVideo) {
3396 player.showControls();
3397 player.startControlsTimer();
3398 }
3399
3400 var newVolume = Math.max(player.volume - 0.1, 0);
3401 player.setVolume(newVolume);
3402
3403 if (newVolume <= 0.1) {
3404 player.setMuted(true);
3405 }
3406 }
3407 }, {
3408 keys: [37, 227],
3409 action: function action(player) {
3410 if (!isNaN(player.duration) && player.duration > 0) {
3411 if (player.isVideo) {
3412 player.showControls();
3413 player.startControlsTimer();
3414 }
3415
3416 var newTime = Math.max(player.currentTime - player.options.defaultSeekBackwardInterval(player), 0);
3417 player.setCurrentTime(newTime);
3418 }
3419 }
3420 }, {
3421 keys: [39, 228],
3422 action: function action(player) {
3423
3424 if (!isNaN(player.duration) && player.duration > 0) {
3425 if (player.isVideo) {
3426 player.showControls();
3427 player.startControlsTimer();
3428 }
3429
3430 var newTime = Math.min(player.currentTime + player.options.defaultSeekForwardInterval(player), player.duration);
3431 player.setCurrentTime(newTime);
3432 }
3433 }
3434 }, {
3435 keys: [70],
3436 action: function action(player, media, key, event) {
3437 if (!event.ctrlKey) {
3438 if (typeof player.enterFullScreen !== 'undefined') {
3439 if (player.isFullScreen) {
3440 player.exitFullScreen();
3441 } else {
3442 player.enterFullScreen();
3443 }
3444 }
3445 }
3446 }
3447 }, {
3448 keys: [77],
3449 action: function action(player) {
3450
3451 player.container.querySelector('.' + config.classPrefix + 'volume-slider').style.display = '';
3452 if (player.isVideo) {
3453 player.showControls();
3454 player.startControlsTimer();
3455 }
3456 if (player.media.muted) {
3457 player.setMuted(false);
3458 } else {
3459 player.setMuted(true);
3460 }
3461 }
3462 }]
3463 };
3464
3465 _mejs2.default.MepDefaults = config;
3466
3467 var MediaElementPlayer = function () {
3468 function MediaElementPlayer(node, o) {
3469 _classCallCheck(this, MediaElementPlayer);
3470
3471 var t = this,
3472 element = typeof node === 'string' ? _document2.default.getElementById(node) : node;
3473
3474 if (!(t instanceof MediaElementPlayer)) {
3475 return new MediaElementPlayer(element, o);
3476 }
3477
3478 t.node = t.media = element;
3479
3480 if (!t.node) {
3481 return;
3482 }
3483
3484 if (t.media.player) {
3485 return t.media.player;
3486 }
3487
3488 t.hasFocus = false;
3489
3490 t.controlsAreVisible = true;
3491
3492 t.controlsEnabled = true;
3493
3494 t.controlsTimer = null;
3495
3496 t.currentMediaTime = 0;
3497
3498 t.proxy = null;
3499
3500 if (o === undefined) {
3501 var options = t.node.getAttribute('data-mejsoptions');
3502 o = options ? JSON.parse(options) : {};
3503 }
3504
3505 t.options = Object.assign({}, config, o);
3506
3507 if (t.options.loop && !t.media.getAttribute('loop')) {
3508 t.media.loop = true;
3509 t.node.loop = true;
3510 } else if (t.media.loop) {
3511 t.options.loop = true;
3512 }
3513
3514 if (!t.options.timeFormat) {
3515 t.options.timeFormat = 'mm:ss';
3516 if (t.options.alwaysShowHours) {
3517 t.options.timeFormat = 'hh:mm:ss';
3518 }
3519 if (t.options.showTimecodeFrameCount) {
3520 t.options.timeFormat += ':ff';
3521 }
3522 }
3523
3524 (0, _time.calculateTimeFormat)(0, t.options, t.options.framesPerSecond || 25);
3525
3526 t.id = 'mep_' + _mejs2.default.mepIndex++;
3527
3528 _mejs2.default.players[t.id] = t;
3529
3530 var playerOptions = Object.assign({}, t.options, {
3531 success: function success(media, domNode) {
3532 t._meReady(media, domNode);
3533 },
3534 error: function error(e) {
3535 t._handleError(e);
3536 }
3537 }),
3538 tagName = t.node.tagName.toLowerCase();
3539
3540 t.isDynamic = tagName !== 'audio' && tagName !== 'video' && tagName !== 'iframe';
3541 t.isVideo = t.isDynamic ? t.options.isVideo : tagName !== 'audio' && t.options.isVideo;
3542 t.mediaFiles = null;
3543 t.trackFiles = null;
3544
3545 if (_constants.IS_IPAD && t.options.iPadUseNativeControls || _constants.IS_IPHONE && t.options.iPhoneUseNativeControls) {
3546 t.node.setAttribute('controls', true);
3547
3548 if (_constants.IS_IPAD && t.node.getAttribute('autoplay')) {
3549 t.play();
3550 }
3551 } else if ((t.isVideo || !t.isVideo && (t.options.features.length || t.options.useDefaultControls)) && !(_constants.IS_ANDROID && t.options.AndroidUseNativeControls)) {
3552 t.node.removeAttribute('controls');
3553 var videoPlayerTitle = t.isVideo ? _i18n2.default.t('mejs.video-player') : _i18n2.default.t('mejs.audio-player');
3554
3555 var offscreen = _document2.default.createElement('span');
3556 offscreen.className = t.options.classPrefix + 'offscreen';
3557 offscreen.innerText = videoPlayerTitle;
3558 t.media.parentNode.insertBefore(offscreen, t.media);
3559
3560 t.container = _document2.default.createElement('div');
3561 t.container.id = t.id;
3562 t.container.className = t.options.classPrefix + 'container ' + t.options.classPrefix + 'container-keyboard-inactive ' + t.media.className;
3563 t.container.tabIndex = 0;
3564 t.container.setAttribute('role', 'application');
3565 t.container.setAttribute('aria-label', videoPlayerTitle);
3566 t.container.innerHTML = '<div class="' + t.options.classPrefix + 'inner">' + ('<div class="' + t.options.classPrefix + 'mediaelement"></div>') + ('<div class="' + t.options.classPrefix + 'layers"></div>') + ('<div class="' + t.options.classPrefix + 'controls"></div>') + '</div>';
3567 t.container.addEventListener('focus', function (e) {
3568 if (!t.controlsAreVisible && !t.hasFocus && t.controlsEnabled) {
3569 t.showControls(true);
3570
3571 var btnSelector = (0, _general.isNodeAfter)(e.relatedTarget, t.container) ? '.' + t.options.classPrefix + 'controls .' + t.options.classPrefix + 'button:last-child > button' : '.' + t.options.classPrefix + 'playpause-button > button',
3572 button = t.container.querySelector(btnSelector);
3573
3574 button.focus();
3575 }
3576 });
3577 t.node.parentNode.insertBefore(t.container, t.node);
3578
3579 if (!t.options.features.length && !t.options.useDefaultControls) {
3580 t.container.style.background = 'transparent';
3581 t.container.querySelector('.' + t.options.classPrefix + 'controls').style.display = 'none';
3582 }
3583
3584 if (t.isVideo && t.options.stretching === 'fill' && !dom.hasClass(t.container.parentNode, t.options.classPrefix + 'fill-container')) {
3585 t.outerContainer = t.media.parentNode;
3586
3587 var wrapper = _document2.default.createElement('div');
3588 wrapper.className = t.options.classPrefix + 'fill-container';
3589 t.container.parentNode.insertBefore(wrapper, t.container);
3590 wrapper.appendChild(t.container);
3591 }
3592
3593 if (_constants.IS_ANDROID) {
3594 dom.addClass(t.container, t.options.classPrefix + 'android');
3595 }
3596 if (_constants.IS_IOS) {
3597 dom.addClass(t.container, t.options.classPrefix + 'ios');
3598 }
3599 if (_constants.IS_IPAD) {
3600 dom.addClass(t.container, t.options.classPrefix + 'ipad');
3601 }
3602 if (_constants.IS_IPHONE) {
3603 dom.addClass(t.container, t.options.classPrefix + 'iphone');
3604 }
3605 dom.addClass(t.container, t.isVideo ? t.options.classPrefix + 'video' : t.options.classPrefix + 'audio');
3606
3607 if (_constants.IS_SAFARI && !_constants.IS_IOS) {
3608
3609 dom.addClass(t.container, t.options.classPrefix + 'hide-cues');
3610
3611 var cloneNode = t.node.cloneNode(),
3612 children = t.node.children,
3613 mediaFiles = [],
3614 tracks = [];
3615
3616 for (var i = 0, total = children.length; i < total; i++) {
3617 var childNode = children[i];
3618
3619 (function () {
3620 switch (childNode.tagName.toLowerCase()) {
3621 case 'source':
3622 var elements = {};
3623 Array.prototype.slice.call(childNode.attributes).forEach(function (item) {
3624 elements[item.name] = item.value;
3625 });
3626 elements.type = (0, _media.formatType)(elements.src, elements.type);
3627 mediaFiles.push(elements);
3628 break;
3629 case 'track':
3630 childNode.mode = 'hidden';
3631 tracks.push(childNode);
3632 break;
3633 default:
3634 cloneNode.appendChild(childNode);
3635 break;
3636 }
3637 })();
3638 }
3639
3640 t.node.remove();
3641 t.node = t.media = cloneNode;
3642
3643 if (mediaFiles.length) {
3644 t.mediaFiles = mediaFiles;
3645 }
3646 if (tracks.length) {
3647 t.trackFiles = tracks;
3648 }
3649 }
3650
3651 t.container.querySelector('.' + t.options.classPrefix + 'mediaelement').appendChild(t.node);
3652
3653 t.media.player = t;
3654
3655 t.controls = t.container.querySelector('.' + t.options.classPrefix + 'controls');
3656 t.layers = t.container.querySelector('.' + t.options.classPrefix + 'layers');
3657
3658 var tagType = t.isVideo ? 'video' : 'audio',
3659 capsTagName = tagType.substring(0, 1).toUpperCase() + tagType.substring(1);
3660
3661 if (t.options[tagType + 'Width'] > 0 || t.options[tagType + 'Width'].toString().indexOf('%') > -1) {
3662 t.width = t.options[tagType + 'Width'];
3663 } else if (t.node.style.width !== '' && t.node.style.width !== null) {
3664 t.width = t.node.style.width;
3665 } else if (t.node.getAttribute('width')) {
3666 t.width = t.node.getAttribute('width');
3667 } else {
3668 t.width = t.options['default' + capsTagName + 'Width'];
3669 }
3670
3671 if (t.options[tagType + 'Height'] > 0 || t.options[tagType + 'Height'].toString().indexOf('%') > -1) {
3672 t.height = t.options[tagType + 'Height'];
3673 } else if (t.node.style.height !== '' && t.node.style.height !== null) {
3674 t.height = t.node.style.height;
3675 } else if (t.node.getAttribute('height')) {
3676 t.height = t.node.getAttribute('height');
3677 } else {
3678 t.height = t.options['default' + capsTagName + 'Height'];
3679 }
3680
3681 t.initialAspectRatio = t.height >= t.width ? t.width / t.height : t.height / t.width;
3682
3683 t.setPlayerSize(t.width, t.height);
3684
3685 playerOptions.pluginWidth = t.width;
3686 playerOptions.pluginHeight = t.height;
3687 } else if (!t.isVideo && !t.options.features.length && !t.options.useDefaultControls) {
3688 t.node.style.display = 'none';
3689 }
3690
3691 _mejs2.default.MepDefaults = playerOptions;
3692
3693 new _mediaelement2.default(t.media, playerOptions, t.mediaFiles);
3694
3695 if (t.container !== undefined && t.options.features.length && t.controlsAreVisible && !t.options.hideVideoControlsOnLoad) {
3696 var event = (0, _general.createEvent)('controlsshown', t.container);
3697 t.container.dispatchEvent(event);
3698 }
3699
3700 return t;
3701 }
3702
3703 _createClass(MediaElementPlayer, [{
3704 key: 'showControls',
3705 value: function showControls(doAnimation) {
3706 var t = this;
3707
3708 doAnimation = doAnimation === undefined || doAnimation;
3709
3710 if (t.controlsAreVisible || !t.isVideo) {
3711 return;
3712 }
3713
3714 if (doAnimation) {
3715 (function () {
3716 dom.fadeIn(t.controls, 200, function () {
3717 dom.removeClass(t.controls, t.options.classPrefix + 'offscreen');
3718 var event = (0, _general.createEvent)('controlsshown', t.container);
3719 t.container.dispatchEvent(event);
3720 });
3721
3722 var controls = t.container.querySelectorAll('.' + t.options.classPrefix + 'control');
3723
3724 var _loop = function _loop(i, total) {
3725 dom.fadeIn(controls[i], 200, function () {
3726 dom.removeClass(controls[i], t.options.classPrefix + 'offscreen');
3727 });
3728 };
3729
3730 for (var i = 0, total = controls.length; i < total; i++) {
3731 _loop(i, total);
3732 }
3733 })();
3734 } else {
3735 dom.removeClass(t.controls, t.options.classPrefix + 'offscreen');
3736 t.controls.style.display = '';
3737 t.controls.style.opacity = 1;
3738
3739 var controls = t.container.querySelectorAll('.' + t.options.classPrefix + 'control');
3740 for (var i = 0, total = controls.length; i < total; i++) {
3741 dom.removeClass(controls[i], t.options.classPrefix + 'offscreen');
3742 controls[i].style.display = '';
3743 }
3744
3745 var event = (0, _general.createEvent)('controlsshown', t.container);
3746 t.container.dispatchEvent(event);
3747 }
3748
3749 t.controlsAreVisible = true;
3750 t.setControlsSize();
3751 }
3752 }, {
3753 key: 'hideControls',
3754 value: function hideControls(doAnimation, forceHide) {
3755 var t = this;
3756
3757 doAnimation = doAnimation === undefined || doAnimation;
3758
3759 if (forceHide !== true && (!t.controlsAreVisible || t.options.alwaysShowControls || t.paused && t.readyState === 4 && (!t.options.hideVideoControlsOnLoad && t.currentTime <= 0 || !t.options.hideVideoControlsOnPause && t.currentTime > 0) || t.isVideo && !t.options.hideVideoControlsOnLoad && !t.readyState || t.ended)) {
3760 return;
3761 }
3762
3763 if (doAnimation) {
3764 (function () {
3765 dom.fadeOut(t.controls, 200, function () {
3766 dom.addClass(t.controls, t.options.classPrefix + 'offscreen');
3767 t.controls.style.display = '';
3768 var event = (0, _general.createEvent)('controlshidden', t.container);
3769 t.container.dispatchEvent(event);
3770 });
3771
3772 var controls = t.container.querySelectorAll('.' + t.options.classPrefix + 'control');
3773
3774 var _loop2 = function _loop2(i, total) {
3775 dom.fadeOut(controls[i], 200, function () {
3776 dom.addClass(controls[i], t.options.classPrefix + 'offscreen');
3777 controls[i].style.display = '';
3778 });
3779 };
3780
3781 for (var i = 0, total = controls.length; i < total; i++) {
3782 _loop2(i, total);
3783 }
3784 })();
3785 } else {
3786 dom.addClass(t.controls, t.options.classPrefix + 'offscreen');
3787 t.controls.style.display = '';
3788 t.controls.style.opacity = 0;
3789
3790 var controls = t.container.querySelectorAll('.' + t.options.classPrefix + 'control');
3791 for (var i = 0, total = controls.length; i < total; i++) {
3792 dom.addClass(controls[i], t.options.classPrefix + 'offscreen');
3793 controls[i].style.display = '';
3794 }
3795
3796 var event = (0, _general.createEvent)('controlshidden', t.container);
3797 t.container.dispatchEvent(event);
3798 }
3799
3800 t.controlsAreVisible = false;
3801 }
3802 }, {
3803 key: 'startControlsTimer',
3804 value: function startControlsTimer(timeout) {
3805 var t = this;
3806
3807 timeout = typeof timeout !== 'undefined' ? timeout : t.options.controlsTimeoutDefault;
3808
3809 t.killControlsTimer('start');
3810
3811 t.controlsTimer = setTimeout(function () {
3812 t.hideControls();
3813 t.killControlsTimer('hide');
3814 }, timeout);
3815 }
3816 }, {
3817 key: 'killControlsTimer',
3818 value: function killControlsTimer() {
3819 var t = this;
3820
3821 if (t.controlsTimer !== null) {
3822 clearTimeout(t.controlsTimer);
3823 delete t.controlsTimer;
3824 t.controlsTimer = null;
3825 }
3826 }
3827 }, {
3828 key: 'disableControls',
3829 value: function disableControls() {
3830 var t = this;
3831
3832 t.killControlsTimer();
3833 t.controlsEnabled = false;
3834 t.hideControls(false, true);
3835 }
3836 }, {
3837 key: 'enableControls',
3838 value: function enableControls() {
3839 var t = this;
3840
3841 t.controlsEnabled = true;
3842 t.showControls(false);
3843 }
3844 }, {
3845 key: '_setDefaultPlayer',
3846 value: function _setDefaultPlayer() {
3847 var t = this;
3848 if (t.proxy) {
3849 t.proxy.pause();
3850 }
3851 t.proxy = new _default2.default(t);
3852 t.media.addEventListener('loadedmetadata', function () {
3853 if (t.getCurrentTime() > 0 && t.currentMediaTime > 0) {
3854 t.setCurrentTime(t.currentMediaTime);
3855 if (!_constants.IS_IOS && !_constants.IS_ANDROID) {
3856 t.play();
3857 }
3858 }
3859 });
3860 }
3861 }, {
3862 key: '_meReady',
3863 value: function _meReady(media, domNode) {
3864 var t = this,
3865 autoplayAttr = domNode.getAttribute('autoplay'),
3866 autoplay = !(autoplayAttr === undefined || autoplayAttr === null || autoplayAttr === 'false'),
3867 isNative = media.rendererName !== null && /(native|html5)/i.test(t.media.rendererName);
3868
3869 if (t.controls) {
3870 t.enableControls();
3871 }
3872
3873 if (t.container && t.container.querySelector('.' + t.options.classPrefix + 'overlay-play')) {
3874 t.container.querySelector('.' + t.options.classPrefix + 'overlay-play').style.display = '';
3875 }
3876
3877 if (t.created) {
3878 return;
3879 }
3880
3881 t.created = true;
3882 t.media = media;
3883 t.domNode = domNode;
3884
3885 if (!(_constants.IS_ANDROID && t.options.AndroidUseNativeControls) && !(_constants.IS_IPAD && t.options.iPadUseNativeControls) && !(_constants.IS_IPHONE && t.options.iPhoneUseNativeControls)) {
3886 if (!t.isVideo && !t.options.features.length && !t.options.useDefaultControls) {
3887 if (autoplay && isNative) {
3888 t.play();
3889 }
3890
3891 if (t.options.success) {
3892
3893 if (typeof t.options.success === 'string') {
3894 _window2.default[t.options.success](t.media, t.domNode, t);
3895 } else {
3896 t.options.success(t.media, t.domNode, t);
3897 }
3898 }
3899
3900 return;
3901 }
3902
3903 t.findTracks();
3904
3905 t.featurePosition = {};
3906
3907 t._setDefaultPlayer();
3908
3909 if (t.options.useDefaultControls) {
3910 var defaultControls = ['playpause', 'current', 'progress', 'duration', 'tracks', 'volume', 'fullscreen'];
3911 t.options.features = defaultControls.concat(t.options.features.filter(function (item) {
3912 return defaultControls.indexOf(item) === -1;
3913 }));
3914 }
3915
3916 for (var i = 0, total = t.options.features.length; i < total; i++) {
3917 var feature = t.options.features[i];
3918 if (t['build' + feature]) {
3919 try {
3920 t['build' + feature](t, t.controls, t.layers, t.media);
3921 } catch (e) {
3922 console.error('error building ' + feature, e);
3923 }
3924 }
3925 }
3926
3927 t.buildposter(t, t.controls, t.layers, t.media);
3928 t.buildkeyboard(t, t.controls, t.layers, t.media);
3929 t.buildoverlays(t, t.controls, t.layers, t.media);
3930
3931 var event = (0, _general.createEvent)('controlsready', t.container);
3932 t.container.dispatchEvent(event);
3933
3934 t.setPlayerSize(t.width, t.height);
3935 t.setControlsSize();
3936
3937 if (t.isVideo) {
3938 t.clickToPlayPauseCallback = function () {
3939
3940 if (t.options.clickToPlayPause) {
3941 var button = t.container.querySelector('.' + t.options.classPrefix + 'overlay-button'),
3942 pressed = button.getAttribute('aria-pressed');
3943
3944 if (t.paused && pressed) {
3945 t.pause();
3946 } else if (t.paused) {
3947 t.play();
3948 } else {
3949 t.pause();
3950 }
3951
3952 button.setAttribute('aria-pressed', !pressed);
3953 t.container.focus();
3954 }
3955 };
3956
3957 t.createIframeLayer();
3958
3959 t.media.addEventListener('click', t.clickToPlayPauseCallback);
3960
3961 if ((_constants.IS_ANDROID || _constants.IS_IOS) && !t.options.alwaysShowControls) {
3962 t.node.addEventListener('touchstart', function () {
3963 if (t.controlsAreVisible) {
3964 t.hideControls(false);
3965 } else {
3966 if (t.controlsEnabled) {
3967 t.showControls(false);
3968 }
3969 }
3970 });
3971 } else {
3972 t.container.addEventListener('mouseenter', function () {
3973 if (t.controlsEnabled) {
3974 if (!t.options.alwaysShowControls) {
3975 t.killControlsTimer('enter');
3976 t.showControls();
3977 t.startControlsTimer(t.options.controlsTimeoutMouseEnter);
3978 }
3979 }
3980 });
3981 t.container.addEventListener('mousemove', function () {
3982 if (t.controlsEnabled) {
3983 if (!t.controlsAreVisible) {
3984 t.showControls();
3985 }
3986 if (!t.options.alwaysShowControls) {
3987 t.startControlsTimer(t.options.controlsTimeoutMouseEnter);
3988 }
3989 }
3990 });
3991 t.container.addEventListener('mouseleave', function () {
3992 if (t.controlsEnabled) {
3993 if (!t.paused && !t.options.alwaysShowControls) {
3994 t.startControlsTimer(t.options.controlsTimeoutMouseLeave);
3995 }
3996 }
3997 });
3998 }
3999
4000 if (t.options.hideVideoControlsOnLoad) {
4001 t.hideControls(false);
4002 }
4003
4004 if (t.options.enableAutosize) {
4005 t.media.addEventListener('loadedmetadata', function (e) {
4006 var target = e !== undefined ? e.detail.target || e.target : t.media;
4007 if (t.options.videoHeight <= 0 && !t.domNode.getAttribute('height') && target !== null && !isNaN(target.videoHeight)) {
4008 t.setPlayerSize(target.videoWidth, target.videoHeight);
4009 t.setControlsSize();
4010 t.media.setSize(target.videoWidth, target.videoHeight);
4011 }
4012 });
4013 }
4014 }
4015
4016 t.media.addEventListener('play', function () {
4017 t.hasFocus = true;
4018
4019 for (var playerIndex in _mejs2.default.players) {
4020 if (_mejs2.default.players.hasOwnProperty(playerIndex)) {
4021 var p = _mejs2.default.players[playerIndex];
4022
4023 if (p.id !== t.id && t.options.pauseOtherPlayers && !p.paused && !p.ended) {
4024 p.pause();
4025 p.hasFocus = false;
4026 }
4027 }
4028 }
4029
4030 if (!(_constants.IS_ANDROID || _constants.IS_IOS) && !t.options.alwaysShowControls && t.isVideo) {
4031 t.hideControls();
4032 }
4033 });
4034
4035 t.media.addEventListener('ended', function () {
4036 if (t.options.autoRewind) {
4037 try {
4038 t.setCurrentTime(0);
4039
4040 setTimeout(function () {
4041 var loadingElement = t.container.querySelector('.' + t.options.classPrefix + 'overlay-loading');
4042 if (loadingElement && loadingElement.parentNode) {
4043 loadingElement.parentNode.style.display = 'none';
4044 }
4045 }, 20);
4046 } catch (exp) {
4047
4048 }
4049 }
4050
4051 if (typeof t.media.renderer.stop === 'function') {
4052 t.media.renderer.stop();
4053 } else {
4054 t.pause();
4055 }
4056
4057 if (t.setProgressRail) {
4058 t.setProgressRail();
4059 }
4060 if (t.setCurrentRail) {
4061 t.setCurrentRail();
4062 }
4063
4064 if (t.options.loop) {
4065 t.play();
4066 } else if (!t.options.alwaysShowControls && t.controlsEnabled) {
4067 t.showControls();
4068 }
4069 });
4070
4071 t.media.addEventListener('loadedmetadata', function () {
4072
4073 (0, _time.calculateTimeFormat)(t.getDuration(), t.options, t.options.framesPerSecond || 25);
4074
4075 if (t.updateDuration) {
4076 t.updateDuration();
4077 }
4078 if (t.updateCurrent) {
4079 t.updateCurrent();
4080 }
4081
4082 if (!t.isFullScreen) {
4083 t.setPlayerSize(t.width, t.height);
4084 t.setControlsSize();
4085 }
4086 });
4087
4088 var duration = null;
4089 t.media.addEventListener('timeupdate', function () {
4090 if (!isNaN(t.getDuration()) && duration !== t.getDuration()) {
4091 duration = t.getDuration();
4092 (0, _time.calculateTimeFormat)(duration, t.options, t.options.framesPerSecond || 25);
4093
4094 if (t.updateDuration) {
4095 t.updateDuration();
4096 }
4097 if (t.updateCurrent) {
4098 t.updateCurrent();
4099 }
4100
4101 t.setControlsSize();
4102 }
4103 });
4104
4105 t.container.addEventListener('click', function (e) {
4106 dom.addClass(e.currentTarget, t.options.classPrefix + 'container-keyboard-inactive');
4107 });
4108
4109 t.container.addEventListener('focusin', function (e) {
4110 dom.removeClass(e.currentTarget, t.options.classPrefix + 'container-keyboard-inactive');
4111 if (t.isVideo && !_constants.IS_ANDROID && !_constants.IS_IOS && t.controlsEnabled && !t.options.alwaysShowControls) {
4112 t.killControlsTimer('enter');
4113 t.showControls();
4114 t.startControlsTimer(t.options.controlsTimeoutMouseEnter);
4115 }
4116 });
4117
4118 t.container.addEventListener('focusout', function (e) {
4119 setTimeout(function () {
4120 if (e.relatedTarget) {
4121 if (t.keyboardAction && !e.relatedTarget.closest('.' + t.options.classPrefix + 'container')) {
4122 t.keyboardAction = false;
4123 if (t.isVideo && !t.options.alwaysShowControls && !t.paused) {
4124 t.startControlsTimer(t.options.controlsTimeoutMouseLeave);
4125 }
4126 }
4127 }
4128 }, 0);
4129 });
4130
4131 setTimeout(function () {
4132 t.setPlayerSize(t.width, t.height);
4133 t.setControlsSize();
4134 }, 0);
4135
4136 t.globalResizeCallback = function () {
4137 if (!(t.isFullScreen || _constants.HAS_TRUE_NATIVE_FULLSCREEN && _document2.default.webkitIsFullScreen)) {
4138 t.setPlayerSize(t.width, t.height);
4139 }
4140
4141 t.setControlsSize();
4142 };
4143
4144 t.globalBind('resize', t.globalResizeCallback);
4145 }
4146
4147 if (autoplay && isNative) {
4148 t.play();
4149 }
4150
4151 if (t.options.success) {
4152 if (typeof t.options.success === 'string') {
4153 _window2.default[t.options.success](t.media, t.domNode, t);
4154 } else {
4155 t.options.success(t.media, t.domNode, t);
4156 }
4157 }
4158 }
4159 }, {
4160 key: '_handleError',
4161 value: function _handleError(e, media, node) {
4162 var t = this,
4163 play = t.layers.querySelector('.' + t.options.classPrefix + 'overlay-play');
4164
4165 if (play) {
4166 play.style.display = 'none';
4167 }
4168
4169 if (t.options.error) {
4170 t.options.error(e, media, node);
4171 }
4172
4173 if (t.container.querySelector('.' + t.options.classPrefix + 'cannotplay')) {
4174 t.container.querySelector('.' + t.options.classPrefix + 'cannotplay').remove();
4175 }
4176
4177 var errorContainer = _document2.default.createElement('div');
4178 errorContainer.className = t.options.classPrefix + 'cannotplay';
4179 errorContainer.style.width = '100%';
4180 errorContainer.style.height = '100%';
4181
4182 var errorContent = typeof t.options.customError === 'function' ? t.options.customError(t.media, t.media.originalNode) : t.options.customError,
4183 imgError = '';
4184
4185 if (errorContent) {
4186 var poster = t.media.originalNode.getAttribute('poster');
4187 if (poster) {
4188 imgError = '<img src="' + poster + '" alt="' + _mejs2.default.i18n.t('mejs.download-file') + '">';
4189 }
4190
4191 if (e.message) {
4192 errorContent += '<p>' + e.message + '</p>';
4193 }
4194
4195 if (e.urls) {
4196 for (var i = 0, total = e.urls.length; i < total; i++) {
4197 var url = e.urls[i];
4198 errorContent += '<a href="' + url.src + '" data-type="' + url.type + '"><span>' + _mejs2.default.i18n.t('mejs.download-file') + ': ' + url.src + '</span></a>';
4199 }
4200 }
4201 }
4202
4203 if (errorContent && t.layers.querySelector('.' + t.options.classPrefix + 'overlay-error')) {
4204 errorContainer.innerHTML = errorContent;
4205 t.layers.querySelector('.' + t.options.classPrefix + 'overlay-error').innerHTML = '' + imgError + errorContainer.outerHTML;
4206 t.layers.querySelector('.' + t.options.classPrefix + 'overlay-error').parentNode.style.display = 'block';
4207 }
4208 }
4209 }, {
4210 key: 'setPlayerSize',
4211 value: function setPlayerSize(width, height) {
4212 var t = this;
4213
4214 if (!t.options.setDimensions) {
4215 return false;
4216 }
4217
4218 if (typeof width !== 'undefined') {
4219 t.width = width;
4220 }
4221
4222 if (typeof height !== 'undefined') {
4223 t.height = height;
4224 }
4225
4226 switch (t.options.stretching) {
4227 case 'fill':
4228 if (t.isVideo) {
4229 t.setFillMode();
4230 } else {
4231 t.setDimensions(t.width, t.height);
4232 }
4233 break;
4234 case 'responsive':
4235 t.setResponsiveMode();
4236 break;
4237 case 'none':
4238 t.setDimensions(t.width, t.height);
4239 break;
4240
4241 default:
4242 if (t.hasFluidMode() === true) {
4243 t.setResponsiveMode();
4244 } else {
4245 t.setDimensions(t.width, t.height);
4246 }
4247 break;
4248 }
4249 }
4250 }, {
4251 key: 'hasFluidMode',
4252 value: function hasFluidMode() {
4253 var t = this;
4254
4255 return t.height.toString().indexOf('%') !== -1 || t.node && t.node.style.maxWidth && t.node.style.maxWidth !== 'none' && t.node.style.maxWidth !== t.width || t.node && t.node.currentStyle && t.node.currentStyle.maxWidth === '100%';
4256 }
4257 }, {
4258 key: 'setResponsiveMode',
4259 value: function setResponsiveMode() {
4260 var t = this,
4261 parent = function () {
4262
4263 var parentEl = void 0,
4264 el = t.container;
4265
4266 while (el) {
4267 try {
4268 if (_constants.IS_FIREFOX && el.tagName.toLowerCase() === 'html' && _window2.default.self !== _window2.default.top && _window2.default.frameElement !== null) {
4269 return _window2.default.frameElement;
4270 } else {
4271 parentEl = el.parentElement;
4272 }
4273 } catch (e) {
4274 parentEl = el.parentElement;
4275 }
4276
4277 if (parentEl && dom.visible(parentEl)) {
4278 return parentEl;
4279 }
4280 el = parentEl;
4281 }
4282
4283 return null;
4284 }(),
4285 parentStyles = parent ? getComputedStyle(parent, null) : getComputedStyle(_document2.default.body, null),
4286 nativeWidth = function () {
4287 if (t.isVideo) {
4288 if (t.media.videoWidth && t.media.videoWidth > 0) {
4289 return t.media.videoWidth;
4290 } else if (t.node.getAttribute('width')) {
4291 return t.node.getAttribute('width');
4292 } else {
4293 return t.options.defaultVideoWidth;
4294 }
4295 } else {
4296 return t.options.defaultAudioWidth;
4297 }
4298 }(),
4299 nativeHeight = function () {
4300 if (t.isVideo) {
4301 if (t.media.videoHeight && t.media.videoHeight > 0) {
4302 return t.media.videoHeight;
4303 } else if (t.node.getAttribute('height')) {
4304 return t.node.getAttribute('height');
4305 } else {
4306 return t.options.defaultVideoHeight;
4307 }
4308 } else {
4309 return t.options.defaultAudioHeight;
4310 }
4311 }(),
4312 aspectRatio = function () {
4313 var ratio = 1;
4314 if (!t.isVideo) {
4315 return ratio;
4316 }
4317
4318 if (t.media.videoWidth && t.media.videoWidth > 0 && t.media.videoHeight && t.media.videoHeight > 0) {
4319 ratio = t.height >= t.width ? t.media.videoWidth / t.media.videoHeight : t.media.videoHeight / t.media.videoWidth;
4320 } else {
4321 ratio = t.initialAspectRatio;
4322 }
4323
4324 if (isNaN(ratio) || ratio < 0.01 || ratio > 100) {
4325 ratio = 1;
4326 }
4327
4328 return ratio;
4329 }(),
4330 parentHeight = parseFloat(parentStyles.height);
4331
4332 var newHeight = void 0,
4333 parentWidth = parseFloat(parentStyles.width);
4334
4335 if (t.isVideo) {
4336 if (t.height === '100%') {
4337 newHeight = parseFloat(parentWidth * nativeHeight / nativeWidth, 10);
4338 } else {
4339 newHeight = t.height >= t.width ? parseFloat(parentWidth / aspectRatio, 10) : parseFloat(parentWidth * aspectRatio, 10);
4340 }
4341 } else {
4342 newHeight = nativeHeight;
4343 }
4344
4345 if (isNaN(newHeight)) {
4346 newHeight = parentHeight;
4347 }
4348
4349 if (t.container.parentNode.length > 0 && t.container.parentNode.tagName.toLowerCase() === 'body') {
4350 parentWidth = _window2.default.innerWidth || _document2.default.documentElement.clientWidth || _document2.default.body.clientWidth;
4351 newHeight = _window2.default.innerHeight || _document2.default.documentElement.clientHeight || _document2.default.body.clientHeight;
4352 }
4353
4354 if (newHeight && parentWidth) {
4355 t.container.style.width = parentWidth + 'px';
4356 t.container.style.height = newHeight + 'px';
4357
4358 t.node.style.width = '100%';
4359 t.node.style.height = '100%';
4360
4361 if (t.isVideo && t.media.setSize) {
4362 t.media.setSize(parentWidth, newHeight);
4363 }
4364
4365 var layerChildren = t.layers.children;
4366 for (var i = 0, total = layerChildren.length; i < total; i++) {
4367 layerChildren[i].style.width = '100%';
4368 layerChildren[i].style.height = '100%';
4369 }
4370 }
4371 }
4372 }, {
4373 key: 'setFillMode',
4374 value: function setFillMode() {
4375 var t = this;
4376
4377 var parent = void 0,
4378 isIframe = false;
4379
4380 try {
4381 if (_window2.default.self !== _window2.default.top) {
4382 isIframe = true;
4383 parent = _window2.default.frameElement;
4384 } else {
4385 parent = t.outerContainer;
4386 }
4387 } catch (e) {
4388 parent = t.outerContainer;
4389 }
4390
4391 var parentStyles = getComputedStyle(parent);
4392
4393 if (t.node.style.height !== 'none' && t.node.style.height !== t.height) {
4394 t.node.style.height = 'auto';
4395 }
4396 if (t.node.style.maxWidth !== 'none' && t.node.style.maxWidth !== t.width) {
4397 t.node.style.maxWidth = 'none';
4398 }
4399
4400 if (t.node.style.maxHeight !== 'none' && t.node.style.maxHeight !== t.height) {
4401 t.node.style.maxHeight = 'none';
4402 }
4403
4404 if (t.node.currentStyle) {
4405 if (t.node.currentStyle.height === '100%') {
4406 t.node.currentStyle.height = 'auto';
4407 }
4408 if (t.node.currentStyle.maxWidth === '100%') {
4409 t.node.currentStyle.maxWidth = 'none';
4410 }
4411 if (t.node.currentStyle.maxHeight === '100%') {
4412 t.node.currentStyle.maxHeight = 'none';
4413 }
4414 }
4415
4416 if (!isIframe && !parseFloat(parentStyles.width)) {
4417 parent.style.width = t.media.offsetWidth + 'px';
4418 }
4419
4420 if (!isIframe && !parseFloat(parentStyles.height)) {
4421 parent.style.height = t.media.offsetHeight + 'px';
4422 }
4423
4424 parentStyles = getComputedStyle(parent);
4425
4426 var parentWidth = parseFloat(parentStyles.width),
4427 parentHeight = parseFloat(parentStyles.height);
4428
4429 t.setDimensions('100%', '100%');
4430
4431 var poster = t.container.querySelector('.' + t.options.classPrefix + 'poster>img');
4432 if (poster) {
4433 poster.style.display = '';
4434 }
4435
4436 var targetElement = t.container.querySelectorAll('object, embed, iframe, video'),
4437 initHeight = t.height,
4438 initWidth = t.width,
4439 scaleX1 = parentWidth,
4440 scaleY1 = initHeight * parentWidth / initWidth,
4441 scaleX2 = initWidth * parentHeight / initHeight,
4442 scaleY2 = parentHeight,
4443 bScaleOnWidth = scaleX2 > parentWidth === false,
4444 finalWidth = bScaleOnWidth ? Math.floor(scaleX1) : Math.floor(scaleX2),
4445 finalHeight = bScaleOnWidth ? Math.floor(scaleY1) : Math.floor(scaleY2),
4446 width = bScaleOnWidth ? parentWidth + 'px' : finalWidth + 'px',
4447 height = bScaleOnWidth ? finalHeight + 'px' : parentHeight + 'px';
4448
4449 for (var i = 0, total = targetElement.length; i < total; i++) {
4450 targetElement[i].style.height = height;
4451 targetElement[i].style.width = width;
4452 if (t.media.setSize) {
4453 t.media.setSize(width, height);
4454 }
4455
4456 targetElement[i].style.marginLeft = Math.floor((parentWidth - finalWidth) / 2) + 'px';
4457 targetElement[i].style.marginTop = 0;
4458 }
4459 }
4460 }, {
4461 key: 'setDimensions',
4462 value: function setDimensions(width, height) {
4463 var t = this;
4464
4465 width = (0, _general.isString)(width) && width.indexOf('%') > -1 ? width : parseFloat(width) + 'px';
4466 height = (0, _general.isString)(height) && height.indexOf('%') > -1 ? height : parseFloat(height) + 'px';
4467
4468 t.container.style.width = width;
4469 t.container.style.height = height;
4470
4471 var layers = t.layers.children;
4472 for (var i = 0, total = layers.length; i < total; i++) {
4473 layers[i].style.width = width;
4474 layers[i].style.height = height;
4475 }
4476 }
4477 }, {
4478 key: 'setControlsSize',
4479 value: function setControlsSize() {
4480 var t = this;
4481
4482 if (!dom.visible(t.container)) {
4483 return;
4484 }
4485
4486 if (t.rail && dom.visible(t.rail)) {
4487 var totalStyles = t.total ? getComputedStyle(t.total, null) : null,
4488 totalMargin = totalStyles ? parseFloat(totalStyles.marginLeft) + parseFloat(totalStyles.marginRight) : 0,
4489 railStyles = getComputedStyle(t.rail),
4490 railMargin = parseFloat(railStyles.marginLeft) + parseFloat(railStyles.marginRight);
4491
4492 var siblingsWidth = 0;
4493
4494 var siblings = dom.siblings(t.rail, function (el) {
4495 return el !== t.rail;
4496 }),
4497 total = siblings.length;
4498 for (var i = 0; i < total; i++) {
4499 siblingsWidth += siblings[i].offsetWidth;
4500 }
4501
4502 siblingsWidth += totalMargin + (totalMargin === 0 ? railMargin * 2 : railMargin) + 1;
4503
4504 t.container.style.minWidth = siblingsWidth + 'px';
4505
4506 var event = (0, _general.createEvent)('controlsresize', t.container);
4507 t.container.dispatchEvent(event);
4508 } else {
4509 var children = t.controls.children;
4510 var minWidth = 0;
4511
4512 for (var _i = 0, _total = children.length; _i < _total; _i++) {
4513 minWidth += children[_i].offsetWidth;
4514 }
4515
4516 t.container.style.minWidth = minWidth + 'px';
4517 }
4518 }
4519 }, {
4520 key: 'addControlElement',
4521 value: function addControlElement(element, key) {
4522
4523 var t = this;
4524
4525 if (t.featurePosition[key] !== undefined) {
4526 var child = t.controls.children[t.featurePosition[key] - 1];
4527 child.parentNode.insertBefore(element, child.nextSibling);
4528 } else {
4529 t.controls.appendChild(element);
4530 var children = t.controls.children;
4531 for (var i = 0, total = children.length; i < total; i++) {
4532 if (element === children[i]) {
4533 t.featurePosition[key] = i;
4534 break;
4535 }
4536 }
4537 }
4538 }
4539 }, {
4540 key: 'createIframeLayer',
4541 value: function createIframeLayer() {
4542 var t = this;
4543
4544 if (t.isVideo && t.media.rendererName !== null && t.media.rendererName.indexOf('iframe') > -1 && !_document2.default.getElementById(t.media.id + '-iframe-overlay')) {
4545
4546 var layer = _document2.default.createElement('div'),
4547 target = _document2.default.getElementById(t.media.id + '_' + t.media.rendererName);
4548
4549 layer.id = t.media.id + '-iframe-overlay';
4550 layer.className = t.options.classPrefix + 'iframe-overlay';
4551 layer.addEventListener('click', function (e) {
4552 if (t.options.clickToPlayPause) {
4553 if (t.paused) {
4554 t.play();
4555 } else {
4556 t.pause();
4557 }
4558
4559 e.preventDefault();
4560 e.stopPropagation();
4561 }
4562 });
4563
4564 target.parentNode.insertBefore(layer, target);
4565 }
4566 }
4567 }, {
4568 key: 'resetSize',
4569 value: function resetSize() {
4570 var t = this;
4571
4572 setTimeout(function () {
4573 t.setPlayerSize(t.width, t.height);
4574 t.setControlsSize();
4575 }, 50);
4576 }
4577 }, {
4578 key: 'setPoster',
4579 value: function setPoster(url) {
4580 var t = this;
4581
4582 var posterDiv = t.container.querySelector('.' + t.options.classPrefix + 'poster');
4583
4584 if (!posterDiv) {
4585 posterDiv = _document2.default.createElement('div');
4586 posterDiv.className = t.options.classPrefix + 'poster ' + t.options.classPrefix + 'layer';
4587 t.layers.appendChild(posterDiv);
4588 }
4589
4590 var posterImg = posterDiv.querySelector('img');
4591
4592 if (!posterImg && url) {
4593 posterImg = _document2.default.createElement('img');
4594 posterImg.className = t.options.classPrefix + 'poster-img';
4595 posterImg.width = '100%';
4596 posterImg.height = '100%';
4597 posterDiv.style.display = '';
4598 posterDiv.appendChild(posterImg);
4599 }
4600
4601 if (url) {
4602 posterImg.setAttribute('src', url);
4603 posterDiv.style.backgroundImage = 'url("' + url + '")';
4604 posterDiv.style.display = '';
4605 } else if (posterImg) {
4606 posterDiv.style.backgroundImage = 'none';
4607 posterDiv.style.display = 'none';
4608 posterImg.remove();
4609 } else {
4610 posterDiv.style.display = 'none';
4611 }
4612 }
4613 }, {
4614 key: 'changeSkin',
4615 value: function changeSkin(className) {
4616 var t = this;
4617
4618 t.container.className = t.options.classPrefix + 'container ' + className;
4619 t.setPlayerSize(t.width, t.height);
4620 t.setControlsSize();
4621 }
4622 }, {
4623 key: 'globalBind',
4624 value: function globalBind(events, callback) {
4625 var t = this,
4626 doc = t.node ? t.node.ownerDocument : _document2.default;
4627
4628 events = (0, _general.splitEvents)(events, t.id);
4629 if (events.d) {
4630 var eventList = events.d.split(' ');
4631 for (var i = 0, total = eventList.length; i < total; i++) {
4632 eventList[i].split('.').reduce(function (part, e) {
4633 doc.addEventListener(e, callback, false);
4634 return e;
4635 }, '');
4636 }
4637 }
4638 if (events.w) {
4639 var _eventList = events.w.split(' ');
4640 for (var _i2 = 0, _total2 = _eventList.length; _i2 < _total2; _i2++) {
4641 _eventList[_i2].split('.').reduce(function (part, e) {
4642 _window2.default.addEventListener(e, callback, false);
4643 return e;
4644 }, '');
4645 }
4646 }
4647 }
4648 }, {
4649 key: 'globalUnbind',
4650 value: function globalUnbind(events, callback) {
4651 var t = this,
4652 doc = t.node ? t.node.ownerDocument : _document2.default;
4653
4654 events = (0, _general.splitEvents)(events, t.id);
4655 if (events.d) {
4656 var eventList = events.d.split(' ');
4657 for (var i = 0, total = eventList.length; i < total; i++) {
4658 eventList[i].split('.').reduce(function (part, e) {
4659 doc.removeEventListener(e, callback, false);
4660 return e;
4661 }, '');
4662 }
4663 }
4664 if (events.w) {
4665 var _eventList2 = events.w.split(' ');
4666 for (var _i3 = 0, _total3 = _eventList2.length; _i3 < _total3; _i3++) {
4667 _eventList2[_i3].split('.').reduce(function (part, e) {
4668 _window2.default.removeEventListener(e, callback, false);
4669 return e;
4670 }, '');
4671 }
4672 }
4673 }
4674 }, {
4675 key: 'buildposter',
4676 value: function buildposter(player, controls, layers, media) {
4677 var t = this,
4678 poster = _document2.default.createElement('div');
4679
4680 poster.className = t.options.classPrefix + 'poster ' + t.options.classPrefix + 'layer';
4681 layers.appendChild(poster);
4682
4683 var posterUrl = media.originalNode.getAttribute('poster');
4684
4685 if (player.options.poster !== '' && posterUrl && _constants.IS_IOS) {
4686 media.originalNode.removeAttribute('poster');
4687 posterUrl = player.options.poster;
4688 }
4689
4690 if (posterUrl) {
4691 t.setPoster(posterUrl);
4692 } else if (t.media.renderer !== null && typeof t.media.renderer.getPosterUrl === 'function') {
4693 t.setPoster(t.media.renderer.getPosterUrl());
4694 } else {
4695 poster.style.display = 'none';
4696 }
4697
4698 media.addEventListener('play', function () {
4699 poster.style.display = 'none';
4700 });
4701
4702 media.addEventListener('playing', function () {
4703 poster.style.display = 'none';
4704 });
4705
4706 if (player.options.showPosterWhenEnded && player.options.autoRewind) {
4707 media.addEventListener('ended', function () {
4708 poster.style.display = '';
4709 });
4710 }
4711
4712 media.addEventListener('error', function () {
4713 poster.style.display = 'none';
4714 });
4715
4716 if (player.options.showPosterWhenPaused) {
4717 media.addEventListener('pause', function () {
4718 if (!player.ended) {
4719 poster.style.display = '';
4720 }
4721 });
4722 }
4723 }
4724 }, {
4725 key: 'buildoverlays',
4726 value: function buildoverlays(player, controls, layers, media) {
4727
4728 if (!player.isVideo) {
4729 return;
4730 }
4731
4732 var t = this,
4733 loading = _document2.default.createElement('div'),
4734 error = _document2.default.createElement('div'),
4735 bigPlay = _document2.default.createElement('div'),
4736 buffer = controls.querySelector('.' + t.options.classPrefix + 'time-buffering');
4737
4738 loading.style.display = 'none';
4739 loading.className = t.options.classPrefix + 'overlay ' + t.options.classPrefix + 'layer';
4740 loading.innerHTML = '<div class="' + t.options.classPrefix + 'overlay-loading">' + ('<span class="' + t.options.classPrefix + 'overlay-loading-bg-img"></span>') + '</div>';
4741 layers.appendChild(loading);
4742
4743 error.style.display = 'none';
4744 error.className = t.options.classPrefix + 'overlay ' + t.options.classPrefix + 'layer';
4745 error.innerHTML = '<div class="' + t.options.classPrefix + 'overlay-error"></div>';
4746 layers.appendChild(error);
4747
4748 bigPlay.className = t.options.classPrefix + 'overlay ' + t.options.classPrefix + 'layer ' + t.options.classPrefix + 'overlay-play';
4749 bigPlay.innerHTML = '<div class="' + t.options.classPrefix + 'overlay-button" role="button" tabindex="0" ' + ('aria-label="' + _i18n2.default.t('mejs.play') + '" aria-pressed="false"></div>');
4750 bigPlay.addEventListener('click', function () {
4751 if (t.options.clickToPlayPause) {
4752
4753 var button = t.container.querySelector('.' + t.options.classPrefix + 'overlay-button'),
4754 pressed = button.getAttribute('aria-pressed');
4755
4756 if (t.paused) {
4757 t.play();
4758 } else {
4759 t.pause();
4760 }
4761
4762 button.setAttribute('aria-pressed', !!pressed);
4763 t.container.focus();
4764 }
4765 });
4766
4767 bigPlay.addEventListener('keydown', function (e) {
4768 var keyPressed = e.keyCode || e.which || 0;
4769
4770 if (keyPressed === 13 || _constants.IS_FIREFOX && keyPressed === 32) {
4771 var event = (0, _general.createEvent)('click', bigPlay);
4772 bigPlay.dispatchEvent(event);
4773 return false;
4774 }
4775 });
4776
4777 layers.appendChild(bigPlay);
4778
4779 if (t.media.rendererName !== null && (/(youtube|facebook)/i.test(t.media.rendererName) && !(t.media.originalNode.getAttribute('poster') || player.options.poster || typeof t.media.renderer.getPosterUrl === 'function' && t.media.renderer.getPosterUrl()) || _constants.IS_STOCK_ANDROID || t.media.originalNode.getAttribute('autoplay'))) {
4780 bigPlay.style.display = 'none';
4781 }
4782
4783 var hasError = false;
4784
4785 media.addEventListener('play', function () {
4786 bigPlay.style.display = 'none';
4787 loading.style.display = 'none';
4788 if (buffer !== null) {
4789 buffer.style.display = 'none';
4790 }
4791 error.style.display = 'none';
4792 hasError = false;
4793 });
4794 media.addEventListener('playing', function () {
4795 bigPlay.style.display = 'none';
4796 loading.style.display = 'none';
4797 if (buffer !== null) {
4798 buffer.style.display = 'none';
4799 }
4800 error.style.display = 'none';
4801 hasError = false;
4802 });
4803 media.addEventListener('seeking', function () {
4804 bigPlay.style.display = 'none';
4805 loading.style.display = '';
4806 if (buffer !== null) {
4807 buffer.style.display = '';
4808 }
4809 hasError = false;
4810 });
4811 media.addEventListener('seeked', function () {
4812 bigPlay.style.display = t.paused && !_constants.IS_STOCK_ANDROID ? '' : 'none';
4813 loading.style.display = 'none';
4814 if (buffer !== null) {
4815 buffer.style.display = 'none';
4816 }
4817 hasError = false;
4818 });
4819 media.addEventListener('pause', function () {
4820 loading.style.display = 'none';
4821 if (!_constants.IS_STOCK_ANDROID && !hasError) {
4822 bigPlay.style.display = '';
4823 }
4824 if (buffer !== null) {
4825 buffer.style.display = 'none';
4826 }
4827 hasError = false;
4828 });
4829 media.addEventListener('waiting', function () {
4830 loading.style.display = '';
4831 if (buffer !== null) {
4832 buffer.style.display = '';
4833 }
4834 hasError = false;
4835 });
4836
4837 media.addEventListener('loadeddata', function () {
4838 loading.style.display = '';
4839 if (buffer !== null) {
4840 buffer.style.display = '';
4841 }
4842
4843 if (_constants.IS_ANDROID) {
4844 media.canplayTimeout = setTimeout(function () {
4845 if (_document2.default.createEvent) {
4846 var evt = _document2.default.createEvent('HTMLEvents');
4847 evt.initEvent('canplay', true, true);
4848 return media.dispatchEvent(evt);
4849 }
4850 }, 300);
4851 }
4852 hasError = false;
4853 });
4854 media.addEventListener('canplay', function () {
4855 loading.style.display = 'none';
4856 if (buffer !== null) {
4857 buffer.style.display = 'none';
4858 }
4859
4860 clearTimeout(media.canplayTimeout);
4861 hasError = false;
4862 });
4863
4864 media.addEventListener('error', function (e) {
4865 t._handleError(e, t.media, t.node);
4866 loading.style.display = 'none';
4867 bigPlay.style.display = 'none';
4868 if (buffer !== null) {
4869 buffer.style.display = 'none';
4870 }
4871 hasError = true;
4872 });
4873
4874 media.addEventListener('keydown', function (e) {
4875 t.onkeydown(player, media, e);
4876 hasError = false;
4877 });
4878 }
4879 }, {
4880 key: 'buildkeyboard',
4881 value: function buildkeyboard(player, controls, layers, media) {
4882
4883 var t = this;
4884
4885 t.container.addEventListener('keydown', function () {
4886 t.keyboardAction = true;
4887 });
4888
4889 t.globalKeydownCallback = function (event) {
4890 var container = _document2.default.activeElement.closest('.' + t.options.classPrefix + 'container'),
4891 target = t.media.closest('.' + t.options.classPrefix + 'container');
4892 t.hasFocus = !!(container && target && container.id === target.id);
4893 return t.onkeydown(player, media, event);
4894 };
4895
4896 t.globalClickCallback = function (event) {
4897 t.hasFocus = !!event.target.closest('.' + t.options.classPrefix + 'container');
4898 };
4899
4900 t.globalBind('keydown', t.globalKeydownCallback);
4901
4902 t.globalBind('click', t.globalClickCallback);
4903 }
4904 }, {
4905 key: 'onkeydown',
4906 value: function onkeydown(player, media, e) {
4907
4908 if (player.hasFocus && player.options.enableKeyboard) {
4909 for (var i = 0, total = player.options.keyActions.length; i < total; i++) {
4910 var keyAction = player.options.keyActions[i];
4911
4912 for (var j = 0, jl = keyAction.keys.length; j < jl; j++) {
4913 if (e.keyCode === keyAction.keys[j]) {
4914 keyAction.action(player, media, e.keyCode, e);
4915 e.preventDefault();
4916 e.stopPropagation();
4917 }
4918 }
4919 }
4920 }
4921
4922 return true;
4923 }
4924 }, {
4925 key: 'play',
4926 value: function play() {
4927 this.proxy.play();
4928 }
4929 }, {
4930 key: 'pause',
4931 value: function pause() {
4932 this.proxy.pause();
4933 }
4934 }, {
4935 key: 'load',
4936 value: function load() {
4937 this.proxy.load();
4938 }
4939 }, {
4940 key: 'setCurrentTime',
4941 value: function setCurrentTime(time) {
4942 this.proxy.setCurrentTime(time);
4943 }
4944 }, {
4945 key: 'getCurrentTime',
4946 value: function getCurrentTime() {
4947 return this.proxy.currentTime;
4948 }
4949 }, {
4950 key: 'getDuration',
4951 value: function getDuration() {
4952 return this.proxy.duration;
4953 }
4954 }, {
4955 key: 'setVolume',
4956 value: function setVolume(volume) {
4957 this.proxy.volume = volume;
4958 }
4959 }, {
4960 key: 'getVolume',
4961 value: function getVolume() {
4962 return this.proxy.getVolume();
4963 }
4964 }, {
4965 key: 'setMuted',
4966 value: function setMuted(value) {
4967 this.proxy.setMuted(value);
4968 }
4969 }, {
4970 key: 'setSrc',
4971 value: function setSrc(src) {
4972 if (!this.controlsEnabled) {
4973 this.enableControls();
4974 }
4975 this.proxy.setSrc(src);
4976 }
4977 }, {
4978 key: 'getSrc',
4979 value: function getSrc() {
4980 return this.proxy.getSrc();
4981 }
4982 }, {
4983 key: 'canPlayType',
4984 value: function canPlayType(type) {
4985 return this.proxy.canPlayType(type);
4986 }
4987 }, {
4988 key: 'remove',
4989 value: function remove() {
4990 var t = this,
4991 rendererName = t.media.rendererName,
4992 src = t.media.originalNode.src;
4993
4994 for (var featureIndex in t.options.features) {
4995 var feature = t.options.features[featureIndex];
4996 if (t['clean' + feature]) {
4997 try {
4998 t['clean' + feature](t, t.layers, t.controls, t.media);
4999 } catch (e) {
5000 console.error('error cleaning ' + feature, e);
5001 }
5002 }
5003 }
5004
5005 var nativeWidth = t.node.getAttribute('width'),
5006 nativeHeight = t.node.getAttribute('height');
5007
5008 if (nativeWidth) {
5009 if (nativeWidth.indexOf('%') === -1) {
5010 nativeWidth = nativeWidth + 'px';
5011 }
5012 } else {
5013 nativeWidth = 'auto';
5014 }
5015
5016 if (nativeHeight) {
5017 if (nativeHeight.indexOf('%') === -1) {
5018 nativeHeight = nativeHeight + 'px';
5019 }
5020 } else {
5021 nativeHeight = 'auto';
5022 }
5023
5024 t.node.style.width = nativeWidth;
5025 t.node.style.height = nativeHeight;
5026
5027 if (!t.isDynamic) {
5028 (function () {
5029 t.node.setAttribute('controls', true);
5030 t.node.setAttribute('id', t.node.getAttribute('id').replace('_' + rendererName, '').replace('_from_mejs', ''));
5031 var poster = t.container.querySelector('.' + t.options.classPrefix + 'poster>img');
5032 if (poster) {
5033 t.node.setAttribute('poster', poster.src);
5034 }
5035
5036 delete t.node.autoplay;
5037
5038 if (t.media.canPlayType((0, _media.getTypeFromFile)(src)) !== '') {
5039 t.node.setAttribute('src', src);
5040 }
5041
5042 if (~rendererName.indexOf('iframe')) {
5043 var layer = _document2.default.getElementById(t.media.id + '-iframe-overlay');
5044 layer.remove();
5045 }
5046
5047 var node = t.node.cloneNode();
5048 node.style.display = '';
5049 t.container.parentNode.insertBefore(node, t.container);
5050 t.node.remove();
5051
5052 if (t.mediaFiles) {
5053 for (var i = 0, total = t.mediaFiles.length; i < total; i++) {
5054 var source = _document2.default.createElement('source');
5055 source.setAttribute('src', t.mediaFiles[i].src);
5056 source.setAttribute('type', t.mediaFiles[i].type);
5057 node.appendChild(source);
5058 }
5059 }
5060 if (t.trackFiles) {
5061 var _loop3 = function _loop3(_i4, _total4) {
5062 var track = t.trackFiles[_i4];
5063 var newTrack = _document2.default.createElement('track');
5064 newTrack.kind = track.kind;
5065 newTrack.label = track.label;
5066 newTrack.srclang = track.srclang;
5067 newTrack.src = track.src;
5068
5069 node.appendChild(newTrack);
5070 newTrack.addEventListener('load', function () {
5071 this.mode = 'showing';
5072 node.textTracks[_i4].mode = 'showing';
5073 });
5074 };
5075
5076 for (var _i4 = 0, _total4 = t.trackFiles.length; _i4 < _total4; _i4++) {
5077 _loop3(_i4, _total4);
5078 }
5079 }
5080
5081 delete t.node;
5082 delete t.mediaFiles;
5083 delete t.trackFiles;
5084 })();
5085 } else {
5086 t.container.parentNode.insertBefore(t.node, t.container);
5087 }
5088
5089 if (typeof t.media.renderer.destroy === 'function') {
5090 t.media.renderer.destroy();
5091 }
5092
5093 delete _mejs2.default.players[t.id];
5094
5095 if (_typeof(t.container) === 'object') {
5096 var offscreen = t.container.parentNode.querySelector('.' + t.options.classPrefix + 'offscreen');
5097 offscreen.remove();
5098 t.container.remove();
5099 }
5100 t.globalUnbind('resize', t.globalResizeCallback);
5101 t.globalUnbind('keydown', t.globalKeydownCallback);
5102 t.globalUnbind('click', t.globalClickCallback);
5103
5104 delete t.media.player;
5105 }
5106 }, {
5107 key: 'paused',
5108 get: function get() {
5109 return this.proxy.paused;
5110 }
5111 }, {
5112 key: 'muted',
5113 get: function get() {
5114 return this.proxy.muted;
5115 },
5116 set: function set(muted) {
5117 this.setMuted(muted);
5118 }
5119 }, {
5120 key: 'ended',
5121 get: function get() {
5122 return this.proxy.ended;
5123 }
5124 }, {
5125 key: 'readyState',
5126 get: function get() {
5127 return this.proxy.readyState;
5128 }
5129 }, {
5130 key: 'currentTime',
5131 set: function set(time) {
5132 this.setCurrentTime(time);
5133 },
5134 get: function get() {
5135 return this.getCurrentTime();
5136 }
5137 }, {
5138 key: 'duration',
5139 get: function get() {
5140 return this.getDuration();
5141 }
5142 }, {
5143 key: 'volume',
5144 set: function set(volume) {
5145 this.setVolume(volume);
5146 },
5147 get: function get() {
5148 return this.getVolume();
5149 }
5150 }, {
5151 key: 'src',
5152 set: function set(src) {
5153 this.setSrc(src);
5154 },
5155 get: function get() {
5156 return this.getSrc();
5157 }
5158 }]);
5159
5160 return MediaElementPlayer;
5161 }();
5162
5163 _window2.default.MediaElementPlayer = MediaElementPlayer;
5164
5165 exports.default = MediaElementPlayer;
5166
5167 },{"17":17,"2":2,"25":25,"26":26,"27":27,"28":28,"3":3,"30":30,"5":5,"6":6,"7":7}],17:[function(_dereq_,module,exports){
5168 'use strict';
5169
5170 Object.defineProperty(exports, "__esModule", {
5171 value: true
5172 });
5173
5174 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
5175
5176 var _window = _dereq_(3);
5177
5178 var _window2 = _interopRequireDefault(_window);
5179
5180 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5181
5182 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
5183
5184 var DefaultPlayer = function () {
5185 function DefaultPlayer(player) {
5186 _classCallCheck(this, DefaultPlayer);
5187
5188 this.media = player.media;
5189 this.isVideo = player.isVideo;
5190 this.classPrefix = player.options.classPrefix;
5191 this.createIframeLayer = function () {
5192 return player.createIframeLayer();
5193 };
5194 this.setPoster = function (url) {
5195 return player.setPoster(url);
5196 };
5197 return this;
5198 }
5199
5200 _createClass(DefaultPlayer, [{
5201 key: 'play',
5202 value: function play() {
5203 this.media.play();
5204 }
5205 }, {
5206 key: 'pause',
5207 value: function pause() {
5208 this.media.pause();
5209 }
5210 }, {
5211 key: 'load',
5212 value: function load() {
5213 var t = this;
5214
5215 if (!t.isLoaded) {
5216 t.media.load();
5217 }
5218
5219 t.isLoaded = true;
5220 }
5221 }, {
5222 key: 'setCurrentTime',
5223 value: function setCurrentTime(time) {
5224 this.media.setCurrentTime(time);
5225 }
5226 }, {
5227 key: 'getCurrentTime',
5228 value: function getCurrentTime() {
5229 return this.media.currentTime;
5230 }
5231 }, {
5232 key: 'getDuration',
5233 value: function getDuration() {
5234 return this.media.getDuration();
5235 }
5236 }, {
5237 key: 'setVolume',
5238 value: function setVolume(volume) {
5239 this.media.setVolume(volume);
5240 }
5241 }, {
5242 key: 'getVolume',
5243 value: function getVolume() {
5244 return this.media.getVolume();
5245 }
5246 }, {
5247 key: 'setMuted',
5248 value: function setMuted(value) {
5249 this.media.setMuted(value);
5250 }
5251 }, {
5252 key: 'setSrc',
5253 value: function setSrc(src) {
5254 var t = this,
5255 layer = document.getElementById(t.media.id + '-iframe-overlay');
5256
5257 if (layer) {
5258 layer.remove();
5259 }
5260
5261 t.media.setSrc(src);
5262 t.createIframeLayer();
5263 if (t.media.renderer !== null && typeof t.media.renderer.getPosterUrl === 'function') {
5264 t.setPoster(t.media.renderer.getPosterUrl());
5265 }
5266 }
5267 }, {
5268 key: 'getSrc',
5269 value: function getSrc() {
5270 return this.media.getSrc();
5271 }
5272 }, {
5273 key: 'canPlayType',
5274 value: function canPlayType(type) {
5275 return this.media.canPlayType(type);
5276 }
5277 }, {
5278 key: 'paused',
5279 get: function get() {
5280 return this.media.paused;
5281 }
5282 }, {
5283 key: 'muted',
5284 set: function set(muted) {
5285 this.setMuted(muted);
5286 },
5287 get: function get() {
5288 return this.media.muted;
5289 }
5290 }, {
5291 key: 'ended',
5292 get: function get() {
5293 return this.media.ended;
5294 }
5295 }, {
5296 key: 'readyState',
5297 get: function get() {
5298 return this.media.readyState;
5299 }
5300 }, {
5301 key: 'currentTime',
5302 set: function set(time) {
5303 this.setCurrentTime(time);
5304 },
5305 get: function get() {
5306 return this.getCurrentTime();
5307 }
5308 }, {
5309 key: 'duration',
5310 get: function get() {
5311 return this.getDuration();
5312 }
5313 }, {
5314 key: 'volume',
5315 set: function set(volume) {
5316 this.setVolume(volume);
5317 },
5318 get: function get() {
5319 return this.getVolume();
5320 }
5321 }, {
5322 key: 'src',
5323 set: function set(src) {
5324 this.setSrc(src);
5325 },
5326 get: function get() {
5327 return this.getSrc();
5328 }
5329 }]);
5330
5331 return DefaultPlayer;
5332 }();
5333
5334 exports.default = DefaultPlayer;
5335
5336
5337 _window2.default.DefaultPlayer = DefaultPlayer;
5338
5339 },{"3":3}],18:[function(_dereq_,module,exports){
5340 'use strict';
5341
5342 var _window = _dereq_(3);
5343
5344 var _window2 = _interopRequireDefault(_window);
5345
5346 var _mejs = _dereq_(7);
5347
5348 var _mejs2 = _interopRequireDefault(_mejs);
5349
5350 var _player = _dereq_(16);
5351
5352 var _player2 = _interopRequireDefault(_player);
5353
5354 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5355
5356 if (typeof jQuery !== 'undefined') {
5357 _mejs2.default.$ = _window2.default.jQuery = _window2.default.$ = jQuery;
5358 } else if (typeof Zepto !== 'undefined') {
5359 _mejs2.default.$ = _window2.default.Zepto = _window2.default.$ = Zepto;
5360 } else if (typeof ender !== 'undefined') {
5361 _mejs2.default.$ = _window2.default.ender = _window2.default.$ = ender;
5362 }
5363
5364 (function ($) {
5365 if (typeof $ !== 'undefined') {
5366 $.fn.mediaelementplayer = function (options) {
5367 if (options === false) {
5368 this.each(function () {
5369 var player = $(this).data('mediaelementplayer');
5370 if (player) {
5371 player.remove();
5372 }
5373 $(this).removeData('mediaelementplayer');
5374 });
5375 } else {
5376 this.each(function () {
5377 $(this).data('mediaelementplayer', new _player2.default(this, options));
5378 });
5379 }
5380 return this;
5381 };
5382
5383 $(document).ready(function () {
5384 $('.' + _mejs2.default.MepDefaults.classPrefix + 'player').mediaelementplayer();
5385 });
5386 }
5387 })(_mejs2.default.$);
5388
5389 },{"16":16,"3":3,"7":7}],19:[function(_dereq_,module,exports){
5390 'use strict';
5391
5392 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
5393
5394 var _window = _dereq_(3);
5395
5396 var _window2 = _interopRequireDefault(_window);
5397
5398 var _mejs = _dereq_(7);
5399
5400 var _mejs2 = _interopRequireDefault(_mejs);
5401
5402 var _renderer = _dereq_(8);
5403
5404 var _general = _dereq_(27);
5405
5406 var _media = _dereq_(28);
5407
5408 var _constants = _dereq_(25);
5409
5410 var _dom = _dereq_(26);
5411
5412 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5413
5414 var NativeDash = {
5415
5416 promise: null,
5417
5418 load: function load(settings) {
5419 if (typeof dashjs !== 'undefined') {
5420 NativeDash.promise = new Promise(function (resolve) {
5421 resolve();
5422 }).then(function () {
5423 NativeDash._createPlayer(settings);
5424 });
5425 } else {
5426 settings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdn.dashjs.org/latest/dash.all.min.js';
5427
5428 NativeDash.promise = NativeDash.promise || (0, _dom.loadScript)(settings.options.path);
5429 NativeDash.promise.then(function () {
5430 NativeDash._createPlayer(settings);
5431 });
5432 }
5433
5434 return NativeDash.promise;
5435 },
5436
5437 _createPlayer: function _createPlayer(settings) {
5438 var player = dashjs.MediaPlayer().create();
5439 _window2.default['__ready__' + settings.id](player);
5440 return player;
5441 }
5442 };
5443
5444 var DashNativeRenderer = {
5445 name: 'native_dash',
5446 options: {
5447 prefix: 'native_dash',
5448 dash: {
5449 path: 'https://cdn.dashjs.org/latest/dash.all.min.js',
5450 debug: false,
5451 drm: {},
5452
5453 robustnessLevel: ''
5454 }
5455 },
5456
5457 canPlayType: function canPlayType(type) {
5458 return _constants.HAS_MSE && ['application/dash+xml'].indexOf(type.toLowerCase()) > -1;
5459 },
5460
5461 create: function create(mediaElement, options, mediaFiles) {
5462
5463 var originalNode = mediaElement.originalNode,
5464 id = mediaElement.id + '_' + options.prefix,
5465 autoplay = originalNode.autoplay,
5466 children = originalNode.children;
5467
5468 var node = null,
5469 dashPlayer = null;
5470
5471 originalNode.removeAttribute('type');
5472 for (var i = 0, total = children.length; i < total; i++) {
5473 children[i].removeAttribute('type');
5474 }
5475
5476 node = originalNode.cloneNode(true);
5477 options = Object.assign(options, mediaElement.options);
5478
5479 var props = _mejs2.default.html5media.properties,
5480 events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']),
5481 attachNativeEvents = function attachNativeEvents(e) {
5482 if (e.type !== 'error') {
5483 var _event = (0, _general.createEvent)(e.type, mediaElement);
5484 mediaElement.dispatchEvent(_event);
5485 }
5486 },
5487 assignGettersSetters = function assignGettersSetters(propName) {
5488 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
5489
5490 node['get' + capName] = function () {
5491 return dashPlayer !== null ? node[propName] : null;
5492 };
5493
5494 node['set' + capName] = function (value) {
5495 if (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) {
5496 if (propName === 'src') {
5497 var source = (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src ? value.src : value;
5498 node[propName] = source;
5499 if (dashPlayer !== null) {
5500 dashPlayer.reset();
5501 for (var _i = 0, _total = events.length; _i < _total; _i++) {
5502 node.removeEventListener(events[_i], attachNativeEvents);
5503 }
5504 dashPlayer = NativeDash._createPlayer({
5505 options: options.dash,
5506 id: id
5507 });
5508
5509 if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && _typeof(value.drm) === 'object') {
5510 dashPlayer.setProtectionData(value.drm);
5511 if ((0, _general.isString)(options.dash.robustnessLevel) && options.dash.robustnessLevel) {
5512 dashPlayer.getProtectionController().setRobustnessLevel(options.dash.robustnessLevel);
5513 }
5514 }
5515 dashPlayer.attachSource(source);
5516 if (autoplay) {
5517 dashPlayer.play();
5518 }
5519 }
5520 } else {
5521 node[propName] = value;
5522 }
5523 }
5524 };
5525 };
5526
5527 for (var _i2 = 0, _total2 = props.length; _i2 < _total2; _i2++) {
5528 assignGettersSetters(props[_i2]);
5529 }
5530
5531 _window2.default['__ready__' + id] = function (_dashPlayer) {
5532 mediaElement.dashPlayer = dashPlayer = _dashPlayer;
5533
5534 var dashEvents = dashjs.MediaPlayer.events,
5535 assignEvents = function assignEvents(eventName) {
5536 if (eventName === 'loadedmetadata') {
5537 dashPlayer.getDebug().setLogToBrowserConsole(options.dash.debug);
5538 dashPlayer.initialize();
5539 dashPlayer.setScheduleWhilePaused(false);
5540 dashPlayer.setFastSwitchEnabled(true);
5541 dashPlayer.attachView(node);
5542 dashPlayer.setAutoPlay(false);
5543
5544 if (_typeof(options.dash.drm) === 'object' && !_mejs2.default.Utils.isObjectEmpty(options.dash.drm)) {
5545 dashPlayer.setProtectionData(options.dash.drm);
5546 if ((0, _general.isString)(options.dash.robustnessLevel) && options.dash.robustnessLevel) {
5547 dashPlayer.getProtectionController().setRobustnessLevel(options.dash.robustnessLevel);
5548 }
5549 }
5550 dashPlayer.attachSource(node.getSrc());
5551 }
5552
5553 node.addEventListener(eventName, attachNativeEvents);
5554 };
5555
5556 for (var _i3 = 0, _total3 = events.length; _i3 < _total3; _i3++) {
5557 assignEvents(events[_i3]);
5558 }
5559
5560 var assignMdashEvents = function assignMdashEvents(name, data) {
5561 if (name.toLowerCase() === 'error') {
5562 mediaElement.generateError(data.message, node.src);
5563 console.error(data);
5564 } else {
5565 var _event2 = (0, _general.createEvent)(name, mediaElement);
5566 _event2.data = data;
5567 mediaElement.dispatchEvent(_event2);
5568 }
5569 };
5570
5571 for (var eventType in dashEvents) {
5572 if (dashEvents.hasOwnProperty(eventType)) {
5573 dashPlayer.on(dashEvents[eventType], function (e) {
5574 for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
5575 args[_key - 1] = arguments[_key];
5576 }
5577
5578 return assignMdashEvents(e.type, args);
5579 });
5580 }
5581 }
5582 };
5583
5584 if (mediaFiles && mediaFiles.length > 0) {
5585 for (var _i4 = 0, _total4 = mediaFiles.length; _i4 < _total4; _i4++) {
5586 if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[_i4].type)) {
5587 node.setAttribute('src', mediaFiles[_i4].src);
5588 if (typeof mediaFiles[_i4].drm !== 'undefined') {
5589 options.dash.drm = mediaFiles[_i4].drm;
5590 }
5591 break;
5592 }
5593 }
5594 }
5595
5596 node.setAttribute('id', id);
5597
5598 originalNode.parentNode.insertBefore(node, originalNode);
5599 originalNode.autoplay = false;
5600 originalNode.style.display = 'none';
5601
5602 node.setSize = function (width, height) {
5603 node.style.width = width + 'px';
5604 node.style.height = height + 'px';
5605 return node;
5606 };
5607
5608 node.hide = function () {
5609 node.pause();
5610 node.style.display = 'none';
5611 return node;
5612 };
5613
5614 node.show = function () {
5615 node.style.display = '';
5616 return node;
5617 };
5618
5619 node.destroy = function () {
5620 if (dashPlayer !== null) {
5621 dashPlayer.reset();
5622 }
5623 };
5624
5625 var event = (0, _general.createEvent)('rendererready', node);
5626 mediaElement.dispatchEvent(event);
5627
5628 mediaElement.promises.push(NativeDash.load({
5629 options: options.dash,
5630 id: id
5631 }));
5632
5633 return node;
5634 }
5635 };
5636
5637 _media.typeChecks.push(function (url) {
5638 return ~url.toLowerCase().indexOf('.mpd') ? 'application/dash+xml' : null;
5639 });
5640
5641 _renderer.renderer.add(DashNativeRenderer);
5642
5643 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],20:[function(_dereq_,module,exports){
5644 'use strict';
5645
5646 Object.defineProperty(exports, "__esModule", {
5647 value: true
5648 });
5649 exports.PluginDetector = undefined;
5650
5651 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
5652
5653 var _window = _dereq_(3);
5654
5655 var _window2 = _interopRequireDefault(_window);
5656
5657 var _document = _dereq_(2);
5658
5659 var _document2 = _interopRequireDefault(_document);
5660
5661 var _mejs = _dereq_(7);
5662
5663 var _mejs2 = _interopRequireDefault(_mejs);
5664
5665 var _i18n = _dereq_(5);
5666
5667 var _i18n2 = _interopRequireDefault(_i18n);
5668
5669 var _renderer = _dereq_(8);
5670
5671 var _general = _dereq_(27);
5672
5673 var _constants = _dereq_(25);
5674
5675 var _media = _dereq_(28);
5676
5677 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5678
5679 var PluginDetector = exports.PluginDetector = {
5680 plugins: [],
5681
5682 hasPluginVersion: function hasPluginVersion(plugin, v) {
5683 var pv = PluginDetector.plugins[plugin];
5684 v[1] = v[1] || 0;
5685 v[2] = v[2] || 0;
5686 return pv[0] > v[0] || pv[0] === v[0] && pv[1] > v[1] || pv[0] === v[0] && pv[1] === v[1] && pv[2] >= v[2];
5687 },
5688
5689 addPlugin: function addPlugin(p, pluginName, mimeType, activeX, axDetect) {
5690 PluginDetector.plugins[p] = PluginDetector.detectPlugin(pluginName, mimeType, activeX, axDetect);
5691 },
5692
5693 detectPlugin: function detectPlugin(pluginName, mimeType, activeX, axDetect) {
5694
5695 var version = [0, 0, 0],
5696 description = void 0,
5697 ax = void 0;
5698
5699 if (_constants.NAV.plugins !== null && _constants.NAV.plugins !== undefined && _typeof(_constants.NAV.plugins[pluginName]) === 'object') {
5700 description = _constants.NAV.plugins[pluginName].description;
5701 if (description && !(typeof _constants.NAV.mimeTypes !== 'undefined' && _constants.NAV.mimeTypes[mimeType] && !_constants.NAV.mimeTypes[mimeType].enabledPlugin)) {
5702 version = description.replace(pluginName, '').replace(/^\s+/, '').replace(/\sr/gi, '.').split('.');
5703 for (var i = 0, total = version.length; i < total; i++) {
5704 version[i] = parseInt(version[i].match(/\d+/), 10);
5705 }
5706 }
5707 } else if (_window2.default.ActiveXObject !== undefined) {
5708 try {
5709 ax = new ActiveXObject(activeX);
5710 if (ax) {
5711 version = axDetect(ax);
5712 }
5713 } catch (e) {
5714
5715 }
5716 }
5717 return version;
5718 }
5719 };
5720
5721 PluginDetector.addPlugin('flash', 'Shockwave Flash', 'application/x-shockwave-flash', 'ShockwaveFlash.ShockwaveFlash', function (ax) {
5722 var version = [],
5723 d = ax.GetVariable("$version");
5724
5725 if (d) {
5726 d = d.split(" ")[1].split(",");
5727 version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
5728 }
5729 return version;
5730 });
5731
5732 var FlashMediaElementRenderer = {
5733 create: function create(mediaElement, options, mediaFiles) {
5734
5735 var flash = {};
5736
5737 flash.options = options;
5738 flash.id = mediaElement.id + '_' + flash.options.prefix;
5739 flash.mediaElement = mediaElement;
5740 flash.flashState = {};
5741 flash.flashApi = null;
5742 flash.flashApiStack = [];
5743
5744 var props = _mejs2.default.html5media.properties,
5745 assignGettersSetters = function assignGettersSetters(propName) {
5746 flash.flashState[propName] = null;
5747
5748 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
5749
5750 flash['get' + capName] = function () {
5751 if (flash.flashApi !== null) {
5752 if (typeof flash.flashApi['get_' + propName] === 'function') {
5753 var value = flash.flashApi['get_' + propName]();
5754
5755 if (propName === 'buffered') {
5756 return {
5757 start: function start() {
5758 return 0;
5759 },
5760 end: function end() {
5761 return value;
5762 },
5763 length: 1
5764 };
5765 }
5766 return value;
5767 } else {
5768 return null;
5769 }
5770 } else {
5771 return null;
5772 }
5773 };
5774
5775 flash['set' + capName] = function (value) {
5776 if (propName === 'src') {
5777 value = (0, _media.absolutizeUrl)(value);
5778 }
5779
5780 if (flash.flashApi !== null && flash.flashApi['set_' + propName] !== undefined) {
5781 try {
5782 flash.flashApi['set_' + propName](value);
5783 } catch (e) {
5784
5785 }
5786 } else {
5787 flash.flashApiStack.push({
5788 type: 'set',
5789 propName: propName,
5790 value: value
5791 });
5792 }
5793 };
5794 };
5795
5796 for (var i = 0, total = props.length; i < total; i++) {
5797 assignGettersSetters(props[i]);
5798 }
5799
5800 var methods = _mejs2.default.html5media.methods,
5801 assignMethods = function assignMethods(methodName) {
5802 flash[methodName] = function () {
5803 if (flash.flashApi !== null) {
5804 if (flash.flashApi['fire_' + methodName]) {
5805 try {
5806 flash.flashApi['fire_' + methodName]();
5807 } catch (e) {
5808
5809 }
5810 } else {
5811
5812 }
5813 } else {
5814 flash.flashApiStack.push({
5815 type: 'call',
5816 methodName: methodName
5817 });
5818 }
5819 };
5820 };
5821 methods.push('stop');
5822 for (var _i = 0, _total = methods.length; _i < _total; _i++) {
5823 assignMethods(methods[_i]);
5824 }
5825
5826 var initEvents = ['rendererready'];
5827
5828 for (var _i2 = 0, _total2 = initEvents.length; _i2 < _total2; _i2++) {
5829 var event = (0, _general.createEvent)(initEvents[_i2], flash);
5830 mediaElement.dispatchEvent(event);
5831 }
5832
5833 _window2.default['__ready__' + flash.id] = function () {
5834
5835 flash.flashReady = true;
5836 flash.flashApi = _document2.default.getElementById('__' + flash.id);
5837
5838 if (flash.flashApiStack.length) {
5839 for (var _i3 = 0, _total3 = flash.flashApiStack.length; _i3 < _total3; _i3++) {
5840 var stackItem = flash.flashApiStack[_i3];
5841
5842 if (stackItem.type === 'set') {
5843 var propName = stackItem.propName,
5844 capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
5845
5846 flash['set' + capName](stackItem.value);
5847 } else if (stackItem.type === 'call') {
5848 flash[stackItem.methodName]();
5849 }
5850 }
5851 }
5852 };
5853
5854 _window2.default['__event__' + flash.id] = function (eventName, message) {
5855 var event = (0, _general.createEvent)(eventName, flash);
5856 if (message) {
5857 try {
5858 event.data = JSON.parse(message);
5859 event.details.data = JSON.parse(message);
5860 } catch (e) {
5861 event.message = message;
5862 }
5863 }
5864
5865 flash.mediaElement.dispatchEvent(event);
5866 };
5867
5868 flash.flashWrapper = _document2.default.createElement('div');
5869
5870 if (['always', 'sameDomain'].indexOf(flash.options.shimScriptAccess) === -1) {
5871 flash.options.shimScriptAccess = 'sameDomain';
5872 }
5873
5874 var autoplay = mediaElement.originalNode.autoplay,
5875 flashVars = ['uid=' + flash.id, 'autoplay=' + autoplay, 'allowScriptAccess=' + flash.options.shimScriptAccess, 'preload=' + (mediaElement.originalNode.getAttribute('preload') || '')],
5876 isVideo = mediaElement.originalNode !== null && mediaElement.originalNode.tagName.toLowerCase() === 'video',
5877 flashHeight = isVideo ? mediaElement.originalNode.height : 1,
5878 flashWidth = isVideo ? mediaElement.originalNode.width : 1;
5879
5880 if (mediaElement.originalNode.getAttribute('src')) {
5881 flashVars.push('src=' + mediaElement.originalNode.getAttribute('src'));
5882 }
5883
5884 if (flash.options.enablePseudoStreaming === true) {
5885 flashVars.push('pseudostreamstart=' + flash.options.pseudoStreamingStartQueryParam);
5886 flashVars.push('pseudostreamtype=' + flash.options.pseudoStreamingType);
5887 }
5888
5889 mediaElement.appendChild(flash.flashWrapper);
5890 mediaElement.originalNode.style.display = 'none';
5891
5892 var settings = [];
5893
5894 if (_constants.IS_IE) {
5895 var specialIEContainer = _document2.default.createElement('div');
5896 flash.flashWrapper.appendChild(specialIEContainer);
5897
5898 settings = ['classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"', 'codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"', 'id="__' + flash.id + '"', 'width="' + flashWidth + '"', 'height="' + flashHeight + '"'];
5899
5900 if (!isVideo) {
5901 settings.push('style="clip: rect(0 0 0 0); position: absolute;"');
5902 }
5903
5904 specialIEContainer.outerHTML = '<object ' + settings.join(' ') + '>' + ('<param name="movie" value="' + flash.options.pluginPath + flash.options.filename + '?x=' + new Date() + '" />') + ('<param name="flashvars" value="' + flashVars.join('&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>';
5905 } else {
5906
5907 settings = ['id="__' + flash.id + '"', 'name="__' + flash.id + '"', 'play="true"', 'loop="false"', 'quality="high"', 'bgcolor="#000000"', 'wmode="transparent"', 'allowScriptAccess="' + flash.options.shimScriptAccess + '"', 'allowFullScreen="true"', 'type="application/x-shockwave-flash"', 'pluginspage="//www.macromedia.com/go/getflashplayer"', 'src="' + flash.options.pluginPath + flash.options.filename + '"', 'flashvars="' + flashVars.join('&') + '"', 'width="' + flashWidth + '"', 'height="' + flashHeight + '"'];
5908
5909 if (!isVideo) {
5910 settings.push('style="clip: rect(0 0 0 0); position: absolute;"');
5911 }
5912
5913 flash.flashWrapper.innerHTML = '<embed ' + settings.join(' ') + '>';
5914 }
5915
5916 flash.flashNode = flash.flashWrapper.lastChild;
5917
5918 flash.hide = function () {
5919 if (isVideo) {
5920 flash.flashNode.style.display = 'none';
5921 }
5922 };
5923 flash.show = function () {
5924 if (isVideo) {
5925 flash.flashNode.style.display = '';
5926 }
5927 };
5928 flash.setSize = function (width, height) {
5929 flash.flashNode.style.width = width + 'px';
5930 flash.flashNode.style.height = height + 'px';
5931
5932 if (flash.flashApi !== null && typeof flash.flashApi.fire_setSize === 'function') {
5933 flash.flashApi.fire_setSize(width, height);
5934 }
5935 };
5936
5937 flash.destroy = function () {
5938 flash.flashNode.remove();
5939 };
5940
5941 if (mediaFiles && mediaFiles.length > 0) {
5942 for (var _i4 = 0, _total4 = mediaFiles.length; _i4 < _total4; _i4++) {
5943 if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[_i4].type)) {
5944 flash.setSrc(mediaFiles[_i4].src);
5945 break;
5946 }
5947 }
5948 }
5949
5950 return flash;
5951 }
5952 };
5953
5954 var hasFlash = PluginDetector.hasPluginVersion('flash', [10, 0, 0]);
5955
5956 if (hasFlash) {
5957 _media.typeChecks.push(function (url) {
5958 url = url.toLowerCase();
5959
5960 if (url.startsWith('rtmp')) {
5961 if (~url.indexOf('.mp3')) {
5962 return 'audio/rtmp';
5963 } else {
5964 return 'video/rtmp';
5965 }
5966 } else if (/\.og(a|g)/i.test(url)) {
5967 return 'audio/ogg';
5968 } else if (~url.indexOf('.m3u8')) {
5969 return 'application/x-mpegURL';
5970 } else if (~url.indexOf('.mpd')) {
5971 return 'application/dash+xml';
5972 } else if (~url.indexOf('.flv')) {
5973 return 'video/flv';
5974 } else {
5975 return null;
5976 }
5977 });
5978
5979 var FlashMediaElementVideoRenderer = {
5980 name: 'flash_video',
5981 options: {
5982 prefix: 'flash_video',
5983 filename: 'mediaelement-flash-video.swf',
5984 enablePseudoStreaming: false,
5985
5986 pseudoStreamingStartQueryParam: 'start',
5987
5988 pseudoStreamingType: 'byte'
5989 },
5990
5991 canPlayType: function canPlayType(type) {
5992 return ~['video/mp4', 'video/rtmp', 'audio/rtmp', 'rtmp/mp4', 'audio/mp4', 'video/flv', 'video/x-flv'].indexOf(type.toLowerCase());
5993 },
5994
5995 create: FlashMediaElementRenderer.create
5996
5997 };
5998 _renderer.renderer.add(FlashMediaElementVideoRenderer);
5999
6000 var FlashMediaElementHlsVideoRenderer = {
6001 name: 'flash_hls',
6002 options: {
6003 prefix: 'flash_hls',
6004 filename: 'mediaelement-flash-video-hls.swf'
6005 },
6006
6007 canPlayType: function canPlayType(type) {
6008 return ~['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type.toLowerCase());
6009 },
6010
6011 create: FlashMediaElementRenderer.create
6012 };
6013 _renderer.renderer.add(FlashMediaElementHlsVideoRenderer);
6014
6015 var FlashMediaElementMdashVideoRenderer = {
6016 name: 'flash_dash',
6017 options: {
6018 prefix: 'flash_dash',
6019 filename: 'mediaelement-flash-video-mdash.swf'
6020 },
6021
6022 canPlayType: function canPlayType(type) {
6023 return ~['application/dash+xml'].indexOf(type.toLowerCase());
6024 },
6025
6026 create: FlashMediaElementRenderer.create
6027 };
6028 _renderer.renderer.add(FlashMediaElementMdashVideoRenderer);
6029
6030 var FlashMediaElementAudioRenderer = {
6031 name: 'flash_audio',
6032 options: {
6033 prefix: 'flash_audio',
6034 filename: 'mediaelement-flash-audio.swf'
6035 },
6036
6037 canPlayType: function canPlayType(type) {
6038 return ~['audio/mp3'].indexOf(type.toLowerCase());
6039 },
6040
6041 create: FlashMediaElementRenderer.create
6042 };
6043 _renderer.renderer.add(FlashMediaElementAudioRenderer);
6044
6045 var FlashMediaElementAudioOggRenderer = {
6046 name: 'flash_audio_ogg',
6047 options: {
6048 prefix: 'flash_audio_ogg',
6049 filename: 'mediaelement-flash-audio-ogg.swf'
6050 },
6051
6052 canPlayType: function canPlayType(type) {
6053 return ~['audio/ogg', 'audio/oga', 'audio/ogv'].indexOf(type.toLowerCase());
6054 },
6055
6056 create: FlashMediaElementRenderer.create
6057 };
6058 _renderer.renderer.add(FlashMediaElementAudioOggRenderer);
6059 }
6060
6061 },{"2":2,"25":25,"27":27,"28":28,"3":3,"5":5,"7":7,"8":8}],21:[function(_dereq_,module,exports){
6062 'use strict';
6063
6064 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
6065
6066 var _window = _dereq_(3);
6067
6068 var _window2 = _interopRequireDefault(_window);
6069
6070 var _mejs = _dereq_(7);
6071
6072 var _mejs2 = _interopRequireDefault(_mejs);
6073
6074 var _renderer = _dereq_(8);
6075
6076 var _general = _dereq_(27);
6077
6078 var _constants = _dereq_(25);
6079
6080 var _media = _dereq_(28);
6081
6082 var _dom = _dereq_(26);
6083
6084 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6085
6086 var NativeFlv = {
6087
6088 promise: null,
6089
6090 load: function load(settings) {
6091 if (typeof flvjs !== 'undefined') {
6092 NativeFlv.promise = new Promise(function (resolve) {
6093 resolve();
6094 }).then(function () {
6095 NativeFlv._createPlayer(settings);
6096 });
6097 } else {
6098 settings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdnjs.cloudflare.com/ajax/libs/flv.js/1.3.2/flv.min.js';
6099
6100 NativeFlv.promise = NativeFlv.promise || (0, _dom.loadScript)(settings.options.path);
6101 NativeFlv.promise.then(function () {
6102 NativeFlv._createPlayer(settings);
6103 });
6104 }
6105
6106 return NativeFlv.promise;
6107 },
6108
6109 _createPlayer: function _createPlayer(settings) {
6110 flvjs.LoggingControl.enableDebug = settings.options.debug;
6111 flvjs.LoggingControl.enableVerbose = settings.options.debug;
6112 var player = flvjs.createPlayer(settings.options);
6113 _window2.default['__ready__' + settings.id](player);
6114 return player;
6115 }
6116 };
6117
6118 var FlvNativeRenderer = {
6119 name: 'native_flv',
6120 options: {
6121 prefix: 'native_flv',
6122 flv: {
6123 path: 'https://cdnjs.cloudflare.com/ajax/libs/flv.js/1.3.2/flv.min.js',
6124
6125 cors: true,
6126 debug: false
6127 }
6128 },
6129
6130 canPlayType: function canPlayType(type) {
6131 return _constants.HAS_MSE && ['video/x-flv', 'video/flv'].indexOf(type.toLowerCase()) > -1;
6132 },
6133
6134 create: function create(mediaElement, options, mediaFiles) {
6135
6136 var originalNode = mediaElement.originalNode,
6137 id = mediaElement.id + '_' + options.prefix;
6138
6139 var node = null,
6140 flvPlayer = null;
6141
6142 node = originalNode.cloneNode(true);
6143 options = Object.assign(options, mediaElement.options);
6144
6145 var props = _mejs2.default.html5media.properties,
6146 events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']),
6147 attachNativeEvents = function attachNativeEvents(e) {
6148 if (e.type !== 'error') {
6149 var _event = (0, _general.createEvent)(e.type, mediaElement);
6150 mediaElement.dispatchEvent(_event);
6151 }
6152 },
6153 assignGettersSetters = function assignGettersSetters(propName) {
6154 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
6155
6156 node['get' + capName] = function () {
6157 return flvPlayer !== null ? node[propName] : null;
6158 };
6159
6160 node['set' + capName] = function (value) {
6161 if (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) {
6162 if (propName === 'src') {
6163 node[propName] = (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src ? value.src : value;
6164 if (flvPlayer !== null) {
6165 var _flvOptions = {};
6166 _flvOptions.type = 'flv';
6167 _flvOptions.url = value;
6168 _flvOptions.cors = options.flv.cors;
6169 _flvOptions.debug = options.flv.debug;
6170 _flvOptions.path = options.flv.path;
6171
6172 flvPlayer.destroy();
6173 for (var i = 0, total = events.length; i < total; i++) {
6174 node.removeEventListener(events[i], attachNativeEvents);
6175 }
6176 flvPlayer = NativeFlv._createPlayer({
6177 options: _flvOptions,
6178 id: id
6179 });
6180 flvPlayer.attachMediaElement(node);
6181 flvPlayer.load();
6182 }
6183 } else {
6184 node[propName] = value;
6185 }
6186 }
6187 };
6188 };
6189
6190 for (var i = 0, total = props.length; i < total; i++) {
6191 assignGettersSetters(props[i]);
6192 }
6193
6194 _window2.default['__ready__' + id] = function (_flvPlayer) {
6195 mediaElement.flvPlayer = flvPlayer = _flvPlayer;
6196
6197 var flvEvents = flvjs.Events,
6198 assignEvents = function assignEvents(eventName) {
6199 if (eventName === 'loadedmetadata') {
6200 flvPlayer.unload();
6201 flvPlayer.detachMediaElement();
6202 flvPlayer.attachMediaElement(node);
6203 flvPlayer.load();
6204 }
6205
6206 node.addEventListener(eventName, attachNativeEvents);
6207 };
6208
6209 for (var _i = 0, _total = events.length; _i < _total; _i++) {
6210 assignEvents(events[_i]);
6211 }
6212
6213 var assignFlvEvents = function assignFlvEvents(name, data) {
6214 if (name === 'error') {
6215 var message = data[0] + ': ' + data[1] + ' ' + data[2].msg;
6216 mediaElement.generateError(message, node.src);
6217 } else {
6218 var _event2 = (0, _general.createEvent)(name, mediaElement);
6219 _event2.data = data;
6220 mediaElement.dispatchEvent(_event2);
6221 }
6222 };
6223
6224 var _loop = function _loop(eventType) {
6225 if (flvEvents.hasOwnProperty(eventType)) {
6226 flvPlayer.on(flvEvents[eventType], function () {
6227 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
6228 args[_key] = arguments[_key];
6229 }
6230
6231 return assignFlvEvents(flvEvents[eventType], args);
6232 });
6233 }
6234 };
6235
6236 for (var eventType in flvEvents) {
6237 _loop(eventType);
6238 }
6239 };
6240
6241 if (mediaFiles && mediaFiles.length > 0) {
6242 for (var _i2 = 0, _total2 = mediaFiles.length; _i2 < _total2; _i2++) {
6243 if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[_i2].type)) {
6244 node.setAttribute('src', mediaFiles[_i2].src);
6245 break;
6246 }
6247 }
6248 }
6249
6250 node.setAttribute('id', id);
6251
6252 originalNode.parentNode.insertBefore(node, originalNode);
6253 originalNode.autoplay = false;
6254 originalNode.style.display = 'none';
6255
6256 var flvOptions = {};
6257 flvOptions.type = 'flv';
6258 flvOptions.url = node.src;
6259 flvOptions.cors = options.flv.cors;
6260 flvOptions.debug = options.flv.debug;
6261 flvOptions.path = options.flv.path;
6262
6263 node.setSize = function (width, height) {
6264 node.style.width = width + 'px';
6265 node.style.height = height + 'px';
6266 return node;
6267 };
6268
6269 node.hide = function () {
6270 if (flvPlayer !== null) {
6271 flvPlayer.pause();
6272 }
6273 node.style.display = 'none';
6274 return node;
6275 };
6276
6277 node.show = function () {
6278 node.style.display = '';
6279 return node;
6280 };
6281
6282 node.destroy = function () {
6283 if (flvPlayer !== null) {
6284 flvPlayer.destroy();
6285 }
6286 };
6287
6288 var event = (0, _general.createEvent)('rendererready', node);
6289 mediaElement.dispatchEvent(event);
6290
6291 mediaElement.promises.push(NativeFlv.load({
6292 options: flvOptions,
6293 id: id
6294 }));
6295
6296 return node;
6297 }
6298 };
6299
6300 _media.typeChecks.push(function (url) {
6301 return ~url.toLowerCase().indexOf('.flv') ? 'video/flv' : null;
6302 });
6303
6304 _renderer.renderer.add(FlvNativeRenderer);
6305
6306 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],22:[function(_dereq_,module,exports){
6307 'use strict';
6308
6309 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
6310
6311 var _window = _dereq_(3);
6312
6313 var _window2 = _interopRequireDefault(_window);
6314
6315 var _mejs = _dereq_(7);
6316
6317 var _mejs2 = _interopRequireDefault(_mejs);
6318
6319 var _renderer = _dereq_(8);
6320
6321 var _general = _dereq_(27);
6322
6323 var _constants = _dereq_(25);
6324
6325 var _media = _dereq_(28);
6326
6327 var _dom = _dereq_(26);
6328
6329 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6330
6331 var NativeHls = {
6332
6333 promise: null,
6334
6335 load: function load(settings) {
6336 if (typeof Hls !== 'undefined') {
6337 NativeHls.promise = new Promise(function (resolve) {
6338 resolve();
6339 }).then(function () {
6340 NativeHls._createPlayer(settings);
6341 });
6342 } else {
6343 settings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdnjs.cloudflare.com/ajax/libs/hls.js/0.7.11/hls.min.js';
6344
6345 NativeHls.promise = NativeHls.promise || (0, _dom.loadScript)(settings.options.path);
6346 NativeHls.promise.then(function () {
6347 NativeHls._createPlayer(settings);
6348 });
6349 }
6350
6351 return NativeHls.promise;
6352 },
6353
6354 _createPlayer: function _createPlayer(settings) {
6355 var player = new Hls(settings.options);
6356 _window2.default['__ready__' + settings.id](player);
6357 return player;
6358 }
6359 };
6360
6361 var HlsNativeRenderer = {
6362 name: 'native_hls',
6363 options: {
6364 prefix: 'native_hls',
6365 hls: {
6366 path: 'https://cdnjs.cloudflare.com/ajax/libs/hls.js/0.7.11/hls.min.js',
6367
6368 autoStartLoad: false,
6369 debug: false
6370 }
6371 },
6372
6373 canPlayType: function canPlayType(type) {
6374 return _constants.HAS_MSE && ['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type.toLowerCase()) > -1;
6375 },
6376
6377 create: function create(mediaElement, options, mediaFiles) {
6378
6379 var originalNode = mediaElement.originalNode,
6380 id = mediaElement.id + '_' + options.prefix,
6381 preload = originalNode.getAttribute('preload'),
6382 autoplay = originalNode.autoplay;
6383
6384 var hlsPlayer = null,
6385 node = null;
6386
6387 node = originalNode.cloneNode(true);
6388 options = Object.assign(options, mediaElement.options);
6389 options.hls.autoStartLoad = preload && preload !== 'none' || autoplay;
6390
6391 var props = _mejs2.default.html5media.properties,
6392 events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']),
6393 attachNativeEvents = function attachNativeEvents(e) {
6394 if (e.type !== 'error') {
6395 var _event = (0, _general.createEvent)(e.type, mediaElement);
6396 mediaElement.dispatchEvent(_event);
6397 }
6398 },
6399 assignGettersSetters = function assignGettersSetters(propName) {
6400 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
6401
6402 node['get' + capName] = function () {
6403 return hlsPlayer !== null ? node[propName] : null;
6404 };
6405
6406 node['set' + capName] = function (value) {
6407 if (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) {
6408 if (propName === 'src') {
6409 node[propName] = (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src ? value.src : value;
6410 if (hlsPlayer !== null) {
6411 hlsPlayer.destroy();
6412 for (var i = 0, total = events.length; i < total; i++) {
6413 node.removeEventListener(events[i], attachNativeEvents);
6414 }
6415 hlsPlayer = NativeHls._createPlayer({
6416 options: options.hls,
6417 id: id
6418 });
6419 hlsPlayer.loadSource(value);
6420 hlsPlayer.attachMedia(node);
6421 }
6422 } else {
6423 node[propName] = value;
6424 }
6425 }
6426 };
6427 };
6428
6429 for (var i = 0, total = props.length; i < total; i++) {
6430 assignGettersSetters(props[i]);
6431 }
6432
6433 _window2.default['__ready__' + id] = function (_hlsPlayer) {
6434 mediaElement.hlsPlayer = hlsPlayer = _hlsPlayer;
6435 var hlsEvents = Hls.Events,
6436 assignEvents = function assignEvents(eventName) {
6437 if (eventName === 'loadedmetadata') {
6438 var url = mediaElement.originalNode.src;
6439 hlsPlayer.detachMedia();
6440 hlsPlayer.loadSource(url);
6441 hlsPlayer.attachMedia(node);
6442 }
6443
6444 node.addEventListener(eventName, attachNativeEvents);
6445 };
6446
6447 for (var _i = 0, _total = events.length; _i < _total; _i++) {
6448 assignEvents(events[_i]);
6449 }
6450
6451 var recoverDecodingErrorDate = void 0,
6452 recoverSwapAudioCodecDate = void 0;
6453 var assignHlsEvents = function assignHlsEvents(name, data) {
6454 if (name === 'hlsError') {
6455 console.warn(name, data);
6456
6457 if (data.fatal) {
6458 switch (data.type) {
6459 case 'mediaError':
6460 var now = new Date().getTime();
6461 if (!recoverDecodingErrorDate || now - recoverDecodingErrorDate > 3000) {
6462 recoverDecodingErrorDate = new Date().getTime();
6463 hlsPlayer.recoverMediaError();
6464 } else if (!recoverSwapAudioCodecDate || now - recoverSwapAudioCodecDate > 3000) {
6465 recoverSwapAudioCodecDate = new Date().getTime();
6466 console.warn('Attempting to swap Audio Codec and recover from media error');
6467 hlsPlayer.swapAudioCodec();
6468 hlsPlayer.recoverMediaError();
6469 } else {
6470 var _message = 'Cannot recover, last media error recovery failed';
6471 mediaElement.generateError(_message, node.src);
6472 console.error(_message);
6473 }
6474 break;
6475 case 'networkError':
6476 var message = 'Network error';
6477 mediaElement.generateError(message, node.src);
6478 console.error(message);
6479 break;
6480 default:
6481 hlsPlayer.destroy();
6482 break;
6483 }
6484 }
6485 } else {
6486 var _event2 = (0, _general.createEvent)(name, mediaElement);
6487 _event2.data = data;
6488 mediaElement.dispatchEvent(_event2);
6489 }
6490 };
6491
6492 var _loop = function _loop(eventType) {
6493 if (hlsEvents.hasOwnProperty(eventType)) {
6494 hlsPlayer.on(hlsEvents[eventType], function () {
6495 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
6496 args[_key] = arguments[_key];
6497 }
6498
6499 return assignHlsEvents(hlsEvents[eventType], args);
6500 });
6501 }
6502 };
6503
6504 for (var eventType in hlsEvents) {
6505 _loop(eventType);
6506 }
6507 };
6508
6509 if (mediaFiles && mediaFiles.length > 0) {
6510 for (var _i2 = 0, _total2 = mediaFiles.length; _i2 < _total2; _i2++) {
6511 if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[_i2].type)) {
6512 node.setAttribute('src', mediaFiles[_i2].src);
6513 break;
6514 }
6515 }
6516 }
6517
6518 if (preload !== 'auto' && !autoplay) {
6519 node.addEventListener('play', function () {
6520 if (hlsPlayer !== null) {
6521 hlsPlayer.startLoad();
6522 }
6523 });
6524
6525 node.addEventListener('pause', function () {
6526 if (hlsPlayer !== null) {
6527 hlsPlayer.stopLoad();
6528 }
6529 });
6530 }
6531
6532 node.setAttribute('id', id);
6533
6534 originalNode.parentNode.insertBefore(node, originalNode);
6535 originalNode.autoplay = false;
6536 originalNode.style.display = 'none';
6537
6538 node.setSize = function (width, height) {
6539 node.style.width = width + 'px';
6540 node.style.height = height + 'px';
6541 return node;
6542 };
6543
6544 node.hide = function () {
6545 node.pause();
6546 node.style.display = 'none';
6547 return node;
6548 };
6549
6550 node.show = function () {
6551 node.style.display = '';
6552 return node;
6553 };
6554
6555 node.destroy = function () {
6556 if (hlsPlayer !== null) {
6557 hlsPlayer.stopLoad();
6558 hlsPlayer.destroy();
6559 }
6560 };
6561
6562 var event = (0, _general.createEvent)('rendererready', node);
6563 mediaElement.dispatchEvent(event);
6564
6565 mediaElement.promises.push(NativeHls.load({
6566 options: options.hls,
6567 id: id
6568 }));
6569
6570 return node;
6571 }
6572 };
6573
6574 _media.typeChecks.push(function (url) {
6575 return ~url.toLowerCase().indexOf('.m3u8') ? 'application/x-mpegURL' : null;
6576 });
6577
6578 _renderer.renderer.add(HlsNativeRenderer);
6579
6580 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],23:[function(_dereq_,module,exports){
6581 'use strict';
6582
6583 var _window = _dereq_(3);
6584
6585 var _window2 = _interopRequireDefault(_window);
6586
6587 var _document = _dereq_(2);
6588
6589 var _document2 = _interopRequireDefault(_document);
6590
6591 var _mejs = _dereq_(7);
6592
6593 var _mejs2 = _interopRequireDefault(_mejs);
6594
6595 var _renderer = _dereq_(8);
6596
6597 var _general = _dereq_(27);
6598
6599 var _constants = _dereq_(25);
6600
6601 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6602
6603 var HtmlMediaElement = {
6604 name: 'html5',
6605 options: {
6606 prefix: 'html5'
6607 },
6608
6609 canPlayType: function canPlayType(type) {
6610
6611 var mediaElement = _document2.default.createElement('video');
6612
6613 if (_constants.IS_ANDROID && /\/mp(3|4)$/i.test(type) || ~['application/x-mpegurl', 'vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type.toLowerCase()) && _constants.SUPPORTS_NATIVE_HLS) {
6614 return 'yes';
6615 } else if (mediaElement.canPlayType) {
6616 return mediaElement.canPlayType(type.toLowerCase()).replace(/no/, '');
6617 } else {
6618 return '';
6619 }
6620 },
6621
6622 create: function create(mediaElement, options, mediaFiles) {
6623
6624 var id = mediaElement.id + '_' + options.prefix;
6625
6626 var node = null;
6627
6628 if (mediaElement.originalNode === undefined || mediaElement.originalNode === null) {
6629 node = _document2.default.createElement('audio');
6630 mediaElement.appendChild(node);
6631 } else {
6632 node = mediaElement.originalNode;
6633 }
6634
6635 node.setAttribute('id', id);
6636
6637 var props = _mejs2.default.html5media.properties,
6638 assignGettersSetters = function assignGettersSetters(propName) {
6639 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
6640
6641 node['get' + capName] = function () {
6642 return node[propName];
6643 };
6644
6645 node['set' + capName] = function (value) {
6646 if (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) {
6647 node[propName] = value;
6648 }
6649 };
6650 };
6651
6652 for (var i = 0, total = props.length; i < total; i++) {
6653 assignGettersSetters(props[i]);
6654 }
6655
6656 var events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']),
6657 assignEvents = function assignEvents(eventName) {
6658 node.addEventListener(eventName, function (e) {
6659 var event = (0, _general.createEvent)(e.type, mediaElement);
6660 mediaElement.dispatchEvent(event);
6661 });
6662 };
6663
6664 for (var _i = 0, _total = events.length; _i < _total; _i++) {
6665 assignEvents(events[_i]);
6666 }
6667
6668 node.setSize = function (width, height) {
6669 node.style.width = width + 'px';
6670 node.style.height = height + 'px';
6671 return node;
6672 };
6673
6674 node.hide = function () {
6675 node.style.display = 'none';
6676
6677 return node;
6678 };
6679
6680 node.show = function () {
6681 node.style.display = '';
6682
6683 return node;
6684 };
6685
6686 if (mediaFiles && mediaFiles.length > 0) {
6687 for (var _i2 = 0, _total2 = mediaFiles.length; _i2 < _total2; _i2++) {
6688 if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[_i2].type)) {
6689 node.setAttribute('src', mediaFiles[_i2].src);
6690 break;
6691 }
6692 }
6693 }
6694
6695 var event = (0, _general.createEvent)('rendererready', node);
6696 mediaElement.dispatchEvent(event);
6697
6698 return node;
6699 }
6700 };
6701
6702 _window2.default.HtmlMediaElement = _mejs2.default.HtmlMediaElement = HtmlMediaElement;
6703
6704 _renderer.renderer.add(HtmlMediaElement);
6705
6706 },{"2":2,"25":25,"27":27,"3":3,"7":7,"8":8}],24:[function(_dereq_,module,exports){
6707 'use strict';
6708
6709 var _window = _dereq_(3);
6710
6711 var _window2 = _interopRequireDefault(_window);
6712
6713 var _document = _dereq_(2);
6714
6715 var _document2 = _interopRequireDefault(_document);
6716
6717 var _mejs = _dereq_(7);
6718
6719 var _mejs2 = _interopRequireDefault(_mejs);
6720
6721 var _renderer = _dereq_(8);
6722
6723 var _general = _dereq_(27);
6724
6725 var _media = _dereq_(28);
6726
6727 var _dom = _dereq_(26);
6728
6729 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6730
6731 var YouTubeApi = {
6732 isIframeStarted: false,
6733
6734 isIframeLoaded: false,
6735
6736 iframeQueue: [],
6737
6738 enqueueIframe: function enqueueIframe(settings) {
6739 YouTubeApi.isLoaded = typeof YT !== 'undefined' && YT.loaded;
6740
6741 if (YouTubeApi.isLoaded) {
6742 YouTubeApi.createIframe(settings);
6743 } else {
6744 YouTubeApi.loadIframeApi();
6745 YouTubeApi.iframeQueue.push(settings);
6746 }
6747 },
6748
6749 loadIframeApi: function loadIframeApi() {
6750 if (!YouTubeApi.isIframeStarted) {
6751 (0, _dom.loadScript)('https://www.youtube.com/player_api');
6752 YouTubeApi.isIframeStarted = true;
6753 }
6754 },
6755
6756 iFrameReady: function iFrameReady() {
6757
6758 YouTubeApi.isLoaded = true;
6759 YouTubeApi.isIframeLoaded = true;
6760
6761 while (YouTubeApi.iframeQueue.length > 0) {
6762 var settings = YouTubeApi.iframeQueue.pop();
6763 YouTubeApi.createIframe(settings);
6764 }
6765 },
6766
6767 createIframe: function createIframe(settings) {
6768 return new YT.Player(settings.containerId, settings);
6769 },
6770
6771 getYouTubeId: function getYouTubeId(url) {
6772
6773 var youTubeId = '';
6774
6775 if (url.indexOf('?') > 0) {
6776 youTubeId = YouTubeApi.getYouTubeIdFromParam(url);
6777
6778 if (youTubeId === '') {
6779 youTubeId = YouTubeApi.getYouTubeIdFromUrl(url);
6780 }
6781 } else {
6782 youTubeId = YouTubeApi.getYouTubeIdFromUrl(url);
6783 }
6784
6785 var id = youTubeId.substring(youTubeId.lastIndexOf('/') + 1);
6786 youTubeId = id.split('?');
6787 return youTubeId[0];
6788 },
6789
6790 getYouTubeIdFromParam: function getYouTubeIdFromParam(url) {
6791
6792 if (url === undefined || url === null || !url.trim().length) {
6793 return null;
6794 }
6795
6796 var parts = url.split('?'),
6797 parameters = parts[1].split('&');
6798
6799 var youTubeId = '';
6800
6801 for (var i = 0, total = parameters.length; i < total; i++) {
6802 var paramParts = parameters[i].split('=');
6803 if (paramParts[0] === 'v') {
6804 youTubeId = paramParts[1];
6805 break;
6806 }
6807 }
6808
6809 return youTubeId;
6810 },
6811
6812 getYouTubeIdFromUrl: function getYouTubeIdFromUrl(url) {
6813
6814 if (url === undefined || url === null || !url.trim().length) {
6815 return null;
6816 }
6817
6818 var parts = url.split('?');
6819 url = parts[0];
6820 return url.substring(url.lastIndexOf('/') + 1);
6821 },
6822
6823 getYouTubeNoCookieUrl: function getYouTubeNoCookieUrl(url) {
6824 if (url === undefined || url === null || !url.trim().length || url.indexOf('//www.youtube') === -1) {
6825 return url;
6826 }
6827
6828 var parts = url.split('/');
6829 parts[2] = parts[2].replace('.com', '-nocookie.com');
6830 return parts.join('/');
6831 }
6832 };
6833
6834 var YouTubeIframeRenderer = {
6835 name: 'youtube_iframe',
6836
6837 options: {
6838 prefix: 'youtube_iframe',
6839
6840 youtube: {
6841 autoplay: 0,
6842 controls: 0,
6843 disablekb: 1,
6844 end: 0,
6845 loop: 0,
6846 modestbranding: 0,
6847 playsinline: 0,
6848 rel: 0,
6849 showinfo: 0,
6850 start: 0,
6851 iv_load_policy: 3,
6852
6853 nocookie: false,
6854
6855 imageQuality: null
6856 }
6857 },
6858
6859 canPlayType: function canPlayType(type) {
6860 return ~['video/youtube', 'video/x-youtube'].indexOf(type.toLowerCase());
6861 },
6862
6863 create: function create(mediaElement, options, mediaFiles) {
6864
6865 var youtube = {},
6866 apiStack = [],
6867 readyState = 4;
6868
6869 var youTubeApi = null,
6870 paused = true,
6871 ended = false,
6872 youTubeIframe = null,
6873 volume = 1;
6874
6875 youtube.options = options;
6876 youtube.id = mediaElement.id + '_' + options.prefix;
6877 youtube.mediaElement = mediaElement;
6878
6879 var props = _mejs2.default.html5media.properties,
6880 assignGettersSetters = function assignGettersSetters(propName) {
6881
6882 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
6883
6884 youtube['get' + capName] = function () {
6885 if (youTubeApi !== null) {
6886 var value = null;
6887
6888 switch (propName) {
6889 case 'currentTime':
6890 return youTubeApi.getCurrentTime();
6891 case 'duration':
6892 return youTubeApi.getDuration();
6893 case 'volume':
6894 volume = youTubeApi.getVolume() / 100;
6895 return volume;
6896 case 'paused':
6897 return paused;
6898 case 'ended':
6899 return ended;
6900 case 'muted':
6901 return youTubeApi.isMuted();
6902 case 'buffered':
6903 var percentLoaded = youTubeApi.getVideoLoadedFraction(),
6904 duration = youTubeApi.getDuration();
6905 return {
6906 start: function start() {
6907 return 0;
6908 },
6909 end: function end() {
6910 return percentLoaded * duration;
6911 },
6912 length: 1
6913 };
6914 case 'src':
6915 return youTubeApi.getVideoUrl();
6916 case 'readyState':
6917 return readyState;
6918 }
6919
6920 return value;
6921 } else {
6922 return null;
6923 }
6924 };
6925
6926 youtube['set' + capName] = function (value) {
6927 if (youTubeApi !== null) {
6928 switch (propName) {
6929 case 'src':
6930 var url = typeof value === 'string' ? value : value[0].src,
6931 _videoId = YouTubeApi.getYouTubeId(url);
6932
6933 if (mediaElement.originalNode.autoplay) {
6934 youTubeApi.loadVideoById(_videoId);
6935 } else {
6936 youTubeApi.cueVideoById(_videoId);
6937 }
6938 break;
6939 case 'currentTime':
6940 youTubeApi.seekTo(value);
6941 break;
6942 case 'muted':
6943 if (value) {
6944 youTubeApi.mute();
6945 } else {
6946 youTubeApi.unMute();
6947 }
6948 setTimeout(function () {
6949 var event = (0, _general.createEvent)('volumechange', youtube);
6950 mediaElement.dispatchEvent(event);
6951 }, 50);
6952 break;
6953 case 'volume':
6954 volume = value;
6955 youTubeApi.setVolume(value * 100);
6956 setTimeout(function () {
6957 var event = (0, _general.createEvent)('volumechange', youtube);
6958 mediaElement.dispatchEvent(event);
6959 }, 50);
6960 break;
6961 case 'readyState':
6962 var event = (0, _general.createEvent)('canplay', youtube);
6963 mediaElement.dispatchEvent(event);
6964 break;
6965 default:
6966
6967 break;
6968 }
6969 } else {
6970 apiStack.push({ type: 'set', propName: propName, value: value });
6971 }
6972 };
6973 };
6974
6975 for (var i = 0, total = props.length; i < total; i++) {
6976 assignGettersSetters(props[i]);
6977 }
6978
6979 var methods = _mejs2.default.html5media.methods,
6980 assignMethods = function assignMethods(methodName) {
6981 youtube[methodName] = function () {
6982 if (youTubeApi !== null) {
6983 switch (methodName) {
6984 case 'play':
6985 paused = false;
6986 return youTubeApi.playVideo();
6987 case 'pause':
6988 paused = true;
6989 return youTubeApi.pauseVideo();
6990 case 'load':
6991 return null;
6992 }
6993 } else {
6994 apiStack.push({ type: 'call', methodName: methodName });
6995 }
6996 };
6997 };
6998
6999 for (var _i = 0, _total = methods.length; _i < _total; _i++) {
7000 assignMethods(methods[_i]);
7001 }
7002
7003 var youtubeContainer = _document2.default.createElement('div');
7004 youtubeContainer.id = youtube.id;
7005
7006 if (youtube.options.youtube.nocookie) {
7007 mediaElement.originalNode.src = YouTubeApi.getYouTubeNoCookieUrl(mediaFiles[0].src);
7008 }
7009
7010 mediaElement.originalNode.parentNode.insertBefore(youtubeContainer, mediaElement.originalNode);
7011 mediaElement.originalNode.style.display = 'none';
7012
7013 var isAudio = mediaElement.originalNode.tagName.toLowerCase() === 'audio',
7014 height = isAudio ? '1' : mediaElement.originalNode.height,
7015 width = isAudio ? '1' : mediaElement.originalNode.width,
7016 videoId = YouTubeApi.getYouTubeId(mediaFiles[0].src),
7017 youtubeSettings = {
7018 id: youtube.id,
7019 containerId: youtubeContainer.id,
7020 videoId: videoId,
7021 height: height,
7022 width: width,
7023 playerVars: Object.assign({
7024 controls: 0,
7025 rel: 0,
7026 disablekb: 1,
7027 showinfo: 0,
7028 modestbranding: 0,
7029 html5: 1,
7030 playsinline: 0,
7031 start: 0,
7032 end: 0,
7033 iv_load_policy: 3
7034 }, youtube.options.youtube),
7035 origin: _window2.default.location.host,
7036 events: {
7037 onReady: function onReady(e) {
7038 mediaElement.youTubeApi = youTubeApi = e.target;
7039 mediaElement.youTubeState = {
7040 paused: true,
7041 ended: false
7042 };
7043
7044 if (apiStack.length) {
7045 for (var _i2 = 0, _total2 = apiStack.length; _i2 < _total2; _i2++) {
7046
7047 var stackItem = apiStack[_i2];
7048
7049 if (stackItem.type === 'set') {
7050 var propName = stackItem.propName,
7051 capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
7052
7053 youtube['set' + capName](stackItem.value);
7054 } else if (stackItem.type === 'call') {
7055 youtube[stackItem.methodName]();
7056 }
7057 }
7058 }
7059
7060 youTubeIframe = youTubeApi.getIframe();
7061
7062 if (mediaElement.originalNode.getAttribute('muted')) {
7063 youTubeApi.mute();
7064 }
7065
7066 var events = ['mouseover', 'mouseout'],
7067 assignEvents = function assignEvents(e) {
7068 var newEvent = (0, _general.createEvent)(e.type, youtube);
7069 mediaElement.dispatchEvent(newEvent);
7070 };
7071
7072 for (var _i3 = 0, _total3 = events.length; _i3 < _total3; _i3++) {
7073 youTubeIframe.addEventListener(events[_i3], assignEvents, false);
7074 }
7075
7076 var initEvents = ['rendererready', 'loadedmetadata', 'loadeddata', 'canplay'];
7077
7078 for (var _i4 = 0, _total4 = initEvents.length; _i4 < _total4; _i4++) {
7079 var event = (0, _general.createEvent)(initEvents[_i4], youtube);
7080 mediaElement.dispatchEvent(event);
7081 }
7082 },
7083 onStateChange: function onStateChange(e) {
7084 var events = [];
7085
7086 switch (e.data) {
7087 case -1:
7088 events = ['loadedmetadata'];
7089 paused = true;
7090 ended = false;
7091 break;
7092 case 0:
7093 events = ['ended'];
7094 paused = false;
7095 ended = !youtube.options.youtube.loop;
7096 if (!youtube.options.youtube.loop) {
7097 youtube.stopInterval();
7098 }
7099 break;
7100 case 1:
7101 events = ['play', 'playing'];
7102 paused = false;
7103 ended = false;
7104 youtube.startInterval();
7105 break;
7106 case 2:
7107 events = ['pause'];
7108 paused = true;
7109 ended = false;
7110 youtube.stopInterval();
7111 break;
7112 case 3:
7113 events = ['progress'];
7114 ended = false;
7115 break;
7116 case 5:
7117 events = ['loadeddata', 'loadedmetadata', 'canplay'];
7118 paused = true;
7119 ended = false;
7120 break;
7121 }
7122
7123 for (var _i5 = 0, _total5 = events.length; _i5 < _total5; _i5++) {
7124 var event = (0, _general.createEvent)(events[_i5], youtube);
7125 mediaElement.dispatchEvent(event);
7126 }
7127 },
7128 onError: function onError(e) {
7129 var event = (0, _general.createEvent)('error', youtube);
7130 event.data = e.data;
7131 mediaElement.dispatchEvent(event);
7132 }
7133 }
7134 };
7135
7136 if (isAudio) {
7137 youtubeSettings.playerVars.playsinline = 1;
7138 }
7139
7140 if (mediaElement.originalNode.autoplay) {
7141 youtubeSettings.playerVars.autoplay = 1;
7142 }
7143
7144 if (mediaElement.originalNode.loop) {
7145 youtubeSettings.playerVars.loop = 1;
7146 }
7147
7148 YouTubeApi.enqueueIframe(youtubeSettings);
7149
7150 youtube.onEvent = function (eventName, player, _youTubeState) {
7151 if (_youTubeState !== null && _youTubeState !== undefined) {
7152 mediaElement.youTubeState = _youTubeState;
7153 }
7154 };
7155
7156 youtube.setSize = function (width, height) {
7157 if (youTubeApi !== null) {
7158 youTubeApi.setSize(width, height);
7159 }
7160 };
7161 youtube.hide = function () {
7162 youtube.stopInterval();
7163 youtube.pause();
7164 if (youTubeIframe) {
7165 youTubeIframe.style.display = 'none';
7166 }
7167 };
7168 youtube.show = function () {
7169 if (youTubeIframe) {
7170 youTubeIframe.style.display = '';
7171 }
7172 };
7173 youtube.destroy = function () {
7174 youTubeApi.destroy();
7175 };
7176 youtube.interval = null;
7177
7178 youtube.startInterval = function () {
7179 youtube.interval = setInterval(function () {
7180 var event = (0, _general.createEvent)('timeupdate', youtube);
7181 mediaElement.dispatchEvent(event);
7182 }, 250);
7183 };
7184 youtube.stopInterval = function () {
7185 if (youtube.interval) {
7186 clearInterval(youtube.interval);
7187 }
7188 };
7189 youtube.getPosterUrl = function () {
7190 var quality = options.youtube.imageQuality,
7191 resolutions = ['default', 'hqdefault', 'mqdefault', 'sddefault', 'maxresdefault'],
7192 id = YouTubeApi.getYouTubeId(mediaElement.originalNode.src);
7193 return quality && resolutions.indexOf(quality) > -1 && id ? 'https://img.youtube.com/vi/' + id + '/' + quality + '.jpg' : '';
7194 };
7195
7196 return youtube;
7197 }
7198 };
7199
7200 _window2.default.onYouTubePlayerAPIReady = function () {
7201 YouTubeApi.iFrameReady();
7202 };
7203
7204 _media.typeChecks.push(function (url) {
7205 return (/\/\/(www\.youtube|youtu\.?be)/i.test(url) ? 'video/x-youtube' : null
7206 );
7207 });
7208
7209 _renderer.renderer.add(YouTubeIframeRenderer);
7210
7211 },{"2":2,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],25:[function(_dereq_,module,exports){
7212 'use strict';
7213
7214 Object.defineProperty(exports, "__esModule", {
7215 value: true
7216 });
7217 exports.cancelFullScreen = exports.requestFullScreen = exports.isFullScreen = exports.FULLSCREEN_EVENT_NAME = exports.HAS_NATIVE_FULLSCREEN_ENABLED = exports.HAS_TRUE_NATIVE_FULLSCREEN = exports.HAS_IOS_FULLSCREEN = exports.HAS_MS_NATIVE_FULLSCREEN = exports.HAS_MOZ_NATIVE_FULLSCREEN = exports.HAS_WEBKIT_NATIVE_FULLSCREEN = exports.HAS_NATIVE_FULLSCREEN = exports.SUPPORTS_NATIVE_HLS = exports.SUPPORT_POINTER_EVENTS = exports.HAS_MSE = exports.IS_STOCK_ANDROID = exports.IS_SAFARI = exports.IS_FIREFOX = exports.IS_CHROME = exports.IS_EDGE = exports.IS_IE = exports.IS_ANDROID = exports.IS_IOS = exports.IS_IPOD = exports.IS_IPHONE = exports.IS_IPAD = exports.UA = exports.NAV = undefined;
7218
7219 var _window = _dereq_(3);
7220
7221 var _window2 = _interopRequireDefault(_window);
7222
7223 var _document = _dereq_(2);
7224
7225 var _document2 = _interopRequireDefault(_document);
7226
7227 var _mejs = _dereq_(7);
7228
7229 var _mejs2 = _interopRequireDefault(_mejs);
7230
7231 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7232
7233 var NAV = exports.NAV = _window2.default.navigator;
7234 var UA = exports.UA = NAV.userAgent.toLowerCase();
7235 var IS_IPAD = exports.IS_IPAD = /ipad/i.test(UA) && !_window2.default.MSStream;
7236 var IS_IPHONE = exports.IS_IPHONE = /iphone/i.test(UA) && !_window2.default.MSStream;
7237 var IS_IPOD = exports.IS_IPOD = /ipod/i.test(UA) && !_window2.default.MSStream;
7238 var IS_IOS = exports.IS_IOS = /ipad|iphone|ipod/i.test(UA) && !_window2.default.MSStream;
7239 var IS_ANDROID = exports.IS_ANDROID = /android/i.test(UA);
7240 var IS_IE = exports.IS_IE = /(trident|microsoft)/i.test(NAV.appName);
7241 var IS_EDGE = exports.IS_EDGE = 'msLaunchUri' in NAV && !('documentMode' in _document2.default);
7242 var IS_CHROME = exports.IS_CHROME = /chrome/i.test(UA);
7243 var IS_FIREFOX = exports.IS_FIREFOX = /firefox/i.test(UA);
7244 var IS_SAFARI = exports.IS_SAFARI = /safari/i.test(UA) && !IS_CHROME;
7245 var IS_STOCK_ANDROID = exports.IS_STOCK_ANDROID = /^mozilla\/\d+\.\d+\s\(linux;\su;/i.test(UA);
7246 var HAS_MSE = exports.HAS_MSE = 'MediaSource' in _window2.default;
7247 var SUPPORT_POINTER_EVENTS = exports.SUPPORT_POINTER_EVENTS = function () {
7248 var element = _document2.default.createElement('x'),
7249 documentElement = _document2.default.documentElement,
7250 getComputedStyle = _window2.default.getComputedStyle;
7251
7252 if (!('pointerEvents' in element.style)) {
7253 return false;
7254 }
7255
7256 element.style.pointerEvents = 'auto';
7257 element.style.pointerEvents = 'x';
7258 documentElement.appendChild(element);
7259 var supports = getComputedStyle && getComputedStyle(element, '').pointerEvents === 'auto';
7260 element.remove();
7261 return !!supports;
7262 }();
7263
7264 var html5Elements = ['source', 'track', 'audio', 'video'];
7265 var video = void 0;
7266
7267 for (var i = 0, total = html5Elements.length; i < total; i++) {
7268 video = _document2.default.createElement(html5Elements[i]);
7269 }
7270
7271 var SUPPORTS_NATIVE_HLS = exports.SUPPORTS_NATIVE_HLS = IS_SAFARI || IS_ANDROID && (IS_CHROME || IS_STOCK_ANDROID) || IS_IE && /edge/i.test(UA);
7272
7273 var hasiOSFullScreen = video.webkitEnterFullscreen !== undefined;
7274
7275 var hasNativeFullscreen = video.requestFullscreen !== undefined;
7276
7277 if (hasiOSFullScreen && /mac os x 10_5/i.test(UA)) {
7278 hasNativeFullscreen = false;
7279 hasiOSFullScreen = false;
7280 }
7281
7282 var hasWebkitNativeFullScreen = video.webkitRequestFullScreen !== undefined;
7283 var hasMozNativeFullScreen = video.mozRequestFullScreen !== undefined;
7284 var hasMsNativeFullScreen = video.msRequestFullscreen !== undefined;
7285 var hasTrueNativeFullScreen = hasWebkitNativeFullScreen || hasMozNativeFullScreen || hasMsNativeFullScreen;
7286 var nativeFullScreenEnabled = hasTrueNativeFullScreen;
7287 var fullScreenEventName = '';
7288 var isFullScreen = void 0,
7289 requestFullScreen = void 0,
7290 cancelFullScreen = void 0;
7291
7292 if (hasMozNativeFullScreen) {
7293 nativeFullScreenEnabled = _document2.default.mozFullScreenEnabled;
7294 } else if (hasMsNativeFullScreen) {
7295 nativeFullScreenEnabled = _document2.default.msFullscreenEnabled;
7296 }
7297
7298 if (IS_CHROME) {
7299 hasiOSFullScreen = false;
7300 }
7301
7302 if (hasTrueNativeFullScreen) {
7303 if (hasWebkitNativeFullScreen) {
7304 fullScreenEventName = 'webkitfullscreenchange';
7305 } else if (hasMozNativeFullScreen) {
7306 fullScreenEventName = 'mozfullscreenchange';
7307 } else if (hasMsNativeFullScreen) {
7308 fullScreenEventName = 'MSFullscreenChange';
7309 }
7310
7311 exports.isFullScreen = isFullScreen = function isFullScreen() {
7312 if (hasMozNativeFullScreen) {
7313 return _document2.default.mozFullScreen;
7314 } else if (hasWebkitNativeFullScreen) {
7315 return _document2.default.webkitIsFullScreen;
7316 } else if (hasMsNativeFullScreen) {
7317 return _document2.default.msFullscreenElement !== null;
7318 }
7319 };
7320
7321 exports.requestFullScreen = requestFullScreen = function requestFullScreen(el) {
7322 if (hasWebkitNativeFullScreen) {
7323 el.webkitRequestFullScreen();
7324 } else if (hasMozNativeFullScreen) {
7325 el.mozRequestFullScreen();
7326 } else if (hasMsNativeFullScreen) {
7327 el.msRequestFullscreen();
7328 }
7329 };
7330
7331 exports.cancelFullScreen = cancelFullScreen = function cancelFullScreen() {
7332 if (hasWebkitNativeFullScreen) {
7333 _document2.default.webkitCancelFullScreen();
7334 } else if (hasMozNativeFullScreen) {
7335 _document2.default.mozCancelFullScreen();
7336 } else if (hasMsNativeFullScreen) {
7337 _document2.default.msExitFullscreen();
7338 }
7339 };
7340 }
7341
7342 var HAS_NATIVE_FULLSCREEN = exports.HAS_NATIVE_FULLSCREEN = hasNativeFullscreen;
7343 var HAS_WEBKIT_NATIVE_FULLSCREEN = exports.HAS_WEBKIT_NATIVE_FULLSCREEN = hasWebkitNativeFullScreen;
7344 var HAS_MOZ_NATIVE_FULLSCREEN = exports.HAS_MOZ_NATIVE_FULLSCREEN = hasMozNativeFullScreen;
7345 var HAS_MS_NATIVE_FULLSCREEN = exports.HAS_MS_NATIVE_FULLSCREEN = hasMsNativeFullScreen;
7346 var HAS_IOS_FULLSCREEN = exports.HAS_IOS_FULLSCREEN = hasiOSFullScreen;
7347 var HAS_TRUE_NATIVE_FULLSCREEN = exports.HAS_TRUE_NATIVE_FULLSCREEN = hasTrueNativeFullScreen;
7348 var HAS_NATIVE_FULLSCREEN_ENABLED = exports.HAS_NATIVE_FULLSCREEN_ENABLED = nativeFullScreenEnabled;
7349 var FULLSCREEN_EVENT_NAME = exports.FULLSCREEN_EVENT_NAME = fullScreenEventName;
7350 exports.isFullScreen = isFullScreen;
7351 exports.requestFullScreen = requestFullScreen;
7352 exports.cancelFullScreen = cancelFullScreen;
7353
7354
7355 _mejs2.default.Features = _mejs2.default.Features || {};
7356 _mejs2.default.Features.isiPad = IS_IPAD;
7357 _mejs2.default.Features.isiPod = IS_IPOD;
7358 _mejs2.default.Features.isiPhone = IS_IPHONE;
7359 _mejs2.default.Features.isiOS = _mejs2.default.Features.isiPhone || _mejs2.default.Features.isiPad;
7360 _mejs2.default.Features.isAndroid = IS_ANDROID;
7361 _mejs2.default.Features.isIE = IS_IE;
7362 _mejs2.default.Features.isEdge = IS_EDGE;
7363 _mejs2.default.Features.isChrome = IS_CHROME;
7364 _mejs2.default.Features.isFirefox = IS_FIREFOX;
7365 _mejs2.default.Features.isSafari = IS_SAFARI;
7366 _mejs2.default.Features.isStockAndroid = IS_STOCK_ANDROID;
7367 _mejs2.default.Features.hasMSE = HAS_MSE;
7368 _mejs2.default.Features.supportsNativeHLS = SUPPORTS_NATIVE_HLS;
7369 _mejs2.default.Features.supportsPointerEvents = SUPPORT_POINTER_EVENTS;
7370 _mejs2.default.Features.hasiOSFullScreen = HAS_IOS_FULLSCREEN;
7371 _mejs2.default.Features.hasNativeFullscreen = HAS_NATIVE_FULLSCREEN;
7372 _mejs2.default.Features.hasWebkitNativeFullScreen = HAS_WEBKIT_NATIVE_FULLSCREEN;
7373 _mejs2.default.Features.hasMozNativeFullScreen = HAS_MOZ_NATIVE_FULLSCREEN;
7374 _mejs2.default.Features.hasMsNativeFullScreen = HAS_MS_NATIVE_FULLSCREEN;
7375 _mejs2.default.Features.hasTrueNativeFullScreen = HAS_TRUE_NATIVE_FULLSCREEN;
7376 _mejs2.default.Features.nativeFullScreenEnabled = HAS_NATIVE_FULLSCREEN_ENABLED;
7377 _mejs2.default.Features.fullScreenEventName = FULLSCREEN_EVENT_NAME;
7378 _mejs2.default.Features.isFullScreen = isFullScreen;
7379 _mejs2.default.Features.requestFullScreen = requestFullScreen;
7380 _mejs2.default.Features.cancelFullScreen = cancelFullScreen;
7381
7382 },{"2":2,"3":3,"7":7}],26:[function(_dereq_,module,exports){
7383 'use strict';
7384
7385 Object.defineProperty(exports, "__esModule", {
7386 value: true
7387 });
7388 exports.removeClass = exports.addClass = exports.hasClass = undefined;
7389 exports.loadScript = loadScript;
7390 exports.offset = offset;
7391 exports.toggleClass = toggleClass;
7392 exports.fadeOut = fadeOut;
7393 exports.fadeIn = fadeIn;
7394 exports.siblings = siblings;
7395 exports.visible = visible;
7396 exports.ajax = ajax;
7397
7398 var _window = _dereq_(3);
7399
7400 var _window2 = _interopRequireDefault(_window);
7401
7402 var _document = _dereq_(2);
7403
7404 var _document2 = _interopRequireDefault(_document);
7405
7406 var _mejs = _dereq_(7);
7407
7408 var _mejs2 = _interopRequireDefault(_mejs);
7409
7410 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7411
7412 function loadScript(url) {
7413 return new Promise(function (resolve, reject) {
7414 var script = _document2.default.createElement('script');
7415 script.src = url;
7416 script.async = true;
7417 script.onload = function () {
7418 script.remove();
7419 resolve();
7420 };
7421 script.onerror = function () {
7422 script.remove();
7423 reject();
7424 };
7425 _document2.default.head.appendChild(script);
7426 });
7427 }
7428
7429 function offset(el) {
7430 var rect = el.getBoundingClientRect(),
7431 scrollLeft = _window2.default.pageXOffset || _document2.default.documentElement.scrollLeft,
7432 scrollTop = _window2.default.pageYOffset || _document2.default.documentElement.scrollTop;
7433 return { top: rect.top + scrollTop, left: rect.left + scrollLeft };
7434 }
7435
7436 var hasClassMethod = void 0,
7437 addClassMethod = void 0,
7438 removeClassMethod = void 0;
7439
7440 if ('classList' in _document2.default.documentElement) {
7441 hasClassMethod = function hasClassMethod(el, className) {
7442 return el.classList !== undefined && el.classList.contains(className);
7443 };
7444 addClassMethod = function addClassMethod(el, className) {
7445 return el.classList.add(className);
7446 };
7447 removeClassMethod = function removeClassMethod(el, className) {
7448 return el.classList.remove(className);
7449 };
7450 } else {
7451 hasClassMethod = function hasClassMethod(el, className) {
7452 return new RegExp('\\b' + className + '\\b').test(el.className);
7453 };
7454 addClassMethod = function addClassMethod(el, className) {
7455 if (!hasClass(el, className)) {
7456 el.className += ' ' + className;
7457 }
7458 };
7459 removeClassMethod = function removeClassMethod(el, className) {
7460 el.className = el.className.replace(new RegExp('\\b' + className + '\\b', 'g'), '');
7461 };
7462 }
7463
7464 var hasClass = exports.hasClass = hasClassMethod;
7465 var addClass = exports.addClass = addClassMethod;
7466 var removeClass = exports.removeClass = removeClassMethod;
7467
7468 function toggleClass(el, className) {
7469 hasClass(el, className) ? removeClass(el, className) : addClass(el, className);
7470 }
7471
7472 function fadeOut(el) {
7473 var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 400;
7474 var callback = arguments[2];
7475
7476 if (!el.style.opacity) {
7477 el.style.opacity = 1;
7478 }
7479
7480 var start = null;
7481 _window2.default.requestAnimationFrame(function animate(timestamp) {
7482 start = start || timestamp;
7483 var progress = timestamp - start;
7484 var opacity = parseFloat(1 - progress / duration, 2);
7485 el.style.opacity = opacity < 0 ? 0 : opacity;
7486 if (progress > duration) {
7487 if (callback && typeof callback === 'function') {
7488 callback();
7489 }
7490 } else {
7491 _window2.default.requestAnimationFrame(animate);
7492 }
7493 });
7494 }
7495
7496 function fadeIn(el) {
7497 var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 400;
7498 var callback = arguments[2];
7499
7500 if (!el.style.opacity) {
7501 el.style.opacity = 0;
7502 }
7503
7504 var start = null;
7505 _window2.default.requestAnimationFrame(function animate(timestamp) {
7506 start = start || timestamp;
7507 var progress = timestamp - start;
7508 var opacity = parseFloat(progress / duration, 2);
7509 el.style.opacity = opacity > 1 ? 1 : opacity;
7510 if (progress > duration) {
7511 if (callback && typeof callback === 'function') {
7512 callback();
7513 }
7514 } else {
7515 _window2.default.requestAnimationFrame(animate);
7516 }
7517 });
7518 }
7519
7520 function siblings(el, filter) {
7521 var siblings = [];
7522 el = el.parentNode.firstChild;
7523 do {
7524 if (!filter || filter(el)) {
7525 siblings.push(el);
7526 }
7527 } while (el = el.nextSibling);
7528 return siblings;
7529 }
7530
7531 function visible(elem) {
7532 return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
7533 }
7534
7535 function ajax(url, dataType, success, error) {
7536 var xhr = _window2.default.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
7537
7538 var type = 'application/x-www-form-urlencoded; charset=UTF-8',
7539 completed = false,
7540 accept = '*/'.concat('*');
7541
7542 switch (dataType) {
7543 case 'text':
7544 type = 'text/plain';
7545 break;
7546 case 'json':
7547 type = 'application/json, text/javascript';
7548 break;
7549 case 'html':
7550 type = 'text/html';
7551 break;
7552 case 'xml':
7553 type = 'application/xml, text/xml';
7554 break;
7555 }
7556
7557 if (type !== 'application/x-www-form-urlencoded') {
7558 accept = type + ', */*; q=0.01';
7559 }
7560
7561 if (xhr) {
7562 xhr.open('GET', url, true);
7563 xhr.setRequestHeader('Accept', accept);
7564 xhr.onreadystatechange = function () {
7565 if (completed) {
7566 return;
7567 }
7568
7569 if (xhr.readyState === 4) {
7570 if (xhr.status === 200) {
7571 completed = true;
7572 var data = void 0;
7573 switch (dataType) {
7574 case 'json':
7575 data = JSON.parse(xhr.responseText);
7576 break;
7577 case 'xml':
7578 data = xhr.responseXML;
7579 break;
7580 default:
7581 data = xhr.responseText;
7582 break;
7583 }
7584 success(data);
7585 } else if (typeof error === 'function') {
7586 error(xhr.status);
7587 }
7588 }
7589 };
7590
7591 xhr.send();
7592 }
7593 }
7594
7595 _mejs2.default.Utils = _mejs2.default.Utils || {};
7596 _mejs2.default.Utils.offset = offset;
7597 _mejs2.default.Utils.hasClass = hasClass;
7598 _mejs2.default.Utils.addClass = addClass;
7599 _mejs2.default.Utils.removeClass = removeClass;
7600 _mejs2.default.Utils.toggleClass = toggleClass;
7601 _mejs2.default.Utils.fadeIn = fadeIn;
7602 _mejs2.default.Utils.fadeOut = fadeOut;
7603 _mejs2.default.Utils.siblings = siblings;
7604 _mejs2.default.Utils.visible = visible;
7605 _mejs2.default.Utils.ajax = ajax;
7606 _mejs2.default.Utils.loadScript = loadScript;
7607
7608 },{"2":2,"3":3,"7":7}],27:[function(_dereq_,module,exports){
7609 'use strict';
7610
7611 Object.defineProperty(exports, "__esModule", {
7612 value: true
7613 });
7614 exports.escapeHTML = escapeHTML;
7615 exports.debounce = debounce;
7616 exports.isObjectEmpty = isObjectEmpty;
7617 exports.splitEvents = splitEvents;
7618 exports.createEvent = createEvent;
7619 exports.isNodeAfter = isNodeAfter;
7620 exports.isString = isString;
7621
7622 var _mejs = _dereq_(7);
7623
7624 var _mejs2 = _interopRequireDefault(_mejs);
7625
7626 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7627
7628 function escapeHTML(input) {
7629
7630 if (typeof input !== 'string') {
7631 throw new Error('Argument passed must be a string');
7632 }
7633
7634 var map = {
7635 '&': '&amp;',
7636 '<': '&lt;',
7637 '>': '&gt;',
7638 '"': '&quot;'
7639 };
7640
7641 return input.replace(/[&<>"]/g, function (c) {
7642 return map[c];
7643 });
7644 }
7645
7646 function debounce(func, wait) {
7647 var _this = this,
7648 _arguments = arguments;
7649
7650 var immediate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
7651
7652
7653 if (typeof func !== 'function') {
7654 throw new Error('First argument must be a function');
7655 }
7656
7657 if (typeof wait !== 'number') {
7658 throw new Error('Second argument must be a numeric value');
7659 }
7660
7661 var timeout = void 0;
7662 return function () {
7663 var context = _this,
7664 args = _arguments;
7665 var later = function later() {
7666 timeout = null;
7667 if (!immediate) {
7668 func.apply(context, args);
7669 }
7670 };
7671 var callNow = immediate && !timeout;
7672 clearTimeout(timeout);
7673 timeout = setTimeout(later, wait);
7674
7675 if (callNow) {
7676 func.apply(context, args);
7677 }
7678 };
7679 }
7680
7681 function isObjectEmpty(instance) {
7682 return Object.getOwnPropertyNames(instance).length <= 0;
7683 }
7684
7685 function splitEvents(events, id) {
7686 var rwindow = /^((after|before)print|(before)?unload|hashchange|message|o(ff|n)line|page(hide|show)|popstate|resize|storage)\b/;
7687
7688 var ret = { d: [], w: [] };
7689 (events || '').split(' ').forEach(function (v) {
7690 var eventName = '' + v + (id ? '.' + id : '');
7691
7692 if (eventName.startsWith('.')) {
7693 ret.d.push(eventName);
7694 ret.w.push(eventName);
7695 } else {
7696 ret[rwindow.test(v) ? 'w' : 'd'].push(eventName);
7697 }
7698 });
7699
7700 ret.d = ret.d.join(' ');
7701 ret.w = ret.w.join(' ');
7702 return ret;
7703 }
7704
7705 function createEvent(eventName, target) {
7706
7707 if (typeof eventName !== 'string') {
7708 throw new Error('Event name must be a string');
7709 }
7710
7711 var eventFrags = eventName.match(/([a-z]+\.([a-z]+))/i),
7712 detail = {
7713 target: target
7714 };
7715
7716 if (eventFrags !== null) {
7717 eventName = eventFrags[1];
7718 detail.namespace = eventFrags[2];
7719 }
7720
7721 return new window.CustomEvent(eventName, {
7722 detail: detail
7723 });
7724 }
7725
7726 function isNodeAfter(sourceNode, targetNode) {
7727
7728 return !!(sourceNode && targetNode && sourceNode.compareDocumentPosition(targetNode) & 2);
7729 }
7730
7731 function isString(value) {
7732 return typeof value === 'string';
7733 }
7734
7735 _mejs2.default.Utils = _mejs2.default.Utils || {};
7736 _mejs2.default.Utils.escapeHTML = escapeHTML;
7737 _mejs2.default.Utils.debounce = debounce;
7738 _mejs2.default.Utils.isObjectEmpty = isObjectEmpty;
7739 _mejs2.default.Utils.splitEvents = splitEvents;
7740 _mejs2.default.Utils.createEvent = createEvent;
7741 _mejs2.default.Utils.isNodeAfter = isNodeAfter;
7742 _mejs2.default.Utils.isString = isString;
7743
7744 },{"7":7}],28:[function(_dereq_,module,exports){
7745 'use strict';
7746
7747 Object.defineProperty(exports, "__esModule", {
7748 value: true
7749 });
7750 exports.typeChecks = undefined;
7751 exports.absolutizeUrl = absolutizeUrl;
7752 exports.formatType = formatType;
7753 exports.getMimeFromType = getMimeFromType;
7754 exports.getTypeFromFile = getTypeFromFile;
7755 exports.getExtension = getExtension;
7756 exports.normalizeExtension = normalizeExtension;
7757
7758 var _mejs = _dereq_(7);
7759
7760 var _mejs2 = _interopRequireDefault(_mejs);
7761
7762 var _general = _dereq_(27);
7763
7764 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7765
7766 var typeChecks = exports.typeChecks = [];
7767
7768 function absolutizeUrl(url) {
7769
7770 if (typeof url !== 'string') {
7771 throw new Error('`url` argument must be a string');
7772 }
7773
7774 var el = document.createElement('div');
7775 el.innerHTML = '<a href="' + (0, _general.escapeHTML)(url) + '">x</a>';
7776 return el.firstChild.href;
7777 }
7778
7779 function formatType(url) {
7780 var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
7781
7782 return url && !type ? getTypeFromFile(url) : type;
7783 }
7784
7785 function getMimeFromType(type) {
7786
7787 if (typeof type !== 'string') {
7788 throw new Error('`type` argument must be a string');
7789 }
7790
7791 return type && type.indexOf(';') > -1 ? type.substr(0, type.indexOf(';')) : type;
7792 }
7793
7794 function getTypeFromFile(url) {
7795
7796 if (typeof url !== 'string') {
7797 throw new Error('`url` argument must be a string');
7798 }
7799
7800 for (var i = 0, total = typeChecks.length; i < total; i++) {
7801 var type = typeChecks[i](url);
7802
7803 if (type) {
7804 return type;
7805 }
7806 }
7807
7808 var ext = getExtension(url),
7809 normalizedExt = normalizeExtension(ext);
7810
7811 var mime = 'video/mp4';
7812
7813 if (normalizedExt) {
7814 if (~['mp4', 'm4v', 'ogg', 'ogv', 'webm', 'flv', 'mpeg', 'mov'].indexOf(normalizedExt)) {
7815 mime = 'video/' + normalizedExt;
7816 } else if (~['mp3', 'oga', 'wav', 'mid', 'midi'].indexOf(normalizedExt)) {
7817 mime = 'audio/' + normalizedExt;
7818 }
7819 }
7820
7821 return mime;
7822 }
7823
7824 function getExtension(url) {
7825
7826 if (typeof url !== 'string') {
7827 throw new Error('`url` argument must be a string');
7828 }
7829
7830 var baseUrl = url.split('?')[0],
7831 baseName = baseUrl.split('\\').pop().split('/').pop();
7832 return ~baseName.indexOf('.') ? baseName.substring(baseName.lastIndexOf('.') + 1) : '';
7833 }
7834
7835 function normalizeExtension(extension) {
7836
7837 if (typeof extension !== 'string') {
7838 throw new Error('`extension` argument must be a string');
7839 }
7840
7841 switch (extension) {
7842 case 'mp4':
7843 case 'm4v':
7844 return 'mp4';
7845 case 'webm':
7846 case 'webma':
7847 case 'webmv':
7848 return 'webm';
7849 case 'ogg':
7850 case 'oga':
7851 case 'ogv':
7852 return 'ogg';
7853 default:
7854 return extension;
7855 }
7856 }
7857
7858 _mejs2.default.Utils = _mejs2.default.Utils || {};
7859 _mejs2.default.Utils.typeChecks = typeChecks;
7860 _mejs2.default.Utils.absolutizeUrl = absolutizeUrl;
7861 _mejs2.default.Utils.formatType = formatType;
7862 _mejs2.default.Utils.getMimeFromType = getMimeFromType;
7863 _mejs2.default.Utils.getTypeFromFile = getTypeFromFile;
7864 _mejs2.default.Utils.getExtension = getExtension;
7865 _mejs2.default.Utils.normalizeExtension = normalizeExtension;
7866
7867 },{"27":27,"7":7}],29:[function(_dereq_,module,exports){
7868 'use strict';
7869
7870 var _document = _dereq_(2);
7871
7872 var _document2 = _interopRequireDefault(_document);
7873
7874 var _promisePolyfill = _dereq_(4);
7875
7876 var _promisePolyfill2 = _interopRequireDefault(_promisePolyfill);
7877
7878 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7879
7880 (function (arr) {
7881 arr.forEach(function (item) {
7882 if (item.hasOwnProperty('remove')) {
7883 return;
7884 }
7885 Object.defineProperty(item, 'remove', {
7886 configurable: true,
7887 enumerable: true,
7888 writable: true,
7889 value: function remove() {
7890 this.parentNode.removeChild(this);
7891 }
7892 });
7893 });
7894 })([Element.prototype, CharacterData.prototype, DocumentType.prototype]);
7895
7896 (function () {
7897
7898 if (typeof window.CustomEvent === 'function') {
7899 return false;
7900 }
7901
7902 function CustomEvent(event, params) {
7903 params = params || { bubbles: false, cancelable: false, detail: undefined };
7904 var evt = _document2.default.createEvent('CustomEvent');
7905 evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
7906 return evt;
7907 }
7908
7909 CustomEvent.prototype = window.Event.prototype;
7910 window.CustomEvent = CustomEvent;
7911 })();
7912
7913 if (typeof Object.assign !== 'function') {
7914 Object.assign = function (target) {
7915
7916 if (target === null || target === undefined) {
7917 throw new TypeError('Cannot convert undefined or null to object');
7918 }
7919
7920 var to = Object(target);
7921
7922 for (var index = 1, total = arguments.length; index < total; index++) {
7923 var nextSource = arguments[index];
7924
7925 if (nextSource !== null) {
7926 for (var nextKey in nextSource) {
7927 if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
7928 to[nextKey] = nextSource[nextKey];
7929 }
7930 }
7931 }
7932 }
7933 return to;
7934 };
7935 }
7936
7937 if (!String.prototype.startsWith) {
7938 String.prototype.startsWith = function (searchString, position) {
7939 position = position || 0;
7940 return this.substr(position, searchString.length) === searchString;
7941 };
7942 }
7943
7944 if (!Element.prototype.matches) {
7945 Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function (s) {
7946 var matches = (this.document || this.ownerDocument).querySelectorAll(s),
7947 i = matches.length - 1;
7948 while (--i >= 0 && matches.item(i) !== this) {}
7949 return i > -1;
7950 };
7951 }
7952
7953 if (window.Element && !Element.prototype.closest) {
7954 Element.prototype.closest = function (s) {
7955 var matches = (this.document || this.ownerDocument).querySelectorAll(s),
7956 i = void 0,
7957 el = this;
7958 do {
7959 i = matches.length;
7960 while (--i >= 0 && matches.item(i) !== el) {}
7961 } while (i < 0 && (el = el.parentElement));
7962 return el;
7963 };
7964 }
7965
7966 (function () {
7967 var lastTime = 0;
7968 var vendors = ['ms', 'moz', 'webkit', 'o'];
7969 for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
7970 window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
7971 window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
7972 }
7973
7974 if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback) {
7975 var currTime = new Date().getTime();
7976 var timeToCall = Math.max(0, 16 - (currTime - lastTime));
7977 var id = window.setTimeout(function () {
7978 callback(currTime + timeToCall);
7979 }, timeToCall);
7980 lastTime = currTime + timeToCall;
7981 return id;
7982 };
7983
7984 if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {
7985 clearTimeout(id);
7986 };
7987 })();
7988
7989 if (/firefox/i.test(navigator.userAgent)) {
7990 window.mediaElementJsOldGetComputedStyle = window.getComputedStyle;
7991 window.getComputedStyle = function (el, pseudoEl) {
7992 var t = window.mediaElementJsOldGetComputedStyle(el, pseudoEl);
7993 return t === null ? { getPropertyValue: function getPropertyValue() {} } : t;
7994 };
7995 }
7996
7997 if (!window.Promise) {
7998 window.Promise = _promisePolyfill2.default;
7999 }
8000
8001 (function (constructor) {
8002 if (constructor && constructor.prototype && constructor.prototype.children === null) {
8003 Object.defineProperty(constructor.prototype, 'children', {
8004 get: function get() {
8005 var i = 0,
8006 node = void 0,
8007 nodes = this.childNodes,
8008 children = [];
8009 while (node = nodes[i++]) {
8010 if (node.nodeType === 1) {
8011 children.push(node);
8012 }
8013 }
8014 return children;
8015 }
8016 });
8017 }
8018 })(window.Node || window.Element);
8019
8020 },{"2":2,"4":4}],30:[function(_dereq_,module,exports){
8021 'use strict';
8022
8023 Object.defineProperty(exports, "__esModule", {
8024 value: true
8025 });
8026 exports.isDropFrame = isDropFrame;
8027 exports.secondsToTimeCode = secondsToTimeCode;
8028 exports.timeCodeToSeconds = timeCodeToSeconds;
8029 exports.calculateTimeFormat = calculateTimeFormat;
8030 exports.convertSMPTEtoSeconds = convertSMPTEtoSeconds;
8031
8032 var _mejs = _dereq_(7);
8033
8034 var _mejs2 = _interopRequireDefault(_mejs);
8035
8036 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8037
8038 function isDropFrame() {
8039 var fps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 25;
8040
8041 return !(fps % 1 === 0);
8042 }
8043 function secondsToTimeCode(time) {
8044 var forceHours = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
8045 var showFrameCount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
8046 var fps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 25;
8047 var secondsDecimalLength = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
8048
8049
8050 time = !time || typeof time !== 'number' || time < 0 ? 0 : time;
8051
8052 var dropFrames = Math.round(fps * 0.066666),
8053 timeBase = Math.round(fps),
8054 framesPer24Hours = Math.round(fps * 3600) * 24,
8055 framesPer10Minutes = Math.round(fps * 600),
8056 frameSep = isDropFrame(fps) ? ';' : ':',
8057 hours = void 0,
8058 minutes = void 0,
8059 seconds = void 0,
8060 frames = void 0,
8061 f = Math.round(time * fps);
8062
8063 if (isDropFrame(fps)) {
8064
8065 if (f < 0) {
8066 f = framesPer24Hours + f;
8067 }
8068
8069 f = f % framesPer24Hours;
8070
8071 var d = Math.floor(f / framesPer10Minutes);
8072 var m = f % framesPer10Minutes;
8073 f = f + dropFrames * 9 * d;
8074 if (m > dropFrames) {
8075 f = f + dropFrames * Math.floor((m - dropFrames) / Math.round(timeBase * 60 - dropFrames));
8076 }
8077
8078 var timeBaseDivision = Math.floor(f / timeBase);
8079
8080 hours = Math.floor(Math.floor(timeBaseDivision / 60) / 60);
8081 minutes = Math.floor(timeBaseDivision / 60) % 60;
8082
8083 if (showFrameCount) {
8084 seconds = timeBaseDivision % 60;
8085 } else {
8086 seconds = (f / timeBase % 60).toFixed(secondsDecimalLength);
8087 }
8088 } else {
8089 hours = Math.floor(time / 3600) % 24;
8090 minutes = Math.floor(time / 60) % 60;
8091 if (showFrameCount) {
8092 seconds = Math.floor(time % 60);
8093 } else {
8094 seconds = (time % 60).toFixed(secondsDecimalLength);
8095 }
8096 }
8097 hours = hours <= 0 ? 0 : hours;
8098 minutes = minutes <= 0 ? 0 : minutes;
8099 seconds = seconds <= 0 ? 0 : seconds;
8100
8101 var result = forceHours || hours > 0 ? (hours < 10 ? '0' + hours : hours) + ':' : '';
8102 result += (minutes < 10 ? '0' + minutes : minutes) + ':';
8103 result += '' + (seconds < 10 ? '0' + seconds : seconds);
8104
8105 if (showFrameCount) {
8106 frames = (f % timeBase).toFixed(0);
8107 frames = frames <= 0 ? 0 : frames;
8108 result += frames < 10 ? frameSep + '0' + frames : '' + frameSep + frames;
8109 }
8110
8111 return result;
8112 }
8113
8114 function timeCodeToSeconds(time) {
8115 var fps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 25;
8116
8117
8118 if (typeof time !== 'string') {
8119 throw new TypeError('Time must be a string');
8120 }
8121
8122 if (time.indexOf(';') > 0) {
8123 time = time.replace(';', ':');
8124 }
8125
8126 if (!/\d{2}(\:\d{2}){0,3}/i.test(time)) {
8127 throw new TypeError('Time code must have the format `00:00:00`');
8128 }
8129
8130 var parts = time.split(':');
8131
8132 var output = void 0,
8133 hours = 0,
8134 minutes = 0,
8135 seconds = 0,
8136 frames = 0,
8137 totalMinutes = 0,
8138 dropFrames = Math.round(fps * 0.066666),
8139 timeBase = Math.round(fps),
8140 hFrames = timeBase * 3600,
8141 mFrames = timeBase * 60;
8142
8143 switch (parts.length) {
8144 default:
8145 case 1:
8146 seconds = parseInt(parts[0], 10);
8147 break;
8148 case 2:
8149 minutes = parseInt(parts[0], 10);
8150 seconds = parseInt(parts[1], 10);
8151 break;
8152 case 3:
8153 hours = parseInt(parts[0], 10);
8154 minutes = parseInt(parts[1], 10);
8155 seconds = parseInt(parts[2], 10);
8156 break;
8157 case 4:
8158 hours = parseInt(parts[0], 10);
8159 minutes = parseInt(parts[1], 10);
8160 seconds = parseInt(parts[2], 10);
8161 frames = parseInt(parts[3], 10);
8162 break;
8163 }
8164
8165 if (isDropFrame(fps)) {
8166 totalMinutes = 60 * hours + minutes;
8167 output = hFrames * hours + mFrames * minutes + timeBase * seconds + frames - dropFrames * (totalMinutes - Math.floor(totalMinutes / 10));
8168 } else {
8169 output = (hFrames * hours + mFrames * minutes + fps * seconds + frames) / fps;
8170 }
8171
8172 return parseFloat(output.toFixed(3));
8173 }
8174
8175 function calculateTimeFormat(time, options) {
8176 var fps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 25;
8177
8178
8179 time = !time || typeof time !== 'number' || time < 0 ? 0 : time;
8180
8181 var hours = Math.floor(time / 3600) % 24,
8182 minutes = Math.floor(time / 60) % 60,
8183 seconds = Math.floor(time % 60),
8184 frames = Math.floor((time % 1 * fps).toFixed(3)),
8185 lis = [[frames, 'f'], [seconds, 's'], [minutes, 'm'], [hours, 'h']];
8186
8187 var format = options.timeFormat,
8188 firstTwoPlaces = format[1] === format[0],
8189 separatorIndex = firstTwoPlaces ? 2 : 1,
8190 separator = format.length < separatorIndex ? format[separatorIndex] : ':',
8191 firstChar = format[0],
8192 required = false;
8193
8194 for (var i = 0, len = lis.length; i < len; i++) {
8195 if (~format.indexOf(lis[i][1])) {
8196 required = true;
8197 } else if (required) {
8198 var hasNextValue = false;
8199 for (var j = i; j < len; j++) {
8200 if (lis[j][0] > 0) {
8201 hasNextValue = true;
8202 break;
8203 }
8204 }
8205
8206 if (!hasNextValue) {
8207 break;
8208 }
8209
8210 if (!firstTwoPlaces) {
8211 format = firstChar + format;
8212 }
8213 format = lis[i][1] + separator + format;
8214 if (firstTwoPlaces) {
8215 format = lis[i][1] + format;
8216 }
8217 firstChar = lis[i][1];
8218 }
8219 }
8220
8221 options.currentTimeFormat = format;
8222 }
8223
8224 function convertSMPTEtoSeconds(SMPTE) {
8225
8226 if (typeof SMPTE !== 'string') {
8227 throw new TypeError('Argument must be a string value');
8228 }
8229
8230 SMPTE = SMPTE.replace(',', '.');
8231
8232 var decimalLen = ~SMPTE.indexOf('.') ? SMPTE.split('.')[1].length : 0;
8233
8234 var secs = 0,
8235 multiplier = 1;
8236
8237 SMPTE = SMPTE.split(':').reverse();
8238
8239 for (var i = 0, total = SMPTE.length; i < total; i++) {
8240 multiplier = 1;
8241 if (i > 0) {
8242 multiplier = Math.pow(60, i);
8243 }
8244 secs += Number(SMPTE[i]) * multiplier;
8245 }
8246 return Number(secs.toFixed(decimalLen));
8247 }
8248
8249 _mejs2.default.Utils = _mejs2.default.Utils || {};
8250 _mejs2.default.Utils.secondsToTimeCode = secondsToTimeCode;
8251 _mejs2.default.Utils.timeCodeToSeconds = timeCodeToSeconds;
8252 _mejs2.default.Utils.calculateTimeFormat = calculateTimeFormat;
8253 _mejs2.default.Utils.convertSMPTEtoSeconds = convertSMPTEtoSeconds;
8254
8255 },{"7":7}]},{},[29,6,5,15,23,20,19,21,22,24,16,18,17,9,10,11,12,13,14]);