mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2024-11-09 08:51:18 +08:00
deploy: 17edbafeeb
This commit is contained in:
commit
ad6620d3df
4
FontAwesome/css/font-awesome.css
vendored
Normal file
4
FontAwesome/css/font-awesome.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
FontAwesome/fonts/FontAwesome.ttf
Normal file
BIN
FontAwesome/fonts/FontAwesome.ttf
Normal file
Binary file not shown.
BIN
FontAwesome/fonts/fontawesome-webfont.eot
Normal file
BIN
FontAwesome/fonts/fontawesome-webfont.eot
Normal file
Binary file not shown.
2671
FontAwesome/fonts/fontawesome-webfont.svg
Normal file
2671
FontAwesome/fonts/fontawesome-webfont.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 434 KiB |
BIN
FontAwesome/fonts/fontawesome-webfont.ttf
Normal file
BIN
FontAwesome/fonts/fontawesome-webfont.ttf
Normal file
Binary file not shown.
BIN
FontAwesome/fonts/fontawesome-webfont.woff
Normal file
BIN
FontAwesome/fonts/fontawesome-webfont.woff
Normal file
Binary file not shown.
BIN
FontAwesome/fonts/fontawesome-webfont.woff2
Normal file
BIN
FontAwesome/fonts/fontawesome-webfont.woff2
Normal file
Binary file not shown.
46778
Rust 程序设计语言 简体中文版.pdf
Normal file
46778
Rust 程序设计语言 简体中文版.pdf
Normal file
File diff suppressed because one or more lines are too long
245
appendix-00.html
Normal file
245
appendix-00.html
Normal file
File diff suppressed because one or more lines are too long
330
appendix-01-keywords.html
Normal file
330
appendix-01-keywords.html
Normal file
File diff suppressed because one or more lines are too long
412
appendix-02-operators.html
Normal file
412
appendix-02-operators.html
Normal file
File diff suppressed because one or more lines are too long
290
appendix-03-derivable-traits.html
Normal file
290
appendix-03-derivable-traits.html
Normal file
File diff suppressed because one or more lines are too long
331
appendix-04-useful-development-tools.html
Normal file
331
appendix-04-useful-development-tools.html
Normal file
File diff suppressed because one or more lines are too long
259
appendix-05-editions.html
Normal file
259
appendix-05-editions.html
Normal file
File diff suppressed because one or more lines are too long
269
appendix-06-translation.html
Normal file
269
appendix-06-translation.html
Normal file
File diff suppressed because one or more lines are too long
309
appendix-07-nightly-rust.html
Normal file
309
appendix-07-nightly-rust.html
Normal file
File diff suppressed because one or more lines are too long
78
ayu-highlight.css
Normal file
78
ayu-highlight.css
Normal file
@ -0,0 +1,78 @@
|
||||
/*
|
||||
Based off of the Ayu theme
|
||||
Original by Dempfi (https://github.com/dempfi/ayu)
|
||||
*/
|
||||
|
||||
.hljs {
|
||||
display: block;
|
||||
overflow-x: auto;
|
||||
background: #191f26;
|
||||
color: #e6e1cf;
|
||||
}
|
||||
|
||||
.hljs-comment,
|
||||
.hljs-quote {
|
||||
color: #5c6773;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.hljs-variable,
|
||||
.hljs-template-variable,
|
||||
.hljs-attribute,
|
||||
.hljs-attr,
|
||||
.hljs-regexp,
|
||||
.hljs-link,
|
||||
.hljs-selector-id,
|
||||
.hljs-selector-class {
|
||||
color: #ff7733;
|
||||
}
|
||||
|
||||
.hljs-number,
|
||||
.hljs-meta,
|
||||
.hljs-builtin-name,
|
||||
.hljs-literal,
|
||||
.hljs-type,
|
||||
.hljs-params {
|
||||
color: #ffee99;
|
||||
}
|
||||
|
||||
.hljs-string,
|
||||
.hljs-bullet {
|
||||
color: #b8cc52;
|
||||
}
|
||||
|
||||
.hljs-title,
|
||||
.hljs-built_in,
|
||||
.hljs-section {
|
||||
color: #ffb454;
|
||||
}
|
||||
|
||||
.hljs-keyword,
|
||||
.hljs-selector-tag,
|
||||
.hljs-symbol {
|
||||
color: #ff7733;
|
||||
}
|
||||
|
||||
.hljs-name {
|
||||
color: #36a3d9;
|
||||
}
|
||||
|
||||
.hljs-tag {
|
||||
color: #00568d;
|
||||
}
|
||||
|
||||
.hljs-emphasis {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.hljs-strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.hljs-addition {
|
||||
color: #91b362;
|
||||
}
|
||||
|
||||
.hljs-deletion {
|
||||
color: #d96c75;
|
||||
}
|
697
book.js
Normal file
697
book.js
Normal file
@ -0,0 +1,697 @@
|
||||
"use strict";
|
||||
|
||||
// Fix back button cache problem
|
||||
window.onunload = function () { };
|
||||
|
||||
// Global variable, shared between modules
|
||||
function playground_text(playground, hidden = true) {
|
||||
let code_block = playground.querySelector("code");
|
||||
|
||||
if (window.ace && code_block.classList.contains("editable")) {
|
||||
let editor = window.ace.edit(code_block);
|
||||
return editor.getValue();
|
||||
} else if (hidden) {
|
||||
return code_block.textContent;
|
||||
} else {
|
||||
return code_block.innerText;
|
||||
}
|
||||
}
|
||||
|
||||
(function codeSnippets() {
|
||||
function fetch_with_timeout(url, options, timeout = 6000) {
|
||||
return Promise.race([
|
||||
fetch(url, options),
|
||||
new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout))
|
||||
]);
|
||||
}
|
||||
|
||||
var playgrounds = Array.from(document.querySelectorAll(".playground"));
|
||||
if (playgrounds.length > 0) {
|
||||
fetch_with_timeout("https://play.rust-lang.org/meta/crates", {
|
||||
headers: {
|
||||
'Content-Type': "application/json",
|
||||
},
|
||||
method: 'POST',
|
||||
mode: 'cors',
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(response => {
|
||||
// get list of crates available in the rust playground
|
||||
let playground_crates = response.crates.map(item => item["id"]);
|
||||
playgrounds.forEach(block => handle_crate_list_update(block, playground_crates));
|
||||
});
|
||||
}
|
||||
|
||||
function handle_crate_list_update(playground_block, playground_crates) {
|
||||
// update the play buttons after receiving the response
|
||||
update_play_button(playground_block, playground_crates);
|
||||
|
||||
// and install on change listener to dynamically update ACE editors
|
||||
if (window.ace) {
|
||||
let code_block = playground_block.querySelector("code");
|
||||
if (code_block.classList.contains("editable")) {
|
||||
let editor = window.ace.edit(code_block);
|
||||
editor.addEventListener("change", function (e) {
|
||||
update_play_button(playground_block, playground_crates);
|
||||
});
|
||||
// add Ctrl-Enter command to execute rust code
|
||||
editor.commands.addCommand({
|
||||
name: "run",
|
||||
bindKey: {
|
||||
win: "Ctrl-Enter",
|
||||
mac: "Ctrl-Enter"
|
||||
},
|
||||
exec: _editor => run_rust_code(playground_block)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// updates the visibility of play button based on `no_run` class and
|
||||
// used crates vs ones available on https://play.rust-lang.org
|
||||
function update_play_button(pre_block, playground_crates) {
|
||||
var play_button = pre_block.querySelector(".play-button");
|
||||
|
||||
// skip if code is `no_run`
|
||||
if (pre_block.querySelector('code').classList.contains("no_run")) {
|
||||
play_button.classList.add("hidden");
|
||||
return;
|
||||
}
|
||||
|
||||
// get list of `extern crate`'s from snippet
|
||||
var txt = playground_text(pre_block);
|
||||
var re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g;
|
||||
var snippet_crates = [];
|
||||
var item;
|
||||
while (item = re.exec(txt)) {
|
||||
snippet_crates.push(item[1]);
|
||||
}
|
||||
|
||||
// check if all used crates are available on play.rust-lang.org
|
||||
var all_available = snippet_crates.every(function (elem) {
|
||||
return playground_crates.indexOf(elem) > -1;
|
||||
});
|
||||
|
||||
if (all_available) {
|
||||
play_button.classList.remove("hidden");
|
||||
} else {
|
||||
play_button.classList.add("hidden");
|
||||
}
|
||||
}
|
||||
|
||||
function run_rust_code(code_block) {
|
||||
var result_block = code_block.querySelector(".result");
|
||||
if (!result_block) {
|
||||
result_block = document.createElement('code');
|
||||
result_block.className = 'result hljs language-bash';
|
||||
|
||||
code_block.append(result_block);
|
||||
}
|
||||
|
||||
let text = playground_text(code_block);
|
||||
let classes = code_block.querySelector('code').classList;
|
||||
let edition = "2015";
|
||||
if(classes.contains("edition2018")) {
|
||||
edition = "2018";
|
||||
} else if(classes.contains("edition2021")) {
|
||||
edition = "2021";
|
||||
}
|
||||
var params = {
|
||||
version: "stable",
|
||||
optimize: "0",
|
||||
code: text,
|
||||
edition: edition
|
||||
};
|
||||
|
||||
if (text.indexOf("#![feature") !== -1) {
|
||||
params.version = "nightly";
|
||||
}
|
||||
|
||||
result_block.innerText = "Running...";
|
||||
|
||||
fetch_with_timeout("https://play.rust-lang.org/evaluate.json", {
|
||||
headers: {
|
||||
'Content-Type': "application/json",
|
||||
},
|
||||
method: 'POST',
|
||||
mode: 'cors',
|
||||
body: JSON.stringify(params)
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(response => {
|
||||
if (response.result.trim() === '') {
|
||||
result_block.innerText = "No output";
|
||||
result_block.classList.add("result-no-output");
|
||||
} else {
|
||||
result_block.innerText = response.result;
|
||||
result_block.classList.remove("result-no-output");
|
||||
}
|
||||
})
|
||||
.catch(error => result_block.innerText = "Playground Communication: " + error.message);
|
||||
}
|
||||
|
||||
// Syntax highlighting Configuration
|
||||
hljs.configure({
|
||||
tabReplace: ' ', // 4 spaces
|
||||
languages: [], // Languages used for auto-detection
|
||||
});
|
||||
|
||||
let code_nodes = Array
|
||||
.from(document.querySelectorAll('code'))
|
||||
// Don't highlight `inline code` blocks in headers.
|
||||
.filter(function (node) {return !node.parentElement.classList.contains("header"); });
|
||||
|
||||
if (window.ace) {
|
||||
// language-rust class needs to be removed for editable
|
||||
// blocks or highlightjs will capture events
|
||||
code_nodes
|
||||
.filter(function (node) {return node.classList.contains("editable"); })
|
||||
.forEach(function (block) { block.classList.remove('language-rust'); });
|
||||
|
||||
code_nodes
|
||||
.filter(function (node) {return !node.classList.contains("editable"); })
|
||||
.forEach(function (block) { hljs.highlightBlock(block); });
|
||||
} else {
|
||||
code_nodes.forEach(function (block) { hljs.highlightBlock(block); });
|
||||
}
|
||||
|
||||
// Adding the hljs class gives code blocks the color css
|
||||
// even if highlighting doesn't apply
|
||||
code_nodes.forEach(function (block) { block.classList.add('hljs'); });
|
||||
|
||||
Array.from(document.querySelectorAll("code.hljs")).forEach(function (block) {
|
||||
|
||||
var lines = Array.from(block.querySelectorAll('.boring'));
|
||||
// If no lines were hidden, return
|
||||
if (!lines.length) { return; }
|
||||
block.classList.add("hide-boring");
|
||||
|
||||
var buttons = document.createElement('div');
|
||||
buttons.className = 'buttons';
|
||||
buttons.innerHTML = "<button class=\"fa fa-eye\" title=\"Show hidden lines\" aria-label=\"Show hidden lines\"></button>";
|
||||
|
||||
// add expand button
|
||||
var pre_block = block.parentNode;
|
||||
pre_block.insertBefore(buttons, pre_block.firstChild);
|
||||
|
||||
pre_block.querySelector('.buttons').addEventListener('click', function (e) {
|
||||
if (e.target.classList.contains('fa-eye')) {
|
||||
e.target.classList.remove('fa-eye');
|
||||
e.target.classList.add('fa-eye-slash');
|
||||
e.target.title = 'Hide lines';
|
||||
e.target.setAttribute('aria-label', e.target.title);
|
||||
|
||||
block.classList.remove('hide-boring');
|
||||
} else if (e.target.classList.contains('fa-eye-slash')) {
|
||||
e.target.classList.remove('fa-eye-slash');
|
||||
e.target.classList.add('fa-eye');
|
||||
e.target.title = 'Show hidden lines';
|
||||
e.target.setAttribute('aria-label', e.target.title);
|
||||
|
||||
block.classList.add('hide-boring');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if (window.playground_copyable) {
|
||||
Array.from(document.querySelectorAll('pre code')).forEach(function (block) {
|
||||
var pre_block = block.parentNode;
|
||||
if (!pre_block.classList.contains('playground')) {
|
||||
var buttons = pre_block.querySelector(".buttons");
|
||||
if (!buttons) {
|
||||
buttons = document.createElement('div');
|
||||
buttons.className = 'buttons';
|
||||
pre_block.insertBefore(buttons, pre_block.firstChild);
|
||||
}
|
||||
|
||||
var clipButton = document.createElement('button');
|
||||
clipButton.className = 'fa fa-copy clip-button';
|
||||
clipButton.title = 'Copy to clipboard';
|
||||
clipButton.setAttribute('aria-label', clipButton.title);
|
||||
clipButton.innerHTML = '<i class=\"tooltiptext\"></i>';
|
||||
|
||||
buttons.insertBefore(clipButton, buttons.firstChild);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Process playground code blocks
|
||||
Array.from(document.querySelectorAll(".playground")).forEach(function (pre_block) {
|
||||
// Add play button
|
||||
var buttons = pre_block.querySelector(".buttons");
|
||||
if (!buttons) {
|
||||
buttons = document.createElement('div');
|
||||
buttons.className = 'buttons';
|
||||
pre_block.insertBefore(buttons, pre_block.firstChild);
|
||||
}
|
||||
|
||||
var runCodeButton = document.createElement('button');
|
||||
runCodeButton.className = 'fa fa-play play-button';
|
||||
runCodeButton.hidden = true;
|
||||
runCodeButton.title = 'Run this code';
|
||||
runCodeButton.setAttribute('aria-label', runCodeButton.title);
|
||||
|
||||
buttons.insertBefore(runCodeButton, buttons.firstChild);
|
||||
runCodeButton.addEventListener('click', function (e) {
|
||||
run_rust_code(pre_block);
|
||||
});
|
||||
|
||||
if (window.playground_copyable) {
|
||||
var copyCodeClipboardButton = document.createElement('button');
|
||||
copyCodeClipboardButton.className = 'fa fa-copy clip-button';
|
||||
copyCodeClipboardButton.innerHTML = '<i class="tooltiptext"></i>';
|
||||
copyCodeClipboardButton.title = 'Copy to clipboard';
|
||||
copyCodeClipboardButton.setAttribute('aria-label', copyCodeClipboardButton.title);
|
||||
|
||||
buttons.insertBefore(copyCodeClipboardButton, buttons.firstChild);
|
||||
}
|
||||
|
||||
let code_block = pre_block.querySelector("code");
|
||||
if (window.ace && code_block.classList.contains("editable")) {
|
||||
var undoChangesButton = document.createElement('button');
|
||||
undoChangesButton.className = 'fa fa-history reset-button';
|
||||
undoChangesButton.title = 'Undo changes';
|
||||
undoChangesButton.setAttribute('aria-label', undoChangesButton.title);
|
||||
|
||||
buttons.insertBefore(undoChangesButton, buttons.firstChild);
|
||||
|
||||
undoChangesButton.addEventListener('click', function () {
|
||||
let editor = window.ace.edit(code_block);
|
||||
editor.setValue(editor.originalCode);
|
||||
editor.clearSelection();
|
||||
});
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
(function themes() {
|
||||
var html = document.querySelector('html');
|
||||
var themeToggleButton = document.getElementById('theme-toggle');
|
||||
var themePopup = document.getElementById('theme-list');
|
||||
var themeColorMetaTag = document.querySelector('meta[name="theme-color"]');
|
||||
var stylesheets = {
|
||||
ayuHighlight: document.querySelector("[href$='ayu-highlight.css']"),
|
||||
tomorrowNight: document.querySelector("[href$='tomorrow-night.css']"),
|
||||
highlight: document.querySelector("[href$='highlight.css']"),
|
||||
};
|
||||
|
||||
function showThemes() {
|
||||
themePopup.style.display = 'block';
|
||||
themeToggleButton.setAttribute('aria-expanded', true);
|
||||
themePopup.querySelector("button#" + get_theme()).focus();
|
||||
}
|
||||
|
||||
function updateThemeSelected() {
|
||||
themePopup.querySelectorAll('.theme-selected').forEach(function (el) {
|
||||
el.classList.remove('theme-selected');
|
||||
});
|
||||
themePopup.querySelector("button#" + get_theme()).classList.add('theme-selected');
|
||||
}
|
||||
|
||||
function hideThemes() {
|
||||
themePopup.style.display = 'none';
|
||||
themeToggleButton.setAttribute('aria-expanded', false);
|
||||
themeToggleButton.focus();
|
||||
}
|
||||
|
||||
function get_theme() {
|
||||
var theme;
|
||||
try { theme = localStorage.getItem('mdbook-theme'); } catch (e) { }
|
||||
if (theme === null || theme === undefined) {
|
||||
return default_theme;
|
||||
} else {
|
||||
return theme;
|
||||
}
|
||||
}
|
||||
|
||||
function set_theme(theme, store = true) {
|
||||
let ace_theme;
|
||||
|
||||
if (theme == 'coal' || theme == 'navy') {
|
||||
stylesheets.ayuHighlight.disabled = true;
|
||||
stylesheets.tomorrowNight.disabled = false;
|
||||
stylesheets.highlight.disabled = true;
|
||||
|
||||
ace_theme = "ace/theme/tomorrow_night";
|
||||
} else if (theme == 'ayu') {
|
||||
stylesheets.ayuHighlight.disabled = false;
|
||||
stylesheets.tomorrowNight.disabled = true;
|
||||
stylesheets.highlight.disabled = true;
|
||||
ace_theme = "ace/theme/tomorrow_night";
|
||||
} else {
|
||||
stylesheets.ayuHighlight.disabled = true;
|
||||
stylesheets.tomorrowNight.disabled = true;
|
||||
stylesheets.highlight.disabled = false;
|
||||
ace_theme = "ace/theme/dawn";
|
||||
}
|
||||
|
||||
setTimeout(function () {
|
||||
themeColorMetaTag.content = getComputedStyle(document.documentElement).backgroundColor;
|
||||
}, 1);
|
||||
|
||||
if (window.ace && window.editors) {
|
||||
window.editors.forEach(function (editor) {
|
||||
editor.setTheme(ace_theme);
|
||||
});
|
||||
}
|
||||
|
||||
var previousTheme = get_theme();
|
||||
|
||||
if (store) {
|
||||
try { localStorage.setItem('mdbook-theme', theme); } catch (e) { }
|
||||
}
|
||||
|
||||
html.classList.remove(previousTheme);
|
||||
html.classList.add(theme);
|
||||
updateThemeSelected();
|
||||
}
|
||||
|
||||
// Set theme
|
||||
var theme = get_theme();
|
||||
|
||||
set_theme(theme, false);
|
||||
|
||||
themeToggleButton.addEventListener('click', function () {
|
||||
if (themePopup.style.display === 'block') {
|
||||
hideThemes();
|
||||
} else {
|
||||
showThemes();
|
||||
}
|
||||
});
|
||||
|
||||
themePopup.addEventListener('click', function (e) {
|
||||
var theme;
|
||||
if (e.target.className === "theme") {
|
||||
theme = e.target.id;
|
||||
} else if (e.target.parentElement.className === "theme") {
|
||||
theme = e.target.parentElement.id;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
set_theme(theme);
|
||||
});
|
||||
|
||||
themePopup.addEventListener('focusout', function(e) {
|
||||
// e.relatedTarget is null in Safari and Firefox on macOS (see workaround below)
|
||||
if (!!e.relatedTarget && !themeToggleButton.contains(e.relatedTarget) && !themePopup.contains(e.relatedTarget)) {
|
||||
hideThemes();
|
||||
}
|
||||
});
|
||||
|
||||
// Should not be needed, but it works around an issue on macOS & iOS: https://github.com/rust-lang/mdBook/issues/628
|
||||
document.addEventListener('click', function(e) {
|
||||
if (themePopup.style.display === 'block' && !themeToggleButton.contains(e.target) && !themePopup.contains(e.target)) {
|
||||
hideThemes();
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('keydown', function (e) {
|
||||
if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { return; }
|
||||
if (!themePopup.contains(e.target)) { return; }
|
||||
|
||||
switch (e.key) {
|
||||
case 'Escape':
|
||||
e.preventDefault();
|
||||
hideThemes();
|
||||
break;
|
||||
case 'ArrowUp':
|
||||
e.preventDefault();
|
||||
var li = document.activeElement.parentElement;
|
||||
if (li && li.previousElementSibling) {
|
||||
li.previousElementSibling.querySelector('button').focus();
|
||||
}
|
||||
break;
|
||||
case 'ArrowDown':
|
||||
e.preventDefault();
|
||||
var li = document.activeElement.parentElement;
|
||||
if (li && li.nextElementSibling) {
|
||||
li.nextElementSibling.querySelector('button').focus();
|
||||
}
|
||||
break;
|
||||
case 'Home':
|
||||
e.preventDefault();
|
||||
themePopup.querySelector('li:first-child button').focus();
|
||||
break;
|
||||
case 'End':
|
||||
e.preventDefault();
|
||||
themePopup.querySelector('li:last-child button').focus();
|
||||
break;
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
(function sidebar() {
|
||||
var body = document.querySelector("body");
|
||||
var sidebar = document.getElementById("sidebar");
|
||||
var sidebarLinks = document.querySelectorAll('#sidebar a');
|
||||
var sidebarToggleButton = document.getElementById("sidebar-toggle");
|
||||
var sidebarResizeHandle = document.getElementById("sidebar-resize-handle");
|
||||
var firstContact = null;
|
||||
|
||||
function showSidebar() {
|
||||
body.classList.remove('sidebar-hidden')
|
||||
body.classList.add('sidebar-visible');
|
||||
Array.from(sidebarLinks).forEach(function (link) {
|
||||
link.setAttribute('tabIndex', 0);
|
||||
});
|
||||
sidebarToggleButton.setAttribute('aria-expanded', true);
|
||||
sidebar.setAttribute('aria-hidden', false);
|
||||
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');
|
||||
Array.from(sidebarLinks).forEach(function (link) {
|
||||
link.setAttribute('tabIndex', -1);
|
||||
});
|
||||
sidebarToggleButton.setAttribute('aria-expanded', false);
|
||||
sidebar.setAttribute('aria-hidden', true);
|
||||
try { localStorage.setItem('mdbook-sidebar', 'hidden'); } catch (e) { }
|
||||
}
|
||||
|
||||
// Toggle sidebar
|
||||
sidebarToggleButton.addEventListener('click', function sidebarToggle() {
|
||||
if (body.classList.contains("sidebar-hidden")) {
|
||||
var current_width = parseInt(
|
||||
document.documentElement.style.getPropertyValue('--sidebar-width'), 10);
|
||||
if (current_width < 150) {
|
||||
document.documentElement.style.setProperty('--sidebar-width', '150px');
|
||||
}
|
||||
showSidebar();
|
||||
} else if (body.classList.contains("sidebar-visible")) {
|
||||
hideSidebar();
|
||||
} else {
|
||||
if (getComputedStyle(sidebar)['transform'] === 'none') {
|
||||
hideSidebar();
|
||||
} else {
|
||||
showSidebar();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
sidebarResizeHandle.addEventListener('mousedown', initResize, false);
|
||||
|
||||
function initResize(e) {
|
||||
window.addEventListener('mousemove', resize, false);
|
||||
window.addEventListener('mouseup', stopResize, false);
|
||||
body.classList.add('sidebar-resizing');
|
||||
}
|
||||
function resize(e) {
|
||||
var pos = (e.clientX - sidebar.offsetLeft);
|
||||
if (pos < 20) {
|
||||
hideSidebar();
|
||||
} else {
|
||||
if (body.classList.contains("sidebar-hidden")) {
|
||||
showSidebar();
|
||||
}
|
||||
pos = Math.min(pos, window.innerWidth - 100);
|
||||
document.documentElement.style.setProperty('--sidebar-width', pos + 'px');
|
||||
}
|
||||
}
|
||||
//on mouseup remove windows functions mousemove & mouseup
|
||||
function stopResize(e) {
|
||||
body.classList.remove('sidebar-resizing');
|
||||
window.removeEventListener('mousemove', resize, false);
|
||||
window.removeEventListener('mouseup', stopResize, false);
|
||||
}
|
||||
|
||||
document.addEventListener('touchstart', function (e) {
|
||||
firstContact = {
|
||||
x: e.touches[0].clientX,
|
||||
time: Date.now()
|
||||
};
|
||||
}, { passive: true });
|
||||
|
||||
document.addEventListener('touchmove', function (e) {
|
||||
if (!firstContact)
|
||||
return;
|
||||
|
||||
var curX = e.touches[0].clientX;
|
||||
var xDiff = curX - firstContact.x,
|
||||
tDiff = Date.now() - firstContact.time;
|
||||
|
||||
if (tDiff < 250 && Math.abs(xDiff) >= 150) {
|
||||
if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300))
|
||||
showSidebar();
|
||||
else if (xDiff < 0 && curX < 300)
|
||||
hideSidebar();
|
||||
|
||||
firstContact = null;
|
||||
}
|
||||
}, { passive: true });
|
||||
})();
|
||||
|
||||
(function chapterNavigation() {
|
||||
document.addEventListener('keydown', function (e) {
|
||||
if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { return; }
|
||||
if (window.search && window.search.hasFocus()) { return; }
|
||||
var html = document.querySelector('html');
|
||||
|
||||
function next() {
|
||||
var nextButton = document.querySelector('.nav-chapters.next');
|
||||
if (nextButton) {
|
||||
window.location.href = nextButton.href;
|
||||
}
|
||||
}
|
||||
function prev() {
|
||||
var previousButton = document.querySelector('.nav-chapters.previous');
|
||||
if (previousButton) {
|
||||
window.location.href = previousButton.href;
|
||||
}
|
||||
}
|
||||
switch (e.key) {
|
||||
case 'ArrowRight':
|
||||
e.preventDefault();
|
||||
if (html.dir == 'rtl') {
|
||||
prev();
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
break;
|
||||
case 'ArrowLeft':
|
||||
e.preventDefault();
|
||||
if (html.dir == 'rtl') {
|
||||
next();
|
||||
} else {
|
||||
prev();
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
(function clipboard() {
|
||||
var clipButtons = document.querySelectorAll('.clip-button');
|
||||
|
||||
function hideTooltip(elem) {
|
||||
elem.firstChild.innerText = "";
|
||||
elem.className = 'fa fa-copy clip-button';
|
||||
}
|
||||
|
||||
function showTooltip(elem, msg) {
|
||||
elem.firstChild.innerText = msg;
|
||||
elem.className = 'fa fa-copy tooltipped';
|
||||
}
|
||||
|
||||
var clipboardSnippets = new ClipboardJS('.clip-button', {
|
||||
text: function (trigger) {
|
||||
hideTooltip(trigger);
|
||||
let playground = trigger.closest("pre");
|
||||
return playground_text(playground, false);
|
||||
}
|
||||
});
|
||||
|
||||
Array.from(clipButtons).forEach(function (clipButton) {
|
||||
clipButton.addEventListener('mouseout', function (e) {
|
||||
hideTooltip(e.currentTarget);
|
||||
});
|
||||
});
|
||||
|
||||
clipboardSnippets.on('success', function (e) {
|
||||
e.clearSelection();
|
||||
showTooltip(e.trigger, "Copied!");
|
||||
});
|
||||
|
||||
clipboardSnippets.on('error', function (e) {
|
||||
showTooltip(e.trigger, "Clipboard error!");
|
||||
});
|
||||
})();
|
||||
|
||||
(function scrollToTop () {
|
||||
var menuTitle = document.querySelector('.menu-title');
|
||||
|
||||
menuTitle.addEventListener('click', function () {
|
||||
document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' });
|
||||
});
|
||||
})();
|
||||
|
||||
(function controllMenu() {
|
||||
var menu = document.getElementById('menu-bar');
|
||||
|
||||
(function controllPosition() {
|
||||
var scrollTop = document.scrollingElement.scrollTop;
|
||||
var prevScrollTop = scrollTop;
|
||||
var minMenuY = -menu.clientHeight - 50;
|
||||
// When the script loads, the page can be at any scroll (e.g. if you reforesh it).
|
||||
menu.style.top = scrollTop + 'px';
|
||||
// Same as parseInt(menu.style.top.slice(0, -2), but faster
|
||||
var topCache = menu.style.top.slice(0, -2);
|
||||
menu.classList.remove('sticky');
|
||||
var stickyCache = false; // Same as menu.classList.contains('sticky'), but faster
|
||||
document.addEventListener('scroll', function () {
|
||||
scrollTop = Math.max(document.scrollingElement.scrollTop, 0);
|
||||
// `null` means that it doesn't need to be updated
|
||||
var nextSticky = null;
|
||||
var nextTop = null;
|
||||
var scrollDown = scrollTop > prevScrollTop;
|
||||
var menuPosAbsoluteY = topCache - scrollTop;
|
||||
if (scrollDown) {
|
||||
nextSticky = false;
|
||||
if (menuPosAbsoluteY > 0) {
|
||||
nextTop = prevScrollTop;
|
||||
}
|
||||
} else {
|
||||
if (menuPosAbsoluteY > 0) {
|
||||
nextSticky = true;
|
||||
} else if (menuPosAbsoluteY < minMenuY) {
|
||||
nextTop = prevScrollTop + minMenuY;
|
||||
}
|
||||
}
|
||||
if (nextSticky === true && stickyCache === false) {
|
||||
menu.classList.add('sticky');
|
||||
stickyCache = true;
|
||||
} else if (nextSticky === false && stickyCache === true) {
|
||||
menu.classList.remove('sticky');
|
||||
stickyCache = false;
|
||||
}
|
||||
if (nextTop !== null) {
|
||||
menu.style.top = nextTop + 'px';
|
||||
topCache = nextTop;
|
||||
}
|
||||
prevScrollTop = scrollTop;
|
||||
}, { passive: true });
|
||||
})();
|
||||
(function controllBorder() {
|
||||
function updateBorder() {
|
||||
if (menu.offsetTop === 0) {
|
||||
menu.classList.remove('bordered');
|
||||
} else {
|
||||
menu.classList.add('bordered');
|
||||
}
|
||||
}
|
||||
updateBorder();
|
||||
document.addEventListener('scroll', updateBorder, { passive: true });
|
||||
})();
|
||||
})();
|
298
ch00-00-introduction.html
Normal file
298
ch00-00-introduction.html
Normal file
File diff suppressed because one or more lines are too long
250
ch01-00-getting-started.html
Normal file
250
ch01-00-getting-started.html
Normal file
File diff suppressed because one or more lines are too long
299
ch01-01-installation.html
Normal file
299
ch01-01-installation.html
Normal file
File diff suppressed because one or more lines are too long
326
ch01-02-hello-world.html
Normal file
326
ch01-02-hello-world.html
Normal file
File diff suppressed because one or more lines are too long
347
ch01-03-hello-cargo.html
Normal file
347
ch01-03-hello-cargo.html
Normal file
File diff suppressed because one or more lines are too long
940
ch02-00-guessing-game-tutorial.html
Normal file
940
ch02-00-guessing-game-tutorial.html
Normal file
File diff suppressed because one or more lines are too long
250
ch03-00-common-programming-concepts.html
Normal file
250
ch03-00-common-programming-concepts.html
Normal file
File diff suppressed because one or more lines are too long
357
ch03-01-variables-and-mutability.html
Normal file
357
ch03-01-variables-and-mutability.html
Normal file
File diff suppressed because one or more lines are too long
457
ch03-02-data-types.html
Normal file
457
ch03-02-data-types.html
Normal file
File diff suppressed because one or more lines are too long
429
ch03-03-how-functions-work.html
Normal file
429
ch03-03-how-functions-work.html
Normal file
File diff suppressed because one or more lines are too long
269
ch03-04-comments.html
Normal file
269
ch03-04-comments.html
Normal file
File diff suppressed because one or more lines are too long
536
ch03-05-control-flow.html
Normal file
536
ch03-05-control-flow.html
Normal file
File diff suppressed because one or more lines are too long
245
ch04-00-understanding-ownership.html
Normal file
245
ch04-00-understanding-ownership.html
Normal file
File diff suppressed because one or more lines are too long
514
ch04-01-what-is-ownership.html
Normal file
514
ch04-01-what-is-ownership.html
Normal file
File diff suppressed because one or more lines are too long
506
ch04-02-references-and-borrowing.html
Normal file
506
ch04-02-references-and-borrowing.html
Normal file
File diff suppressed because one or more lines are too long
544
ch04-03-slices.html
Normal file
544
ch04-03-slices.html
Normal file
File diff suppressed because one or more lines are too long
246
ch05-00-structs.html
Normal file
246
ch05-00-structs.html
Normal file
File diff suppressed because one or more lines are too long
480
ch05-01-defining-structs.html
Normal file
480
ch05-01-defining-structs.html
Normal file
File diff suppressed because one or more lines are too long
430
ch05-02-example-structs.html
Normal file
430
ch05-02-example-structs.html
Normal file
File diff suppressed because one or more lines are too long
458
ch05-03-method-syntax.html
Normal file
458
ch05-03-method-syntax.html
Normal file
File diff suppressed because one or more lines are too long
245
ch06-00-enums.html
Normal file
245
ch06-00-enums.html
Normal file
File diff suppressed because one or more lines are too long
489
ch06-01-defining-an-enum.html
Normal file
489
ch06-01-defining-an-enum.html
Normal file
File diff suppressed because one or more lines are too long
484
ch06-02-match.html
Normal file
484
ch06-02-match.html
Normal file
File diff suppressed because one or more lines are too long
316
ch06-03-if-let.html
Normal file
316
ch06-03-if-let.html
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
262
ch07-01-packages-and-crates.html
Normal file
262
ch07-01-packages-and-crates.html
Normal file
File diff suppressed because one or more lines are too long
333
ch07-02-defining-modules-to-control-scope-and-privacy.html
Normal file
333
ch07-02-defining-modules-to-control-scope-and-privacy.html
Normal file
File diff suppressed because one or more lines are too long
454
ch07-03-paths-for-referring-to-an-item-in-the-module-tree.html
Normal file
454
ch07-03-paths-for-referring-to-an-item-in-the-module-tree.html
Normal file
File diff suppressed because one or more lines are too long
498
ch07-04-bringing-paths-into-scope-with-the-use-keyword.html
Normal file
498
ch07-04-bringing-paths-into-scope-with-the-use-keyword.html
Normal file
File diff suppressed because one or more lines are too long
296
ch07-05-separating-modules-into-different-files.html
Normal file
296
ch07-05-separating-modules-into-different-files.html
Normal file
File diff suppressed because one or more lines are too long
252
ch08-00-common-collections.html
Normal file
252
ch08-00-common-collections.html
Normal file
File diff suppressed because one or more lines are too long
381
ch08-01-vectors.html
Normal file
381
ch08-01-vectors.html
Normal file
File diff suppressed because one or more lines are too long
470
ch08-02-strings.html
Normal file
470
ch08-02-strings.html
Normal file
File diff suppressed because one or more lines are too long
375
ch08-03-hash-maps.html
Normal file
375
ch08-03-hash-maps.html
Normal file
File diff suppressed because one or more lines are too long
247
ch09-00-error-handling.html
Normal file
247
ch09-00-error-handling.html
Normal file
File diff suppressed because one or more lines are too long
315
ch09-01-unrecoverable-errors-with-panic.html
Normal file
315
ch09-01-unrecoverable-errors-with-panic.html
Normal file
File diff suppressed because one or more lines are too long
512
ch09-02-recoverable-errors-with-result.html
Normal file
512
ch09-02-recoverable-errors-with-result.html
Normal file
File diff suppressed because one or more lines are too long
348
ch09-03-to-panic-or-not-to-panic.html
Normal file
348
ch09-03-to-panic-or-not-to-panic.html
Normal file
File diff suppressed because one or more lines are too long
336
ch10-00-generics.html
Normal file
336
ch10-00-generics.html
Normal file
File diff suppressed because one or more lines are too long
512
ch10-01-syntax.html
Normal file
512
ch10-01-syntax.html
Normal file
File diff suppressed because one or more lines are too long
623
ch10-02-traits.html
Normal file
623
ch10-02-traits.html
Normal file
File diff suppressed because one or more lines are too long
672
ch10-03-lifetime-syntax.html
Normal file
672
ch10-03-lifetime-syntax.html
Normal file
File diff suppressed because one or more lines are too long
249
ch11-00-testing.html
Normal file
249
ch11-00-testing.html
Normal file
File diff suppressed because one or more lines are too long
994
ch11-01-writing-tests.html
Normal file
994
ch11-01-writing-tests.html
Normal file
File diff suppressed because one or more lines are too long
492
ch11-02-running-tests.html
Normal file
492
ch11-02-running-tests.html
Normal file
File diff suppressed because one or more lines are too long
426
ch11-03-test-organization.html
Normal file
426
ch11-03-test-organization.html
Normal file
File diff suppressed because one or more lines are too long
257
ch12-00-an-io-project.html
Normal file
257
ch12-00-an-io-project.html
Normal file
File diff suppressed because one or more lines are too long
315
ch12-01-accepting-command-line-arguments.html
Normal file
315
ch12-01-accepting-command-line-arguments.html
Normal file
File diff suppressed because one or more lines are too long
301
ch12-02-reading-a-file.html
Normal file
301
ch12-02-reading-a-file.html
Normal file
File diff suppressed because one or more lines are too long
807
ch12-03-improving-error-handling-and-modularity.html
Normal file
807
ch12-03-improving-error-handling-and-modularity.html
Normal file
File diff suppressed because one or more lines are too long
686
ch12-04-testing-the-librarys-functionality.html
Normal file
686
ch12-04-testing-the-librarys-functionality.html
Normal file
File diff suppressed because one or more lines are too long
784
ch12-05-working-with-environment-variables.html
Normal file
784
ch12-05-working-with-environment-variables.html
Normal file
File diff suppressed because one or more lines are too long
295
ch12-06-writing-to-stderr-instead-of-stdout.html
Normal file
295
ch12-06-writing-to-stderr-instead-of-stdout.html
Normal file
File diff suppressed because one or more lines are too long
254
ch13-00-functional-features.html
Normal file
254
ch13-00-functional-features.html
Normal file
File diff suppressed because one or more lines are too long
601
ch13-01-closures.html
Normal file
601
ch13-01-closures.html
Normal file
File diff suppressed because one or more lines are too long
420
ch13-02-iterators.html
Normal file
420
ch13-02-iterators.html
Normal file
File diff suppressed because one or more lines are too long
802
ch13-03-improving-our-io-project.html
Normal file
802
ch13-03-improving-our-io-project.html
Normal file
File diff suppressed because one or more lines are too long
280
ch13-04-performance.html
Normal file
280
ch13-04-performance.html
Normal file
File diff suppressed because one or more lines are too long
253
ch14-00-more-about-cargo.html
Normal file
253
ch14-00-more-about-cargo.html
Normal file
File diff suppressed because one or more lines are too long
269
ch14-01-release-profiles.html
Normal file
269
ch14-01-release-profiles.html
Normal file
File diff suppressed because one or more lines are too long
495
ch14-02-publishing-to-crates-io.html
Normal file
495
ch14-02-publishing-to-crates-io.html
Normal file
File diff suppressed because one or more lines are too long
429
ch14-03-cargo-workspaces.html
Normal file
429
ch14-03-cargo-workspaces.html
Normal file
File diff suppressed because one or more lines are too long
259
ch14-04-installing-binaries.html
Normal file
259
ch14-04-installing-binaries.html
Normal file
File diff suppressed because one or more lines are too long
247
ch14-05-extending-cargo.html
Normal file
247
ch14-05-extending-cargo.html
Normal file
File diff suppressed because one or more lines are too long
256
ch15-00-smart-pointers.html
Normal file
256
ch15-00-smart-pointers.html
Normal file
File diff suppressed because one or more lines are too long
372
ch15-01-box.html
Normal file
372
ch15-01-box.html
Normal file
File diff suppressed because one or more lines are too long
454
ch15-02-deref.html
Normal file
454
ch15-02-deref.html
Normal file
File diff suppressed because one or more lines are too long
359
ch15-03-drop.html
Normal file
359
ch15-03-drop.html
Normal file
File diff suppressed because one or more lines are too long
343
ch15-04-rc.html
Normal file
343
ch15-04-rc.html
Normal file
File diff suppressed because one or more lines are too long
664
ch15-05-interior-mutability.html
Normal file
664
ch15-05-interior-mutability.html
Normal file
File diff suppressed because one or more lines are too long
533
ch15-06-reference-cycles.html
Normal file
533
ch15-06-reference-cycles.html
Normal file
File diff suppressed because one or more lines are too long
257
ch16-00-concurrency.html
Normal file
257
ch16-00-concurrency.html
Normal file
File diff suppressed because one or more lines are too long
465
ch16-01-threads.html
Normal file
465
ch16-01-threads.html
Normal file
File diff suppressed because one or more lines are too long
435
ch16-02-message-passing.html
Normal file
435
ch16-02-message-passing.html
Normal file
File diff suppressed because one or more lines are too long
432
ch16-03-shared-state.html
Normal file
432
ch16-03-shared-state.html
Normal file
File diff suppressed because one or more lines are too long
261
ch16-04-extensible-concurrency-sync-and-send.html
Normal file
261
ch16-04-extensible-concurrency-sync-and-send.html
Normal file
File diff suppressed because one or more lines are too long
287
ch17-00-async-await.html
Normal file
287
ch17-00-async-await.html
Normal file
File diff suppressed because one or more lines are too long
478
ch17-01-futures-and-syntax.html
Normal file
478
ch17-01-futures-and-syntax.html
Normal file
File diff suppressed because one or more lines are too long
239
ch17-02-concurrency-with-async.html
Normal file
239
ch17-02-concurrency-with-async.html
Normal file
File diff suppressed because one or more lines are too long
239
ch17-03-more-futures.html
Normal file
239
ch17-03-more-futures.html
Normal file
File diff suppressed because one or more lines are too long
239
ch17-04-streams.html
Normal file
239
ch17-04-streams.html
Normal file
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user