1
Fork 0

Rustdoc accessibility: make the sidebar headers actual headers

Part of #87059

Preview it at: https://notriddle.com/notriddle-rustdoc-test/rustdoc-sidebar-header/std/index.html
This commit is contained in:
Michael Howell 2021-07-16 21:58:23 -07:00
parent c78ebb7bdc
commit 30d49a401a
3 changed files with 34 additions and 29 deletions

View file

@ -539,7 +539,7 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> {
}; };
let sidebar = if let Some(ref version) = self.cache.crate_version { let sidebar = if let Some(ref version) = self.cache.crate_version {
format!( format!(
"<p class=\"location\">Crate {}</p>\ "<h2 class=\"location\">Crate {}</h2>\
<div class=\"block version\">\ <div class=\"block version\">\
<p>Version {}</p>\ <p>Version {}</p>\
</div>\ </div>\
@ -567,7 +567,7 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> {
page.root_path = "./"; page.root_path = "./";
let mut style_files = self.shared.style_files.clone(); let mut style_files = self.shared.style_files.clone();
let sidebar = "<p class=\"location\">Settings</p><div class=\"sidebar-elems\"></div>"; let sidebar = "<h2 class=\"location\">Settings</h2><div class=\"sidebar-elems\"></div>";
style_files.push(StylePath { path: PathBuf::from("settings.css"), disabled: false }); style_files.push(StylePath { path: PathBuf::from("settings.css"), disabled: false });
let v = layout::render( let v = layout::render(
&self.shared.templates, &self.shared.templates,

View file

@ -1654,7 +1654,7 @@ fn print_sidebar(cx: &Context<'_>, it: &clean::Item, buffer: &mut Buffer) {
{ {
write!( write!(
buffer, buffer,
"<p class=\"location\">{}{}</p>", "<h2 class=\"location\">{}{}</h2>",
match *it.kind { match *it.kind {
clean::StructItem(..) => "Struct ", clean::StructItem(..) => "Struct ",
clean::TraitItem(..) => "Trait ", clean::TraitItem(..) => "Trait ",
@ -1718,7 +1718,7 @@ fn print_sidebar(cx: &Context<'_>, it: &clean::Item, buffer: &mut Buffer) {
// to navigate the documentation (though slightly inefficiently). // to navigate the documentation (though slightly inefficiently).
if !it.is_mod() { if !it.is_mod() {
buffer.write_str("<p class=\"location\">Other items in<br>"); buffer.write_str("<h2 class=\"location\">Other items in<br>");
for (i, name) in cx.current.iter().take(parentlen).enumerate() { for (i, name) in cx.current.iter().take(parentlen).enumerate() {
if i > 0 { if i > 0 {
buffer.write_str("::<wbr>"); buffer.write_str("::<wbr>");
@ -1730,7 +1730,7 @@ fn print_sidebar(cx: &Context<'_>, it: &clean::Item, buffer: &mut Buffer) {
*name *name
); );
} }
buffer.write_str("</p>"); buffer.write_str("</h2>");
} }
// Sidebar refers to the enclosing module, not this module. // Sidebar refers to the enclosing module, not this module.
@ -1841,7 +1841,7 @@ fn sidebar_assoc_items(cx: &Context<'_>, out: &mut Buffer, it: &clean::Item) {
ret.sort(); ret.sort();
out.push_str( out.push_str(
"<a class=\"sidebar-title\" href=\"#implementations\">Methods</a>\ "<h3 class=\"sidebar-title\"><a href=\"#implementations\">Methods</a></h3>\
<div class=\"sidebar-links\">", <div class=\"sidebar-links\">",
); );
for line in ret { for line in ret {
@ -1906,24 +1906,24 @@ fn sidebar_assoc_items(cx: &Context<'_>, out: &mut Buffer, it: &clean::Item) {
if !concrete_format.is_empty() { if !concrete_format.is_empty() {
out.push_str( out.push_str(
"<a class=\"sidebar-title\" href=\"#trait-implementations\">\ "<h3 class=\"sidebar-title\"><a href=\"#trait-implementations\">\
Trait Implementations</a>", Trait Implementations</a></h3>",
); );
write_sidebar_links(out, concrete_format); write_sidebar_links(out, concrete_format);
} }
if !synthetic_format.is_empty() { if !synthetic_format.is_empty() {
out.push_str( out.push_str(
"<a class=\"sidebar-title\" href=\"#synthetic-implementations\">\ "<h3 class=\"sidebar-title\"><a href=\"#synthetic-implementations\">\
Auto Trait Implementations</a>", Auto Trait Implementations</a></h3>",
); );
write_sidebar_links(out, synthetic_format); write_sidebar_links(out, synthetic_format);
} }
if !blanket_format.is_empty() { if !blanket_format.is_empty() {
out.push_str( out.push_str(
"<a class=\"sidebar-title\" href=\"#blanket-implementations\">\ "<h3 class=\"sidebar-title\"><a href=\"#blanket-implementations\">\
Blanket Implementations</a>", Blanket Implementations</a></h3>",
); );
write_sidebar_links(out, blanket_format); write_sidebar_links(out, blanket_format);
} }
@ -1975,7 +1975,7 @@ fn sidebar_deref_methods(cx: &Context<'_>, out: &mut Buffer, impl_: &Impl, v: &V
if !ret.is_empty() { if !ret.is_empty() {
write!( write!(
out, out,
"<a class=\"sidebar-title\" href=\"#deref-methods\">Methods from {}&lt;Target={}&gt;</a>", "<h3 class=\"sidebar-title\"><a href=\"#deref-methods\">Methods from {}&lt;Target={}&gt;</a></h3>",
Escape(&format!("{:#}", impl_.inner_impl().trait_.as_ref().unwrap().print(cx))), Escape(&format!("{:#}", impl_.inner_impl().trait_.as_ref().unwrap().print(cx))),
Escape(&format!("{:#}", real_target.print(cx))), Escape(&format!("{:#}", real_target.print(cx))),
); );
@ -1998,7 +1998,7 @@ fn sidebar_struct(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, s: &clea
if !fields.is_empty() { if !fields.is_empty() {
if let CtorKind::Fictive = s.struct_type { if let CtorKind::Fictive = s.struct_type {
sidebar.push_str( sidebar.push_str(
"<a class=\"sidebar-title\" href=\"#fields\">Fields</a>\ "<h3 class=\"sidebar-title\"><a href=\"#fields\">Fields</a></h3>\
<div class=\"sidebar-links\">", <div class=\"sidebar-links\">",
); );
@ -2075,8 +2075,8 @@ fn sidebar_trait(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, t: &clean
print_sidebar_section( print_sidebar_section(
buf, buf,
&t.items, &t.items,
"<a class=\"sidebar-title\" href=\"#associated-types\">\ "<h3 class=\"sidebar-title\"><a href=\"#associated-types\">\
Associated Types</a><div class=\"sidebar-links\">", Associated Types</a></h3><div class=\"sidebar-links\">",
|m| m.is_associated_type(), |m| m.is_associated_type(),
|out, sym| write!(out, "<a href=\"#associatedtype.{0}\">{0}</a>", sym), |out, sym| write!(out, "<a href=\"#associatedtype.{0}\">{0}</a>", sym),
"</div>", "</div>",
@ -2085,8 +2085,8 @@ fn sidebar_trait(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, t: &clean
print_sidebar_section( print_sidebar_section(
buf, buf,
&t.items, &t.items,
"<a class=\"sidebar-title\" href=\"#associated-const\">\ "<h3 class=\"sidebar-title\"><a href=\"#associated-const\">\
Associated Constants</a><div class=\"sidebar-links\">", Associated Constants</a></h3><div class=\"sidebar-links\">",
|m| m.is_associated_const(), |m| m.is_associated_const(),
|out, sym| write!(out, "<a href=\"#associatedconstant.{0}\">{0}</a>", sym), |out, sym| write!(out, "<a href=\"#associatedconstant.{0}\">{0}</a>", sym),
"</div>", "</div>",
@ -2095,8 +2095,8 @@ fn sidebar_trait(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, t: &clean
print_sidebar_section( print_sidebar_section(
buf, buf,
&t.items, &t.items,
"<a class=\"sidebar-title\" href=\"#required-methods\">\ "<h3 class=\"sidebar-title\"><a href=\"#required-methods\">\
Required Methods</a><div class=\"sidebar-links\">", Required Methods</a></h3><div class=\"sidebar-links\">",
|m| m.is_ty_method(), |m| m.is_ty_method(),
|out, sym| write!(out, "<a href=\"#tymethod.{0}\">{0}</a>", sym), |out, sym| write!(out, "<a href=\"#tymethod.{0}\">{0}</a>", sym),
"</div>", "</div>",
@ -2105,8 +2105,8 @@ fn sidebar_trait(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, t: &clean
print_sidebar_section( print_sidebar_section(
buf, buf,
&t.items, &t.items,
"<a class=\"sidebar-title\" href=\"#provided-methods\">\ "<h3 class=\"sidebar-title\"><a href=\"#provided-methods\">\
Provided Methods</a><div class=\"sidebar-links\">", Provided Methods</a></h3><div class=\"sidebar-links\">",
|m| m.is_method(), |m| m.is_method(),
|out, sym| write!(out, "<a href=\"#method.{0}\">{0}</a>", sym), |out, sym| write!(out, "<a href=\"#method.{0}\">{0}</a>", sym),
"</div>", "</div>",
@ -2128,8 +2128,8 @@ fn sidebar_trait(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, t: &clean
if !res.is_empty() { if !res.is_empty() {
res.sort(); res.sort();
buf.push_str( buf.push_str(
"<a class=\"sidebar-title\" href=\"#foreign-impls\">\ "<h3 class=\"sidebar-title\"><a href=\"#foreign-impls\">\
Implementations on Foreign Types</a>\ Implementations on Foreign Types</a></h3>\
<div class=\"sidebar-links\">", <div class=\"sidebar-links\">",
); );
for (name, id) in res.into_iter() { for (name, id) in res.into_iter() {
@ -2141,11 +2141,11 @@ fn sidebar_trait(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, t: &clean
sidebar_assoc_items(cx, buf, it); sidebar_assoc_items(cx, buf, it);
buf.push_str("<a class=\"sidebar-title\" href=\"#implementors\">Implementors</a>"); buf.push_str("<h3 class=\"sidebar-title\"><a href=\"#implementors\">Implementors</a></h3>");
if t.is_auto { if t.is_auto {
buf.push_str( buf.push_str(
"<a class=\"sidebar-title\" \ "<h3 class=\"sidebar-title\"><a \
href=\"#synthetic-implementors\">Auto Implementors</a>", href=\"#synthetic-implementors\">Auto Implementors</a></h3>",
); );
} }
@ -2188,7 +2188,7 @@ fn sidebar_union(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, u: &clean
if !fields.is_empty() { if !fields.is_empty() {
sidebar.push_str( sidebar.push_str(
"<a class=\"sidebar-title\" href=\"#fields\">Fields</a>\ "<h3 class=\"sidebar-title\"><a href=\"#fields\">Fields</a></h3>\
<div class=\"sidebar-links\">", <div class=\"sidebar-links\">",
); );
@ -2220,7 +2220,7 @@ fn sidebar_enum(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, e: &clean:
if !variants.is_empty() { if !variants.is_empty() {
variants.sort_unstable(); variants.sort_unstable();
sidebar.push_str(&format!( sidebar.push_str(&format!(
"<a class=\"sidebar-title\" href=\"#variants\">Variants</a>\ "<h3 class=\"sidebar-title\"><a href=\"#variants\">Variants</a></h3>\
<div class=\"sidebar-links\">{}</div>", <div class=\"sidebar-links\">{}</div>",
variants.join(""), variants.join(""),
)); ));

View file

@ -339,9 +339,12 @@ nav.sub {
.sidebar .location { .sidebar .location {
border: 1px solid; border: 1px solid;
font-size: 17px; font-size: 17px;
font-weight: inherit;
margin: 30px 10px 20px 10px; margin: 30px 10px 20px 10px;
text-align: center; text-align: center;
word-wrap: break-word; word-wrap: break-word;
font-weight: inherit;
padding: 0;
} }
.sidebar .version { .sidebar .version {
@ -394,6 +397,8 @@ nav.sub {
text-align: center; text-align: center;
font-size: 17px; font-size: 17px;
margin-bottom: 5px; margin-bottom: 5px;
font-weight: inherit;
padding: 0;
} }
.sidebar-links { .sidebar-links {