aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Harris <bjh21@bjh21.me.uk>2022-10-21 09:55:35 +0100
committerBen Harris <bjh21@bjh21.me.uk>2022-10-21 10:28:01 +0100
commit0197ca43594fbe7cd44377078296720ac7499887 (patch)
tree6996c42d75aff22d53b6eb48aa8dbc23bbbb1f4d
parent373dadacc06210197e3d68c55a6d611126915120 (diff)
downloadpuzzles-0197ca43594fbe7cd44377078296720ac7499887.zip
puzzles-0197ca43594fbe7cd44377078296720ac7499887.tar.gz
puzzles-0197ca43594fbe7cd44377078296720ac7499887.tar.bz2
puzzles-0197ca43594fbe7cd44377078296720ac7499887.tar.xz
js: Percent-encode game IDs in URLs and decode them again on input
This is necessary to allow all random seeds to round-trip properly. It's probably not currently necessary for descriptive game IDs, but it won't hurt. I've deliberately gone for encoding only those characters that are not valid in fragment identifiers to minimise the ugliness of the generated URLs. For slightly interesting historical reasons, '#' is not valid in a fragment identifier, so all random seed links end up a little bit ugly.
-rw-r--r--emcclib.js4
-rw-r--r--emccpre.js2
2 files changed, 3 insertions, 3 deletions
diff --git a/emcclib.js b/emcclib.js
index 1cd83d0..c145426 100644
--- a/emcclib.js
+++ b/emcclib.js
@@ -165,13 +165,13 @@ mergeInto(LibraryManager.library, {
* the random seed permalink.
*/
js_update_permalinks: function(desc, seed) {
- desc = UTF8ToString(desc);
+ desc = encodeURI(UTF8ToString(desc)).replaceAll("#", "%23");
permalink_desc.href = "#" + desc;
if (seed == 0) {
permalink_seed.style.display = "none";
} else {
- seed = UTF8ToString(seed);
+ seed = encodeURI(UTF8ToString(seed)).replaceAll("#", "%23");;
permalink_seed.href = "#" + seed;
permalink_seed.style.display = "";
}
diff --git a/emccpre.js b/emccpre.js
index 7bdc2d6..d9ecd8c 100644
--- a/emccpre.js
+++ b/emccpre.js
@@ -515,7 +515,7 @@ function initPuzzle() {
// Run the C setup function, passing argv[1] as the fragment
// identifier (so that permalinks of the form puzzle.html#game-id
// can launch the specified id).
- Module.callMain([location.hash]);
+ Module.callMain([decodeURIComponent(location.hash)]);
// And if we get here with everything having gone smoothly, i.e.
// we haven't crashed for one reason or another during setup, then