diff --git a/en/assets/custom.js b/en/assets/custom.js index 6fd7c44..579bde3 100644 --- a/en/assets/custom.js +++ b/en/assets/custom.js @@ -1,12 +1,12 @@ -(function() { +var initAll = function () { var path = window.location.pathname; if (path.endsWith("/print.html")) { return; } var images = document.querySelectorAll("main img") - Array.prototype.forEach.call(images, function(img) { - img.addEventListener("click", function() { + Array.prototype.forEach.call(images, function (img) { + img.addEventListener("click", function () { BigPicture({ el: img, }); @@ -14,91 +14,131 @@ }); // Un-active everything when you click it - Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function(el) { - el.addEventHandler("click", function() { - Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function(el) { + Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function (el) { + el.addEventHandler("click", function () { + Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function (el) { el.classList.remove("active"); }); el.classList.add("active"); }); }); - var updateFunction = function() { - - var id; + var updateFunction = function () { + var id = null; var elements = document.getElementsByClassName("header"); - Array.prototype.forEach.call(elements, function(el) { + Array.prototype.forEach.call(elements, function (el) { if (window.pageYOffset >= el.offsetTop) { id = el; } }); - Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function(el) { + Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function (el) { el.classList.remove("active"); }); - Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function(el) { + Array.prototype.forEach.call(document.getElementsByClassName("pagetoc")[0].children, function (el) { + if (id == null) { + return; + } if (id.href.localeCompare(el.href) == 0) { el.classList.add("active"); } }); }; - // Populate sidebar on load - window.addEventListener('load', function() { - var pagetoc = document.getElementsByClassName("pagetoc")[0]; - var elements = document.getElementsByClassName("header"); - Array.prototype.forEach.call(elements, function(el) { - var link = document.createElement("a"); + var pagetoc = document.getElementsByClassName("pagetoc")[0]; + var elements = document.getElementsByClassName("header"); + Array.prototype.forEach.call(elements, function (el) { + var link = document.createElement("a"); - // Indent shows hierarchy - var indent = ""; - switch (el.parentElement.tagName) { - case "H1": - return; - // case "H2": - // indent = "20px"; - // break; - case "H3": - indent = "20px"; - break; - case "H4": - indent = "40px"; - break; - default: - break; - } + // Indent shows hierarchy + var indent = ""; + switch (el.parentElement.tagName) { + case "H1": + return; + case "H3": + indent = "20px"; + break; + case "H4": + indent = "40px"; + break; + default: + break; + } - link.appendChild(document.createTextNode(el.text)); - link.style.paddingLeft = indent; - link.href = el.href; - pagetoc.appendChild(link); - }); - updateFunction.call(); + link.appendChild(document.createTextNode(el.text)); + link.style.paddingLeft = indent; + link.href = el.href; + pagetoc.appendChild(link); }); + updateFunction.call(); // Handle active elements on scroll window.addEventListener("scroll", updateFunction); - var p = path.replace("index.html", ""); - p = p.replace(".html", ""); - var strs = p.split("/"); - if (strs[strs.length-1] == ""){ - strs.pop() - } - var str = strs[strs.length-1]; - var title = document.querySelector("main>h1,h2>a").textContent - var gitalk = new Gitalk({ - clientID: '8e4b2cf9529ebb3dcad6', - clientSecret: '6f6e8c23575a780bdb1faba3c17be08d76dc35f8', - repo: 'rust-by-practice-comments', - owner: 'sunface', - admin: ["sunface"], - labels: ['comments'], - title: title, - createIssueManually: false, - id: str, - distractionFreeMode: true + document.getElementById("theme-list").addEventListener("click", function (e) { + var iframe = document.querySelector('.giscus-frame'); + if (!iframe) return; + var theme; + if (e.target.className === "theme") { + theme = e.target.id; + } else { + return; + } + + // 若当前 mdbook 主题不是 Light 或 Rust ,则将 giscuz 主题设置为 transparent_dark + var giscusTheme = "light" + if (theme != "light" && theme != "rust") { + giscusTheme = "transparent_dark"; + } + + var msg = { + setConfig: { + theme: giscusTheme + } + }; + iframe.contentWindow.postMessage({ giscus: msg }, 'https://giscus.app'); }); - gitalk.render('gitalk-container'); -})(); \ No newline at end of file + + pagePath = pagePath.replace("index.md", ""); + pagePath = pagePath.replace(".md", ""); + if (pagePath.length > 0) { + if (pagePath.charAt(pagePath.length-1) == "/"){ + pagePath = pagePath.substring(0, pagePath.length-1) + } + }else { + pagePath = "index" + } + + // 选取浏览器默认使用的语言 + const lang = navigator.language || navigator.userLanguage + + // 若当前 mdbook 主题为 Light 或 Rust ,则将 giscuz 主题设置为 light + var theme = "transparent_dark"; + const themeClass = document.getElementsByTagName("html")[0].className; + if (themeClass.indexOf("light") != -1 || themeClass.indexOf("rust") != -1) { + theme = "light" + } + + var script = document.createElement("script") + script.type = "text/javascript"; + script.src = "https://giscus.app/client.js"; + script.async = true; + script.crossOrigin = "anonymous"; + script.setAttribute("data-repo", "sunface/rust-by-practice"); + script.setAttribute("data-repo-id", "MDEwOlJlcG9zaXRvcnkxMjk5OTAzOTY="); + script.setAttribute("data-category", "Book Comments"); + script.setAttribute("data-category-id", "DIC_kwDOB79-_M4COQmx"); + script.setAttribute("data-mapping", "specific"); + script.setAttribute("data-term", pagePath); + script.setAttribute("data-reactions-enabled", "1"); + script.setAttribute("data-emit-metadata", "0"); + script.setAttribute("data-input-position", "top"); + script.setAttribute("data-theme", theme); + script.setAttribute("data-lang", lang); + // 预先加载评论会更好,这样用户读到那边时,评论就加载好了 + // script.setAttribute("data-loading", "lazy"); + document.getElementById("giscus-container").appendChild(script); +}; + +window.addEventListener('load', initAll); \ No newline at end of file diff --git a/en/theme/index.hbs b/en/theme/index.hbs index 69134ba..d09161f 100644 --- a/en/theme/index.hbs +++ b/en/theme/index.hbs @@ -54,8 +54,6 @@ {{/if}} - - @@ -69,11 +67,9 @@ try { var theme = localStorage.getItem('mdbook-theme'); var sidebar = localStorage.getItem('mdbook-sidebar'); - if (theme.startsWith('"') && theme.endsWith('"')) { localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); } - if (sidebar.startsWith('"') && sidebar.endsWith('"')) { localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); } @@ -187,7 +183,7 @@
{{{ content }}} -
+