Simplify rendering of stylesheet links into HTML
We carry around a list of stylesheets that can carry two different types of thing: 1. Internal stylesheets specific to a page type (only for settings) 2. Themes In this change I move the link generation for settings.css into settings(), so Context.style_files is reserved just for themes. We had two places where we extracted a base theme name from a list of StylePaths. I consolidated that code to be a method on StylePath. I moved generation of link tags for stylesheets into the page.html template. With that change, I made the template responsible for special handling of light.css (making it the default theme) and of the other themes (marking them disabled). That allowed getting rid of the `disabled` field on StylePath.
This commit is contained in:
parent
d2c24aabcd
commit
3649b90b33
7 changed files with 49 additions and 50 deletions
|
@ -64,7 +64,6 @@ use serde::ser::SerializeSeq;
|
|||
use serde::{Serialize, Serializer};
|
||||
|
||||
use crate::clean::{self, ItemId, RenderedLink, SelfTy};
|
||||
use crate::docfs::PathError;
|
||||
use crate::error::Error;
|
||||
use crate::formats::cache::Cache;
|
||||
use crate::formats::item_type::ItemType;
|
||||
|
@ -173,8 +172,12 @@ impl Serialize for TypeWithKind {
|
|||
crate struct StylePath {
|
||||
/// The path to the theme
|
||||
crate path: PathBuf,
|
||||
/// What the `disabled` attribute should be set to in the HTML tag
|
||||
crate disabled: bool,
|
||||
}
|
||||
|
||||
impl StylePath {
|
||||
pub fn basename(&self) -> Result<String, Error> {
|
||||
Ok(try_none!(try_none!(self.path.file_stem(), &self.path).to_str(), &self.path).to_string())
|
||||
}
|
||||
}
|
||||
|
||||
fn write_srclink(cx: &Context<'_>, item: &clean::Item, buf: &mut Buffer) {
|
||||
|
@ -353,7 +356,7 @@ enum Setting {
|
|||
js_data_name: &'static str,
|
||||
description: &'static str,
|
||||
default_value: &'static str,
|
||||
options: Vec<(String, String)>,
|
||||
options: Vec<String>,
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -393,10 +396,9 @@ impl Setting {
|
|||
options
|
||||
.iter()
|
||||
.map(|opt| format!(
|
||||
"<option value=\"{}\" {}>{}</option>",
|
||||
opt.0,
|
||||
if opt.0 == default_value { "selected" } else { "" },
|
||||
opt.1,
|
||||
"<option value=\"{name}\" {}>{name}</option>",
|
||||
if opt == default_value { "selected" } else { "" },
|
||||
name = opt,
|
||||
))
|
||||
.collect::<String>(),
|
||||
root_path,
|
||||
|
@ -421,18 +423,7 @@ impl<T: Into<Setting>> From<(&'static str, Vec<T>)> for Setting {
|
|||
}
|
||||
}
|
||||
|
||||
fn settings(root_path: &str, suffix: &str, themes: &[StylePath]) -> Result<String, Error> {
|
||||
let theme_names: Vec<(String, String)> = themes
|
||||
.iter()
|
||||
.map(|entry| {
|
||||
let theme =
|
||||
try_none!(try_none!(entry.path.file_stem(), &entry.path).to_str(), &entry.path)
|
||||
.to_string();
|
||||
|
||||
Ok((theme.clone(), theme))
|
||||
})
|
||||
.collect::<Result<_, Error>>()?;
|
||||
|
||||
fn settings(root_path: &str, suffix: &str, theme_names: Vec<String>) -> Result<String, Error> {
|
||||
// (id, explanation, default value)
|
||||
let settings: &[Setting] = &[
|
||||
(
|
||||
|
@ -469,10 +460,11 @@ fn settings(root_path: &str, suffix: &str, themes: &[StylePath]) -> Result<Strin
|
|||
<span class=\"in-band\">Rustdoc settings</span>\
|
||||
</h1>\
|
||||
<div class=\"settings\">{}</div>\
|
||||
<script src=\"{}settings{}.js\"></script>",
|
||||
<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,
|
||||
suffix
|
||||
root_path = root_path,
|
||||
suffix = suffix
|
||||
))
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue