mirror of
https://github.com/sunface/rust-by-practice.git
synced 2025-06-23 04:29:41 +00:00
71 lines
16 KiB
JavaScript
71 lines
16 KiB
JavaScript
// Populate the sidebar
|
|
//
|
|
// 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).
|
|
class MDBookSidebarScrollbox extends HTMLElement {
|
|
constructor() {
|
|
super();
|
|
}
|
|
connectedCallback() {
|
|
this.innerHTML = '<ol class="chapter"><li class="chapter-item expanded "><a href="why-exercise.html"><strong aria-hidden="true">1.</strong> Rust By Practice</a></li><li class="chapter-item expanded "><a href="elegant-code-base.html"><strong aria-hidden="true">2.</strong> Small projects with Elegant code</a></li><li class="chapter-item expanded "><a href="variables.html"><strong aria-hidden="true">3.</strong> Variables</a></li><li class="chapter-item expanded "><a href="basic-types/intro.html"><strong aria-hidden="true">4.</strong> Basic Types</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="basic-types/numbers.html"><strong aria-hidden="true">4.1.</strong> Numbers</a></li><li class="chapter-item "><a href="basic-types/char-bool-unit.html"><strong aria-hidden="true">4.2.</strong> Char, Bool and Unit</a></li><li class="chapter-item "><a href="basic-types/statements-expressions.html"><strong aria-hidden="true">4.3.</strong> Statements and Expressions</a></li><li class="chapter-item "><a href="basic-types/functions.html"><strong aria-hidden="true">4.4.</strong> Functions</a></li></ol></li><li class="chapter-item expanded "><a href="ownership/intro.html"><strong aria-hidden="true">5.</strong> Ownership and Borrowing</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="ownership/ownership.html"><strong aria-hidden="true">5.1.</strong> Ownership</a></li><li class="chapter-item "><a href="ownership/borrowing.html"><strong aria-hidden="true">5.2.</strong> Reference and Borrowing</a></li></ol></li><li class="chapter-item expanded "><a href="compound-types/intro.html"><strong aria-hidden="true">6.</strong> Compound Types</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="compound-types/string.html"><strong aria-hidden="true">6.1.</strong> string</a></li><li class="chapter-item "><a href="compound-types/array.html"><strong aria-hidden="true">6.2.</strong> Array</a></li><li class="chapter-item "><a href="compound-types/slice.html"><strong aria-hidden="true">6.3.</strong> Slice</a></li><li class="chapter-item "><a href="compound-types/tuple.html"><strong aria-hidden="true">6.4.</strong> Tuple</a></li><li class="chapter-item "><a href="compound-types/struct.html"><strong aria-hidden="true">6.5.</strong> Struct</a></li><li class="chapter-item "><a href="compound-types/enum.html"><strong aria-hidden="true">6.6.</strong> Enum</a></li></ol></li><li class="chapter-item expanded "><a href="flow-control.html"><strong aria-hidden="true">7.</strong> Flow Control</a></li><li class="chapter-item expanded "><a href="pattern-match/intro.html"><strong aria-hidden="true">8.</strong> Pattern Match</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="pattern-match/match-iflet.html"><strong aria-hidden="true">8.1.</strong> match, matches! and if let</a></li><li class="chapter-item "><a href="pattern-match/patterns.html"><strong aria-hidden="true">8.2.</strong> Patterns</a></li></ol></li><li class="chapter-item expanded "><a href="method.html"><strong aria-hidden="true">9.</strong> Method & Associated function</a></li><li class="chapter-item expanded "><a href="generics-traits/intro.html"><strong aria-hidden="true">10.</strong> Generics and Traits</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="generics-traits/generics.html"><strong aria-hidden="true">10.1.</strong> Generics</a></li><li class="chapter-item "><a href="generics-traits/const-generics.html"><strong aria-hidden="true">10.2.</strong> Const Generics</a></li><li class="chapter-item "><a href="generics-traits/traits.html"><strong aria-hidden="true">10.3.</strong> Traits</a></li><li class="chapter-item "><a href="generics-traits/trait-object.html"><strong aria-hidden="true">10.4.</strong> Trait Object</a></li><li class="chapter-item "><a href="generics-traits/advanced-traits.html"><strong aria-hidden="true">10.5.</strong> Advanced Traits</a></li></ol></li><li class="chapter-item expanded "><a href="collections/intro.html"><strong aria-hidden="true">11.</strong> Collection Types</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="collections/string.html"><strong aria-hidden="true">11.1.</strong> String</a></li><li class="chapter-item "><a href="collections/vector.html"><strong aria-hidden="true">11.2.</strong> Vector</a></li><li class="chapter-item "><a href="collections/hashmap.html"><strong aria-hidden="true">11.3.</strong> HashMap</a></li></ol></li><li class="chapter-item expanded "><a href="type-conversions/intro.html"><strong aria-hidden="true">12.</strong> Type Conversion</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="type-conversions/as.html"><strong aria-hidden="true">12.1.</strong> as</a></li><li class="chapter-item "><a href="type-conversions/from-into.html"><strong aria-hidden="true">12.2.</strong> From/Into</a></li><li class="chapter-item "><a href="type-conversions/others.html"><strong aria-hidden="true">12.3.</strong> Others</a></li></ol></li><li class="chapter-item expanded "><a href="result-panic/intro.html"><strong aria-hidden="true">13.</strong> Result and panic</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="result-panic/panic.html"><strong aria-hidden="true">13.1.</strong> panic!</a></li><li class="chapter-item "><a href="result-panic/result.html"><strong aria-hidden="true">13.2.</strong> Result and ?</a></li></ol></li><li class="chapter-item expanded "><a href="crate-module/intro.html"><strong aria-hidden="true">14.</strong> Crate and Module</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="crate-module/crate.html"><strong aria-hidden="true">14.1.</strong> Package and Crate</a></li><li class="chapter-item "><a href="crate-module/module.html"><strong aria-hidden="true">14.2.</strong> Module</a></li><li class="chapter-item "><a href="crate-module/use-pub.html"><strong aria-hidden="true">14.3.</strong> Advanced use and pub</a></li></ol></li><li class="chapter-item expanded "><a href="comments-docs.html"><strong aria-hidden="true">15.</strong> Comments and Docs</a></li><li class="chapter-item expanded "><a href="formatted-output/intro.html"><strong aria-hidden="true">16.</strong> Formatted output</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="formatted-output/println.html"><strong aria-hidden="true">16.1.</strong> println! and format!</a></li><li class="chapter-item "><a href="formatted-output/debug-display.html"><strong aria-hidden="true">16.2.</strong> Debug and Display</a></li><li class="chapter-item "><a href="formatted-output/formatting.html"><strong aria-hidden="true">16.3.</strong> formating</a></li></ol></li><li class="chapter-item expanded "><a href="lifetime/intro.html"><strong aria-hidden="true">17.</strong> Lifetime</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="lifetime/basic.html"><strong aria-hidden="true">17.1.</strong> basic</a></li><li class="chapter-item "><a href="lifetime/static.html"><strong aria-hidden="true">17.2.</strong> &'static and T: 'static</a></li><li class="chapter-item "><a href="lifetime/advance.html"><strong aria-hidden="true">17.3.</strong> advanced</a></li></ol></li><li class="chapter-item expanded "><a href="functional-programing/intro.html"><strong aria-hidden="true">18.</strong> Functional programing</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="functional-programing/closure.html"><strong aria-hidden="true">18.1.</strong> Closure</a></li><li class="chapter-item "><a href="functional-programing/iterator.html"><strong aria-hidden="true">18.2.</strong> Iterator</a></li></ol></li><li class="chapter-item expanded "><a href="newtype-sized.html"><strong aria-hidden="true">19.</strong> newtype and DST</a></li><li class="chapter-item expanded "><a href="smart-pointers/intro.html"><strong aria-hidden="true">20.</strong> Smart pointers TODO</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="smart-pointers/box.html"><strong aria-hidden="true">20.1.</strong> Box</a></li><li class="chapter-item "><a href="smart-pointers/deref.html"><strong aria-hidden="true">20.2.</strong> Deref</a></li><li class="chapter-item "><a href="smart-pointers/drop.html"><strong aria-hidden="true">20.3.</strong> Drop</a></li><li class="chapter-item "><a href="smart-pointers/rc-arc.html"><strong aria-hidden="true">20.4.</strong> Rc and Arc</a></li><li class="chapter-item "><a href="smart-pointers/cell-refcell.html"><strong aria-hidden="true">20.5.</strong> Cell and RefCell</a></li></ol></li><li class="chapter-item expanded "><a href="weak.html"><strong aria-hidden="true">21.</strong> Weak and Circle reference TODO</a></li><li class="chapter-item expanded "><a href="self-referential.html"><strong aria-hidden="true">22.</strong> Self referential TODO</a></li><li class="chapter-item expanded "><a href="threads/intro.html"><strong aria-hidden="true">23.</strong> Threads TODO</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="threads/basic-using.html"><strong aria-hidden="true">23.1.</strong> Basic using</a></li><li class="chapter-item "><a href="threads/message-passing.html"><strong aria-hidden="true">23.2.</strong> Message passing</a></li><li class="chapter-item "><a href="threads/sync.html"><strong aria-hidden="true">23.3.</strong> Sync</a></li><li class="chapter-item "><a href="threads/atomic.html"><strong aria-hidden="true">23.4.</strong> Atomic</a></li><li class="chapter-item "><a href="threads/send-sync.html"><strong aria-hidden="true">23.5.</strong> Send and Sync</a></li></ol></li><li class="chapter-item expanded "><a href="global-variables.html"><strong aria-hidden="true">24.</strong> Global variables TODO</a></li><li class="chapter-item expanded "><a href="errors.html"><strong aria-hidden="true">25.</strong> Errors TODO</a></li><li class="chapter-item expanded "><a href="unsafe/intro.html"><strong aria-hidden="true">26.</strong> Unsafe doing</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="unsafe/inline-asm.html"><strong aria-hidden="true">26.1.</strong> Inline assembly</a></li></ol></li><li class="chapter-item expanded "><a href="macro.html"><strong aria-hidden="true">27.</strong> Macro TODO</a></li><li class="chapter-item expanded "><a href="tests/intro.html"><strong aria-hidden="true">28.</strong> Tests TODO</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="tests/write-tests.html"><strong aria-hidden="true">28.1.</strong> Write Tests</a></li><li class="chapter-item "><a href="tests/benchmark.html"><strong aria-hidden="true">28.2.</strong> Benchmark</a></li><li class="chapter-item "><a href="tests/unit-integration.html"><strong aria-hidden="true">28.3.</strong> Unit and Integration</a></li><li class="chapter-item "><a href="tests/assertions.html"><strong aria-hidden="true">28.4.</strong> Assertions</a></li></ol></li><li class="chapter-item expanded "><a href="async/intro.html"><strong aria-hidden="true">29.</strong> Async/Await TODO</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="async/async-await.html"><strong aria-hidden="true">29.1.</strong> async and await!</a></li><li class="chapter-item "><a href="async/future.html"><strong aria-hidden="true">29.2.</strong> Future</a></li><li class="chapter-item "><a href="async/pin-unpin.html"><strong aria-hidden="true">29.3.</strong> Pin and Unpin</a></li><li class="chapter-item "><a href="async/stream.html"><strong aria-hidden="true">29.4.</strong> Stream</a></li></ol></li><li class="chapter-item expanded "><a href="std/intro.html"><strong aria-hidden="true">30.</strong> Standard Library TODO</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="std/String.html"><strong aria-hidden="true">30.1.</strong> String</a></li></ol></li><li class="chapter-item expanded "><a href="fight-compiler/intro.html"><strong aria-hidden="true">31.</strong> Fighting with Compiler</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="fight-compiler/borrowing.html"><strong aria-hidden="true">31.1.</strong> Borrowing</a></li></ol></li></ol>';
|
|
// Set the current, active page, and reveal it if it's hidden
|
|
let current_page = document.location.href.toString().split("#")[0];
|
|
if (current_page.endsWith("/")) {
|
|
current_page += "index.html";
|
|
}
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
// 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);
|