|
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