From 838e742ea49648d63461b41ea330a9a1ed086c02 Mon Sep 17 00:00:00 2001 From: SpecificProtagonist Date: Fri, 9 May 2025 20:28:51 +0200 Subject: [PATCH 1/5] rustdoc: Fix links in trait impl docs --- src/librustdoc/html/static/js/main.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/librustdoc/html/static/js/main.js b/src/librustdoc/html/static/js/main.js index a7ce2bf9048bf..7b1a61a3ffa45 100644 --- a/src/librustdoc/html/static/js/main.js +++ b/src/librustdoc/html/static/js/main.js @@ -1179,8 +1179,10 @@ function preLoadCss(cssUrl) { onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"), el => { // @ts-expect-error + // Clicking on the summary's contents should not collapse it, + // but links within should still fire. el.addEventListener("click", e => { - if (e.target.tagName !== "SUMMARY" && e.target.tagName !== "A") { + if (!e.target.matches("summary, a, a *")) { e.preventDefault(); } }); From 31ae60d30d96b32c35a3dd5239a68997c9d4a27d Mon Sep 17 00:00:00 2001 From: SpecificProtagonist Date: Sat, 10 May 2025 19:24:59 +0200 Subject: [PATCH 2/5] gui test --- tests/rustdoc-gui/collapse-trait-impl.goml | 23 ++++++++++++++++++++++ tests/rustdoc-gui/src/test_docs/lib.rs | 1 + 2 files changed, 24 insertions(+) create mode 100644 tests/rustdoc-gui/collapse-trait-impl.goml diff --git a/tests/rustdoc-gui/collapse-trait-impl.goml b/tests/rustdoc-gui/collapse-trait-impl.goml new file mode 100644 index 0000000000000..dc1170a831aef --- /dev/null +++ b/tests/rustdoc-gui/collapse-trait-impl.goml @@ -0,0 +1,23 @@ +// Checks that individual trait impls can only be collapsed via clicking directly on the summary element +include: "utils.goml" + +go-to: "file://" + |DOC_PATH| + "/test_docs/struct.Foo.html" +assert-attribute: ("details:has(#trait-impl-link-in-summary)", {"open": ""}) + +// Collapse the trait impl doc. The actual clickable area is outside the element, hence offset. +click-with-offset: ("summary:has(#trait-impl-link-in-summary)", {"x": -15, "y": 5}) +assert-attribute-false: ("details:has(#trait-impl-link-in-summary)", {"open": ""}) + +// Clicks on the text should be ignored +click: "summary:has(#trait-impl-link-in-summary) > .impl" +assert-window-property: ({"pageYOffset": "0"}) + +// But links should still work +click: "#trait-impl-link-in-summary" +assert-window-property-false: ({"pageYOffset": "0"}) + +// As well as clicks on elements within links +go-to: "file://" + |DOC_PATH| + "/test_docs/struct.Foo.html" +assert-window-property: ({"pageYOffset": "0"}) +click: "#trait-impl-link-in-summary" +assert-window-property-false: ({"pageYOffset": "0"}) diff --git a/tests/rustdoc-gui/src/test_docs/lib.rs b/tests/rustdoc-gui/src/test_docs/lib.rs index bb0015b8f9c43..e8afe8b568727 100644 --- a/tests/rustdoc-gui/src/test_docs/lib.rs +++ b/tests/rustdoc-gui/src/test_docs/lib.rs @@ -79,6 +79,7 @@ impl Foo { pub fn warning2() {} } +/// A collapsible trait impl with a link impl AsRef for Foo { fn as_ref(&self) -> &str { "hello" From bd23ee2382ae8f940771dc08be5e234f6963ba72 Mon Sep 17 00:00:00 2001 From: SpecificProtagonist Date: Sat, 10 May 2025 19:48:13 +0200 Subject: [PATCH 3/5] gui test different link --- tests/rustdoc-gui/collapse-trait-impl.goml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/rustdoc-gui/collapse-trait-impl.goml b/tests/rustdoc-gui/collapse-trait-impl.goml index dc1170a831aef..5f95dcc01c11c 100644 --- a/tests/rustdoc-gui/collapse-trait-impl.goml +++ b/tests/rustdoc-gui/collapse-trait-impl.goml @@ -13,7 +13,7 @@ click: "summary:has(#trait-impl-link-in-summary) > .impl" assert-window-property: ({"pageYOffset": "0"}) // But links should still work -click: "#trait-impl-link-in-summary" +click: "summary:has(#trait-impl-link-in-summary) a:has(#trait-impl-link-in-summary)" assert-window-property-false: ({"pageYOffset": "0"}) // As well as clicks on elements within links From b8d55544c5442a3d556c54af9a1956e1578da0e4 Mon Sep 17 00:00:00 2001 From: SpecificProtagonist Date: Sun, 11 May 2025 07:58:18 +0200 Subject: [PATCH 4/5] remove superfluous import --- tests/rustdoc-gui/collapse-trait-impl.goml | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/rustdoc-gui/collapse-trait-impl.goml b/tests/rustdoc-gui/collapse-trait-impl.goml index 5f95dcc01c11c..9b2e76a3ef912 100644 --- a/tests/rustdoc-gui/collapse-trait-impl.goml +++ b/tests/rustdoc-gui/collapse-trait-impl.goml @@ -1,5 +1,4 @@ // Checks that individual trait impls can only be collapsed via clicking directly on the summary element -include: "utils.goml" go-to: "file://" + |DOC_PATH| + "/test_docs/struct.Foo.html" assert-attribute: ("details:has(#trait-impl-link-in-summary)", {"open": ""}) From 4516a5b96bbf8ba39dd74913aac7297c0c0f2ab6 Mon Sep 17 00:00:00 2001 From: SpecificProtagonist Date: Sun, 11 May 2025 08:02:19 +0200 Subject: [PATCH 5/5] better checks --- tests/rustdoc-gui/collapse-trait-impl.goml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/rustdoc-gui/collapse-trait-impl.goml b/tests/rustdoc-gui/collapse-trait-impl.goml index 9b2e76a3ef912..4db02e5239b5e 100644 --- a/tests/rustdoc-gui/collapse-trait-impl.goml +++ b/tests/rustdoc-gui/collapse-trait-impl.goml @@ -6,17 +6,21 @@ assert-attribute: ("details:has(#trait-impl-link-in-summary)", {"open": ""}) // Collapse the trait impl doc. The actual clickable area is outside the element, hence offset. click-with-offset: ("summary:has(#trait-impl-link-in-summary)", {"x": -15, "y": 5}) assert-attribute-false: ("details:has(#trait-impl-link-in-summary)", {"open": ""}) +click-with-offset: ("summary:has(#trait-impl-link-in-summary)", {"x": -15, "y": 5}) +assert-attribute: ("details:has(#trait-impl-link-in-summary)", {"open": ""}) // Clicks on the text should be ignored click: "summary:has(#trait-impl-link-in-summary) > .impl" -assert-window-property: ({"pageYOffset": "0"}) +assert-attribute: ("details:has(#trait-impl-link-in-summary)", {"open": ""}) // But links should still work click: "summary:has(#trait-impl-link-in-summary) a:has(#trait-impl-link-in-summary)" assert-window-property-false: ({"pageYOffset": "0"}) +assert-attribute: ("details:has(#trait-impl-link-in-summary)", {"open": ""}) // As well as clicks on elements within links go-to: "file://" + |DOC_PATH| + "/test_docs/struct.Foo.html" assert-window-property: ({"pageYOffset": "0"}) click: "#trait-impl-link-in-summary" assert-window-property-false: ({"pageYOffset": "0"}) +assert-attribute: ("details:has(#trait-impl-link-in-summary)", {"open": ""})