From ad0ea545d392fb08041cd817fa85d0d7c2b94fd7 Mon Sep 17 00:00:00 2001 From: mikecarper Date: Wed, 16 Sep 2026 17:27:18 -0700 Subject: [PATCH] Keep generated test URLs readable --- docs/_javascript/preset_test.js | 28 +++++++++++++++++++--------- docs/preset_test.md | 6 +++--- mkdocs.yml | 2 +- test/test_preset_test.js | 6 ++++++ 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/docs/_javascript/preset_test.js b/docs/_javascript/preset_test.js index da80c3e4..0e4eeecf 100644 --- a/docs/_javascript/preset_test.js +++ b/docs/_javascript/preset_test.js @@ -449,17 +449,27 @@ }).format(new Date(milliseconds)); } + function readableQueryValue(value) { + return encodeURIComponent(String(value)) + .replace(/%3A/gi, ":") + .replace(/%2F/gi, "/"); + } + function configuredUrl(config, baseUrl) { const url = new URL(baseUrl); - url.search = ""; - url.searchParams.set("start", new Date(config.startMs).toISOString()); - url.searchParams.set("end", new Date(config.endMs).toISOString()); - url.searchParams.set("tz", config.tz); - url.searchParams.set("freq", config.freqText); - url.searchParams.set("bw", config.bwText); - url.searchParams.set("sf", String(config.sf)); - url.searchParams.set("cr", String(config.cr)); - url.searchParams.set("tx", config.txText); + const values = [ + ["start", new Date(config.startMs).toISOString()], + ["end", new Date(config.endMs).toISOString()], + ["tz", config.tz], + ["freq", config.freqText], + ["bw", config.bwText], + ["sf", String(config.sf)], + ["cr", String(config.cr)], + ["tx", config.txText], + ]; + url.search = "?" + values.map(function (entry) { + return entry[0] + "=" + readableQueryValue(entry[1]); + }).join("&"); return url.toString(); } diff --git a/docs/preset_test.md b/docs/preset_test.md index a4e82241..5a18ecf6 100644 --- a/docs/preset_test.md +++ b/docs/preset_test.md @@ -266,9 +266,9 @@ clock

Enter the test times in the selected time zone and choose the radio - tuple. The generated URL converts the times to exact UTC instants and - keeps tz so the page displays them in the organizer's local - time zone. + tuple. The generated URL converts the times to exact UTC instants, keeps + the date punctuation readable, and keeps tz so the page + displays them in the organizer's local time zone.

diff --git a/mkdocs.yml b/mkdocs.yml index 15fd1127..a4c36316 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -28,4 +28,4 @@ extra_javascript: - _javascript/firmware_picker.js - _javascript/telemetry_decoder.js - _javascript/filter_tool.js - - _javascript/preset_test.js?v=20260916-4 + - _javascript/preset_test.js?v=20260916-5 diff --git a/test/test_preset_test.js b/test/test_preset_test.js index 28ce5e2a..d3aea8df 100644 --- a/test/test_preset_test.js +++ b/test/test_preset_test.js @@ -183,6 +183,12 @@ const shared = new URL(tool.configuredUrl( changed, "https://example.test/preset-test/?stale=yes#commands" )); +assert.strictEqual( + shared.href, + "https://example.test/preset-test/?start=2026-09-22T00:00:00.000Z" + + "&end=2026-09-24T00:00:00.000Z&tz=America/Los_Angeles" + + "&freq=915.25&bw=125&sf=10&cr=5&tx=22#commands" +); assert.strictEqual(shared.searchParams.get("start"), "2026-09-22T00:00:00.000Z"); assert.strictEqual(shared.searchParams.get("end"), "2026-09-24T00:00:00.000Z"); assert.strictEqual(shared.searchParams.get("freq"), "915.25");