diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index f9a46fe362e3c..7962b45907a7d 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -195,6 +195,9 @@ pub struct RenderOptions { /// If present, playground URL to use in the "Run" button added to code samples generated from /// standalone Markdown files. If not present, `playground_url` is used. pub markdown_playground_url: Option<String>, + /// If false, the `select` element to have search filtering by crates on rendered docs + /// won't be generated. + pub generate_search_filter: bool, } impl Options { @@ -437,6 +440,7 @@ impl Options { let crate_version = matches.opt_str("crate-version"); let enable_index_page = matches.opt_present("enable-index-page") || index_page.is_some(); let static_root_path = matches.opt_str("static-root-path"); + let generate_search_filter = !matches.opt_present("disable-per-crate-search"); let (lint_opts, describe_lints, lint_cap) = get_cmd_lint_options(matches, error_format); @@ -479,6 +483,7 @@ impl Options { markdown_no_toc, markdown_css, markdown_playground_url, + generate_search_filter, } }) } diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs index d8a57bc93fd6c..9caeec39ab104 100644 --- a/src/librustdoc/html/layout.rs +++ b/src/librustdoc/html/layout.rs @@ -35,10 +35,15 @@ pub struct Page<'a> { } pub fn render<T: fmt::Display, S: fmt::Display>( - dst: &mut dyn io::Write, layout: &Layout, page: &Page, sidebar: &S, t: &T, - css_file_extension: bool, themes: &[PathBuf]) - -> io::Result<()> -{ + dst: &mut dyn io::Write, + layout: &Layout, + page: &Page, + sidebar: &S, + t: &T, + css_file_extension: bool, + themes: &[PathBuf], + generate_search_filter: bool, +) -> io::Result<()> { let static_root_path = page.static_root_path.unwrap_or(page.root_path); write!(dst, "<!DOCTYPE html>\ @@ -91,10 +96,7 @@ pub fn render<T: fmt::Display, S: fmt::Display>( <nav class=\"sub\">\ <form class=\"search-form js-only\">\ <div class=\"search-container\">\ - <div>\ - <select id=\"crate-search\">\ - <option value=\"All crates\">All crates</option>\ - </select>\ + <div>{filter_crates}\ <input class=\"search-input\" name=\"search\" \ autocomplete=\"off\" \ spellcheck=\"false\" \ @@ -224,6 +226,13 @@ pub fn render<T: fmt::Display, S: fmt::Display>( root_path=page.root_path, extra_script=e) }).collect::<String>(), + filter_crates=if generate_search_filter { + "<select id=\"crate-search\">\ + <option value=\"All crates\">All crates</option>\ + </select>" + } else { + "" + }, ) } diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index e47ec9ec2f051..5974cc1145117 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -143,6 +143,9 @@ struct SharedContext { /// 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>, + /// If false, the `select` element to have search filtering by crates on rendered docs + /// won't be generated. + pub generate_search_filter: bool, } impl SharedContext { @@ -510,6 +513,7 @@ pub fn run(mut krate: clean::Crate, extern_html_root_urls, resource_suffix, static_root_path, + generate_search_filter, .. } = options; @@ -538,6 +542,7 @@ pub fn run(mut krate: clean::Crate, themes, resource_suffix, static_root_path, + generate_search_filter, }; // If user passed in `--playground-url` arg, we fill in crate name here @@ -1109,7 +1114,8 @@ themePicker.onblur = handleThemeButtonsBlur; try_err!(layout::render(&mut w, &cx.shared.layout, &page, &(""), &content, cx.shared.css_file_extension.is_some(), - &cx.shared.themes), &dst); + &cx.shared.themes, + cx.shared.generate_search_filter), &dst); try_err!(w.flush(), &dst); } } @@ -1384,7 +1390,8 @@ impl<'a> SourceCollector<'a> { layout::render(&mut w, &self.scx.layout, &page, &(""), &Source(contents), self.scx.css_file_extension.is_some(), - &self.scx.themes)?; + &self.scx.themes, + self.scx.generate_search_filter)?; w.flush()?; self.scx.local_sources.insert(p.clone(), href); Ok(()) @@ -1986,7 +1993,8 @@ impl Context { try_err!(layout::render(&mut w, &self.shared.layout, &page, &sidebar, &all, self.shared.css_file_extension.is_some(), - &self.shared.themes), + &self.shared.themes, + self.shared.generate_search_filter), &final_file); // Generating settings page. @@ -2006,7 +2014,8 @@ impl Context { try_err!(layout::render(&mut w, &layout, &page, &sidebar, &settings, self.shared.css_file_extension.is_some(), - &themes), + &themes, + self.shared.generate_search_filter), &settings_file); Ok(()) @@ -2067,7 +2076,8 @@ impl Context { &Sidebar{ cx: self, item: it }, &Item{ cx: self, item: it }, self.shared.css_file_extension.is_some(), - &self.shared.themes)?; + &self.shared.themes, + self.shared.generate_search_filter)?; } else { let mut url = self.root_path(); if let Some(&(ref names, ty)) = cache().paths.get(&it.def_id) { diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index d5b8ecd4807f1..3052e30afb1c0 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -2434,9 +2434,11 @@ if (!DOMTokenList.prototype.remove) { return; } var crates_text = []; - for (var crate in crates) { - if (crates.hasOwnProperty(crate)) { - crates_text.push(crate); + if (crates.length > 1) { + for (var crate in crates) { + if (crates.hasOwnProperty(crate)) { + crates_text.push(crate); + } } } crates_text.sort(function(a, b) { diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css index 3958986e49277..86241671ecd26 100644 --- a/src/librustdoc/html/static/rustdoc.css +++ b/src/librustdoc/html/static/rustdoc.css @@ -661,7 +661,7 @@ a { box-sizing: border-box !important; outline: none; border: none; - border-radius: 0 1px 1px 0; + border-radius: 1px; margin-top: 5px; padding: 10px 16px; font-size: 17px; @@ -671,6 +671,10 @@ a { width: 100%; } +#crate-search + .search-input { + border-radius: 0 1px 1px 0; +} + .search-input:focus { border-radius: 2px; border: 0; diff --git a/src/librustdoc/html/static/themes/dark.css b/src/librustdoc/html/static/themes/dark.css index be3ffed2b2659..f5c07dd85d1a1 100644 --- a/src/librustdoc/html/static/themes/dark.css +++ b/src/librustdoc/html/static/themes/dark.css @@ -194,7 +194,7 @@ a.test-arrow { .search-input { color: #111; - box-shadow: 1px 0 0 1px #000, 0 0 0 2px transparent; + box-shadow: 0 0 0 1px #000, 0 0 0 2px transparent; background-color: #f0f0f0; } @@ -202,6 +202,10 @@ a.test-arrow { border-color: #008dfd; } +#crate-search + .search-input { + box-shadow: 1px 0 0 1px #000, 0 0 0 2px transparent; +} + .stab.unstable { background: #FFF5D6; border-color: #FFC600; color: #404040; } .stab.internal { background: #FFB9B3; border-color: #B71C1C; color: #404040; } .stab.deprecated { background: #F3DFFF; border-color: #7F0087; color: #404040; } diff --git a/src/librustdoc/html/static/themes/light.css b/src/librustdoc/html/static/themes/light.css index 4ae10492ae6b2..446e765252f7a 100644 --- a/src/librustdoc/html/static/themes/light.css +++ b/src/librustdoc/html/static/themes/light.css @@ -195,7 +195,7 @@ a.test-arrow { .search-input { color: #555; - box-shadow: 1px 0 0 1px #e0e0e0, 0 0 0 2px transparent; + box-shadow: 0 0 0 1px #e0e0e0, 0 0 0 2px transparent; background-color: white; } @@ -203,6 +203,10 @@ a.test-arrow { border-color: #66afe9; } +#crate-search + .search-input { + box-shadow: 1px 0 0 1px #e0e0e0, 0 0 0 2px transparent; +} + .stab.unstable { background: #FFF5D6; border-color: #FFC600; } .stab.internal { background: #FFB9B3; border-color: #B71C1C; } .stab.deprecated { background: #F3DFFF; border-color: #7F0087; } diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index 4f59f67e94f98..6edb0ea74cff4 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -346,6 +346,11 @@ fn opts() -> Vec<RustcOptGroup> { If not set, uses combinations of '../' to reach the documentation root.", "PATH") }), + unstable("disable-per-crate-search", |o| { + o.optflag("", + "disable-per-crate-search", + "disables generating the crate selector on the search box") + }), ] } diff --git a/src/test/rustdoc/no-crate-filter.rs b/src/test/rustdoc/no-crate-filter.rs new file mode 100644 index 0000000000000..e49ce9e088ec6 --- /dev/null +++ b/src/test/rustdoc/no-crate-filter.rs @@ -0,0 +1,16 @@ +// Copyright 2018 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 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name = "foo"] + +// compile-flags: -Z unstable-options --disable-per-crate-search + +// @!has 'foo/struct.Foo.html' '//*[id="crate-search"]' +pub struct Foo;