From 03e2345833f92d6f3841db66bffd0f2ed8461bf2 Mon Sep 17 00:00:00 2001 From: Silvio Giebl Date: Sat, 4 May 2019 22:22:56 +0200 Subject: [PATCH] Added anchor headings --- _includes/vendor/anchor_headings.html | 100 ++++++++++++++++++++++++++ _layouts/anchor_headings.html | 5 ++ _layouts/default.html | 2 +- _sass/anchor_headings.scss | 12 ++++ assets/css/just-the-docs.scss | 1 + 5 files changed, 119 insertions(+), 1 deletion(-) create mode 100755 _includes/vendor/anchor_headings.html create mode 100644 _layouts/anchor_headings.html create mode 100644 _sass/anchor_headings.scss diff --git a/_includes/vendor/anchor_headings.html b/_includes/vendor/anchor_headings.html new file mode 100755 index 0000000..25397df --- /dev/null +++ b/_includes/vendor/anchor_headings.html @@ -0,0 +1,100 @@ +{% capture headingsWorkspace %} + {% comment %} + Version 1.0.3 + https://github.com/allejo/jekyll-anchor-headings + + "Be the pull request you wish to see in the world." ~Ben Balter + + Usage: + {% include anchor_headings.html html=content %} + + Parameters: + * html (string) - the HTML of compiled markdown generated by kramdown in Jekyll + + Optional Parameters: + * beforeHeading (bool) : false - Set to true if the anchor should be placed _before_ the heading's content + * anchorBody (string) : '' - The content that will be placed inside the anchor; the `%heading%` placeholder is available + * anchorClass (string) : '' - The class(es) that will be used for each anchor. Separate multiple classes with a space + * anchorTitle (string) : '' - The `title` attribute that will be used for anchors + * h_min (int) : 1 - The minimum header level to build an anchor for; any header lower than this value will be ignored + * h_max (int) : 6 - The maximum header level to build an anchor for; any header greater than this value will be ignored + * bodyPrefix (string) : '' - Anything that should be inserted inside of the heading tag _before_ its anchor and content + * bodySuffix (string) : '' - Anything that should be inserted inside of the heading tag _after_ its anchor and content + + Output: + The original HTML with the addition of anchors inside of all of the h1-h6 headings. + {% endcomment %} + + {% assign minHeader = include.h_min | default: 1 %} + {% assign maxHeader = include.h_max | default: 6 %} + {% assign beforeHeading = include.beforeHeading %} + {% assign nodes = include.html | split: ' + {% if headerLevel == 0 %} + {% if nextChar != '<' and nextChar != '' %} + {% capture node %}' | first }}>{% endcapture %} + {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %} + + + {% capture anchor %}{% endcapture %} + + {% if html_id and headerLevel >= minHeader and headerLevel <= maxHeader %} + {% capture anchor %}href="#{{ html_id}}"{% endcapture %} + + {% if include.anchorClass %} + {% capture anchor %}{{ anchor }} class="{{ include.anchorClass }}"{% endcapture %} + {% endif %} + + {% if include.anchorTitle %} + {% capture anchor %}{{ anchor }} title="{{ include.anchorTitle | replace: '%heading%', header }}"{% endcapture %} + {% endif %} + + {% capture anchor %}{{ include.anchorBody | replace: '%heading%', header | default: '' }}{% endcapture %} + + + {% if beforeHeading %} + {% capture anchor %}{{ anchor }} {% endcapture %} + {% else %} + {% capture anchor %} {{ anchor }}{% endcapture %} + {% endif %} + {% endif %} + + {% capture new_heading %} + diff --git a/_sass/anchor_headings.scss b/_sass/anchor_headings.scss new file mode 100644 index 0000000..da55202 --- /dev/null +++ b/_sass/anchor_headings.scss @@ -0,0 +1,12 @@ +a.anchor_heading { + visibility: hidden; +} + +h1:hover > a.anchor_heading, +h2:hover > a.anchor_heading, +h3:hover > a.anchor_heading, +h4:hover > a.anchor_heading, +h5:hover > a.anchor_heading, +h6:hover > a.anchor_heading { + visibility: visible; +} \ No newline at end of file diff --git a/assets/css/just-the-docs.scss b/assets/css/just-the-docs.scss index 6a2eefa..b6d17d5 100644 --- a/assets/css/just-the-docs.scss +++ b/assets/css/just-the-docs.scss @@ -41,4 +41,5 @@ @import "./search"; @import "./tables"; @import "./code"; +@import "./anchor_headings"; @import "./utilities/utilities";