aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2022-06-01 16:41:21 +0200
committerAlex Auvolat <alex@adnab.me>2022-06-01 16:44:36 +0200
commit0900f2910e908ff8c997b684c2f7ae69791f50de (patch)
tree716428ea37858c69672e749e151b4345357e319a
parent40596285a182ddd469422de25f7c78bcef098953 (diff)
downloadguide.deuxfleurs.fr-0900f2910e908ff8c997b684c2f7ae69791f50de.tar.gz
guide.deuxfleurs.fr-0900f2910e908ff8c997b684c2f7ae69791f50de.zip
Hierarchical navigation menu
-rw-r--r--templates/_nav.html53
-rw-r--r--templates/index.html56
2 files changed, 69 insertions, 40 deletions
diff --git a/templates/_nav.html b/templates/_nav.html
new file mode 100644
index 0000000..92ed4c5
--- /dev/null
+++ b/templates/_nav.html
@@ -0,0 +1,53 @@
+{% macro navsection(hierarchy, level, current) %}
+ {% set sec = hierarchy | nth(n=level) %}
+ {% set sec = get_section(path=sec) %}
+ {% set maxlevel = hierarchy | length %}
+
+ {% if sec.subsections %}
+ {% for s in sec.subsections %}
+ {% set p = get_section(path=s) %}
+ <div class="toc-item">
+ {% if p.path == current.path %}
+ <a class="subtext" href="{{ p.permalink | safe}}">⯆ <b>{{ p.title }}</b></a>
+ {% elif hierarchy is containing(s) %}
+ <a class="subtext" href="{{ p.permalink | safe}}">⯆ {{ p.title }}</a>
+ {% else %}
+ <a class="subtext" href="{{ p.permalink | safe}}">⯈ {{ p.title }}</a>
+ {% endif %}
+ {% if hierarchy is containing(s) or current.path == p.path %}
+ {% if level + 1 < maxlevel %}
+ {{ nav::navsection(hierarchy=hierarchy,level=level + 1,current=current) }}
+ {% endif %}
+ {% endif %}
+ </div>
+ {% endfor %}
+ {% endif %}
+
+ {% if sec.pages %}
+ {% for p in sec.pages %}
+ <div class="toc-item">
+ {% if p.path == current.path %}
+ <a class="subtext" href="{{p.permalink | safe}}">&nbsp;&nbsp;<b>{{ p.title }}</b></a>
+ {% else %}
+ <a class="subtext" href="{{p.permalink | safe}}">&nbsp;&nbsp;{{ p.title }}</a>
+ {% endif %}
+ </div>
+ {% endfor %}
+ {% endif %}
+{% endmacro navsection %}
+
+{% macro navmenu(current) %}
+ {% if current.ancestors %}
+ {% set hierarchy = current.ancestors | concat(with=current.relative_path) %}
+ {% else %}
+ {% set hierarchy = [current.relative_path] %}
+ {% endif %}
+
+ {% set root_path = hierarchy | nth(n=0) %}
+ {% set root = get_section(path=root_path) %}
+ <div class="toc-item toc-section">
+ <a class="subtext" href="{{root.permalink | safe}}">{{ root.title }}</a>
+ </div>
+
+ {{ nav::navsection(hierarchy=hierarchy,level=0,current=current) }}
+{% endmacro %}
diff --git a/templates/index.html b/templates/index.html
index 54fb473..004a4fa 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -1,4 +1,5 @@
{% import "_macros.html" as macros %}
+{% import "_nav.html" as nav %}
<!DOCTYPE html>
<html lang="en">
@@ -7,7 +8,7 @@
<title>{% block title %}{{ config.title }}{% endblock title %}</title>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
{% block favicon %}
- <link rel="icon" type="image/png" href="/favicon.ico">
+ <link rel="icon" type="image/png" href="/favicon.ico">
{% endblock favicon %}
{% include "_variables.html" %}
<link rel="stylesheet" href="/normalize.css">
@@ -24,46 +25,21 @@
{% endblock header %}
<main>
- {% block toc %}
- {% if page.ancestors %}
- {% set section = get_section(path=page.ancestors | last) %}
- {% endif %}
- {% if section.ancestors %}
- {% set parent = get_section(path=section.ancestors | last) %}
- {% endif %}
+ {% block toc %}
<div class="toc">
- <div class="toc-sticky">
- <div class="toc-item toc-section">
- <a class="subtext" href="{{section.permalink | safe}}">{{ section.title }}</a>
- </div>
- {% if section.subsections %}
- {% for s in section.subsections %}
- {% set p = get_section(path=s) %}
- <div class="toc-item">
- <a class="subtext" href="{{ p.permalink | safe}}">{{ p.title }}</a>
- </div>
- {% endfor %}
- {% endif %}
-
- {% if section.pages %}
- {% for p in section.pages %}
- <div class="toc-item">
- <a class="subtext" href="{{p.permalink | safe}}">{{ p.title }}</a>
- </div>
- {% endfor %}
- {% endif %}
- {% if parent %}
- <div class="toc-item">
- <a class="subtext" href="{{parent.permalink | safe}}">← Retour</a>
- </div>
- {% endif %}
- </div>
+ <div class="toc-sticky">
+ {% if page %}
+ {{ nav::navmenu(current=page) }}
+ {% else %}
+ {{ nav::navmenu(current=section) }}
+ {% endif %}
+ </div>
</div>
- {% endblock toc %}
+ {% endblock toc %}
<div class="content text">
{% block content %}
- <div id="features" class="heading-text">{{ section.title }} </div>
+ <div id="features" class="heading-text">{{ section.title }} </div>
{{ section.content | safe }}
{% endblock content %}
</div>
@@ -75,10 +51,10 @@
{% block footer %}
<footer>
<small class="subtext">
- Édité et hébergé par <a href="https://deuxfleurs.fr">Deuxfleurs</a>,
- généré par <a href="https://www.getzola.org">Zola</a>,
- thème dérivé de <a href="https://github.com/huhu/juice">Juice</a>,
- servi par <a href="https://garagehq.deuxfleurs.fr/">Garage</a>.
+ Édité et hébergé par <a href="https://deuxfleurs.fr">Deuxfleurs</a>,
+ généré par <a href="https://www.getzola.org">Zola</a>,
+ thème dérivé de <a href="https://github.com/huhu/juice">Juice</a>,
+ servi par <a href="https://garagehq.deuxfleurs.fr/">Garage</a>.
</small>
</footer>
{% endblock footer %}