summaryrefslogtreecommitdiff
path: root/public
diff options
context:
space:
mode:
Diffstat (limited to 'public')
-rw-r--r--public/common/play.js36
1 files changed, 24 insertions, 12 deletions
diff --git a/public/common/play.js b/public/common/play.js
index 0ad8765..ce57606 100644
--- a/public/common/play.js
+++ b/public/common/play.js
@@ -1,19 +1,28 @@
"use strict"
-/* URL: /$title_id/(re)play:$game_id:$role */
-
-if (!/\/[\w-]+\/(replay|play|debug):\d+(:[\w-]+)?/.test(window.location.pathname)) {
- document.getElementById("prompt").textContent = "Invalid game ID."
- throw Error("Invalid game ID.")
-}
-
let params = {
- mode: window.location.pathname.split("/")[2].split(":")[0],
+ mode: "play",
title_id: window.location.pathname.split("/")[1],
- game_id: decodeURIComponent(window.location.pathname.split("/")[2]).split(":")[1] | 0,
- role: decodeURIComponent(window.location.pathname.split("/")[2]).split(":")[2] || "Observer",
+ game_id: 0,
+ role: "Observer",
+}
+
+function init_params() {
+ // Support old format during transition
+ if (/\/[\w-]+\/(replay|play|debug):\d+(:[\w-]+)?/.test(window.location.pathname)) {
+ params.mode = window.location.pathname.split("/")[2].split(":")[0]
+ params.game_id = decodeURIComponent(window.location.pathname.split("/")[2]).split(":")[1] | 0
+ params.role = decodeURIComponent(window.location.pathname.split("/")[2]).split(":")[2] || "Observer"
+ return
+ }
+ let search = new URLSearchParams(window.location.search)
+ params.game_id = search.get("game")
+ params.role = search.get("role") || "Observer"
+ params.mode = search.get("mode") || "play"
}
+init_params()
+
let roles = Array.from(document.querySelectorAll(".role")).map(x=>({id:x.id,role:x.id.replace(/^role_/,"").replace(/_/g," ")}))
let view = null
@@ -338,7 +347,10 @@ function goto_rematch() {
}
function goto_replay() {
- window.location = "/" + params.title_id + "/replay:" + params.game_id
+ let search = new URLSearchParams(window.location.search)
+ search.delete("role")
+ search.set("mode", "replay")
+ window.location.search = search
}
function on_game_over() {
@@ -847,7 +859,7 @@ async function init_replay() {
replay = replay.filter(x => !x.is_undone)
function set_hash(n) {
- history.replaceState(null, "", window.location.pathname + "#" + n)
+ history.replaceState(null, "", window.location.pathname + window.location.search + "#" + n)
}
let timer = 0