diff --git a/book.js b/book.js index 02b1908dd..178f1e902 100644 --- a/book.js +++ b/book.js @@ -463,17 +463,6 @@ function playground_text(playground, hidden = true) { try { localStorage.setItem('mdbook-sidebar', 'visible'); } catch (e) { } } - - var sidebarAnchorToggles = document.querySelectorAll('#sidebar a.toggle'); - - function toggleSection(ev) { - ev.currentTarget.parentElement.classList.toggle('expanded'); - } - - Array.from(sidebarAnchorToggles).forEach(function (el) { - el.addEventListener('click', toggleSection); - }); - function hideSidebar() { body.classList.remove('sidebar-visible') body.classList.add('sidebar-hidden'); diff --git a/toc.js b/toc.js index 1246799ab..f1a0dd8a4 100644 --- a/toc.js +++ b/toc.js @@ -3,52 +3,68 @@ // This is a script, and not included directly in the page, to control the total size of the book. // The TOC contains an entry for each page, so if each page includes a copy of the TOC, // the total size of the page becomes O(n**2). -var sidebarScrollbox = document.querySelector("#sidebar .sidebar-scrollbox"); -sidebarScrollbox.innerHTML = '
  1. Introduction
  2. Fault Proof Program Development
    1. Environment
      1. Supported Targets
    2. Prologue
    3. Execution
    4. Epilogue
  3. Kona SDK
    1. FPVM Backend
    2. Custom Backend
    3. kona-executor Extensions
    4. kona-derive Pipeline
      1. Custom Providers
      2. Stage Swapping
      3. Signaling
  4. Glossary
  5. Contributing
'; -(function() { - let current_page = document.location.href.toString(); - if (current_page.endsWith("/")) { - current_page += "index.html"; +class MDBookSidebarScrollbox extends HTMLElement { + constructor() { + super(); } - var links = sidebarScrollbox.querySelectorAll("a"); - var l = links.length; - for (var i = 0; i < l; ++i) { - var link = links[i]; - var href = link.getAttribute("href"); - if (href && !href.startsWith("#") && !/^(?:[a-z+]+:)?\/\//.test(href)) { - link.href = path_to_root + href; + connectedCallback() { + this.innerHTML = '
  1. Introduction
  2. Fault Proof Program Development
    1. Environment
      1. Supported Targets
    2. Prologue
    3. Execution
    4. Epilogue
  3. Kona SDK
    1. FPVM Backend
    2. Custom Backend
    3. kona-executor Extensions
    4. kona-derive Pipeline
      1. Custom Providers
      2. Stage Swapping
      3. Signaling
  4. Glossary
  5. Contributing
'; + // Set the current, active page, and reveal it if it's hidden + let current_page = document.location.href.toString(); + if (current_page.endsWith("/")) { + current_page += "index.html"; } - // The "index" page is supposed to alias the first chapter in the book. - if (link.href === current_page || (i === 0 && path_to_root === "" && current_page.endsWith("/index.html"))) { - link.classList.add("active"); - var parent = link.parentElement; - while (parent) { - if (parent.tagName === "LI" && parent.previousElementSibling) { - if (parent.previousElementSibling.classList.contains("chapter-item")) { - parent.previousElementSibling.classList.add("expanded"); + var links = Array.prototype.slice.call(this.querySelectorAll("a")); + var l = links.length; + for (var i = 0; i < l; ++i) { + var link = links[i]; + var href = link.getAttribute("href"); + if (href && !href.startsWith("#") && !/^(?:[a-z+]+:)?\/\//.test(href)) { + link.href = path_to_root + href; + } + // The "index" page is supposed to alias the first chapter in the book. + if (link.href === current_page || (i === 0 && path_to_root === "" && current_page.endsWith("/index.html"))) { + link.classList.add("active"); + var parent = link.parentElement; + if (parent && parent.classList.contains("chapter-item")) { + parent.classList.add("expanded"); + } + while (parent) { + if (parent.tagName === "LI" && parent.previousElementSibling) { + if (parent.previousElementSibling.classList.contains("chapter-item")) { + parent.previousElementSibling.classList.add("expanded"); + } } + parent = parent.parentElement; } - parent = parent.parentElement; } } - } -})(); - -// Track and set sidebar scroll position -sidebarScrollbox.addEventListener('click', function(e) { - if (e.target.tagName === 'A') { - sessionStorage.setItem('sidebar-scroll', sidebarScrollbox.scrollTop); - } -}, { passive: true }); -var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll'); -sessionStorage.removeItem('sidebar-scroll'); -if (sidebarScrollTop) { - // preserve sidebar scroll position when navigating via links within sidebar - sidebarScrollbox.scrollTop = sidebarScrollTop; -} else { - // scroll sidebar to current active section when navigating via "next/previous chapter" buttons - var activeSection = document.querySelector('#sidebar .active'); - if (activeSection) { - activeSection.scrollIntoView({ block: 'center' }); + // Track and set sidebar scroll position + this.addEventListener('click', function(e) { + if (e.target.tagName === 'A') { + sessionStorage.setItem('sidebar-scroll', this.scrollTop); + } + }, { passive: true }); + var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll'); + sessionStorage.removeItem('sidebar-scroll'); + if (sidebarScrollTop) { + // preserve sidebar scroll position when navigating via links within sidebar + this.scrollTop = sidebarScrollTop; + } else { + // scroll sidebar to current active section when navigating via "next/previous chapter" buttons + var activeSection = document.querySelector('#sidebar .active'); + if (activeSection) { + activeSection.scrollIntoView({ block: 'center' }); + } + } + // Toggle buttons + var sidebarAnchorToggles = document.querySelectorAll('#sidebar a.toggle'); + function toggleSection(ev) { + ev.currentTarget.parentElement.classList.toggle('expanded'); + } + Array.from(sidebarAnchorToggles).forEach(function (el) { + el.addEventListener('click', toggleSection); + }); } } +window.customElements.define("mdbook-sidebar-scrollbox", MDBookSidebarScrollbox);