Skip to content

Commit 04ddd68

Browse files
committed
only "track" changes to the query string of a data-navigate-track asset
1 parent df92140 commit 04ddd68

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

packages/navigate/src/page.js

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ function prepNewBodyScriptTagsToRun(newBody, oldBodyScriptTagHashes) {
6262
}
6363

6464
function mergeNewHead(newHead) {
65-
let headChildrenHtmlLookup = Array.from(document.head.children).map(i => i.outerHTML)
65+
let children = Array.from(document.head.children)
66+
let headChildrenHtmlLookup = children.map(i => i.outerHTML)
6667

6768
// Only add scripts and styles that aren't already loaded on the page.
6869
let garbageCollector = document.createDocumentFragment()
@@ -71,9 +72,9 @@ function mergeNewHead(newHead) {
7172
if (isAsset(child)) {
7273
if (! headChildrenHtmlLookup.includes(child.outerHTML)) {
7374
if (isTracked(child)) {
74-
setTimeout(() => window.location.reload())
75-
76-
return
75+
if (ifTheQueryStringChangedSinceLastRequest(child, children)) {
76+
setTimeout(() => window.location.reload())
77+
}
7778
}
7879

7980
if (isScript(child)) {
@@ -117,6 +118,25 @@ function isTracked(el) {
117118
return el.hasAttribute('data-navigate-track')
118119
}
119120

121+
function ifTheQueryStringChangedSinceLastRequest(el, currentHeadChildren) {
122+
let [uri, queryString] = extractUriAndQueryString(el)
123+
124+
return currentHeadChildren.some(child => {
125+
if (! isTracked(child)) return false
126+
127+
let [currentUri, currentQueryString] = extractUriAndQueryString(child)
128+
129+
// Only consider a data-navigate-track element changed if the query string has changed (not the URI)...
130+
if (currentUri === uri && queryString !== currentQueryString) return true
131+
})
132+
}
133+
134+
function extractUriAndQueryString(el) {
135+
let url = isScript(el) ? el.src : el.href
136+
137+
return url.split('?')
138+
}
139+
120140
function isAsset(el) {
121141
return (el.tagName.toLowerCase() === 'link' && el.getAttribute('rel').toLowerCase() === 'stylesheet')
122142
|| el.tagName.toLowerCase() === 'style'

0 commit comments

Comments
 (0)