Rollup merge of #84321 - Swatinem:subvariant-details, r=GuillaumeGomez
rustdoc: Convert sub-variant toggle to HTML Instead of creating a JS toggle, this injects details/summary for sub-variants of enums. This also fixes the CSS so that the toggle button does not jump when expanding/collapsing. Takes inspiration from #83337 and should be considered part of #83332. Not quite sure if the `.sub-variant` selectors could be further simplified? AFAICS it is only used in that place, and that does not seem to allow any recursion.
This commit is contained in:
commit
d05e28df15
5 changed files with 26 additions and 8 deletions
|
@ -963,6 +963,7 @@ fn item_enum(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, e: &clean::Enum
|
||||||
|
|
||||||
use crate::clean::Variant;
|
use crate::clean::Variant;
|
||||||
if let clean::VariantItem(Variant::Struct(ref s)) = *variant.kind {
|
if let clean::VariantItem(Variant::Struct(ref s)) = *variant.kind {
|
||||||
|
toggle_open(w, "fields");
|
||||||
let variant_id = cx.derive_id(format!(
|
let variant_id = cx.derive_id(format!(
|
||||||
"{}.{}.fields",
|
"{}.{}.fields",
|
||||||
ItemType::Variant,
|
ItemType::Variant,
|
||||||
|
@ -996,6 +997,7 @@ fn item_enum(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, e: &clean::Enum
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
w.write_str("</div></div>");
|
w.write_str("</div></div>");
|
||||||
|
toggle_close(w);
|
||||||
}
|
}
|
||||||
render_stability_since(w, variant, it, cx.tcx());
|
render_stability_since(w, variant, it, cx.tcx());
|
||||||
}
|
}
|
||||||
|
|
|
@ -455,6 +455,15 @@ function hideThemeButtonState() {
|
||||||
handleHashes(ev);
|
handleHashes(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function openParentDetails(elem) {
|
||||||
|
while (elem) {
|
||||||
|
if (elem.tagName === "DETAILS") {
|
||||||
|
elem.open = true;
|
||||||
|
}
|
||||||
|
elem = elem.parentNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function expandSection(id) {
|
function expandSection(id) {
|
||||||
var elem = document.getElementById(id);
|
var elem = document.getElementById(id);
|
||||||
if (elem && isHidden(elem)) {
|
if (elem && isHidden(elem)) {
|
||||||
|
@ -469,6 +478,8 @@ function hideThemeButtonState() {
|
||||||
// The element is not visible, we need to make it appear!
|
// The element is not visible, we need to make it appear!
|
||||||
collapseDocs(collapses[0], "show");
|
collapseDocs(collapses[0], "show");
|
||||||
}
|
}
|
||||||
|
// Open all ancestor <details> to make this element visible.
|
||||||
|
openParentDetails(h3.parentNode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1009,7 +1020,7 @@ function hideThemeButtonState() {
|
||||||
if (hasClass(relatedDoc, "item-info")) {
|
if (hasClass(relatedDoc, "item-info")) {
|
||||||
relatedDoc = relatedDoc.nextElementSibling;
|
relatedDoc = relatedDoc.nextElementSibling;
|
||||||
}
|
}
|
||||||
if (hasClass(relatedDoc, "docblock") || hasClass(relatedDoc, "sub-variant")) {
|
if (hasClass(relatedDoc, "docblock")) {
|
||||||
if (mode === "toggle") {
|
if (mode === "toggle") {
|
||||||
if (hasClass(relatedDoc, "hidden-by-usual-hider")) {
|
if (hasClass(relatedDoc, "hidden-by-usual-hider")) {
|
||||||
action = "show";
|
action = "show";
|
||||||
|
@ -1318,8 +1329,6 @@ function hideThemeButtonState() {
|
||||||
if (hasClass(e, "type-decl")) {
|
if (hasClass(e, "type-decl")) {
|
||||||
// We do something special for these
|
// We do something special for these
|
||||||
return;
|
return;
|
||||||
} else if (hasClass(e, "sub-variant")) {
|
|
||||||
otherMessage = " Show fields";
|
|
||||||
} else if (hasClass(e, "non-exhaustive")) {
|
} else if (hasClass(e, "non-exhaustive")) {
|
||||||
otherMessage = " This ";
|
otherMessage = " This ";
|
||||||
if (hasClass(e, "non-exhaustive-struct")) {
|
if (hasClass(e, "non-exhaustive-struct")) {
|
||||||
|
@ -1351,7 +1360,6 @@ function hideThemeButtonState() {
|
||||||
}
|
}
|
||||||
|
|
||||||
onEachLazy(document.getElementsByClassName("docblock"), buildToggleWrapper);
|
onEachLazy(document.getElementsByClassName("docblock"), buildToggleWrapper);
|
||||||
onEachLazy(document.getElementsByClassName("sub-variant"), buildToggleWrapper);
|
|
||||||
|
|
||||||
autoCollapse(getSettingValue("collapse") === "true");
|
autoCollapse(getSettingValue("collapse") === "true");
|
||||||
|
|
||||||
|
|
|
@ -1046,10 +1046,11 @@ h3 > .collapse-toggle, h4 > .collapse-toggle {
|
||||||
}
|
}
|
||||||
|
|
||||||
.sub-variant, .sub-variant > h3 {
|
.sub-variant, .sub-variant > h3 {
|
||||||
margin-top: 1px !important;
|
margin-top: 0px !important;
|
||||||
|
padding-top: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#main > .sub-variant > h3 {
|
#main > details > .sub-variant > h3 {
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
margin-left: 25px;
|
margin-left: 25px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
|
|
|
@ -29,7 +29,9 @@ pub struct Foo;
|
||||||
|
|
||||||
impl Foo {
|
impl Foo {
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn must_use(&self) -> bool { true }
|
pub fn must_use(&self) -> bool {
|
||||||
|
true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Just a normal enum.
|
/// Just a normal enum.
|
||||||
|
@ -85,3 +87,7 @@ pub trait AnotherOne {
|
||||||
/// let x = 12;
|
/// let x = 12;
|
||||||
/// ```
|
/// ```
|
||||||
pub fn check_list_code_block() {}
|
pub fn check_list_code_block() {}
|
||||||
|
|
||||||
|
pub enum AnEnum {
|
||||||
|
WithVariants { and: usize, sub: usize, variants: usize },
|
||||||
|
}
|
||||||
|
|
|
@ -62,7 +62,8 @@ pub struct PrivStruct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// @has 'item_hide_threshold/enum.Enum.html'
|
// @has 'item_hide_threshold/enum.Enum.html'
|
||||||
// @count - '//details[@class="rustdoc-toggle type-contents-toggle"]' 0
|
// @count - '//details[@class="rustdoc-toggle type-contents-toggle"]' 1
|
||||||
|
// @has - '//details[@class="rustdoc-toggle type-contents-toggle"]' 'Show fields'
|
||||||
pub enum Enum {
|
pub enum Enum {
|
||||||
A, B, C,
|
A, B, C,
|
||||||
D {
|
D {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue