Skip to content

Commit e3cddb8

Browse files
authored
Merge pull request #13 from hatmarch/master
Improve error handling and xref support
2 parents 26b3779 + 75899ad commit e3cddb8

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

preview-src/index.adoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ And this also should not: [.no-query-replace]`%USER%`
5656

5757
You should see USER replacement here: %USER% but not here: [.no-query-replace]#%USER%#
5858

59+
=== Xrefs
60+
61+
xref:index.adoc#link-testing[This,role="page"] is an xref that needs the query string preserved.
5962

6063
== Cu solet
6164

src/js/07-userparams-behaviour.js

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@ document.addEventListener('DOMContentLoaded', function () {
33
// If there is a query string, we need to fix up the page to make sure the query string is properly preserved
44
var desiredQueryString = new URLSearchParams(window.location.search)
55
if (desiredQueryString.toString()) {
6-
preserveQueryString(desiredQueryString)
6+
77
// If there are query parameters (searchparams) in the current window location
88
// then iterate over all them replacing text and link-hrefs that contain them
99
for (var k of desiredQueryString.keys()) {
1010
replaceParamsInNodes(document.body, k, desiredQueryString.get(k))
1111
}
12+
13+
// NOTE: Once all links have been query string replaced, then attempt to preserve the query string
14+
// for all references
15+
preserveQueryString(desiredQueryString)
16+
1217
}
1318

1419
function preserveQueryString (desiredQueryString) {
@@ -23,17 +28,27 @@ document.addEventListener('DOMContentLoaded', function () {
2328
if (paramLinks) {
2429
paramLinks.forEach(appendQueryStringToHref)
2530
}
31+
32+
// Handle xrefs, which are anchor elements generated by antora with the page attribute
33+
var xrefLinks = document.querySelectorAll('a.page')
34+
if (xrefLinks) {
35+
xrefLinks.forEach(appendQueryStringToHref)
36+
}
2637
}
2738

2839
function appendQueryStringToHref (el) {
2940
// NOTE: desiredQueryString captured from above
3041
if (desiredQueryString.toString()) {
31-
var hrefURL = new URL(el.href)
32-
for (var k of desiredQueryString.keys()) {
33-
hrefURL.searchParams.set(k, desiredQueryString.get(k))
34-
}
42+
try {
43+
var hrefURL = new URL(el.href)
44+
for (var k of desiredQueryString.keys()) {
45+
hrefURL.searchParams.set(k, desiredQueryString.get(k))
46+
}
3547

36-
el.href = hrefURL.toString()
48+
el.href = hrefURL.toString()
49+
} catch (err) {
50+
console.error('Unable to append query string to element [' + el.innerHTML + ']: ' + err)
51+
}
3752
}
3853
}
3954

0 commit comments

Comments
 (0)