diff options
Diffstat (limited to 'assets/js/videojs-contrib-quality-levels.js')
| -rw-r--r-- | assets/js/videojs-contrib-quality-levels.js | 373 |
1 files changed, 373 insertions, 0 deletions
diff --git a/assets/js/videojs-contrib-quality-levels.js b/assets/js/videojs-contrib-quality-levels.js new file mode 100644 index 00000000..c750e0e6 --- /dev/null +++ b/assets/js/videojs-contrib-quality-levels.js @@ -0,0 +1,373 @@ +/*! @name videojs-contrib-quality-levels @version 2.0.7 @license Apache-2.0 */ +(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.videojsContribQualityLevels = factory(global.videojs,global.document)); +}(this, (function (videojs,document) { 'use strict'; + + videojs = videojs && videojs.hasOwnProperty('default') ? videojs['default'] : videojs; + document = document && document.hasOwnProperty('default') ? document['default'] : document; + + var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + + var inherits = function (subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; + }; + + var possibleConstructorReturn = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && (typeof call === "object" || typeof call === "function") ? call : self; + }; + + /** + * A single QualityLevel. + * + * interface QualityLevel { + * readonly attribute DOMString id; + * attribute DOMString label; + * readonly attribute long width; + * readonly attribute long height; + * readonly attribute long bitrate; + * attribute boolean enabled; + * }; + * + * @class QualityLevel + */ + + var QualityLevel = + + /** + * Creates a QualityLevel + * + * @param {Representation|Object} representation The representation of the quality level + * @param {string} representation.id Unique id of the QualityLevel + * @param {number=} representation.width Resolution width of the QualityLevel + * @param {number=} representation.height Resolution height of the QualityLevel + * @param {number} representation.bandwidth Bitrate of the QualityLevel + * @param {Function} representation.enabled Callback to enable/disable QualityLevel + */ + function QualityLevel(representation) { + classCallCheck(this, QualityLevel); + + + var level = this; // eslint-disable-line + + if (videojs.browser.IS_IE8) { + level = document.createElement('custom'); + for (var prop in QualityLevel.prototype) { + if (prop !== 'constructor') { + level[prop] = QualityLevel.prototype[prop]; + } + } + } + + level.id = representation.id; + level.label = level.id; + level.width = representation.width; + level.height = representation.height; + level.bitrate = representation.bandwidth; + level.enabled_ = representation.enabled; + + Object.defineProperty(level, 'enabled', { + /** + * Get whether the QualityLevel is enabled. + * + * @return {boolean} True if the QualityLevel is enabled. + */ + get: function get$$1() { + return level.enabled_(); + }, + + + /** + * Enable or disable the QualityLevel. + * + * @param {boolean} enable true to enable QualityLevel, false to disable. + */ + set: function set$$1(enable) { + level.enabled_(enable); + } + }); + + return level; + }; + + /** + * A list of QualityLevels. + * + * interface QualityLevelList : EventTarget { + * getter QualityLevel (unsigned long index); + * readonly attribute unsigned long length; + * readonly attribute long selectedIndex; + * + * void addQualityLevel(QualityLevel qualityLevel) + * void removeQualityLevel(QualityLevel remove) + * QualityLevel? getQualityLevelById(DOMString id); + * + * attribute EventHandler onchange; + * attribute EventHandler onaddqualitylevel; + * attribute EventHandler onremovequalitylevel; + * }; + * + * @extends videojs.EventTarget + * @class QualityLevelList + */ + + var QualityLevelList = function (_videojs$EventTarget) { + inherits(QualityLevelList, _videojs$EventTarget); + + function QualityLevelList() { + var _ret; + + classCallCheck(this, QualityLevelList); + + var _this = possibleConstructorReturn(this, _videojs$EventTarget.call(this)); + + var list = _this; // eslint-disable-line + + if (videojs.browser.IS_IE8) { + list = document.createElement('custom'); + for (var prop in QualityLevelList.prototype) { + if (prop !== 'constructor') { + list[prop] = QualityLevelList.prototype[prop]; + } + } + } + + list.levels_ = []; + list.selectedIndex_ = -1; + + /** + * Get the index of the currently selected QualityLevel. + * + * @returns {number} The index of the selected QualityLevel. -1 if none selected. + * @readonly + */ + Object.defineProperty(list, 'selectedIndex', { + get: function get$$1() { + return list.selectedIndex_; + } + }); + + /** + * Get the length of the list of QualityLevels. + * + * @returns {number} The length of the list. + * @readonly + */ + Object.defineProperty(list, 'length', { + get: function get$$1() { + return list.levels_.length; + } + }); + + return _ret = list, possibleConstructorReturn(_this, _ret); + } + + /** + * Adds a quality level to the list. + * + * @param {Representation|Object} representation The representation of the quality level + * @param {string} representation.id Unique id of the QualityLevel + * @param {number=} representation.width Resolution width of the QualityLevel + * @param {number=} representation.height Resolution height of the QualityLevel + * @param {number} representation.bandwidth Bitrate of the QualityLevel + * @param {Function} representation.enabled Callback to enable/disable QualityLevel + * @return {QualityLevel} the QualityLevel added to the list + * @method addQualityLevel + */ + + + QualityLevelList.prototype.addQualityLevel = function addQualityLevel(representation) { + var qualityLevel = this.getQualityLevelById(representation.id); + + // Do not add duplicate quality levels + if (qualityLevel) { + return qualityLevel; + } + + var index = this.levels_.length; + + qualityLevel = new QualityLevel(representation); + + if (!('' + index in this)) { + Object.defineProperty(this, index, { + get: function get$$1() { + return this.levels_[index]; + } + }); + } + + this.levels_.push(qualityLevel); + + this.trigger({ + qualityLevel: qualityLevel, + type: 'addqualitylevel' + }); + + return qualityLevel; + }; + + /** + * Removes a quality level from the list. + * + * @param {QualityLevel} remove QualityLevel to remove to the list. + * @return {QualityLevel|null} the QualityLevel removed or null if nothing removed + * @method removeQualityLevel + */ + + + QualityLevelList.prototype.removeQualityLevel = function removeQualityLevel(qualityLevel) { + var removed = null; + + for (var i = 0, l = this.length; i < l; i++) { + if (this[i] === qualityLevel) { + removed = this.levels_.splice(i, 1)[0]; + + if (this.selectedIndex_ === i) { + this.selectedIndex_ = -1; + } else if (this.selectedIndex_ > i) { + this.selectedIndex_--; + } + break; + } + } + + if (removed) { + this.trigger({ + qualityLevel: qualityLevel, + type: 'removequalitylevel' + }); + } + + return removed; + }; + + /** + * Searches for a QualityLevel with the given id. + * + * @param {string} id The id of the QualityLevel to find. + * @return {QualityLevel|null} The QualityLevel with id, or null if not found. + * @method getQualityLevelById + */ + + + QualityLevelList.prototype.getQualityLevelById = function getQualityLevelById(id) { + for (var i = 0, l = this.length; i < l; i++) { + var level = this[i]; + + if (level.id === id) { + return level; + } + } + return null; + }; + + /** + * Resets the list of QualityLevels to empty + * + * @method dispose + */ + + + QualityLevelList.prototype.dispose = function dispose() { + this.selectedIndex_ = -1; + this.levels_.length = 0; + }; + + return QualityLevelList; + }(videojs.EventTarget); + + /** + * change - The selected QualityLevel has changed. + * addqualitylevel - A QualityLevel has been added to the QualityLevelList. + * removequalitylevel - A QualityLevel has been removed from the QualityLevelList. + */ + + + QualityLevelList.prototype.allowedEvents_ = { + change: 'change', + addqualitylevel: 'addqualitylevel', + removequalitylevel: 'removequalitylevel' + }; + + // emulate attribute EventHandler support to allow for feature detection + for (var event in QualityLevelList.prototype.allowedEvents_) { + QualityLevelList.prototype['on' + event] = null; + } + + // vjs 5/6 support + var registerPlugin = videojs.registerPlugin || videojs.plugin; + + /** + * Initialization function for the qualityLevels plugin. Sets up the QualityLevelList and + * event handlers. + * + * @param {Player} player Player object. + * @param {Object} options Plugin options object. + * @function initPlugin + */ + var initPlugin = function initPlugin(player, options) { + var originalPluginFn = player.qualityLevels; + + var qualityLevelList = new QualityLevelList(); + + var disposeHandler = function disposeHandler() { + qualityLevelList.dispose(); + player.qualityLevels = originalPluginFn; + player.off('dispose', disposeHandler); + }; + + player.on('dispose', disposeHandler); + + player.qualityLevels = function () { + return qualityLevelList; + }; + player.qualityLevels.VERSION = '__VERSION__'; + + return qualityLevelList; + }; + + /** + * A video.js plugin. + * + * In the plugin function, the value of `this` is a video.js `Player` + * instance. You cannot rely on the player being in a "ready" state here, + * depending on how the plugin is invoked. This may or may not be important + * to you; if not, remove the wait for "ready"! + * + * @param {Object} options Plugin options object + * @function qualityLevels + */ + var qualityLevels = function qualityLevels(options) { + return initPlugin(this, videojs.mergeOptions({}, options)); + }; + + // Register the plugin with video.js. + registerPlugin('qualityLevels', qualityLevels); + + // Include the version number. + qualityLevels.VERSION = '__VERSION__'; + + return qualityLevels; + +}))); |
