+
+
{{{ content }}}
+
{{#unless is_print }}
@@ -134,6 +151,7 @@
{{/unless}}
+
{{#previous}}
@@ -164,6 +182,7 @@
+
{{#if live_reload_endpoint}}
+
+
+
diff --git a/theme/js/page.js b/theme/js/page.js
index f9befa4..9570bab 100644
--- a/theme/js/page.js
+++ b/theme/js/page.js
@@ -1,4 +1,4 @@
-if (window.innerWidth > 640) {
+if (window.innerWidth > 640) { // 自动展开导航栏
document.getElementById("toc-drawer").setAttribute('open', true);
}
@@ -16,7 +16,7 @@ function nextPage() {
changePage(link);
}
-function setPage(url) {
+function setPage(url) { // 菜单跳转事件
if (url === "") {
return;
}
@@ -26,18 +26,23 @@ function setPage(url) {
}
function changePage(url) {
+ // 加载图标
var nextbtn = document.getElementsByClassName("next—page")[0]
if (nextbtn != undefined) {
nextbtn.setAttribute("loading", "");
}
+
+ // 发送 XHR 动态更新
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
- if (xhr.readyState !== 4) return;
+ if (xhr.readyState !== 4) return; // 加载失败
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {
+ // 滚动到顶部
document.documentElement.scrollTop = 0;
document.body.scrollTop = 0;
+ // 更新内容与翻页按钮
var old_tag = document.getElementsByClassName("mdui-prose")[0];
var old_topbar_tag = document.getElementsByClassName("navbtn")[0];
var old_navcard_tag = document.getElementsByClassName("navcard")[0];
@@ -48,6 +53,7 @@ function changePage(url) {
old_topbar_tag.innerHTML = virtualtag.getElementsByClassName("navbtn")[0].innerHTML;
old_navcard_tag.innerHTML = virtualtag.getElementsByClassName("navcard")[0].innerHTML;
+ // 更新导航栏当前选择的内容
var elements = document.querySelectorAll('[active]');
elements.forEach(element => {
element.removeAttribute('active');
@@ -57,15 +63,22 @@ function changePage(url) {
element.setAttribute('active', "true");
});
+ // 清除临时标签
virtualtag.remove();
+
+ // 添加历史记录
history.pushState({ page: title }, title, url);
+ // 刷新高亮
+ hljs.highlightAll();
}
};
+ // 发送 XHR
xhr.open('GET', url, true);
xhr.send(null);
}
+// 当回到上一页时
window.addEventListener('popstate', function (event) {
console.log('pop state:', window.location.protocol + "//" + window.location.host + location.pathname);
changePage(window.location.protocol + "//" + window.location.host + location.pathname);
diff --git a/theme/js/tocrender.js b/theme/js/tocrender.js
index a776ea6..007c253 100644
--- a/theme/js/tocrender.js
+++ b/theme/js/tocrender.js
@@ -1,32 +1,35 @@
-
+// 获取当前 toc 内容
var toc_obj = document.getElementById("helperframe").getElementsByTagName("ol")[0]
+
+// html 转目录树
function createTree(elements) {
let result = [];
last = 0
elements.childNodes.forEach(element => {
+ // 有子元素并且不是大标题
if (element.childNodes.length > 0 && (!element.classList.contains("part-title"))) {
let a = element.childNodes[0]
- let link = a.tagName === 'A' ? a.href : ''
- if (link == '') {
- if (a.tagName === 'DIV') {
+ let link = a.tagName === 'A' ? a.href : '' // 获取链接,没有的就是目录
+ if (link == '') { // 目录
+ if (a.tagName === 'DIV') { // 目录不可点击
result.push({
link: "#",
text: a.textContent,
child: [],
avtive: false
})
- } else {
+ } else { // 目录可点击
result[result.length - 1].child = createTree(element.getElementsByTagName("ol")[0])
}
- } else {
+ } else { // 文章
result.push({
link: link,
text: a.innerText,
child: [],
- active: element.childNodes[0].classList.contains("active")
+ active: element.childNodes[0].classList.contains("active") // 当前选中的
})
}
- } else if (element.classList.contains("part-title")) {
+ } else if (element.classList.contains("part-title")) { // 大标题
result.push({
link: "",
text: `