From 205fc11c6c2ffa3329d31955941172a33520df2c Mon Sep 17 00:00:00 2001 From: Tony Kan Date: Tue, 8 Apr 2025 22:05:27 -0700 Subject: [PATCH 1/4] feat: Improve URL data handling by checking for 'data' parameter --- Types/Entities/World.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Types/Entities/World.js b/Types/Entities/World.js index 36598dd1..01db4038 100644 --- a/Types/Entities/World.js +++ b/Types/Entities/World.js @@ -439,14 +439,15 @@ function World(spec) { function getUrlData() { const url = new URL(location) - if (url.search) { + if (url.searchParams.has('data')) { try { + const compressedData = url.searchParams.get('data') const urlData = JSON.parse( - LZString.decompressFromBase64(url.search.slice(1)), + LZString.decompressFromBase64(compressedData), ) return urlData } catch (err) { - console.error('Error loading url:', err) + console.error('Error loading URL data:', err) // TODO: Maybe switch to modal alert('Sorry, this URL is malformed :(') } From 3a2a6cabea9b20d61962130d113aaeb0b230b82b Mon Sep 17 00:00:00 2001 From: Tony Kan Date: Tue, 8 Apr 2025 22:05:51 -0700 Subject: [PATCH 2/4] feat: Update sharing URL to include 'data' parameter for compressed level data --- Types/Entities/Level/Editor/LevelEditor.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Types/Entities/Level/Editor/LevelEditor.js b/Types/Entities/Level/Editor/LevelEditor.js index b5d6d0e5..6a686788 100644 --- a/Types/Entities/Level/Editor/LevelEditor.js +++ b/Types/Entities/Level/Editor/LevelEditor.js @@ -337,10 +337,8 @@ Share -> open dialog w/ serialized JSON with edit: false, name: "Custom" function onShareButtonClicked() { const serialized = serialize('CUSTOM_LEVEL') - const url = - location.origin + - '?' + - LZString.compressToBase64(JSON.stringify(serialized)) + const compressed = LZString.compressToBase64(JSON.stringify(serialized)) + const url = `${location.origin}?data=${compressed}` ui.puzzleLink.value = url showDialog(ui.editorSharingLinkDialog) } From a4aeaa529d8332dafc528ea9b31fa058d8297d7d Mon Sep 17 00:00:00 2001 From: Tony Kan Date: Tue, 8 Apr 2025 22:24:56 -0700 Subject: [PATCH 3/4] fix: Avoid using default URL decoding which can break Base64 encoding --- Types/Entities/World.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Types/Entities/World.js b/Types/Entities/World.js index 01db4038..7ffb1818 100644 --- a/Types/Entities/World.js +++ b/Types/Entities/World.js @@ -441,7 +441,7 @@ function World(spec) { if (url.searchParams.has('data')) { try { - const compressedData = url.searchParams.get('data') + const compressedData = location.href.split('data=')[1]?.split('&')[0] const urlData = JSON.parse( LZString.decompressFromBase64(compressedData), ) From afafea7b6e25a30617c099929737741443f29fc1 Mon Sep 17 00:00:00 2001 From: Tony Kan Date: Tue, 8 Apr 2025 22:25:25 -0700 Subject: [PATCH 4/4] feat: Update save URL to include 'data' parameter for serialized level data --- Types/Entities/Level/Level.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Types/Entities/Level/Level.js b/Types/Entities/Level/Level.js index f6d8cfaf..395b7789 100644 --- a/Types/Entities/Level/Level.js +++ b/Types/Entities/Level/Level.js @@ -862,7 +862,7 @@ function Level(spec) { history.pushState( null, null, - '?' + LZString.compressToBase64(JSON.stringify(serialized)), + '?data=' + LZString.compressToBase64(JSON.stringify(serialized)), ) // console.log('Writing to URL:', serialized) }