diff options
| author | QuietMisdreavus <grey@quietmisdreavus.net> | 2018-12-20 10:18:45 -0600 |
|---|---|---|
| committer | QuietMisdreavus <grey@quietmisdreavus.net> | 2018-12-20 10:18:45 -0600 |
| commit | 0b0a00cc0551b7f525515e4e53bc0a11bd1b2ebd (patch) | |
| tree | 762b7100621f8a197a04b3f8ec9f03ef7c80a6c4 /src/librustdoc/html | |
| parent | 0a4a4ffc69f2d05eb8b8a32eaf9bd0607b69fe38 (diff) | |
new --static-root-path flag for controlling static file locations
Diffstat (limited to 'src/librustdoc/html')
| -rw-r--r-- | src/librustdoc/html/layout.rs | 39 | ||||
| -rw-r--r-- | src/librustdoc/html/render.rs | 9 |
2 files changed, 34 insertions, 14 deletions
diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs index 37ff693bdf1..1ead428ff49 100644 --- a/src/librustdoc/html/layout.rs +++ b/src/librustdoc/html/layout.rs @@ -26,6 +26,7 @@ pub struct Page<'a> { pub title: &'a str, pub css_class: &'a str, pub root_path: &'a str, + pub static_root_path: Option<&'a str>, pub description: &'a str, pub keywords: &'a str, pub resource_suffix: &'a str, @@ -36,6 +37,7 @@ pub fn render<T: fmt::Display, S: fmt::Display>( css_file_extension: bool, themes: &[PathBuf], extra_scripts: &[&str]) -> io::Result<()> { + let static_root_path = page.static_root_path.unwrap_or(page.root_path); write!(dst, "<!DOCTYPE html>\ <html lang=\"en\">\ @@ -46,20 +48,20 @@ pub fn render<T: fmt::Display, S: fmt::Display>( <meta name=\"description\" content=\"{description}\">\ <meta name=\"keywords\" content=\"{keywords}\">\ <title>{title}</title>\ - <link rel=\"stylesheet\" type=\"text/css\" href=\"{root_path}normalize{suffix}.css\">\ - <link rel=\"stylesheet\" type=\"text/css\" href=\"{root_path}rustdoc{suffix}.css\" \ + <link rel=\"stylesheet\" type=\"text/css\" href=\"{static_root_path}normalize{suffix}.css\">\ + <link rel=\"stylesheet\" type=\"text/css\" href=\"{static_root_path}rustdoc{suffix}.css\" \ id=\"mainThemeStyle\">\ {themes}\ - <link rel=\"stylesheet\" type=\"text/css\" href=\"{root_path}dark{suffix}.css\">\ - <link rel=\"stylesheet\" type=\"text/css\" href=\"{root_path}light{suffix}.css\" \ + <link rel=\"stylesheet\" type=\"text/css\" href=\"{static_root_path}dark{suffix}.css\">\ + <link rel=\"stylesheet\" type=\"text/css\" href=\"{static_root_path}light{suffix}.css\" \ id=\"themeStyle\">\ - <script src=\"{root_path}storage{suffix}.js\"></script>\ - <noscript><link rel=\"stylesheet\" href=\"{root_path}noscript{suffix}.css\"></noscript>\ + <script src=\"{static_root_path}storage{suffix}.js\"></script>\ + <noscript><link rel=\"stylesheet\" href=\"{static_root_path}noscript{suffix}.css\"></noscript>\ {css_extension}\ {favicon}\ {in_header}\ <style type=\"text/css\">\ - #crate-search{{background-image:url(\"{root_path}down-arrow{suffix}.svg\");}}\ + #crate-search{{background-image:url(\"{static_root_path}down-arrow{suffix}.svg\");}}\ </style>\ </head>\ <body class=\"rustdoc {css_class}\">\ @@ -77,11 +79,13 @@ pub fn render<T: fmt::Display, S: fmt::Display>( </nav>\ <div class=\"theme-picker\">\ <button id=\"theme-picker\" aria-label=\"Pick another theme!\">\ - <img src=\"{root_path}brush{suffix}.svg\" width=\"18\" alt=\"Pick another theme!\">\ + <img src=\"{static_root_path}brush{suffix}.svg\" \ + width=\"18\" \ + alt=\"Pick another theme!\">\ </button>\ <div id=\"theme-choices\"></div>\ </div>\ - <script src=\"{root_path}theme{suffix}.js\"></script>\ + <script src=\"{static_root_path}theme{suffix}.js\"></script>\ <nav class=\"sub\">\ <form class=\"search-form js-only\">\ <div class=\"search-container\">\ @@ -96,7 +100,9 @@ pub fn render<T: fmt::Display, S: fmt::Display>( type=\"search\">\ </div>\ <a id=\"settings-menu\" href=\"{root_path}settings.html\">\ - <img src=\"{root_path}wheel{suffix}.svg\" width=\"18\" alt=\"Change settings\">\ + <img src=\"{static_root_path}wheel{suffix}.svg\" \ + width=\"18\" \ + alt=\"Change settings\">\ </a>\ </div>\ </form>\ @@ -157,19 +163,22 @@ pub fn render<T: fmt::Display, S: fmt::Display>( window.currentCrate = \"{krate}\";\ </script>\ <script src=\"{root_path}aliases.js\"></script>\ - <script src=\"{root_path}main{suffix}.js\"></script>\ + <script src=\"{static_root_path}main{suffix}.js\"></script>\ {extra_scripts}\ <script defer src=\"{root_path}search-index.js\"></script>\ </body>\ </html>", css_extension = if css_file_extension { - format!("<link rel=\"stylesheet\" type=\"text/css\" href=\"{root_path}theme{suffix}.css\">", - root_path = page.root_path, + format!("<link rel=\"stylesheet\" \ + type=\"text/css\" \ + href=\"{static_root_path}theme{suffix}.css\">", + static_root_path = static_root_path, suffix=page.resource_suffix) } else { String::new() }, content = *t, + static_root_path = static_root_path, root_path = page.root_path, css_class = page.css_class, logo = if layout.logo.is_empty() { @@ -197,11 +206,13 @@ pub fn render<T: fmt::Display, S: fmt::Display>( .filter_map(|t| t.file_stem()) .filter_map(|t| t.to_str()) .map(|t| format!(r#"<link rel="stylesheet" type="text/css" href="{}{}{}.css">"#, - page.root_path, + static_root_path, t, page.resource_suffix)) .collect::<String>(), suffix=page.resource_suffix, + // TODO: break out a separate `static_extra_scripts` that uses `static_root_path` instead, + // then leave `source-files.js` here and move `source-script.js` to the static version extra_scripts=extra_scripts.iter().map(|e| { format!("<script src=\"{root_path}{extra_script}.js\"></script>", root_path=page.root_path, diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 46002c089cf..a4e71a18333 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -140,6 +140,9 @@ struct SharedContext { /// Suffix to be added on resource files (if suffix is "-v2" then "light.css" becomes /// "light-v2.css"). pub resource_suffix: String, + /// Optional path string to be used to load static files on output pages. If not set, uses + /// combinations of `../` to reach the documentation root. + pub static_root_path: Option<String>, } impl SharedContext { @@ -506,6 +509,7 @@ pub fn run(mut krate: clean::Crate, extension_css, extern_html_root_urls, resource_suffix, + static_root_path, .. } = options; @@ -533,6 +537,7 @@ pub fn run(mut krate: clean::Crate, sort_modules_alphabetically, themes, resource_suffix, + static_root_path, }; // If user passed in `--playground-url` arg, we fill in crate name here @@ -1080,6 +1085,7 @@ themePicker.onblur = handleThemeButtonsBlur; title: "Index of crates", css_class: "mod", root_path: "./", + static_root_path: cx.shared.static_root_path.deref(), description: "List of crates", keywords: BASIC_KEYWORDS, resource_suffix: &cx.shared.resource_suffix, @@ -1366,6 +1372,7 @@ impl<'a> SourceCollector<'a> { title: &title, css_class: "source", root_path: &root_path, + static_root_path: self.scx.static_root_path.deref(), description: &desc, keywords: BASIC_KEYWORDS, resource_suffix: &self.scx.resource_suffix, @@ -1956,6 +1963,7 @@ impl Context { title: "List of all items in this crate", css_class: "mod", root_path: "../", + static_root_path: self.shared.static_root_path.deref(), description: "List of all items in this crate", keywords: BASIC_KEYWORDS, resource_suffix: &self.shared.resource_suffix, @@ -2035,6 +2043,7 @@ impl Context { let page = layout::Page { css_class: tyname, root_path: &self.root_path(), + static_root_path: self.shared.static_root_path.deref(), title: &title, description: &desc, keywords: &keywords, |
