diff options
| author | bors <bors@rust-lang.org> | 2022-09-10 23:13:23 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-09-10 23:13:23 +0000 |
| commit | 781ef3e99582fee003264087b0eea106a8c7518f (patch) | |
| tree | 7fd1ca079c6612b149c997a8703871addbd5f7b4 | |
| parent | 2287107588d92889d282e6cd3c1ca5df34cd34a5 (diff) | |
| parent | 8ba06d4b91b4193a31b9edf7d38bf6f743f1d779 (diff) | |
| download | rust-781ef3e99582fee003264087b0eea106a8c7518f.tar.gz rust-781ef3e99582fee003264087b0eea106a8c7518f.zip | |
Auto merge of #101613 - GuillaumeGomez:codeblock-tooltip, r=notriddle
Simplify codeblock and their associated tooltip It is based on https://github.com/rust-lang/rust/pull/101600 so it needs to wait for this one to be merged first. This PR does two things: * Remove CSS class duplication by setting CSS classes such as `compile_fail` directly on the `div` wrapping both the codeblock and the tooltip. * Simplify DOM: no need to wrap the tooltip into a `<div>`, it can work just as well without it. You can test it [here](https://rustdoc.crud.net/imperio/codeblock-tooltip/std/string/struct.String.html#deref). r? `@notriddle`
| -rw-r--r-- | src/librustdoc/html/highlight.rs | 27 | ||||
| -rw-r--r-- | src/librustdoc/html/static/css/rustdoc.css | 142 | ||||
| -rw-r--r-- | src/test/rustdoc-gui/check_info_sign_position.goml | 8 | ||||
| -rw-r--r-- | src/test/rustdoc-gui/codeblock-tooltip.goml | 90 | ||||
| -rw-r--r-- | src/test/rustdoc-gui/overflow-tooltip-information.goml | 2 | ||||
| -rw-r--r-- | src/test/rustdoc/codeblock-title.rs | 6 |
6 files changed, 139 insertions, 136 deletions
diff --git a/src/librustdoc/html/highlight.rs b/src/librustdoc/html/highlight.rs index 84781d89838..1e6cab8fcd3 100644 --- a/src/librustdoc/html/highlight.rs +++ b/src/librustdoc/html/highlight.rs @@ -78,21 +78,22 @@ pub(crate) fn render_source_with_highlighting( } fn write_header(out: &mut Buffer, class: &str, extra_content: Option<Buffer>, tooltip: Tooltip) { - write!(out, "<div class=\"example-wrap\">"); - - let tooltip_class = match tooltip { - Tooltip::Ignore => " ignore", - Tooltip::CompileFail => " compile_fail", - Tooltip::ShouldPanic => " should_panic", - Tooltip::Edition(_) => " edition", - Tooltip::None => "", - }; + write!( + out, + "<div class=\"example-wrap{}\">", + match tooltip { + Tooltip::Ignore => " ignore", + Tooltip::CompileFail => " compile_fail", + Tooltip::ShouldPanic => " should_panic", + Tooltip::Edition(_) => " edition", + Tooltip::None => "", + }, + ); if tooltip != Tooltip::None { write!( out, - "<div class='information'><div class='tooltip{}'{}>ⓘ</div></div>", - tooltip_class, + "<div class='tooltip'{}>ⓘ</div>", if let Tooltip::Edition(edition_info) = tooltip { format!(" data-edition=\"{}\"", edition_info) } else { @@ -104,10 +105,10 @@ fn write_header(out: &mut Buffer, class: &str, extra_content: Option<Buffer>, to if let Some(extra) = extra_content { out.push_buffer(extra); } - if class.is_empty() && tooltip_class.is_empty() { + if class.is_empty() { write!(out, "<pre class=\"rust\">"); } else { - write!(out, "<pre class=\"rust {class}{tooltip_class}\">"); + write!(out, "<pre class=\"rust {class}\">"); } write!(out, "<code>"); } diff --git a/src/librustdoc/html/static/css/rustdoc.css b/src/librustdoc/html/static/css/rustdoc.css index dae2ff4e226..31fced21ce8 100644 --- a/src/librustdoc/html/static/css/rustdoc.css +++ b/src/librustdoc/html/static/css/rustdoc.css @@ -1151,42 +1151,100 @@ pre.rust .question-mark { font-weight: bold; } -pre.compile_fail, -pre.should_panic { +.example-wrap.compile_fail, +.example-wrap.should_panic { border-left: 2px solid var(--codeblock-error-color); } -pre.ignore { +.ignore.example-wrap { border-left: 2px solid var(--codeblock-ignore-color); } -.example-wrap:hover pre.compile_fail, -.example-wrap:hover pre.should_panic { +.example-wrap.compile_fail:hover, +.example-wrap.should_panic:hover { border-left: 2px solid var(--codeblock-error-hover-color); } -.example-wrap:hover pre.ignore { +.example-wrap.ignore:hover { border-left: 2px solid var(--codeblock-ignore-hover-color); } -.tooltip.compile_fail, -.tooltip.should_panic { +.example-wrap.compile_fail .tooltip, +.example-wrap.should_panic .tooltip { color: var(--codeblock-error-color); } -.tooltip.ignore { +.example-wrap.ignore .tooltip { color: var(--codeblock-ignore-color); } -.example-wrap:hover .tooltip.compile_fail, -.example-wrap:hover .tooltip.should_panic { +.example-wrap.compile_fail:hover .tooltip, +.example-wrap.should_panic:hover .tooltip { color: var(--codeblock-error-hover-color); } -.example-wrap:hover .tooltip.ignore { +.example-wrap.ignore:hover .tooltip { color: var(--codeblock-ignore-hover-color); } +.example-wrap .tooltip { + position: absolute; + display: block; + cursor: pointer; + left: -25px; + top: 5px; +} + +.example-wrap .tooltip::after { + display: none; + text-align: center; + padding: 5px 3px 3px 3px; + border-radius: 6px; + margin-left: 5px; + font-size: 1rem; + border: 1px solid var(--border-color); + position: absolute; + width: max-content; + top: -2px; + z-index: 1; +} + +.example-wrap .tooltip::before { + content: " "; + position: absolute; + top: 50%; + left: 16px; + margin-top: -5px; + border-width: 5px; + border-style: solid; + display: none; + z-index: 1; +} + +.example-wrap.ignore .tooltip::after { + content: "This example is not tested"; +} +.example-wrap.compile_fail .tooltip::after { + content: "This example deliberately fails to compile"; +} +.example-wrap.should_panic .tooltip::after { + content: "This example panics"; +} +.example-wrap.edition .tooltip::after { + content: "This code runs with edition " attr(data-edition); +} + +.example-wrap .tooltip:hover::before, .example-wrap .tooltip:hover::after { + display: inline; +} + +.example-wrap.compile_fail .tooltip, +.example-wrap.should_panic .tooltip, +.example-wrap.ignore .tooltip { + font-weight: bold; + font-size: 1.25rem; +} + a.test-arrow { display: inline-block; visibility: hidden; @@ -1252,62 +1310,6 @@ h3.variant { padding-right: 3px; } -.information { - position: absolute; - left: -25px; - margin-top: 7px; - z-index: 1; -} - -.tooltip { - position: relative; - display: inline-block; - cursor: pointer; -} - -.tooltip::after { - display: none; - text-align: center; - padding: 5px 3px 3px 3px; - border-radius: 6px; - margin-left: 5px; - font-size: 1rem; - border: 1px solid var(--border-color); -} - -.tooltip.ignore::after { - content: "This example is not tested"; -} -.tooltip.compile_fail::after { - content: "This example deliberately fails to compile"; -} -.tooltip.should_panic::after { - content: "This example panics"; -} -.tooltip.edition::after { - content: "This code runs with edition " attr(data-edition); -} - -.tooltip::before { - content: " "; - position: absolute; - top: 50%; - left: 16px; - margin-top: -5px; - border-width: 5px; - border-style: solid; - display: none; -} - -.tooltip:hover::before, .tooltip:hover::after { - display: inline; -} - -.tooltip.compile_fail, .tooltip.should_panic, .tooltip.ignore { - font-weight: bold; - font-size: 1.25rem; -} - .notable-traits-tooltip { display: inline-block; cursor: pointer; @@ -1349,7 +1351,7 @@ h3.variant { display: block; } -.notable-traits .docblock code.content{ +.notable-traits .docblock code.content { margin: 0; padding: 0; font-size: 1.25rem; @@ -1718,7 +1720,7 @@ in storage.js plus the media query with (max-width: 700px) to prevent an overlay between the "collapse toggle" and the information tooltip. However, it's not needed with smaller screen width because the doc/code block is always put "one line" below. */ - .docblock > .example-wrap:first-child > .information > .tooltip { + .docblock > .example-wrap:first-child .tooltip { margin-top: 16px; } diff --git a/src/test/rustdoc-gui/check_info_sign_position.goml b/src/test/rustdoc-gui/check_info_sign_position.goml index c249895503a..47a78f02fb6 100644 --- a/src/test/rustdoc-gui/check_info_sign_position.goml +++ b/src/test/rustdoc-gui/check_info_sign_position.goml @@ -4,8 +4,8 @@ goto: file://|DOC_PATH|/test_docs/index.html goto: ./fn.check_list_code_block.html // If the codeblock is the first element of the docblock, the information tooltip must have // have some top margin to avoid going over the toggle (the "[+]"). -assert-css: (".docblock > .example-wrap > .information > .compile_fail", { "margin-top": "16px" }) +assert-css: (".docblock > .example-wrap.compile_fail .tooltip", { "margin-top": "16px" }) // Checks that the other codeblocks don't have this top margin. -assert-css: ("ol > li > .example-wrap > .information > .compile_fail", { "margin-top": "0px" }) -assert-css: ("ol > li > .example-wrap > .information > .ignore", { "margin-top": "0px" }) -assert-css: (".docblock > .example-wrap > .information > .ignore", { "margin-top": "0px" }) +assert-css: ("ol > li > .example-wrap.compile_fail .tooltip", { "margin-top": "0px" }) +assert-css: ("ol > li > .example-wrap.ignore .tooltip", { "margin-top": "0px" }) +assert-css: (".docblock > .example-wrap.ignore .tooltip", { "margin-top": "0px" }) diff --git a/src/test/rustdoc-gui/codeblock-tooltip.goml b/src/test/rustdoc-gui/codeblock-tooltip.goml index 4e85c33c894..21a9e120c80 100644 --- a/src/test/rustdoc-gui/codeblock-tooltip.goml +++ b/src/test/rustdoc-gui/codeblock-tooltip.goml @@ -7,90 +7,90 @@ local-storage: {"rustdoc-theme": "dark", "rustdoc-use-system-theme": "false"} reload: // compile_fail block -assert-css: (".docblock .information .compile_fail", {"color": "rgba(255, 0, 0, 0.5)"}) -assert-css: (".docblock .example-wrap pre.compile_fail", {"border-left": "2px solid rgba(255, 0, 0, 0.5)"}) +assert-css: (".docblock .example-wrap.compile_fail .tooltip", {"color": "rgba(255, 0, 0, 0.5)"}) +assert-css: (".docblock .example-wrap.compile_fail", {"border-left": "2px solid rgba(255, 0, 0, 0.5)"}) -move-cursor-to: ".docblock .information .compile_fail" +move-cursor-to: ".docblock .example-wrap.compile_fail" -assert-css: (".docblock .information .compile_fail", {"color": "rgb(255, 0, 0)"}) -assert-css: (".docblock .example-wrap pre.compile_fail", {"border-left": "2px solid rgb(255, 0, 0)"}) +assert-css: (".docblock .example-wrap.compile_fail .tooltip", {"color": "rgb(255, 0, 0)"}) +assert-css: (".docblock .example-wrap.compile_fail", {"border-left": "2px solid rgb(255, 0, 0)"}) // should_panic block -assert-css: (".docblock .information .should_panic", {"color": "rgba(255, 0, 0, 0.5)"}) -assert-css: (".docblock .example-wrap pre.should_panic", {"border-left": "2px solid rgba(255, 0, 0, 0.5)"}) +assert-css: (".docblock .example-wrap.should_panic .tooltip", {"color": "rgba(255, 0, 0, 0.5)"}) +assert-css: (".docblock .example-wrap.should_panic", {"border-left": "2px solid rgba(255, 0, 0, 0.5)"}) -move-cursor-to: ".docblock .information .should_panic" +move-cursor-to: ".docblock .example-wrap.should_panic" -assert-css: (".docblock .information .should_panic", {"color": "rgb(255, 0, 0)"}) -assert-css: (".docblock .example-wrap pre.should_panic", {"border-left": "2px solid rgb(255, 0, 0)"}) +assert-css: (".docblock .example-wrap.should_panic .tooltip", {"color": "rgb(255, 0, 0)"}) +assert-css: (".docblock .example-wrap.should_panic", {"border-left": "2px solid rgb(255, 0, 0)"}) // ignore block -assert-css: (".docblock .information .ignore", {"color": "rgba(255, 142, 0, 0.6)"}) -assert-css: (".docblock .example-wrap pre.ignore", {"border-left": "2px solid rgba(255, 142, 0, 0.6)"}) +assert-css: (".docblock .example-wrap.ignore .tooltip", {"color": "rgba(255, 142, 0, 0.6)"}) +assert-css: (".docblock .example-wrap.ignore", {"border-left": "2px solid rgba(255, 142, 0, 0.6)"}) -move-cursor-to: ".docblock .information .ignore" +move-cursor-to: ".docblock .example-wrap.ignore" -assert-css: (".docblock .information .ignore", {"color": "rgb(255, 142, 0)"}) -assert-css: (".docblock .example-wrap pre.ignore", {"border-left": "2px solid rgb(255, 142, 0)"}) +assert-css: (".docblock .example-wrap.ignore .tooltip", {"color": "rgb(255, 142, 0)"}) +assert-css: (".docblock .example-wrap.ignore", {"border-left": "2px solid rgb(255, 142, 0)"}) // Light theme. local-storage: {"rustdoc-theme": "light"} reload: -assert-css: (".docblock .information .compile_fail", {"color": "rgba(255, 0, 0, 0.5)"}) -assert-css: (".docblock .example-wrap pre.compile_fail", {"border-left": "2px solid rgba(255, 0, 0, 0.5)"}) +assert-css: (".docblock .example-wrap.compile_fail .tooltip", {"color": "rgba(255, 0, 0, 0.5)"}) +assert-css: (".docblock .example-wrap.compile_fail", {"border-left": "2px solid rgba(255, 0, 0, 0.5)"}) -move-cursor-to: ".docblock .information .compile_fail" +move-cursor-to: ".docblock .example-wrap.compile_fail" -assert-css: (".docblock .information .compile_fail", {"color": "rgb(255, 0, 0)"}) -assert-css: (".docblock .example-wrap pre.compile_fail", {"border-left": "2px solid rgb(255, 0, 0)"}) +assert-css: (".docblock .example-wrap.compile_fail .tooltip", {"color": "rgb(255, 0, 0)"}) +assert-css: (".docblock .example-wrap.compile_fail", {"border-left": "2px solid rgb(255, 0, 0)"}) // should_panic block -assert-css: (".docblock .information .should_panic", {"color": "rgba(255, 0, 0, 0.5)"}) -assert-css: (".docblock .example-wrap pre.should_panic", {"border-left": "2px solid rgba(255, 0, 0, 0.5)"}) +assert-css: (".docblock .example-wrap.should_panic .tooltip", {"color": "rgba(255, 0, 0, 0.5)"}) +assert-css: (".docblock .example-wrap.should_panic", {"border-left": "2px solid rgba(255, 0, 0, 0.5)"}) -move-cursor-to: ".docblock .information .should_panic" +move-cursor-to: ".docblock .example-wrap.should_panic" -assert-css: (".docblock .information .should_panic", {"color": "rgb(255, 0, 0)"}) -assert-css: (".docblock .example-wrap pre.should_panic", {"border-left": "2px solid rgb(255, 0, 0)"}) +assert-css: (".docblock .example-wrap.should_panic .tooltip", {"color": "rgb(255, 0, 0)"}) +assert-css: (".docblock .example-wrap.should_panic", {"border-left": "2px solid rgb(255, 0, 0)"}) // ignore block -assert-css: (".docblock .information .ignore", {"color": "rgba(255, 142, 0, 0.6)"}) -assert-css: (".docblock .example-wrap pre.ignore", {"border-left": "2px solid rgba(255, 142, 0, 0.6)"}) +assert-css: (".docblock .example-wrap.ignore .tooltip", {"color": "rgba(255, 142, 0, 0.6)"}) +assert-css: (".docblock .example-wrap.ignore", {"border-left": "2px solid rgba(255, 142, 0, 0.6)"}) -move-cursor-to: ".docblock .information .ignore" +move-cursor-to: ".docblock .example-wrap.ignore" -assert-css: (".docblock .information .ignore", {"color": "rgb(255, 142, 0)"}) -assert-css: (".docblock .example-wrap pre.ignore", {"border-left": "2px solid rgb(255, 142, 0)"}) +assert-css: (".docblock .example-wrap.ignore .tooltip", {"color": "rgb(255, 142, 0)"}) +assert-css: (".docblock .example-wrap.ignore", {"border-left": "2px solid rgb(255, 142, 0)"}) // Ayu theme. local-storage: {"rustdoc-theme": "ayu"} reload: -assert-css: (".docblock .information .compile_fail", {"color": "rgba(255, 0, 0, 0.5)"}) -assert-css: (".docblock .example-wrap pre.compile_fail", {"border-left": "2px solid rgba(255, 0, 0, 0.5)"}) +assert-css: (".docblock .example-wrap.compile_fail .tooltip", {"color": "rgba(255, 0, 0, 0.5)"}) +assert-css: (".docblock .example-wrap.compile_fail", {"border-left": "2px solid rgba(255, 0, 0, 0.5)"}) -move-cursor-to: ".docblock .information .compile_fail" +move-cursor-to: ".docblock .example-wrap.compile_fail" -assert-css: (".docblock .information .compile_fail", {"color": "rgb(255, 0, 0)"}) -assert-css: (".docblock .example-wrap pre.compile_fail", {"border-left": "2px solid rgb(255, 0, 0)"}) +assert-css: (".docblock .example-wrap.compile_fail .tooltip", {"color": "rgb(255, 0, 0)"}) +assert-css: (".docblock .example-wrap.compile_fail", {"border-left": "2px solid rgb(255, 0, 0)"}) // should_panic block -assert-css: (".docblock .information .should_panic", {"color": "rgba(255, 0, 0, 0.5)"}) -assert-css: (".docblock .example-wrap pre.should_panic", {"border-left": "2px solid rgba(255, 0, 0, 0.5)"}) +assert-css: (".docblock .example-wrap.should_panic .tooltip", {"color": "rgba(255, 0, 0, 0.5)"}) +assert-css: (".docblock .example-wrap.should_panic", {"border-left": "2px solid rgba(255, 0, 0, 0.5)"}) -move-cursor-to: ".docblock .information .should_panic" +move-cursor-to: ".docblock .example-wrap.should_panic" -assert-css: (".docblock .information .should_panic", {"color": "rgb(255, 0, 0)"}) -assert-css: (".docblock .example-wrap pre.should_panic", {"border-left": "2px solid rgb(255, 0, 0)"}) +assert-css: (".docblock .example-wrap.should_panic .tooltip", {"color": "rgb(255, 0, 0)"}) +assert-css: (".docblock .example-wrap.should_panic", {"border-left": "2px solid rgb(255, 0, 0)"}) // ignore block -assert-css: (".docblock .information .ignore", {"color": "rgba(255, 142, 0, 0.6)"}) -assert-css: (".docblock .example-wrap pre.ignore", {"border-left": "2px solid rgba(255, 142, 0, 0.6)"}) +assert-css: (".docblock .example-wrap.ignore .tooltip", {"color": "rgba(255, 142, 0, 0.6)"}) +assert-css: (".docblock .example-wrap.ignore", {"border-left": "2px solid rgba(255, 142, 0, 0.6)"}) -move-cursor-to: ".docblock .information .ignore" +move-cursor-to: ".docblock .example-wrap.ignore" -assert-css: (".docblock .information .ignore", {"color": "rgb(255, 142, 0)"}) -assert-css: (".docblock .example-wrap pre.ignore", {"border-left": "2px solid rgb(255, 142, 0)"}) +assert-css: (".docblock .example-wrap.ignore .tooltip", {"color": "rgb(255, 142, 0)"}) +assert-css: (".docblock .example-wrap.ignore", {"border-left": "2px solid rgb(255, 142, 0)"}) diff --git a/src/test/rustdoc-gui/overflow-tooltip-information.goml b/src/test/rustdoc-gui/overflow-tooltip-information.goml index 5be1aff8d3b..f481f82c234 100644 --- a/src/test/rustdoc-gui/overflow-tooltip-information.goml +++ b/src/test/rustdoc-gui/overflow-tooltip-information.goml @@ -2,7 +2,7 @@ // have overflow and max-width CSS rules set because they create a bug in firefox on // mac. For more information: https://github.com/rust-lang/rust/issues/89185 goto: file://|DOC_PATH|/test_docs/fn.foo.html -assert-css: (".docblock > .example-wrap > .information", { +assert-css: (".docblock > .example-wrap .tooltip", { "overflow-x": "visible", "max-width": "none" }, ALL) diff --git a/src/test/rustdoc/codeblock-title.rs b/src/test/rustdoc/codeblock-title.rs index 140c5b3a672..b9b0b0d1abf 100644 --- a/src/test/rustdoc/codeblock-title.rs +++ b/src/test/rustdoc/codeblock-title.rs @@ -1,8 +1,8 @@ #![crate_name = "foo"] -// @has foo/fn.bar.html '//*[@class="tooltip compile_fail"]' "ⓘ" -// @has foo/fn.bar.html '//*[@class="tooltip ignore"]' "ⓘ" -// @has foo/fn.bar.html '//*[@class="tooltip should_panic"]' "ⓘ" +// @has foo/fn.bar.html '//*[@class="example-wrap compile_fail"]/*[@class="tooltip"]' "ⓘ" +// @has foo/fn.bar.html '//*[@class="example-wrap ignore"]/*[@class="tooltip"]' "ⓘ" +// @has foo/fn.bar.html '//*[@class="example-wrap should_panic"]/*[@class="tooltip"]' "ⓘ" // @has foo/fn.bar.html '//*[@data-edition="2018"]' "ⓘ" /// foo |
