2022-06-03 17:14:06 +02:00

460 lines
14 KiB
JavaScript

/*! @name videojs-license @version 0.1.0 @license MIT */
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('video.js'), require('global/document')) :
typeof define === 'function' && define.amd ? define(['video.js', 'global/document'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojsLicense = factory(global.videojs, global.document));
}(this, (function (videojs, document) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var videojs__default = /*#__PURE__*/_interopDefaultLegacy(videojs);
var document__default = /*#__PURE__*/_interopDefaultLegacy(document);
function createCommonjsModule(fn, basedir, module) {
return module = {
path: basedir,
exports: {},
require: function (path, base) {
return commonjsRequire(path, (base === undefined || base === null) ? module.path : base);
}
}, fn(module, module.exports), module.exports;
}
function commonjsRequire () {
throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs');
}
var assertThisInitialized = createCommonjsModule(function (module) {
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
module.exports = _assertThisInitialized;
module.exports["default"] = module.exports, module.exports.__esModule = true;
});
var setPrototypeOf = createCommonjsModule(function (module) {
function _setPrototypeOf(o, p) {
module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
module.exports["default"] = module.exports, module.exports.__esModule = true;
return _setPrototypeOf(o, p);
}
module.exports = _setPrototypeOf;
module.exports["default"] = module.exports, module.exports.__esModule = true;
});
var inheritsLoose = createCommonjsModule(function (module) {
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
setPrototypeOf(subClass, superClass);
}
module.exports = _inheritsLoose;
module.exports["default"] = module.exports, module.exports.__esModule = true;
});
var version = "0.1.0";
var Plugin = videojs__default['default'].getPlugin('plugin');
var Component = videojs__default['default'].getComponent('Component');
var Button = videojs__default['default'].getComponent('MenuButton'); // Default options for the plugin.
var defaults = {
license: 'none',
title: '',
author: '',
languages: {
license: 'License',
loading: 'Loading'
}
};
/**
* An advanced Video.js plugin. For more information on the API
*
* See: https://blog.videojs.com/feature-spotlight-advanced-plugins/
*/
var License = /*#__PURE__*/function (_Plugin) {
inheritsLoose(License, _Plugin);
/**
* Create a License plugin instance.
*
* @param {Player} player
* A Video.js Player instance.
*
* @param {Object} [options]
* An optional options object.
*
* While not a core part of the Video.js plugin architecture, a
* second argument of options is a convenient way to accept inputs
* from your plugin's caller.
*/
function License(player, options) {
var _this;
// the parent class will add player under this.player
_this = _Plugin.call(this, player) || this;
_this.playerId = _this.player.id();
_this.options = videojs__default['default'].mergeOptions(defaults, options);
if (options.license === 'none') {
return assertThisInitialized(_this);
}
_this.player.ready(function () {
_this.player.addClass('vjs-license');
_this.buildUI();
if (videojs__default['default'].browser.IS_IOS || videojs__default['default'].browser.IS_ANDROID) {
_this.mobileBuildUI();
}
}); // close the menu if open on userinactive
_this.player.on('userinactive', function () {
document__default['default'].getElementById(_this.playerId).querySelectorAll('.vjs-menu').forEach(function (element) {
element.classList.remove('vjs-lock-open');
});
}); // close the menu if anywhere in the player is clicked
_this.player.on('click', function (evt) {
if (evt.target.tagName === 'VIDEO') {
document__default['default'].getElementById(_this.playerId).querySelectorAll('.vjs-menu').forEach(function (element) {
element.classList.remove('vjs-lock-open');
});
}
});
_this.player.on('loadstart', function (_event) {
_this.removeElementsByClass('vjs-license-clear');
if (videojs__default['default'].browser.IS_IOS || videojs__default['default'].browser.IS_ANDROID) {
_this.mobileBuildTopLevelMenu();
} else {
_this.buildTopLevelMenu();
}
});
return _this;
}
/**
* Add the menu ui button to the controlbar
*/
var _proto = License.prototype;
_proto.buildUI = function buildUI() {
var playerId = this.playerId;
var that = this;
/**
* LicenseMenuButton
*/
var LicenseMenuButton = /*#__PURE__*/function (_Button) {
inheritsLoose(LicenseMenuButton, _Button);
/**
* Contructor
*
* @param {*} player videojs player instance
* @param {*} options videojs player options
*/
function LicenseMenuButton(player, options) {
var _this2;
_this2 = _Button.call(this, player, options) || this;
_this2.addClass('vjs-license');
_this2.controlText(that.options.languages.loading);
player.one('canplaythrough', function (_event) {
_this2.controlText(that.options.languages.settings);
});
_this2.menu.contentEl_.id = playerId + '-vjs-license-default';
return _this2;
}
/**
* Handle click
*/
var _proto2 = LicenseMenuButton.prototype;
_proto2.handleClick = function handleClick() {
if (videojs__default['default'].browser.IS_IOS || videojs__default['default'].browser.IS_ANDROID) {
this.player.getChild('licenseMenuMobileModal').el().style.display = 'block';
} else {
this.el().classList.toggle('vjs-toogle-btn');
this.menu.el().classList.toggle('vjs-lock-open');
}
};
return LicenseMenuButton;
}(Button);
videojs__default['default'].registerComponent('licenseMenuButton', LicenseMenuButton);
this.player.getChild('controlBar').addChild('licenseMenuButton');
if (this.player.getChild('controlBar').getChild('fullscreenToggle')) {
this.player.getChild('controlBar').el().insertBefore(this.player.getChild('controlBar').getChild('licenseMenuButton').el(), this.player.getChild('controlBar').getChild('fullscreenToggle').el());
}
}
/**
*
* This is just build the top level menu no sub menus
*/
;
_proto.buildTopLevelMenu = function buildTopLevelMenu() {
var settingsButton = this.player.getChild('controlBar').getChild('licenseMenuButton'); // settingsButton.addClass('vjs-license-is-loaded');
var main = settingsButton.menu.contentEl_; // Empty the main menu div to repopulate
main.innerHTML = '';
main.classList.add('vjs-license-top-level'); // Start building new list items
var menuTitle = document__default['default'].createElement('li');
menuTitle.className = 'vjs-license-top-level-header';
var menuTitleInner = document__default['default'].createElement('span');
menuTitleInner.innerHTML = 'About';
menuTitleInner.className = 'vjs-license-top-level-header-titel';
menuTitle.appendChild(menuTitleInner);
main.appendChild(menuTitle);
var itemTitel = document__default['default'].createElement('li');
itemTitel.innerHTML = this.buildItemTitel();
itemTitel.className = 'vjs-license-top-level-item';
main.appendChild(itemTitel);
if (this.options.author) {
var itemAuthor = document__default['default'].createElement('li');
itemAuthor.innerHTML = this.buildItemAuthor();
itemAuthor.className = 'vjs-license-top-level-item';
main.appendChild(itemAuthor);
}
var itemLicense = document__default['default'].createElement('li');
itemLicense.innerHTML = this.buildItemLicense();
itemLicense.className = 'vjs-license-top-level-item';
main.appendChild(itemLicense);
}
/**
* Add the menu ui button to the controlbar
*/
;
_proto.mobileBuildUI = function mobileBuildUI() {
/**
* bla
*/
var LicenseMenuMobileModal = /*#__PURE__*/function (_Component) {
inheritsLoose(LicenseMenuMobileModal, _Component);
/**
* Contructor
*
* @param {*} player videojs player instance
* @param {*} options videojs player options
*/
function LicenseMenuMobileModal(player, options) {
return _Component.call(this, player, options) || this;
}
/**
* Creates an HTML element
*
* @return {Object} HTML element
*/
var _proto3 = LicenseMenuMobileModal.prototype;
_proto3.createEl = function createEl() {
return videojs__default['default'].createEl('div', {
className: 'vjs-license-mobile'
});
};
return LicenseMenuMobileModal;
}(Component);
videojs__default['default'].registerComponent('licenseMenuMobileModal', LicenseMenuMobileModal);
videojs__default['default'].dom.prependTo(this.player.addChild('licenseMenuMobileModal').el(), document__default['default'].body);
}
/**
* Add the menu ui button to the controlbar
*/
;
_proto.mobileBuildTopLevelMenu = function mobileBuildTopLevelMenu() {
var _this3 = this;
var settingsButton = this.player.getChild('licenseMenuMobileModal');
var menuTopLevel = document__default['default'].createElement('ul');
menuTopLevel.className = 'vjs-license-mob-top-level vjs-setting-menu-clear';
settingsButton.el().appendChild(menuTopLevel); // Empty the main menu div to repopulate
var menuTitle = document__default['default'].createElement('li');
menuTitle.innerHTML = 'About';
menuTitle.className = 'vjs-setting-menu-mobile-top-header';
menuTopLevel.appendChild(menuTitle);
var itemTitel = document__default['default'].createElement('li');
itemTitel.innerHTML = this.buildItemTitel();
itemTitel.className = 'vjs-license-top-level-item';
if (this.options.author) {
var itemAuthor = document__default['default'].createElement('li');
itemAuthor.innerHTML = this.buildItemAuthor();
itemAuthor.className = 'vjs-license-top-level-item';
}
var itemLicense = document__default['default'].createElement('li');
itemLicense.innerHTML = this.buildItemLicense();
itemLicense.className = 'vjs-license-top-level-item';
var menuClose = document__default['default'].createElement('li');
menuClose.innerHTML = 'Close';
menuClose.className = 'setting-menu-footer-default';
menuClose.onclick = function (e) {
_this3.player.getChild('settingsMenuMobileModal').el().style.display = 'none';
};
menuTopLevel.appendChild(menuClose);
}
/**
* Add the menu ui button to the controlbar
*
* @return {string} Returns license text
*/
;
_proto.buildItemTitel = function buildItemTitel() {
var titel = '';
if (this.options.title) {
titel = "" + this.options.title;
}
return 'Title: ' + titel;
}
/**
* Add the menu ui button to the controlbar
*
* @return {string} Returns license text
*/
;
_proto.buildItemAuthor = function buildItemAuthor() {
var author = '';
if (this.options.author) {
author = " by " + this.options.author;
}
return 'Author: ' + author;
}
/**
* Add the menu ui button to the controlbar
*
* @return {string} Returns license text
*/
;
_proto.buildItemLicense = function buildItemLicense() {
var license = '';
var reVersion = new RegExp('[0-9]+.[0-9]+$');
var version = '4.0';
var matches = this.options.license.match(reVersion);
if (matches !== null) {
version = matches[0];
}
var which = this.options.license.replace(reVersion, '').trim();
var deed = null;
switch (which) {
case 'CC0':
deed = 'https://creativecommons.org/licenses/zero/1.0/';
break;
case 'CC BY':
deed = "https://creativecommons.org/licenses/by/" + version + "/";
break;
case 'CC BY-SA':
deed = "https://creativecommons.org/licenses/by-sa/" + version + "/";
break;
case 'CC BY-NC':
deed = "https://creativecommons.org/licenses/by-nc/" + version + "/";
break;
case 'CC BY-NC-SA':
deed = "https://creativecommons.org/licenses/by-nc-sa/" + version + "/";
break;
case 'CC BY-ND':
deed = "https://creativecommons.org/licenses/by-nd/" + version + "/";
break;
case 'CC BY-NC-ND':
deed = "https://creativecommons.org/licenses/by-nc-nd/" + version + "/";
break;
}
if (deed) {
license = "<a href=\"" + deed + "\" onclick=\"window.open('" + deed + "')\" target=\"_blank\" rel=\"noopener\">" + this.options.license + "</a>";
} else {
license = this.options.license;
}
return 'License: ' + license;
}
/**
*
* Helper class to clear menu items before rebuild
*
* @param {*} className Name of a class
*/
;
_proto.removeElementsByClass = function removeElementsByClass(className) {
// Need to prevent the menu from not showing sometimes
document__default['default'].querySelectorAll('.vjs-sm-top-level').forEach(function (element) {
element.classList.remove('vjs-hidden');
});
var elements = document__default['default'].getElementsByClassName(className);
while (elements.length > 0) {
elements[0].parentNode.removeChild(elements[0]);
}
};
return License;
}(Plugin); // Define default values for the plugin's `state` object here.
License.defaultState = {}; // Include the version number.
License.VERSION = version; // Register the plugin with video.js.
videojs__default['default'].registerPlugin('license', License);
return License;
})));