|
3 | 3 | // Page Parameters ------------------------------------------------------------ |
4 | 4 |
|
5 | 5 | 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); |
19 | 7 |
|
20 | 8 | 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; |
34 | 10 | } |
35 | 11 |
|
36 | 12 | 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 === "")) |
39 | 16 | return; |
40 | 17 | a.href = MergePageArgsIntoUrl(a.href); |
41 | 18 | } |
42 | 19 |
|
43 | 20 | 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(); |
67 | 27 | } |
68 | 28 |
|
69 | 29 | // Cookies -------------------------------------------------------------------- |
|
0 commit comments