diff options
| author | Sean Collins <sean@cllns.com> | 2015-05-17 17:05:23 -0400 |
|---|---|---|
| committer | Sean Collins <sean@cllns.com> | 2015-05-17 17:05:23 -0400 |
| commit | 99868f6ba8c3afb56a92e144fe17bdbe018fa8ec (patch) | |
| tree | 569cb949ae56c4844200e792fe965fb305f27cae | |
| parent | 8b7c17db2235a2a3f2c71242b11fc429a8d05a90 (diff) | |
| download | rust-99868f6ba8c3afb56a92e144fe17bdbe018fa8ec.tar.gz rust-99868f6ba8c3afb56a92e144fe17bdbe018fa8ec.zip | |
Add 'active' class to current page in rustbook table of contents
| -rw-r--r-- | src/rustbook/build.rs | 25 | ||||
| -rw-r--r-- | src/rustbook/css.rs | 5 |
2 files changed, 21 insertions, 9 deletions
diff --git a/src/rustbook/build.rs b/src/rustbook/build.rs index 47bdc9335c4..31c973214a1 100644 --- a/src/rustbook/build.rs +++ b/src/rustbook/build.rs @@ -37,27 +37,34 @@ pub fn parse_cmd(name: &str) -> Option<Box<Subcommand>> { } } -fn write_toc(book: &Book, path_to_root: &Path, out: &mut Write) -> io::Result<()> { +fn write_toc(book: &Book, current_page: &BookItem, out: &mut Write) -> io::Result<()> { fn walk_items(items: &[BookItem], section: &str, - path_to_root: &Path, + current_page: &BookItem, out: &mut Write) -> io::Result<()> { for (i, item) in items.iter().enumerate() { - try!(walk_item(item, &format!("{}{}.", section, i + 1)[..], path_to_root, out)); + try!(walk_item(item, &format!("{}{}.", section, i + 1)[..], current_page, out)); } Ok(()) } fn walk_item(item: &BookItem, section: &str, - path_to_root: &Path, + current_page: &BookItem, out: &mut Write) -> io::Result<()> { - try!(writeln!(out, "<li><a href='{}'><b>{}</b> {}</a>", - path_to_root.join(&item.path.with_extension("html")).display(), + let class_string = if item.path == current_page.path { + "class='active'" + } else { + "" + }; + + try!(writeln!(out, "<li><a {} href='{}'><b>{}</b> {}</a>", + class_string, + item.path_to_root.join(&item.path.with_extension("html")).display(), section, item.title)); if !item.children.is_empty() { try!(writeln!(out, "<ul class='section'>")); - let _ = walk_items(&item.children[..], section, path_to_root, out); + let _ = walk_items(&item.children[..], section, current_page, out); try!(writeln!(out, "</ul>")); } try!(writeln!(out, "</li>")); @@ -67,7 +74,7 @@ fn write_toc(book: &Book, path_to_root: &Path, out: &mut Write) -> io::Result<() try!(writeln!(out, "<div id='toc' class='mobile-hidden'>")); try!(writeln!(out, "<ul class='chapter'>")); - try!(walk_items(&book.chapters[..], "", path_to_root, out)); + try!(walk_items(&book.chapters[..], "", ¤t_page, out)); try!(writeln!(out, "</ul>")); try!(writeln!(out, "</div>")); @@ -115,7 +122,7 @@ fn render(book: &Book, tgt: &Path) -> CliResult<()> { <span class="bar"></span> </button> </div>"#)); - let _ = write_toc(book, &item.path_to_root, &mut toc); + let _ = write_toc(book, &item, &mut toc); try!(writeln!(&mut toc, "<div id='page-wrapper'>")); try!(writeln!(&mut toc, "<div id='page'>")); } diff --git a/src/rustbook/css.rs b/src/rustbook/css.rs index a5192eefd57..aae5f21a73d 100644 --- a/src/rustbook/css.rs +++ b/src/rustbook/css.rs @@ -97,6 +97,11 @@ body { color: #000000; } +.chapter li a.active { + text-decoration: underline; + font-weight: bold; +} + #toggle-nav { height: 20px; width: 30px; |
