mediacms/frontend/packages/vjs-plugin/dist/mediacms-vjs-plugin.js
Yiannis Stergiou aa6520daac
Frontent dev env (#247)
* Added frontend development files/environment

* More items-categories related removals

* Improvements in pages templates (inc. static pages)

* Improvements in video player

* Added empty home page message + cta

* Updates in media, playlist and management pages

* Improvements in material icons font loading

* Replaced media & playlists links in frontend dev-env

* frontend package version update

* chnaged frontend dev url port

* static files update

* Changed default position of theme switcher

* enabled frontend docker container
2021-07-11 18:01:34 +03:00

2332 lines
98 KiB
JavaScript

(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global['mediacms-vjs-plugin'] = factory());
}(this, (function () { 'use strict';
function _typeof(obj) {
"@babel/helpers - typeof";
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
_typeof = function (obj) {
return typeof obj;
};
} else {
_typeof = function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
}
return _typeof(obj);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a 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);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
return Constructor;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
if (superClass) _setPrototypeOf(subClass, superClass);
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function _isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
try {
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
return true;
} catch (e) {
return false;
}
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _possibleConstructorReturn(self, call) {
if (call && (typeof call === "object" || typeof call === "function")) {
return call;
}
return _assertThisInitialized(self);
}
function _createSuper(Derived) {
var hasNativeReflectConstruct = _isNativeReflectConstruct();
return function _createSuperInternal() {
var Super = _getPrototypeOf(Derived),
result;
if (hasNativeReflectConstruct) {
var NewTarget = _getPrototypeOf(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return _possibleConstructorReturn(this, result);
};
}
var version = "0.9.0";
var Plugin = null;
function generatePlugin() {
var videojsComponent = videojs.getComponent('Component');
var videojsClickableComponent = videojs.getComponent('ClickableComponent');
var videojsComponentButton = videojs.getComponent('Button');
var __MediaCMSComponent__ = videojs.extend(videojsComponent, {
constructor: function constructor() {
videojsComponent.apply(this, arguments);
this.setAttribute('class', this.buildCSSClass());
},
buildCSSClass: function buildCSSClass() {
return '';
}
});
var __MediaCMSButtonClickableComponent__ = videojs.extend(videojsClickableComponent, {
buildCSSClass: function buildCSSClass() {
return '';
}
});
var __SettingsPanelComponent__ = composeAndExtendCustomComp('vjs-settings-panel');
var __SettingsPanelInnerComponent__ = composeAndExtendCustomComp('vjs-settings-panel-inner');
var __SettingsPanelTitleComponent__ = composeAndExtendCustomComp('vjs-setting-panel-title');
var __SettingsMenuComponent__ = composeAndExtendCustomComp('vjs-settings-menu');
var __SettingsMenuItemComponent__ = videojsComposeAndExtendCustomComp(__MediaCMSButtonClickableComponent__, 'vjs-settings-menu-item');
var __SettingsMenuItemLabelComponent__ = composeAndExtendCustomComp('vjs-setting-menu-item-label');
var __SettingsMenuItemContentComponent__ = composeAndExtendCustomComp('vjs-setting-menu-item-content');
function composeCustomCompMethods(ret, extnd, innerHtml, extraCSSClass, htmlAttr) {
var innerHtmlIsHTMLElement = !!innerHtml && innerHtml.nodeType === 1;
if (!innerHtmlIsHTMLElement) {
switch (_typeof(innerHtml)) {
case 'string':
innerHtml = innerHtml.trim();
innerHtml = '' === innerHtml ? null : innerHtml;
break;
case 'number':
innerHtml = innerHtml.toString();
break;
default:
innerHtml = null;
}
}
switch (_typeof(extraCSSClass)) {
case 'string':
extraCSSClass = extraCSSClass.trim();
extraCSSClass = '' === extraCSSClass ? null : extraCSSClass;
break;
default:
extraCSSClass = null;
}
if (!htmlAttr || !Object.keys(htmlAttr).length) {
htmlAttr = null;
}
if (innerHtml || htmlAttr) {
ret.constructor = function () {
extnd.apply(this, arguments);
var k;
if (innerHtml) {
if (innerHtmlIsHTMLElement) {
this.el_.appendChild(innerHtml);
} else {
this.el_.innerHTML = innerHtml;
}
}
if (htmlAttr) {
for (k in htmlAttr) {
if (htmlAttr.hasOwnProperty(k)) {
this.el_.setAttribute(k, htmlAttr[k]);
}
}
}
};
}
if (extraCSSClass) {
ret.buildCSSClass = function () {
return extraCSSClass + ' ' + extnd.prototype.buildCSSClass.call(this);
};
}
}
function videosjsExtendCustomComp(parent, methods) {
return videojs.extend(parent, methods);
}
function videosjsFormatExtendObj(parent, methods) {
return {
extend: parent,
methods: methods
};
}
function videojsComposeAndExtendCustomComp(extnd, extraCSSClass, innerHtml, htmlAttr) {
var ret = {};
composeCustomCompMethods(ret, extnd, innerHtml, extraCSSClass, htmlAttr);
return videosjsExtendCustomComp(extnd, ret);
}
function composeCustomComp(extnd, extraCSSClass, innerHtml, htmlAttr) {
var ret = {};
composeCustomCompMethods(ret, extnd, innerHtml, extraCSSClass, htmlAttr);
return videosjsFormatExtendObj(extnd, ret);
}
function composeAndExtendCustomComp(extraCSSClass, innerHtml, htmlAttr) {
return videojsComposeAndExtendCustomComp(__MediaCMSComponent__, extraCSSClass, innerHtml, htmlAttr);
}
function generateControlBarComponents(pluginInstanceRef) {
function childrenGen(parentKey, child, allComps, parentsConn, level) {
var k,
addedChild = false;
allComps[level] = void 0 === allComps[level] ? [] : allComps[level];
for (k in child) {
if (child.hasOwnProperty(k)) {
if (child[k] && child[k].children) {
if (childrenGen(k, child[k].children, allComps, parentsConn, level + 1)) {
addedChild = true;
allComps[level].push(k);
parentsConn[k] = parentKey;
}
} else {
addedChild = true;
allComps[level].push(k);
parentsConn[k] = parentKey;
}
}
}
return addedChild;
}
function gen(parent, ControlBar) {
var componentsToAppend = [],
parentsConnections = {},
appendedComponents = {};
var i, j, prnt;
if (parent.children) {
childrenGen('controlBar', parent.children, componentsToAppend, parentsConnections, 0);
i = 0;
while (i < componentsToAppend.length) {
j = 0;
while (j < componentsToAppend[i].length) {
prnt = 0 === i ? pluginInstanceRef.player.getChild(parentsConnections[componentsToAppend[i][j]]) : appendedComponents[parentsConnections[componentsToAppend[i][j]]];
prnt.addChild(componentsToAppend[i][j], {});
appendedComponents[componentsToAppend[i][j]] = prnt.getChild(componentsToAppend[i][j]);
j++;
}
i++;
}
}
}
return gen;
}
function generateTouchControlComponents(pluginInstanceRef, options) {
if (options.enabledTouchControls) {
var TouchControls, TouchControlsInner, TouchPrevious, TouchPlay, TouchNext;
var previousButton = composeCustomComp(videojsComponentButton, 'vjs-icon-previous-item');
var playButton = composeCustomComp(videojsComponentButton, 'vjs-icon-play');
var nextButton = composeCustomComp(videojsComponentButton, 'vjs-icon-next-item');
playButton.methods.handleClick = function (ev) {
if (this.player_.paused()) {
this.player_.play();
setTimeout(function () {
this.player_.userActive(false);
}.bind(this), 250);
} else {
this.player_.pause();
}
};
if (options.controlBar.next) {
nextButton.methods.handleClick = function (ev) {
this.player_.trigger('clicked_next_button');
};
}
if (options.controlBar.previous) {
previousButton.methods.handleClick = function (ev) {
this.player_.trigger('clicked_previous_button');
};
}
videojs.registerComponent('TouchControls', videojs.extend(__MediaCMSComponent__, composeCustomComp(__MediaCMSComponent__, 'vjs-touch-controls').methods));
videojs.registerComponent('TouchControlsInner', videojs.extend(__MediaCMSComponent__, composeCustomComp(__MediaCMSComponent__).methods));
videojs.registerComponent('TouchPreviousButton', videojs.extend(previousButton.extend, previousButton.methods));
videojs.registerComponent('TouchPlayButton', videojs.extend(playButton.extend, playButton.methods));
videojs.registerComponent('TouchNextButton', videojs.extend(nextButton.extend, nextButton.methods));
videojs.registerComponent('TouchPlay', videojs.extend(__MediaCMSComponent__, composeCustomComp(__MediaCMSComponent__, 'vjs-touch-play-button').methods));
if (options.controlBar.next || options.controlBar.previous) {
videojs.registerComponent('TouchPrevious', videojs.extend(__MediaCMSComponent__, composeCustomComp(__MediaCMSComponent__, 'vjs-touch-previous-button' + (!options.controlBar.previous ? ' vjs-touch-disabled-button' : '')).methods));
videojs.registerComponent('TouchNext', videojs.extend(__MediaCMSComponent__, composeCustomComp(__MediaCMSComponent__, 'vjs-touch-next-button' + (!options.controlBar.next ? ' vjs-touch-disabled-button' : '')).methods));
} else {
videojs.registerComponent('TouchPrevious', videojs.extend(__MediaCMSComponent__, composeCustomComp(__MediaCMSComponent__, 'vjs-touch-previous-button' + (!options.controlBar.previous ? ' vjs-touch-hidden-button' : '')).methods));
videojs.registerComponent('TouchNext', videojs.extend(__MediaCMSComponent__, composeCustomComp(__MediaCMSComponent__, 'vjs-touch-next-button' + (!options.controlBar.next ? ' vjs-touch-hidden-button' : '')).methods));
}
pluginInstanceRef.player.addChild('TouchControls');
TouchControls = pluginInstanceRef.player.getChild('TouchControls');
TouchControls.addChild('TouchControlsInner');
TouchControlsInner = TouchControls.getChild('TouchControlsInner');
TouchControlsInner.addChild('TouchPrevious');
TouchControlsInner.addChild('TouchPlay');
TouchControlsInner.addChild('TouchNext');
TouchPrevious = TouchControlsInner.getChild('TouchPrevious');
TouchPlay = TouchControlsInner.getChild('TouchPlay');
TouchNext = TouchControlsInner.getChild('TouchNext');
TouchPrevious.addChild('TouchPreviousButton');
TouchPlay.addChild('TouchPlayButton');
TouchNext.addChild('TouchNextButton');
}
}
function generateCornerLayersComponents(pluginInstanceRef, options) {
var layers = {};
var compPrefix = 'CornerLayer_';
var k;
if (options.cornerLayers.topLeft) {
layers.topLeft = {
className: 'vjs-corner-layer vjs-corner-top-left',
parent: pluginInstanceRef.player,
content: options.cornerLayers.topLeft
};
}
if (options.cornerLayers.topRight) {
layers.topRight = {
className: 'vjs-corner-layer vjs-corner-top-right',
parent: pluginInstanceRef.player,
content: options.cornerLayers.topRight
};
}
if (options.cornerLayers.bottomLeft) {
layers.bottomLeft = {
className: 'vjs-corner-layer vjs-corner-bottom-left',
parent: pluginInstanceRef.player,
content: options.cornerLayers.bottomLeft
};
}
if (options.cornerLayers.bottomRight) {
layers.bottomRight = {
className: 'vjs-corner-layer vjs-corner-bottom-right',
parent: pluginInstanceRef.player,
content: options.cornerLayers.bottomRight
};
}
for (k in layers) {
if (layers.hasOwnProperty(k)) {
if (layers[k].content) {
videojs.registerComponent(compPrefix + k, videojs.extend(__MediaCMSComponent__, composeCustomComp(__MediaCMSComponent__, layers[k].className, layers[k].content).methods));
layers[k].parent.addChild(compPrefix + k);
}
}
}
}
function generateActionsAnimationsComponents(pluginInstanceRef) {
videojs.registerComponent('ActionsAnimations', videojs.extend(__MediaCMSComponent__, composeCustomComp(__MediaCMSComponent__, 'vjs-actions-anim', '<span></span>').methods));
pluginInstanceRef.player.addChild('ActionsAnimations');
}
function generateLoadingSpinnerComponent(pluginInstanceRef) {
pluginInstanceRef.player.removeChild('LoadingSpinner');
videojs.registerComponent('LoadingSpinner', videojs.extend(__MediaCMSComponent__, composeCustomComp(__MediaCMSComponent__, 'vjs-loading-spinner', '<div class="spinner">\
<div class="spinner-container">\
<div class="spinner-rotator">\
<div class="spinner-left"><div class="spinner-circle"></div></div>\
<div class="spinner-right"><div class="spinner-circle"></div></div>\
</div>\
</div>\
</div>').methods));
pluginInstanceRef.player.addChild('LoadingSpinner');
}
function initComponents(pluginInstanceRef, which, struct, args) {
var k, i;
var tmp;
switch (which) {
case 'bottomBackground':
struct.bottomBackground = null;
videojs.registerComponent('BottomBackground', videojs.extend(__MediaCMSComponent__, composeCustomComp(__MediaCMSComponent__, 'vjs-bottom-bg').methods));
break;
case 'progressControl':
struct.progressControl = null;
break;
case '__subtitles':
struct.subtitlesPanel = {
children: {
subtitlesPanelInner: {
children: {
subtitlesMenuTitle: null,
subtitlesMenu: {
children: {}
}
}
}
}
};
tmp = composeCustomComp(__SettingsPanelComponent__, 'vjs-subtitles-panel');
tmp.methods.constructor = function () {
videojsComponent.apply(this, arguments);
this.setAttribute('class', this.buildCSSClass());
var that = this;
function onFocusout(ev) {
if (that.el_.contains(ev.relatedTarget)) {
return;
}
that.player_.trigger('focusoutSubtitlesPanel');
}
pluginInstanceRef.on(this.player_, ['updatedSubtitlesPanelsVisibility'], function () {
videojs.dom[this.state.isOpenSubtitlesOptions ? 'addClass' : 'removeClass'](that.el_, 'vjs-visible-panel');
});
pluginInstanceRef.on(this.player_, ['openedSubtitlesPanel'], function (ev, openedFromKeyboard) {
that.el_.setAttribute('tabindex', '-1');
that.el_.addEventListener('focusout', onFocusout);
if (!!openedFromKeyboard) {
that.el_.querySelector('.vjs-settings-menu-item').focus();
} else {
that.el_.focus();
}
});
pluginInstanceRef.on(this.player_, ['closedSubtitlesPanel'], function (ev, closedFromKeyboard) {
that.el_.removeAttribute('tabindex');
that.el_.removeEventListener('focusout', onFocusout);
if (!!closedFromKeyboard) {
that.el_.querySelector('.vjs-settings-menu-item').focus();
}
});
};
videojs.registerComponent('SubtitlesPanel', videojs.extend(tmp.extend, tmp.methods));
videojs.registerComponent('SubtitlesPanelInner', videojs.extend(__SettingsPanelInnerComponent__, composeCustomComp(__SettingsPanelInnerComponent__).methods));
videojs.registerComponent('SubtitlesMenu', videojs.extend(__SettingsMenuComponent__, composeCustomComp(__SettingsMenuComponent__).methods));
videojs.registerComponent('SubtitlesMenuTitle', videojs.extend(__SettingsPanelTitleComponent__, composeCustomComp(__SettingsPanelTitleComponent__, null, '<span>Subtitles</span>').methods));
i = 0;
while (i < args.options.subtitles.languages.length) {
k = args.options.subtitles.languages[i];
struct.subtitlesPanel.children.subtitlesPanelInner.children.subtitlesMenu.children['subtitleOption_' + k.srclang] = {
children: _defineProperty({}, 'subtitleOption_' + k.srclang + '_content', null)
};
(function (key, title) {
tmp = composeCustomComp(__SettingsMenuItemComponent__, key === pluginInstanceRef.state.theSelectedSubtitleOption ? 'vjs-selected-menu-item' : null, null);
tmp.methods.constructor = function () {
__SettingsMenuItemComponent__.apply(this, arguments);
this.subtitleKey = key;
var that = this;
this.setAttribute('data-opt', key);
pluginInstanceRef.on(this.player_, ['updatedSelectedSubtitleOption'], function () {
if (that.subtitleKey === this.state.theSelectedSubtitleOption) {
videojs.dom.addClass(that.el_, 'vjs-selected-menu-item');
} else {
videojs.dom.removeClass(that.el_, 'vjs-selected-menu-item');
}
});
};
tmp.methods.handleClick = function () {
this.player_.trigger('selectedSubtitleOption', this.el_.getAttribute('data-opt'));
};
videojs.registerComponent('SubtitleOption_' + key, videojs.extend(tmp.extend, tmp.methods));
tmp = composeCustomComp(__SettingsMenuItemContentComponent__, null, title);
videojs.registerComponent('SubtitleOption_' + key + '_content', videojs.extend(tmp.extend, tmp.methods));
})(k.srclang, k.label);
i += 1;
}
break;
case '__settings':
struct.settingsPanel = {
children: {
settingsPanelInner: {
children: {
settingsMenu: {
children: {}
}
}
}
}
};
tmp = composeCustomComp(__SettingsPanelComponent__, 'vjs-settings-root');
tmp.methods.constructor = function () {
videojsComponent.apply(this, arguments);
this.setAttribute('class', this.buildCSSClass());
var that = this;
function onFocusout(ev) {
if (that.el_.contains(ev.relatedTarget)) {
return;
}
that.player_.trigger('focusoutSettingsPanel');
}
pluginInstanceRef.on(this.player_, ['updatedSettingsPanelsVisibility'], function () {
videojs.dom[this.state.isOpenSettingsOptions ? 'addClass' : 'removeClass'](that.el_, 'vjs-visible-panel');
});
pluginInstanceRef.on(this.player_, ['openedSettingsPanel'], function (ev, openedFromKeyboard) {
that.el_.setAttribute('tabindex', '-1');
that.el_.addEventListener('focusout', onFocusout);
if (!!openedFromKeyboard) {
that.el_.querySelector('.vjs-settings-menu-item').focus();
} else {
that.el_.focus();
}
});
pluginInstanceRef.on(this.player_, ['closedSettingsPanel'], function (ev, closedFromKeyboard) {
that.el_.removeAttribute('tabindex');
that.el_.removeEventListener('focusout', onFocusout);
if (!!closedFromKeyboard) {
that.el_.querySelector('.vjs-settings-menu-item').focus();
}
});
};
videojs.registerComponent('SettingsPanel', videojs.extend(tmp.extend, tmp.methods));
videojs.registerComponent('SettingsPanelInner', videojs.extend(__SettingsPanelInnerComponent__, composeCustomComp(__SettingsPanelInnerComponent__).methods));
videojs.registerComponent('SettingsMenu', videojs.extend(__SettingsMenuComponent__, composeCustomComp(__SettingsMenuComponent__).methods));
if (args.enabledPlaybackSpeedPanel) {
struct.settingsPanel.children.settingsPanelInner.children.settingsMenu.children.selectedPlaybackSpeed = {
children: {
selectedPlaybackSpeedLabel: null,
selectedPlaybackSpeedContent: null
}
};
tmp = composeCustomComp(__SettingsMenuItemComponent__, 'vjs-selected-speed');
tmp.methods.handleClick = function (ev) {
this.player_.trigger('openPlaybackSpeedOptions', !ev.screenX && !ev.screenY);
};
videojs.registerComponent('SelectedPlaybackSpeed', videojs.extend(tmp.extend, tmp.methods));
videojs.registerComponent('SelectedPlaybackSpeedLabel', videojs.extend(__SettingsMenuItemLabelComponent__, composeCustomComp(__SettingsMenuItemLabelComponent__, null, 'Playback speed').methods));
tmp = composeCustomComp(__SettingsMenuItemContentComponent__, null, args.selectedPlaybackSpeed);
tmp.methods.constructor = function () {
videojsComponent.apply(this, arguments);
var that = this;
that.el_.innerHTML = pluginInstanceRef.selectedPlaybackSpeedTitle();
this.setAttribute('class', this.buildCSSClass());
pluginInstanceRef.on(this.player_, ['updatedSelectedPlaybackSpeed'], function () {
that.el_.innerHTML = this.selectedPlaybackSpeedTitle();
});
};
videojs.registerComponent('SelectedPlaybackSpeedContent', videojs.extend(tmp.extend, tmp.methods));
}
if (args.enabledResolutionsPanel) {
struct.settingsPanel.children.settingsPanelInner.children.settingsMenu.children.selectedResolution = {
children: {
selectedResolutionLabel: null,
selectedResolutionContent: null
}
};
tmp = composeCustomComp(__SettingsMenuItemComponent__, 'vjs-selected-quality');
tmp.methods.handleClick = function (ev) {
this.player_.trigger('openQualityOptions', !ev.screenX && !ev.screenY);
};
videojs.registerComponent('SelectedResolution', videojs.extend(tmp.extend, tmp.methods));
videojs.registerComponent('SelectedResolutionLabel', videojs.extend(__SettingsMenuItemLabelComponent__, composeCustomComp(__SettingsMenuItemLabelComponent__, null, 'Quality').methods));
tmp = composeCustomComp(__SettingsMenuItemContentComponent__, null, args.selectedResolution);
tmp.methods.constructor = function () {
videojsComponent.apply(this, arguments);
var that = this;
that.el_.innerHTML = args.selectedResolution;
this.setAttribute('class', this.buildCSSClass());
pluginInstanceRef.on(this.player_, ['updatedSelectedQuality'], function () {
that.el_.innerHTML = this.selectedQualityTitle();
});
};
videojs.registerComponent('SelectedResolutionContent', videojs.extend(tmp.extend, tmp.methods));
}
break;
case '__resolution':
struct.resolutionsPanel = {
children: {
resolutionsPanelInner: {
children: {
resolutionsMenuTitle: {
children: {
resolutionsMenuBackButton: null
}
},
resolutionsMenu: {
children: {}
}
}
}
}
};
tmp = composeCustomComp(__SettingsPanelComponent__, 'vjs-resolutions-panel');
tmp.methods.constructor = function () {
videojsComponent.apply(this, arguments);
this.setAttribute('class', this.buildCSSClass());
var that = this;
function onFocusout(ev) {
if (that.el_.contains(ev.relatedTarget)) {
return;
}
that.player_.trigger('focusoutResolutionsPanel');
}
pluginInstanceRef.on(this.player_, ['updatedSettingsPanelsVisibility'], function () {
videojs.dom[this.state.isOpenQualityOptions ? 'addClass' : 'removeClass'](that.el_, 'vjs-visible-panel');
});
pluginInstanceRef.on(this.player_, ['openedQualities'], function (ev, openedFromKeyboard) {
that.el_.setAttribute('tabindex', '-1');
that.el_.addEventListener('focusout', onFocusout);
if (!!openedFromKeyboard) {
that.el_.querySelector('.vjs-setting-panel-title > *[role="button"]').focus();
} else {
that.el_.focus();
}
});
pluginInstanceRef.on(this.player_, ['closedQualities'], function (ev, closedFromKeyboard) {
that.el_.removeAttribute('tabindex');
that.el_.removeEventListener('focusout', onFocusout);
if (!!closedFromKeyboard) {
that.el_.querySelector('.vjs-settings-menu-item').focus();
}
});
};
videojs.registerComponent('ResolutionsPanel', videojs.extend(tmp.extend, tmp.methods));
videojs.registerComponent('ResolutionsPanelInner', videojs.extend(__SettingsPanelInnerComponent__, composeCustomComp(__SettingsPanelInnerComponent__).methods));
videojs.registerComponent('ResolutionsMenu', videojs.extend(__SettingsMenuComponent__, composeCustomComp(__SettingsMenuComponent__).methods));
videojs.registerComponent('ResolutionsMenuTitle', videojs.extend(__SettingsPanelTitleComponent__, composeCustomComp(__SettingsPanelTitleComponent__, 'vjs-settings-back').methods));
tmp = composeCustomComp(__MediaCMSButtonClickableComponent__, null, 'Quality');
tmp.methods.handleClick = function (ev) {
this.player_.trigger('closeQualityOptions', !ev.screenX && !ev.screenY);
};
videojs.registerComponent('ResolutionsMenuBackButton', videojs.extend(tmp.extend, tmp.methods));
var resolutionKeys = function () {
var i;
var ret = [];
var keys = Object.keys(args.resolutions);
var stringKeys = [];
var numericKeys = [];
i = 0;
while (i < keys.length) {
if (isNaN(0 + keys[i])) {
stringKeys.push(keys[i]);
} else {
numericKeys.push([parseFloat(keys[i]), keys[i]]);
}
i += 1;
}
numericKeys.sort(function (a, b) {
return b[0] - a[0];
});
i = 0;
while (i < numericKeys.length) {
ret.push(numericKeys[i][1]);
i += 1;
}
i = 0;
while (i < stringKeys.length) {
ret.push(stringKeys[i]);
i += 1;
}
return ret;
}();
i = 0;
while (i < resolutionKeys.length) {
k = resolutionKeys[i];
struct.resolutionsPanel.children.resolutionsPanelInner.children.resolutionsMenu.children['resolutionOption_' + k] = {
children: _defineProperty({}, 'resolutionOption_' + k + '_content', null)
};
(function (key, title) {
tmp = composeCustomComp(__SettingsMenuItemComponent__, key.toString() === pluginInstanceRef.state.theSelectedQuality.toString() ? 'vjs-selected-menu-item' : null, null
);
tmp.methods.constructor = function () {
__SettingsMenuItemComponent__.apply(this, arguments);
var that = this;
this.qualityKey = key;
this.setAttribute('data-opt', key);
pluginInstanceRef.on(this.player_, ['updatedSelectedQuality'], function () {
videojs.dom[that.qualityKey === this.state.theSelectedQuality ? 'addClass' : 'removeClass'](that.el_, 'vjs-selected-menu-item');
});
};
tmp.methods.handleClick = function () {
this.player_.trigger('selectedQuality', this.el_.getAttribute('data-opt'));
};
videojs.registerComponent('ResolutionOption_' + key, videojs.extend(tmp.extend, tmp.methods));
tmp = composeCustomComp(__SettingsMenuItemContentComponent__, null, title);
videojs.registerComponent('ResolutionOption_' + key + '_content', videojs.extend(tmp.extend, tmp.methods));
})(k, args.resolutions[k].title || k);
i += 1;
}
break;
case '__playbackSpeed':
struct.playbackSpeedsPanel = {
children: {
playbackSpeedsPanelInner: {
children: {
playbackSpeedsMenuTitle: {
children: {
playbackSpeedsMenuBackButton: null
}
},
playbackSpeedsMenu: {
children: {}
}
}
}
}
};
tmp = composeCustomComp(__SettingsPanelComponent__, 'vjs-playback-speed-panel');
tmp.methods.constructor = function () {
videojsComponent.apply(this, arguments);
this.setAttribute('class', this.buildCSSClass());
var that = this;
function onFocusout(ev) {
if (that.el_.contains(ev.relatedTarget)) {
return;
}
that.player_.trigger('focusoutPlaybackSpeedsPanel');
}
pluginInstanceRef.on(this.player_, ['updatedSettingsPanelsVisibility'], function () {
videojs.dom[this.state.isOpenPlaybackSpeedOptions ? 'addClass' : 'removeClass'](that.el_, 'vjs-visible-panel');
});
pluginInstanceRef.on(this.player_, ['openedPlaybackSpeeds'], function (ev, openedFromKeyboard) {
that.el_.setAttribute('tabindex', '-1');
that.el_.addEventListener('focusout', onFocusout);
if (!!openedFromKeyboard) {
that.el_.querySelector('.vjs-setting-panel-title > *[role="button"]').focus();
} else {
that.el_.focus();
}
});
pluginInstanceRef.on(this.player_, ['closedPlaybackSpeeds'], function (ev, closedFromKeyboard) {
that.el_.removeAttribute('tabindex');
that.el_.removeEventListener('focusout', onFocusout);
if (!!closedFromKeyboard) {
that.el_.querySelector('.vjs-settings-menu-item').focus();
}
});
};
videojs.registerComponent('PlaybackSpeedsPanel', videojs.extend(tmp.extend, tmp.methods));
videojs.registerComponent('PlaybackSpeedsPanelInner', videojs.extend(__SettingsPanelInnerComponent__, composeCustomComp(__SettingsPanelInnerComponent__).methods));
videojs.registerComponent('PlaybackSpeedsMenu', videojs.extend(__SettingsMenuComponent__, composeCustomComp(__SettingsMenuComponent__).methods));
videojs.registerComponent('PlaybackSpeedsMenuTitle', videojs.extend(__SettingsPanelTitleComponent__, composeCustomComp(__SettingsPanelTitleComponent__, 'vjs-settings-back').methods));
tmp = composeCustomComp(__MediaCMSButtonClickableComponent__, null, 'Playback speed');
tmp.methods.handleClick = function (ev) {
this.player_.trigger('closePlaybackSpeedOptions', !ev.screenX && !ev.screenY);
};
videojs.registerComponent('PlaybackSpeedsMenuBackButton', videojs.extend(tmp.extend, tmp.methods));
for (k in args.playbackSpeeds) {
if (args.playbackSpeeds.hasOwnProperty(k)) {
struct.playbackSpeedsPanel.children.playbackSpeedsPanelInner.children.playbackSpeedsMenu.children['playbackSpeedOption_' + args.playbackSpeeds[k].speed] = {
children: _defineProperty({}, 'playbackSpeedOption_' + args.playbackSpeeds[k].speed + '_content', null)
};
(function (key, title) {
tmp = composeCustomComp(__SettingsMenuItemComponent__, key.toString() === pluginInstanceRef.state.theSelectedPlaybackSpeed.toString() ? 'vjs-selected-menu-item' : null, null
);
tmp.methods.constructor = function () {
__SettingsMenuItemComponent__.apply(this, arguments);
var that = this;
this.playbackSpeedKey = key;
this.setAttribute('data-opt', key);
pluginInstanceRef.on(this.player_, ['updatedSelectedPlaybackSpeed'], function () {
videojs.dom[that.playbackSpeedKey === this.state.theSelectedPlaybackSpeed ? 'addClass' : 'removeClass'](that.el_, 'vjs-selected-menu-item');
});
};
tmp.methods.handleClick = function () {
this.player_.trigger('selectedPlaybackSpeed', this.el_.getAttribute('data-opt'));
};
videojs.registerComponent('PlaybackSpeedOption_' + key, videojs.extend(tmp.extend, tmp.methods));
tmp = composeCustomComp(__SettingsMenuItemContentComponent__, null, title);
videojs.registerComponent('PlaybackSpeedOption_' + key + '_content', videojs.extend(tmp.extend, tmp.methods));
})(args.playbackSpeeds[k].speed, args.playbackSpeeds[k].title || k);
}
}
break;
case '__leftControls':
struct.leftControls = {
children: {}
};
if (args.options.controlBar.previous) {
tmp = composeCustomComp(videojsComponentButton, 'vjs-previous-button');
tmp.methods.handleClick = function (ev) {
this.player_.trigger('clicked_previous_button');
};
videojs.registerComponent('PreviousButton', videojs.extend(tmp.extend, tmp.methods));
struct.leftControls.children.previousButton = null;
}
if (args.options.controlBar.play) {
struct.leftControls.children.playToggle = null;
}
if (args.options.controlBar.next) {
tmp = composeCustomComp(videojsComponentButton, 'vjs-next-button');
tmp.methods.handleClick = function (ev) {
this.player_.trigger('clicked_next_button');
};
videojs.registerComponent('NextButton', videojs.extend(tmp.extend, tmp.methods));
struct.leftControls.children.nextButton = null;
}
if (args.options.controlBar.volume) {
struct.leftControls.children.volumePanel = null;
}
if (args.options.controlBar.time) {
struct.leftControls.children.currentTimeDisplay = null;
struct.leftControls.children.timeDivider = null;
struct.leftControls.children.durationDisplay = null;
}
videojs.registerComponent('LeftControls', videojs.extend(__MediaCMSComponent__, composeCustomComp(__MediaCMSComponent__, 'vjs-left-controls').methods));
break;
case '__rightControls':
struct.rightControls = {
children: {}
};
if (args.options.subtitles) {
struct.rightControls.children.subtitlesToggle = null;
}
if (args.enabledSettingsPanel) {
struct.rightControls.children.settingsToggle = null;
}
if (args.options.controlBar.theaterMode) {
struct.rightControls.children.theaterModeToggle = null;
}
if (args.options.controlBar.pictureInPicture) {
struct.rightControls.children.pictureInPictureToggle = null;
}
if (args.options.controlBar.fullscreen) {
struct.rightControls.children.fullscreenToggle = null;
}
videojs.registerComponent('RightControls', videojs.extend(__MediaCMSComponent__, composeCustomComp(__MediaCMSComponent__, 'vjs-right-controls').methods));
if (args.options.subtitles) {
tmp = composeCustomComp(videojsComponentButton, 'vjs-subtitles-control');
tmp.methods.handleClick = function (ev) {
this.player_.trigger(pluginInstanceRef.state.isOpenSubtitlesOptions ? 'closeSubtitlesPanel' : 'openSubtitlesPanel', !ev.screenX && !ev.screenY);
};
videojs.registerComponent('SubtitlesToggle', videojs.extend(tmp.extend, tmp.methods));
}
if (args.enabledSettingsPanel) {
tmp = composeCustomComp(videojsComponentButton, 'vjs-settings-control vjs-icon-cog');
tmp.methods.handleClick = function (ev) {
this.player_.trigger(pluginInstanceRef.state.isOpenSettingsOptions ? 'closeSettingsPanel' : 'openSettingsPanel', !ev.screenX && !ev.screenY);
};
videojs.registerComponent('SettingsToggle', videojs.extend(tmp.extend, tmp.methods));
}
if (args.options.controlBar.theaterMode) {
tmp = composeCustomComp(videojsComponentButton, 'vjs-theater-mode-control');
tmp.methods.handleClick = function () {
this.player_.trigger('theatermodechange');
this.updateControlText();
};
tmp.methods.updateControlText = function () {
this.controlText(this.player_.localize(pluginInstanceRef.isTheaterMode() ? 'Default mode' : 'Theater mode'));
};
videojs.registerComponent('TheaterModeToggle', videojs.extend(tmp.extend, tmp.methods));
}
break;
}
}
function controlBarComponentsStructs(pluginInstanceRef, options) {
var struct = {};
var enabledResolutionsPanel = void 0 !== options.resolutions && void 0 !== options.resolutions.options && !!Object.keys(options.resolutions.options).length;
var enabledPlaybackSpeedPanel = void 0 !== options.playbackSpeeds && void 0 !== options.playbackSpeeds.options && !!Object.keys(options.playbackSpeeds.options).length;
var enabledSettingsPanel = enabledResolutionsPanel || enabledPlaybackSpeedPanel;
if (options.controlBar.bottomBackground) {
initComponents(pluginInstanceRef, 'bottomBackground', struct);
}
if (options.controlBar.progress) {
initComponents(pluginInstanceRef, 'progressControl', struct);
}
if (enabledResolutionsPanel) {
initComponents(pluginInstanceRef, '__resolution', struct, {
resolutions: options.resolutions.options
});
}
if (enabledPlaybackSpeedPanel) {
initComponents(pluginInstanceRef, '__playbackSpeed', struct, {
playbackSpeeds: options.playbackSpeeds.options
});
}
if (options.subtitles) {
initComponents(pluginInstanceRef, '__subtitles', struct, {
options: options
});
}
if (enabledSettingsPanel) {
if (enabledResolutionsPanel && enabledPlaybackSpeedPanel) {
initComponents(pluginInstanceRef, '__settings', struct, {
enabledResolutionsPanel: enabledResolutionsPanel,
selectedResolution: enabledResolutionsPanel ? options.resolutions.default : null,
enabledPlaybackSpeedPanel: enabledPlaybackSpeedPanel,
selectedPlaybackSpeed: enabledPlaybackSpeedPanel ? options.playbackSpeeds.default : null
});
} else if (enabledResolutionsPanel) {
initComponents(pluginInstanceRef, '__settings', struct, {
enabledResolutionsPanel: enabledResolutionsPanel,
selectedResolution: enabledResolutionsPanel ? options.resolutions.default : null
});
} else if (enabledPlaybackSpeedPanel) {
initComponents(pluginInstanceRef, '__settings', struct, {
enabledPlaybackSpeedPanel: enabledPlaybackSpeedPanel,
selectedPlaybackSpeed: enabledPlaybackSpeedPanel ? options.playbackSpeeds.default : null
});
}
}
if (options.controlBar.play || options.controlBar.previous || options.controlBar.next || options.controlBar.volume || options.controlBar.time) {
initComponents(pluginInstanceRef, '__leftControls', struct, {
options: options
});
}
if (enabledSettingsPanel || options.subtitles || options.controlBar.theaterMode || options.controlBar.fullscreen || options.controlBar.pictureInPictureToggle) {
initComponents(pluginInstanceRef, '__rightControls', struct, {
options: options,
enabledSettingsPanel: enabledSettingsPanel
});
}
return {
children: struct
};
}
function setControlBarComponents(pluginInstncRef, options, player) {
if (isDefined(options) && isDefined(options.controlBar)) {
generateControlBarComponents(pluginInstncRef)(controlBarComponentsStructs(pluginInstncRef, options), player.getChild('controlBar'));
}
}
function setCornerLayersComponents(pluginInstncRef, options) {
if (isDefined(options)) {
generateCornerLayersComponents(pluginInstncRef, options);
}
}
function setActionsAnimationsComponents(pluginInstncRef) {
generateActionsAnimationsComponents(pluginInstncRef);
}
function replaceLoadingSpinnerComponent(pluginInstncRef) {
generateLoadingSpinnerComponent(pluginInstncRef);
}
function setTouchControlComponents(pluginInstncRef, options) {
generateTouchControlComponents(pluginInstncRef, options);
}
function centralizeBoxPosition(vw, vh, vr, pw, ph, pr) {
var ret = {};
var videoRatio = isDefined(vr) && !isNull(vr) ? vr : vw / vh,
playerRatio = isDefined(pr) && !isNull(pr) ? pr : pw / ph,
playerVerticalOrientation = 1 > playerRatio,
videoVerticalOrientation = 1 > videoRatio;
if (!playerVerticalOrientation) {
if (!videoVerticalOrientation) {
if (videoRatio > playerRatio) {
if (vw >= pw) {
ret.w = pw;
ret.h = ret.w / videoRatio;
} else {
ret.w = vw;
ret.h = vh;
}
} else {
ret.h = vw >= pw ? ph : vh >= ph ? ph : vh;
ret.w = ret.h * videoRatio;
}
} else {
if (vh >= ph) {
ret.h = ph;
ret.w = ret.h * videoRatio;
} else {
ret.w = vw;
ret.h = vh;
}
}
} else if (!videoVerticalOrientation) {
if (vw >= pw) {
ret.w = pw;
ret.h = ret.w / videoRatio;
} else {
ret.w = vw;
ret.h = vh;
}
} else {
if (videoRatio > playerRatio) {
if (vw >= pw) {
ret.w = pw;
ret.h = ret.w / videoRatio;
} else {
ret.w = vw;
ret.h = vh;
}
} else if (vw >= pw) {
ret.h = ph;
ret.w = ret.h * videoRatio;
} else if (vh >= ph) {
ret.h = ph;
ret.w = ret.h * videoRatio;
} else {
ret.w = vw;
ret.h = vh;
}
}
ret.t = (ph - ret.h) / 2;
ret.l = (pw - ret.w) / 2;
return ret;
}
function isBoolean(v) {
return 'boolean' === typeof v || v instanceof Boolean;
}
function isDefined(v) {
return void 0 != v;
}
function isNull(v) {
return null === v;
}
function applyCssTransform(elem, val) {
val = val.replace(/ /g, '');
elem.style.transform = val;
elem.style.msTransform = val;
elem.style.MozTransform = val;
elem.style.WebkitTransform = val;
elem.style.OTransform = val;
}
function browserSupports_csstransforms() {
var i,
v,
b = document.body || document.documentElement,
s = b.style,
p = 'transition';
if ('string' === typeof s[p]) {
return true;
}
v = ['Moz', 'webkit', 'Webkit', 'Khtml', 'O', 'ms'];
p = p.charAt(0).toUpperCase() + p.substr(1);
i = 0;
while (i < v.length) {
if ('string' === typeof s[v[i] + p]) {
return true;
}
i += 1;
}
return false;
}
function browserSupports(type) {
switch (type) {
case 'csstransforms':
return browserSupports_csstransforms();
}
return null;
}
function extractSupportedAndUsedVideoFormat(defaultSource, defaultResolution, availabeResolutions) {
if (defaultResolution && availabeResolutions) {
var x = availabeResolutions[defaultResolution];
var i = 0;
while (i < x.src.length) {
if (defaultSource === x.src[i]
) {
return {
defaultResolution: defaultResolution,
format: x.format[i],
order: i
};
}
i += 1;
}
}
var k, j;
for (k in availabeResolutions) {
if (availabeResolutions.hasOwnProperty(k)) {
j = 0;
while (j < availabeResolutions[k].src.length) {
if (defaultSource === availabeResolutions[k].src[j]) {
while (void 0 === availabeResolutions[k].format[j] && j < availabeResolutions[k].format.length) {
j += 1;
}
defaultResolution = k;
j = void 0 === availabeResolutions[k].format[j] ? availabeResolutions[k].format.length - 1 : j;
return {
defaultResolution: k,
format: availabeResolutions[k].format[j],
order: j
};
}
j += 1;
}
}
}
return {
defaultResolution: defaultResolution,
format: availabeResolutions[defaultResolution].format[0],
order: 0
};
}
function initElementsFocus(player) {
var controlBar = player.getChild('controlBar');
var progressControl = void 0 === controlBar ? controlBar : controlBar.getChild('progressControl');
var leftControls = void 0 === controlBar ? controlBar : controlBar.getChild('leftControls');
var rightControls = void 0 === controlBar ? controlBar : controlBar.getChild('rightControls');
var volumePanel = void 0 === leftControls ? leftControls : leftControls.getChild('volumePanel');
void 0 === volumePanel ? volumePanel : volumePanel.getChild('volumeControl');
var elems = {
playToggle: void 0 === leftControls ? leftControls : leftControls.getChild('playToggle'),
previousButton: void 0 === leftControls ? leftControls : leftControls.getChild('previousButton'),
nextButton: void 0 === leftControls ? leftControls : leftControls.getChild('nextButton'),
muteToggle: void 0 === volumePanel ? volumePanel : volumePanel.getChild('muteToggle'),
volumeBar: void 0 === volumePanel ? volumePanel : volumePanel.getChild('volumeControl').getChild('volumeBar'),
subtitlesToggle: void 0 === rightControls ? rightControls : rightControls.getChild('subtitlesToggle'),
settingsToggle: void 0 === rightControls ? rightControls : rightControls.getChild('settingsToggle'),
fullscreenToggle: void 0 === rightControls ? rightControls : rightControls.getChild('fullscreenToggle'),
theaterModeToggle: void 0 === rightControls ? rightControls : rightControls.getChild('theaterModeToggle'),
pictureInPictureToggle: void 0 === rightControls ? rightControls : rightControls.getChild('PictureInPictureToggle'),
seekBar: void 0 === progressControl ? progressControl : progressControl.getChild('seekBar')
};
if (void 0 !== elems.playToggle) {
handleElemFocus(player, elems.playToggle.el_);
}
if (void 0 !== elems.previousButton) {
handleElemFocus(player, elems.previousButton.el_);
}
if (void 0 !== elems.nextButton) {
handleElemFocus(player, elems.nextButton.el_);
}
if (void 0 !== elems.muteToggle) {
handleElemFocus(player, elems.muteToggle.el_);
}
if (void 0 !== elems.volumeBar) {
handleElemFocus(player, elems.volumeBar.el_);
}
if (void 0 !== elems.subtitlesToggle) {
handleElemFocus(player, elems.subtitlesToggle.el_);
}
if (void 0 !== elems.settingsToggle) {
handleElemFocus(player, elems.settingsToggle.el_);
}
if (void 0 !== elems.fullscreenToggle) {
handleElemFocus(player, elems.fullscreenToggle.el_);
}
if (void 0 !== elems.theaterModeToggle) {
handleElemFocus(player, elems.theaterModeToggle.el_);
}
if (void 0 !== elems.pictureInPictureToggle) {
handleElemFocus(player, elems.pictureInPictureToggle.el_);
}
if (void 0 !== elems.seekBar) {
handleElemFocus(player, elems.seekBar.el_);
}
}
function handleElemFocus(player, elem) {
function onFocus(ev) {
if (!isMouseDown) {
isKeyboardFocus = true;
ev.target.setAttribute('key-focus', '');
}
}
function onBlur(ev) {
if (isKeyboardFocus) {
isKeyboardFocus = false;
ev.target.removeAttribute('key-focus');
}
}
var isMouseDown = false;
var isKeyboardFocus = false;
elem.addEventListener('blur', onBlur);
elem.addEventListener('focus', onFocus);
elem.addEventListener('mouseup', function () {
isMouseDown = false;
});
elem.addEventListener('mousedown', function () {
isMouseDown = true;
});
}
function videoPreviewThumb(player, options) {
player.getChild('ControlBar').getChild('ProgressControl').getChild('SeekBar').removeChild('MouseTimeDisplay');
var halfThumbWidth = -1;
var defaults = {
frame: {
width: 160,
height: 120
}
};
function extend() {
var args = Array.prototype.slice.call(arguments);
var target = args.shift() || {};
var i, obj, prop;
for (i in args) {
obj = args[i];
for (prop in obj) {
if (obj.hasOwnProperty(prop)) {
target[prop] = 'object' === _typeof(obj[prop]) ? extend(target[prop], obj[prop]) : obj[prop];
}
}
}
return target;
}
function getAllComputedStyles(el) {
return window.getComputedStyle ? window.getComputedStyle(el) : el.currentStyle;
}
function getComputedStyle(el, pseudo) {
return function (prop) {
return window.getComputedStyle ? window.getComputedStyle(el, pseudo)[prop] : el.currentStyle[prop];
};
}
function offsetParent(el) {
return 'HTML' !== el.nodeName && 'static' === getComputedStyle(el)('position') ? offsetParent(el.offsetParent) : el;
}
function updateDimensions() {
if (isFullscreen) {
halfThumbWidth = (innerBorderWidth.left + innerBorderWidth.right + 1.5 * settings.frame.width) / 2;
spriteDom.inner.style.height = innerBorderWidth.top + innerBorderWidth.bottom + 1.5 * settings.frame.height + 'px';
spriteDom.inner.style.width = innerBorderWidth.left + innerBorderWidth.right + 1.5 * settings.frame.width + 'px';
} else {
halfThumbWidth = (innerBorderWidth.left + innerBorderWidth.right + settings.frame.width) / 2;
spriteDom.inner.style.height = innerBorderWidth.top + innerBorderWidth.bottom + settings.frame.height + 'px';
spriteDom.inner.style.width = innerBorderWidth.left + innerBorderWidth.right + settings.frame.width + 'px';
}
spriteDom.inner.style.left = -1 * halfThumbWidth + 'px';
}
var spriteDom = {
wrap: document.createElement('div'),
inner: document.createElement('div'),
img: document.createElement('img'),
timeDisplay: document.createElement('div'),
timeDisplayInner: document.createElement('div')
};
var innerBorderWidth = {
top: 0,
left: 0,
right: 0,
bottom: 0
};
var progressControl = player.controlBar.childNameIndex_.ProgressControl;
var progressControlElem;
progressControl.childNameIndex_.SeekBar;
var duration = player.duration();
var isFullscreen = player.isFullscreen();
var settings = extend({}, defaults, options);
spriteDom.wrap.className = 'vjs-preview-thumb';
spriteDom.inner.className = 'vjs-preview-thumb-inner';
spriteDom.inner.style.backgroundImage = 'url(' + settings.url + ')';
spriteDom.timeDisplay.className = 'vjs-preview-thumb-time-display';
spriteDom.timeDisplayInner.innerHTML = '0:00';
var spriteHeight = 0;
player.on('durationchange', function (e) {
duration = player.duration();
});
player.on('loadedmetadata', function (e) {
duration = player.duration();
});
player.on('fullscreenchange', function (e) {
setTimeout(function () {
isFullscreen = player.isFullscreen();
updateDimensions();
}, 100);
});
player.one('playing', function (e) {
updateDimensions();
player.addClass('vjs-enabled-preview-thumb');
spriteDom.img.onload = function () {
var innerStyles = getAllComputedStyles(spriteDom.inner);
if (void 0 !== innerStyles) {
innerBorderWidth.top = parseFloat(innerStyles.borderTopWidth);
innerBorderWidth.left = parseFloat(innerStyles.borderLeftWidth);
innerBorderWidth.right = parseFloat(innerStyles.borderRightWidth);
innerBorderWidth.bottom = parseFloat(innerStyles.borderBottomWidth);
}
spriteHeight = this.naturalHeight;
spriteDom.img = void 0;
updateDimensions();
};
spriteDom.img.src = settings.url;
});
function moveListener(event) {
progressControlElem = progressControlElem || progressControl.el();
var progressControlClientRect = offsetParent(progressControlElem).getBoundingClientRect();
var pageXOffset = window.pageXOffset ? window.pageXOffset : document.documentElement.scrollLeft;
var pageX = event.changedTouches ? event.changedTouches[0].pageX : event.pageX;
var left = (pageX || event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft) - (progressControlClientRect.left + pageXOffset);
var right = (progressControlClientRect.width || progressControlClientRect.right) + pageXOffset;
var mouseTime = !spriteHeight ? 0 : Math.min(spriteHeight / settings.frame.height * settings.frame.seconds - 1, Math.floor((left - progressControlElem.offsetLeft) / progressControl.width() * duration));
spriteDom.timeDisplayInner.innerHTML = videojs.formatTime(duration * (left / right));
if (left < halfThumbWidth) {
left = halfThumbWidth;
} else if (left > right - halfThumbWidth) {
left = right - halfThumbWidth;
}
spriteDom.wrap.style.transform = 'translate(' + Math.min(right - halfThumbWidth, left) + 'px, 0px)';
spriteDom.inner.style.backgroundPositionY = (isFullscreen ? -1.5 : -1) * settings.frame.height * Math.floor(mouseTime / settings.frame.seconds) + 'px';
}
progressControl.on('mouseover', moveListener);
progressControl.on('mousemove', moveListener);
spriteDom.timeDisplay.appendChild(spriteDom.timeDisplayInner);
spriteDom.inner.appendChild(spriteDom.timeDisplay);
spriteDom.wrap.appendChild(spriteDom.inner);
progressControl.el_.appendChild(spriteDom.wrap);
}
var VideojsPluginClass = videojs.getPlugin('plugin');
var MediaCmsVjsPlugin = function (_VideojsPluginClass) {
_inherits(MediaCmsVjsPlugin, _VideojsPluginClass);
var _super = _createSuper(MediaCmsVjsPlugin);
function MediaCmsVjsPlugin(player, domElem, options, state, resolutions, playbackSpeeds, stateUpdateCallback, nextButtonClickCallback, previousButtonClickCallback) {
var _this;
_classCallCheck(this, MediaCmsVjsPlugin);
_this = _super.call(this, player, options);
if (!options.sources.length) {
console.warn('Missing media source');
return _possibleConstructorReturn(_this);
}
options.enabledTouchControls = !!videojs.TOUCH_ENABLED ? true : options.enabledTouchControls;
function filterState(st) {
var ret = {};
if (st && st instanceof Object && Object.keys(st).length) {
if (!isNaN(st.volume)) {
ret.volume = Math.max(Math.min(st.volume, 1), 0);
}
if (isBoolean(st.soundMuted)) {
ret.soundMuted = st.soundMuted;
}
if (isBoolean(st.theaterMode)) {
ret.theaterMode = st.theaterMode;
}
}
if (Object.keys(resolutions).length) {
var resolutionKeys = Object.keys(resolutions);
ret.theSelectedQuality = !st || void 0 === st.theSelectedQuality || void 0 === resolutions[st.theSelectedQuality] ? resolutionKeys[Math.floor(resolutionKeys.length / 2)] : st.theSelectedQuality;
}
if (Object.keys(playbackSpeeds).length) {
if (!!st.theSelectedPlaybackSpeed) {
var k;
st.theSelectedPlaybackSpeed = st.theSelectedPlaybackSpeed.toString();
for (k in playbackSpeeds) {
if (playbackSpeeds.hasOwnProperty(k)) {
if (st.theSelectedPlaybackSpeed === playbackSpeeds[k].speed) {
ret.theSelectedPlaybackSpeed = playbackSpeeds[k].speed;
break;
}
}
}
}
} else {
ret.theSelectedPlaybackSpeed = '1';
}
return ret;
}
_this.videoHtmlElem = domElem;
_this.initedVideoPreviewThumb = false;
_this.videoPreviewThumb = null;
if (!!!videojs.TOUCH_ENABLED && !!options.videoPreviewThumb && void 0 !== options.videoPreviewThumb.url && void 0 !== options.videoPreviewThumb.frame && !isNaN(options.videoPreviewThumb.frame.width) && !isNaN(options.videoPreviewThumb.frame.height) && !isNaN(options.videoPreviewThumb.frame.seconds)) {
_this.videoPreviewThumb = options.videoPreviewThumb;
}
_this.enabledFullscreenToggle = options.controlBar.fullscreen;
_this.enabledTheaterMode = options.controlBar.theaterMode;
_this.playbackSpeeds = playbackSpeeds;
_this.videoResolutions = null;
_this.videoPlaybackSpeeds = null;
_this.timeoutSettingsPanelFocusout = null;
_this.timeoutSubtitlesPanelFocusout = null;
_this.timeoutResolutionsPanelFocusout = null;
_this.timeoutPlaybackSpeedsPanelFocusout = null;
_this.actionAnimationTimeout = null;
_this.seekingTimeout = null;
_this.updateTime = 0;
_this.pausedTime = -1;
_this.seeking = false;
_this.wasPlayingOnResolutionChange = false;
_this.hadStartedOnResolutionChange = false;
_this.isChangingResolution = false;
_this.videoNativeDimensions = options.nativeDimensions;
_this.setState(videojs.mergeOptions(_this.state, filterState(state)));
_this.stateUpdateCallback = stateUpdateCallback instanceof Function ? stateUpdateCallback : null;
_this.nextButtonClickCallback = nextButtonClickCallback instanceof Function ? nextButtonClickCallback : null;
_this.previousButtonClickCallback = previousButtonClickCallback instanceof Function ? previousButtonClickCallback : null;
if (_this.state.theSelectedQuality) {
_this.videoResolutions = resolutions;
_this.videoFormat = extractSupportedAndUsedVideoFormat(_this.player.src(), _this.state.theSelectedQuality, _this.videoResolutions);
_this.state.theSelectedQuality = _this.videoFormat.defaultResolution;
_this.videoFormat = {
format: _this.videoFormat.format,
order: _this.videoFormat.order
};
options.resolutions = {
default: _this.state.theSelectedQuality,
options: _this.videoResolutions
};
}
if (_this.state.theSelectedPlaybackSpeed) {
_this.videoPlaybackSpeeds = playbackSpeeds;
options.playbackSpeeds = {
default: _this.state.theSelectedPlaybackSpeed,
options: _this.videoPlaybackSpeeds
};
}
if (void 0 !== state.theSelectedSubtitleOption && null !== state.theSelectedSubtitleOption) {
_this.state.theSelectedSubtitleOption = state.theSelectedSubtitleOption;
}
if (!!!options.subtitles || !!!options.subtitles.languages || !!!options.subtitles.languages.length || !options.subtitles.languages.length) {
options.subtitles = null;
} else {
options.subtitles.languages.unshift({
label: 'Off',
srclang: 'off',
src: null
});
}
_this.subtitles = options.subtitles;
setActionsAnimationsComponents(_assertThisInitialized(_this));
replaceLoadingSpinnerComponent(_assertThisInitialized(_this));
setCornerLayersComponents(_assertThisInitialized(_this), options);
if (options.enabledTouchControls) {
setTouchControlComponents(_assertThisInitialized(_this), options);
}
setControlBarComponents(_assertThisInitialized(_this), options, player);
_this.csstransforms = browserSupports('csstransforms');
player.addClass('vjs-loading-video');
if (_this.videoNativeDimensions) {
player.addClass('vjs-native-dimensions');
}
if (options.enabledTouchControls) {
player.addClass('vjs-enabled-touch-controls');
}
_this.progressBarLine = null;
_this.onBandwidthUpdate = null;
_this.onHlsRetryPlaylist = null;
if (options.keyboardControls) {
_this.player.el_.onkeyup = _this.onKeyUp.bind(_assertThisInitialized(_this));
_this.player.el_.onkeydown = _this.onKeyDown.bind(_assertThisInitialized(_this));
}
_this.onError = _this.onError.bind(_assertThisInitialized(_this));
_this.on(player, ['error'], _this.onError);
_this.on(player, ['dispose'], _this.onDispose);
_this.on(player, ['ended'], _this.onEnded);
_this.on(player, ['volumechange'], _this.onVolumeChange);
_this.on(player, ['playing', 'pause'], _this.onPlayToggle);
_this.on(player, ['timeupdate'], _this.onTimeUpdateChange);
_this.on(player, ['fullscreenchange'], _this.onFullscreenChange);
_this.on(player, ['theatermodechange'], _this.onTheaterModeChange);
_this.on(player, ['openSettingsPanel'], _this.openSettingsOptions);
_this.on(player, ['closeSettingsPanel'], _this.closeSettingsOptions);
_this.on(player, ['openSubtitlesPanel'], _this.openSubtitlesOptions);
_this.on(player, ['closeSubtitlesPanel'], _this.closeSubtitlesOptions);
_this.on(player, ['openQualityOptions'], _this.openQualityOptions);
_this.on(player, ['closeQualityOptions'], _this.closeQualityOptions);
_this.on(player, ['openPlaybackSpeedOptions'], _this.openPlaybackSpeedOptions);
_this.on(player, ['closePlaybackSpeedOptions'], _this.closePlaybackSpeedOptions);
_this.on(player, ['selectedQuality'], _this.onQualitySelection);
_this.on(player, ['selectedSubtitleOption'], _this.onSubtitleOptionSelection);
_this.on(player, ['selectedPlaybackSpeed'], _this.onPlaybackSpeedSelection);
_this.on(player, ['focusoutSettingsPanel'], _this.onFocusOutSettingsPanel);
_this.on(player, ['focusoutSubtitlesPanel'], _this.onFocusOutSubtitlesPanel);
_this.on(player, ['focusoutResolutionsPanel'], _this.onFocusOutResolutionsPanel);
_this.on(player, ['focusoutPlaybackSpeedsPanel'], _this.onFocusOutPlaybackSpeedsPanel);
_this.on(player, ['moveforward'], _this.onMoveForward);
_this.on(player, ['movebackward'], _this.onMoveBackward);
_this.on(player, ['userinactive'], _this.onUserInactive);
_this.on(player, ['seeked'], _this.onSeeked);
_this.on(player, ['seeking'], _this.onSeeking);
_this.on('statechanged', _this.onStateChange);
_this.hasPrevious = !!options.controlBar.previous;
_this.hasNext = !!options.controlBar.next;
if (_this.hasPrevious
) {
_this.on(player, ['clicked_previous_button'], _this.onPreviousButtonClick);
}
if (_this.hasNext
) {
_this.on(player, ['clicked_next_button'], _this.onNextButtonClick);
}
_this.onPlayerReady = _this.onPlayerReady.bind(_assertThisInitialized(_this));
player.ready(_this.onPlayerReady);
initElementsFocus(player);
return _this;
}
_createClass(MediaCmsVjsPlugin, [{
key: "onPreviousButtonClick",
value: function onPreviousButtonClick() {
if (this.hasPrevious) {
this.actionAnimation('play_previous');
if (this.previousButtonClickCallback) {
this.previousButtonClickCallback();
}
}
}
}, {
key: "onNextButtonClick",
value: function onNextButtonClick() {
if (this.hasNext) {
this.actionAnimation('play_next');
if (this.nextButtonClickCallback) {
this.nextButtonClickCallback();
}
}
}
}, {
key: "actionAnimation",
value: function actionAnimation(action) {
if (!this.player.hasStarted_) {
return;
}
this.actionAnimElem = this.actionAnimElem || this.player.el_.querySelector('.vjs-actions-anim');
if (!this.actionAnimElem) {
return;
}
var cls;
switch (action) {
case 'play':
if (void 0 !== this.previousActionAnim && 'forward' !== this.previousActionAnim && 'backward' !== this.previousActionAnim) {
cls = 'started-playing';
}
break;
case 'pause':
cls = 'just-paused';
break;
case 'backward':
cls = 'moving-backward';
break;
case 'forward':
cls = 'moving-forward';
break;
case 'volume':
if (this.player.muted() || 0.001 >= this.player.volume()) {
cls = 'volume-mute';
} else if (0.33 >= this.player.volume()) {
cls = 'volume-low';
} else if (0.69 >= this.player.volume()) {
cls = 'volume-mid';
} else {
cls = 'volume-high';
}
break;
case 'play_previous':
cls = 'play_previous';
break;
case 'play_next':
cls = 'play_next';
break;
}
if (!cls) {
return;
}
if (this.actionAnimationTimeout) {
this.actionAnimElem.setAttribute('class', 'vjs-actions-anim');
}
setTimeout(function () {
this.previousActionAnim = action;
cls += ' active-anim';
clearTimeout(this.actionAnimationTimeout);
this.actionAnimElem.setAttribute('class', 'vjs-actions-anim ' + cls);
this.actionAnimationTimeout = setTimeout(function (ins) {
ins.actionAnimElem.setAttribute('class', 'vjs-actions-anim');
ins.actionAnimationTimeout = null;
ins.previousActionAnim = null;
}, 750, this);
}.bind(this), this.actionAnimationTimeout ? 20 : 0);
}
}, {
key: "onMoveForward",
value: function onMoveForward() {
this.actionAnimation('forward');
}
}, {
key: "onMoveBackward",
value: function onMoveBackward() {
this.actionAnimation('backward');
}
}, {
key: "onKeyDown",
value: function onKeyDown(e) {
if (this.player.ended()) {
return;
}
var key = e.keyCode || e.charCode;
var found = false;
switch (key) {
case 32:
this.player[this.player.paused() ? 'play' : 'pause']();
found = true;
break;
case 37:
this.player.currentTime(this.player.currentTime() - 5 * this.state.theSelectedPlaybackSpeed);
this.player.trigger('movebackward');
found = true;
break;
case 38:
if (this.player.muted()) {
this.player.muted(false);
} else {
this.player.volume(Math.min(1, this.player.volume() + 0.03));
}
found = true;
break;
case 39:
this.player.currentTime(this.player.currentTime() + 5 * this.state.theSelectedPlaybackSpeed);
this.player.trigger('moveforward');
found = true;
break;
case 40:
this.player.volume(Math.max(0, this.player.volume() - 0.03));
found = true;
break;
}
if (found) {
e.preventDefault();
e.stopPropagation();
}
}
}, {
key: "onKeyUp",
value: function onKeyUp(e) {
if (this.player.ended()) {
return;
}
var key = e.keyCode || e.charCode;
var found = false;
if (e.shiftKey) {
switch (key) {
case 78:
this.onNextButtonClick();
break;
case 80:
this.onPreviousButtonClick();
break;
}
} else if (48 <= key && 57 >= key || 96 <= key && 105 >= key) {
this.player.currentTime(0.1 * (57 < key ? key - 96 : key - 48) * this.player.duration());
this.player.trigger({
type: 'timeupdate',
target: this,
manuallyTriggered: true
});
} else {
switch (key) {
case 75:
this.player[this.player.paused() ? 'play' : 'pause']();
found = true;
break;
case 70:
if (this.enabledFullscreenToggle) {
if (this.player.isFullscreen()) {
this.player.exitFullscreen();
} else {
this.player.requestFullscreen();
}
found = true;
}
break;
case 77:
this.player.muted(!this.player.muted());
found = true;
break;
case 84:
if (this.enabledTheaterMode) {
if (this.player.isFullscreen()) {
this.player.exitFullscreen();
}
this.player.trigger('theatermodechange');
}
break;
}
}
if (found) {
e.preventDefault();
e.stopPropagation();
}
}
}, {
key: "onUserInactive",
value: function onUserInactive() {
if (this.state.isOpenQualityOptions || this.state.isOpenPlaybackSpeedOptions || this.state.isOpenSettingsOptions) {
this.player.trigger('closeSettingsPanel');
}
}
}, {
key: "onSeeked",
value: function onSeeked() {
this.seekingTimeout = setTimeout(function (ins) {
ins.seeking = false;
}, 300, this);
}
}, {
key: "onSeeking",
value: function onSeeking() {
clearTimeout(this.seekingTimeout);
this.seeking = true;
if (!!this.progressBarLine) {
this.progressBarLine.style.width = (100 * this.player.currentTime() / this.player.duration()).toFixed(2) + '%';
}
}
}, {
key: "initDomEvents",
value: function initDomEvents() {
this.onWindowResize = this.onWindowResize.bind(this);
window.addEventListener('resize', this.onWindowResize);
this.videoHtmlElem.onloadeddata = this.onVideoDataLoad.bind(this);
if (4 === this.videoHtmlElem.readyState) {
this.onVideoDataLoad();
}
}
}, {
key: "onVideoMetaDataLoad",
value: function onVideoMetaDataLoad() {}
}, {
key: "onVideoDataLoad",
value: function onVideoDataLoad() {
if (this.videoPreviewThumb && !this.initedVideoPreviewThumb) {
this.initedVideoPreviewThumb = true;
videoPreviewThumb(this.player, this.videoPreviewThumb);
}
this.player.removeClass('vjs-loading-video');
if ('Auto' === this.state.theSelectedQuality) {
if (!!this.player.tech_.hls && null === this.onBandwidthUpdate) {
this.onBandwidthUpdate = this.onBandwidthUpdateCallback.bind(this);
this.player.tech_.on('bandwidthupdate', this.onBandwidthUpdate);
this.onBandwidthUpdateCallback();
}
} else {
if (null !== this.onBandwidthUpdate) {
this.player.tech_.off('bandwidthupdate', this.onBandwidthUpdate);
this.onBandwidthUpdate = null;
}
if (!!this.player.tech_.hls && null === this.onHlsRetryPlaylist) {
this.onHlsRetryPlaylist = this.onHlsRetryPlaylistCallback.bind(this);
this.player.tech_.on('retryplaylist', this.onHlsRetryPlaylist);
}
}
if (this.isChangingResolution) {
if (this.hadStartedOnResolutionChange) {
this.player.hasStarted(true);
this.player.removeClass('vjs-changing-resolution');
this.hadStartedOnResolutionChange = false;
}
if (this.wasPlayingOnResolutionChange) {
this.player.play();
this.wasPlayingOnResolutionChange = false;
} else {
this.player.pause();
}
this.isChangingResolution = false;
}
this.updateVideoElementPosition();
}
}, {
key: "onBandwidthUpdateCallback",
value: function onBandwidthUpdateCallback(ev) {
this.onAutoQualitySelection(this.player.tech_.hls.playlists.media_.attributes.RESOLUTION.height);
}
}, {
key: "onHlsRetryPlaylistCallback",
value: function onHlsRetryPlaylistCallback(ev) {
if ('Auto' !== this.state.theSelectedQuality && void 0 !== this.videoResolutions['Auto']) {
this.setState({
theSelectedQuality: 'Auto'
});
}
}
}, {
key: "onPlayerReady",
value: function onPlayerReady() {
if (null !== this.subtitles) {
var subtitleLanguages = [];
var i;
var tracks = this.player.textTracks();
for (i = 0; i < tracks.length; i++) {
subtitleLanguages.push(tracks[i].language);
}
i = 1;
while (i < this.subtitles.languages.length) {
if (-1 === subtitleLanguages.indexOf(this.subtitles.languages[i].srclang)) {
this.player.addRemoteTextTrack({
kind: 'subtitles',
label: this.subtitles.languages[i].label,
language: this.subtitles.languages[i].srclang,
src: this.subtitles.languages[i].src
});
}
i += 1;
}
}
this.changeVideoSubtitle();
this.progressBarLine = this.player.el_.querySelector('.video-js .vjs-progress-holder .vjs-play-progress');
this.initDomEvents();
this.player.volume(this.state.volume);
this.player.muted(this.state.soundMuted);
this.player.playbackRate(this.state.theSelectedPlaybackSpeed);
this.player.addClass('vjs-mediacms-plugin');
this.updateTheaterModeClassname();
setTimeout(function (ins) {
ins.updateVideoPlayerRatios();
}, 100, this);
}
}, {
key: "changeVideoSubtitle",
value: function changeVideoSubtitle() {
if ('off' !== this.state.theSelectedSubtitleOption) {
this.player.removeClass('vjs-subtitles-off');
this.player.addClass('vjs-subtitles-on');
} else {
this.player.removeClass('vjs-subtitles-on');
this.player.addClass('vjs-subtitles-off');
}
var tracks = this.player.textTracks();
for (var i = 0; i < tracks.length; i++) {
if ('subtitles' === tracks[i].kind) {
tracks[i].mode = this.state.theSelectedSubtitleOption === tracks[i].language ? 'showing' : 'hidden';
}
}
}
}, {
key: "changeVideoResolution",
value: function changeVideoResolution() {
this.isChangingResolution = true;
var sources = [];
var currentTime = this.player.currentTime();
var duration = this.player.duration();
this.wasPlayingOnResolutionChange = !this.player.paused();
this.hadStartedOnResolutionChange = this.player.hasStarted();
if (this.hadStartedOnResolutionChange) {
this.player.addClass('vjs-changing-resolution');
}
var i = 0;
while (i < this.videoResolutions[this.state.theSelectedQuality].src.length) {
sources.push({
src: this.videoResolutions[this.state.theSelectedQuality].src[i]
});
i += 1;
}
this.player.src(sources);
this.player.techCall_('reset');
this.player.currentTime(currentTime);
this.player.duration(duration);
this.player.playbackRate(this.state.theSelectedPlaybackSpeed);
}
}, {
key: "changePlaybackSpeed",
value: function changePlaybackSpeed() {
this.player.playbackRate(this.state.theSelectedPlaybackSpeed);
}
}, {
key: "onStateChange",
value: function onStateChange(d) {
if (d.changes.videoRatio || d.changes.playerRatio) {
this.updateVideoElementPosition();
}
if (d.changes.volume) {
this.onPublicStateUpdate();
}
if (d.changes.soundMuted) {
this.onPublicStateUpdate();
}
if (d.changes.theaterMode) {
this.onPublicStateUpdate();
}
if (d.changes.theaterMode) {
this.updateTheaterModeClassname();
setTimeout(function (ins) {
ins.updateVideoPlayerRatios();
}, 20, this);
}
if (d.changes.isOpenSettingsOptions) ;
if (d.changes.isOpenQualityOptions) ;
if (d.changes.isOpenPlaybackSpeedOptions) ;
if (d.changes.theSelectedSubtitleOption) {
this.changeVideoSubtitle();
this.player.trigger('updatedSelectedSubtitleOption');
this.onPublicStateUpdate();
}
if (d.changes.theSelectedQuality) {
this.changeVideoResolution();
this.player.trigger('updatedSelectedQuality');
this.onPublicStateUpdate();
}
if (d.changes.theSelectedPlaybackSpeed) {
this.changePlaybackSpeed();
this.player.trigger('updatedSelectedPlaybackSpeed');
this.onPublicStateUpdate();
}
if (d.changes.isOpenSettingsOptions || d.changes.isOpenQualityOptions || d.changes.theSelectedQuality || d.changes.isOpenPlaybackSpeedOptions || d.changes.theSelectedPlaybackSpeed) {
this.player.trigger('updatedSettingsPanelsVisibility');
}
if (d.changes.isOpenSubtitlesOptions) {
this.player.trigger('updatedSubtitlesPanelsVisibility');
}
if (d.changes.openSettings) {
if (this.state.openSettings) {
this.player.trigger('openedSettingsPanel', this.state.openSettingsFromKeyboard);
}
}
if (d.changes.closeSettings) {
if (this.state.closeSettings) {
this.player.trigger('closedSettingsPanel', this.state.closeSettingsFromKeyboard);
}
}
if (d.changes.openSubtitles) {
if (this.state.openSubtitles) {
this.player.trigger('openedSubtitlesPanel', this.state.openSubtitlesFromKeyboard);
}
}
if (d.changes.closeSubtitles) {
if (this.state.closeSubtitles) {
this.player.trigger('closedSubtitlesPanel', this.state.closeSubtitlesFromKeyboard);
}
}
if (d.changes.openQualities) {
if (this.state.openQualities) {
this.player.trigger('openedQualities', this.state.openQualitiesFromKeyboard);
}
}
if (d.changes.closeQualities) {
if (this.state.closeQualities) {
this.player.trigger('closedQualities', this.state.closeQualitiesFromKeyboard);
}
}
if (d.changes.openPlaybackSpeeds) {
if (this.state.openPlaybackSpeeds) {
this.player.trigger('openedPlaybackSpeeds', this.state.openPlaybackSpeedsFromKeyboard);
}
}
if (d.changes.closePlaybackSpeeds) {
if (this.state.closePlaybackSpeeds) {
this.player.trigger('closedPlaybackSpeeds', this.state.closePlaybackSpeedsFromKeyboard);
}
}
}
}, {
key: "onDispose",
value: function onDispose() {
window.removeEventListener('resize', this.onWindowResize);
}
}, {
key: "onError",
value: function onError(e) {
if (!this.player.paused()) {
this.player.pause();
}
this.player.techCall_('reset');
}
}, {
key: "onEnded",
value: function onEnded() {
this.setState(this.state, {
ended: !0
});
}
}, {
key: "onVolumeChange",
value: function onVolumeChange() {
this.setState({
volume: this.player.volume(),
soundMuted: this.player.muted()
});
this.actionAnimation('volume');
}
}, {
key: "onPlayToggle",
value: function onPlayToggle(ev) {
var playing = 'playing' === ev.type;
if (!this.seeking && 1 > Math.abs(this.updateTimeDiff)) {
this.actionAnimation(!playing ? 'pause' : 'play');
}
this.setState({
playing: playing
});
}
}, {
key: "onTimeUpdateChange",
value: function onTimeUpdateChange(ev) {
var ct = this.player.currentTime();
this.updateTimeDiff = ct - this.updateTime;
this.updateTime = ct;
}
}, {
key: "onFullscreenChange",
value: function onFullscreenChange() {
this.player.addClass('vjs-fullscreen-change');
setTimeout(function (plr) {
plr.removeClass('vjs-fullscreen-change');
}, 100, this.player);
this.updateVideoElementPosition();
}
}, {
key: "onTheaterModeChange",
value: function onTheaterModeChange() {
this.setState({
theaterMode: !this.state.theaterMode
});
}
}, {
key: "openSettingsOptions",
value: function openSettingsOptions(ev, triggeredFromKeyboard) {
clearTimeout(this.timeoutSettingsPanelFocusout);
this.setState({
openSettings: new Date(),
openSettingsFromKeyboard: triggeredFromKeyboard ? new Date() : !1,
isOpenSettingsOptions: !0,
isOpenQualityOptions: !1,
isOpenPlaybackSpeedOptions: !1,
isOpenSubtitlesOptions: !1
});
}
}, {
key: "closeSettingsOptions",
value: function closeSettingsOptions(ev, triggeredFromKeyboard) {
clearTimeout(this.timeoutSettingsPanelFocusout);
this.setState({
closeSettings: new Date(),
closeSettingsFromKeyboard: triggeredFromKeyboard ? new Date() : !1,
isOpenSettingsOptions: !1,
isOpenQualityOptions: !1,
isOpenPlaybackSpeedOptions: !1
});
}
}, {
key: "openSubtitlesOptions",
value: function openSubtitlesOptions(ev, triggeredFromKeyboard) {
clearTimeout(this.timeoutSubtitlesPanelFocusout);
this.setState({
openSubtitles: new Date(),
openSubtitlesFromKeyboard: triggeredFromKeyboard ? new Date() : !1,
isOpenSubtitlesOptions: !0,
isOpenSettingsOptions: !1,
isOpenQualityOptions: !1,
isOpenPlaybackSpeedOptions: !1
});
}
}, {
key: "closeSubtitlesOptions",
value: function closeSubtitlesOptions(ev, triggeredFromKeyboard) {
clearTimeout(this.timeoutSubtitlesPanelFocusout);
this.setState({
closeSubtitles: new Date(),
closeSubtitlesFromKeyboard: triggeredFromKeyboard ? new Date() : !1,
isOpenSubtitlesOptions: !1
});
}
}, {
key: "openQualityOptions",
value: function openQualityOptions(ev, triggeredFromKeyboard) {
clearTimeout(this.timeoutResolutionsPanelFocusout);
this.setState({
openQualities: new Date(),
openQualitiesFromKeyboard: triggeredFromKeyboard ? new Date() : !1,
isOpenSettingsOptions: !1,
isOpenQualityOptions: !0
});
}
}, {
key: "openPlaybackSpeedOptions",
value: function openPlaybackSpeedOptions(ev, triggeredFromKeyboard) {
clearTimeout(this.timeoutPlaybackSpeedsPanelFocusout);
this.setState({
openPlaybackSpeeds: new Date(),
openPlaybackSpeedsFromKeyboard: triggeredFromKeyboard ? new Date() : !1,
isOpenSettingsOptions: !1,
isOpenPlaybackSpeedOptions: !0
});
}
}, {
key: "closeQualityOptions",
value: function closeQualityOptions(ev, triggeredFromKeyboard) {
clearTimeout(this.timeoutResolutionsPanelFocusout);
this.setState({
closeQualities: new Date(),
closeQualitiesFromKeyboard: triggeredFromKeyboard ? new Date() : !1,
openSettings: new Date(),
openSettingsFromKeyboard: triggeredFromKeyboard ? new Date() : !1,
isOpenSettingsOptions: !0,
isOpenQualityOptions: !1
});
}
}, {
key: "closePlaybackSpeedOptions",
value: function closePlaybackSpeedOptions(ev, triggeredFromKeyboard) {
clearTimeout(this.timeoutPlaybackSpeedsPanelFocusout);
this.setState({
closePlaybackSpeeds: new Date(),
closePlaybackSpeedsFromKeyboard: triggeredFromKeyboard ? new Date() : !1,
openSettings: new Date(),
openSettingsFromKeyboard: triggeredFromKeyboard ? new Date() : !1,
isOpenSettingsOptions: !0,
isOpenPlaybackSpeedOptions: !1
});
}
}, {
key: "onQualitySelection",
value: function onQualitySelection(ev, newQuality) {
this.setState({
isOpenSettingsOptions: !1,
isOpenQualityOptions: !1,
theSelectedQuality: newQuality
});
}
}, {
key: "onSubtitleOptionSelection",
value: function onSubtitleOptionSelection(ev, newSelection) {
this.setState({
isOpenSubtitlesOptions: !1,
theSelectedSubtitleOption: newSelection
});
}
}, {
key: "onAutoQualitySelection",
value: function onAutoQualitySelection(newAutoQuality) {
if (newAutoQuality !== this.state.theSelectedAutoQuality) {
this.setState({
theSelectedAutoQuality: newAutoQuality
});
this.player.trigger('updatedSelectedQuality');
}
}
}, {
key: "onPlaybackSpeedSelection",
value: function onPlaybackSpeedSelection(ev, newPlaybackSpeed) {
this.setState({
isOpenSettingsOptions: !1,
isOpenPlaybackSpeedOptions: !1,
theSelectedPlaybackSpeed: newPlaybackSpeed
});
}
}, {
key: "onFocusOutSubtitlesPanel",
value: function onFocusOutSubtitlesPanel() {
if (this.timeoutSubtitlesPanelFocusout) {
return;
}
this.player.focus();
this.timeoutSubtitlesPanelFocusout = setTimeout(function (ins) {
ins.setState({
isOpenSubtitlesOptions: !1
});
ins.timeoutSubtitlesPanelFocusout = null;
}, 100, this);
}
}, {
key: "onFocusOutSettingsPanel",
value: function onFocusOutSettingsPanel() {
if (this.timeoutSettingsPanelFocusout) {
return;
}
if (!this.state.isOpenQualityOptions && !this.state.isOpenPlaybackSpeedOptions) {
this.player.focus();
}
if (!this.state.isOpenQualityOptions) {
this.timeoutSettingsPanelFocusout = setTimeout(function (ins) {
if (ins.state.isOpenSettingsOptions && !ins.state.isOpenQualityOptions) {
ins.setState({
isOpenSettingsOptions: !1
});
}
ins.timeoutSettingsPanelFocusout = null;
}, 100, this);
} else if (!this.state.isOpenPlaybackSpeedOptions) {
this.timeoutSettingsPanelFocusout = setTimeout(function (ins) {
if (ins.state.isOpenSettingsOptions && !ins.state.isOpenPlaybackSpeedOptions) {
ins.setState({
isOpenSettingsOptions: !1
});
}
ins.timeoutSettingsPanelFocusout = null;
}, 100, this);
}
}
}, {
key: "onFocusOutResolutionsPanel",
value: function onFocusOutResolutionsPanel() {
if (this.timeoutResolutionsPanelFocusout) {
return;
}
if (!this.state.isOpenSettingsOptions && !this.state.isOpenPlaybackSpeedOptions) {
this.player.focus();
}
if (!this.state.isOpenSettingsOptions) {
this.timeoutResolutionsPanelFocusout = setTimeout(function (ins) {
if (ins.state.isOpenQualityOptions && !ins.state.isOpenSettingsOptions) {
ins.setState({
isOpenQualityOptions: !1
});
}
ins.timeoutResolutionsPanelFocusout = null;
}, 100, this);
}
}
}, {
key: "onFocusOutPlaybackSpeedsPanel",
value: function onFocusOutPlaybackSpeedsPanel() {
if (this.timeoutPlaybackSpeedsPanelFocusout) {
return;
}
if (!this.state.isOpenQualityOptions && !this.state.isOpenSettingsOptions) {
this.player.focus();
}
if (!this.state.isOpenSettingsOptions) {
this.timeoutPlaybackSpeedsPanelFocusout = setTimeout(function (ins) {
if (ins.state.isOpenPlaybackSpeedOptions && !ins.state.isOpenSettingsOptions) {
ins.setState({
isOpenPlaybackSpeedOptions: !1
});
}
ins.timeoutPlaybackSpeedsPanelFocusout = null;
}, 100, this);
}
}
}, {
key: "onPublicStateUpdate",
value: function onPublicStateUpdate() {
if (this.stateUpdateCallback) {
this.stateUpdateCallback({
volume: this.state.volume,
theaterMode: this.state.theaterMode,
soundMuted: this.state.soundMuted,
quality: this.state.theSelectedQuality,
playbackSpeed: this.state.theSelectedPlaybackSpeed,
subtitle: this.state.theSelectedSubtitleOption
});
}
}
}, {
key: "onWindowResize",
value: function onWindowResize() {
this.updateVideoPlayerRatios();
}
}, {
key: "updateVideoPlayerRatios",
value: function updateVideoPlayerRatios() {
this.setState({
videoRatio: this.videoHtmlElem.offsetWidth / this.videoHtmlElem.offsetHeight,
playerRatio: this.player.el_.offsetWidth / this.player.el_.offsetHeight
});
var settingsPanelInner = document.querySelectorAll('.vjs-settings-panel-inner');
if (settingsPanelInner.length) {
var i = 0;
while (i < settingsPanelInner.length) {
settingsPanelInner[i].style.maxHeight = this.videoHtmlElem.offsetHeight - 120 + 'px';
i += 1;
}
}
}
}, {
key: "updateTheaterModeClassname",
value: function updateTheaterModeClassname() {
this.player[this.state.theaterMode ? 'addClass' : 'removeClass']('vjs-theater-mode');
}
}, {
key: "updateVideoElementPosition",
value: function updateVideoElementPosition() {
if (this.videoHtmlElem) {
if (this.videoNativeDimensions) {
var newval = centralizeBoxPosition(this.videoHtmlElem.offsetWidth, this.videoHtmlElem.offsetHeight, this.state.videoRatio, this.player.el_.offsetWidth, this.player.el_.offsetHeight, this.state.playerRatio);
if (this.csstransforms) {
applyCssTransform(this.videoHtmlElem, 'translate(' + (newval.l > 0 ? newval.l : '0') + 'px,' + (newval.t > 0 ? newval.t : '0') + 'px)');
} else {
this.videoHtmlElem.style.top = newval.t > 0 ? newval.t + 'px' : '';
this.videoHtmlElem.style.left = newval.l > 0 ? newval.l + 'px' : '';
}
}
}
}
}, {
key: "isTheaterMode",
value: function isTheaterMode() {
return this.state.theaterMode;
}
}, {
key: "isFullscreen",
value: function isFullscreen() {
return this.player.isFullscreen();
}
}, {
key: "isEnded",
value: function isEnded() {
return this.player.ended();
}
}, {
key: "selectedQualityTitle",
value: function selectedQualityTitle() {
return this.state.theSelectedQuality + ('Auto' === this.state.theSelectedQuality && null !== this.state.theSelectedAutoQuality ? "&nbsp;<span class='auto-resolution-title'>" + this.state.theSelectedAutoQuality + '</span>' : '');
}
}, {
key: "selectedPlaybackSpeedTitle",
value: function selectedPlaybackSpeedTitle() {
var k;
for (k in this.playbackSpeeds) {
if (this.playbackSpeeds.hasOwnProperty(k)) {
if (this.state.theSelectedPlaybackSpeed === this.playbackSpeeds[k].speed) {
return this.playbackSpeeds[k].title || this.playbackSpeeds[k].speed;
}
}
}
return 'n/a';
}
}]);
return MediaCmsVjsPlugin;
}(VideojsPluginClass);
MediaCmsVjsPlugin.defaultState = {
volume: 1,
theaterMode: !1,
soundMuted: !1,
ended: !1,
playing: !1,
videoRatio: 0,
playerRatio: 0,
isOpenSettingsOptions: !1,
isOpenSubtitlesOptions: !1,
isOpenQualityOptions: !1,
theSelectedQuality: null,
theSelectedSubtitleOption: 'off',
theSelectedAutoQuality: null,
theSelectedPlaybackSpeed: null,
openSettings: !1,
closeSettings: !1,
openSettingsFromKeyboard: !1,
closeSettingsFromKeyboard: !1,
openSubtitles: !1,
openSubtitlesFromKeyboard: !1,
closeSubtitles: !1,
closeSubtitlesFromKeyboard: !1,
openQualities: !1,
closeQualities: !1,
openQualitiesFromKeyboard: !1,
closeQualitiesFromKeyboard: !1
};
MediaCmsVjsPlugin.VERSION = version;
videojs.registerPlugin('mediaCmsVjsPlugin', MediaCmsVjsPlugin);
return MediaCmsVjsPlugin;
}
function generator()
{
if (null === Plugin) {
Plugin = generatePlugin();
}
return Plugin;
}
var MediaCmsVjsPlugin = generator();
return MediaCmsVjsPlugin;
})));