Fix Two Rivers production age gate
All checks were successful
Build Org Website / build (push) Successful in 44s
All checks were successful
Build Org Website / build (push) Successful in 44s
This commit is contained in:
35
assets/scripts/games/two-rivers/gate.js
Normal file
35
assets/scripts/games/two-rivers/gate.js
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
(function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var root = document.querySelector("[data-two-rivers]");
|
||||||
|
if (!root) return;
|
||||||
|
|
||||||
|
var button = root.querySelector("[data-tr-age-confirm]");
|
||||||
|
var ageScreen = root.querySelector("[data-tr-age]");
|
||||||
|
var loading = root.querySelector("[data-tr-loading]");
|
||||||
|
var loadingCopy = root.querySelector("[data-tr-loading-copy]");
|
||||||
|
var AGE_KEY = "zxh_two_rivers_age_gate_v1";
|
||||||
|
|
||||||
|
if (!button || !ageScreen || !loading) return;
|
||||||
|
|
||||||
|
button.addEventListener("click", function () {
|
||||||
|
root.dataset.ageConfirmed = "true";
|
||||||
|
try {
|
||||||
|
localStorage.setItem(AGE_KEY, "true");
|
||||||
|
} catch (_error) {
|
||||||
|
// The module bootstrap can still use the in-page marker when storage is unavailable.
|
||||||
|
}
|
||||||
|
|
||||||
|
ageScreen.hidden = true;
|
||||||
|
loading.hidden = false;
|
||||||
|
if (loadingCopy) loadingCopy.textContent = "Opening the festival…";
|
||||||
|
|
||||||
|
window.setTimeout(function () {
|
||||||
|
if (!loading.hidden && !root.querySelector("[data-tr-menu]:not([hidden])")) {
|
||||||
|
loading.innerHTML = "<div><strong>The festival files did not finish loading.</strong><p>Refresh once to fetch the latest game files. If the problem continues, the deployment is incomplete.</p><button type=\"button\" data-tr-gate-retry>Refresh</button><a href=\"/play/play.html\">Return to the playroom</a></div>";
|
||||||
|
var retry = loading.querySelector("[data-tr-gate-retry]");
|
||||||
|
if (retry) retry.addEventListener("click", function () { location.reload(); });
|
||||||
|
}
|
||||||
|
}, 12000);
|
||||||
|
}, {once: true});
|
||||||
|
}());
|
||||||
@@ -168,7 +168,7 @@ async function start() {
|
|||||||
|
|
||||||
function showGateOrMenu() {
|
function showGateOrMenu() {
|
||||||
const age = root.querySelector("[data-tr-age]");
|
const age = root.querySelector("[data-tr-age]");
|
||||||
if (saves.ageConfirmed()) {
|
if (saves.ageConfirmed() || root.dataset.ageConfirmed === "true") {
|
||||||
age.hidden = true;
|
age.hidden = true;
|
||||||
showMenu();
|
showMenu();
|
||||||
} else {
|
} else {
|
||||||
@@ -225,6 +225,7 @@ async function start() {
|
|||||||
root.querySelector("[data-tr-age-confirm]").addEventListener("click", () => {
|
root.querySelector("[data-tr-age-confirm]").addEventListener("click", () => {
|
||||||
saves.confirmAge();
|
saves.confirmAge();
|
||||||
root.querySelector("[data-tr-age]").hidden = true;
|
root.querySelector("[data-tr-age]").hidden = true;
|
||||||
|
loadingEl.hidden = true;
|
||||||
audio.unlock();
|
audio.unlock();
|
||||||
showMenu();
|
showMenu();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -93,10 +93,11 @@
|
|||||||
<noscript><section class="tr-screen"><div class="tr-card"><h1>JavaScript is required</h1><a href="/play/play.html">Return to the playroom</a></div></section></noscript>
|
<noscript><section class="tr-screen"><div class="tr-card"><h1>JavaScript is required</h1><a href="/play/play.html">Return to the playroom</a></div></section></noscript>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<link rel="stylesheet" href="/assets/styles/pages/two-rivers.css?v=1.0.0">
|
<link rel="stylesheet" href="/assets/styles/pages/two-rivers.css?v=1.0.1">
|
||||||
|
<script src="/assets/scripts/games/two-rivers/gate.js?v=1.0.1"></script>
|
||||||
<script src="/assets/scripts/vendor/two-rivers/phaser-3.90.0.min.js?v=1.0.0"></script>
|
<script src="/assets/scripts/vendor/two-rivers/phaser-3.90.0.min.js?v=1.0.0"></script>
|
||||||
<script src="/assets/scripts/vendor/two-rivers/gsap-3.13.0.min.js?v=1.0.0"></script>
|
<script src="/assets/scripts/vendor/two-rivers/gsap-3.13.0.min.js?v=1.0.0"></script>
|
||||||
<script src="/assets/scripts/vendor/two-rivers/howler-2.2.4.min.js?v=1.0.0"></script>
|
<script src="/assets/scripts/vendor/two-rivers/howler-2.2.4.min.js?v=1.0.0"></script>
|
||||||
<script type="module" src="/assets/scripts/games/two-rivers/main.js?v=1.0.0"></script>
|
<script type="module" src="/assets/scripts/games/two-rivers/main.js?v=1.0.1"></script>
|
||||||
<!-- TWO-RIVERS-STANDALONE-END -->
|
<!-- TWO-RIVERS-STANDALONE-END -->
|
||||||
#+END_EXPORT
|
#+END_EXPORT
|
||||||
|
|||||||
@@ -133,10 +133,12 @@ test("page uses local pinned libraries and production source is clean", () => {
|
|||||||
assert.match(page, /phaser-3\.90\.0\.min\.js/);
|
assert.match(page, /phaser-3\.90\.0\.min\.js/);
|
||||||
assert.match(page, /gsap-3\.13\.0\.min\.js/);
|
assert.match(page, /gsap-3\.13\.0\.min\.js/);
|
||||||
assert.match(page, /howler-2\.2\.4\.min\.js/);
|
assert.match(page, /howler-2\.2\.4\.min\.js/);
|
||||||
|
assert.match(page, /games\/two-rivers\/gate\.js\?v=1\.0\.1/);
|
||||||
assert.doesNotMatch(page, /https?:\/\//);
|
assert.doesNotMatch(page, /https?:\/\//);
|
||||||
const source = [
|
const source = [
|
||||||
page,
|
page,
|
||||||
read("assets/scripts/games/two-rivers/main.js"),
|
read("assets/scripts/games/two-rivers/main.js"),
|
||||||
|
read("assets/scripts/games/two-rivers/gate.js"),
|
||||||
read("assets/scripts/games/two-rivers/core/state.mjs"),
|
read("assets/scripts/games/two-rivers/core/state.mjs"),
|
||||||
read("assets/scripts/games/two-rivers/ui/interface.mjs"),
|
read("assets/scripts/games/two-rivers/ui/interface.mjs"),
|
||||||
read("assets/scripts/games/two-rivers/scenes/game-scenes.mjs")
|
read("assets/scripts/games/two-rivers/scenes/game-scenes.mjs")
|
||||||
|
|||||||
Reference in New Issue
Block a user