Skip to content

Commit 9ec3ac8

Browse files
feat(pjax): preserve footer while replacing tail content during navigation
Signed-off-by: wangsimiao1 <wangsimiao1@xiaomi.com>
1 parent 9634fa6 commit 9ec3ac8

1 file changed

Lines changed: 26 additions & 0 deletions

File tree

_javascript/modules/layouts/pjax.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,32 @@ async function navigate(url, pushState = true) {
130130
panel.innerHTML = newPanel.innerHTML;
131131
}
132132

133+
// Replace tail content (comments etc.) but preserve footer
134+
const tail = container.querySelector('#tail-wrapper');
135+
const newTail = newContainer.querySelector('#tail-wrapper');
136+
if (tail && newTail) {
137+
const footer = tail.querySelector('footer');
138+
/* Remove everything except footer */
139+
[...tail.childNodes]
140+
.filter((n) => n.nodeName !== 'FOOTER')
141+
.forEach((n) => n.remove());
142+
/* Insert new content before footer */
143+
[...newTail.childNodes]
144+
.filter((n) => n.nodeName !== 'FOOTER')
145+
.forEach((n) => {
146+
const node = n.cloneNode(true);
147+
tail.insertBefore(node, footer);
148+
});
149+
/* Re-execute scripts (needed for Giscus) */
150+
tail.querySelectorAll('script').forEach((old) => {
151+
const s = document.createElement('script');
152+
if (old.src) s.src = old.src;
153+
else s.textContent = old.textContent;
154+
[...old.attributes].forEach((a) => s.setAttribute(a.name, a.value));
155+
old.replaceWith(s);
156+
});
157+
}
158+
133159
// Update title
134160
document.title = doc.title;
135161

0 commit comments

Comments
 (0)