@echo "${GREEN}🤖 Linting code${NC}" | @echo "${GREEN}🤖 Linting code${NC}" | ||||
@ruff site.py --fix | @ruff site.py --fix | ||||
@black . --quiet | @black . --quiet | ||||
@djlint david/templates/base_2020.html --reformat --quiet --format-js --format-css | |||||
@djlint david/templates/article_2020.html \ | |||||
david/templates/base_2020.html \ | |||||
david/templates/blogroll.html \ | |||||
david/templates/profil.html \ | |||||
david/templates/recherche.html \ | |||||
david/templates/tag_2021.html \ | |||||
--reformat --quiet --format-js --format-css | |||||
.PHONY: build | .PHONY: build |
{% block title %}{{ page.title }}{% endblock %} | {% block title %}{{ page.title }}{% endblock %} | ||||
{% block description %}{{ page.extract|striptags }}{% endblock %} | {% block description %}{{ page.extract|striptags }}{% endblock %} | ||||
{% block content %} | {% block content %} | ||||
<article> | |||||
<header> | |||||
<h1>{{ page.title }}</h1> | |||||
</header> | |||||
<nav> | |||||
<p class="center"> | |||||
{% if prev and not prev.is_draft %}<a rel="prev" href="{{ prev.url }}" title="Publication précédente : {{ prev.title }}">← Précédent</a> •{% endif %} | |||||
<nobr> | |||||
<a href="/david/" title="Aller à l’accueil" rel="up" | |||||
><svg class="icon icon-home"> | |||||
<use | |||||
xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home" | |||||
></use> | |||||
</svg> | |||||
Accueil</a | |||||
> | |||||
</nobr> | |||||
• | |||||
<nobr> | |||||
<a href="/david/recherche/" title="Aller à la page de recherche" rel="search" | |||||
><svg class="icon icon-search"> | |||||
<use | |||||
xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-search" | |||||
></use> | |||||
</svg> | |||||
Recherche</a | |||||
> | |||||
</nobr> | |||||
{% if next and not next.is_draft %} • <a rel="next" href="{{ next.url }}" title="Publication suivante : {{ next.title }}">Suivant →</a>{% endif %} | |||||
</p> | |||||
</nav> | |||||
<hr> | |||||
{{ page.content }} | |||||
{% if page.tags %} | |||||
<nav> | |||||
<p> | |||||
{% for tag in page.tags %} | |||||
<a href="/david/2023/{{ slugify(tag) }}/" | |||||
title="Liste de tous les articles 2023 associés à cette étiquette" | |||||
rel="tag" | |||||
>#{{ tag }}</a> | |||||
{% endfor %} | |||||
<a href="/david/#tags-2023" | |||||
title="Liste de toutes les étiquettes 2023" | |||||
><svg class="icon icon-tags"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-tags"></use> | |||||
</svg> | |||||
tous ?</a | |||||
> | |||||
</p> | |||||
</nav> | |||||
{% endif%} | |||||
<nav> | |||||
<p class="center"> | |||||
{% if prev and not prev.is_draft %}<a rel="prev" href="{{ prev.url }}" title="Publication précédente : {{ prev.title }}">← Précédent</a> •{% endif %} | |||||
<a href="/david/2023/" title="Liste des publications récentes">↑ En 2023</a> | |||||
{% if next and not next.is_draft %} • <a rel="next" href="{{ next.url }}" title="Publication suivante : {{ next.title }}">Suivant →</a>{% endif %} | |||||
</p> | |||||
</nav> | |||||
</article> | |||||
<article> | |||||
<header> | |||||
<h1>{{ page.title }}</h1> | |||||
</header> | |||||
<nav> | |||||
<p class="center"> | |||||
{% if prev and not prev.is_draft %} | |||||
<a rel="prev" | |||||
href="{{ prev.url }}" | |||||
title="Publication précédente : {{ prev.title }}">← Précédent</a> • | |||||
{% endif %} | |||||
<nobr> | |||||
<a href="/david/" title="Aller à l’accueil" rel="up"> | |||||
<svg class="icon icon-home"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"></use> | |||||
</svg> | |||||
Accueil</a> | |||||
</nobr> | |||||
• | |||||
<nobr> | |||||
<a href="/david/recherche/" | |||||
title="Aller à la page de recherche" | |||||
rel="search"> | |||||
<svg class="icon icon-search"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-search"></use> | |||||
</svg> | |||||
Recherche</a> | |||||
</nobr> | |||||
{% if next and not next.is_draft %} | |||||
• <a rel="next" | |||||
href="{{ next.url }}" | |||||
title="Publication suivante : {{ next.title }}">Suivant →</a> | |||||
{% endif %} | |||||
</p> | |||||
</nav> | |||||
<hr> | |||||
{{ page.content }} | |||||
{% if page.tags %} | |||||
<nav> | |||||
<p> | |||||
{% for tag in page.tags %} | |||||
<a href="/david/2023/{{ slugify(tag) }}/" | |||||
title="Liste de tous les articles 2023 associés à cette étiquette" | |||||
rel="tag">#{{ tag }}</a> | |||||
{% endfor %} | |||||
<a href="/david/#tags-2023" title="Liste de toutes les étiquettes 2023"> | |||||
<svg class="icon icon-tags"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-tags"></use> | |||||
</svg> | |||||
tous ?</a> | |||||
</p> | |||||
</nav> | |||||
{% endif %} | |||||
<nav> | |||||
<p class="center"> | |||||
{% if prev and not prev.is_draft %} | |||||
<a rel="prev" | |||||
href="{{ prev.url }}" | |||||
title="Publication précédente : {{ prev.title }}">← Précédent</a> • | |||||
{% endif %} | |||||
<a href="/david/2023/" title="Liste des publications récentes">↑ En 2023</a> | |||||
{% if next and not next.is_draft %} | |||||
• <a rel="next" | |||||
href="{{ next.url }}" | |||||
title="Publication suivante : {{ next.title }}">Suivant →</a> | |||||
{% endif %} | |||||
</p> | |||||
</nav> | |||||
</article> | |||||
{% endblock content %} | {% endblock content %} |
{% block title %}Blogroll{% endblock %} | {% block title %}Blogroll{% endblock %} | ||||
{% block description %}Les sites des ami·es.{% endblock %} | {% block description %}Les sites des ami·es.{% endblock %} | ||||
{% block content %} | {% block content %} | ||||
<article> | |||||
<header> | |||||
<h1>Blogroll : les sites des ami·es</h1> | |||||
</header> | |||||
<p> | |||||
Pour ne pas être totalement auto-centré, voici quelques portes ouvertes vers le Web que j’aime. | |||||
</p> | |||||
<nav> | |||||
<ul> | |||||
{% for website in website_list -%} | |||||
<li> | |||||
<a href="{{ website.url }}">{{ website.name }}</a> | |||||
(<a href="{{ website.feed }}">flux</a>) | |||||
</li> | |||||
<article> | |||||
<header> | |||||
<h1>Blogroll : les sites des ami·es</h1> | |||||
</header> | |||||
<p>Pour ne pas être totalement auto-centré, voici quelques portes ouvertes vers le Web que j’aime.</p> | |||||
<nav> | |||||
<ul> | |||||
{% for website in website_list -%} | |||||
<li> | |||||
<a href="{{ website.url }}">{{ website.name }}</a> | |||||
(<a href="{{ website.feed }}">flux</a>) | |||||
</li> | |||||
{% endfor %} | |||||
</ul> | |||||
</nav> | |||||
<p>N’hésitez pas à me contacter si vous ne souhaitez pas figurer dans cette liste.</p> | |||||
<h2>Leurs dernières publications</h2> | |||||
{% for entry in entry_list -%} | |||||
<dl> | |||||
<dt> | |||||
<a href="{{ entry.link }}">{{ entry.title }}</a> | |||||
(<a href="{{ entry.website.url }}">{{ entry.website.name }}</a>) | |||||
</dt> | |||||
<dd> | |||||
{{ entry.summary|striptags|truncate(400, killwords=False, end="…") }} | |||||
</dd> | |||||
</dl> | |||||
{% endfor %} | {% endfor %} | ||||
</ul> | |||||
</nav> | |||||
<p> | |||||
N’hésitez pas à me contacter si vous ne souhaitez pas figurer dans cette liste. | |||||
</p> | |||||
<h2>Leurs dernières publications</h2> | |||||
{% for entry in entry_list -%} | |||||
<dl> | |||||
<dt> | |||||
<a href="{{ entry.link }}">{{ entry.title }}</a> | |||||
(<a href="{{ entry.website.url }}">{{ entry.website.name }}</a>) | |||||
</dt> | |||||
<dd> | |||||
{{ entry.summary|striptags|truncate(400, killwords=False, end="…") }} | |||||
</dd> | |||||
</dl> | |||||
{% endfor %} | |||||
</article> | |||||
</article> | |||||
{% endblock content %} | {% endblock content %} |
{% block title %}Accueil{% endblock %} | {% block title %}Accueil{% endblock %} | ||||
{% block description %}Voici l’espace personnel de David Larlet sur le Web.{% endblock %} | {% block description %}Voici l’espace personnel de David Larlet sur le Web.{% endblock %} | ||||
{% block content %} | {% block content %} | ||||
<article> | |||||
<header> | |||||
<h1>Bienvenue</h1> | |||||
</header> | |||||
<p> | |||||
Voici l’espace personnel de David Larlet sur le Web. | |||||
Il se veut modeste, accueillant et pérenne. | |||||
Il fixe mes pensées et parfois engage des échanges. | |||||
J’essaye de tenir et lier des propos bienveillants. | |||||
Je vous souhaite une jolie promenade. | |||||
</p> | |||||
<p lang="en"> | |||||
For an English profile, check out | |||||
<a href="http://larlet.com" data-instant>this page 🇨🇦</a>. | |||||
</p> | |||||
<h2>Publications 2023</h2> | |||||
<p>Liste des publications récentes en ordre anté-chronologique :</p> | |||||
<nav> | |||||
<p> | |||||
{% for page in page_list -%} | |||||
<a href="{{ page.url }}">{{ page.title }}</a> | |||||
{%- if not loop.last %}, {% else %}.{% endif %} | |||||
{% endfor %} | |||||
</p> | |||||
</nav> | |||||
<p id="tags-2023">Ou par étiquettes :</p> | |||||
<nav> | |||||
<p> | |||||
{% for slug, title, count in tags -%} | |||||
<a href="/david/2023/{{ slug }}/" rel="tag">#{{ title }} ({{ count }})</a> | |||||
{%- if not loop.last %}, {% else %}.{% endif %} | |||||
{% endfor %} | |||||
</p> | |||||
</nav> | |||||
<p> | |||||
Les <a href="/david/blogroll/">liens des ami·es</a> avec leurs dernières publications 🤗. | |||||
</p> | |||||
<h2>Publications sporadiques 2022</h2> | |||||
<p>Liste des publications en ordre chronologique :</p> | |||||
<nav> | |||||
<p> | |||||
<a href="/david/2022/01/19/">Négatif</a>, | |||||
<a href="/david/2022/02/17/">Envie</a>, | |||||
<a href="/david/2022/03/04/">Régime</a>, | |||||
<a href="/david/2022/03/18/">Temps</a>, | |||||
<a href="/david/2022/03/23/">Open-source</a>, | |||||
<a href="/david/2022/04/02/">Recherche</a>, | |||||
<a href="/david/2022/04/14/">Ressenti</a>, | |||||
<a href="/david/2022/04/23/">Quarantaine</a>, | |||||
<a href="/david/2022/04/26/">R&Day</a>, | |||||
<a href="/david/2022/05/13/">Aurore</a>, | |||||
<a href="/david/2022/05/15/">Rédemption</a>, | |||||
<a href="/david/2022/05/17/">Outils</a>, | |||||
<a href="/david/2022/05/30/">Méditation</a>, | |||||
<a href="/david/2022/06/06/">Hommes</a>, | |||||
<a href="/david/2022/06/24/">Bouddhisme</a>, | |||||
<a href="/david/2022/06/30/">Valeur(s)</a>, | |||||
<a href="/david/2022/07/06/">Regard</a>, | |||||
<a href="/david/2022/07/08/">LudoviCovid</a>, | |||||
<a href="/david/2022/07/14/">Vingt</a>, | |||||
<a href="/david/2022/07/23/">Origines</a>, | |||||
<a href="/david/2022/08/24/">Silence</a>, | |||||
<a href="/david/2022/09/03/">Bifurquer</a>, | |||||
<a href="/david/2022/10/18/">Esclavage</a>, | |||||
<a href="/david/2022/11/12/">Mastodon</a>, | |||||
<a href="/david/2022/11/27/">Neuf</a>, | |||||
<a href="/david/2022/12/19/">Traces</a>, | |||||
<a href="/david/2022/12/22/">Marcher</a>. | |||||
</p> | |||||
</nav> | |||||
<p> | |||||
J’ai aussi ouvert trois nouveaux espaces en 2022 : | |||||
</p> | |||||
<ul> | |||||
<li><a href="https://media.larlet.fr/">Des photos/media plus ou moins récents</a></li> | |||||
<li><a href="https://code.larlet.fr/">Des morceaux de code et d’apprentissages</a></li> | |||||
<li><a href="https://nature.larlet.fr/">Des bribes/expériences de nature</a></li> | |||||
</ul> | |||||
<p> | |||||
En plus de publier des bêtises | |||||
<a href="https://fedi.larlet.fr/@david" rel="me">sur Mastodon</a>. | |||||
</p> | |||||
<h2 id="tags"> | |||||
Publications <a href="/david/2021/" title="Voir la liste de toutes les publications 2021">2021</a> par tags <svg class="icon icon-tags"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-tags"></use> | |||||
</svg> | |||||
</h2> | |||||
<nav> | |||||
<p> | |||||
<a href="/david/2021/accessibilite/" rel="tag">#accessibilité (17)</a> | |||||
<a href="/david/2021/accompagnement/" rel="tag">#accompagnement (21)</a> | |||||
<a href="/david/2021/allie/" rel="tag">#allié (12)</a> | |||||
<a href="/david/2021/alterego/" rel="tag">#alterego (7)</a> | |||||
<a href="/david/2021/anarchisme/" rel="tag">#anarchisme (5)</a> | |||||
<a href="/david/2021/anxiete/" rel="tag">#anxiété (35)</a> | |||||
<a href="/david/2021/capitalocene/" rel="tag">#capitalocène (21)</a> | |||||
<a href="/david/2021/climat/" rel="tag">#climat (13)</a> | |||||
<a href="/david/2021/contemplation/" rel="tag">#contemplation (7)</a> | |||||
<a href="/david/2021/cooperative/" rel="tag">#coopérative (7)</a> | |||||
<a href="/david/2021/design/" rel="tag">#design (11)</a> | |||||
<a href="/david/2021/echecs/" rel="tag">#échecs (5)</a> | |||||
<a href="/david/2021/ecole/" rel="tag">#école (8)</a> | |||||
<a href="/david/2021/ecriture/" rel="tag">#écriture (15)</a> | |||||
<a href="/david/2021/etiquette/" rel="tag">#étiquette (5)</a> | |||||
<a href="/david/2021/exploration/" rel="tag">#exploration (5)</a> | |||||
<a href="/david/2021/feminisme/" rel="tag">#féminisme (4)</a> | |||||
<a href="/david/2021/foret/" rel="tag">#forêt (40)</a> | |||||
<a href="/david/2021/frugalite/" rel="tag">#frugalité (6)</a> | |||||
<a href="/david/2021/gafam/" rel="tag">#gafam (15)</a> | |||||
<a href="/david/2021/gratitude/" rel="tag">#gratitude (18)</a> | |||||
<a href="/david/2021/inclassable/" rel="tag">#inclassable (4)</a> | |||||
<a href="/david/2021/incompetence/" rel="tag">#incompétence (35)</a> | |||||
<a href="/david/2021/lecture/" rel="tag">#lecture (11)</a> | |||||
<a href="/david/2021/materiel/" rel="tag">#matériel (4)</a> | |||||
<a href="/david/2021/misanthropie/" rel="tag">#misanthropie (23)</a> | |||||
<a href="/david/2021/neige/" rel="tag">#neige (7)</a> | |||||
<a href="/david/2021/open-source/" rel="tag">#open-source (12)</a> | |||||
<a href="/david/2021/pandemie/" rel="tag">#pandémie (44)</a> | |||||
<a href="/david/2021/parentalite/" rel="tag">#parentalité (11)</a> | |||||
<a href="/david/2021/partage/" rel="tag">#partage (23)</a> | |||||
<a href="/david/2021/pharmakon/" rel="tag">#pharmakon (11)</a> | |||||
<a href="/david/2021/poesie/" rel="tag">#poésie (5)</a> | |||||
<a href="/david/2021/premieres-nations/" rel="tag">#premières-nations (4)</a> | |||||
<a href="/david/2021/produit/" rel="tag">#produit (17)</a> | |||||
<a href="/david/2021/protopie/" rel="tag">#protopie (5)</a> | |||||
<a href="/david/2021/publication/" rel="tag">#publication (16)</a> | |||||
<a href="/david/2021/recherche/" rel="tag">#recherche (29)</a> | |||||
<a href="/david/2021/rythme/" rel="tag">#rythme (20)</a> | |||||
<a href="/david/2021/scopyleft/" rel="tag">#scopyleft (5)</a> | |||||
<a href="/david/2021/sociologie/" rel="tag">#sociologie (26)</a> | |||||
<a href="/david/2021/technique/" rel="tag">#technique (47)</a> | |||||
<a href="/david/2021/traces/" rel="tag">#traces (15)</a> | |||||
<a href="/david/2021/transformation/" rel="tag">#transformation (49)</a> | |||||
<a href="/david/2021/travail/" rel="tag">#travail (14)</a> | |||||
<a href="/david/2021/utilisateur-ice/" rel="tag">#utilisateur·ice (5)</a> | |||||
<a href="/david/2021/video/" rel="tag">#vidéo (21)</a> | |||||
<a href="/david/2021/web/" rel="tag">#web (24)</a> | |||||
</p> | |||||
</nav> | |||||
<h2>Publications hebdomadaires <a href="/david/2020/" title="Voir la liste de toutes les publications 2020">2020</a></h2> | |||||
<p>Liste des publications en ordre chronologique :</p> | |||||
<nav> | |||||
<p> | |||||
<a href="/david/2020/01/03/">Briques</a>, | |||||
<a href="/david/2020/01/06/">Écriture</a>, | |||||
<a href="/david/2020/01/10/">Travail</a>, | |||||
<a href="/david/2020/01/15/">Futurs</a>, | |||||
<a href="/david/2020/01/17/">Datagouv</a>, | |||||
<a href="/david/2020/01/22/">Réponses</a>, | |||||
<a href="/david/2020/01/29/">Sortie ski</a>, | |||||
<a href="/david/2020/01/31/">Intentions</a>, | |||||
<a href="/david/2020/02/07/">GAFAM+</a>, | |||||
<a href="/david/2020/02/14/">Espoirs</a>, | |||||
<a href="/david/2020/02/21/">Service</a>, | |||||
<a href="/david/2020/03/13/">Technique</a>, | |||||
<a href="/david/2020/03/20/">Rédemption</a>, | |||||
<a href="/david/2020/03/27/">Exutoire</a>, | |||||
<a href="/david/2020/04/03/">Patience</a>, | |||||
<a href="/david/2020/04/10/">Résistance</a>, | |||||
<a href="/david/2020/04/18/">Zam</a>, | |||||
<a href="/david/2020/05/18/">Relance</a>, | |||||
<a href="/david/2020/05/20/">Bikepacking</a>, | |||||
<a href="/david/2020/05/26/">Covidoudou</a>, | |||||
<a href="/david/2020/06/12/">Vrac</a>, | |||||
<a href="/david/2020/06/18/">Mouvements</a>, | |||||
<a href="/david/2020/06/25/">Ouvertance</a>, | |||||
<a href="/david/2020/07/03/">Confetti</a>, | |||||
<a href="/david/2020/07/13/">Bilan</a>, | |||||
<a href="/david/2020/08/24/">Personnes</a>, | |||||
<a href="/david/2020/09/01/">Rentrée</a>, | |||||
<a href="/david/2020/09/07/">Rappels</a>, | |||||
<a href="/david/2020/09/16/">Coupable</a>, | |||||
<a href="/david/2020/10/08/">Parvenir</a>, | |||||
<a href="/david/2020/10/22/">Grand-écart</a>, | |||||
<a href="/david/2020/10/28/">Chaos</a>, | |||||
<a href="/david/2020/11/27/">Perles</a>, | |||||
<a href="/david/2020/12/01/">Compréhension</a>, | |||||
<a href="/david/2020/12/13/">Publications</a>, | |||||
<a href="/david/2020/12/15/">Vidéos</a>, | |||||
<a href="/david/2020/12/18/">Arrakice</a>, | |||||
<a href="/david/2020/12/21/">Livres</a>. | |||||
</p> | |||||
</nav> | |||||
<h2>Recherche</h2> | |||||
<p>Les contenus de ces dernières années sont indexés.</p> | |||||
<form action="/david/recherche/" method="get"> | |||||
<label for="input-search">Termes de votre recherche :</label> | |||||
<input type="search" name="s" required> | |||||
<button>Chercher</button> | |||||
</form> | |||||
<h2>Publications archéologiques</h2> | |||||
<p> | |||||
Vous pouvez consulter les différents | |||||
<a href="/david/blog/">billets de blog</a> qui ont été rédigés de 2004 à 2019 | |||||
ou les <a href="/david/stream/">entrées de journaux</a> relativement | |||||
régulières entre 2009 et 2019. | |||||
</p> | |||||
<p> | |||||
<em> | |||||
Notez qu’avec un tel historique, certaines informations sont obsolètes et/ou | |||||
plus cautionnées. | |||||
</em> | |||||
</p> | |||||
<h2>Me contacter</h2> | |||||
<p> | |||||
Je réponds à <em>presque</em> tous les courriels reçus, exception faite de ceux que j’assimile à de la publicité ou du <code>spam</code>. Vous pouvez <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">m’écrire</a> sans trop de civilités et me tutoyer, je répondrai probablement de même. Si vous souhaitez correspondre de manière chiffrée, voici <a href="/static/david/david-larlet-pgp-public-key-1359EA98.asc" title="Clé publique de chiffrement">ma clé publique</a>. | |||||
</p> | |||||
</article> | |||||
<article> | |||||
<header> | |||||
<h1>Bienvenue</h1> | |||||
</header> | |||||
<p> | |||||
Voici l’espace personnel de David Larlet sur le Web. | |||||
Il se veut modeste, accueillant et pérenne. | |||||
Il fixe mes pensées et parfois engage des échanges. | |||||
J’essaye de tenir et lier des propos bienveillants. | |||||
Je vous souhaite une jolie promenade. | |||||
</p> | |||||
<p lang="en"> | |||||
For an English profile, check out | |||||
<a href="http://larlet.com" data-instant>this page 🇨🇦</a>. | |||||
</p> | |||||
<h2>Publications 2023</h2> | |||||
<p>Liste des publications récentes en ordre anté-chronologique :</p> | |||||
<nav> | |||||
<p> | |||||
{% for page in page_list -%} | |||||
<a href="{{ page.url }}">{{ page.title }}</a> | |||||
{%- if not loop.last %}, | |||||
{% else %} | |||||
. | |||||
{% endif %} | |||||
{% endfor %} | |||||
</p> | |||||
</nav> | |||||
<p id="tags-2023">Ou par étiquettes :</p> | |||||
<nav> | |||||
<p> | |||||
{% for slug, title, count in tags -%} | |||||
<a href="/david/2023/{{ slug }}/" rel="tag">#{{ title }} ({{ count }})</a> | |||||
{%- if not loop.last %}, | |||||
{% else %} | |||||
. | |||||
{% endif %} | |||||
{% endfor %} | |||||
</p> | |||||
</nav> | |||||
<p> | |||||
Les <a href="/david/blogroll/">liens des ami·es</a> avec leurs dernières publications 🤗. | |||||
</p> | |||||
<h2>Publications sporadiques 2022</h2> | |||||
<p>Liste des publications en ordre chronologique :</p> | |||||
<nav> | |||||
<p> | |||||
<a href="/david/2022/01/19/">Négatif</a>, | |||||
<a href="/david/2022/02/17/">Envie</a>, | |||||
<a href="/david/2022/03/04/">Régime</a>, | |||||
<a href="/david/2022/03/18/">Temps</a>, | |||||
<a href="/david/2022/03/23/">Open-source</a>, | |||||
<a href="/david/2022/04/02/">Recherche</a>, | |||||
<a href="/david/2022/04/14/">Ressenti</a>, | |||||
<a href="/david/2022/04/23/">Quarantaine</a>, | |||||
<a href="/david/2022/04/26/">R&Day</a>, | |||||
<a href="/david/2022/05/13/">Aurore</a>, | |||||
<a href="/david/2022/05/15/">Rédemption</a>, | |||||
<a href="/david/2022/05/17/">Outils</a>, | |||||
<a href="/david/2022/05/30/">Méditation</a>, | |||||
<a href="/david/2022/06/06/">Hommes</a>, | |||||
<a href="/david/2022/06/24/">Bouddhisme</a>, | |||||
<a href="/david/2022/06/30/">Valeur(s)</a>, | |||||
<a href="/david/2022/07/06/">Regard</a>, | |||||
<a href="/david/2022/07/08/">LudoviCovid</a>, | |||||
<a href="/david/2022/07/14/">Vingt</a>, | |||||
<a href="/david/2022/07/23/">Origines</a>, | |||||
<a href="/david/2022/08/24/">Silence</a>, | |||||
<a href="/david/2022/09/03/">Bifurquer</a>, | |||||
<a href="/david/2022/10/18/">Esclavage</a>, | |||||
<a href="/david/2022/11/12/">Mastodon</a>, | |||||
<a href="/david/2022/11/27/">Neuf</a>, | |||||
<a href="/david/2022/12/19/">Traces</a>, | |||||
<a href="/david/2022/12/22/">Marcher</a>. | |||||
</p> | |||||
</nav> | |||||
<p>J’ai aussi ouvert trois nouveaux espaces en 2022 :</p> | |||||
<ul> | |||||
<li> | |||||
<a href="https://media.larlet.fr/">Des photos/media plus ou moins récents</a> | |||||
</li> | |||||
<li> | |||||
<a href="https://code.larlet.fr/">Des morceaux de code et d’apprentissages</a> | |||||
</li> | |||||
<li> | |||||
<a href="https://nature.larlet.fr/">Des bribes/expériences de nature</a> | |||||
</li> | |||||
</ul> | |||||
<p> | |||||
En plus de publier des bêtises | |||||
<a href="https://fedi.larlet.fr/@david" rel="me">sur Mastodon</a>. | |||||
</p> | |||||
<h2 id="tags"> | |||||
Publications <a href="/david/2021/" | |||||
title="Voir la liste de toutes les publications 2021">2021</a> par tags | |||||
<svg class="icon icon-tags"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-tags"></use> | |||||
</svg> | |||||
</h2> | |||||
<nav> | |||||
<p> | |||||
<a href="/david/2021/accessibilite/" rel="tag">#accessibilité (17)</a> | |||||
<a href="/david/2021/accompagnement/" rel="tag">#accompagnement (21)</a> | |||||
<a href="/david/2021/allie/" rel="tag">#allié (12)</a> | |||||
<a href="/david/2021/alterego/" rel="tag">#alterego (7)</a> | |||||
<a href="/david/2021/anarchisme/" rel="tag">#anarchisme (5)</a> | |||||
<a href="/david/2021/anxiete/" rel="tag">#anxiété (35)</a> | |||||
<a href="/david/2021/capitalocene/" rel="tag">#capitalocène (21)</a> | |||||
<a href="/david/2021/climat/" rel="tag">#climat (13)</a> | |||||
<a href="/david/2021/contemplation/" rel="tag">#contemplation (7)</a> | |||||
<a href="/david/2021/cooperative/" rel="tag">#coopérative (7)</a> | |||||
<a href="/david/2021/design/" rel="tag">#design (11)</a> | |||||
<a href="/david/2021/echecs/" rel="tag">#échecs (5)</a> | |||||
<a href="/david/2021/ecole/" rel="tag">#école (8)</a> | |||||
<a href="/david/2021/ecriture/" rel="tag">#écriture (15)</a> | |||||
<a href="/david/2021/etiquette/" rel="tag">#étiquette (5)</a> | |||||
<a href="/david/2021/exploration/" rel="tag">#exploration (5)</a> | |||||
<a href="/david/2021/feminisme/" rel="tag">#féminisme (4)</a> | |||||
<a href="/david/2021/foret/" rel="tag">#forêt (40)</a> | |||||
<a href="/david/2021/frugalite/" rel="tag">#frugalité (6)</a> | |||||
<a href="/david/2021/gafam/" rel="tag">#gafam (15)</a> | |||||
<a href="/david/2021/gratitude/" rel="tag">#gratitude (18)</a> | |||||
<a href="/david/2021/inclassable/" rel="tag">#inclassable (4)</a> | |||||
<a href="/david/2021/incompetence/" rel="tag">#incompétence (35)</a> | |||||
<a href="/david/2021/lecture/" rel="tag">#lecture (11)</a> | |||||
<a href="/david/2021/materiel/" rel="tag">#matériel (4)</a> | |||||
<a href="/david/2021/misanthropie/" rel="tag">#misanthropie (23)</a> | |||||
<a href="/david/2021/neige/" rel="tag">#neige (7)</a> | |||||
<a href="/david/2021/open-source/" rel="tag">#open-source (12)</a> | |||||
<a href="/david/2021/pandemie/" rel="tag">#pandémie (44)</a> | |||||
<a href="/david/2021/parentalite/" rel="tag">#parentalité (11)</a> | |||||
<a href="/david/2021/partage/" rel="tag">#partage (23)</a> | |||||
<a href="/david/2021/pharmakon/" rel="tag">#pharmakon (11)</a> | |||||
<a href="/david/2021/poesie/" rel="tag">#poésie (5)</a> | |||||
<a href="/david/2021/premieres-nations/" rel="tag">#premières-nations (4)</a> | |||||
<a href="/david/2021/produit/" rel="tag">#produit (17)</a> | |||||
<a href="/david/2021/protopie/" rel="tag">#protopie (5)</a> | |||||
<a href="/david/2021/publication/" rel="tag">#publication (16)</a> | |||||
<a href="/david/2021/recherche/" rel="tag">#recherche (29)</a> | |||||
<a href="/david/2021/rythme/" rel="tag">#rythme (20)</a> | |||||
<a href="/david/2021/scopyleft/" rel="tag">#scopyleft (5)</a> | |||||
<a href="/david/2021/sociologie/" rel="tag">#sociologie (26)</a> | |||||
<a href="/david/2021/technique/" rel="tag">#technique (47)</a> | |||||
<a href="/david/2021/traces/" rel="tag">#traces (15)</a> | |||||
<a href="/david/2021/transformation/" rel="tag">#transformation (49)</a> | |||||
<a href="/david/2021/travail/" rel="tag">#travail (14)</a> | |||||
<a href="/david/2021/utilisateur-ice/" rel="tag">#utilisateur·ice (5)</a> | |||||
<a href="/david/2021/video/" rel="tag">#vidéo (21)</a> | |||||
<a href="/david/2021/web/" rel="tag">#web (24)</a> | |||||
</p> | |||||
</nav> | |||||
<h2> | |||||
Publications hebdomadaires <a href="/david/2020/" | |||||
title="Voir la liste de toutes les publications 2020">2020</a> | |||||
</h2> | |||||
<p>Liste des publications en ordre chronologique :</p> | |||||
<nav> | |||||
<p> | |||||
<a href="/david/2020/01/03/">Briques</a>, | |||||
<a href="/david/2020/01/06/">Écriture</a>, | |||||
<a href="/david/2020/01/10/">Travail</a>, | |||||
<a href="/david/2020/01/15/">Futurs</a>, | |||||
<a href="/david/2020/01/17/">Datagouv</a>, | |||||
<a href="/david/2020/01/22/">Réponses</a>, | |||||
<a href="/david/2020/01/29/">Sortie ski</a>, | |||||
<a href="/david/2020/01/31/">Intentions</a>, | |||||
<a href="/david/2020/02/07/">GAFAM+</a>, | |||||
<a href="/david/2020/02/14/">Espoirs</a>, | |||||
<a href="/david/2020/02/21/">Service</a>, | |||||
<a href="/david/2020/03/13/">Technique</a>, | |||||
<a href="/david/2020/03/20/">Rédemption</a>, | |||||
<a href="/david/2020/03/27/">Exutoire</a>, | |||||
<a href="/david/2020/04/03/">Patience</a>, | |||||
<a href="/david/2020/04/10/">Résistance</a>, | |||||
<a href="/david/2020/04/18/">Zam</a>, | |||||
<a href="/david/2020/05/18/">Relance</a>, | |||||
<a href="/david/2020/05/20/">Bikepacking</a>, | |||||
<a href="/david/2020/05/26/">Covidoudou</a>, | |||||
<a href="/david/2020/06/12/">Vrac</a>, | |||||
<a href="/david/2020/06/18/">Mouvements</a>, | |||||
<a href="/david/2020/06/25/">Ouvertance</a>, | |||||
<a href="/david/2020/07/03/">Confetti</a>, | |||||
<a href="/david/2020/07/13/">Bilan</a>, | |||||
<a href="/david/2020/08/24/">Personnes</a>, | |||||
<a href="/david/2020/09/01/">Rentrée</a>, | |||||
<a href="/david/2020/09/07/">Rappels</a>, | |||||
<a href="/david/2020/09/16/">Coupable</a>, | |||||
<a href="/david/2020/10/08/">Parvenir</a>, | |||||
<a href="/david/2020/10/22/">Grand-écart</a>, | |||||
<a href="/david/2020/10/28/">Chaos</a>, | |||||
<a href="/david/2020/11/27/">Perles</a>, | |||||
<a href="/david/2020/12/01/">Compréhension</a>, | |||||
<a href="/david/2020/12/13/">Publications</a>, | |||||
<a href="/david/2020/12/15/">Vidéos</a>, | |||||
<a href="/david/2020/12/18/">Arrakice</a>, | |||||
<a href="/david/2020/12/21/">Livres</a>. | |||||
</p> | |||||
</nav> | |||||
<h2>Recherche</h2> | |||||
<p>Les contenus de ces dernières années sont indexés.</p> | |||||
<form action="/david/recherche/" method="get"> | |||||
<label for="input-search">Termes de votre recherche :</label> | |||||
<input type="search" name="s" required> | |||||
<button>Chercher</button> | |||||
</form> | |||||
<h2>Publications archéologiques</h2> | |||||
<p> | |||||
Vous pouvez consulter les différents | |||||
<a href="/david/blog/">billets de blog</a> qui ont été rédigés de 2004 à 2019 | |||||
ou les <a href="/david/stream/">entrées de journaux</a> relativement | |||||
régulières entre 2009 et 2019. | |||||
</p> | |||||
<p> | |||||
<em> | |||||
Notez qu’avec un tel historique, certaines informations sont obsolètes et/ou | |||||
plus cautionnées. | |||||
</em> | |||||
</p> | |||||
<h2>Me contacter</h2> | |||||
<p> | |||||
Je réponds à <em>presque</em> tous les courriels reçus, exception faite de ceux que j’assimile à de la publicité ou du <code>spam</code>. Vous pouvez <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">m’écrire</a> sans trop de civilités et me tutoyer, je répondrai probablement de même. Si vous souhaitez correspondre de manière chiffrée, voici <a href="/static/david/david-larlet-pgp-public-key-1359EA98.asc" | |||||
title="Clé publique de chiffrement">ma clé publique</a>. | |||||
</p> | |||||
</article> | |||||
{% endblock content %} | {% endblock content %} |
{% block title %}Recherche{% endblock %} | {% block title %}Recherche{% endblock %} | ||||
{% block description %}Voici l’espace personnel de David Larlet sur le Web.{% endblock %} | {% block description %}Voici l’espace personnel de David Larlet sur le Web.{% endblock %} | ||||
{% block content %} | {% block content %} | ||||
<article> | |||||
<header> | |||||
<h1>Recherche</h1> | |||||
</header> | |||||
<nav> | |||||
<p class="center"> | |||||
<nobr> | |||||
<a href="/david/" title="Aller à l’accueil" | |||||
><svg class="icon icon-home"> | |||||
<use | |||||
xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home" | |||||
></use> | |||||
</svg> | |||||
Accueil</a | |||||
> | |||||
</nobr> | |||||
</p> | |||||
</nav> | |||||
<hr> | |||||
<form action="https://duckduckgo.com/" method="get" id="form-search"> | |||||
<label for="input-search">Termes de votre recherche :</label> | |||||
<input type="search" name="q" id="input-search" required> | |||||
<input type="hidden" name="sites" value="larlet.fr"> | |||||
<button>Chercher</button> | |||||
<button type="reset">Annuler</button> | |||||
</form> | |||||
<p id="search-status" role="status"></p> | |||||
<div id="search-results"></div> | |||||
<hr> | |||||
<p> | |||||
Seuls les écrits de ces dernières années sont indexés. | |||||
Vous pouvez aussi consulter les archives chronologiques de | |||||
<a href="/david/2023/">2023</a>, | |||||
<a href="/david/2022/">2022</a>, | |||||
<a href="/david/2021/">2021</a>, | |||||
<a href="/david/2020/">2020</a>, | |||||
<a href="/david/blog/">etc</a>. | |||||
</p> | |||||
{% endblock content %} | |||||
{% block extra_body %} | |||||
<template id="search-result"> | |||||
<h2> | |||||
<a href="${url}">${title}</a> (${date}) | |||||
</h2> | |||||
<p>${content}</p> | |||||
</template> | |||||
<script id="search-index" type="application/json"> | |||||
{{ search_index }} | |||||
</script> | |||||
<!-- French stopwords from https://github.com/stopwords-iso/stopwords-fr --> | |||||
<script id="search-stop-words" type="application/json"> | |||||
[ | |||||
"a", "abord", "absolument", "afin", "ah", "ai", "aie", "aient", "aies", | |||||
"ailleurs", "ainsi", "ait", "allaient", "allo", "allons", "allô", | |||||
"alors", "anterieur", "anterieure", "anterieures", "apres", "après", | |||||
"as", "assez", "attendu", "au", "aucun", "aucune", "aucuns", "aujourd", | |||||
"aujourd'hui", "aupres", "auquel", "aura", "aurai", "auraient", "aurais", | |||||
"aurait", "auras", "aurez", "auriez", "aurions", "aurons", "auront", | |||||
"aussi", "autant", "autre", "autrefois", "autrement", "autres", "autrui", | |||||
"aux", "auxquelles", "auxquels", "avaient", "avais", "avait", "avant", | |||||
"avec", "avez", "aviez", "avions", "avoir", "avons", "ayant", "ayez", | |||||
"ayons", "b", "bah", "bas", "basee", "bat", "beau", "beaucoup", "bien", | |||||
"bigre", "bon", "boum", "bravo", "brrr", "c", "car", "ce", "ceci", | |||||
"cela", "celle", "celle-ci", "celle-là", "celles", "celles-ci", | |||||
"celles-là", "celui", "celui-ci", "celui-là", "celà", "cent", | |||||
"cependant", "certain", "certaine", "certaines", "certains", "certes", | |||||
"ces", "cet", "cette", "ceux", "ceux-ci", "ceux-là", "chacun", "chacune", | |||||
"chaque", "cher", "chers", "chez", "chiche", "chut", "chère", "chères", | |||||
"ci", "cinq", "cinquantaine", "cinquante", "cinquantième", "cinquième", | |||||
"clac", "clic", "combien", "comme", "comment", "comparable", | |||||
"comparables", "compris", "concernant", "contre", "couic", "crac", "d", | |||||
"da", "dans", "de", "debout", "dedans", "dehors", "deja", "delà", | |||||
"depuis", "dernier", "derniere", "derriere", "derrière", "des", | |||||
"desormais", "desquelles", "desquels", "dessous", "dessus", "deux", | |||||
"deuxième", "deuxièmement", "devant", "devers", "devra", "devrait", | |||||
"different", "differentes", "differents", "différent", "différente", | |||||
"différentes", "différents", "dire", "directe", "directement", "dit", | |||||
"dite", "dits", "divers", "diverse", "diverses", "dix", "dix-huit", | |||||
"dix-neuf", "dix-sept", "dixième", "doit", "doivent", "donc", "dont", | |||||
"dos", "douze", "douzième", "dring", "droite", "du", "duquel", "durant", | |||||
"dès", "début", "désormais", "e", "effet", "egale", "egalement", | |||||
"egales", "eh", "elle", "elle-même", "elles", "elles-mêmes", "en", | |||||
"encore", "enfin", "entre", "envers", "environ", "es", "essai", "est", | |||||
"et", "etant", "etc", "etre", "eu", "eue", "eues", "euh", "eurent", | |||||
"eus", "eusse", "eussent", "eusses", "eussiez", "eussions", "eut", "eux", | |||||
"eux-mêmes", "exactement", "excepté", "extenso", "exterieur", "eûmes", | |||||
"eût", "eûtes", "f", "fais", "faisaient", "faisant", "fait", "faites", | |||||
"façon", "feront", "fi", "flac", "floc", "fois", "font", "force", | |||||
"furent", "fus", "fusse", "fussent", "fusses", "fussiez", "fussions", | |||||
"fut", "fûmes", "fût", "fûtes", "g", "gens", "h", "ha", "haut", "hein", | |||||
"hem", "hep", "hi", "ho", "holà", "hop", "hormis", "hors", "hou", "houp", | |||||
"hue", "hui", "huit", "huitième", "hum", "hurrah", "hé", "hélas", "i", | |||||
"ici", "il", "ils", "importe", "j", "je", "jusqu", "jusque", "juste", | |||||
"k", "l", "la", "laisser", "laquelle", "las", "le", "lequel", "les", | |||||
"lesquelles", "lesquels", "leur", "leurs", "longtemps", "lors", | |||||
"lorsque", "lui", "lui-meme", "lui-même", "là", "lès", "m", "ma", | |||||
"maint", "maintenant", "mais", "malgre", "malgré", "maximale", "me", | |||||
"meme", "memes", "merci", "mes", "mien", "mienne", "miennes", "miens", | |||||
"mille", "mince", "mine", "minimale", "moi", "moi-meme", "moi-même", | |||||
"moindres", "moins", "mon", "mot", "moyennant", "multiple", "multiples", | |||||
"même", "mêmes", "n", "na", "naturel", "naturelle", "naturelles", "ne", | |||||
"neanmoins", "necessaire", "necessairement", "neuf", "neuvième", "ni", | |||||
"nombreuses", "nombreux", "nommés", "non", "nos", "notamment", "notre", | |||||
"nous", "nous-mêmes", "nouveau", "nouveaux", "nul", "néanmoins", "nôtre", | |||||
"nôtres", "o", "oh", "ohé", "ollé", "olé", "on", "ont", "onze", | |||||
"onzième", "ore", "ou", "ouf", "ouias", "oust", "ouste", "outre", | |||||
"ouvert", "ouverte", "ouverts", "o|", "où", "p", "paf", "pan", "par", | |||||
"parce", "parfois", "parle", "parlent", "parler", "parmi", "parole", | |||||
"parseme", "partant", "particulier", "particulière", "particulièrement", | |||||
"pas", "passé", "pendant", "pense", "permet", "personne", "personnes", | |||||
"peu", "peut", "peuvent", "peux", "pff", "pfft", "pfut", "pif", "pire", | |||||
"pièce", "plein", "plouf", "plupart", "plus", "plusieurs", "plutôt", | |||||
"possessif", "possessifs", "possible", "possibles", "pouah", "pour", | |||||
"pourquoi", "pourrais", "pourrait", "pouvait", "prealable", | |||||
"precisement", "premier", "première", "premièrement", "pres", "probable", | |||||
"probante", "procedant", "proche", "près", "psitt", "pu", "puis", | |||||
"puisque", "pur", "pure", "q", "qu", "quand", "quant", "quant-à-soi", | |||||
"quanta", "quarante", "quatorze", "quatre", "quatre-vingt", "quatrième", | |||||
"quatrièmement", "que", "quel", "quelconque", "quelle", "quelles", | |||||
"quelqu'un", "quelque", "quelques", "quels", "qui", "quiconque", | |||||
"quinze", "quoi", "quoique", "r", "rare", "rarement", "rares", | |||||
"relative", "relativement", "remarquable", "rend", "rendre", "restant", | |||||
"reste", "restent", "restrictif", "retour", "revoici", "revoilà", "rien", | |||||
"s", "sa", "sacrebleu", "sait", "sans", "sapristi", "sauf", "se", "sein", | |||||
"seize", "selon", "semblable", "semblaient", "semble", "semblent", | |||||
"sent", "sept", "septième", "sera", "serai", "seraient", "serais", | |||||
"serait", "seras", "serez", "seriez", "serions", "serons", "seront", | |||||
"ses", "seul", "seule", "seulement", "si", "sien", "sienne", "siennes", | |||||
"siens", "sinon", "six", "sixième", "soi", "soi-même", "soient", "sois", | |||||
"soit", "soixante", "sommes", "son", "sont", "sous", "souvent", "soyez", | |||||
"soyons", "specifique", "specifiques", "speculatif", "stop", | |||||
"strictement", "subtiles", "suffisant", "suffisante", "suffit", "suis", | |||||
"suit", "suivant", "suivante", "suivantes", "suivants", "suivre", | |||||
"sujet", "superpose", "sur", "surtout", "t", "ta", "tac", "tandis", | |||||
"tant", "tardive", "te", "tel", "telle", "tellement", "telles", "tels", | |||||
"tenant", "tend", "tenir", "tente", "tes", "tic", "tien", "tienne", | |||||
"tiennes", "tiens", "toc", "toi", "toi-même", "ton", "touchant", | |||||
"toujours", "tous", "tout", "toute", "toutefois", "toutes", "treize", | |||||
"trente", "tres", "trois", "troisième", "troisièmement", "trop", "très", | |||||
"tsoin", "tsouin", "tu", "té", "u", "un", "une", "unes", "uniformement", | |||||
"unique", "uniques", "uns", "v", "va", "vais", "valeur", "vas", "vers", | |||||
"via", "vif", "vifs", "vingt", "vivat", "vive", "vives", "vlan", "voici", | |||||
"voie", "voient", "voilà", "voire", "vont", "vos", "votre", "vous", | |||||
"vous-mêmes", "vu", "vé", "vôtre", "vôtres", "w", "x", "y", "z", "zut", | |||||
"à", "â", "ça", "ès", "étaient", "étais", "était", "étant", "état", | |||||
"étiez", "étions", "été", "étée", "étées", "étés", "êtes", "être", "ô" | |||||
] | |||||
</script> | |||||
<script type="text/javascript"> | |||||
/* See: | |||||
* https://gomakethings.com/how-to-create-a-search-page-for-a-static-website-with-vanilla-js/ | |||||
* https://gomakethings.com/how-to-update-the-url-of-a-page-without-causing-a-reload-using-vanilla-javascript/ | |||||
*/ | |||||
;(function () { | |||||
// Retrieving the search index and stopwords from JSON. | |||||
// See https://v8.dev/blog/cost-of-javascript-2019#json | |||||
let searchIndex = JSON.parse( | |||||
document.getElementById('search-index').textContent | |||||
) | |||||
let stopWords = JSON.parse( | |||||
document.getElementById('search-stop-words').textContent | |||||
) | |||||
// Get the DOM elements | |||||
let form = document.querySelector('#form-search') | |||||
let input = document.querySelector('#input-search') | |||||
let resultList = document.querySelector('#search-results') | |||||
let searchStatus = document.querySelector('#search-status') | |||||
let searchResultTemplate = document.querySelector('#search-result') | |||||
// Make sure required content exists | |||||
if ( | |||||
!form || | |||||
!input || | |||||
!resultList || | |||||
!searchStatus || | |||||
!searchIndex || | |||||
!stopWords || | |||||
!searchResultTemplate | |||||
) | |||||
return | |||||
// Create a submit handler | |||||
form.addEventListener('submit', function (event) { | |||||
event.preventDefault() | |||||
search(input.value) | |||||
}) | |||||
// Create a typeahead handler | |||||
form.addEventListener('keyup', function (event) { | |||||
search(input.value) | |||||
}) | |||||
<article> | |||||
<header> | |||||
<h1>Recherche</h1> | |||||
</header> | |||||
<nav> | |||||
<p class="center"> | |||||
<nobr> | |||||
<a href="/david/" title="Aller à l’accueil"> | |||||
<svg class="icon icon-home"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"></use> | |||||
</svg> | |||||
Accueil</a> | |||||
</nobr> | |||||
</p> | |||||
</nav> | |||||
<hr> | |||||
<form action="https://duckduckgo.com/" method="get" id="form-search"> | |||||
<label for="input-search">Termes de votre recherche :</label> | |||||
<input type="search" name="q" id="input-search" required> | |||||
<input type="hidden" name="sites" value="larlet.fr"> | |||||
<button>Chercher</button> | |||||
<button type="reset">Annuler</button> | |||||
</form> | |||||
<p id="search-status" role="status"></p> | |||||
<div id="search-results"></div> | |||||
<hr> | |||||
<p> | |||||
Seuls les écrits de ces dernières années sont indexés. | |||||
Vous pouvez aussi consulter les archives chronologiques de | |||||
<a href="/david/2023/">2023</a>, | |||||
<a href="/david/2022/">2022</a>, | |||||
<a href="/david/2021/">2021</a>, | |||||
<a href="/david/2020/">2020</a>, | |||||
<a href="/david/blog/">etc</a>. | |||||
</p> | |||||
{% endblock content %} | |||||
{% block extra_body %} | |||||
<template id="search-result"> | |||||
<h2> | |||||
<a href="${url}">${title}</a> (${date}) | |||||
</h2> | |||||
<p>${content}</p> | |||||
</template> | |||||
{# djlint:off #} | |||||
<script id="search-index" type="application/json">{{ search_index }}</script> | |||||
{# djlint:on #} | |||||
<!-- French stopwords from https://github.com/stopwords-iso/stopwords-fr --> | |||||
<script id="search-stop-words" type="application/json"> | |||||
[ | |||||
"a", "abord", "absolument", "afin", "ah", "ai", "aie", "aient", "aies", | |||||
"ailleurs", "ainsi", "ait", "allaient", "allo", "allons", "allô", | |||||
"alors", "anterieur", "anterieure", "anterieures", "apres", "après", | |||||
"as", "assez", "attendu", "au", "aucun", "aucune", "aucuns", "aujourd", | |||||
"aujourd'hui", "aupres", "auquel", "aura", "aurai", "auraient", "aurais", | |||||
"aurait", "auras", "aurez", "auriez", "aurions", "aurons", "auront", | |||||
"aussi", "autant", "autre", "autrefois", "autrement", "autres", "autrui", | |||||
"aux", "auxquelles", "auxquels", "avaient", "avais", "avait", "avant", | |||||
"avec", "avez", "aviez", "avions", "avoir", "avons", "ayant", "ayez", | |||||
"ayons", "b", "bah", "bas", "basee", "bat", "beau", "beaucoup", "bien", | |||||
"bigre", "bon", "boum", "bravo", "brrr", "c", "car", "ce", "ceci", | |||||
"cela", "celle", "celle-ci", "celle-là", "celles", "celles-ci", | |||||
"celles-là", "celui", "celui-ci", "celui-là", "celà", "cent", | |||||
"cependant", "certain", "certaine", "certaines", "certains", "certes", | |||||
"ces", "cet", "cette", "ceux", "ceux-ci", "ceux-là", "chacun", "chacune", | |||||
"chaque", "cher", "chers", "chez", "chiche", "chut", "chère", "chères", | |||||
"ci", "cinq", "cinquantaine", "cinquante", "cinquantième", "cinquième", | |||||
"clac", "clic", "combien", "comme", "comment", "comparable", | |||||
"comparables", "compris", "concernant", "contre", "couic", "crac", "d", | |||||
"da", "dans", "de", "debout", "dedans", "dehors", "deja", "delà", | |||||
"depuis", "dernier", "derniere", "derriere", "derrière", "des", | |||||
"desormais", "desquelles", "desquels", "dessous", "dessus", "deux", | |||||
"deuxième", "deuxièmement", "devant", "devers", "devra", "devrait", | |||||
"different", "differentes", "differents", "différent", "différente", | |||||
"différentes", "différents", "dire", "directe", "directement", "dit", | |||||
"dite", "dits", "divers", "diverse", "diverses", "dix", "dix-huit", | |||||
"dix-neuf", "dix-sept", "dixième", "doit", "doivent", "donc", "dont", | |||||
"dos", "douze", "douzième", "dring", "droite", "du", "duquel", "durant", | |||||
"dès", "début", "désormais", "e", "effet", "egale", "egalement", | |||||
"egales", "eh", "elle", "elle-même", "elles", "elles-mêmes", "en", | |||||
"encore", "enfin", "entre", "envers", "environ", "es", "essai", "est", | |||||
"et", "etant", "etc", "etre", "eu", "eue", "eues", "euh", "eurent", | |||||
"eus", "eusse", "eussent", "eusses", "eussiez", "eussions", "eut", "eux", | |||||
"eux-mêmes", "exactement", "excepté", "extenso", "exterieur", "eûmes", | |||||
"eût", "eûtes", "f", "fais", "faisaient", "faisant", "fait", "faites", | |||||
"façon", "feront", "fi", "flac", "floc", "fois", "font", "force", | |||||
"furent", "fus", "fusse", "fussent", "fusses", "fussiez", "fussions", | |||||
"fut", "fûmes", "fût", "fûtes", "g", "gens", "h", "ha", "haut", "hein", | |||||
"hem", "hep", "hi", "ho", "holà", "hop", "hormis", "hors", "hou", "houp", | |||||
"hue", "hui", "huit", "huitième", "hum", "hurrah", "hé", "hélas", "i", | |||||
"ici", "il", "ils", "importe", "j", "je", "jusqu", "jusque", "juste", | |||||
"k", "l", "la", "laisser", "laquelle", "las", "le", "lequel", "les", | |||||
"lesquelles", "lesquels", "leur", "leurs", "longtemps", "lors", | |||||
"lorsque", "lui", "lui-meme", "lui-même", "là", "lès", "m", "ma", | |||||
"maint", "maintenant", "mais", "malgre", "malgré", "maximale", "me", | |||||
"meme", "memes", "merci", "mes", "mien", "mienne", "miennes", "miens", | |||||
"mille", "mince", "mine", "minimale", "moi", "moi-meme", "moi-même", | |||||
"moindres", "moins", "mon", "mot", "moyennant", "multiple", "multiples", | |||||
"même", "mêmes", "n", "na", "naturel", "naturelle", "naturelles", "ne", | |||||
"neanmoins", "necessaire", "necessairement", "neuf", "neuvième", "ni", | |||||
"nombreuses", "nombreux", "nommés", "non", "nos", "notamment", "notre", | |||||
"nous", "nous-mêmes", "nouveau", "nouveaux", "nul", "néanmoins", "nôtre", | |||||
"nôtres", "o", "oh", "ohé", "ollé", "olé", "on", "ont", "onze", | |||||
"onzième", "ore", "ou", "ouf", "ouias", "oust", "ouste", "outre", | |||||
"ouvert", "ouverte", "ouverts", "o|", "où", "p", "paf", "pan", "par", | |||||
"parce", "parfois", "parle", "parlent", "parler", "parmi", "parole", | |||||
"parseme", "partant", "particulier", "particulière", "particulièrement", | |||||
"pas", "passé", "pendant", "pense", "permet", "personne", "personnes", | |||||
"peu", "peut", "peuvent", "peux", "pff", "pfft", "pfut", "pif", "pire", | |||||
"pièce", "plein", "plouf", "plupart", "plus", "plusieurs", "plutôt", | |||||
"possessif", "possessifs", "possible", "possibles", "pouah", "pour", | |||||
"pourquoi", "pourrais", "pourrait", "pouvait", "prealable", | |||||
"precisement", "premier", "première", "premièrement", "pres", "probable", | |||||
"probante", "procedant", "proche", "près", "psitt", "pu", "puis", | |||||
"puisque", "pur", "pure", "q", "qu", "quand", "quant", "quant-à-soi", | |||||
"quanta", "quarante", "quatorze", "quatre", "quatre-vingt", "quatrième", | |||||
"quatrièmement", "que", "quel", "quelconque", "quelle", "quelles", | |||||
"quelqu'un", "quelque", "quelques", "quels", "qui", "quiconque", | |||||
"quinze", "quoi", "quoique", "r", "rare", "rarement", "rares", | |||||
"relative", "relativement", "remarquable", "rend", "rendre", "restant", | |||||
"reste", "restent", "restrictif", "retour", "revoici", "revoilà", "rien", | |||||
"s", "sa", "sacrebleu", "sait", "sans", "sapristi", "sauf", "se", "sein", | |||||
"seize", "selon", "semblable", "semblaient", "semble", "semblent", | |||||
"sent", "sept", "septième", "sera", "serai", "seraient", "serais", | |||||
"serait", "seras", "serez", "seriez", "serions", "serons", "seront", | |||||
"ses", "seul", "seule", "seulement", "si", "sien", "sienne", "siennes", | |||||
"siens", "sinon", "six", "sixième", "soi", "soi-même", "soient", "sois", | |||||
"soit", "soixante", "sommes", "son", "sont", "sous", "souvent", "soyez", | |||||
"soyons", "specifique", "specifiques", "speculatif", "stop", | |||||
"strictement", "subtiles", "suffisant", "suffisante", "suffit", "suis", | |||||
"suit", "suivant", "suivante", "suivantes", "suivants", "suivre", | |||||
"sujet", "superpose", "sur", "surtout", "t", "ta", "tac", "tandis", | |||||
"tant", "tardive", "te", "tel", "telle", "tellement", "telles", "tels", | |||||
"tenant", "tend", "tenir", "tente", "tes", "tic", "tien", "tienne", | |||||
"tiennes", "tiens", "toc", "toi", "toi-même", "ton", "touchant", | |||||
"toujours", "tous", "tout", "toute", "toutefois", "toutes", "treize", | |||||
"trente", "tres", "trois", "troisième", "troisièmement", "trop", "très", | |||||
"tsoin", "tsouin", "tu", "té", "u", "un", "une", "unes", "uniformement", | |||||
"unique", "uniques", "uns", "v", "va", "vais", "valeur", "vas", "vers", | |||||
"via", "vif", "vifs", "vingt", "vivat", "vive", "vives", "vlan", "voici", | |||||
"voie", "voient", "voilà", "voire", "vont", "vos", "votre", "vous", | |||||
"vous-mêmes", "vu", "vé", "vôtre", "vôtres", "w", "x", "y", "z", "zut", | |||||
"à", "â", "ça", "ès", "étaient", "étais", "était", "étant", "état", | |||||
"étiez", "étions", "été", "étée", "étées", "étés", "êtes", "être", "ô" | |||||
] | |||||
</script> | |||||
<script type="text/javascript"> | |||||
/* See: | |||||
* https://gomakethings.com/how-to-create-a-search-page-for-a-static-website-with-vanilla-js/ | |||||
* https://gomakethings.com/how-to-update-the-url-of-a-page-without-causing-a-reload-using-vanilla-javascript/ | |||||
*/ | |||||
; | |||||
(function() { | |||||
// Retrieving the search index and stopwords from JSON. | |||||
// See https://v8.dev/blog/cost-of-javascript-2019#json | |||||
let searchIndex = JSON.parse( | |||||
document.getElementById('search-index').textContent | |||||
) | |||||
let stopWords = JSON.parse( | |||||
document.getElementById('search-stop-words').textContent | |||||
) | |||||
// Create a reset handler | |||||
form.addEventListener('reset', function () { | |||||
search('') | |||||
searchStatus.innerHTML = '' | |||||
}) | |||||
// Get the DOM elements | |||||
let form = document.querySelector('#form-search') | |||||
let input = document.querySelector('#input-search') | |||||
let resultList = document.querySelector('#search-results') | |||||
let searchStatus = document.querySelector('#search-status') | |||||
let searchResultTemplate = document.querySelector('#search-result') | |||||
// Check for query strings onload | |||||
onload() | |||||
// Make sure required content exists | |||||
if ( | |||||
!form || | |||||
!input || | |||||
!resultList || | |||||
!searchStatus || | |||||
!searchIndex || | |||||
!stopWords || | |||||
!searchResultTemplate | |||||
) | |||||
return | |||||
/** | |||||
* If there's a query string search term, search it on page load | |||||
*/ | |||||
function onload() { | |||||
let query = new URLSearchParams(window.location.search).get('s') | |||||
if (!query) return | |||||
input.value = query | |||||
search(query) | |||||
} | |||||
// Create a submit handler | |||||
form.addEventListener('submit', function(event) { | |||||
event.preventDefault() | |||||
search(input.value) | |||||
}) | |||||
/** | |||||
* Search for matches | |||||
* @param {String} query The term to search for | |||||
*/ | |||||
function search(query) { | |||||
// Create a regex for each query | |||||
let regMap = query | |||||
.toLowerCase() | |||||
.split(' ') | |||||
.filter(function (word) { | |||||
return word.length && !stopWords.includes(word) | |||||
// Create a typeahead handler | |||||
form.addEventListener('keyup', function(event) { | |||||
search(input.value) | |||||
}) | }) | ||||
.map(function (word) { | |||||
return new RegExp(word, 'i') | |||||
// Create a reset handler | |||||
form.addEventListener('reset', function() { | |||||
search('') | |||||
searchStatus.innerHTML = '' | |||||
}) | }) | ||||
// Get and sort the results | |||||
let results = searchIndex | |||||
.reduce(function (results, article, index) { | |||||
// Setup priority count | |||||
let priority = 0 | |||||
// Check for query strings onload | |||||
onload() | |||||
// Assign priority | |||||
for (let reg of regMap) { | |||||
if (reg.test(article.title)) { | |||||
priority += 100 | |||||
} | |||||
let occurences = article.content.match(reg) | |||||
if (occurences) { | |||||
priority += occurences.length | |||||
} | |||||
} | |||||
/** | |||||
* If there's a query string search term, search it on page load | |||||
*/ | |||||
function onload() { | |||||
let query = new URLSearchParams(window.location.search).get('s') | |||||
if (!query) return | |||||
input.value = query | |||||
search(query) | |||||
} | |||||
// If any matches, push to results | |||||
if (priority > 0) { | |||||
results.push({ | |||||
priority: priority, | |||||
article: article, | |||||
/** | |||||
* Search for matches | |||||
* @param {String} query The term to search for | |||||
*/ | |||||
function search(query) { | |||||
// Create a regex for each query | |||||
let regMap = query | |||||
.toLowerCase() | |||||
.split(' ') | |||||
.filter(function(word) { | |||||
return word.length && !stopWords.includes(word) | |||||
}) | |||||
.map(function(word) { | |||||
return new RegExp(word, 'i') | |||||
}) | }) | ||||
} | |||||
return results | |||||
}, []) | |||||
.sort(function (article1, article2) { | |||||
return article2.priority - article1.priority | |||||
}) | |||||
// Get and sort the results | |||||
let results = searchIndex | |||||
.reduce(function(results, article, index) { | |||||
// Setup priority count | |||||
let priority = 0 | |||||
// Display the results | |||||
showResults(results, regMap) | |||||
// Assign priority | |||||
for (let reg of regMap) { | |||||
if (reg.test(article.title)) { | |||||
priority += 100 | |||||
} | |||||
let occurences = article.content.match(reg) | |||||
if (occurences) { | |||||
priority += occurences.length | |||||
} | |||||
} | |||||
// Update the URL | |||||
updateURL(query) | |||||
} | |||||
// If any matches, push to results | |||||
if (priority > 0) { | |||||
results.push({ | |||||
priority: priority, | |||||
article: article, | |||||
}) | |||||
} | |||||
/** | |||||
* Show the search results in the UI | |||||
* @param {Array} results The results to display | |||||
* @param {List} regMap Regular expressions for the highlights | |||||
*/ | |||||
function showResults(results, regMap) { | |||||
let status = 'Aucune publication n’a été trouvée 😢' | |||||
let searchResults = '' | |||||
if (results.length) { | |||||
const plural = results.length > 1 ? 's' : '' | |||||
status = `${results.length} publication${plural} trouvée${plural} 🙌` | |||||
searchResults = results | |||||
.map(function (result) { | |||||
return interpolate(searchResultTemplate.innerHTML, { | |||||
url: result.article.url, | |||||
title: highlightText(result.article.title, regMap), | |||||
date: result.article.date, | |||||
content: highlightText(result.article.content, regMap), | |||||
return results | |||||
}, []) | |||||
.sort(function(article1, article2) { | |||||
return article2.priority - article1.priority | |||||
}) | }) | ||||
}) | |||||
.join('') | |||||
} | |||||
searchStatus.innerHTML = status | |||||
resultList.innerHTML = searchResults | |||||
} | |||||
/** | |||||
* Get a template from a string | |||||
* https://stackoverflow.com/a/41015840 | |||||
* https://gomakethings.com/html-templates-with-vanilla-javascript/ | |||||
* @param {String} str The string to interpolate | |||||
* @param {Object} params The parameters | |||||
* @return {String} The interpolated string | |||||
*/ | |||||
function interpolate(str, params) { | |||||
let names = Object.keys(params) | |||||
let vals = Object.values(params) | |||||
return new Function(...names, `return \`${str}\``)(...vals) | |||||
} | |||||
// Display the results | |||||
showResults(results, regMap) | |||||
/** | |||||
* Highlight the text in the UI | |||||
* @param {String} text The content to highlight | |||||
* @param {List} regMap Regular expressions for the highlights | |||||
*/ | |||||
function highlightText(text, regMap) { | |||||
// TODO: deal with close matches when multiple words are looked for, | |||||
// it does not look trivial because you have to memorize positions | |||||
// then create extracts. | |||||
// For instance: `microsoft github` | |||||
const extractBoundariesSize = 100 | |||||
const textLength = text.length | |||||
let extracts = [] | |||||
for (let reg of regMap) { | |||||
const index = text.search(reg) | |||||
if (index === -1) { | |||||
continue | |||||
// Update the URL | |||||
updateURL(query) | |||||
} | } | ||||
let extract = text.substring( | |||||
index - extractBoundariesSize, | |||||
index + reg.source.length + extractBoundariesSize | |||||
) | |||||
// TODISCUSS: we replace with the source but in case there is | |||||
// an uppercase letter it will disappear from the extract | |||||
// (is that confusing or closer to what is expected?) | |||||
extract = extract.replace(reg, `<mark>${reg.source}</mark>`) | |||||
const prefixEllipsis = index - extractBoundariesSize >= 0 ? '…' : '' | |||||
const suffixEllipsis = | |||||
index + extractBoundariesSize <= textLength ? '…' : '' | |||||
extracts.push(`${prefixEllipsis}${extract}${suffixEllipsis}`) | |||||
} | |||||
if (!extracts.length && textLength < 200) { | |||||
// If there is no match but it's a short title, return it. | |||||
return text | |||||
} | |||||
return extracts.join('') | |||||
} | |||||
/** | |||||
* Update the URL with a query string for the search string | |||||
* @param {String} query The search query | |||||
*/ | |||||
function updateURL(query) { | |||||
// Create the properties | |||||
let state = history.state | |||||
let title = document.title | |||||
let url = window.location.origin + window.location.pathname | |||||
if (query) { | |||||
url += '?s=' + encodeURI(query) | |||||
} | |||||
/** | |||||
* Show the search results in the UI | |||||
* @param {Array} results The results to display | |||||
* @param {List} regMap Regular expressions for the highlights | |||||
*/ | |||||
function showResults(results, regMap) { | |||||
let status = 'Aucune publication n’a été trouvée 😢' | |||||
let searchResults = '' | |||||
if (results.length) { | |||||
const plural = results.length > 1 ? 's' : '' | |||||
status = `${results.length} publication${plural} trouvée${plural} 🙌` | |||||
searchResults = results | |||||
.map(function(result) { | |||||
return interpolate(searchResultTemplate.innerHTML, { | |||||
url: result.article.url, | |||||
title: highlightText(result.article.title, regMap), | |||||
date: result.article.date, | |||||
content: highlightText(result.article.content, regMap), | |||||
}) | |||||
}) | |||||
.join('') | |||||
} | |||||
searchStatus.innerHTML = status | |||||
resultList.innerHTML = searchResults | |||||
} | |||||
// Update the URL | |||||
history.pushState(state, title, url) | |||||
} | |||||
})() | |||||
/** | |||||
* Get a template from a string | |||||
* https://stackoverflow.com/a/41015840 | |||||
* https://gomakethings.com/html-templates-with-vanilla-javascript/ | |||||
* @param {String} str The string to interpolate | |||||
* @param {Object} params The parameters | |||||
* @return {String} The interpolated string | |||||
*/ | |||||
function interpolate(str, params) { | |||||
let names = Object.keys(params) | |||||
let vals = Object.values(params) | |||||
return new Function(...names, `return \`${str}\``)(...vals) | |||||
} | |||||
</script> | |||||
{% endblock %} | |||||
/** | |||||
* Highlight the text in the UI | |||||
* @param {String} text The content to highlight | |||||
* @param {List} regMap Regular expressions for the highlights | |||||
*/ | |||||
function highlightText(text, regMap) { | |||||
// TODO: deal with close matches when multiple words are looked for, | |||||
// it does not look trivial because you have to memorize positions | |||||
// then create extracts. | |||||
// For instance: `microsoft github` | |||||
const extractBoundariesSize = 100 | |||||
const textLength = text.length | |||||
let extracts = [] | |||||
for (let reg of regMap) { | |||||
const index = text.search(reg) | |||||
if (index === -1) { | |||||
continue | |||||
} | |||||
let extract = text.substring( | |||||
index - extractBoundariesSize, | |||||
index + reg.source.length + extractBoundariesSize | |||||
) | |||||
// TODISCUSS: we replace with the source but in case there is | |||||
// an uppercase letter it will disappear from the extract | |||||
// (is that confusing or closer to what is expected?) | |||||
extract = extract.replace(reg, `<mark>${reg.source}</mark>`) | |||||
const prefixEllipsis = index - extractBoundariesSize >= 0 ? '…' : '' | |||||
const suffixEllipsis = | |||||
index + extractBoundariesSize <= textLength ? '…' : '' | |||||
extracts.push(`${prefixEllipsis}${extract}${suffixEllipsis}`) | |||||
} | |||||
if (!extracts.length && textLength < 200) { | |||||
// If there is no match but it's a short title, return it. | |||||
return text | |||||
} | |||||
return extracts.join('') | |||||
} | |||||
/** | |||||
* Update the URL with a query string for the search string | |||||
* @param {String} query The search query | |||||
*/ | |||||
function updateURL(query) { | |||||
// Create the properties | |||||
let state = history.state | |||||
let title = document.title | |||||
let url = window.location.origin + window.location.pathname | |||||
if (query) { | |||||
url += '?s=' + encodeURI(query) | |||||
} | |||||
// Update the URL | |||||
history.pushState(state, title, url) | |||||
} | |||||
})() | |||||
</script> | |||||
{% endblock %} |
{% block title %}Tag #{{ tag_name }}{% endblock %} | {% block title %}Tag #{{ tag_name }}{% endblock %} | ||||
{% block description %}Publications relatives au tag #{{ tag_name }}{% endblock %} | {% block description %}Publications relatives au tag #{{ tag_name }}{% endblock %} | ||||
{% block extra_head %} | {% block extra_head %} | ||||
<style type="text/css"> | |||||
details[open] summary { | |||||
display: none; | |||||
} | |||||
</style> | |||||
<style type="text/css"> | |||||
details[open] summary { | |||||
display: none; | |||||
} | |||||
</style> | |||||
{% endblock %} | {% endblock %} | ||||
{% block content %} | {% block content %} | ||||
<header> | |||||
<h1>Publications relatives au tag #{{ tag_name }}</h1> | |||||
</header> | |||||
<nav> | |||||
<p class="center"> | |||||
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use> | |||||
</svg> Accueil</a> | |||||
• <a rel="tags" href="/david/#tags-2023" title="Liste de toutes les étiquettes"><svg class="icon icon-tags"> | |||||
<header> | |||||
<h1>Publications relatives au tag #{{ tag_name }}</h1> | |||||
</header> | |||||
<nav> | |||||
<p class="center"> | |||||
<a href="/david/" title="Aller à l’accueil"> | |||||
<svg class="icon icon-home"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use> | |||||
</svg> | |||||
Accueil</a> | |||||
• <a rel="tags" | |||||
href="/david/#tags-2023" | |||||
title="Liste de toutes les étiquettes"> | |||||
<svg class="icon icon-tags"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-tags"></use> | <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-tags"></use> | ||||
</svg> Étiquettes</a> | |||||
</svg> | |||||
Étiquettes</a> | |||||
</p> | </p> | ||||
</nav> | </nav> | ||||
<hr> | <hr> | ||||
<main> | <main> | ||||
<p>Les plus récentes en premier, les 3 premières sont dépliées et ensuite c’est à la demande, bonne exploration !</p> | <p>Les plus récentes en premier, les 3 premières sont dépliées et ensuite c’est à la demande, bonne exploration !</p> | ||||
{% for page in page_list %} | {% for page in page_list %} | ||||
<h2><a href="{{ page.url }}" title="Lien permanent vers cet article">{{ page.title }}</a> ({{ page.date }})</h2> | |||||
<h2> | |||||
<a href="{{ page.url }}" title="Lien permanent vers cet article">{{ page.title }}</a> ({{ page.date }}) | |||||
</h2> | |||||
{% if loop.index <= 3 %} | {% if loop.index <= 3 %} | ||||
{{ page.content }} | {{ page.content }} | ||||
{% else %} | {% else %} | ||||
{{ page.content }} | {{ page.content }} | ||||
</details> | </details> | ||||
{% endif %} | {% endif %} | ||||
{% endfor %} | {% endfor %} | ||||
</main> | </main> | ||||
{% endblock content %} | {% endblock content %} |
[tool.djlint] | [tool.djlint] | ||||
profile="jinja" | profile="jinja" | ||||
files=["david/templates"] | |||||
files=[ | |||||
"david/templates/article_2020.html", | |||||
"david/templates/blogroll.html", | |||||
"david/templates/base_2020.html", | |||||
"david/templates/profil.html", | |||||
"david/templates/recherche.html", | |||||
"david/templates/tag_2021.html" | |||||
] | |||||
indent=2 | indent=2 | ||||
ignore="H031" | ignore="H031" | ||||
format_css=true | format_css=true |