Fusiodemande 'Classement entre sections et pages' (#14) depuis classement vers main

Discuté sur: Deuxfleurs/guide.deuxfleurs.fr#14
This commit is contained in:
vincent 2022-09-28 16:42:41 +02:00
commit d695725647
41 changed files with 356 additions and 329 deletions

View file

@ -17,3 +17,18 @@ aws s3 sync ./public s3://guide.deuxfleurs.fr
```bash
zola serve
```
#### Classement mixte
Pour le sommaire à gauche de l'écran, le souhait est apparu de pouvoir classer pages et sections entre elles sans distinction. C'est normalement impossible car Zola tient deux listes distinctes : d'un côté une liste des pages classées entre elles, et de l'autre une liste des sections classées entre elles. Et une fois les classements faits par Zola, il est impossible d'accéder aux poids attribués aux pages et sections.
Pour contourner cette limitation, on utilise une variable `weight_custom`. Si l'on veut classer des pages et sections entre elles, on doit pour chacune la définir dans une section `extra`, comme ceci :
```
+++
title = "titre de l'article"
description = "description de l'article"
[extra]
weight_custom = 4
+++
```
Pour les sections, cette variable doit être définie dans son fichier `_index.md`. Si **et seulement si** toutes les pages et sous-sections d'une section ont cette variable, alors le classement mélangé s'opère pour le contenu de cette section (et les variables classiques `weight` sont ignorées si elles existent).

View file

@ -1,8 +1,8 @@
---
title: Atelier capitalisme de surveillance
description: Atelier capitalisme de surveillance
weight: 40
---
+++
title = "Atelier capitalisme de surveillance"
description = "Atelier capitalisme de surveillance"
weight = 40
+++
*Ces notes ont été écrite en préparation d'un atelier réalisé par Deuxfleurs lors d'une journée sur la sobriété numérique
organisée par Attac dans la région de Tarare le 18 juin 2022.*

View file

@ -1,8 +1,8 @@
---
title: Écologie
description: "Écologie : comment tenir un discours pertinent en tant qu'hébergeur"
weight: 31
---
+++
title = "Écologie"
description = "Écologie : comment tenir un discours pertinent en tant qu'hébergeur"
weight = 31
+++
**Animateur :** Quentin de Deuxfleurs
**Prise de note :** Margaux du Cloud de Girofle

View file

@ -1,8 +1,8 @@
---
title: Éducation populaire
description: Éducation populaire chez les CHATONS
weight: 30
---
+++
title = "Éducation populaire"
description = "Éducation populaire chez les CHATONS"
weight = 30
+++
**Animateurs :** Quentin de Deuxfleurs
**Prise de notes :** røseløve·de Attac et neil de 42l/La Contre Voie

View file

@ -1,8 +1,8 @@
---
title: Émancip'Asso
description: Émancip'Asso, la formation à destination des hébergeurs pour comprendre le milieu associatif
weight: 32
---
+++
title = "Émancip'Asso"
description = "Émancip'Asso, la formation à destination des hébergeurs pour comprendre le milieu associatif"
weight = 32
+++
**Animatrice :** Angie de Framasoft et Anne-Laure d'Animafac
**Prise de note :** ??

View file

@ -1,8 +1,8 @@
---
title: Le libre en Europe
description: Le libre en Europe (libre hoster, hackmeeting, assos)
weight: 10
---
+++
title = "Le libre en Europe"
description = "Le libre en Europe (libre hoster, hackmeeting, assos)"
weight = 10
+++
**Animatrice :** Florence de MarsNet
**Prise de note :** Florence de MarsNet, Stéphane de Hadoly

View file

@ -1,8 +1,8 @@
---
title: Sauvegardes coopératives
description: Sauvegardes coopératives entre CHATONS
weight: 10
---
+++
title = "Sauvegardes coopératives"
description = "Sauvegardes coopératives entre CHATONS"
weight = 10
+++
**Animateurs :** Équipe Picasoft
**Prise de note, compte-rendu :** Quentin de Deuxfleurs

View file

@ -1,13 +1,10 @@
---
title: Chiffrement à froid
description: Guide à l'installation d'une machine en chiffrant intégralement son disque dur
weight: 30
published: true
date: 2022-01-30T20:43:56.953Z
tags: serveur, infrastructure, sysadmin, technique, guide, tutoriel, administration, chiffrement, luks
editor: markdown
dateCreated: 2021-12-29T15:29:02.943Z
---
+++
title = "Chiffrement à froid"
description = "Guide à l'installation d'une machine en chiffrant intégralement son disque dur"
weight = 30
date = 2022-01-30T20:43:56.953Z
dateCreated = 2021-12-29T15:29:02.943Z
+++
Le chiffrement à froid, c'est le fait de n'inscrire que des données chiffrées sur un disque (plus précisément [une partition de disque](https://fr.wikipedia.org/wiki/Partitionnement_logiciel_/_mat%C3%A9riel)). C'est le standard [LUKS](https://fr.wikipedia.org/wiki/LUKS) qui permet ce chiffrement : ce dernier se place entre le support de stockage et le système d'exploitation (OS), et (dé)chiffre tout ce qui est lu ou écrit sur une partition. **Cette étape doit donc être réalisée avant d'installer le système d'exploitation, mais après [le partitionnement de vos disques](@/formations/sysadmin/partitionnement.md).**

View file

@ -1,13 +1,10 @@
---
title: Installer Linux
weight: 10
description: Installer Linux
published: true
date: 2021-12-30T15:23:52.320Z
tags: installation, infrastructure, sysadmin, technique, guide, tutoriel, linux, live cd, live usb
editor: markdown
dateCreated: 2021-12-30T15:23:50.137Z
---
+++
title = "Installer Linux"
weight = 10
description = "Installer Linux"
date = 2021-12-30T15:23:52.320Z
dateCreated = 2021-12-30T15:23:50.137Z
+++
On utilise un Live CD (ou Live USB - le support de stockage important peu) pour lancer un système d'exploitation (celui présent dans le support de stockage) sur un ordinateur, sans toucher aux disques présents dans l'ordinateur.

View file

@ -1,13 +1,10 @@
---
title: Partitionnement
description: "Redondance, partitionnement, chiffrement : comment configurer ses disques durs en vue d'une installation de serveur"
published: true
weight: 20
date: 2022-04-02T13:38:01.527Z
tags: serveur, infrastructure, sysadmin, technique, administration, chiffrement, disque, partitionnement, redondance
editor: markdown
dateCreated: 2021-12-30T11:39:09.554Z
---
+++
title = "Partitionnement"
description = "Redondance, partitionnement, chiffrement : comment configurer ses disques durs en vue d'une installation de serveur"
weight = 20
date = 2022-04-02T13:38:01.527Z
dateCreated = 2021-12-30T11:39:09.554Z
+++
# Configurer les disques de son futur serveur

View file

@ -1,12 +1,9 @@
---
title: Énergie
description: Consommation électrique
published: true
date: 2021-11-09T12:54:33.129Z
tags:
editor: markdown
dateCreated: 2021-11-09T12:54:30.985Z
---
+++
title = "Énergie"
description = "Consommation électrique"
date = 2021-11-09T12:54:33.129Z
dateCreated = 2021-11-09T12:54:30.985Z
+++
# Notre avis

View file

@ -1,13 +1,10 @@
---
title: Bottin
description:
published: true
date: 2021-11-09T12:40:01.746Z
tags:
editor: markdown
dateCreated: 2021-11-09T12:39:59.725Z
weight: 10
---
+++
title = "Bottin"
description = ""
date = 2021-11-09T12:40:01.746Z
dateCreated = 2021-11-09T12:39:59.725Z
weight = 10
+++
# Bottin

View file

@ -1,12 +1,9 @@
---
title: Vie Privée
description: Comment mettre en oeuvre des systèmes prenant en compte la vie privée à leur origine ?
published: true
date: 2021-11-18T13:57:51.695Z
tags:
editor: markdown
dateCreated: 2021-11-18T10:42:00.744Z
---
+++
title = "Vie Privée"
description = "Comment mettre en oeuvre des systèmes prenant en compte la vie privée à leur origine ?"
date = 2021-11-18T13:57:51.695Z
dateCreated = 2021-11-18T10:42:00.744Z
+++
# Vie privée

View file

@ -1,13 +1,10 @@
---
title: Diplonat
description:
published: true
date: 2021-11-09T12:42:17.716Z
tags:
editor: markdown
dateCreated: 2021-11-09T12:42:15.729Z
weight: 30
---
+++
title = "Diplonat"
description = ""
date = 2021-11-09T12:42:17.716Z
dateCreated = 2021-11-09T12:42:15.729Z
weight = 30
+++
# Diplonat

View file

@ -1,13 +1,10 @@
---
title: Garage
description:
published: true
date: 2021-11-09T12:42:59.273Z
tags:
editor: markdown
dateCreated: 2021-11-09T12:42:57.245Z
weight: 40
---
+++
title = "Garage"
description = ""
date = 2021-11-09T12:42:59.273Z
dateCreated = 2021-11-09T12:42:57.245Z
weight = 40
+++
# Garage

View file

@ -1,13 +1,10 @@
---
title: Guichet
description:
published: true
date: 2021-11-09T12:39:27.819Z
tags:
editor: markdown
dateCreated: 2021-11-09T12:39:25.808Z
weight: 20
---
+++
title = "Guichet"
description = ""
date = 2021-11-09T12:39:27.819Z
dateCreated = 2021-11-09T12:39:25.808Z
weight = 20
+++
# Guichet

View file

@ -1,13 +1,10 @@
---
title: Tricot
description:
published: true
date: 2022-01-24T16:33:16.731Z
tags:
editor: markdown
dateCreated: 2022-01-24T16:32:53.056Z
weight: 50
---
+++
title = "Tricot"
description = ""
date = 2022-01-24T16:33:16.731Z
dateCreated = 2022-01-24T16:32:53.056Z
weight = 50
+++
# Tricot

View file

@ -1,8 +1,8 @@
---
title: (Obsolète)
description: Documentation obsolète
weight: 99
---
+++
title = "(Obsolète)"
description = "Documentation obsolète"
weight = 99
+++
**ATTENTION** - Cette page est obsolète, de nombreuses informations ici ne sont plus d'actualité.
Merci donc de ne pas en tenir compte, elle est conservée temporairement le temps d'assurer qu'aucune

View file

@ -1,12 +1,9 @@
---
title: Réseau
description: Réseau
published: true
date: 2021-11-09T12:55:03.277Z
tags:
editor: markdown
dateCreated: 2021-11-09T12:55:01.156Z
---
+++
title = "Réseau"
description = "Réseau"
date = 2021-11-09T12:55:03.277Z
dateCreated = 2021-11-09T12:55:01.156Z
+++
Cette page regroupe un résumé de tous les problèmes que vous pourriez rencontrer en voulant faire de l'auto hébergement avec "votre connexion internet".

View file

@ -1,7 +1,7 @@
---
title: Services
description: Annuaire des services hébergés chez Deuxfleurs
---
+++
title = "Services"
description = "Annuaire des services hébergés chez Deuxfleurs"
+++
Cette page tente de recenser de façon exhaustive l'ensemble des services qui
fonctionnent actuellement sur les machines de Deuxfleurs, dans les différents

View file

@ -1,13 +1,10 @@
---
title: Jitsi
description:
published: true
date: 2021-11-09T12:53:23.811Z
tags:
editor: markdown
dateCreated: 2021-11-09T12:46:50.731Z
weight: 20
---
+++
title = "Jitsi"
description = ""
date = 2021-11-09T12:53:23.811Z
dateCreated = 2021-11-09T12:46:50.731Z
weight = 20
+++
## 2020-04-02 Campagne de debug Jitsi

View file

@ -1,13 +1,10 @@
---
title: Installer NixOS en SSH
description: Installer NixOS en SSH sans écran ni clavier
published: true
date: 2022-08-24
tags: installation, serveur, infrastructure, réseau, sysadmin, site géographique, technique, administration
editor: markdown
dateCreated: 2021-08-24
weight: 12
---
+++
title = "Installer NixOS en SSH"
description = "Installer NixOS en SSH sans écran ni clavier"
date = 2022-08-24
dateCreated = 2021-08-24
weight = 12
+++
Quick tip avant d'oublier pour installer une de nos machines ThinkCentre via SSH sous NixOS ; c'est la seule solution quand on a pas d'écran ni de clavier sous la main.
Pré-requis : une clé USB, un ordi sous NixOS.

View file

@ -1,13 +1,10 @@
---
title: Noeud
description: Déploiement d'un noeud
published: true
date: 2022-08-23
tags: installation, serveur, infrastructure, réseau, sysadmin, site géographique, technique, administration
editor: markdown
dateCreated: 2021-08-23
sort_by: weight
---
+++
title = "Noeud"
description = "Déploiement d'un noeud"
date = 2022-08-23
dateCreated = 2021-08-23
sort_by = "weight"
+++
# Déployer un nœud au sein de l'infrastructure Deuxfleurs
Déployer un nœud au sein de l'infrastructure Deuxfleurs demande un certaine préparation et représente un processus particulier.

View file

@ -1,13 +1,10 @@
---
title: Guide de création d'un nœud
description: Guide de création d'un nœud
published: true
date: 2022-08-23
tags: installation, serveur, infrastructure, réseau, sysadmin, site géographique, technique, administration
editor: markdown
dateCreated: 2022-08-23
weight: 11
---
+++
title = "Guide de création d'un nœud"
description = "Guide de création d'un nœud"
date = 2022-08-23
dateCreated = 2022-08-23
weight = 11
+++
# Guide d'initialisation de nœud Deuxfleurs
Ce guide explique comment initialiser un nœud pour l'infrastructure de Deuxfleurs. Nous partons de zéro, c'est-à-dire avec une machine que nous venons de récupérer, avec une mémoire vide, et que nous venons de brancher. À titre d'exemple, nous illustrerons de temps en temps les opérations avec une de nos machines (un Thinkcentre de Lenovo).

View file

@ -1,13 +1,10 @@
---
title: Prérequis pour un nœud
description: Prérequis pour un nœud
published: true
date: 2022-01-09T13:29:29.710Z
tags: installation, serveur, infrastructure, réseau, sysadmin, site géographique, technique, administration
editor: markdown
dateCreated: 2021-12-28T14:33:59.088Z
weight: 10
---
+++
title = "Prérequis pour un nœud"
description = "Prérequis pour un nœud"
date = 2022-01-09T13:29:29.710Z
dateCreated = 2021-12-28T14:33:59.088Z
weight = 10
+++
Dans ce guide, nous allons expliquer comment installer une grappe de serveurs, en vue d'un hébergement pour Deuxfleurs.

View file

@ -1,8 +1,8 @@
---
title: Emails
description: Emails
weight: 10
---
+++
title = "Emails"
description = "Emails"
weight = 10
+++
# Support d'un nom de domaine personnalisé

View file

@ -1,8 +1,8 @@
---
title: Jitsi
description: Visioconférence avec Jitsi
weight: 40
---
+++
title = "Jitsi"
description = "Visioconférence avec Jitsi"
weight = 40
+++
# Accéder à Jitsi

View file

@ -1,13 +1,10 @@
---
title: Matrix
description: Messagerie Instantanée avec Matrix
published: true
date: 2022-03-09T19:13:51.671Z
tags:
editor: markdown
dateCreated: 2021-11-09T12:13:36.265Z
weight: 30
---
+++
title = "Matrix"
description = "Messagerie Instantanée avec Matrix"
date = 2022-03-09T19:13:51.671Z
dateCreated = 2021-11-09T12:13:36.265Z
weight = 30
+++
Matrix est un réseau de communication instantanée que vous pouvez utiliser pour rester en contact
avec votre famille, avec vos amis ou avec votre collectif ou association.

View file

@ -1,7 +1,7 @@
---
title: Stockage de fichiers
description: Stocker ses fichiers chez Deuxfleurs
sort_by: weight
---
+++
title = "Stockage de fichiers"
description = "Stocker ses fichiers chez Deuxfleurs"
sort_by = "weight"
+++
Dans cette section, vous trouverez plusieurs tutoriels expliquant comment stocker vos fichiers chez Deuxfleurs sur Garage. Malheureusement, nous n'avons pas encore d'interface facile pour accéder à cette fonctionnalité: **les guides dans cette section sont donc à destination d'un public avancé**.

View file

@ -1,8 +1,8 @@
---
title: Sous Linux (avancé)
description: Drive Garage avec Rclone (guide avancé)
weight: 10
---
+++
title = "Sous Linux (avancé)"
description = "Drive Garage avec Rclone (guide avancé)"
weight = 10
+++
**Public visé:** des utilisateurs sous Linux n'ayant pas peur de la ligne de commande.

View file

@ -1,13 +1,10 @@
---
title: Sous Windows (avancé)
description: Rclone Mount
weight: 20
published: true
date: 2022-03-28T09:28:19.870Z
tags:
editor: markdown
dateCreated: 2022-02-01T16:23:58.635Z
---
+++
title = "Sous Windows (avancé)"
description = " Rclone Mount"
weight = 20
date = 2022-03-28T09:28:19.870Z
dateCreated = 2022-02-01T16:23:58.635Z
+++
Nous aurons besoin de télécharger 3 programmes :
- [winfsp](http://www.secfs.net/winfsp/rel/) - téléchargez l'installateur et installez normalement

View file

@ -1,8 +1,8 @@
---
title: Site web
description: Héberger un site web
sort_by: weight
---
+++
title = "Site web"
description = "Héberger un site web"
sort_by = "weight"
+++
Vous en avez marre de faire toute votre communication associative via Facebook ? Vous voulez créer votre propre site pour raconter votre dernier road-trip ou publier vos poèmes ? Vous ne savez pas vous y prendre ?

View file

@ -1,13 +1,10 @@
---
title: DNS
description:
published: true
date: 2022-08-25T08:56:54.837Z
tags:
editor: markdown
dateCreated: 2021-11-29T08:46:18.021Z
weight: 10
---
+++
title = "DNS"
description = ""
date = 2022-08-25T08:56:54.837Z
dateCreated = 2021-11-29T08:46:18.021Z
weight = 10
+++
# Louer son nom de domaine

View file

@ -1,13 +1,10 @@
---
title: Rclone Browser
description: Rclone Browser
weight: 30
published: true
date: 2021-11-25T14:31:35.570Z
tags:
editor: markdown
dateCreated: 2021-11-25T14:02:30.997Z
---
+++
title = "Rclone Browser"
description = "Rclone Browser"
weight = 30
date = 2021-11-25T14:31:35.570Z
dateCreated = 2021-11-25T14:02:30.997Z
+++
rclone browser est un outil simple qui vous permet d'accéder directement à Garage.

View file

@ -1,8 +1,8 @@
---
title: WinSCP
description: WinSCP
weight: 20
---
+++
title = "WinSCP"
description = "WinSCP "
weight = 20
+++
# Installation

View file

@ -1,8 +1,8 @@
---
title: AG 2020
description: Assemblée Générale Constitutive
weight: 10
---
+++
title = "AG 2020"
description = "Assemblée Générale Constitutive"
weight = 10
+++
Le 13 janvier 2020 à 19 heures, les fondateurs de l'association
Deuxfleurs se sont réunis en assemblée générale constitutive au 24 rue

View file

@ -1,8 +1,8 @@
---
title: AG 2021
description: Seconde Assemblée Générale
weight: 20
---
+++
title = "AG 2021"
description = "Seconde Assemblée Générale"
weight = 20
+++
Le 7 février 2021 se tenait la deuxième Assemblée Générale (AG) de Deuxfleurs.

View file

@ -1,8 +1,8 @@
---
title: AG 2022
description: Troisième Assemblée Générale
weight: 30
---
+++
title = "AG 2022"
description = "Troisième Assemblée Générale"
weight = 30
+++
Le dimanche 27 février 2022, se tenait sur [Jitsi](https://jitsi.deuxfleurs.fr/) la troisième Assemblée Générale (AG) de Deuxfleurs : nous fêtions nos deux ans d'existence !

View file

@ -1,12 +1,9 @@
---
title: Ergonomie
description: Comment travailler durablement et en toute sécurité
published: true
date: 2022-04-06T12:36:35.582Z
tags:
editor: markdown
dateCreated: 2022-04-06T12:34:35.012Z
---
+++
title = "Ergonomie"
description = "Comment travailler durablement et en toute sécurité"
date = 2022-04-06T12:36:35.582Z
dateCreated = 2022-04-06T12:34:35.012Z
+++
# Ergonomie

View file

@ -1,12 +1,9 @@
---
title: Quand une personne rejoint le CA
description: Que faut-il faire pour l'accueillir ?
published: true
date: 2022-03-02T09:00:00.009Z
tags: administration, association, procédure, conseil d'administration (ca)
editor: markdown
dateCreated: 2022-03-02T08:58:55.011Z
---
+++
title = "Quand une personne rejoint le CA"
description = "Que faut-il faire pour l'accueillir ?"
date = 2022-03-02T09:00:00.009Z
dateCreated = 2022-03-02T08:58:55.011Z
+++
# Comment accueillir une nouvelle personne au CA

View file

@ -3,46 +3,124 @@
{% set sec = get_section(path=sec) %}
{% set maxlevel = hierarchy | length %}
{# Ici on regarde si toutes les sous-sections et pages contenues ont #}
{# une variable weight_custom. Au passage on note ces poids. #}
{% set temoin = true %}
{% set liste = [] %}
{% if sec.subsections %}
{% for s in sec.subsections %}
{% set p = get_section(path=s) %}
<div class="toc-item">
{% if p.subsections or p.pages %}
{% 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>
{% set s_temp = get_section(path=s) %}
{% if not s_temp.extra.weight_custom %}
{% set_global temoin = false %}
{% else %}
{% set_global liste = liste | concat(with=s_temp.extra.weight_custom) %}
{% endif %}
{% endfor %}
{% endif %}
{% if sec.pages %}
{% for p in sec.pages %}
{% if not p.extra.weight_custom %}
{% set_global temoin = false %}
{% else %}
{% set_global liste = liste | concat(with=p.extra.weight_custom) %}
{% endif %}
{% endfor %}
{% endif %}
{# Si toutes les sous-sections et pages ont une variable weight_custom, #}
{# on classe selon elle. Sinon, on utilise la méthode classique. #}
{% if temoin %}
{% set_global liste = liste | sort %}
{% for x in liste %}
{% if sec.subsections %}
{% for y in sec.subsections %}
{% set p = get_section(path=y) %}
{% if p.extra.weight_custom == x %}
<div class="toc-item">
{% if p.subsections or p.pages %}
{% if p.path == current.path %}
<a class="subtext" href="{{ p.permalink | safe}}"><b>{{ p.title }}</b></a>
{% elif hierarchy is containing(y) %}
<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(y) or current.path == p.path %}
{% if level + 1 < maxlevel %}
<div class="nav-subsection">
{{ nav::navsection(hierarchy=hierarchy,level=level + 1,current=current) }}
</div>
{% endif %}
{% endif %}
{% else %}
{% if p.path == current.path %}
<a class="subtext" href="{{p.permalink | safe}}"><b>{{ p.title }}</b></a>
{% else %}
<a class="subtext" href="{{p.permalink | safe}}">{{ p.title }}</a>
{% endif %}
{% endif %}
</div>
{% endif %}
{% if hierarchy is containing(s) or current.path == p.path %}
{% if level + 1 < maxlevel %}
<div class="nav-subsection">
{{ nav::navsection(hierarchy=hierarchy,level=level + 1,current=current) }}
</div>
{% endfor %}
{% endif %}
{% if sec.pages %}
{% for p in sec.pages %}
{% if p.extra.weight_custom == x %}
<div class="toc-item">
{% if p.path == current.path %}
<a class="subtext" href="{{p.permalink | safe}}"><b>{{ p.title }}</b></a>
{% else %}
<a class="subtext" href="{{p.permalink | safe}}">{{ p.title }}</a>
{% endif %}
</div>
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
{% else %}
{% if sec.subsections %}
{% for s in sec.subsections %}
{% set p = get_section(path=s) %}
<div class="toc-item">
{% if p.subsections or p.pages %}
{% 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 %}
<div class="nav-subsection">
{{ nav::navsection(hierarchy=hierarchy,level=level + 1,current=current) }}
</div>
{% endif %}
{% endif %}
{% else %}
{% if p.path == current.path %}
<a class="subtext" href="{{p.permalink | safe}}"><b>{{ p.title }}</b></a>
{% else %}
<a class="subtext" href="{{p.permalink | safe}}">{{ p.title }}</a>
{% endif %}
{% endif %}
{% else %}
</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}}"><b>{{ p.title }}</b></a>
{% else %}
<a class="subtext" href="{{p.permalink | safe}}">{{ p.title }}</a>
{% endif %}
{% endif %}
</div>
</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}}"><b>{{ p.title }}</b></a>
{% else %}
<a class="subtext" href="{{p.permalink | safe}}">{{ p.title }}</a>
{% endif %}
</div>
{% endfor %}
{% endif %}
{% endif %}
{% endmacro navsection %}