diff options
| author | Guillaume Gomez <guillaume.gomez@huawei.com> | 2022-01-19 22:36:15 +0100 |
|---|---|---|
| committer | Guillaume Gomez <guillaume.gomez@huawei.com> | 2022-04-30 13:12:41 +0200 |
| commit | 9625ed8be7fa66c3ee5f78180a3d5911817096f6 (patch) | |
| tree | eca2280b9a9644ab284bed1e27ec5024b084a6c7 /src/librustdoc/html/render | |
| parent | 76d4862fdd131b6f79dc0a31857f888d26bcdb27 (diff) | |
| download | rust-9625ed8be7fa66c3ee5f78180a3d5911817096f6.tar.gz rust-9625ed8be7fa66c3ee5f78180a3d5911817096f6.zip | |
Move settings into full JS
Diffstat (limited to 'src/librustdoc/html/render')
| -rw-r--r-- | src/librustdoc/html/render/context.rs | 23 | ||||
| -rw-r--r-- | src/librustdoc/html/render/mod.rs | 128 |
2 files changed, 10 insertions, 141 deletions
diff --git a/src/librustdoc/html/render/context.rs b/src/librustdoc/html/render/context.rs index 8e643107353..a30c533aa48 100644 --- a/src/librustdoc/html/render/context.rs +++ b/src/librustdoc/html/render/context.rs @@ -17,8 +17,8 @@ use super::print_item::{full_path, item_path, print_item}; use super::search_index::build_index; use super::write_shared::write_shared; use super::{ - collect_spans_and_sources, print_sidebar, scrape_examples_help, settings, AllTypes, - LinkFromSrc, NameDoc, StylePath, BASIC_KEYWORDS, + collect_spans_and_sources, print_sidebar, scrape_examples_help, AllTypes, LinkFromSrc, NameDoc, + StylePath, BASIC_KEYWORDS, }; use crate::clean::{self, types::ExternalLocation, ExternalCrate}; @@ -589,21 +589,18 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> { page.root_path = "./"; let sidebar = "<h2 class=\"location\">Settings</h2><div class=\"sidebar-elems\"></div>"; - let theme_names: Vec<String> = self - .shared - .style_files - .iter() - .map(StylePath::basename) - .collect::<Result<_, Error>>()?; let v = layout::render( &self.shared.layout, &page, sidebar, - settings( - self.shared.static_root_path.as_deref().unwrap_or("./"), - &self.shared.resource_suffix, - theme_names, - )?, + |buf: &mut Buffer| { + write!( + buf, + "<script defer src=\"{}settings{}.js\"></script>", + page.static_root_path.unwrap_or(""), + page.resource_suffix + ) + }, &self.shared.style_files, ); self.shared.fs.write(settings_file, v)?; diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index 7a4289b8e60..fedeb449b2e 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -334,134 +334,6 @@ impl AllTypes { } } -#[derive(Debug)] -enum Setting { - Section { - description: &'static str, - sub_settings: Vec<Setting>, - }, - Toggle { - js_data_name: &'static str, - description: &'static str, - default_value: bool, - }, - Select { - js_data_name: &'static str, - description: &'static str, - default_value: &'static str, - options: Vec<String>, - }, -} - -impl Setting { - fn display(&self, root_path: &str, suffix: &str) -> String { - match *self { - Setting::Section { description, ref sub_settings } => format!( - "<div class=\"setting-line\">\ - <div class=\"title\">{}</div>\ - <div class=\"sub-settings\">{}</div> - </div>", - description, - sub_settings.iter().map(|s| s.display(root_path, suffix)).collect::<String>() - ), - Setting::Toggle { js_data_name, description, default_value } => format!( - "<div class=\"setting-line\">\ - <label class=\"toggle\">\ - <input type=\"checkbox\" id=\"{}\" {}>\ - <span class=\"slider\"></span>\ - </label>\ - <div>{}</div>\ - </div>", - js_data_name, - if default_value { " checked" } else { "" }, - description, - ), - Setting::Select { js_data_name, description, default_value, ref options } => format!( - "<div class=\"setting-line\"><div class=\"radio-line\" id=\"{}\"><span class=\"setting-name\">{}</span><div class=\"choices\">{}</div></div></div>", - js_data_name, - description, - options - .iter() - .map(|opt| format!( - "<label for=\"{js_data_name}-{name}\" class=\"choice\"> - <input type=\"radio\" name=\"{js_data_name}\" id=\"{js_data_name}-{name}\" value=\"{name}\" {checked}>\ - {name}\ - </label>", - js_data_name = js_data_name, - name = opt, - checked = if opt == default_value { "checked" } else { "" }, - )) - .collect::<String>(), - ), - } - } -} - -impl From<(&'static str, &'static str, bool)> for Setting { - fn from(values: (&'static str, &'static str, bool)) -> Setting { - Setting::Toggle { js_data_name: values.0, description: values.1, default_value: values.2 } - } -} - -impl<T: Into<Setting>> From<(&'static str, Vec<T>)> for Setting { - fn from(values: (&'static str, Vec<T>)) -> Setting { - Setting::Section { - description: values.0, - sub_settings: values.1.into_iter().map(|v| v.into()).collect::<Vec<_>>(), - } - } -} - -fn settings(root_path: &str, suffix: &str, theme_names: Vec<String>) -> Result<String, Error> { - // (id, explanation, default value) - let settings: &[Setting] = &[ - Setting::from(("use-system-theme", "Use system theme", true)), - Setting::Select { - js_data_name: "theme", - description: "Theme", - default_value: "light", - options: theme_names.clone(), - }, - Setting::Select { - js_data_name: "preferred-light-theme", - description: "Preferred light theme", - default_value: "light", - options: theme_names.clone(), - }, - Setting::Select { - js_data_name: "preferred-dark-theme", - description: "Preferred dark theme", - default_value: "dark", - options: theme_names, - }, - ("auto-hide-large-items", "Auto-hide item contents for large items.", true).into(), - ("auto-hide-method-docs", "Auto-hide item methods' documentation", false).into(), - ("auto-hide-trait-implementations", "Auto-hide trait implementation documentation", false) - .into(), - ("go-to-only-result", "Directly go to item in search if there is only one result", false) - .into(), - ("line-numbers", "Show line numbers on code examples", false).into(), - ("disable-shortcuts", "Disable keyboard shortcuts", false).into(), - ]; - - Ok(format!( - "<div class=\"main-heading\"> - <h1 class=\"fqn\">\ - <span class=\"in-band\">Rustdoc settings</span>\ - </h1>\ - <span class=\"out-of-band\">\ - <a id=\"back\" href=\"javascript:void(0)\">Back</a>\ - </span>\ - </div>\ - <div class=\"settings\">{}</div>\ - <link rel=\"stylesheet\" href=\"{root_path}settings{suffix}.css\">\ - <script src=\"{root_path}settings{suffix}.js\"></script>", - settings.iter().map(|s| s.display(root_path, suffix)).collect::<String>(), - root_path = root_path, - suffix = suffix - )) -} - fn scrape_examples_help(shared: &SharedContext<'_>) -> String { let mut content = SCRAPE_EXAMPLES_HELP_MD.to_owned(); content.push_str(&format!( |
