Skip to content

Commit d05323c

Browse files
committed
rustdoc: redesign toolbar and disclosure widgets
This adds labels to the icons and moves them away from the search box. These changes are made together, because they work together, but are based on several complaints: * The [+/-] thing are a Reddit-ism. They don't look like buttons, but look like syntax <https://rust-lang.zulipchat.com/#narrow/stream/266220-t-rustdoc/topic/More.20visual.20difference.20for.20the.20.2B.2F-.20.20Icons>, <rust-lang#59851> (some of these are laundry lists with more suggestions, but they all mention [+/-] looking wrong) * The settings, help, and summary buttons are also too hard to recognize <https://lwn.net/Articles/987070/>, <rust-lang#90310>, <rust-lang#14475 (comment)>, <https://internals.rust-lang.org/t/improve-rustdoc-design/12758> ("Not all functionality is self-explanatory, for example the [+] button in the top right corner, the theme picker or the settings button.") The toggle-all and toggle-individual buttons both need done at once, since we want them to look like they go together. This changes them from both being [+/-] to both being arrows. Settings and Help are also migrated, so that the whole group can benefit from being described using actual words. Additionally, the Help button is only shown on SERPs, not all the time. This is done for two major reasons: * Most of what's in there is search-related. The things that aren't are keyboard commands, and the search box tells you about that anyway. Pressing <kbd>?</kbd> will temporarily show the button and its popover. * I'm trading it off by showing the help button, even on mobile. It's useful since you can use the search engine suggestions there. * The three buttons were causing line wrapping on too many desktop layouts.
1 parent 0ee7cb5 commit d05323c

33 files changed

+392
-256
lines changed

src/librustdoc/html/sources.rs

+27-8
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,11 @@ pub(crate) fn render(cx: &mut Context<'_>, krate: &clean::Crate) -> Result<(), E
2626

2727
let dst = cx.dst.join("src").join(krate.name(cx.tcx()).as_str());
2828
cx.shared.ensure_dir(&dst)?;
29+
let crate_name = krate.name(cx.tcx());
30+
let crate_name = crate_name.as_str();
2931

30-
let mut collector = SourceCollector { dst, cx, emitted_local_sources: FxHashSet::default() };
32+
let mut collector =
33+
SourceCollector { dst, cx, emitted_local_sources: FxHashSet::default(), crate_name };
3134
collector.visit_crate(krate);
3235
Ok(())
3336
}
@@ -115,6 +118,8 @@ struct SourceCollector<'a, 'tcx> {
115118
/// Root destination to place all HTML output into
116119
dst: PathBuf,
117120
emitted_local_sources: FxHashSet<PathBuf>,
121+
122+
crate_name: &'a str,
118123
}
119124

120125
impl DocVisitor for SourceCollector<'_, '_> {
@@ -210,19 +215,22 @@ impl SourceCollector<'_, '_> {
210215
},
211216
);
212217

218+
let src_fname = p.file_name().expect("source has no filename").to_os_string();
219+
let mut fname = src_fname.clone();
220+
213221
let root_path = PathBuf::from("../../").join(root_path.into_inner());
214222
let mut root_path = root_path.to_string_lossy();
215223
if let Some(c) = root_path.as_bytes().last()
216224
&& *c != b'/'
217225
{
218226
root_path += "/";
219227
}
228+
let mut file_path = Path::new(&self.crate_name).join(&*cur.borrow());
229+
file_path.push(&fname);
230+
fname.push(".html");
220231
let mut cur = self.dst.join(cur.into_inner());
221232
shared.ensure_dir(&cur)?;
222233

223-
let src_fname = p.file_name().expect("source has no filename").to_os_string();
224-
let mut fname = src_fname.clone();
225-
fname.push(".html");
226234
cur.push(&fname);
227235

228236
let title = format!("{} - source", src_fname.to_string_lossy());
@@ -250,7 +258,7 @@ impl SourceCollector<'_, '_> {
250258
cx,
251259
&root_path,
252260
highlight::DecorationInfo::default(),
253-
SourceContext::Standalone,
261+
SourceContext::Standalone { file_path },
254262
)
255263
},
256264
&shared.style_files,
@@ -313,10 +321,11 @@ struct ScrapedSource<'a, Code: std::fmt::Display> {
313321
struct Source<Code: std::fmt::Display> {
314322
lines: RangeInclusive<usize>,
315323
code_html: Code,
324+
file_path: Option<(String, String)>,
316325
}
317326

318327
pub(crate) enum SourceContext<'a> {
319-
Standalone,
328+
Standalone { file_path: PathBuf },
320329
Embedded(ScrapedInfo<'a>),
321330
}
322331

@@ -345,9 +354,19 @@ pub(crate) fn print_src(
345354
});
346355
let lines = s.lines().count();
347356
match source_context {
348-
SourceContext::Standalone => {
349-
Source { lines: (1..=lines), code_html: code }.render_into(&mut writer).unwrap()
357+
SourceContext::Standalone { file_path } => Source {
358+
lines: (1..=lines),
359+
code_html: code,
360+
file_path: if let Some(file_name) = file_path.file_name()
361+
&& let Some(file_path) = file_path.parent()
362+
{
363+
Some((file_path.display().to_string(), file_name.display().to_string()))
364+
} else {
365+
None
366+
},
350367
}
368+
.render_into(&mut writer)
369+
.unwrap(),
351370
SourceContext::Embedded(info) => {
352371
let lines = (1 + info.offset)..=(lines + info.offset);
353372
ScrapedSource { info, lines, code_html: code }.render_into(&mut writer).unwrap();

src/librustdoc/html/static/css/noscript.css

+4-1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ nav.sub {
6161
--copy-path-img-hover-filter: invert(35%);
6262
--code-example-button-color: #7f7f7f;
6363
--code-example-button-hover-color: #595959;
64+
--settings-menu-filter: invert(50%);
65+
--settings-menu-hover-filter: invert(35%);
6466
--codeblock-error-hover-color: rgb(255, 0, 0);
6567
--codeblock-error-color: rgba(255, 0, 0, .5);
6668
--codeblock-ignore-hover-color: rgb(255, 142, 0);
@@ -87,7 +89,6 @@ nav.sub {
8789
--search-tab-button-not-selected-background: #e6e6e6;
8890
--search-tab-button-selected-border-top-color: #0089ff;
8991
--search-tab-button-selected-background: #fff;
90-
--settings-menu-filter: none;
9192
--stab-background-color: #fff5d6;
9293
--stab-code-color: #000;
9394
--code-highlight-kw-color: #8959a8;
@@ -192,6 +193,8 @@ nav.sub {
192193
--search-tab-button-not-selected-background: #252525;
193194
--search-tab-button-selected-border-top-color: #0089ff;
194195
--search-tab-button-selected-background: #353535;
196+
--settings-menu-filter: invert(50%);
197+
--settings-menu-hover-filter: invert(65%);
195198
--stab-background-color: #314559;
196199
--stab-code-color: #e6e1cf;
197200
--code-highlight-kw-color: #ab8ac1;

0 commit comments

Comments
 (0)