From fe4a8fbf6ad73b6bc8f57d16c44f0ca4d3bf9450 Mon Sep 17 00:00:00 2001 From: Gary Katsevman Date: Mon, 15 Sep 2014 14:53:20 -0400 Subject: [PATCH 1/9] Export isFullScreen correctly. Export isFullscreen as well. --- src/js/exports.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/js/exports.js b/src/js/exports.js index 708ded2a64..b7fa1d5f7d 100644 --- a/src/js/exports.js +++ b/src/js/exports.js @@ -79,7 +79,8 @@ goog.exportProperty(vjs.Player.prototype, 'supportsFullScreen', vjs.Player.proto goog.exportProperty(vjs.Player.prototype, 'currentType', vjs.Player.prototype.currentType); goog.exportProperty(vjs.Player.prototype, 'requestFullScreen', vjs.Player.prototype.currentType); goog.exportProperty(vjs.Player.prototype, 'cancelFullScreen', vjs.Player.prototype.currentType); -goog.exportProperty(vjs.Player.prototype, 'isFullScreen', vjs.Player.prototype.currentType); +goog.exportProperty(vjs.Player.prototype, 'isFullScreen', vjs.Player.prototype.isFullScreen); +goog.exportProperty(vjs.Player.prototype, 'isFullscreen', vjs.Player.prototype.isFullscreen); goog.exportSymbol('videojs.MediaLoader', vjs.MediaLoader); goog.exportSymbol('videojs.TextTrackDisplay', vjs.TextTrackDisplay); From e423635b6c8ad58a1ba04e1534a51c075e08b73a Mon Sep 17 00:00:00 2001 From: Gary Katsevman Date: Mon, 15 Sep 2014 16:15:10 -0400 Subject: [PATCH 2/9] On iOS, use ios specific enterFullscreen methods. --- src/js/media/html5.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/js/media/html5.js b/src/js/media/html5.js index 8da580ecdd..7f7ee4d3b9 100644 --- a/src/js/media/html5.js +++ b/src/js/media/html5.js @@ -209,6 +209,21 @@ vjs.Html5.prototype.supportsFullScreen = function(){ vjs.Html5.prototype.enterFullScreen = function(){ var video = this.el_; + + if (vjs.IS_IOS) { + vjs.on(video, 'webkitbeginfullscreen', vjs.bind(this, function(e) { + this.player_.isFullscreen(video['webkitDisplayingFullscreen']); + if (this.player_.isFullscreen()) { + vjs.on(video, 'webkitendfullscreen', vjs.bind(this, function(e) { + this.player_.isFullscreen(video['webkitDisplayingFullscreen']); + this.player_.trigger('fullscreenchange'); + })); + + this.player_.trigger('fullscreenchange'); + } + })); + } + if (video.paused && video.networkState <= video.HAVE_METADATA) { // attempt to prime the video element for programmatic access // this isn't necessary on the desktop but shouldn't hurt From ad505a680785d638289657aec4edad60879e945a Mon Sep 17 00:00:00 2001 From: Gary Katsevman Date: Mon, 15 Sep 2014 16:45:48 -0400 Subject: [PATCH 3/9] Update exports for request & cancel fullscreen --- src/js/exports.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/js/exports.js b/src/js/exports.js index b7fa1d5f7d..560a0728b1 100644 --- a/src/js/exports.js +++ b/src/js/exports.js @@ -77,8 +77,10 @@ goog.exportProperty(vjs.Player.prototype, 'preload', vjs.Player.prototype.preloa goog.exportProperty(vjs.Player.prototype, 'remainingTime', vjs.Player.prototype.remainingTime); goog.exportProperty(vjs.Player.prototype, 'supportsFullScreen', vjs.Player.prototype.supportsFullScreen); goog.exportProperty(vjs.Player.prototype, 'currentType', vjs.Player.prototype.currentType); -goog.exportProperty(vjs.Player.prototype, 'requestFullScreen', vjs.Player.prototype.currentType); -goog.exportProperty(vjs.Player.prototype, 'cancelFullScreen', vjs.Player.prototype.currentType); +goog.exportProperty(vjs.Player.prototype, 'requestFullScreen', vjs.Player.prototype.requestFullScreen); +goog.exportProperty(vjs.Player.prototype, 'requestFullscreen', vjs.Player.prototype.requestFullscreen); +goog.exportProperty(vjs.Player.prototype, 'cancelFullScreen', vjs.Player.prototype.cancelFullScreen); +goog.exportProperty(vjs.Player.prototype, 'exitFullscreen', vjs.Player.prototype.exitFullscreen); goog.exportProperty(vjs.Player.prototype, 'isFullScreen', vjs.Player.prototype.isFullScreen); goog.exportProperty(vjs.Player.prototype, 'isFullscreen', vjs.Player.prototype.isFullscreen); From cc45177ee5fa950e665e066d170b137aaeb6e398 Mon Sep 17 00:00:00 2001 From: Gary Katsevman Date: Mon, 15 Sep 2014 17:28:46 -0400 Subject: [PATCH 4/9] Don't trigget vjs's fullscreenchange event This event isn't really being used for this usecase right now, so, no need to trigger it. --- src/js/media/html5.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/js/media/html5.js b/src/js/media/html5.js index 7f7ee4d3b9..63b3d629ff 100644 --- a/src/js/media/html5.js +++ b/src/js/media/html5.js @@ -216,10 +216,7 @@ vjs.Html5.prototype.enterFullScreen = function(){ if (this.player_.isFullscreen()) { vjs.on(video, 'webkitendfullscreen', vjs.bind(this, function(e) { this.player_.isFullscreen(video['webkitDisplayingFullscreen']); - this.player_.trigger('fullscreenchange'); })); - - this.player_.trigger('fullscreenchange'); } })); } From 27e27075083d2ad408b5d47055881b2554f59154 Mon Sep 17 00:00:00 2001 From: Gary Katsevman Date: Tue, 16 Sep 2014 18:12:36 -0400 Subject: [PATCH 5/9] Use one for event binding. --- src/js/media/html5.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/media/html5.js b/src/js/media/html5.js index 63b3d629ff..8286e7124c 100644 --- a/src/js/media/html5.js +++ b/src/js/media/html5.js @@ -211,10 +211,10 @@ vjs.Html5.prototype.enterFullScreen = function(){ var video = this.el_; if (vjs.IS_IOS) { - vjs.on(video, 'webkitbeginfullscreen', vjs.bind(this, function(e) { + vjs.one(video, 'webkitbeginfullscreen', vjs.bind(this, function(e) { this.player_.isFullscreen(video['webkitDisplayingFullscreen']); if (this.player_.isFullscreen()) { - vjs.on(video, 'webkitendfullscreen', vjs.bind(this, function(e) { + vjs.one(video, 'webkitendfullscreen', vjs.bind(this, function(e) { this.player_.isFullscreen(video['webkitDisplayingFullscreen']); })); } From 1ed30853efb2ea043da4f18b4fdf75da15f55e88 Mon Sep 17 00:00:00 2001 From: Gary Katsevman Date: Wed, 17 Sep 2014 12:00:29 -0400 Subject: [PATCH 6/9] Listen via 'this.one'. Don't bother checking whether the video element is fullscreen but just assume we are fullscreen. --- src/js/media/html5.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/js/media/html5.js b/src/js/media/html5.js index 8286e7124c..ccb98590dc 100644 --- a/src/js/media/html5.js +++ b/src/js/media/html5.js @@ -211,11 +211,11 @@ vjs.Html5.prototype.enterFullScreen = function(){ var video = this.el_; if (vjs.IS_IOS) { - vjs.one(video, 'webkitbeginfullscreen', vjs.bind(this, function(e) { - this.player_.isFullscreen(video['webkitDisplayingFullscreen']); + this.one('webkitbeginfullscreen', vjs.bind(this, function(e) { + this.player_.isFullscreen(true); if (this.player_.isFullscreen()) { - vjs.one(video, 'webkitendfullscreen', vjs.bind(this, function(e) { - this.player_.isFullscreen(video['webkitDisplayingFullscreen']); + this.one('webkitendfullscreen', vjs.bind(this, function(e) { + this.player_.isFullscreen(false); })); } })); From 0498b100843e0aa858b166d02a467e4471c126ab Mon Sep 17 00:00:00 2001 From: Gary Katsevman Date: Mon, 22 Sep 2014 21:28:10 -0400 Subject: [PATCH 7/9] Revert "Don't trigget vjs's fullscreenchange event" This reverts commit cc45177ee5fa950e665e066d170b137aaeb6e398. Conflicts: src/js/media/html5.js --- src/js/media/html5.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/js/media/html5.js b/src/js/media/html5.js index ccb98590dc..cea3237655 100644 --- a/src/js/media/html5.js +++ b/src/js/media/html5.js @@ -216,7 +216,10 @@ vjs.Html5.prototype.enterFullScreen = function(){ if (this.player_.isFullscreen()) { this.one('webkitendfullscreen', vjs.bind(this, function(e) { this.player_.isFullscreen(false); + this.player_.trigger('fullscreenchange'); })); + + this.player_.trigger('fullscreenchange'); } })); } From f3eccbbe678c163021d790c69c3ab365e0a1fe1a Mon Sep 17 00:00:00 2001 From: Gary Katsevman Date: Mon, 22 Sep 2014 21:31:34 -0400 Subject: [PATCH 8/9] No need for if since assume we're in fs --- src/js/media/html5.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/js/media/html5.js b/src/js/media/html5.js index cea3237655..ce8c70a063 100644 --- a/src/js/media/html5.js +++ b/src/js/media/html5.js @@ -213,14 +213,13 @@ vjs.Html5.prototype.enterFullScreen = function(){ if (vjs.IS_IOS) { this.one('webkitbeginfullscreen', vjs.bind(this, function(e) { this.player_.isFullscreen(true); - if (this.player_.isFullscreen()) { - this.one('webkitendfullscreen', vjs.bind(this, function(e) { - this.player_.isFullscreen(false); - this.player_.trigger('fullscreenchange'); - })); + this.one('webkitendfullscreen', vjs.bind(this, function(e) { + this.player_.isFullscreen(false); this.player_.trigger('fullscreenchange'); - } + })); + + this.player_.trigger('fullscreenchange'); })); } From 02fe7a40d0958e2ed84a6a0cf2be43bec259c72c Mon Sep 17 00:00:00 2001 From: Gary Katsevman Date: Tue, 23 Sep 2014 14:15:08 -0400 Subject: [PATCH 9/9] Feature detect old fullscreen instead of UA switch --- src/js/media/html5.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/media/html5.js b/src/js/media/html5.js index ce8c70a063..9cb1e3c14a 100644 --- a/src/js/media/html5.js +++ b/src/js/media/html5.js @@ -210,7 +210,7 @@ vjs.Html5.prototype.supportsFullScreen = function(){ vjs.Html5.prototype.enterFullScreen = function(){ var video = this.el_; - if (vjs.IS_IOS) { + if ('webkitDisplayingFullscreen' in video) { this.one('webkitbeginfullscreen', vjs.bind(this, function(e) { this.player_.isFullscreen(true);