Skip to content

Commit 0d6336b

Browse files
committed
Adjust tests popups to appear in the main column
1 parent b625a41 commit 0d6336b

File tree

2 files changed

+71
-34
lines changed

2 files changed

+71
-34
lines changed

mdbook-spec/src/rules.rs

+14-11
Original file line numberDiff line numberDiff line change
@@ -83,31 +83,34 @@ impl Spec {
8383
RULE_RE
8484
.replace_all(content, |caps: &Captures<'_>| {
8585
let rule_id = &caps[1];
86-
let mut test_html = String::new();
86+
let mut test_link = String::new();
87+
let mut test_popup = String::new();
8788
if let Some(tests) = tests.get(rule_id) {
88-
test_html = format!(
89-
"<br><span class=\"popup-container\">\n\
89+
test_link = format!(
90+
"<br><div class=\"test-link\">\n\
9091
<a href=\"javascript:void(0)\" onclick=\"spec_toggle_tests('{rule_id}');\">\
91-
<span>Tests</span></a>\n\
92-
<div id=\"tests-{rule_id}\" class=\"tests-popup popup-hidden\">\n\
93-
Tests with this rule:
92+
<span>Tests</span></a></div>\n");
93+
test_popup = format!(
94+
"<div id=\"tests-{rule_id}\" class=\"tests-popup popup-hidden\">\n\
95+
Tests with this rule:\n\
9496
<ul>");
9597
for test in tests {
9698
writeln!(
97-
test_html,
99+
test_popup,
98100
"<li><a href=\"https://github.com/rust-lang/rust/blob/{git_ref}/{test_path}\">{test_path}</a></li>",
99101
test_path = test.path,
100102
)
101103
.unwrap();
102104
}
103105

104-
test_html.push_str("</ul></div></span>");
106+
test_popup.push_str("</ul></div>");
105107
}
106108
format!(
107109
"<div class=\"rule\" id=\"r-{rule_id}\">\
108-
<a class=\"rule-link\" href=\"#r-{rule_id}\" title=\"{rule_id}\"><span>[{rule_id_broken}]<span/></a>\
109-
{test_html}\
110-
</div>\n",
110+
<a class=\"rule-link\" href=\"#r-{rule_id}\" title=\"{rule_id}\"><span>[{rule_id_broken}]</span/></a>\n\
111+
{test_link}\
112+
</div>\n\
113+
{test_popup}\n",
111114
rule_id_broken = rule_id.replace(".", "<wbr>."),
112115
)
113116
})

theme/reference.css

+57-23
Original file line numberDiff line numberDiff line change
@@ -257,24 +257,32 @@ main > ul {
257257

258258
/* Values for header margin-top and blockquote margin are taken from mdbook's general.css,
259259
values for header margin-bottom are taken from <https://www.w3schools.com/cssref/css_default_values.php> */
260+
:root {
261+
/* 1.6 is body font-size */
262+
--h2-margin-top: calc(1.5rem * 1.6 * 2.5 - 16px);
263+
--h3-margin-top: calc(1.17rem * 1.6 * 2.5 - 16px);
264+
--h4-margin-top: calc(1.00rem * 1.6 * 2 - 16px);
265+
--h5-margin-top: calc(0.83rem * 1.6 * 2 - 16px);
266+
--h6-margin-top: calc(0.67rem * 1.6 * 2 - 16px);
267+
}
260268
main > h2 {
261-
margin-top: calc(2.5em - 16px);
269+
margin-top: var(--h2-margin-top);
262270
margin-bottom: calc(0.83em - 16px);
263271
}
264272
main > h3 {
265-
margin-top: calc(2.5em - 16px);
273+
margin-top: var(--h3-margin-top);
266274
margin-bottom: calc(1em - 16px);
267275
}
268276
main > h4 {
269-
margin-top: calc(2em - 16px);
277+
margin-top: var(--h4-margin-top);
270278
margin-bottom: calc(1.33em - 16px);
271279
}
272280
main > h5 {
273-
margin-top: calc(2em - 16px);
281+
margin-top: var(--h5-margin-top);
274282
margin-bottom: calc(1.67em - 16px);
275283
}
276284
main > h6 {
277-
margin-top: calc(2em - 16px);
285+
margin-top: var(--h6-margin-top);
278286
margin-bottom: calc(2.33em - 16px);
279287
}
280288
main > blockquote {
@@ -303,7 +311,7 @@ main > .rule {
303311
}
304312

305313
/* Test links */
306-
.rule .popup-container {
314+
.test-link {
307315
float: right;
308316
padding-right: 10px;
309317
}
@@ -317,51 +325,77 @@ main > .rule {
317325
navigate to it. This adds an indicator that the linked rule is the one that
318326
is "current", just like normal headers are in mdbook.
319327
*/
320-
.rule:target a::before {
328+
.rule:target .rule-link::before {
321329
display: inline-block;
322330
content: "»";
323331
padding-right: 5px;
324332
}
325333

326334
/* Dodge » from headings */
327-
.rule:has(+ h1:target),
328-
.rule:has(+ h2:target),
329-
.rule:has(+ h3:target),
330-
.rule:has(+ h4:target),
331-
.rule:has(+ h5:target),
332-
.rule:has(+ h6:target) {
335+
/* Note: Some rules have a .tests-popup in the way, so that's why this selects
336+
either with or without. */
337+
.rule:has(+ h1:target, + .tests-popup + h1:target),
338+
.rule:has(+ h2:target, + .tests-popup + h2:target),
339+
.rule:has(+ h3:target, + .tests-popup + h3:target),
340+
.rule:has(+ h4:target, + .tests-popup + h4:target),
341+
.rule:has(+ h5:target, + .tests-popup + h5:target),
342+
.rule:has(+ h6:target, + .tests-popup + h6:target) {
333343
padding-right: 24px;
334344
}
335345

346+
/* This positioning is to push the popup down over the header's top margin.
347+
Ideally I would like the popup to show *below* the header, but I have no idea how to do that.
348+
*/
349+
.tests-popup:has(+ h2) {
350+
position: relative;
351+
top: calc(var(--h2-margin-top) + 10px);
352+
}
353+
.tests-popup:has(+ h3) {
354+
position: relative;
355+
top: calc(var(--h3-margin-top) + 10px);
356+
}
357+
.tests-popup:has(+ h4) {
358+
position: relative;
359+
top: calc(var(--h4-margin-top) + 10px);
360+
}
361+
.tests-popup:has(+ h5) {
362+
position: relative;
363+
top: calc(var(--h5-margin-top) + 10px);
364+
}
365+
.tests-popup:has(+ h6) {
366+
position: relative;
367+
top: calc(var(--h6-margin-top) + 10px);
368+
}
369+
336370
/* Hide the rules if the width of the container is too small.
337371
The cutoff point is chosen semi-arbitrary, it felt that
338372
when `width < 14em`, there are too many breaks. */
339373
@container rule (width < 14em) {
340374
main > .rule a.rule-link span,
341-
main > .rule .popup-container > a span {
375+
.test-link > a span {
342376
display: none;
343377
}
344378

345379
main > .rule > a.rule-link::before {
346380
content: "[*]";
347381
}
348382

349-
main > .rule .popup-container > a::before {
383+
.test-link > a::before {
350384
content: "[T]";
351385
}
352386
}
353387

354388
/* Align rules to various siblings */
355-
.rule:has(+ p),
356-
.rule:has(+ ul) {
389+
.rule:has(+ p, + .tests-popup + p),
390+
.rule:has(+ ul, + .tests-popup + ul) {
357391
margin-top: calc((1em - var(--font-size)) / var(--font-size-mult) / 2);
358392
}
359393

360-
.rule:has(+ h1) {
394+
.rule:has(+ h1, + .tests-popup + h1) {
361395
align-self: center;
362396
}
363397

364-
.rule:has(+ h2) {
398+
.rule:has(+ h2, + .tests-popup + h2) {
365399
/* multiplying by this turns h2's em into .rule's em*/
366400
--h2-em-mult: calc(
367401
(1 / var(--font-size-mult)) /* to main font size */
@@ -375,7 +409,7 @@ main > .rule {
375409
+ (1em * var(--h2-em-mult) - 1em) / 2
376410
)
377411
}
378-
.rule:has(+ h3) {
412+
.rule:has(+ h3, + .tests-popup + h3) {
379413
/* multiplying by this turns h3's em into .rule's em*/
380414
--h3-em-mult: calc(
381415
(1 / var(--font-size-mult)) /* to main font size */
@@ -390,7 +424,7 @@ main > .rule {
390424
)
391425
}
392426

393-
.rule:has(+ h4) {
427+
.rule:has(+ h4, + .tests-popup + h4) {
394428
/* multiplying by this turns h4's em into .rule's em*/
395429
--h4-em-mult: calc(
396430
(1 / var(--font-size-mult)) /* to main font size */
@@ -405,7 +439,7 @@ main > .rule {
405439
)
406440
}
407441

408-
.rule:has(+ h5) {
442+
.rule:has(+ h5, + .tests-popup + h5) {
409443
/* multiplying by this turns h5's em into .rule's em*/
410444
--h5-em-mult: calc(
411445
(1 / var(--font-size-mult)) /* to main font size */
@@ -420,7 +454,7 @@ main > .rule {
420454
)
421455
}
422456

423-
.rule:has(+ h6) {
457+
.rule:has(+ h6, + .tests-popup + h6) {
424458
/* multiplying by this turns h6's em into .rule's em*/
425459
--h6-em-mult: calc(
426460
(1 / var(--font-size-mult)) /* to main font size */

0 commit comments

Comments
 (0)