/// 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 {
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);
markdown_no_toc,
markdown_css,
markdown_playground_url,
+ generate_search_filter,
}
})
}
}
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>\
<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\" \
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 {
+ ""
+ },
)
}
/// 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 {
extern_html_root_urls,
resource_suffix,
static_root_path,
+ generate_search_filter,
..
} = options;
themes,
resource_suffix,
static_root_path,
+ generate_search_filter,
};
// If user passed in `--playground-url` arg, we fill in crate name here
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);
}
}
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(())
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.
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(())
&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) {
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) {
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;
width: 100%;
}
+#crate-search + .search-input {
+ border-radius: 0 1px 1px 0;
+}
+
.search-input:focus {
border-radius: 2px;
border: 0;
.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;
}
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; }
.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;
}
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; }
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")
+ }),
]
}
--- /dev/null
+// 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;