diff --git a/docs/patterns/writing/tables-of-contents/index.html b/docs/patterns/writing/tables-of-contents/index.html
index 375749e..eba4796 100644
--- a/docs/patterns/writing/tables-of-contents/index.html
+++ b/docs/patterns/writing/tables-of-contents/index.html
@@ -93,6 +93,16 @@
diff --git a/docs/service-worker.js b/docs/service-worker.js
index a0d62ce..2655c57 100644
--- a/docs/service-worker.js
+++ b/docs/service-worker.js
@@ -37,7 +37,7 @@
/* eslint-disable indent, no-unused-vars, no-multiple-empty-lines, max-nested-callbacks, space-before-function-paren, quotes, comma-spacing */
'use strict';
-var precacheConfig = [["browserconfig.xml","67c3113b1574fecc6015d56d774e1d38"],["categories/index.xml","0ac1d02cfbcad2fcc8c13b2c54715338"],["css/fonts/miriamlibre-bold.woff","96496f6f06535d25b3bcba876917ca35"],["css/fonts/miriamlibre-bold.woff2","668defa44d9a74dd709ce0c826a5eb11"],["css/fonts/pt_sans-web-bold.woff","f83c22b548d2d684e24e315d81f7d22b"],["css/fonts/pt_sans-web-bold.woff2","84520c22e6ebf1b30b6f17251d65fff7"],["css/fonts/pt_sans-web-italic.woff","31f09f09a1d3fbe6c8de19644ef0e614"],["css/fonts/pt_sans-web-italic.woff2","df128e1d5a449fc0506fc1b48aac0184"],["css/fonts/pt_sans-web-regular.woff","32100f6ebf01af64d4a71416561c072d"],["css/fonts/pt_sans-web-regular.woff2","b6d4ede9a3a5dbe4d5ac242ae4b0ecc2"],["css/images/icon-tick.svg","35d4d4728ea80d254508b2bca4109d70"],["css/images/stripe.svg","fa3f32a026b6a1bb04ee98d963432e15"],["css/prism.css","004029c8c70ed2bbaa5d9debcf14f8c7"],["css/styles.css","255994e47ed95f36f05e5e6e4286d842"],["images/android-icon-144x144.png","43e1f47f182b13d0dee15f510213e928"],["images/android-icon-192x192.png","4c07782e52e0ab714074e6d3d69dc3ec"],["images/android-icon-36x36.png","3b2cd8c925a66bf84c89b68bb30e5f62"],["images/android-icon-48x48.png","45dc386eea1d8a46216a8b6de9b156c6"],["images/android-icon-72x72.png","b04c64637efed2b04fa900ddfcbfe75d"],["images/android-icon-96x96.png","bd9c126a4d6baf7ce442122ce0e89e11"],["images/apple-icon-114x114.png","72e127d6f01dfcd2ba2340141babc536"],["images/apple-icon-120x120.png","bc7cd9e36869e66aaca78412207bf723"],["images/apple-icon-144x144.png","43e1f47f182b13d0dee15f510213e928"],["images/apple-icon-152x152.png","567c64205576865b5e5d06c849613ca2"],["images/apple-icon-180x180.png","6b8734c446bf02ab50be598b4c01ec9c"],["images/apple-icon-57x57.png","f8c586086752c78870820b6190d6b42b"],["images/apple-icon-60x60.png","6e88df111e506bcd5501bed4ff10542e"],["images/apple-icon-72x72.png","b04c64637efed2b04fa900ddfcbfe75d"],["images/apple-icon-76x76.png","d8666e0ac256f39f8c5c628486bd71fb"],["images/apple-icon-precomposed.png","725f6cec25256abb1db10385e0724400"],["images/apple-icon.png","725f6cec25256abb1db10385e0724400"],["images/browser-Chrome-Android.svg","3100b2a9c5f0e34982c717fc2aa46d73"],["images/browser-Chrome.svg","fa39b4be6727525330e928f582fbe80a"],["images/browser-Edge.svg","9e8265ab8f6a701587a4271dd3aa6a73"],["images/browser-Firefox-Android.svg","452df7b9e83c70a07e8e03b4e8dab9c4"],["images/browser-Firefox.svg","d3093eda664be3d0cc6d791e1386420f"],["images/browser-IE.svg","13e192cf2b3fe17e7049a49b7d085caa"],["images/browser-Opera.svg","95d65630c9f7deef6a3098af8f5baf9f"],["images/browser-Safari-iOS.svg","f729e629ec998ec40d313495d7257741"],["images/browser-Safari.svg","523ee9491f5a937b8975f4d23aa77f62"],["images/favicon-16x16.png","7a99c20d6c00babddd26d03607b8721d"],["images/favicon-32x32.png","129881474a1bf130027bff7a1e89febd"],["images/favicon-96x96.png","bd9c126a4d6baf7ce442122ce0e89e11"],["images/favicon.ico","81c46feedbfcc6c6dc9495e4fd5adfad"],["images/icon-info.svg","53a6c555ce41f818556c71ab0dfc533b"],["images/icon-tag.svg","f067bbbc072941b2a0335679300bfc6c"],["images/icon-warning.svg","2a4322abbee9aed694fadb50e98a1f61"],["images/logo.png","0134d77c2c6b01eabb425990bab7ce9a"],["images/ms-icon-144x144.png","43e1f47f182b13d0dee15f510213e928"],["images/ms-icon-150x150.png","e73370837ab9060772a18d62aaacd0f0"],["images/ms-icon-310x310.png","8a7143516b929702e3309bb537a99c5c"],["images/ms-icon-70x70.png","d7c6e7368733d53b5f979546d5aa4fe9"],["images/open_in_desktop.png","e899d6679b011aa7b0e783683d90d99b"],["images/serve_from_docs.png","15ae9eac3737a21593ebe00a9312bf9e"],["images/steve_faulkner.jpg","b90382f2b505ce6f6b1e08657637395e"],["index.html","d69af7eaaef33036f334ba3d5d6b727e"],["index.xml","a6758a3168c631045d60ceac192cd9c2"],["js/dom-scripts.js","85f0f584e913275df91ffa8dc4c959bf"],["js/prism.js","0c1fb8d3a69ee7c91dbf0f361ded7763"],["js/service-worker-registration.js","d60f01dc1393cbaaf4f7435339074d5e"],["js/webcomponents.js","c5f6fe397db634cde89f66c2f1bc2f62"],["manifest.json","4e77b7f1253442852a2f185822f1b4d8"],["patterns/coding/code-blocks/index.html","7e548bf949a28db77542c23a21ec639a"],["patterns/coding/color-palettes/index.html","887db1284a4527356dd37444ca19c3a8"],["patterns/coding/command-line/index.html","f2a7679b1f914bef81bee41ba2dd94a9"],["patterns/coding/demo-embedding/index.html","637d43b71ef699cf86514ae2393518c2"],["patterns/coding/file-trees/index.html","0a6e6140dddfd31c90157ead79d009d2"],["patterns/coding/index.html","d29842161b449c85d7dcf65d954b466f"],["patterns/coding/index.xml","c8141d2e5b185b41c7c2297cbe9761a9"],["patterns/coding/tested/index.html","e01aa6e9099f46f6e1158b2985ba49ca"],["patterns/coding/writing-inline-demos/index.html","2e07c6e05d72277a739d32ee3637ea60"],["patterns/index.html","cd1a5810ec667937bdbf49033025752b"],["patterns/index.xml","bc8a085b70e56267a63fbab56f42f000"],["patterns/installation/index.html","e16edddf663241d01178140b577393e3"],["patterns/library-setup/index.html","ac01c7648823941f515844b57460abef"],["patterns/media/including-images/index.html","ba4c8ee76c7ad5033a2c6ab27ff0f21a"],["patterns/media/including-videos/index.html","680720bf09b444b8d5de0dbeaba3fcdc"],["patterns/media/index.html","a821b7f7527b7cba408ab07981f5b05c"],["patterns/media/index.xml","91130ea74bd16f6d51c959a00c3c6284"],["patterns/serving/index.html","2179258e66c1eeafe2bba4f80da7244f"],["patterns/writing/expandable-sections/index.html","257f9c31ef24ac12a71518023ba8da46"],["patterns/writing/index.html","e1fb7df374c137b6d92a0d98d67c8e3c"],["patterns/writing/index.xml","a68bf9da0d9106898c1e05942614e90c"],["patterns/writing/library-structure/index.html","74a9ef20c8f838c74b45fbf6d3d8526d"],["patterns/writing/markdown-and-metadata/index.html","211a8a181cc23882bfcfbd6aee919417"],["patterns/writing/notes-and-warnings/index.html","a5a4d7a3c9bcd5d4a9349fc322cde4e0"],["patterns/writing/references/index.html","b937bf919351bf1296d6f1f1da60e1a4"],["patterns/writing/tables-of-contents/index.html","f61dc0336e9b9b3f901d6f5ba284f3cb"],["sitemap.xml","42a06aafa5566ee7db4adb4fd5e2cf39"],["tags/index.xml","05aca37c2ea9dc2534847f246ba6301b"],["tags/library/index.html","d434d129179d1467c690c86a3f331327"],["tags/library/index.xml","b6a44a1a0a10135485e4f39d12fd322a"],["tags/markdown/index.html","5445cc63ece482c704ee84869668240d"],["tags/markdown/index.xml","757d307cdf85883859ac95ea20527f4a"],["tags/metadata/index.html","f2a409f3acf13ee48460d877925be1d8"],["tags/metadata/index.xml","b6989e44540f4745072a2063369de173"],["tags/structure/index.html","0cc4d0c8a6d88b1199106d767447c0a6"],["tags/structure/index.xml","69b02d1c1393249cac54fc2734c9ef63"],["tags/stuff/index.html","37be84cf1983288cdaf55b550b1171a5"],["tags/stuff/index.xml","c3ade9b0a2f01caee9de105ded22695f"]];
+var precacheConfig = [["browserconfig.xml","67c3113b1574fecc6015d56d774e1d38"],["categories/index.xml","0ac1d02cfbcad2fcc8c13b2c54715338"],["css/fonts/miriamlibre-bold.woff","96496f6f06535d25b3bcba876917ca35"],["css/fonts/miriamlibre-bold.woff2","668defa44d9a74dd709ce0c826a5eb11"],["css/fonts/pt_sans-web-bold.woff","f83c22b548d2d684e24e315d81f7d22b"],["css/fonts/pt_sans-web-bold.woff2","84520c22e6ebf1b30b6f17251d65fff7"],["css/fonts/pt_sans-web-italic.woff","31f09f09a1d3fbe6c8de19644ef0e614"],["css/fonts/pt_sans-web-italic.woff2","df128e1d5a449fc0506fc1b48aac0184"],["css/fonts/pt_sans-web-regular.woff","32100f6ebf01af64d4a71416561c072d"],["css/fonts/pt_sans-web-regular.woff2","b6d4ede9a3a5dbe4d5ac242ae4b0ecc2"],["css/images/icon-tick.svg","35d4d4728ea80d254508b2bca4109d70"],["css/images/stripe.svg","fa3f32a026b6a1bb04ee98d963432e15"],["css/prism.css","004029c8c70ed2bbaa5d9debcf14f8c7"],["css/styles.css","41c3a6aa7741edd93faa28e5dda385da"],["images/android-icon-144x144.png","43e1f47f182b13d0dee15f510213e928"],["images/android-icon-192x192.png","4c07782e52e0ab714074e6d3d69dc3ec"],["images/android-icon-36x36.png","3b2cd8c925a66bf84c89b68bb30e5f62"],["images/android-icon-48x48.png","45dc386eea1d8a46216a8b6de9b156c6"],["images/android-icon-72x72.png","b04c64637efed2b04fa900ddfcbfe75d"],["images/android-icon-96x96.png","bd9c126a4d6baf7ce442122ce0e89e11"],["images/apple-icon-114x114.png","72e127d6f01dfcd2ba2340141babc536"],["images/apple-icon-120x120.png","bc7cd9e36869e66aaca78412207bf723"],["images/apple-icon-144x144.png","43e1f47f182b13d0dee15f510213e928"],["images/apple-icon-152x152.png","567c64205576865b5e5d06c849613ca2"],["images/apple-icon-180x180.png","6b8734c446bf02ab50be598b4c01ec9c"],["images/apple-icon-57x57.png","f8c586086752c78870820b6190d6b42b"],["images/apple-icon-60x60.png","6e88df111e506bcd5501bed4ff10542e"],["images/apple-icon-72x72.png","b04c64637efed2b04fa900ddfcbfe75d"],["images/apple-icon-76x76.png","d8666e0ac256f39f8c5c628486bd71fb"],["images/apple-icon-precomposed.png","725f6cec25256abb1db10385e0724400"],["images/apple-icon.png","725f6cec25256abb1db10385e0724400"],["images/browser-Chrome-Android.svg","3100b2a9c5f0e34982c717fc2aa46d73"],["images/browser-Chrome.svg","fa39b4be6727525330e928f582fbe80a"],["images/browser-Edge.svg","9e8265ab8f6a701587a4271dd3aa6a73"],["images/browser-Firefox-Android.svg","452df7b9e83c70a07e8e03b4e8dab9c4"],["images/browser-Firefox.svg","d3093eda664be3d0cc6d791e1386420f"],["images/browser-IE.svg","13e192cf2b3fe17e7049a49b7d085caa"],["images/browser-Opera.svg","95d65630c9f7deef6a3098af8f5baf9f"],["images/browser-Safari-iOS.svg","f729e629ec998ec40d313495d7257741"],["images/browser-Safari.svg","523ee9491f5a937b8975f4d23aa77f62"],["images/favicon-16x16.png","7a99c20d6c00babddd26d03607b8721d"],["images/favicon-32x32.png","129881474a1bf130027bff7a1e89febd"],["images/favicon-96x96.png","bd9c126a4d6baf7ce442122ce0e89e11"],["images/favicon.ico","81c46feedbfcc6c6dc9495e4fd5adfad"],["images/icon-info.svg","53a6c555ce41f818556c71ab0dfc533b"],["images/icon-tag.svg","f067bbbc072941b2a0335679300bfc6c"],["images/icon-warning.svg","2a4322abbee9aed694fadb50e98a1f61"],["images/logo.png","0134d77c2c6b01eabb425990bab7ce9a"],["images/ms-icon-144x144.png","43e1f47f182b13d0dee15f510213e928"],["images/ms-icon-150x150.png","e73370837ab9060772a18d62aaacd0f0"],["images/ms-icon-310x310.png","8a7143516b929702e3309bb537a99c5c"],["images/ms-icon-70x70.png","d7c6e7368733d53b5f979546d5aa4fe9"],["images/open_in_desktop.png","e899d6679b011aa7b0e783683d90d99b"],["images/serve_from_docs.png","15ae9eac3737a21593ebe00a9312bf9e"],["images/steve_faulkner.jpg","b90382f2b505ce6f6b1e08657637395e"],["index.html","e5608fc8380e087946d70b4ce8eeefca"],["index.xml","a6758a3168c631045d60ceac192cd9c2"],["js/dom-scripts.js","767a2870b95c7b7d1129445e04add354"],["js/prism.js","0c1fb8d3a69ee7c91dbf0f361ded7763"],["js/service-worker-registration.js","d60f01dc1393cbaaf4f7435339074d5e"],["js/webcomponents.js","c5f6fe397db634cde89f66c2f1bc2f62"],["manifest.json","4e77b7f1253442852a2f185822f1b4d8"],["patterns/coding/code-blocks/index.html","a1d9f4054f7c5ba9fe34237414853515"],["patterns/coding/color-palettes/index.html","ea47c569476feb5dff5f9f5edc2a41c0"],["patterns/coding/command-line/index.html","13ec614b95c71887930504bc8818762a"],["patterns/coding/demo-embedding/index.html","9c17687a08f08488917a1b5b8ec77c22"],["patterns/coding/file-trees/index.html","1058da8003bcd5f5e951ffbf64cebb08"],["patterns/coding/index.html","df8f94bc14d73917704c93df7784b5f3"],["patterns/coding/index.xml","c8141d2e5b185b41c7c2297cbe9761a9"],["patterns/coding/tested/index.html","fa93224a1f9c629affdb61da960debb4"],["patterns/coding/writing-inline-demos/index.html","f901f53267867755f7ba2d180f335901"],["patterns/index.html","8e38d3ecc23c5a7f55c894640f922692"],["patterns/index.xml","bc8a085b70e56267a63fbab56f42f000"],["patterns/installation/index.html","bfc7b88ad048aced008e844692ac0b49"],["patterns/library-setup/index.html","61f1aa5a998e1b37418cff6c08c098de"],["patterns/media/including-images/index.html","63d5ee84dbd5e0aea04591f3afd897bd"],["patterns/media/including-videos/index.html","6a5a4995795565891652e880b55343f6"],["patterns/media/index.html","a89badd70c807faed416e6a21e987ad9"],["patterns/media/index.xml","91130ea74bd16f6d51c959a00c3c6284"],["patterns/serving/index.html","f7d476b0110b52a543820d87e431a971"],["patterns/writing/expandable-sections/index.html","36e0cc6e8c307bf6687250efcbf8c69e"],["patterns/writing/index.html","c29f281fcd2a22dc07060e930c8fd099"],["patterns/writing/index.xml","a68bf9da0d9106898c1e05942614e90c"],["patterns/writing/library-structure/index.html","631611467e8d1faa1992647fb478416c"],["patterns/writing/markdown-and-metadata/index.html","ba187f2c3cecb64728397f1e826d3a2e"],["patterns/writing/notes-and-warnings/index.html","0dcfc4390670236d30f9b7e901888598"],["patterns/writing/references/index.html","f66bf215777e060f428f699c5ed0cb1b"],["patterns/writing/tables-of-contents/index.html","0fed0554c0eeeefe217fac19a2fd32d8"],["sitemap.xml","42a06aafa5566ee7db4adb4fd5e2cf39"],["tags/index.xml","05aca37c2ea9dc2534847f246ba6301b"],["tags/library/index.html","3818570d8224257998fafe00a2ed5fa4"],["tags/library/index.xml","b6a44a1a0a10135485e4f39d12fd322a"],["tags/markdown/index.html","b780eb964676878ffbbcba071e455d13"],["tags/markdown/index.xml","757d307cdf85883859ac95ea20527f4a"],["tags/metadata/index.html","6c7c8624967cb259631ac5bc4fd52b4a"],["tags/metadata/index.xml","b6989e44540f4745072a2063369de173"],["tags/structure/index.html","0bd1963f101de59a7c06a794ec176320"],["tags/structure/index.xml","69b02d1c1393249cac54fc2734c9ef63"],["tags/stuff/index.html","25d4e9b9391a045d8fdf93f4998c9837"],["tags/stuff/index.xml","c3ade9b0a2f01caee9de105ded22695f"]];
var cacheName = 'sw-precache-v3-sw-precache-' + (self.registration ? self.registration.scope : '');
diff --git a/docs/tags/library/index.html b/docs/tags/library/index.html
index 64c7b36..28616a1 100644
--- a/docs/tags/library/index.html
+++ b/docs/tags/library/index.html
@@ -91,6 +91,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/tags/markdown/index.html b/docs/tags/markdown/index.html
index 2d67e5f..18392be 100644
--- a/docs/tags/markdown/index.html
+++ b/docs/tags/markdown/index.html
@@ -91,6 +91,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/tags/metadata/index.html b/docs/tags/metadata/index.html
index 329d3a3..b8d9ca9 100644
--- a/docs/tags/metadata/index.html
+++ b/docs/tags/metadata/index.html
@@ -91,6 +91,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/tags/structure/index.html b/docs/tags/structure/index.html
index c99fba6..aa00ab3 100644
--- a/docs/tags/structure/index.html
+++ b/docs/tags/structure/index.html
@@ -91,6 +91,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/tags/stuff/index.html b/docs/tags/stuff/index.html
index e5b0c12..4feb3ba 100644
--- a/docs/tags/stuff/index.html
+++ b/docs/tags/stuff/index.html
@@ -91,6 +91,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/themes/infusion/layouts/partials/svg.html b/themes/infusion/layouts/partials/svg.html
index 84860f3..16b0989 100644
--- a/themes/infusion/layouts/partials/svg.html
+++ b/themes/infusion/layouts/partials/svg.html
@@ -56,4 +56,14 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/themes/infusion/static/css/styles.css b/themes/infusion/static/css/styles.css
index b8d09a0..83f0bb0 100644
--- a/themes/infusion/static/css/styles.css
+++ b/themes/infusion/static/css/styles.css
@@ -806,6 +806,22 @@ h1 svg {
display: block;
}
+/* Section links */
+
+.h2-container {
+ position: relative;
+ font-size: 1.66rem;
+}
+
+.h2-container a {
+ position: absolute;
+ margin-top: 0;
+ top: 0;
+ line-height: 1;
+ left: -1em;
+ border: 0;
+}
+
@media (max-width: 45em) {
[role="banner"] {
diff --git a/themes/infusion/static/js/dom-scripts.js b/themes/infusion/static/js/dom-scripts.js
index fbc5214..e2ed375 100644
--- a/themes/infusion/static/js/dom-scripts.js
+++ b/themes/infusion/static/js/dom-scripts.js
@@ -42,3 +42,31 @@
}
})
}());
+
+/* Add "link here" links to
headings */
+(function () {
+ var headings = document.querySelectorAll('main > h2')
+
+ Array.prototype.forEach.call(headings, function (heading) {
+ var id = heading.getAttribute('id')
+
+ if (id) {
+ var newHeading = heading.cloneNode(true)
+
+ var container = document.createElement('div')
+ container.setAttribute('class', 'h2-container')
+ container.appendChild(newHeading)
+
+ heading.parentNode.insertBefore(container, heading)
+
+ var link = document.createElement('a')
+ link.setAttribute('href', '#' + id)
+ link.setAttribute('aria-label', 'link for this section')
+ link.innerHTML = ''
+
+ container.appendChild(link)
+
+ heading.parentNode.removeChild(heading);
+ }
+ })
+}());