about summary refs log tree commit diff stats
path: root/templates/macros.html
diff options
context:
space:
mode:
authorEmilio Ziniades2024-05-12 15:54:40 +0200
committerAlan Pearce2024-05-13 10:32:48 +0000
commitbaabcb634bdffb8623eacc410e8707a3b4afe2b5 (patch)
treecc19bc0ee1fc64ae834c2adac172435e27e4e99e /templates/macros.html
parent2c9ca00042ec7c1a4da5ad927f19e8849e5ae96c (diff)
downloadzola-bearblog-baabcb634bdffb8623eacc410e8707a3b4afe2b5.tar.lz
zola-bearblog-baabcb634bdffb8623eacc410e8707a3b4afe2b5.tar.zst
zola-bearblog-baabcb634bdffb8623eacc410e8707a3b4afe2b5.zip
feat(table of contents): Add table of contents
This feature is disabled by default, but can be enabled/disabled
globally or per-page.

Zola already provides `page.toc`, this PR simply adds a macro
to recursively render that data in nested `ul`s.

It also establishes some configuration options to display it
and set a maximum headers level.
Diffstat (limited to 'templates/macros.html')
-rw-r--r--templates/macros.html12
1 files changed, 12 insertions, 0 deletions
diff --git a/templates/macros.html b/templates/macros.html
new file mode 100644
index 0000000..2ad23e6
--- /dev/null
+++ b/templates/macros.html
@@ -0,0 +1,12 @@
+{% macro table_of_contents(toc, max_level) %}
+<ul>
+  {% for header in toc %}
+    <li>
+      <a href="{{ header.permalink | safe }}">{{ header.title }}</a>
+        {% if header.children and header.level < max_level %}
+          {{ self::table_of_contents(toc=header.children, max_level=max_level) }}
+        {% endif %}
+    </li>
+  {% endfor %}
+</ul>
+{% endmacro %}