Skip to content

Commit b213e23

Browse files
committed
refactor: modernize JS in scribble-common.js
Browsers released within the last 5 years (the partial support tier according to #240) support URLSearchParams, so we should use it.
1 parent 3e12c25 commit b213e23

File tree

1 file changed

+11
-51
lines changed

1 file changed

+11
-51
lines changed

scribble-lib/scribble/scribble-common.js

+11-51
Original file line numberDiff line numberDiff line change
@@ -3,67 +3,27 @@
33
// Page Parameters ------------------------------------------------------------
44

55
var page_query_string = location.search.substring(1);
6-
7-
var page_args =
8-
((function(){
9-
if (!page_query_string) return [];
10-
var args = page_query_string.split(/[&;]/);
11-
for (var i=0; i<args.length; i++) {
12-
var a = args[i];
13-
var p = a.indexOf('=');
14-
if (p >= 0) args[i] = [a.substring(0,p), a.substring(p+1)];
15-
else args[i] = [a, false];
16-
}
17-
return args;
18-
})());
6+
const page_args = new URLSearchParams(location.search);
197

208
function GetPageArg(key, def) {
21-
for (var i=0; i<page_args.length; i++)
22-
if (page_args[i][0] === key) {
23-
try {
24-
return decodeURIComponent(page_args[i][1]);
25-
} catch (e) {
26-
if (e instanceof URIError) {
27-
return page_args[i][1];
28-
} else {
29-
throw e;
30-
}
31-
}
32-
}
33-
return def;
9+
return page_args.get(key) || def;
3410
}
3511

3612
function MergePageArgsIntoLink(a) {
37-
if (page_args.length == 0 ||
38-
(!a.attributes["data-pltdoc"]) || (a.attributes["data-pltdoc"].value == ""))
13+
if (page_args.size === 0 ||
14+
(!a.attributes["data-pltdoc"]) ||
15+
(a.attributes["data-pltdoc"].value === ""))
3916
return;
4017
a.href = MergePageArgsIntoUrl(a.href);
4118
}
4219

4320
function MergePageArgsIntoUrl(href) {
44-
var mtch = href.match(/^([^?#]*)(?:\?([^#]*))?(#.*)?$/);
45-
if (mtch == undefined) { // I think this never happens
46-
return "?" + page_query_string;
47-
}
48-
if (!mtch[2]) {
49-
return mtch[1] + "?" + page_query_string + (mtch[3] || "");
50-
}
51-
// need to merge here, precedence to arguments that exist in `a'
52-
var i, j;
53-
var prefix = mtch[1], str = mtch[2] || "", suffix = mtch[3] || "";
54-
var args = str.split(/[&;]/);
55-
for (i=0; i<args.length; i++) {
56-
j = args[i].indexOf('=');
57-
if (j) args[i] = args[i].substring(0,j);
58-
}
59-
var additions = "";
60-
for (i=0; i<page_args.length; i++) {
61-
var exists = false;
62-
for (j=0; j<args.length; j++)
63-
if (args[j] == page_args[i][0]) { exists = true; break; }
64-
if (!exists) str += "&" + page_args[i][0] + "=" + page_args[i][1];
65-
}
66-
return prefix + "?" + str + suffix;
21+
const url = new URL(href, window.location.href);
22+
for (const [key, val] of page_args) {
23+
if (url.searchParams.has(key)) continue;
24+
url.searchParams.append(key, val)
25+
}
26+
return url.toString();
6727
}
6828

6929
// Cookies --------------------------------------------------------------------

0 commit comments

Comments
 (0)