diff options
author | Eric Huss <eric@huss.org> | 2021-02-22 14:50:17 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-22 14:50:17 -0800 |
commit | c83bbd631930787c7844b185917d40bcc28733d8 (patch) | |
tree | 44671565c4e989a45079591026ef944fcbe1420a | |
parent | fad3c663f417150735f947a2344a0d0883493405 (diff) | |
parent | 45d41eac5f141c66af9589b56fe8d23f91fc7b22 (diff) |
Merge pull request #1463 from ehuss/fix-header-scroll
Fix some issues with fragment scrolling and linking.
-rw-r--r-- | src/renderer/html_handlebars/hbs_renderer.rs | 14 | ||||
-rw-r--r-- | src/theme/css/general.css | 19 | ||||
-rw-r--r-- | tests/rendered_output.rs | 6 |
3 files changed, 21 insertions, 18 deletions
diff --git a/src/renderer/html_handlebars/hbs_renderer.rs b/src/renderer/html_handlebars/hbs_renderer.rs index 6b934b13..66572d04 100644 --- a/src/renderer/html_handlebars/hbs_renderer.rs +++ b/src/renderer/html_handlebars/hbs_renderer.rs @@ -756,7 +756,7 @@ fn insert_link_into_header( *id_count += 1; format!( - r##"<h{level}><a class="header" href="#{id}" id="{id}">{text}</a></h{level}>"##, + r##"<h{level} id="{id}"><a class="header" href="#{id}">{text}</a></h{level}>"##, level = level, id = id, text = content @@ -927,27 +927,27 @@ mod tests { let inputs = vec![ ( "blah blah <h1>Foo</h1>", - r##"blah blah <h1><a class="header" href="#foo" id="foo">Foo</a></h1>"##, + r##"blah blah <h1 id="foo"><a class="header" href="#foo">Foo</a></h1>"##, ), ( "<h1>Foo</h1>", - r##"<h1><a class="header" href="#foo" id="foo">Foo</a></h1>"##, + r##"<h1 id="foo"><a class="header" href="#foo">Foo</a></h1>"##, ), ( "<h3>Foo^bar</h3>", - r##"<h3><a class="header" href="#foobar" id="foobar">Foo^bar</a></h3>"##, + r##"<h3 id="foobar"><a class="header" href="#foobar">Foo^bar</a></h3>"##, ), ( "<h4></h4>", - r##"<h4><a class="header" href="#" id=""></a></h4>"##, + r##"<h4 id=""><a class="header" href="#"></a></h4>"##, ), ( "<h4><em>Hï</em></h4>", - r##"<h4><a class="header" href="#hï" id="hï"><em>Hï</em></a></h4>"##, + r##"<h4 id="hï"><a class="header" href="#hï"><em>Hï</em></a></h4>"##, ), ( "<h1>Foo</h1><h3>Foo</h3>", - r##"<h1><a class="header" href="#foo" id="foo">Foo</a></h1><h3><a class="header" href="#foo-1" id="foo-1">Foo</a></h3>"##, + r##"<h1 id="foo"><a class="header" href="#foo">Foo</a></h1><h3 id="foo-1"><a class="header" href="#foo-1">Foo</a></h3>"##, ), ]; diff --git a/src/theme/css/general.css b/src/theme/css/general.css index 815dae1a..d437b51c 100644 --- a/src/theme/css/general.css +++ b/src/theme/css/general.css @@ -45,20 +45,23 @@ h4, h5 { margin-top: 2em; } margin-top: 1em; } -h1 a.header:target::before, -h2 a.header:target::before, -h3 a.header:target::before, -h4 a.header:target::before { +h1:target::before, +h2:target::before, +h3:target::before, +h4:target::before, +h5:target::before, +h6:target::before { display: inline-block; content: "»"; margin-left: -30px; width: 30px; } -h1 a.header:target, -h2 a.header:target, -h3 a.header:target, -h4 a.header:target { +/* This is broken on Safari as of version 14, but is fixed + in Safari Technology Preview 117 which I think will be Safari 14.2. + https://bugs.webkit.org/show_bug.cgi?id=218076 +*/ +:target { scroll-margin-top: calc(var(--menu-bar-height) + 0.5em); } diff --git a/tests/rendered_output.rs b/tests/rendered_output.rs index f0b50582..649873ac 100644 --- a/tests/rendered_output.rs +++ b/tests/rendered_output.rs @@ -104,12 +104,12 @@ fn check_correct_cross_links_in_nested_dir() { assert_contains_strings( first.join("index.html"), - &[r##"href="#some-section" id="some-section""##], + &[r##"<h2 id="some-section"><a class="header" href="#some-section">"##], ); assert_contains_strings( first.join("nested.html"), - &[r##"href="#some-section" id="some-section""##], + &[r##"<h2 id="some-section"><a class="header" href="#some-section">"##], ); } @@ -373,7 +373,7 @@ fn able_to_include_files_in_chapters() { let includes = temp.path().join("book/first/includes.html"); let summary_strings = &[ - r##"<h1><a class="header" href="#summary" id="summary">Summary</a></h1>"##, + r##"<h1 id="summary"><a class="header" href="#summary">Summary</a></h1>"##, ">First Chapter</a>", ]; assert_contains_strings(&includes, summary_strings); |