-   Added picture-in-picture support for Chrome 70+
-   Fixed issue with versioning the SVG sprite in the gulp build script
This commit is contained in:
Sam Potts
2018-10-25 09:44:40 +11:00
parent cede7d0f35
commit 1a9b860e68
15 changed files with 143 additions and 52 deletions
+5
View File
@@ -1,3 +1,8 @@
# v3.4.6
- Added picture-in-picture support for Chrome 70+
- Fixed issue with versioning the SVG sprite in the gulp build script
# v3.4.5 # v3.4.5
- Added download button option to download either current source or a custom URL you specify in options - Added download button option to download either current source or a custom URL you specify in options
+61 -18
View File
@@ -705,9 +705,25 @@ typeof navigator === "object" && (function (global, factory) {
}; };
}, },
// Picture-in-picture support // Picture-in-picture support
// Safari only currently // Safari & Chrome only currently
pip: function () { 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 // Airplay support
// Safari only currently // Safari only currently
@@ -840,10 +856,6 @@ typeof navigator === "object" && (function (global, factory) {
triggerEvent.call(player, player.media, 'qualitychange', false, { triggerEvent.call(player, player.media, 'qualitychange', false, {
quality: input quality: input
}); // Save to storage
player.storage.set({
quality: input
}); });
} }
}); });
@@ -3180,7 +3192,7 @@ typeof navigator === "object" && (function (global, factory) {
// Sprite (for icons) // Sprite (for icons)
loadSprite: true, loadSprite: true,
iconPrefix: 'plyr', 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) // Blank video (used to prevent errors on source change)
blankVideo: 'https://cdn.plyr.io/static/blank.mp4', blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
// Quality default // Quality default
@@ -3444,6 +3456,14 @@ typeof navigator === "object" && (function (global, factory) {
} }
}; };
// ==========================================================================
// Plyr states
// ==========================================================================
var pip = {
active: 'picture-in-picture',
inactive: 'inline'
};
// ========================================================================== // ==========================================================================
// Plyr supported types and providers // Plyr supported types and 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 quality = [!is.empty(input) && Number(input), this.storage.get('quality'), config.selected, config.default].find(is.number);
var updateStorage = true;
if (!options.includes(quality)) { if (!options.includes(quality)) {
var value = closest(options, quality); var value = closest(options, quality);
this.debug.warn("Unsupported quality option: ".concat(quality, ", using ").concat(value, " instead")); 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 } // Update config
config.selected = quality; // Set quality 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 * Get current quality level
@@ -7618,19 +7647,27 @@ typeof navigator === "object" && (function (global, factory) {
}, { }, {
key: "pip", key: "pip",
set: function set(input) { set: function set(input) {
var states = { // Bail if no support
pip: 'picture-in-picture',
inline: 'inline'
}; // Bail if no support
if (!support.pip) { if (!support.pip) {
return; return;
} // Toggle based on current state if not passed } // 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 * Get the current picture-in-picture state
@@ -7639,9 +7676,15 @@ typeof navigator === "object" && (function (global, factory) {
get: function get() { get: function get() {
if (!support.pip) { if (!support.pip) {
return null; return null;
} } // Safari
return this.media.webkitPresentationMode;
if (!is.empty(this.media.webkitPresentationMode)) {
return this.media.webkitPresentationMode === pip.active;
} // Chrome
return this.media === document.pictureInPictureElement;
} }
}], [{ }], [{
key: "supported", key: "supported",
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+61 -18
View File
@@ -3329,9 +3329,25 @@ typeof navigator === "object" && (function (global, factory) {
}; };
}, },
// Picture-in-picture support // Picture-in-picture support
// Safari only currently // Safari & Chrome only currently
pip: function () { pip: function () {
return !browser.isIPhone && is$1.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$1.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 // Airplay support
// Safari only currently // Safari only currently
@@ -3463,10 +3479,6 @@ typeof navigator === "object" && (function (global, factory) {
triggerEvent.call(player, player.media, 'qualitychange', false, { triggerEvent.call(player, player.media, 'qualitychange', false, {
quality: input quality: input
}); // Save to storage
player.storage.set({
quality: input
}); });
} }
}); });
@@ -5843,7 +5855,7 @@ typeof navigator === "object" && (function (global, factory) {
// Sprite (for icons) // Sprite (for icons)
loadSprite: true, loadSprite: true,
iconPrefix: 'plyr', 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) // Blank video (used to prevent errors on source change)
blankVideo: 'https://cdn.plyr.io/static/blank.mp4', blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
// Quality default // Quality default
@@ -6107,6 +6119,14 @@ typeof navigator === "object" && (function (global, factory) {
} }
}; };
// ==========================================================================
// Plyr states
// ==========================================================================
var pip = {
active: 'picture-in-picture',
inactive: 'inline'
};
// ========================================================================== // ==========================================================================
// Plyr supported types and providers // Plyr supported types and providers
// ========================================================================== // ==========================================================================
@@ -10119,17 +10139,26 @@ typeof navigator === "object" && (function (global, factory) {
} }
var quality = [!is$1.empty(input) && Number(input), this.storage.get('quality'), config.selected, config.default].find(is$1.number); var quality = [!is$1.empty(input) && Number(input), this.storage.get('quality'), config.selected, config.default].find(is$1.number);
var updateStorage = true;
if (!options.includes(quality)) { if (!options.includes(quality)) {
var value = closest(options, quality); var value = closest(options, quality);
this.debug.warn("Unsupported quality option: ".concat(quality, ", using ").concat(value, " instead")); 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 } // Update config
config.selected = quality; // Set quality 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 * Get current quality level
@@ -10308,19 +10337,27 @@ typeof navigator === "object" && (function (global, factory) {
}, { }, {
key: "pip", key: "pip",
set: function set(input) { set: function set(input) {
var states = { // Bail if no support
pip: 'picture-in-picture',
inline: 'inline'
}; // Bail if no support
if (!support.pip) { if (!support.pip) {
return; return;
} // Toggle based on current state if not passed } // Toggle based on current state if not passed
var toggle = is$1.boolean(input) ? input : this.pip === states.inline; // Toggle based on current state var toggle = is$1.boolean(input) ? input : !this.pip; // Toggle based on current state
// Safari
this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline); if (is$1.function(this.media.webkitSetPresentationMode)) {
this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive);
} // Chrome
if (is$1.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 * Get the current picture-in-picture state
@@ -10329,9 +10366,15 @@ typeof navigator === "object" && (function (global, factory) {
get: function get() { get: function get() {
if (!support.pip) { if (!support.pip) {
return null; return null;
} } // Safari
return this.media.webkitPresentationMode;
if (!is$1.empty(this.media.webkitPresentationMode)) {
return this.media.webkitPresentationMode === pip.active;
} // Chrome
return this.media === document.pictureInPictureElement;
} }
}], [{ }], [{
key: "supported", key: "supported",
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -311,10 +311,10 @@ if (Object.keys(credentials).includes('aws') && Object.keys(credentials).include
const files = ['plyr.js', 'plyr.polyfilled.js', 'config/defaults.js']; const files = ['plyr.js', 'plyr.polyfilled.js', 'config/defaults.js'];
return gulp return gulp
.src(files.map(file => path.join(root, `src/js/${file}`))) .src(files.map(file => path.join(root, `src/js/${file}`)), { base: '.' })
.pipe(replace(semver, `v${version}`)) .pipe(replace(semver, `v${version}`))
.pipe(replace(cdnpath, `${aws.cdn.domain}/${version}/`)) .pipe(replace(cdnpath, `${aws.cdn.domain}/${version}/`))
.pipe(gulp.dest(path.join(root, 'src/js/'))); .pipe(gulp.dest('./'));
}); });
// Publish version to CDN bucket // Publish version to CDN bucket
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "plyr", "name": "plyr",
"version": "3.4.5", "version": "3.4.6",
"description": "A simple, accessible and customizable HTML5, YouTube and Vimeo media player", "description": "A simple, accessible and customizable HTML5, YouTube and Vimeo media player",
"homepage": "https://plyr.io", "homepage": "https://plyr.io",
"author": "Sam Potts <sam@potts.es>", "author": "Sam Potts <sam@potts.es>",
+4 -4
View File
@@ -132,13 +132,13 @@ See [initialising](#initialising) for more information on advanced setups.
You can use our CDN (provided by [Fastly](https://www.fastly.com/)) for the JavaScript. There's 2 versions; one with and one without [polyfills](#polyfills). My recommendation would be to manage polyfills seperately as part of your application but to make life easier you can use the polyfilled build. You can use our CDN (provided by [Fastly](https://www.fastly.com/)) for the JavaScript. There's 2 versions; one with and one without [polyfills](#polyfills). My recommendation would be to manage polyfills seperately as part of your application but to make life easier you can use the polyfilled build.
```html ```html
<script src="https://cdn.plyr.io/3.4.5/plyr.js"></script> <script src="https://cdn.plyr.io/3.4.6/plyr.js"></script>
``` ```
...or... ...or...
```html ```html
<script src="https://cdn.plyr.io/3.4.5/plyr.polyfilled.js"></script> <script src="https://cdn.plyr.io/3.4.6/plyr.polyfilled.js"></script>
``` ```
### CSS ### CSS
@@ -152,13 +152,13 @@ Include the `plyr.css` stylsheet into your `<head>`
If you want to use our CDN (provided by [Fastly](https://www.fastly.com/)) for the default CSS, you can use the following: If you want to use our CDN (provided by [Fastly](https://www.fastly.com/)) for the default CSS, you can use the following:
```html ```html
<link rel="stylesheet" href="https://cdn.plyr.io/3.4.5/plyr.css"> <link rel="stylesheet" href="https://cdn.plyr.io/3.4.6/plyr.css">
``` ```
### SVG Sprite ### SVG Sprite
The SVG sprite is loaded automatically from our CDN (provided by [Fastly](https://www.fastly.com/)). To change this, see the [options](#options) below. For The SVG sprite is loaded automatically from our CDN (provided by [Fastly](https://www.fastly.com/)). To change this, see the [options](#options) below. For
reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.4.5/plyr.svg`. reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.4.6/plyr.svg`.
## Ads ## Ads
+1 -1
View File
@@ -60,7 +60,7 @@ const defaults = {
// Sprite (for icons) // Sprite (for icons)
loadSprite: true, loadSprite: true,
iconPrefix: 'plyr', 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) // Blank video (used to prevent errors on source change)
blankVideo: 'https://cdn.plyr.io/static/blank.mp4', blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
+1 -1
View File
@@ -1,6 +1,6 @@
// ========================================================================== // ==========================================================================
// Plyr // Plyr
// plyr.js v3.4.5 // plyr.js v3.4.6
// https://github.com/sampotts/plyr // https://github.com/sampotts/plyr
// License: The MIT License (MIT) // License: The MIT License (MIT)
// ========================================================================== // ==========================================================================
+1 -1
View File
@@ -1,6 +1,6 @@
// ========================================================================== // ==========================================================================
// Plyr Polyfilled Build // Plyr Polyfilled Build
// plyr.js v3.4.5 // plyr.js v3.4.6
// https://github.com/sampotts/plyr // https://github.com/sampotts/plyr
// License: The MIT License (MIT) // License: The MIT License (MIT)
// ========================================================================== // ==========================================================================