Merge pull request #743 from mattico/remove-stylus-redux
Convert Stylus to CSS
This commit is contained in:
commit
028c8b0f75
|
@ -48,30 +48,6 @@ mdBook builds on stable Rust, if you want to build mdBook from source, here are
|
||||||
|
|
||||||
The resulting binary can be found in `mdBook/target/debug/` under the name `mdBook` or `mdBook.exe`.
|
The resulting binary can be found in `mdBook/target/debug/` under the name `mdBook` or `mdBook.exe`.
|
||||||
|
|
||||||
|
|
||||||
### Making changes to the style
|
|
||||||
|
|
||||||
mdBook doesn't use CSS directly but uses [Stylus](http://stylus-lang.com/), a CSS-preprocessor which compiles to CSS.
|
|
||||||
|
|
||||||
When you want to change the style, it is important to not change the CSS directly because any manual modification to
|
|
||||||
the CSS files will be overwritten when compiling the stylus files. Instead, you should make your changes directly in the
|
|
||||||
[stylus files](https://github.com/rust-lang-nursery/mdBook/tree/master/src/theme/stylus) and regenerate the CSS.
|
|
||||||
|
|
||||||
For this to work, you first need [Node and NPM](https://nodejs.org/en/) installed on your machine.
|
|
||||||
Then run the following command to install both [stylus](http://stylus-lang.com/) and [nib](https://tj.github.io/nib/), you might need `sudo` to install successfully.
|
|
||||||
|
|
||||||
```
|
|
||||||
npm install -g stylus nib
|
|
||||||
```
|
|
||||||
|
|
||||||
When that finished, you can simply regenerate the CSS files by building mdBook with the following command:
|
|
||||||
|
|
||||||
```
|
|
||||||
cargo build --features=regenerate-css
|
|
||||||
```
|
|
||||||
|
|
||||||
This should automatically call the appropriate stylus command to recompile the files to CSS and include them in the project.
|
|
||||||
|
|
||||||
### Making a pull-request
|
### Making a pull-request
|
||||||
|
|
||||||
When you feel comfortable that your changes could be integrated into mdBook, you can create a pull-request on GitHub.
|
When you feel comfortable that your changes could be integrated into mdBook, you can create a pull-request on GitHub.
|
||||||
|
|
10
Cargo.toml
10
Cargo.toml
|
@ -8,11 +8,7 @@ repository = "https://github.com/rust-lang-nursery/mdBook"
|
||||||
keywords = ["book", "gitbook", "rustbook", "markdown"]
|
keywords = ["book", "gitbook", "rustbook", "markdown"]
|
||||||
license = "MPL-2.0"
|
license = "MPL-2.0"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
build = "build.rs"
|
exclude = ["book-example/*"]
|
||||||
exclude = [
|
|
||||||
"book-example/*",
|
|
||||||
"src/theme/stylus/**",
|
|
||||||
]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "2.24"
|
clap = "2.24"
|
||||||
|
@ -47,9 +43,6 @@ ws = { version = "0.7", optional = true}
|
||||||
elasticlunr-rs = { version = "2.3", optional = true, default-features = false }
|
elasticlunr-rs = { version = "2.3", optional = true, default-features = false }
|
||||||
ammonia = { version = "1.1", optional = true }
|
ammonia = { version = "1.1", optional = true }
|
||||||
|
|
||||||
[build-dependencies]
|
|
||||||
error-chain = "0.12"
|
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
select = "0.4"
|
select = "0.4"
|
||||||
pretty_assertions = "0.5"
|
pretty_assertions = "0.5"
|
||||||
|
@ -60,7 +53,6 @@ pulldown-cmark-to-cmark = "1.1.0"
|
||||||
default = ["output", "watch", "serve", "search"]
|
default = ["output", "watch", "serve", "search"]
|
||||||
debug = []
|
debug = []
|
||||||
output = []
|
output = []
|
||||||
regenerate-css = []
|
|
||||||
watch = ["notify"]
|
watch = ["notify"]
|
||||||
serve = ["iron", "staticfile", "ws"]
|
serve = ["iron", "staticfile", "ws"]
|
||||||
search = ["elasticlunr-rs", "ammonia"]
|
search = ["elasticlunr-rs", "ammonia"]
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
environment:
|
environment:
|
||||||
global:
|
global:
|
||||||
PROJECT_NAME: mdBook
|
PROJECT_NAME: mdBook
|
||||||
nodejs_version: "6"
|
|
||||||
matrix:
|
matrix:
|
||||||
# Stable channel
|
# Stable channel
|
||||||
- TARGET: i686-pc-windows-msvc
|
- TARGET: i686-pc-windows-msvc
|
||||||
|
@ -32,17 +31,12 @@ install:
|
||||||
- set PATH=%PATH%;C:\Users\appveyor\.cargo\bin
|
- set PATH=%PATH%;C:\Users\appveyor\.cargo\bin
|
||||||
- rustc -Vv
|
- rustc -Vv
|
||||||
- cargo -V
|
- cargo -V
|
||||||
- ps: Install-Product node $env:nodejs_version
|
|
||||||
- node --version
|
|
||||||
- npm --version
|
|
||||||
- npm install -g stylus nib
|
|
||||||
|
|
||||||
build: false
|
build: false
|
||||||
|
|
||||||
# Equivalent to Travis' `script` phase
|
# Equivalent to Travis' `script` phase
|
||||||
test_script:
|
test_script:
|
||||||
- cargo build --verbose
|
- cargo build --verbose
|
||||||
- cargo build --verbose --features=regenerate-css
|
|
||||||
- cargo test --verbose
|
- cargo test --verbose
|
||||||
|
|
||||||
before_deploy:
|
before_deploy:
|
||||||
|
|
100
build.rs
100
build.rs
|
@ -1,100 +0,0 @@
|
||||||
// build.rs
|
|
||||||
|
|
||||||
use std::env;
|
|
||||||
use std::path::Path;
|
|
||||||
#[macro_use]
|
|
||||||
extern crate error_chain;
|
|
||||||
|
|
||||||
#[cfg(windows)]
|
|
||||||
mod execs {
|
|
||||||
use std::process::Command;
|
|
||||||
|
|
||||||
pub fn cmd(program: &str) -> Command {
|
|
||||||
let mut cmd = Command::new("cmd");
|
|
||||||
cmd.args(&["/c", program]);
|
|
||||||
cmd
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#[cfg(not(windows))]
|
|
||||||
mod execs {
|
|
||||||
use std::process::Command;
|
|
||||||
|
|
||||||
pub fn cmd(program: &str) -> Command {
|
|
||||||
Command::new(program)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
error_chain!{
|
|
||||||
foreign_links {
|
|
||||||
Io(std::io::Error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn program_exists(program: &str) -> Result<()> {
|
|
||||||
execs::cmd(program)
|
|
||||||
.arg("-v")
|
|
||||||
.output()
|
|
||||||
.chain_err(|| format!("Please install '{}'!", program))?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn npm_package_exists(package: &str) -> Result<()> {
|
|
||||||
let status = execs::cmd("npm")
|
|
||||||
.args(&["list", "-g"])
|
|
||||||
.arg(package)
|
|
||||||
.output();
|
|
||||||
|
|
||||||
match status {
|
|
||||||
Ok(ref out) if out.status.success() => Ok(()),
|
|
||||||
_ => bail!(
|
|
||||||
"Missing npm package '{0}' install with: 'npm -g install {0}'",
|
|
||||||
package
|
|
||||||
),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub enum Resource<'a> {
|
|
||||||
Program(&'a str),
|
|
||||||
Package(&'a str),
|
|
||||||
}
|
|
||||||
use Resource::{Package, Program};
|
|
||||||
|
|
||||||
impl<'a> Resource<'a> {
|
|
||||||
pub fn exists(&self) -> Result<()> {
|
|
||||||
match *self {
|
|
||||||
Program(name) => program_exists(name),
|
|
||||||
Package(name) => npm_package_exists(name),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn run() -> Result<()> {
|
|
||||||
if let Ok(_) = env::var("CARGO_FEATURE_REGENERATE_CSS") {
|
|
||||||
// Check dependencies
|
|
||||||
Program("npm").exists()?;
|
|
||||||
Program("node").exists().or(Program("nodejs").exists())?;
|
|
||||||
Package("nib").exists()?;
|
|
||||||
Package("stylus").exists()?;
|
|
||||||
|
|
||||||
// Compile stylus stylesheet to css
|
|
||||||
let manifest_dir = env::var("CARGO_MANIFEST_DIR")
|
|
||||||
.chain_err(|| "Please run the script with: 'cargo build'!")?;
|
|
||||||
let theme_dir = Path::new(&manifest_dir).join("src/theme/");
|
|
||||||
let stylus_dir = theme_dir.join("stylus/book.styl");
|
|
||||||
|
|
||||||
if !execs::cmd("stylus")
|
|
||||||
.arg(stylus_dir)
|
|
||||||
.arg("--out")
|
|
||||||
.arg(theme_dir)
|
|
||||||
.arg("--use")
|
|
||||||
.arg("nib")
|
|
||||||
.status()?
|
|
||||||
.success()
|
|
||||||
{
|
|
||||||
bail!("Stylus encountered an error");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
quick_main!(run);
|
|
|
@ -11,9 +11,6 @@ if [ "$TRAVIS_PULL_REQUEST" != "false" ] ||
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Make sure we have the css dependencies
|
|
||||||
npm install -g stylus nib
|
|
||||||
|
|
||||||
NC='\033[39m'
|
NC='\033[39m'
|
||||||
CYAN='\033[36m'
|
CYAN='\033[36m'
|
||||||
GREEN='\033[32m'
|
GREEN='\033[32m'
|
||||||
|
@ -21,7 +18,7 @@ GREEN='\033[32m'
|
||||||
rev=$(git rev-parse --short HEAD)
|
rev=$(git rev-parse --short HEAD)
|
||||||
|
|
||||||
echo -e "${CYAN}Running cargo doc${NC}"
|
echo -e "${CYAN}Running cargo doc${NC}"
|
||||||
cargo doc --features regenerate-css > /dev/null
|
cargo doc > /dev/null
|
||||||
|
|
||||||
echo -e "${CYAN}Running mdbook build${NC}"
|
echo -e "${CYAN}Running mdbook build${NC}"
|
||||||
cargo run -- build book-example/
|
cargo run -- build book-example/
|
||||||
|
|
|
@ -127,8 +127,20 @@ impl BookBuilder {
|
||||||
let mut index = File::create(themedir.join("index.hbs"))?;
|
let mut index = File::create(themedir.join("index.hbs"))?;
|
||||||
index.write_all(theme::INDEX)?;
|
index.write_all(theme::INDEX)?;
|
||||||
|
|
||||||
let mut css = File::create(themedir.join("book.css"))?;
|
let cssdir = themedir.join("css");
|
||||||
css.write_all(theme::CSS)?;
|
fs::create_dir(&cssdir)?;
|
||||||
|
|
||||||
|
let mut general_css = File::create(cssdir.join("general.css"))?;
|
||||||
|
general_css.write_all(theme::GENERAL_CSS)?;
|
||||||
|
|
||||||
|
let mut chrome_css = File::create(cssdir.join("chrome.css"))?;
|
||||||
|
chrome_css.write_all(theme::CHROME_CSS)?;
|
||||||
|
|
||||||
|
let mut print_css = File::create(cssdir.join("print.css"))?;
|
||||||
|
print_css.write_all(theme::PRINT_CSS)?;
|
||||||
|
|
||||||
|
let mut variables_css = File::create(cssdir.join("variables.css"))?;
|
||||||
|
variables_css.write_all(theme::VARIABLES_CSS)?;
|
||||||
|
|
||||||
let mut favicon = File::create(themedir.join("favicon.png"))?;
|
let mut favicon = File::create(themedir.join("favicon.png"))?;
|
||||||
favicon.write_all(theme::FAVICON)?;
|
favicon.write_all(theme::FAVICON)?;
|
||||||
|
|
|
@ -139,7 +139,10 @@ impl HtmlHandlebars {
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
write_file(destination, "book.js", &theme.js)?;
|
write_file(destination, "book.js", &theme.js)?;
|
||||||
write_file(destination, "book.css", &theme.css)?;
|
write_file(destination, "css/general.css", &theme.general_css)?;
|
||||||
|
write_file(destination, "css/chrome.css", &theme.chrome_css)?;
|
||||||
|
write_file(destination, "css/print.css", &theme.print_css)?;
|
||||||
|
write_file(destination, "css/variables.css", &theme.variables_css)?;
|
||||||
write_file(destination, "favicon.png", &theme.favicon)?;
|
write_file(destination, "favicon.png", &theme.favicon)?;
|
||||||
write_file(destination, "highlight.css", &theme.highlight_css)?;
|
write_file(destination, "highlight.css", &theme.highlight_css)?;
|
||||||
write_file(destination, "tomorrow-night.css", &theme.tomorrow_night_css)?;
|
write_file(destination, "tomorrow-night.css", &theme.tomorrow_night_css)?;
|
||||||
|
|
1465
src/theme/book.css
1465
src/theme/book.css
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,411 @@
|
||||||
|
/* CSS for UI elements (a.k.a. chrome) */
|
||||||
|
|
||||||
|
@import 'variables.css';
|
||||||
|
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
background: var(--bg);
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background: var(--scrollbar);
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchresults a,
|
||||||
|
.content a:link,
|
||||||
|
a:visited,
|
||||||
|
a > .hljs {
|
||||||
|
color: var(--links);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Menu Bar */
|
||||||
|
|
||||||
|
#menu-bar {
|
||||||
|
position: -webkit-sticky;
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
z-index: 101;
|
||||||
|
margin: auto calc(0px - var(--page-padding));
|
||||||
|
}
|
||||||
|
#menu-bar > #menu-bar-sticky-container {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
background-color: var(--bg);
|
||||||
|
border-bottom-color: var(--bg);
|
||||||
|
border-bottom-width: 1px;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
}
|
||||||
|
.js #menu-bar > #menu-bar-sticky-container {
|
||||||
|
transition: transform 0.3s;
|
||||||
|
}
|
||||||
|
#menu-bar.bordered > #menu-bar-sticky-container {
|
||||||
|
border-bottom-color: var(--table-border-color);
|
||||||
|
}
|
||||||
|
#menu-bar i, #menu-bar .icon-button {
|
||||||
|
position: relative;
|
||||||
|
margin: 0 8px;
|
||||||
|
z-index: 10;
|
||||||
|
line-height: 50px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: color 0.5s;
|
||||||
|
}
|
||||||
|
@media only screen and (max-width: 420px) {
|
||||||
|
#menu-bar i, #menu-bar .icon-button {
|
||||||
|
margin: 0 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-button {
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
padding: 0;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
.icon-button i {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#print-button {
|
||||||
|
margin: 0 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
html:not(.sidebar-visible) #menu-bar:not(:hover).folded > #menu-bar-sticky-container {
|
||||||
|
transform: translateY(-60px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.left-buttons { margin: 0 5px; }
|
||||||
|
.no-js .left-buttons { display: none; }
|
||||||
|
|
||||||
|
.menu-title {
|
||||||
|
display: inline-block;
|
||||||
|
font-weight: 200;
|
||||||
|
font-size: 20px;
|
||||||
|
line-height: 50px;
|
||||||
|
text-align: center;
|
||||||
|
margin: 0;
|
||||||
|
flex: 1;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
.js .menu-title {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-bar,
|
||||||
|
.menu-bar:visited,
|
||||||
|
.nav-chapters,
|
||||||
|
.nav-chapters:visited,
|
||||||
|
.mobile-nav-chapters,
|
||||||
|
.mobile-nav-chapters:visited,
|
||||||
|
.menu-bar .icon-button,
|
||||||
|
.menu-bar a i {
|
||||||
|
color: var(--icons);
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-bar i:hover,
|
||||||
|
.menu-bar .icon-button:hover,
|
||||||
|
.nav-chapters:hover,
|
||||||
|
.mobile-nav-chapters i:hover {
|
||||||
|
color: var(--icons-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Nav Icons */
|
||||||
|
|
||||||
|
.nav-chapters {
|
||||||
|
font-size: 2.5em;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
|
position: fixed;
|
||||||
|
top: 50px; /* Height of menu-bar */
|
||||||
|
bottom: 0;
|
||||||
|
margin: 0;
|
||||||
|
max-width: 150px;
|
||||||
|
min-width: 90px;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-content: center;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
transition: color 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-chapters:hover { text-decoration: none; }
|
||||||
|
|
||||||
|
.nav-wrapper {
|
||||||
|
margin-top: 50px;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mobile-nav-chapters {
|
||||||
|
font-size: 2.5em;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
width: 90px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: var(--sidebar-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.previous {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.next {
|
||||||
|
float: right;
|
||||||
|
right: var(--page-padding);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 1080px) {
|
||||||
|
.nav-wide-wrapper { display: none; }
|
||||||
|
.nav-wrapper { display: block; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 1380px) {
|
||||||
|
.sidebar-visible .nav-wide-wrapper { display: none; }
|
||||||
|
.sidebar-visible .nav-wrapper { display: block; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Inline code */
|
||||||
|
|
||||||
|
:not(pre) > .hljs {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
padding: 0.1em 0.3em;
|
||||||
|
border-radius: 3px;
|
||||||
|
color: var(--inline-code-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover > .hljs {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
pre > .buttons {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 100;
|
||||||
|
right: 5px;
|
||||||
|
top: 5px;
|
||||||
|
|
||||||
|
color: var(--sidebar-fg);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
pre > .buttons :hover {
|
||||||
|
color: var(--sidebar-active);
|
||||||
|
}
|
||||||
|
pre > .buttons i {
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
pre > .buttons button {
|
||||||
|
color: inherit;
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
cursor: inherit;
|
||||||
|
}
|
||||||
|
pre > .result {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Search */
|
||||||
|
|
||||||
|
#searchresults a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
mark {
|
||||||
|
border-radius: 2px;
|
||||||
|
padding: 0 3px 1px 3px;
|
||||||
|
margin: 0 -3px -1px -3px;
|
||||||
|
background-color: var(--search-mark-bg);
|
||||||
|
transition: background-color 300ms linear;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
mark.fade-out {
|
||||||
|
background-color: rgba(0,0,0,0) !important;
|
||||||
|
cursor: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchbar-outer {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
max-width: var(--content-max-width);
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchbar {
|
||||||
|
width: 100%;
|
||||||
|
margin: 5px auto 0px auto;
|
||||||
|
padding: 10px 16px;
|
||||||
|
transition: box-shadow 300ms ease-in-out;
|
||||||
|
border: 1px solid var(--searchbar-border-color);
|
||||||
|
border-radius: 3px;
|
||||||
|
background-color: var(--searchbar-bg);
|
||||||
|
color: var(--searchbar-fg);
|
||||||
|
}
|
||||||
|
#searchbar:focus,
|
||||||
|
#searchbar.active {
|
||||||
|
box-shadow: 0 0 3px var(--searchbar-shadow-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchresults-header {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1em;
|
||||||
|
padding: 18px 0 0 5px;
|
||||||
|
color: var(--searchresults-header-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchresults-outer {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
max-width: var(--content-max-width);
|
||||||
|
border-bottom: 1px dashed var(--searchresults-border-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#searchresults {
|
||||||
|
list-style: none;
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
ul#searchresults li {
|
||||||
|
margin: 10px 0px;
|
||||||
|
padding: 2px;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
ul#searchresults li.focus {
|
||||||
|
background-color: var(--searchresults-li-bg);
|
||||||
|
}
|
||||||
|
ul#searchresults span.teaser {
|
||||||
|
display: block;
|
||||||
|
clear: both;
|
||||||
|
margin: 5px 0 0 20px;
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
ul#searchresults span.teaser em {
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sidebar */
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
width: var(--sidebar-width);
|
||||||
|
overflow-y: auto;
|
||||||
|
padding: 10px 10px;
|
||||||
|
font-size: 0.875em;
|
||||||
|
box-sizing: border-box;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
|
overscroll-behavior-y: contain;
|
||||||
|
background-color: var(--sidebar-bg);
|
||||||
|
color: var(--sidebar-fg);
|
||||||
|
}
|
||||||
|
.js .sidebar {
|
||||||
|
transition: transform 0.3s; /* Animation: slide away */
|
||||||
|
}
|
||||||
|
.sidebar code {
|
||||||
|
line-height: 2em;
|
||||||
|
}
|
||||||
|
.sidebar-hidden .sidebar {
|
||||||
|
transform: translateX(calc(0px - var(--sidebar-width)));
|
||||||
|
}
|
||||||
|
.sidebar::-webkit-scrollbar {
|
||||||
|
background: var(--sidebar-bg);
|
||||||
|
}
|
||||||
|
.sidebar::-webkit-scrollbar-thumb {
|
||||||
|
background: var(--scrollbar);
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-visible .page-wrapper {
|
||||||
|
transform: translateX(var(--sidebar-width));
|
||||||
|
}
|
||||||
|
@media only screen and (min-width: 620px) {
|
||||||
|
.sidebar-visible .page-wrapper {
|
||||||
|
transform: none;
|
||||||
|
margin-left: var(--sidebar-width);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.chapter {
|
||||||
|
list-style: none outside none;
|
||||||
|
padding-left: 0;
|
||||||
|
line-height: 2.2em;
|
||||||
|
}
|
||||||
|
.chapter li {
|
||||||
|
color: var(--sidebar-non-existant);
|
||||||
|
}
|
||||||
|
.chapter li a {
|
||||||
|
color: var(--sidebar-fg);
|
||||||
|
display: block;
|
||||||
|
padding: 0;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.chapter li a:hover { text-decoration: none }
|
||||||
|
.chapter li .active,
|
||||||
|
a:hover {
|
||||||
|
/* Animate color change */
|
||||||
|
color: var(--sidebar-active);
|
||||||
|
}
|
||||||
|
|
||||||
|
.spacer {
|
||||||
|
width: 100%;
|
||||||
|
height: 3px;
|
||||||
|
margin: 5px 0px;
|
||||||
|
}
|
||||||
|
.chapter .spacer {
|
||||||
|
background-color: var(--sidebar-spacer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (-moz-touch-enabled: 1), (pointer: coarse) {
|
||||||
|
.chapter li a { padding: 5px 0; }
|
||||||
|
.spacer { margin: 10px 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.section {
|
||||||
|
list-style: none outside none;
|
||||||
|
padding-left: 20px;
|
||||||
|
line-height: 1.9em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Theme Menu Popup */
|
||||||
|
|
||||||
|
.theme-popup {
|
||||||
|
position: absolute;
|
||||||
|
left: 10px;
|
||||||
|
z-index: 1000;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 0.7em;
|
||||||
|
color: var(--fg);
|
||||||
|
background: var(--theme-popup-bg);
|
||||||
|
border: 1px solid var(--theme-popup-border);
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
list-style: none;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.theme-popup .default {
|
||||||
|
color: var(--icons);
|
||||||
|
}
|
||||||
|
.theme-popup .theme {
|
||||||
|
width: 100%;
|
||||||
|
border: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 2px 10px;
|
||||||
|
line-height: 25px;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-align: left;
|
||||||
|
cursor: pointer;
|
||||||
|
color: inherit;
|
||||||
|
background: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
}
|
||||||
|
.theme-popup .theme:hover {
|
||||||
|
background-color: var(--theme-hover);
|
||||||
|
}
|
||||||
|
.theme-popup .theme:hover:first-child,
|
||||||
|
.theme-popup .theme:hover:last-child {
|
||||||
|
border-top-left-radius: inherit;
|
||||||
|
border-top-right-radius: inherit;
|
||||||
|
}
|
|
@ -0,0 +1,144 @@
|
||||||
|
/* Base styles and content styles */
|
||||||
|
|
||||||
|
@import 'variables.css';
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-family: "Open Sans", sans-serif;
|
||||||
|
color: var(--fg);
|
||||||
|
background-color: var(--bg);
|
||||||
|
text-size-adjust: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 1rem;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
font-family: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace;
|
||||||
|
font-size: 0.875em; /* please adjust the ace font size accordingly in editor.js */
|
||||||
|
}
|
||||||
|
|
||||||
|
.left { float: left; }
|
||||||
|
.right { float: right; }
|
||||||
|
.hidden { display: none; }
|
||||||
|
.play-button.hidden { display: none; }
|
||||||
|
|
||||||
|
h2, h3 { margin-top: 2.5em; }
|
||||||
|
h4, h5 { margin-top: 2em; }
|
||||||
|
|
||||||
|
.header + .header h3,
|
||||||
|
.header + .header h4,
|
||||||
|
.header + .header h5 {
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.header:target h1:before,
|
||||||
|
a.header:target h2:before,
|
||||||
|
a.header:target h3:before,
|
||||||
|
a.header:target h4:before {
|
||||||
|
display: inline-block;
|
||||||
|
content: "»";
|
||||||
|
margin-left: -30px;
|
||||||
|
width: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page {
|
||||||
|
outline: 0;
|
||||||
|
padding: 0 var(--page-padding);
|
||||||
|
}
|
||||||
|
.page-wrapper {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.js .page-wrapper {
|
||||||
|
transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
overflow-y: auto;
|
||||||
|
padding: 0 15px;
|
||||||
|
padding-bottom: 50px;
|
||||||
|
}
|
||||||
|
.content main {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
max-width: var(--content-max-width);
|
||||||
|
}
|
||||||
|
.content a { text-decoration: none; }
|
||||||
|
.content a:hover { text-decoration: underline; }
|
||||||
|
.content img { max-width: 100%; }
|
||||||
|
.content .header:link,
|
||||||
|
.content .header:visited {
|
||||||
|
color: var(--fg);
|
||||||
|
}
|
||||||
|
.content .header:link,
|
||||||
|
.content .header:visited:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
margin: 0 auto;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table td {
|
||||||
|
padding: 3px 20px;
|
||||||
|
border: 1px var(--table-border-color) solid;
|
||||||
|
}
|
||||||
|
table thead {
|
||||||
|
background: var(--table-header-bg);
|
||||||
|
}
|
||||||
|
table thead td {
|
||||||
|
font-weight: 700;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
table thead tr {
|
||||||
|
border: 1px var(--table-header-bg) solid;
|
||||||
|
}
|
||||||
|
/* Alternate background colors for rows */
|
||||||
|
table tbody tr:nth-child(2n) {
|
||||||
|
background: var(--table-alternate-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
margin: 20px 0;
|
||||||
|
padding: 0 20px;
|
||||||
|
color: var(--fg);
|
||||||
|
background-color: var(--quote-bg);
|
||||||
|
border-top: .1em solid var(--quote-border);
|
||||||
|
border-bottom: .1em solid var(--quote-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
:not(.footnote-definition) + .footnote-definition,
|
||||||
|
.footnote-definition + :not(.footnote-definition) {
|
||||||
|
margin-top: 2em;
|
||||||
|
}
|
||||||
|
.footnote-definition {
|
||||||
|
font-size: 0.9em;
|
||||||
|
margin: 0.5em 0;
|
||||||
|
}
|
||||||
|
.footnote-definition p {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltiptext {
|
||||||
|
position: absolute;
|
||||||
|
visibility: hidden;
|
||||||
|
color: #fff;
|
||||||
|
background-color: #333;
|
||||||
|
transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */
|
||||||
|
left: -8px; /* Half of the width of the icon */
|
||||||
|
top: -35px;
|
||||||
|
font-size: 0.8em;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 5px 8px;
|
||||||
|
margin: 5px;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
.tooltipped .tooltiptext {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
|
||||||
|
#sidebar,
|
||||||
|
#menu-bar,
|
||||||
|
.nav-chapters,
|
||||||
|
.mobile-nav-chapters {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#page-wrapper.page-wrapper {
|
||||||
|
transform: none;
|
||||||
|
margin-left: 0px;
|
||||||
|
overflow-y: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content {
|
||||||
|
max-width: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page {
|
||||||
|
overflow-y: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
background-color: #666666;
|
||||||
|
border-radius: 5px;
|
||||||
|
|
||||||
|
/* Force background to be printed in Chrome */
|
||||||
|
-webkit-print-color-adjust: exact;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre > .buttons {
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
a, a:visited, a:active, a:hover {
|
||||||
|
color: #4183c4;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
page-break-inside: avoid;
|
||||||
|
page-break-after: avoid;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre, code {
|
||||||
|
page-break-inside: avoid;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa {
|
||||||
|
display: none !important;
|
||||||
|
}
|
|
@ -0,0 +1,210 @@
|
||||||
|
|
||||||
|
/* Globals */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--sidebar-width: 300px;
|
||||||
|
--page-padding: 15px;
|
||||||
|
--content-max-width: 750px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Themes */
|
||||||
|
|
||||||
|
.ayu {
|
||||||
|
--bg: #0f1419;
|
||||||
|
--fg: #c5c5c5;
|
||||||
|
|
||||||
|
--sidebar-bg: #14191f;
|
||||||
|
--sidebar-fg: #c8c9db;
|
||||||
|
--sidebar-non-existant: #5c6773;
|
||||||
|
--sidebar-active: #ffb454;
|
||||||
|
--sidebar-spacer: #2d334f;
|
||||||
|
|
||||||
|
--scrollbar: var(--sidebar-fg);
|
||||||
|
|
||||||
|
--icons: #737480;
|
||||||
|
--icons-hover: #b7b9cc;
|
||||||
|
|
||||||
|
--links: #0096cf;
|
||||||
|
|
||||||
|
--inline-code-color: #ffb454;
|
||||||
|
|
||||||
|
--theme-popup-bg: #14191f;
|
||||||
|
--theme-popup-border: #5c6773;
|
||||||
|
--theme-hover: #191f26;
|
||||||
|
|
||||||
|
--quote-bg: #262933;
|
||||||
|
--quote-border: lighten(var(--quote-bg), 5%);
|
||||||
|
|
||||||
|
--table-border-color: lighten(var(--bg), 5%);
|
||||||
|
--table-header-bg: lighten(var(--bg), 20%);
|
||||||
|
--table-alternate-bg: lighten(var(--bg), 3%);
|
||||||
|
|
||||||
|
--searchbar-border-color: #848484;
|
||||||
|
--searchbar-bg: #424242;
|
||||||
|
--searchbar-fg: #fff;
|
||||||
|
--searchbar-shadow-color: #d4c89f;
|
||||||
|
--searchresults-header-fg: #666;
|
||||||
|
--searchresults-border-color: #888;
|
||||||
|
--searchresults-li-bg: #252932;
|
||||||
|
--search-mark-bg: #e3b171;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coal {
|
||||||
|
--bg: #141617;
|
||||||
|
--fg: #98a3ad;
|
||||||
|
|
||||||
|
--sidebar-bg: #292c2f;
|
||||||
|
--sidebar-fg: #a1adb8;
|
||||||
|
--sidebar-non-existant: #505254;
|
||||||
|
--sidebar-active: #3473ad;
|
||||||
|
--sidebar-spacer: #393939;
|
||||||
|
|
||||||
|
--scrollbar: var(--sidebar-fg);
|
||||||
|
|
||||||
|
--icons: #43484d;
|
||||||
|
--icons-hover: #b3c0cc;
|
||||||
|
|
||||||
|
--links: #2b79a2;
|
||||||
|
|
||||||
|
--inline-code-color: #c5c8c6;;
|
||||||
|
|
||||||
|
--theme-popup-bg: #141617;
|
||||||
|
--theme-popup-border: #43484d;
|
||||||
|
--theme-hover: #1f2124;
|
||||||
|
|
||||||
|
--quote-bg: #242637;
|
||||||
|
--quote-border: lighten(var(--quote-bg), 5%);
|
||||||
|
|
||||||
|
--table-border-color: lighten(var(--bg), 5%);
|
||||||
|
--table-header-bg: lighten(var(--bg), 20%);
|
||||||
|
--table-alternate-bg: lighten(var(--bg), 3%);
|
||||||
|
|
||||||
|
--searchbar-border-color: #aaa;
|
||||||
|
--searchbar-bg: #b7b7b7;
|
||||||
|
--searchbar-fg: #000;
|
||||||
|
--searchbar-shadow-color: #aaa;
|
||||||
|
--searchresults-header-fg: #666;
|
||||||
|
--searchresults-border-color: #98a3ad;
|
||||||
|
--searchresults-li-bg: #2b2b2f;
|
||||||
|
--search-mark-bg: #355c7d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.light {
|
||||||
|
--bg: #ffffff;
|
||||||
|
--fg: #333333;
|
||||||
|
|
||||||
|
--sidebar-bg: #fafafa;
|
||||||
|
--sidebar-fg: #364149;
|
||||||
|
--sidebar-non-existant: #aaaaaa;
|
||||||
|
--sidebar-active: #008cff;
|
||||||
|
--sidebar-spacer: #f4f4f4;
|
||||||
|
|
||||||
|
--scrollbar: #cccccc;
|
||||||
|
|
||||||
|
--icons: #cccccc;
|
||||||
|
--icons-hover: #333333;
|
||||||
|
|
||||||
|
--links: #4183c4;
|
||||||
|
|
||||||
|
--inline-code-color: #6e6b5e;
|
||||||
|
|
||||||
|
--theme-popup-bg: #fafafa;
|
||||||
|
--theme-popup-border: #cccccc;
|
||||||
|
--theme-hover: #e6e6e6;
|
||||||
|
|
||||||
|
--quote-bg: #f2f7f9;
|
||||||
|
--quote-border: darken(var(--quote-bg), 5%);
|
||||||
|
|
||||||
|
--table-border-color: darken(var(--bg), 5%);
|
||||||
|
--table-header-bg: darken(var(--bg), 20%);
|
||||||
|
--table-alternate-bg: darken(var(--bg), 3%);
|
||||||
|
|
||||||
|
--searchbar-border-color: #aaa;
|
||||||
|
--searchbar-bg: #fafafa;
|
||||||
|
--searchbar-fg: #000;
|
||||||
|
--searchbar-shadow-color: #aaa;
|
||||||
|
--searchresults-header-fg: #666;
|
||||||
|
--searchresults-border-color: #888;
|
||||||
|
--searchresults-li-bg: #e4f2fe;
|
||||||
|
--search-mark-bg: #a2cff5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navy {
|
||||||
|
--bg: #161923;
|
||||||
|
--fg: #bcbdd0;
|
||||||
|
|
||||||
|
--sidebar-bg: #282d3f;
|
||||||
|
--sidebar-fg: #c8c9db;
|
||||||
|
--sidebar-non-existant: #505274;
|
||||||
|
--sidebar-active: #2b79a2;
|
||||||
|
--sidebar-spacer: #2d334f;
|
||||||
|
|
||||||
|
--scrollbar: var(--sidebar-fg);
|
||||||
|
|
||||||
|
--icons: #737480;
|
||||||
|
--icons-hover: #b7b9cc;
|
||||||
|
|
||||||
|
--links: #2b79a2;
|
||||||
|
|
||||||
|
--inline-code-color: #c5c8c6;;
|
||||||
|
|
||||||
|
--theme-popup-bg: #161923;
|
||||||
|
--theme-popup-border: #737480;
|
||||||
|
--theme-hover: #282e40;
|
||||||
|
|
||||||
|
--quote-bg: #262933;
|
||||||
|
--quote-border: lighten(var(--quote-bg), 5%);
|
||||||
|
|
||||||
|
--table-border-color: lighten(var(--bg), 5%);
|
||||||
|
--table-header-bg: lighten(var(--bg), 20%);
|
||||||
|
--table-alternate-bg: lighten(var(--bg), 3%);
|
||||||
|
|
||||||
|
--searchbar-border-color: #aaa;
|
||||||
|
--searchbar-bg: #aeaec6;
|
||||||
|
--searchbar-fg: #000;
|
||||||
|
--searchbar-shadow-color: #aaa;
|
||||||
|
--searchresults-header-fg: #5f5f71;
|
||||||
|
--searchresults-border-color: #5c5c68;
|
||||||
|
--searchresults-li-bg: #242430;
|
||||||
|
--search-mark-bg: #a2cff5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rust {
|
||||||
|
--bg: #e1e1db;
|
||||||
|
--fg: #262625;
|
||||||
|
|
||||||
|
--sidebar-bg: #3b2e2a;
|
||||||
|
--sidebar-fg: #c8c9db;
|
||||||
|
--sidebar-non-existant: #505254;
|
||||||
|
--sidebar-active: #e69f67;
|
||||||
|
--sidebar-spacer: #45373a;
|
||||||
|
|
||||||
|
--scrollbar: var(--sidebar-fg);
|
||||||
|
|
||||||
|
--icons: #737480;
|
||||||
|
--icons-hover: #262625;
|
||||||
|
|
||||||
|
--links: #2b79a2;
|
||||||
|
|
||||||
|
--inline-code-color: #6e6b5e;
|
||||||
|
|
||||||
|
--theme-popup-bg: #e1e1db;
|
||||||
|
--theme-popup-border: #b38f6b;
|
||||||
|
--theme-hover: #99908a;
|
||||||
|
|
||||||
|
--quote-bg: #c1c1bb;
|
||||||
|
--quote-border: darken(var(--quote-bg), 5%);
|
||||||
|
|
||||||
|
--table-border-color: darken(var(--bg), 5%);
|
||||||
|
--table-header-bg: #b3a497;
|
||||||
|
--table-alternate-bg: darken(var(--bg), 3%);
|
||||||
|
|
||||||
|
--searchbar-border-color: #aaa;
|
||||||
|
--searchbar-bg: #fafafa;
|
||||||
|
--searchbar-fg: #000;
|
||||||
|
--searchbar-shadow-color: #aaa;
|
||||||
|
--searchresults-header-fg: #666;
|
||||||
|
--searchresults-border-color: #888;
|
||||||
|
--searchresults-li-bg: #dec2a2;
|
||||||
|
--search-mark-bg: #e69f67;
|
||||||
|
}
|
|
@ -9,15 +9,18 @@
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<meta name="theme-color" content="#ffffff" />
|
<meta name="theme-color" content="#ffffff" />
|
||||||
|
|
||||||
<link rel="stylesheet" href="{{ path_to_root }}book.css">
|
<link rel="shortcut icon" href="{{ path_to_root }}{{ favicon }}">
|
||||||
|
<link rel="stylesheet" href="{{ path_to_root }}css/variables.css">
|
||||||
|
<link rel="stylesheet" href="{{ path_to_root }}css/general.css">
|
||||||
|
<link rel="stylesheet" href="{{ path_to_root }}css/chrome.css">
|
||||||
|
<link rel="stylesheet" href="{{ path_to_root }}css/print.css" media="print">
|
||||||
|
|
||||||
|
<!-- Fonts -->
|
||||||
|
<link rel="stylesheet" href="{{ path_to_root }}FontAwesome/css/font-awesome.css">
|
||||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css">
|
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css">
|
||||||
<link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:500" rel="stylesheet" type="text/css">
|
<link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:500" rel="stylesheet" type="text/css">
|
||||||
|
|
||||||
<link rel="shortcut icon" href="{{ favicon }}">
|
<!-- Highlight.js Stylesheets -->
|
||||||
|
|
||||||
<!-- Font Awesome -->
|
|
||||||
<link rel="stylesheet" href="{{ path_to_root }}FontAwesome/css/font-awesome.css">
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="{{ path_to_root }}highlight.css">
|
<link rel="stylesheet" href="{{ path_to_root }}highlight.css">
|
||||||
<link rel="stylesheet" href="{{ path_to_root }}tomorrow-night.css">
|
<link rel="stylesheet" href="{{ path_to_root }}tomorrow-night.css">
|
||||||
<link rel="stylesheet" href="{{ path_to_root }}ayu-highlight.css">
|
<link rel="stylesheet" href="{{ path_to_root }}ayu-highlight.css">
|
||||||
|
@ -31,9 +34,11 @@
|
||||||
<!-- MathJax -->
|
<!-- MathJax -->
|
||||||
<script async type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
<script async type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body class="light">
|
<body class="light">
|
||||||
|
<!-- Provide site root to javascript -->
|
||||||
|
<script type="text/javascript">var path_to_root = "{{ path_to_root }}";</script>
|
||||||
|
|
||||||
<!-- Work around some values being stored in localStorage wrapped in quotes -->
|
<!-- Work around some values being stored in localStorage wrapped in quotes -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
try {
|
try {
|
||||||
|
@ -218,12 +223,6 @@
|
||||||
<script src="{{ path_to_root }}theme-tomorrow_night.js" type="text/javascript" charset="utf-8"></script>
|
<script src="{{ path_to_root }}theme-tomorrow_night.js" type="text/javascript" charset="utf-8"></script>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if search_enabled}}
|
|
||||||
<script src="{{ path_to_root }}searchindex.js" type="text/javascript" charset="utf-8"></script>
|
|
||||||
<script>
|
|
||||||
var path_to_root = "{{path_to_root}}";
|
|
||||||
</script>
|
|
||||||
{{/if}}
|
|
||||||
{{#if search_js}}
|
{{#if search_js}}
|
||||||
<script src="{{ path_to_root }}elasticlunr.min.js" type="text/javascript" charset="utf-8"></script>
|
<script src="{{ path_to_root }}elasticlunr.min.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="{{ path_to_root }}mark.min.js" type="text/javascript" charset="utf-8"></script>
|
<script src="{{ path_to_root }}mark.min.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
|
|
@ -13,7 +13,10 @@ use errors::*;
|
||||||
|
|
||||||
pub static INDEX: &'static [u8] = include_bytes!("index.hbs");
|
pub static INDEX: &'static [u8] = include_bytes!("index.hbs");
|
||||||
pub static HEADER: &'static [u8] = include_bytes!("header.hbs");
|
pub static HEADER: &'static [u8] = include_bytes!("header.hbs");
|
||||||
pub static CSS: &'static [u8] = include_bytes!("book.css");
|
pub static CHROME_CSS: &'static [u8] = include_bytes!("css/chrome.css");
|
||||||
|
pub static GENERAL_CSS: &'static [u8] = include_bytes!("css/general.css");
|
||||||
|
pub static PRINT_CSS: &'static [u8] = include_bytes!("css/print.css");
|
||||||
|
pub static VARIABLES_CSS: &'static [u8] = include_bytes!("css/variables.css");
|
||||||
pub static FAVICON: &'static [u8] = include_bytes!("favicon.png");
|
pub static FAVICON: &'static [u8] = include_bytes!("favicon.png");
|
||||||
pub static JS: &'static [u8] = include_bytes!("book.js");
|
pub static JS: &'static [u8] = include_bytes!("book.js");
|
||||||
pub static HIGHLIGHT_JS: &'static [u8] = include_bytes!("highlight.js");
|
pub static HIGHLIGHT_JS: &'static [u8] = include_bytes!("highlight.js");
|
||||||
|
@ -44,7 +47,10 @@ pub static FONT_AWESOME_OTF: &'static [u8] = include_bytes!("FontAwesome/fonts/F
|
||||||
pub struct Theme {
|
pub struct Theme {
|
||||||
pub index: Vec<u8>,
|
pub index: Vec<u8>,
|
||||||
pub header: Vec<u8>,
|
pub header: Vec<u8>,
|
||||||
pub css: Vec<u8>,
|
pub chrome_css: Vec<u8>,
|
||||||
|
pub general_css: Vec<u8>,
|
||||||
|
pub print_css: Vec<u8>,
|
||||||
|
pub variables_css: Vec<u8>,
|
||||||
pub favicon: Vec<u8>,
|
pub favicon: Vec<u8>,
|
||||||
pub js: Vec<u8>,
|
pub js: Vec<u8>,
|
||||||
pub highlight_css: Vec<u8>,
|
pub highlight_css: Vec<u8>,
|
||||||
|
@ -72,7 +78,13 @@ impl Theme {
|
||||||
(theme_dir.join("index.hbs"), &mut theme.index),
|
(theme_dir.join("index.hbs"), &mut theme.index),
|
||||||
(theme_dir.join("header.hbs"), &mut theme.header),
|
(theme_dir.join("header.hbs"), &mut theme.header),
|
||||||
(theme_dir.join("book.js"), &mut theme.js),
|
(theme_dir.join("book.js"), &mut theme.js),
|
||||||
(theme_dir.join("book.css"), &mut theme.css),
|
(theme_dir.join("css/chrome.css"), &mut theme.chrome_css),
|
||||||
|
(theme_dir.join("css/general.css"), &mut theme.general_css),
|
||||||
|
(theme_dir.join("css/print.css"), &mut theme.print_css),
|
||||||
|
(
|
||||||
|
theme_dir.join("css/variables.css"),
|
||||||
|
&mut theme.variables_css,
|
||||||
|
),
|
||||||
(theme_dir.join("favicon.png"), &mut theme.favicon),
|
(theme_dir.join("favicon.png"), &mut theme.favicon),
|
||||||
(theme_dir.join("highlight.js"), &mut theme.highlight_js),
|
(theme_dir.join("highlight.js"), &mut theme.highlight_js),
|
||||||
(theme_dir.join("clipboard.min.js"), &mut theme.clipboard_js),
|
(theme_dir.join("clipboard.min.js"), &mut theme.clipboard_js),
|
||||||
|
@ -107,7 +119,10 @@ impl Default for Theme {
|
||||||
Theme {
|
Theme {
|
||||||
index: INDEX.to_owned(),
|
index: INDEX.to_owned(),
|
||||||
header: HEADER.to_owned(),
|
header: HEADER.to_owned(),
|
||||||
css: CSS.to_owned(),
|
chrome_css: CHROME_CSS.to_owned(),
|
||||||
|
general_css: GENERAL_CSS.to_owned(),
|
||||||
|
print_css: PRINT_CSS.to_owned(),
|
||||||
|
variables_css: VARIABLES_CSS.to_owned(),
|
||||||
favicon: FAVICON.to_owned(),
|
favicon: FAVICON.to_owned(),
|
||||||
js: JS.to_owned(),
|
js: JS.to_owned(),
|
||||||
highlight_css: HIGHLIGHT_CSS.to_owned(),
|
highlight_css: HIGHLIGHT_CSS.to_owned(),
|
||||||
|
@ -138,6 +153,7 @@ fn load_file_contents<P: AsRef<Path>>(filename: P, dest: &mut Vec<u8>) -> Result
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
use std::fs;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use tempfile::Builder as TempFileBuilder;
|
use tempfile::Builder as TempFileBuilder;
|
||||||
|
|
||||||
|
@ -154,21 +170,28 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn theme_dir_overrides_defaults() {
|
fn theme_dir_overrides_defaults() {
|
||||||
// Get all the non-Rust files in the theme directory
|
let files = [
|
||||||
let special_files = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
"index.hbs",
|
||||||
.join("src/theme")
|
"header.hbs",
|
||||||
.read_dir()
|
"favicon.png",
|
||||||
.unwrap()
|
"css/chrome.css",
|
||||||
.filter_map(|f| f.ok())
|
"css/general.css",
|
||||||
.map(|f| f.path())
|
"css/print.css",
|
||||||
.filter(|p| p.is_file() && !p.ends_with(".rs"));
|
"css/variables.css",
|
||||||
|
"book.js",
|
||||||
|
"highlight.js",
|
||||||
|
"tomorrow-night.css",
|
||||||
|
"highlight.css",
|
||||||
|
"ayu-highlight.css",
|
||||||
|
"clipboard.min.js",
|
||||||
|
];
|
||||||
|
|
||||||
let temp = TempFileBuilder::new().prefix("mdbook").tempdir().unwrap();
|
let temp = TempFileBuilder::new().prefix("mdbook-").tempdir().unwrap();
|
||||||
|
fs::create_dir(temp.path().join("css")).unwrap();
|
||||||
|
|
||||||
// "touch" all of the special files so we have empty copies
|
// "touch" all of the special files so we have empty copies
|
||||||
for special_file in special_files {
|
for file in &files {
|
||||||
let filename = temp.path().join(special_file.file_name().unwrap());
|
File::create(&temp.path().join(file)).unwrap();
|
||||||
let _ = File::create(&filename);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let got = Theme::new(temp.path());
|
let got = Theme::new(temp.path());
|
||||||
|
@ -176,7 +199,10 @@ mod tests {
|
||||||
let empty = Theme {
|
let empty = Theme {
|
||||||
index: Vec::new(),
|
index: Vec::new(),
|
||||||
header: Vec::new(),
|
header: Vec::new(),
|
||||||
css: Vec::new(),
|
chrome_css: Vec::new(),
|
||||||
|
general_css: Vec::new(),
|
||||||
|
print_css: Vec::new(),
|
||||||
|
variables_css: Vec::new(),
|
||||||
favicon: Vec::new(),
|
favicon: Vec::new(),
|
||||||
js: Vec::new(),
|
js: Vec::new(),
|
||||||
highlight_css: Vec::new(),
|
highlight_css: Vec::new(),
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
@import "nib"
|
|
||||||
|
|
||||||
@import 'general'
|
|
||||||
@import 'sidebar'
|
|
||||||
@import 'page'
|
|
||||||
@import 'menu'
|
|
||||||
@import 'nav-icons'
|
|
||||||
@import 'theme-popup'
|
|
||||||
@import 'themes'
|
|
||||||
@import 'print'
|
|
||||||
@import 'tooltip'
|
|
||||||
@import 'searchbar'
|
|
|
@ -1,73 +0,0 @@
|
||||||
html {
|
|
||||||
font-family: "Open Sans", sans-serif
|
|
||||||
color: #333
|
|
||||||
text-size-adjust: none
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
font-size: 1rem;
|
|
||||||
overflow-x: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
font-family: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace;
|
|
||||||
font-size: 0.875em; // please adjust the ace font size accordingly in editor.js
|
|
||||||
}
|
|
||||||
|
|
||||||
.left {
|
|
||||||
float: left
|
|
||||||
}
|
|
||||||
|
|
||||||
.right {
|
|
||||||
float: right
|
|
||||||
}
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.play-button.hidden {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2, h3 { margin-top: 2.5em }
|
|
||||||
h4, h5 { margin-top: 2em }
|
|
||||||
|
|
||||||
.header + .header h3, .header + .header h4, .header + .header h5 { margin-top: 1em }
|
|
||||||
|
|
||||||
a.header:target h1:before,
|
|
||||||
a.header:target h2:before,
|
|
||||||
a.header:target h3:before,
|
|
||||||
a.header:target h4:before {
|
|
||||||
display: inline-block;
|
|
||||||
content: "»";
|
|
||||||
margin-left: -30px;
|
|
||||||
width: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
margin: 0 auto;
|
|
||||||
border-collapse: collapse;
|
|
||||||
|
|
||||||
td {
|
|
||||||
padding: 3px 20px;
|
|
||||||
border: 1px solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
thead {
|
|
||||||
td { font-weight: 700; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
:not(.footnote-definition) + .footnote-definition,
|
|
||||||
.footnote-definition + :not(.footnote-definition) {
|
|
||||||
margin-top: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footnote-definition {
|
|
||||||
font-size: 0.9em;
|
|
||||||
margin: 0.5em 0;
|
|
||||||
|
|
||||||
p { display: inline; }
|
|
||||||
}
|
|
|
@ -1,55 +0,0 @@
|
||||||
#menu-bar {
|
|
||||||
position: -webkit-sticky
|
|
||||||
position: sticky
|
|
||||||
top: 0
|
|
||||||
z-index: 101
|
|
||||||
|
|
||||||
& > #menu-bar-sticky-container {
|
|
||||||
display: flex
|
|
||||||
flex-wrap: wrap
|
|
||||||
.js & {
|
|
||||||
transition: transform 0.3s
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
i, .icon-button {
|
|
||||||
position: relative
|
|
||||||
margin: 0 8px
|
|
||||||
@media only screen and (max-width: $narrow-device-max-width) {
|
|
||||||
margin: 0 5px
|
|
||||||
}
|
|
||||||
z-index: 10
|
|
||||||
line-height: 50px
|
|
||||||
cursor: pointer
|
|
||||||
transition: color 0.5s
|
|
||||||
}
|
|
||||||
|
|
||||||
#print-button {
|
|
||||||
margin: 0 15px
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
html:not(.sidebar-visible) #menu-bar:not(:hover).folded > #menu-bar-sticky-container {
|
|
||||||
transform: translateY(-60px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.left-buttons {
|
|
||||||
.no-js & { display: none }
|
|
||||||
margin: 0 5px
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-title {
|
|
||||||
display: inline-block
|
|
||||||
font-weight: 200
|
|
||||||
font-size: 20px
|
|
||||||
line-height: 50px
|
|
||||||
text-align: center
|
|
||||||
margin: 0
|
|
||||||
flex: 1
|
|
||||||
white-space: nowrap
|
|
||||||
overflow: hidden
|
|
||||||
text-overflow: ellipsis
|
|
||||||
.js & {
|
|
||||||
cursor: pointer
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,55 +0,0 @@
|
||||||
.nav-chapters {
|
|
||||||
font-size: 2.5em
|
|
||||||
text-align: center
|
|
||||||
text-decoration: none
|
|
||||||
|
|
||||||
position: fixed
|
|
||||||
top: 50px /* Height of menu-bar */
|
|
||||||
bottom: 0
|
|
||||||
margin: 0
|
|
||||||
max-width: 150px
|
|
||||||
min-width: 90px
|
|
||||||
|
|
||||||
display: flex
|
|
||||||
justify-content: center
|
|
||||||
align-content: center
|
|
||||||
flex-direction: column
|
|
||||||
|
|
||||||
transition: color 0.5s
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-chapters:hover { text-decoration: none }
|
|
||||||
|
|
||||||
.nav-wrapper {
|
|
||||||
margin-top: 50px
|
|
||||||
display: none
|
|
||||||
}
|
|
||||||
|
|
||||||
.mobile-nav-chapters {
|
|
||||||
font-size: 2.5em
|
|
||||||
text-align: center
|
|
||||||
text-decoration: none
|
|
||||||
width: 90px
|
|
||||||
border-radius: 5px
|
|
||||||
}
|
|
||||||
|
|
||||||
.previous {
|
|
||||||
float: left
|
|
||||||
}
|
|
||||||
|
|
||||||
.next {
|
|
||||||
float: right
|
|
||||||
right: $page-padding
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-width: $page-plus-sidebar-width) {
|
|
||||||
.nav-wide-wrapper { display: none }
|
|
||||||
.nav-wrapper { display: block }
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-width: $page-plus-sidebar-width + $sidebar-width) {
|
|
||||||
.sidebar-visible {
|
|
||||||
.nav-wide-wrapper { display: none }
|
|
||||||
.nav-wrapper { display: block }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
@require 'variables'
|
|
||||||
|
|
||||||
.page-wrapper {
|
|
||||||
box-sizing: border-box
|
|
||||||
|
|
||||||
// Animation: slide away
|
|
||||||
.js & {
|
|
||||||
transition: margin-left 0.3s ease, transform 0.3s ease
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-visible .page-wrapper {
|
|
||||||
transform: translateX($sidebar-width)
|
|
||||||
|
|
||||||
@media only screen and (min-width: $sidebar-reflow-width) {
|
|
||||||
transform: none
|
|
||||||
margin-left: $sidebar-width
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.page {
|
|
||||||
outline: 0
|
|
||||||
padding: 0 $page-padding
|
|
||||||
}
|
|
||||||
|
|
||||||
.content {
|
|
||||||
overflow-y: auto
|
|
||||||
padding: 0 15px
|
|
||||||
padding-bottom: 50px
|
|
||||||
|
|
||||||
main {
|
|
||||||
margin-left: auto
|
|
||||||
margin-right: auto
|
|
||||||
max-width: $content-max-width
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
text-decoration: none;
|
|
||||||
&:hover { text-decoration: underline; }
|
|
||||||
}
|
|
||||||
|
|
||||||
img { max-width: 100%; }
|
|
||||||
}
|
|
|
@ -1,56 +0,0 @@
|
||||||
@media only print {
|
|
||||||
|
|
||||||
#sidebar,
|
|
||||||
#menu-bar,
|
|
||||||
.nav-chapters,
|
|
||||||
.mobile-nav-chapters {
|
|
||||||
display: none
|
|
||||||
}
|
|
||||||
|
|
||||||
#page-wrapper.page-wrapper {
|
|
||||||
transform: none;
|
|
||||||
margin-left: 0px;
|
|
||||||
overflow-y: initial;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content {
|
|
||||||
max-width: none;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.page {
|
|
||||||
overflow-y: initial;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
background-color: #666666
|
|
||||||
border-radius: 5px
|
|
||||||
|
|
||||||
/* Force background to be printed in Chrome */
|
|
||||||
-webkit-print-color-adjust: exact
|
|
||||||
}
|
|
||||||
|
|
||||||
pre > .buttons {
|
|
||||||
z-index: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
a, a:visited, a:active, a:hover {
|
|
||||||
color: #4183c4
|
|
||||||
text-decoration: none
|
|
||||||
}
|
|
||||||
|
|
||||||
h1, h2, h3, h4, h5, h6 {
|
|
||||||
page-break-inside: avoid
|
|
||||||
page-break-after: avoid
|
|
||||||
}
|
|
||||||
|
|
||||||
pre, code {
|
|
||||||
page-break-inside: avoid
|
|
||||||
white-space: pre-wrap
|
|
||||||
}
|
|
||||||
|
|
||||||
.fa {
|
|
||||||
display: none !important
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,66 +0,0 @@
|
||||||
@require 'variables'
|
|
||||||
|
|
||||||
#searchresults a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
mark {
|
|
||||||
border-radius: 2px;
|
|
||||||
padding: 0 3px 1px 3px;
|
|
||||||
margin: 0 -3px -1px -3px;
|
|
||||||
transition: background-color 300ms linear;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
mark.fade-out {
|
|
||||||
background-color: rgba(0,0,0,0) !important;
|
|
||||||
cursor: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.searchbar-outer {
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
max-width: $content-max-width;
|
|
||||||
}
|
|
||||||
|
|
||||||
#searchbar {
|
|
||||||
width: 100%;
|
|
||||||
margin: 5px auto 0px auto;
|
|
||||||
padding: 10px 16px;
|
|
||||||
transition: box-shadow 300ms ease-in-out;
|
|
||||||
}
|
|
||||||
|
|
||||||
.searchresults-header {
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 1em;
|
|
||||||
padding: 18px 0 0 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.searchresults-outer {
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
max-width: $content-max-width;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul#searchresults {
|
|
||||||
list-style: none;
|
|
||||||
padding-left: 20px;
|
|
||||||
|
|
||||||
li {
|
|
||||||
margin: 10px 0px;
|
|
||||||
padding: 2px;
|
|
||||||
border-radius: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.teaser {
|
|
||||||
display: block;
|
|
||||||
clear: both;
|
|
||||||
margin: 5px 0 0 20px;
|
|
||||||
font-size: 0.8em;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.teaser em {
|
|
||||||
font-weight: bold;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,56 +0,0 @@
|
||||||
@require 'variables'
|
|
||||||
|
|
||||||
.sidebar {
|
|
||||||
position: fixed
|
|
||||||
left: 0
|
|
||||||
top: 0
|
|
||||||
bottom: 0
|
|
||||||
width: $sidebar-width
|
|
||||||
overflow-y: auto
|
|
||||||
padding: 10px 10px
|
|
||||||
font-size: 0.875em
|
|
||||||
box-sizing: border-box
|
|
||||||
-webkit-overflow-scrolling: touch
|
|
||||||
overscroll-behavior-y: contain;
|
|
||||||
|
|
||||||
// Animation: slide away
|
|
||||||
.js & {
|
|
||||||
transition: transform 0.3s
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
line-height: 2em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-hidden .sidebar {
|
|
||||||
transform: translateX(- $sidebar-width)
|
|
||||||
}
|
|
||||||
|
|
||||||
.chapter {
|
|
||||||
list-style: none outside none
|
|
||||||
padding-left: 0
|
|
||||||
line-height: 2.2em
|
|
||||||
|
|
||||||
li a {
|
|
||||||
display: block;
|
|
||||||
padding: 0
|
|
||||||
text-decoration: none
|
|
||||||
|
|
||||||
@media (-moz-touch-enabled: 1), (pointer: coarse) { padding: 5px 0; }
|
|
||||||
&:hover { text-decoration: none }
|
|
||||||
}
|
|
||||||
|
|
||||||
.spacer {
|
|
||||||
width: 100%
|
|
||||||
height: 3px
|
|
||||||
margin: 5px 0px
|
|
||||||
@media (-moz-touch-enabled: 1), (pointer: coarse) { margin: 10px 0; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.section {
|
|
||||||
list-style: none outside none
|
|
||||||
padding-left: 20px
|
|
||||||
line-height: 1.9em
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
.theme-popup {
|
|
||||||
position: absolute
|
|
||||||
left: 10px
|
|
||||||
|
|
||||||
z-index: 1000;
|
|
||||||
|
|
||||||
border-radius: 4px
|
|
||||||
font-size: 0.7em
|
|
||||||
|
|
||||||
.theme {
|
|
||||||
display: inline
|
|
||||||
border: 0
|
|
||||||
margin: 0
|
|
||||||
padding: 2px 10px
|
|
||||||
line-height: 25px
|
|
||||||
width: 100%
|
|
||||||
white-space: nowrap
|
|
||||||
text-align: left
|
|
||||||
cursor: pointer
|
|
||||||
color inherit
|
|
||||||
background: inherit;
|
|
||||||
font-size: inherit;
|
|
||||||
|
|
||||||
&:hover:first-child,
|
|
||||||
&:hover:last-child {
|
|
||||||
border-top-left-radius: inherit;
|
|
||||||
border-top-right-radius: inherit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
$theme-name = 'ayu'
|
|
||||||
|
|
||||||
$bg = #0f1419
|
|
||||||
$fg = #c5c5c5
|
|
||||||
|
|
||||||
$sidebar-bg = #14191f
|
|
||||||
$sidebar-fg = #c8c9db
|
|
||||||
$sidebar-non-existant = #5c6773
|
|
||||||
$sidebar-active = #ffb454
|
|
||||||
$sidebar-spacer = #2d334f
|
|
||||||
|
|
||||||
$scrollbar = $sidebar-fg
|
|
||||||
|
|
||||||
$icons = #737480
|
|
||||||
$icons-hover = #b7b9cc
|
|
||||||
|
|
||||||
$links = #0096cf
|
|
||||||
|
|
||||||
$inline-code-color = #ffb454
|
|
||||||
|
|
||||||
$theme-popup-bg = #14191f
|
|
||||||
$theme-popup-border = #5c6773
|
|
||||||
$theme-hover = #191f26
|
|
||||||
|
|
||||||
$quote-bg = #262933
|
|
||||||
$quote-border = lighten($quote-bg, 5%)
|
|
||||||
|
|
||||||
$table-border-color = lighten($bg, 5%)
|
|
||||||
$table-header-bg = lighten($bg, 20%)
|
|
||||||
$table-alternate-bg = lighten($bg, 3%)
|
|
||||||
|
|
||||||
$searchbar-border-color = #848484
|
|
||||||
$searchbar-bg = #424242
|
|
||||||
$searchbar-fg = #fff
|
|
||||||
$searchbar-shadow-color = #d4c89f
|
|
||||||
$searchresults-header-fg = #666
|
|
||||||
$searchresults-border-color = #888
|
|
||||||
$searchresults-li-bg = #252932
|
|
||||||
$search-mark-bg = #e3b171
|
|
||||||
|
|
||||||
@import 'base'
|
|
|
@ -1,221 +0,0 @@
|
||||||
.{unquote($theme-name)} {
|
|
||||||
|
|
||||||
color: $fg
|
|
||||||
background-color: $bg
|
|
||||||
|
|
||||||
.content .header:link, .content .header:visited {
|
|
||||||
color: $fg;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-bar {
|
|
||||||
margin: auto (- $page-padding);
|
|
||||||
|
|
||||||
& > #menu-bar-sticky-container {
|
|
||||||
background-color: $bg
|
|
||||||
border-bottom-color: $bg
|
|
||||||
border-bottom-width: 1px
|
|
||||||
border-bottom-style: solid
|
|
||||||
}
|
|
||||||
|
|
||||||
&.bordered > #menu-bar-sticky-container {
|
|
||||||
border-bottom-color: $table-border-color
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$table-border-color
|
|
||||||
|
|
||||||
.sidebar {
|
|
||||||
background-color: $sidebar-bg
|
|
||||||
color: $sidebar-fg
|
|
||||||
|
|
||||||
&::-webkit-scrollbar {
|
|
||||||
background: $sidebar-bg;
|
|
||||||
}
|
|
||||||
|
|
||||||
&::-webkit-scrollbar-thumb {
|
|
||||||
background: $scrollbar;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.chapter li {
|
|
||||||
color: $sidebar-non-existant
|
|
||||||
|
|
||||||
a { color: $sidebar-fg }
|
|
||||||
|
|
||||||
.active,
|
|
||||||
a:hover, {
|
|
||||||
/* Animate color change */
|
|
||||||
color: $sidebar-active
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.chapter .spacer {
|
|
||||||
background-color: $sidebar-spacer
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-bar,
|
|
||||||
.menu-bar:visited,
|
|
||||||
.nav-chapters,
|
|
||||||
.nav-chapters:visited,
|
|
||||||
.mobile-nav-chapters,
|
|
||||||
.mobile-nav-chapters:visited,
|
|
||||||
.menu-bar .icon-button,
|
|
||||||
.menu-bar a i {
|
|
||||||
color: $icons
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-bar i:hover,
|
|
||||||
.menu-bar .icon-button:hover,
|
|
||||||
.nav-chapters:hover,
|
|
||||||
.mobile-nav-chapters i:hover {
|
|
||||||
color: $icons-hover
|
|
||||||
}
|
|
||||||
|
|
||||||
.mobile-nav-chapters i:hover {
|
|
||||||
color: $sidebar-fg
|
|
||||||
}
|
|
||||||
|
|
||||||
.mobile-nav-chapters {
|
|
||||||
background-color: $sidebar-bg
|
|
||||||
}
|
|
||||||
|
|
||||||
#searchresults a,
|
|
||||||
.content a:link,
|
|
||||||
a:visited,
|
|
||||||
a > .hljs {
|
|
||||||
color: $links
|
|
||||||
}
|
|
||||||
|
|
||||||
.theme-popup {
|
|
||||||
color: $fg
|
|
||||||
background: $theme-popup-bg
|
|
||||||
border: 1px solid $theme-popup-border
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
list-style: none;
|
|
||||||
display: none;
|
|
||||||
|
|
||||||
.theme:hover { background-color: $theme-hover }
|
|
||||||
|
|
||||||
.default { color: $icons }
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
margin: 20px 0;
|
|
||||||
padding: 0 20px;
|
|
||||||
color: $fg;
|
|
||||||
background-color: $quote-bg;
|
|
||||||
border-top: .1em solid $quote-border;
|
|
||||||
border-bottom: .1em solid $quote-border;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
table {
|
|
||||||
|
|
||||||
td {
|
|
||||||
border-color: $table-border-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Alternate background colors for rows
|
|
||||||
tbody tr:nth-child(2n) {
|
|
||||||
background: $table-alternate-bg;
|
|
||||||
}
|
|
||||||
|
|
||||||
thead {
|
|
||||||
background: $table-header-bg;
|
|
||||||
td { border: none; }
|
|
||||||
tr { border: 1px $table-header-bg solid; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Inline code */
|
|
||||||
:not(pre) > .hljs {
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: middle;
|
|
||||||
padding: 0.1em 0.3em;
|
|
||||||
border-radius: 3px;
|
|
||||||
color: $inline-code-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover > .hljs {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
& > .buttons {
|
|
||||||
position: absolute;
|
|
||||||
z-index: 100;
|
|
||||||
right: 5px;
|
|
||||||
top: 5px;
|
|
||||||
|
|
||||||
color: $sidebar-fg;
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
:hover { color: $sidebar-active; }
|
|
||||||
i { margin-left: 8px; }
|
|
||||||
button {
|
|
||||||
color: inherit;
|
|
||||||
background: transparent;
|
|
||||||
border: none;
|
|
||||||
cursor: inherit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
& > .result { margin-top: 10px; }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-button {
|
|
||||||
border: none;
|
|
||||||
background: none;
|
|
||||||
padding: 0;
|
|
||||||
color: inherit;
|
|
||||||
|
|
||||||
i {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-scrollbar {
|
|
||||||
background: $bg;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-scrollbar-thumb {
|
|
||||||
background: $scrollbar;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Search */
|
|
||||||
#searchbar {
|
|
||||||
border: 1px solid $searchbar-border-color;
|
|
||||||
border-radius: 3px;
|
|
||||||
background-color: $searchbar-bg;
|
|
||||||
color: $searchbar-fg
|
|
||||||
|
|
||||||
&:focus, &.active {
|
|
||||||
box-shadow: 0 0 3px $searchbar-shadow-color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.searchresults-header {
|
|
||||||
color: $searchresults-header-fg;
|
|
||||||
}
|
|
||||||
|
|
||||||
.searchresults-outer {
|
|
||||||
border-bottom: 1px dashed $searchresults-border-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul#searchresults li.focus {
|
|
||||||
background-color: $searchresults-li-bg;
|
|
||||||
}
|
|
||||||
|
|
||||||
mark {
|
|
||||||
background-color: $search-mark-bg;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
$theme-name = 'coal'
|
|
||||||
|
|
||||||
$bg = #141617
|
|
||||||
$fg = #98a3ad
|
|
||||||
|
|
||||||
$sidebar-bg = #292c2f
|
|
||||||
$sidebar-fg = #a1adb8
|
|
||||||
$sidebar-non-existant = #505254
|
|
||||||
$sidebar-active = #3473ad
|
|
||||||
$sidebar-spacer = #393939
|
|
||||||
|
|
||||||
$scrollbar = $sidebar-fg
|
|
||||||
|
|
||||||
$icons = #43484d
|
|
||||||
$icons-hover = #b3c0cc
|
|
||||||
|
|
||||||
$links = #2b79a2
|
|
||||||
|
|
||||||
$inline-code-color = #c5c8c6;
|
|
||||||
|
|
||||||
$theme-popup-bg = #141617
|
|
||||||
$theme-popup-border = #43484d
|
|
||||||
$theme-hover = #1f2124
|
|
||||||
|
|
||||||
$quote-bg = #242637
|
|
||||||
$quote-border = lighten($quote-bg, 5%)
|
|
||||||
|
|
||||||
$table-border-color = lighten($bg, 5%)
|
|
||||||
$table-header-bg = lighten($bg, 20%)
|
|
||||||
$table-alternate-bg = lighten($bg, 3%)
|
|
||||||
|
|
||||||
$searchbar-border-color = #aaa
|
|
||||||
$searchbar-bg = #b7b7b7
|
|
||||||
$searchbar-fg = #000
|
|
||||||
$searchbar-shadow-color = #aaa
|
|
||||||
$searchresults-header-fg = #666
|
|
||||||
$searchresults-border-color = #98a3ad
|
|
||||||
$searchresults-li-bg = #2b2b2f
|
|
||||||
$search-mark-bg = #355c7d
|
|
||||||
|
|
||||||
@import 'base'
|
|
|
@ -1,5 +0,0 @@
|
||||||
@import 'light'
|
|
||||||
@import 'coal'
|
|
||||||
@import 'navy'
|
|
||||||
@import 'rust'
|
|
||||||
@import 'ayu'
|
|
|
@ -1,41 +0,0 @@
|
||||||
$theme-name = 'light'
|
|
||||||
|
|
||||||
$bg = #ffffff
|
|
||||||
$fg = #333333
|
|
||||||
|
|
||||||
$sidebar-bg = #fafafa
|
|
||||||
$sidebar-fg = #364149
|
|
||||||
$sidebar-non-existant = #aaaaaa
|
|
||||||
$sidebar-active = #008cff
|
|
||||||
$sidebar-spacer = #f4f4f4
|
|
||||||
|
|
||||||
$scrollbar = #cccccc
|
|
||||||
|
|
||||||
$icons = #cccccc
|
|
||||||
$icons-hover = #333333
|
|
||||||
|
|
||||||
$links = #4183c4
|
|
||||||
|
|
||||||
$inline-code-color = #6e6b5e
|
|
||||||
|
|
||||||
$theme-popup-bg = #fafafa
|
|
||||||
$theme-popup-border = #cccccc
|
|
||||||
$theme-hover = #e6e6e6
|
|
||||||
|
|
||||||
$quote-bg = #f2f7f9
|
|
||||||
$quote-border = darken($quote-bg, 5%)
|
|
||||||
|
|
||||||
$table-border-color = darken($bg, 5%)
|
|
||||||
$table-header-bg = darken($bg, 20%)
|
|
||||||
$table-alternate-bg = darken($bg, 3%)
|
|
||||||
|
|
||||||
$searchbar-border-color = #aaa
|
|
||||||
$searchbar-bg = #fafafa
|
|
||||||
$searchbar-fg = #000
|
|
||||||
$searchbar-shadow-color = #aaa
|
|
||||||
$searchresults-header-fg = #666
|
|
||||||
$searchresults-border-color = #888
|
|
||||||
$searchresults-li-bg = #e4f2fe
|
|
||||||
$search-mark-bg = #a2cff5
|
|
||||||
|
|
||||||
@import 'base'
|
|
|
@ -1,41 +0,0 @@
|
||||||
$theme-name = 'navy'
|
|
||||||
|
|
||||||
$bg = #161923
|
|
||||||
$fg = #bcbdd0
|
|
||||||
|
|
||||||
$sidebar-bg = #282d3f
|
|
||||||
$sidebar-fg = #c8c9db
|
|
||||||
$sidebar-non-existant = #505274
|
|
||||||
$sidebar-active = #2b79a2
|
|
||||||
$sidebar-spacer = #2d334f
|
|
||||||
|
|
||||||
$scrollbar = $sidebar-fg
|
|
||||||
|
|
||||||
$icons = #737480
|
|
||||||
$icons-hover = #b7b9cc
|
|
||||||
|
|
||||||
$links = #2b79a2
|
|
||||||
|
|
||||||
$inline-code-color = #c5c8c6;
|
|
||||||
|
|
||||||
$theme-popup-bg = #161923
|
|
||||||
$theme-popup-border = #737480
|
|
||||||
$theme-hover = #282e40
|
|
||||||
|
|
||||||
$quote-bg = #262933
|
|
||||||
$quote-border = lighten($quote-bg, 5%)
|
|
||||||
|
|
||||||
$table-border-color = lighten($bg, 5%)
|
|
||||||
$table-header-bg = lighten($bg, 20%)
|
|
||||||
$table-alternate-bg = lighten($bg, 3%)
|
|
||||||
|
|
||||||
$searchbar-border-color = #aaa
|
|
||||||
$searchbar-bg = #aeaec6
|
|
||||||
$searchbar-fg = #000
|
|
||||||
$searchbar-shadow-color = #aaa
|
|
||||||
$searchresults-header-fg = #5f5f71
|
|
||||||
$searchresults-border-color = #5c5c68
|
|
||||||
$searchresults-li-bg = #242430
|
|
||||||
$search-mark-bg = #a2cff5
|
|
||||||
|
|
||||||
@import 'base'
|
|
|
@ -1,41 +0,0 @@
|
||||||
$theme-name = 'rust'
|
|
||||||
|
|
||||||
$bg = #e1e1db
|
|
||||||
$fg = #262625
|
|
||||||
|
|
||||||
$sidebar-bg = #3b2e2a
|
|
||||||
$sidebar-fg = #c8c9db
|
|
||||||
$sidebar-non-existant = #505254
|
|
||||||
$sidebar-active = #e69f67
|
|
||||||
$sidebar-spacer = #45373a
|
|
||||||
|
|
||||||
$scrollbar = $sidebar-fg
|
|
||||||
|
|
||||||
$icons = #737480
|
|
||||||
$icons-hover = #262625
|
|
||||||
|
|
||||||
$links = #2b79a2
|
|
||||||
|
|
||||||
$inline-code-color = #6e6b5e;
|
|
||||||
|
|
||||||
$theme-popup-bg = #e1e1db
|
|
||||||
$theme-popup-border = #b38f6b
|
|
||||||
$theme-hover = #99908a
|
|
||||||
|
|
||||||
$quote-bg = #c1c1bb
|
|
||||||
$quote-border = darken($quote-bg, 5%)
|
|
||||||
|
|
||||||
$table-border-color = darken($bg, 5%)
|
|
||||||
$table-header-bg = #b3a497
|
|
||||||
$table-alternate-bg = darken($bg, 3%)
|
|
||||||
|
|
||||||
$searchbar-border-color = #aaa
|
|
||||||
$searchbar-bg = #fafafa
|
|
||||||
$searchbar-fg = #000
|
|
||||||
$searchbar-shadow-color = #aaa
|
|
||||||
$searchresults-header-fg = #666
|
|
||||||
$searchresults-border-color = #888
|
|
||||||
$searchresults-li-bg = #dec2a2
|
|
||||||
$search-mark-bg = #e69f67
|
|
||||||
|
|
||||||
@import 'base'
|
|
|
@ -1,18 +0,0 @@
|
||||||
.tooltiptext {
|
|
||||||
position: absolute;
|
|
||||||
visibility: hidden;
|
|
||||||
color: #fff;
|
|
||||||
background-color: #333;
|
|
||||||
transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */
|
|
||||||
left: -8px; /* Half of the width of the icon */
|
|
||||||
top: -35px;
|
|
||||||
font-size: 0.8em;
|
|
||||||
text-align: center;
|
|
||||||
border-radius: 6px;
|
|
||||||
padding: 5px 8px;
|
|
||||||
margin: 5px;
|
|
||||||
z-index: 1000;
|
|
||||||
}
|
|
||||||
.tooltipped .tooltiptext {
|
|
||||||
visibility: visible;
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
$sidebar-width = 300px
|
|
||||||
$page-padding = 15px
|
|
||||||
$content-max-width = 750px
|
|
||||||
$content-min-width = 320px
|
|
||||||
$page-plus-sidebar-width = $content-max-width + $sidebar-width + $page-padding * 2
|
|
||||||
$sidebar-reflow-width = $sidebar-width + $content-min-width
|
|
||||||
$narrow-device-max-width = 420px
|
|
Loading…
Reference in New Issue