rustdoc: Restore --default-theme, etc, by restoring varname escaping
In #86157
cd0f93193c
Use Tera templates for rustdoc.
dropped the following transformation from the keys of the default
settings element's `data-` attribute names:
.map(|(k, v)| format!(r#" data-{}="{}""#, k.replace('-', "_"), Escape(v)))
The `Escape` part is indeed no longer needed, because Tera does that
for us. But the massaging of `-` to `_` is needed, for the (bizarre)
reasons explained in the new comments.
I have tested that the default theme function works again for me. I
have also verified that passing
--default-theme="zork&"
escapes the value in the HTML.
Closes #87263.
CC: Jacob Hoffman-Andrews <github@hoffman-andrews.com>
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
This commit is contained in:
parent
05f2326c05
commit
155b055478
2 changed files with 25 additions and 1 deletions
|
@ -459,7 +459,29 @@ impl Options {
|
|||
})
|
||||
.collect(),
|
||||
];
|
||||
let default_settings = default_settings.into_iter().flatten().collect();
|
||||
let default_settings = default_settings.into_iter().flatten()
|
||||
.map(
|
||||
// The keys here become part of `data-` attribute names in the generated HTML. The
|
||||
// browser does a strange mapping when converting them into attributes on the
|
||||
// `dataset` property on the DOM HTML Node:
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset
|
||||
//
|
||||
// The original key values we have are the same as the DOM storage API keys and the
|
||||
// command line options, so contain `-`. Our Javascript needs to be able to look
|
||||
// these values up both in `dataset` and in the storage API, so it needs to be able
|
||||
// to convert the names back and forth. Despite doing this kebab-case to
|
||||
// StudlyCaps transformation automatically, the JS DOM API does not provide a
|
||||
// mechanism for doing the just transformation on a string. So we want to avoid
|
||||
// the StudlyCaps representation in the `dataset` property.
|
||||
//
|
||||
// We solve this by replacing all the `-`s with `_`s. We do that here, when we
|
||||
// generate the `data-` attributes, and in the JS, when we look them up. (See
|
||||
// `getSettingValue` in `storage.js.`) Converting `-` to `_` is simple in JS.
|
||||
//
|
||||
// The values will be HTML-escaped by the default Tera escaping.
|
||||
|(k, v)| (k.replace('-', "_"), v)
|
||||
)
|
||||
.collect();
|
||||
|
||||
let test_args = matches.opt_strs("test-args");
|
||||
let test_args: Vec<String> =
|
||||
|
|
|
@ -22,6 +22,8 @@ function getSettingValue(settingName) {
|
|||
return current;
|
||||
}
|
||||
if (settingsDataset !== null) {
|
||||
// See the comment for `default_settings.into_iter()` etc. in
|
||||
// `Options::from_matches` in `librustdoc/config.rs`.
|
||||
var def = settingsDataset[settingName.replace(/-/g,'_')];
|
||||
if (def !== undefined) {
|
||||
return def;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue