aboutsummaryrefslogtreecommitdiffstats
path: root/src/js/plyr.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/plyr.js')
-rw-r--r--src/js/plyr.js30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/js/plyr.js b/src/js/plyr.js
index 3824f38d..9dadfb5f 100644
--- a/src/js/plyr.js
+++ b/src/js/plyr.js
@@ -7,6 +7,7 @@
import captions from './captions';
import defaults from './config/defaults';
+import { pip } from './config/states';
import { getProviderByUrl, providers, types } from './config/types';
import Console from './console';
import controls from './controls';
@@ -896,21 +897,28 @@ class Plyr {
* TODO: detect outside changes
*/
set pip(input) {
- const states = {
- pip: 'picture-in-picture',
- inline: 'inline',
- };
-
// Bail if no support
if (!support.pip) {
return;
}
// Toggle based on current state if not passed
- const toggle = is.boolean(input) ? input : this.pip === states.inline;
+ const toggle = is.boolean(input) ? input : !this.pip;
// Toggle based on current state
- this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);
+ // Safari
+ 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();
+ }
+ }
}
/**
@@ -921,7 +929,13 @@ class Plyr {
return null;
}
- return this.media.webkitPresentationMode;
+ // Safari
+ if (!is.empty(this.media.webkitPresentationMode)) {
+ return this.media.webkitPresentationMode === pip.active;
+ }
+
+ // Chrome
+ return this.media === document.pictureInPictureElement;
}
/**