diff options
Diffstat (limited to 'dist/plyr.js')
-rw-r--r-- | dist/plyr.js | 226 |
1 files changed, 126 insertions, 100 deletions
diff --git a/dist/plyr.js b/dist/plyr.js index f1c3911a..2df2d7ee 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -11,62 +11,94 @@ typeof navigator === "object" && (function (global, factory) { var getConstructor = function getConstructor(input) { return input !== null && typeof input !== 'undefined' ? input.constructor : null; }; - var instanceOf = function instanceOf(input, constructor) { return Boolean(input && constructor && input instanceof constructor); }; + var isNullOrUndefined = function isNullOrUndefined(input) { + return input === null || typeof input === 'undefined'; + }; + var isObject = function isObject(input) { + return getConstructor(input) === Object; + }; + var isNumber = function isNumber(input) { + return getConstructor(input) === Number && !Number.isNaN(input); + }; + var isString = function isString(input) { + return getConstructor(input) === String; + }; + var isBoolean = function isBoolean(input) { + return getConstructor(input) === Boolean; + }; + var isFunction = function isFunction(input) { + return getConstructor(input) === Function; + }; + var isArray = function isArray(input) { + return Array.isArray(input); + }; + var isWeakMap = function isWeakMap(input) { + return instanceOf(input, WeakMap); + }; + var isNodeList = function isNodeList(input) { + return instanceOf(input, NodeList); + }; + var isElement = function isElement(input) { + return instanceOf(input, Element); + }; + var isTextNode = function isTextNode(input) { + return getConstructor(input) === Text; + }; + var isEvent = function isEvent(input) { + return instanceOf(input, Event); + }; + var isCue = function isCue(input) { + return instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue); + }; + var isTrack = function isTrack(input) { + return instanceOf(input, TextTrack) || !isNullOrUndefined(input) && isString(input.kind); + }; - var is = { - object: function object(input) { - return getConstructor(input) === Object; - }, - number: function number(input) { - return getConstructor(input) === Number && !Number.isNaN(input); - }, - string: function string(input) { - return getConstructor(input) === String; - }, - boolean: function boolean(input) { - return getConstructor(input) === Boolean; - }, - function: function _function(input) { - return getConstructor(input) === Function; - }, - array: function array(input) { - return !is.nullOrUndefined(input) && Array.isArray(input); - }, - weakMap: function weakMap(input) { - return instanceOf(input, WeakMap); - }, - nodeList: function nodeList(input) { - return instanceOf(input, NodeList); - }, - element: function element(input) { - return instanceOf(input, Element); - }, - textNode: function textNode(input) { - return getConstructor(input) === Text; - }, - event: function event(input) { - return instanceOf(input, Event); - }, - cue: function cue(input) { - return instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue); - }, - track: function track(input) { - return instanceOf(input, TextTrack) || !is.nullOrUndefined(input) && is.string(input.kind); - }, - url: function url(input) { - return !is.nullOrUndefined(input) && /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(input); - }, - nullOrUndefined: function nullOrUndefined(input) { - return input === null || typeof input === 'undefined'; - }, - empty: function empty(input) { - return is.nullOrUndefined(input) || (is.string(input) || is.array(input) || is.nodeList(input)) && !input.length || is.object(input) && !Object.keys(input).length; + var isEmpty = function isEmpty(input) { + return isNullOrUndefined(input) || (isString(input) || isArray(input) || isNodeList(input)) && !input.length || isObject(input) && !Object.keys(input).length; + }; + + var isUrl = function isUrl(input) { + // Accept a URL object + if (instanceOf(input, window.URL)) { + return true; + } + + // Add the protocol if required + var string = input; + if (!input.startsWith('http://') || !input.startsWith('https://')) { + string = 'http://' + input; + } + + try { + return !isEmpty(new URL(string).hostname); + } catch (e) { + return false; } }; + var is = { + nullOrUndefined: isNullOrUndefined, + object: isObject, + number: isNumber, + string: isString, + boolean: isBoolean, + function: isFunction, + array: isArray, + weakMap: isWeakMap, + nodeList: isNodeList, + element: isElement, + textNode: isTextNode, + event: isEvent, + cue: isCue, + track: isTrack, + url: isUrl, + empty: isEmpty + }; + // ========================================================================== // Check for passive event listener support @@ -769,22 +801,17 @@ typeof navigator === "object" && (function (global, factory) { // Quality Object.defineProperty(player.media, 'quality', { - get: function get$$1() { + get: function get() { // Get sources var sources = html5.getSources.call(player); - - var _sources$filter = sources.filter(function (source) { + var source = sources.find(function (source) { return source.getAttribute('src') === player.source; - }), - _sources$filter2 = slicedToArray(_sources$filter, 1), - source = _sources$filter2[0]; + }); // Return size, if match is found - - return source && Number(source.getAttribute('size')); }, - set: function set$$1(input) { + set: function set(input) { // Get sources var sources = html5.getSources.call(player); @@ -799,25 +826,30 @@ typeof navigator === "object" && (function (global, factory) { } // Get current state - var currentTime = player.currentTime, - playing = player.playing; + var _player$media = player.media, + currentTime = _player$media.currentTime, + paused = _player$media.paused, + preload = _player$media.preload, + readyState = _player$media.readyState; // Set new source player.media.src = source.getAttribute('src'); - // Restore time - var onLoadedMetaData = function onLoadedMetaData() { - player.currentTime = currentTime; - }; - player.once('loadedmetadata', onLoadedMetaData); + // Prevent loading if preload="none" and the current source isn't loaded (#1044) + if (preload !== 'none' || readyState) { + // Restore time + player.once('loadedmetadata', function () { + player.currentTime = currentTime; - // Load new source - player.media.load(); + // Resume playing + if (!paused) { + player.play(); + } + }); - // Resume playing - if (playing) { - player.play(); + // Load new source + player.media.load(); } // Trigger change event @@ -4777,33 +4809,28 @@ typeof navigator === "object" && (function (global, factory) { // Detect "natural" scroll - suppored on OS X Safari only // Other browsers on OS X will be inverted until support improves var inverted = event.webkitDirectionInvertedFromDevice; - var step = 1 / 50; - var direction = 0; - - // Scroll down (or up on natural) to decrease - if (event.deltaY < 0 || event.deltaX > 0) { - if (inverted) { - _this4.player.decreaseVolume(step); - direction = -1; - } else { - _this4.player.increaseVolume(step); - direction = 1; - } - } - // Scroll up (or down on natural) to increase - if (event.deltaY > 0 || event.deltaX < 0) { - if (inverted) { - _this4.player.increaseVolume(step); - direction = 1; - } else { - _this4.player.decreaseVolume(step); - direction = -1; - } - } + // Get delta from event. Invert if `inverted` is true + + var _map = [event.deltaX, -event.deltaY].map(function (value) { + return inverted ? -value : value; + }), + _map2 = slicedToArray(_map, 2), + x = _map2[0], + y = _map2[1]; + + // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta) + + + var direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y); + + // Change the volume by 2% + _this4.player.increaseVolume(direction / 50); // Don't break page scrolling at max and min - if (direction === 1 && _this4.player.media.volume < 1 || direction === -1 && _this4.player.media.volume > 0) { + var volume = _this4.player.media.volume; + + if (direction === 1 && volume < 1 || direction === -1 && volume > 0) { event.preventDefault(); } }, 'volume', false); @@ -5822,8 +5849,8 @@ typeof navigator === "object" && (function (global, factory) { return Number(instance.getCurrentTime()); }, set: function set(time) { - // If paused, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet). - if (player.paused) { + // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet). + if (player.paused && !player.embed.hasPlayed) { player.embed.mute(); } @@ -6742,7 +6769,7 @@ typeof navigator === "object" && (function (global, factory) { }, { key: 'enabled', get: function get$$1() { - return this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId); + return this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId); } }, { key: 'tagUrl', @@ -7299,7 +7326,7 @@ typeof navigator === "object" && (function (global, factory) { */ value: function increaseVolume(step) { var volume = this.media.muted ? 0 : this.volume; - this.volume = volume + (is.number(step) ? step : 1); + this.volume = volume + (is.number(step) ? step : 0); } /** @@ -7310,8 +7337,7 @@ typeof navigator === "object" && (function (global, factory) { }, { key: 'decreaseVolume', value: function decreaseVolume(step) { - var volume = this.media.muted ? 0 : this.volume; - this.volume = volume - (is.number(step) ? step : 1); + this.increaseVolume(-step); } /** |