diff options
Diffstat (limited to 'dist/plyr.js')
-rw-r--r-- | dist/plyr.js | 79 |
1 files changed, 61 insertions, 18 deletions
diff --git a/dist/plyr.js b/dist/plyr.js index cdc5a20f..476b70af 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -705,9 +705,25 @@ typeof navigator === "object" && (function (global, factory) { }; }, // Picture-in-picture support - // Safari only currently + // Safari & Chrome only currently pip: function () { - return !browser.isIPhone && is.function(createElement('video').webkitSetPresentationMode); + if (browser.isIPhone) { + return false; + } // Safari + // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls + + + if (is.function(createElement('video').webkitSetPresentationMode)) { + return true; + } // Chrome + // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture + + + if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) { + return true; + } + + return false; }(), // Airplay support // Safari only currently @@ -840,10 +856,6 @@ typeof navigator === "object" && (function (global, factory) { triggerEvent.call(player, player.media, 'qualitychange', false, { quality: input - }); // Save to storage - - player.storage.set({ - quality: input }); } }); @@ -3180,7 +3192,7 @@ typeof navigator === "object" && (function (global, factory) { // Sprite (for icons) loadSprite: true, iconPrefix: 'plyr', - iconUrl: 'https://cdn.plyr.io/3.3.12/plyr.svg', + iconUrl: 'https://cdn.plyr.io/3.4.6/plyr.svg', // Blank video (used to prevent errors on source change) blankVideo: 'https://cdn.plyr.io/static/blank.mp4', // Quality default @@ -3445,6 +3457,14 @@ typeof navigator === "object" && (function (global, factory) { }; // ========================================================================== + // Plyr states + // ========================================================================== + var pip = { + active: 'picture-in-picture', + inactive: 'inline' + }; + + // ========================================================================== // Plyr supported types and providers // ========================================================================== var providers = { @@ -7429,17 +7449,26 @@ typeof navigator === "object" && (function (global, factory) { } var quality = [!is.empty(input) && Number(input), this.storage.get('quality'), config.selected, config.default].find(is.number); + var updateStorage = true; if (!options.includes(quality)) { var value = closest(options, quality); this.debug.warn("Unsupported quality option: ".concat(quality, ", using ").concat(value, " instead")); - quality = value; + quality = value; // Don't update storage if quality is not supported + + updateStorage = false; } // Update config config.selected = quality; // Set quality - this.media.quality = quality; + this.media.quality = quality; // Save to storage + + if (updateStorage) { + this.storage.set({ + quality: quality + }); + } } /** * Get current quality level @@ -7618,19 +7647,27 @@ typeof navigator === "object" && (function (global, factory) { }, { key: "pip", set: function set(input) { - var states = { - pip: 'picture-in-picture', - inline: 'inline' - }; // Bail if no support - + // Bail if no support if (!support.pip) { return; } // Toggle based on current state if not passed - var toggle = is.boolean(input) ? input : this.pip === states.inline; // Toggle based on current state + var toggle = is.boolean(input) ? input : !this.pip; // Toggle based on current state + // Safari - this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline); + if (is.function(this.media.webkitSetPresentationMode)) { + this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive); + } // Chrome + + + if (is.function(this.media.requestPictureInPicture)) { + if (!this.pip && toggle) { + this.media.requestPictureInPicture(); + } else if (this.pip && !toggle) { + document.exitPictureInPicture(); + } + } } /** * Get the current picture-in-picture state @@ -7639,9 +7676,15 @@ typeof navigator === "object" && (function (global, factory) { get: function get() { if (!support.pip) { return null; - } + } // Safari + + + if (!is.empty(this.media.webkitPresentationMode)) { + return this.media.webkitPresentationMode === pip.active; + } // Chrome + - return this.media.webkitPresentationMode; + return this.media === document.pictureInPictureElement; } }], [{ key: "supported", |