From 6709685377487475c2911af3d996650553339685 Mon Sep 17 00:00:00 2001 From: Mathieu David Date: Fri, 12 Jun 2015 11:32:25 +0200 Subject: [PATCH] separate css and js from rust --- src/rustbook/build.rs | 18 ++++-- src/rustbook/javascript.rs | 62 +------------------- src/rustbook/main.rs | 1 - src/rustbook/{css.rs => static/rustbook.css} | 16 +---- src/rustbook/static/rustbook.js | 60 +++++++++++++++++++ 5 files changed, 75 insertions(+), 82 deletions(-) rename src/rustbook/{css.rs => static/rustbook.css} (83%) create mode 100644 src/rustbook/static/rustbook.js diff --git a/src/rustbook/build.rs b/src/rustbook/build.rs index 69ef20884f4ae..afae4276507c3 100644 --- a/src/rustbook/build.rs +++ b/src/rustbook/build.rs @@ -22,7 +22,7 @@ use term::Term; use error::{err, CliResult, CommandResult}; use book; use book::{Book, BookItem}; -use css; + use javascript; use rustdoc; @@ -146,7 +146,8 @@ fn render(book: &Book, tgt: &Path) -> CliResult<()> { format!("--markdown-playground-url=http://play.rust-lang.org"), format!("--markdown-css={}", item.path_to_root.join("rust-book.css").display()), format!("--markdown-css={}", - "http://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700"), + "http://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700" + ), "--markdown-no-toc".to_string(), ]; let output_result = rustdoc::main_args(rustdoc_args); @@ -197,9 +198,16 @@ impl Subcommand for Build { } try!(fs::create_dir(&tgt)); - try!(File::create(&tgt.join("rust-book.css")).and_then(|mut f| { - f.write_all(css::STYLE.as_bytes()) - })); + // Copy static files + try!(fs::copy( + &cwd.join("src/rustbook/static/rustbook.css"), + &tgt.join("rust-book.css") + )); + + try!(fs::copy( + &cwd.join("src/rustbook/static/rustbook.js"), + &tgt.join("rust-book.js") + )); let mut summary = try!(File::open(&src.join("SUMMARY.md"))); match book::parse_summary(&mut summary, &src) { diff --git a/src/rustbook/javascript.rs b/src/rustbook/javascript.rs index 69124372260c4..beddc23fe2bdd 100644 --- a/src/rustbook/javascript.rs +++ b/src/rustbook/javascript.rs @@ -11,66 +11,6 @@ // The rust-book JavaScript in string form. pub static JAVASCRIPT: &'static str = r#" - + "#; diff --git a/src/rustbook/main.rs b/src/rustbook/main.rs index acb1c5cbd90ba..81f8c8c40fdff 100644 --- a/src/rustbook/main.rs +++ b/src/rustbook/main.rs @@ -35,7 +35,6 @@ mod build; mod serve; mod test; -mod css; mod javascript; static EXIT_STATUS: AtomicIsize = ATOMIC_ISIZE_INIT; diff --git a/src/rustbook/css.rs b/src/rustbook/static/rustbook.css similarity index 83% rename from src/rustbook/css.rs rename to src/rustbook/static/rustbook.css index 11d8a034c6005..955f4ab3817ce 100644 --- a/src/rustbook/css.rs +++ b/src/rustbook/static/rustbook.css @@ -1,16 +1,3 @@ -// Copyright 2014 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// The rust-book CSS in string form. - -pub static STYLE: &'static str = r#" @import url("../rust.css"); body { @@ -57,7 +44,7 @@ h1, h2, h3, h4, h5, h6 { } @media only print { - #toc, #nav { + #toc, #nav, #menu-bar { display: none; } } @@ -174,4 +161,3 @@ pre { .right { float: right; } -"#; diff --git a/src/rustbook/static/rustbook.js b/src/rustbook/static/rustbook.js new file mode 100644 index 0000000000000..af4e2a80a3889 --- /dev/null +++ b/src/rustbook/static/rustbook.js @@ -0,0 +1,60 @@ +document.addEventListener("DOMContentLoaded", function(event) { + + document.getElementById("toggle-nav").onclick = toggleNav; + function toggleNav() { + var toc = document.getElementById("toc"); + var pagewrapper = document.getElementById("page-wrapper"); + toggleClass(toc, "mobile-hidden"); + toggleClass(pagewrapper, "mobile-hidden"); + } + + function toggleClass(el, className) { + // from http://youmightnotneedjquery.com/ + if (el.classList) { + el.classList.toggle(className); + } else { + var classes = el.className.split(' '); + var existingIndex = classes.indexOf(className); + + if (existingIndex >= 0) { + classes.splice(existingIndex, 1); + } else { + classes.push(className); + } + + el.className = classes.join(' '); + } + } + + // The below code is used to add prev and next navigation links to the bottom + // of each of the sections. + // It works by extracting the current page based on the url and iterates over + // the menu links until it finds the menu item for the current page. We then + // create a copy of the preceding and following menu links and add the + // correct css class and insert them into the bottom of the page. + var toc = document.getElementById('toc').getElementsByTagName('a'); + var href = document.location.pathname.split('/').pop(); + if (href === 'index.html' || href === '') { + href = 'README.html'; + } + + for (var i = 0; i < toc.length; i++) { + if (toc[i].attributes['href'].value.split('/').pop() === href) { + var nav = document.createElement('p'); + nav.className = 'nav-previous-next'; + if (i > 0) { + var prevNode = toc[i-1].cloneNode(true); + prevNode.className = 'left'; + nav.appendChild(prevNode); + } + if (i < toc.length - 1) { + var nextNode = toc[i+1].cloneNode(true); + nextNode.className = 'right'; + nav.appendChild(nextNode); + } + document.getElementById('page').appendChild(nav); + break; + } + } + +});