From a30ed2be144e89325f6f0759604b02ecf55a6875 Mon Sep 17 00:00:00 2001 From: Ivan Kozik Date: Mon, 17 Jul 2023 21:15:05 +0000 Subject: [PATCH 1/2] dashboard: remove our `intoObject` and use `Object.fromEntries` --- dashboard/assets/scripts/dashboard.js | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/dashboard/assets/scripts/dashboard.js b/dashboard/assets/scripts/dashboard.js index 2c3dba19..a5b8d123 100644 --- a/dashboard/assets/scripts/dashboard.js +++ b/dashboard/assets/scripts/dashboard.js @@ -122,23 +122,12 @@ function regExpEscape(s) { return escaped; } -/** - * [[1, 2], [3, 4]] -> {1: 2, 3: 4} - */ -function intoObject(arr) { - const obj = {}; - arr.forEach((e) => { - obj[e[0]] = e[1]; - }); - return obj; -} - function getQueryArgs() { const pairs = location.search.replace("?", "").split("&"); if (pairs === "") { return {}; } - return intoObject(pairs.map((e) => split(e, "=", 1))); + return Object.fromEntries(pairs.map((e) => split(e, "=", 1))); } function addAnyChangeListener(elem, func) { From ecd91c05b10c1e32b266ba20bb20b438124a0a86 Mon Sep 17 00:00:00 2001 From: Ivan Kozik Date: Mon, 17 Jul 2023 21:22:57 +0000 Subject: [PATCH 2/2] dashboard: use `URLSearchParams` instead of our own query arg parser that did not decode URL escapes like %5E, making it impossible to put a ^ in the filter. --- dashboard/assets/scripts/dashboard.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/dashboard/assets/scripts/dashboard.js b/dashboard/assets/scripts/dashboard.js index a5b8d123..7e852eff 100644 --- a/dashboard/assets/scripts/dashboard.js +++ b/dashboard/assets/scripts/dashboard.js @@ -122,14 +122,6 @@ function regExpEscape(s) { return escaped; } -function getQueryArgs() { - const pairs = location.search.replace("?", "").split("&"); - if (pairs === "") { - return {}; - } - return Object.fromEntries(pairs.map((e) => split(e, "=", 1))); -} - function addAnyChangeListener(elem, func) { // DOM0 handler for convenient use by Clear button elem.onchange = func; @@ -998,7 +990,7 @@ class Dashboard { this.newItemsReceived = 0; this.newBytesReceived = 0; - const args = getQueryArgs(); + const args = Object.fromEntries(new URLSearchParams(window.location.search)); const historyLines = args.historyLines ? Number(args.historyLines) : navigator.userAgent.match(/Mobi/) ? 250 : 500; const batchTimeWhenVisible = args.batchTimeWhenVisible ? Number(args.batchTimeWhenVisible) : 125;