rustdoc: Provide a way to set the default settings from Rust code
rustdoc has various user-configurable preferences. These are recorded in web Local Storage (where available). But we want to provide a way to configure the default default, including for when web storage is not available. getSettingValue is the function responsible for looking up these settings. Here we make it fall back some in-DOM data, which ultimately comes from RenderOptions.default_settings. Using HTML data atrtributes is fairly convenient here, dsspite the need to transform between snake and kebab case to avoid the DOM converting kebab case to camel case (!) We cache the element and dataset lookup in a global variable, to ensure that getSettingValue remains fast. The DOM representation has to be in an element which precedes the inclusion of storage.js. That means it has to be in the <head> and we should not use an empty <div> as the container (although most browsers will accept that). An empty <script> element provides a convenient and harmless container object. <meta> would be another possibility but runs a greater risk of having unwanted behaviours on weird browsers. We trust the RenderOptions not to contain unhelpful setting names, which don't fit nicely into an HTML attribute. It's awkward to quote dataset keys. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
This commit is contained in:
@@ -392,6 +392,7 @@ impl FormatRenderer for Context {
|
||||
playground_url,
|
||||
sort_modules_alphabetically,
|
||||
themes: style_files,
|
||||
default_settings,
|
||||
extension_css,
|
||||
resource_suffix,
|
||||
static_root_path,
|
||||
@@ -415,6 +416,7 @@ impl FormatRenderer for Context {
|
||||
logo: String::new(),
|
||||
favicon: String::new(),
|
||||
external_html,
|
||||
default_settings,
|
||||
krate: krate.name.clone(),
|
||||
css_file_extension: extension_css,
|
||||
generate_search_filter,
|
||||
|
||||
Reference in New Issue
Block a user