From 38be121679d3261503cc12390db974549b35d1c9 Mon Sep 17 00:00:00 2001 From: GarboMuffin Date: Fri, 21 Jun 2024 16:31:57 -0500 Subject: [PATCH] Use prefixed fullscreen methods (#1559) Some Safari versions that aren't even that old need webkit prefix --- extensions/CubesterYT/WindowControls.js | 36 ++++++++++++++++--- extensions/veggiecan/browserfullscreen.js | 44 ++++++++++++++++++----- 2 files changed, 67 insertions(+), 13 deletions(-) diff --git a/extensions/CubesterYT/WindowControls.js b/extensions/CubesterYT/WindowControls.js index c77618d651..ff1ea7d3c9 100644 --- a/extensions/CubesterYT/WindowControls.js +++ b/extensions/CubesterYT/WindowControls.js @@ -19,6 +19,32 @@ return Math.floor(Math.random() * (max - min + 1)) + min; } + const isFullscreenEnabled = () => { + if (typeof document.fullscreenElement !== "undefined") { + return document.fullscreenElement !== null; + } + if (typeof document.webkitFullscreenElement !== "undefined") { + return document.webkitFullscreenElement !== null; + } + return false; + }; + + const enterFullscreen = () => { + if (document.documentElement.requestFullscreen) { + document.documentElement.requestFullscreen(); + } else if (document.documentElement.webkitRequestFullscreen) { + document.documentElement.webkitRequestFullscreen(); + } + }; + + const exitFullscreen = () => { + if (document.exitFullscreen) { + document.exitFullscreen(); + } else if (document.webkitExitFullscreen) { + document.webkitExitFullscreen(); + } + }; + class WindowControls { getInfo() { return { @@ -515,17 +541,17 @@ return document.title; } enterFullscreen() { - if (document.fullscreenElement == null) { - document.documentElement.requestFullscreen(); + if (!isFullscreenEnabled()) { + enterFullscreen(); } } exitFullscreen() { - if (document.fullscreenElement !== null) { - document.exitFullscreen(); + if (isFullscreenEnabled()) { + exitFullscreen(); } } isFullscreen() { - return document.fullscreenElement !== null; + return isFullscreenEnabled(); } closeWindow() { const editorConfirmation = Scratch.translate({ diff --git a/extensions/veggiecan/browserfullscreen.js b/extensions/veggiecan/browserfullscreen.js index 6d8944d0e6..e5a69214c5 100644 --- a/extensions/veggiecan/browserfullscreen.js +++ b/extensions/veggiecan/browserfullscreen.js @@ -9,11 +9,39 @@ const icon = "data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSI2My4yNjc0MiIgaGVpZ2h0PSI2My4xODQ5NSIgdmlld0JveD0iMCwwLDYzLjI2NzQyLDYzLjE4NDk1Ij48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjA4LjM2NjI5LC0xNDguNDA3NTMpIj48ZyBkYXRhLXBhcGVyLWRhdGE9InsmcXVvdDtpc1BhaW50aW5nTGF5ZXImcXVvdDs6dHJ1ZX0iIGZpbGwtcnVsZT0ibm9uemVybyIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWRhc2hhcnJheT0iIiBzdHJva2UtZGFzaG9mZnNldD0iMCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOiBub3JtYWwiPjxwYXRoIGQ9IiIgZmlsbD0iI2ZmZDI0ZCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjAuNSIvPjxwYXRoIGQ9IiIgZmlsbD0iIzAxMDEwMCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjAuNSIvPjxwYXRoIGQ9IiIgZmlsbD0iIzAxMDEwMCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjAuNSIvPjxwYXRoIGQ9IiIgZmlsbD0iIzAxMDEwMCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjAuNSIvPjxwYXRoIGQ9IiIgZmlsbD0iIzAxMDEwMCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjAuNSIvPjxwYXRoIGQ9IiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjAuNSIvPjxwYXRoIGQ9IiIgZmlsbD0iIzAwMDAwMCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjAuNSIvPjxwYXRoIGQ9Ik0yNjkuNjMzNzEsMTgwYzAsMTYuMzQzNDcgLTEzLjI2NzQ3LDI5LjU5MjQ4IC0yOS42MzM3MSwyOS41OTI0OGMtMTYuMzY2MjUsMCAtMjkuNjMzNzEsLTEzLjI0OTAxIC0yOS42MzM3MSwtMjkuNTkyNDhjMCwtMTYuMzQzNDcgMTMuMjY3NDcsLTI5LjU5MjQ3IDI5LjYzMzcxLC0yOS41OTI0N2MxNi4zNjYyNSwwIDI5LjYzMzcxLDEzLjI0OSAyOS42MzM3MSwyOS41OTI0N3oiIGZpbGw9IiNmZmQyNGQiIHN0cm9rZT0iI2ZmZDI0ZCIgc3Ryb2tlLXdpZHRoPSI0Ii8+PGcgc3Ryb2tlLXdpZHRoPSI1Ij48ZyBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiPjxwYXRoIGQ9Ik0yNjAuMjA3MDEsMTY3LjcwODg3YzAsMCAtMy43NDA3NSwtMS45MjU0NCAtNS4xOTI2MywtMi42NzI3NmMtMS4wNDg4LC0wLjUzOTg0IC0xLjQ3OTgyLC0wLjk5NjMxIC0xLjQ3OTgyLC0wLjk5NjMxbDYuNjgyMzksLTAuMjE1Njl6Ii8+PGc+PHBhdGggZD0iTTIyNy45OTM3NiwxOTYuMDEwNDFsMjQuMTE4NywtMzAuNTQ3OTdsMi4xODE5OSwxLjcyMjc2bC0yNC4xMTg3LDMwLjU0Nzk3eiIvPjxwYXRoIGQ9Ik0yNTguMTI3ODQsMTkyLjk2MTIybC0zNS4yMjk0OSwtMjUuMjk0NjZsMC45NzI4OCwtMS4zNTQ5OWwzNS4yMjk0OSwyNS4yOTQ2NnoiLz48cGF0aCBkPSJNMjI1LjM4ODcsMTYyLjM1NzIxYzAsMCAtMi42NzQ1NCwzLjQzOTM1IC0zLjcxMjYsNC43NzQyNWMtMC43NDk4NywwLjk2NDMgLTEuMjg3MzQsMS4zMDg5MSAtMS4yODczNCwxLjMwODkxbDEuMjA1MjksLTYuOTQ4OTZ6Ii8+PHBhdGggZD0iTTI1Ni4wOTcxMiwxOTUuNDE3NDFjMCwwIDMuMTk3ODMsLTIuOTU5MDkgNC40Mzg5OSwtNC4xMDc1OWMwLjg5NjU5LC0wLjgyOTY1IDEuNDgyOSwtMS4wODIzNSAxLjQ4MjksLTEuMDgyMzVsLTIuMzE4MzQsNi42NjA3OXoiLz48cGF0aCBkPSJNMjI1LjAzMDcxLDE5NS40MTMwN2MwLDAgMy42NDk1NiwyLjM3OTcxIDUuMDY2MDQsMy4zMDMzNGMxLjAyMzI0LDAuNjY3MjEgMS40MTEyOSwxLjE3NDIgMS40MTEyOSwxLjE3NDJsLTcuMDI1MDUsLTAuNjI0MXoiLz48L2c+PC9nPjxwYXRoIGQ9Ik0yMzIuOTYyNDgsMTgxLjk4NjUxbDcuMTQ2NjYsLTEwLjgyODAzbDEwLjY3MzM2LDcuMDQ0NTdsLTcuMTQ2NjYsMTAuODI4MDN6IiBmaWxsPSIjZmZkMjRkIiBzdHJva2U9Im5vbmUiLz48L2c+PC9nPjwvZz48L3N2Zz4="; - window.addEventListener("fullscreenchange", () => { + const isFullscreenEnabled = () => { + if (typeof document.fullscreenElement !== "undefined") { + return document.fullscreenElement !== null; + } + if (typeof document.webkitFullscreenElement !== "undefined") { + return document.webkitFullscreenElement !== null; + } + return false; + }; + + const enterFullscreen = () => { + if (document.documentElement.requestFullscreen) { + document.documentElement.requestFullscreen(); + } else if (document.documentElement.webkitRequestFullscreen) { + document.documentElement.webkitRequestFullscreen(); + } + }; + + const exitFullscreen = () => { + if (document.exitFullscreen) { + document.exitFullscreen(); + } else if (document.webkitExitFullscreen) { + document.webkitExitFullscreen(); + } + }; + + const onFullScreenChange = () => { Scratch.vm.runtime.startHats("fullscreen0419_whenfullscreen", { - ENABLED: document.fullscreenElement === null ? "exited" : "entered", + ENABLED: isFullscreenEnabled() ? "entered" : "exited", }); - }); + }; + window.addEventListener("fullscreenchange", onFullScreenChange); + window.addEventListener("webkitfullscreenchange", onFullScreenChange); class FullscreenExtension { getInfo() { @@ -89,14 +117,14 @@ } fullscreen(args) { const action = Scratch.Cast.toString(args.ACTION).toLowerCase(); - if (action === "enter" && !document.fullscreenElement) { - document.documentElement.requestFullscreen(); - } else if (action === "exit" && document.fullscreenElement) { - document.exitFullscreen(); + if (action === "enter" && !isFullscreenEnabled()) { + enterFullscreen(); + } else if (action === "exit" && isFullscreenEnabled()) { + exitFullscreen(); } } isInFullscreen() { - return document.fullscreenElement !== null; + return isFullscreenEnabled(); } }