diff --git a/_includes/body-landing.html b/_includes/body-landing.html index f46edda07f..7e3625137f 100644 --- a/_includes/body-landing.html +++ b/_includes/body-landing.html @@ -473,7 +473,6 @@ - - - {%- include analytics/polldaddy.html -%} diff --git a/js/docs.js b/js/docs.js index 06f5213368..c58973cb0a 100644 --- a/js/docs.js +++ b/js/docs.js @@ -82,19 +82,21 @@ function walkTree(tree) { } } -function renderNav(docstoc) { - for (let i = 0; i < docstoc.horizontalnav.length; i++) { - if (docstoc.horizontalnav[i].path === pageURL || pageIsInSection(docstoc[docstoc.horizontalnav[i].node])) { - // This is the current section. Set the corresponding header-nav link - // to active, and build the left-hand (vertical) navigation - document.getElementById(docstoc.horizontalnav[i].node).closest("li").classList.add("active") - walkTree(docstoc[docstoc.horizontalnav[i].node]); - document.getElementById("jsTOCLeftNav").innerHTML = outputLetNav.join(""); +function renderNav() { + getJSON( "/js/toc.json", function( data ) { + for (const item of data.horizontalnav) { + if (item.path === pageURL || pageIsInSection(data[item.node])) { + // This is the current section. Set the corresponding header-nav link + // to active, and build the left-hand (vertical) navigation + _('#'+item.node).closest("li").classList.add("active") + walkTree(data[item.node]); + _("#jsTOCLeftNav").innerHTML = outputLetNav.join(""); + } } - } - // Scroll the current menu item into view. We actually pick the item *above* - // the current item to give some headroom above - scrollMenuItem("#jsTOCLeftNav a.currentPage") + // Scroll the current menu item into view. We actually pick the item *above* + // the current item to give some headroom above + scrollMenuItem("#jsTOCLeftNav a.currentPage") + }); } // Scroll the given menu item into view. We actually pick the item *above* @@ -256,3 +258,5 @@ window.onload = function () { $('.nav-tabs > li > a[data-group="' + group + '"]').tab("show"); }); }; + +ready(renderNav); diff --git a/js/metadata.js b/js/metadata.json similarity index 99% rename from js/metadata.js rename to js/metadata.json index b0a7c5e901..70b5aab771 100644 --- a/js/metadata.js +++ b/js/metadata.json @@ -1,7 +1,7 @@ --- layout: null --- -const pages = [ +[ {%- for page in site.html_pages -%} {%- if page.hide_from_sitemap != nil or page.notoc != nil -%} {%- continue -%} diff --git a/js/search.js b/js/search.js index 2e5872b04f..b6dddb16cd 100644 --- a/js/search.js +++ b/js/search.js @@ -191,4 +191,9 @@ function queryString() return vars; } -$(document).ready(bindSearch); +let pages = [] + +ready(() => { + getJSON( "/js/metadata.json", data => pages = data); + bindSearch() +}) diff --git a/js/theme-switcher.js b/js/theme-switcher.js index 77327ccabf..bce65e16cd 100644 --- a/js/theme-switcher.js +++ b/js/theme-switcher.js @@ -2,6 +2,14 @@ const _ = s => document.querySelector(s); const ready = f => document.readyState !== 'loading' ? f() : document.addEventListener('DOMContentLoaded', f) +function getJSON(url, fn) { + const xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'json'; + xhr.onload = () => xhr.status === 200 ? fn(xhr.response) : null; + xhr.send(); +} + const darkMode = window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches const selectedTheme = window.localStorage ? localStorage.getItem("theme") : null; diff --git a/js/toc.js b/js/toc.js deleted file mode 100644 index e2738475b7..0000000000 --- a/js/toc.js +++ /dev/null @@ -1,5 +0,0 @@ ---- -layout: null ---- -var docstoc = {{ site.data.toc | jsonify }} -renderNav(docstoc); diff --git a/js/toc.json b/js/toc.json new file mode 100644 index 0000000000..8d338bf0d7 --- /dev/null +++ b/js/toc.json @@ -0,0 +1,4 @@ +--- +layout: null +--- +{{ site.data.toc | jsonify }}