diff options
Diffstat (limited to 'src/client/Utils.hx')
| -rw-r--r-- | src/client/Utils.hx | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/src/client/Utils.hx b/src/client/Utils.hx index 54025aa..057cb23 100644 --- a/src/client/Utils.hx +++ b/src/client/Utils.hx @@ -1,5 +1,6 @@ package client; +import haxe.Timer; import haxe.io.Mime; import js.Browser.document; import js.Browser.navigator; @@ -74,25 +75,36 @@ class Utils { } public static function hasFullscreen():Bool { - final doc:Dynamic = document; - return (document.fullscreenElement != null || doc.mozFullScreenElement != null - || doc.webkitFullscreenElement != null); + return document.fullscreenElement != null; } public static function requestFullscreen(el:Element):Bool { - final el2:Dynamic = el; if (el.requestFullscreen != null) { el.requestFullscreen(); - } else if (el2.webkitRequestFullscreen != null) { - el2.webkitRequestFullscreen(untyped Element.ALLOW_KEYBOARD_INPUT); - } else return false; - return true; + return true; + } + return false; + } + + public static function cancelFullscreen(el:Element = null):Void { + if (document.exitFullscreen != null) document.exitFullscreen(); } - public static function cancelFullscreen(el:Element):Void { - final doc:Dynamic = document; - if (doc.cancelFullScreen != null) doc.cancelFullScreen(); - else if (doc.webkitCancelFullScreen != null) doc.webkitCancelFullScreen(); + public static function switchToPageFullscreen():Void { + final docEl = document.documentElement; + if (document.fullscreenElement == docEl) return; + + if (document.fullscreenElement == null) { + requestFullscreen(docEl); + return; + } + + final promise = document.exitFullscreen(); + if (promise != null) { + promise.then(_ -> switchToPageFullscreen()).catchError(_ -> {}); + } else { + Timer.delay(() -> switchToPageFullscreen(), 1); + } } public static function toggleFullscreen(el:Element):Bool { |
