-   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

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

79
dist/plyr.js vendored
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",

2
dist/plyr.js.map vendored

File diff suppressed because one or more lines are too long

2
dist/plyr.min.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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

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>",

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

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',

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)
// ========================================================================== // ==========================================================================

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)
// ========================================================================== // ==========================================================================