premier commit

This commit is contained in:
Thierry Fenasse 2024-03-13 18:00:24 +01:00
parent 9b7a4c0714
commit 5a05f8c50d
Signed by: tfenasse
GPG Key ID: 56BF2A3A07DDEB1F
20 changed files with 6722 additions and 1 deletions

View File

@ -1,3 +1,7 @@
# didactique
Un thème didactique pour Pelican.
Un thème didactique pour Pelican.
Il se repose sur le thème `simple` pour les fichier `.html` qui manqueraient.
… la suite un de ces jours.

2733
static/css/fork-awesome.css Normal file

File diff suppressed because it is too large Load Diff

78
static/css/highlight.css Normal file
View File

@ -0,0 +1,78 @@
/* Fichier généré avec pygmentize
*
* pygmentize -S default -f html -a .highlight > highlight.css
*/
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #9C6500 } /* Comment.Preproc */
.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #E40000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #008400 } /* Generic.Inserted */
.highlight .go { color: #717171 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #687822 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #767600 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */

414
static/css/latest.css Normal file
View File

@ -0,0 +1,414 @@
/* Couleurs
Pour éviter de chercher dans le code les couleurs utilisées
sont sous forme de variables CSS.
Si aucune couleur n'est définie, tout le site sera en noir&blanc.
*/
/* Europe
:root {
--fond: white;
--primaire: #039;
--liens: rgb(18, 116, 207);
--deco: #FC0;
}
*/
/* Belgique
:root {
--fond: black;
--primaire: white;
--liens: gold;
--deco: red;
}
*/
/* compuThings inversé
:root {
--fond: #222;
--primaire: #EEE;
--liens: #96D321;
--deco: #fe1976;
}
*/
/* compuThings
*/
:root {
--fond: #EEE;
--primaire: #222;
--liens: #fe1976;
--deco: #96D321;
}
/* Expériences
*/
/* Pour « toute » la page.
*/
body {
margin: 0;
font-family: sans-serif;
background-color: var(--fond);
color: var(--primaire);
}
a {
text-decoration: none;
color: var(--liens);
}
img {
max-width: 90vw;
display: block;
}
.hidden {
visibility: hidden;
}
.red {
color: red;
}
/* pour les images en Markdown.
* En markdown : ![alt](path/file.png#class "titre")
* Sauf si leur nom est trop similaire, plusieurs classes peuvent se succéder.
* ex qui ne fonctionnerait pas : #small et #smaller
* ex en markown: ![alt](path/file.png#verysmall#right "titre")
*/
img[src*="#left"] {
float: left;
padding-right: 1em;
}
img[src*="#right"] {
float: right;
padding-left: 1em;
}
img[src*="#center"] {
margin: auto;
}
img[src*="#verysmall"] {
max-width: 10vw;
}
img[src*="#small"] {
max-width: 30vw;
}
img[src*="#medium"] {
max-width: 60vw;
}
img[src*="#round"] {
border-radius: 50%;
}
/* Pour la balise header.
* Elle est utilisée une seule fois sur la page.
* Pour y afficher les deux menus, le principal et le social.
*/
header {
background-color: var(--primaire);
color: var(--fond);
position: -webkit-sticky; /* Safari */
position: sticky;
top: 0;
display: flex;
justify-content: space-between;
}
header a {
color: var(--fond);
padding: .5em;
display: inline-block;
}
header a::first-letter {
color: var(--deco);
}
header a:hover{
background: var(--liens);
}
header a:hover::first-letter{
color: unset;
}
header a.current {
text-decoration: underline .2em;
text-decoration-color: var(--liens);
}
header a.current::first-letter{
color: unset;
}
.social {
background-color: var(--deco);
}
.social a:hover {
color: var(--fond);
}
/* Contenu principal
*/
main {
margin-left: 2em;
margin-right: 2em;
}
main a:hover {
text-decoration: underline;
text-decoration-color: var(--deco);
color: unset;
}
.pagination {
display: flex;
align-items: center;
justify-content: center;
position: sticky;
top:auto;
}
.pagination p {
margin: .5em;
}
.pagination a:hover {
color: var(--primaire);
}
.pagination a {
padding-left: 2em;
padding-right: 3em;
font-size: 1.5em;
}
/* Le tire et des infos
*/
hgroup h1 {
margin-bottom: 0em;
line-height: 1.2em;
}
hgroup p{
margin-top: 0em;
color: color-mix(in srgb, var(--primaire), transparent);
}
hgroup a {
color: color-mix(in srgb, var(--liens) 70%, transparent);
}
/* un article ou une page
*/
article p {
padding-left: 1em;
line-height: 1.5em;
}
article footer {
text-align: center;
font-size: smaller;
}
article blockquote {
border-left-style: dotted;
border-left-color: gray;
margin: 1em;
}
/* tires coquets
*/
article h1 {
font-size: xx-large;
}
article h2::after {
content: " ··";
color: var(--deco);
}
article h3::after {
content: " ···";
color: var(--deco);
}
article h4::after {
content: " ··· ·";
color: var(--deco);
}
article h5::after {
content: " ··· ··";
color: var(--deco);
}
article h6::after {
content: " ··· ···";
color: var(--deco);
}
/* listes
*/
li {
line-height: 1.8em;
}
ul li {
/* pour écarter les fa-icons du texte
*/
padding-left: .5em;
}
ul li::marker {
content: "ɷ";
color: var(--deco);
}
li>ul {
padding-left: .7em;
}
li>ul li::marker {
color: color-mix(in srgb, var(--primaire) 60%, transparent);
}
/* tables
*/
table {
margin-left: auto;
margin-right: auto;
}
th {
border-bottom: solid var(--deco) 1px;
}
tr:nth-child(even) {
/*background-color: var(--secondaire);*/
background-color: color-mix(in srgb, var(--primaire) 20%, var(--fond));
}
/* coloration du code (highlight)
* voir aussi highlight.css
*/
.highlight {
margin-left: 2em;
width: auto;
height: auto;
overflow: auto;
}
.highlighttable {
/* Sinon le code avec numérotation des lignes
* se retrouve centré parcequ'il est fait avec une table.
*/
margin-left: unset;
margin-right: unset;
}
/* notes en bas de page
*/
.footnote hr {
color: var(--fond);
}
.footnote p {
font-size: 1em;
line-height: 1em;
}
/* Pied de page
*/
footer {
text-align: center;
font-size: smaller;
border-top: .1em dashed color-mix(in srgb, var(--primaire), transparent);;
padding: .5em;
}
footer a {
text-decoration: none;
}
footer a:hover {
color: var(--deco);
}
/* Pour ne pas imprimer le menu.
*/
@media print {
header
{
display: none !important;
}
}
/* Pour un minimum de responsivenessitude
*/
@media screen and (max-width: 800px) {
img {
min-width: 30vw;
}
header {
position: unset;
top: unset;
}
nav:last-child {
width: min-content;
}
main {
margin-left: unset;
margin-right: unset;
}
hgroup, article, article>div.highlight, blockquote, table {
margin-left: .5em;
margin-right: .5em;
}
ul {
padding-left: 1em;
}
hgroup {
border-bottom: dashed var(--deco) 10px;
border-width: 50%;
}
footer {
color: var(--fond);
background-color: var(--primaire);
border-top: unset;
}
footer a {
color: var(--deco);
}
.pagination p {
margin: 0em;
}
.pagination a {
padding-left: 1.5em;
padding-right: 1.5em;
font-size: 1em;
}
}

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 547 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
static/img/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

50
templates/article.html Normal file
View File

@ -0,0 +1,50 @@
{# article sert aux pages ET aux articles #}
{% extends "base.html" %}
{% block title %}{{ SITENAME|striptags }} - {{ article.title|striptags }}{% endblock %}
{% block head %}
{{ super() }}
{% if article.description %}
<meta name="description" content="{{article.subtitle}} {{article.description}}" />
{% endif %}
{% for tag in article.tags %}
<meta name="tags" content="{{tag}}" />
{% endfor %}
{% endblock %}
{% block content %}
<article>
<hgroup>
<h1>
{{ article.title }}
</h1>
<p>
{% if article.modified %}
Modifié le <time datetime="{{ article.modified.isoformat() }}">{{ article.modified|strftime('%A %d %B %Y') }}</time>
{% else %}
Publié le <time datetime="{{ article.date.isoformat() }}">{{ article.date|strftime('%A %d %B %Y') }}</time>
{% endif %}
{% if DISPLAY_AUTHORS %}
{% if article.authors %}
par
{% for author in article.authors %}
<a href="{{ SITEURL }}/{{ author.url }}">{{ author }}</a>{% if loop.last %} {% else %},{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{% if article.category %}
dans la catégorie <a href="{{ SITEURL }}/{{ article.category.url }}">{{ article.category }} </a>
{% endif %}
{% if article.tags %}
avec le(s) mot(s) clé(s)
{% for tag in article.tags %}
<a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a>{% if loop.last %}.{% else %},{% endif %}
{% endfor %}
{% endif %}
</p>
</hgroup>
{{ article.content }}
</article>
{% endblock %}

2
templates/author.html Normal file
View File

@ -0,0 +1,2 @@
{% extends "listing.html" %}
{% block title %}{{ SITENAME|striptags }} - Articles de {{ author }} {% endblock %}

98
templates/base.html Normal file
View File

@ -0,0 +1,98 @@
<!DOCTYPE html>
<html lang="{% block html_lang %}{{ DEFAULT_LANG }}{% endblock html_lang %}">
<head>
{% block head %}
<title>{% block title %}{{ SITENAME|striptags }}{% endblock title %}</title>
<meta charset="utf-8" />
<meta name="generator" content="Pelican" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{% if FEED_ALL_ATOM %}
<link href="{{ FEED_DOMAIN }}/{% if FEED_ALL_ATOM_URL %}{{ FEED_ALL_ATOM_URL }}{% else %}{{ FEED_ALL_ATOM }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ SITENAME|striptags }} Full Atom Feed" />
{% endif %}
{% if FEED_ALL_RSS %}
<link href="{{ FEED_DOMAIN }}/{% if FEED_ALL_RSS_URL %}{{ FEED_ALL_RSS_URL }}{% else %}{{ FEED_ALL_RSS }}{% endif %}" type="application/rss+xml" rel="alternate" title="{{ SITENAME|striptags }} Full RSS Feed" />
{% endif %}
{% if FEED_ATOM %}
<link href="{{ FEED_DOMAIN }}/{%if FEED_ATOM_URL %}{{ FEED_ATOM_URL }}{% else %}{{ FEED_ATOM }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ SITENAME|striptags }} Atom Feed" />
{% endif %}
{% if FEED_RSS %}
<link href="{{ FEED_DOMAIN }}/{% if FEED_RSS_URL %}{{ FEED_RSS_URL }}{% else %}{{ FEED_RSS }}{% endif %}" type="application/rss+xml" rel="alternate" title="{{ SITENAME|striptags }} RSS Feed" />
{% endif %}
{% if CATEGORY_FEED_ATOM and category %}
<link href="{{ FEED_DOMAIN }}/{% if CATEGORY_FEED_ATOM_URL %}{{ CATEGORY_FEED_ATOM_URL.format(slug=category.slug) }}{% else %}{{ CATEGORY_FEED_ATOM.format(slug=category.slug) }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ SITENAME|striptags }} Categories Atom Feed" />
{% endif %}
{% if CATEGORY_FEED_RSS and category %}
<link href="{{ FEED_DOMAIN }}/{% if CATEGORY_FEED_RSS_URL %}{{ CATEGORY_FEED_RSS_URL.format(slug=category.slug) }}{% else %}{{ CATEGORY_FEED_RSS.format(slug=category.slug) }}{% endif %}" type="application/rss+xml" rel="alternate" title="{{ SITENAME|striptags }} Categories RSS Feed" />
{% endif %}
{% if TAG_FEED_ATOM and tag %}
<link href="{{ FEED_DOMAIN }}/{% if TAG_FEED_ATOM_URL %}{{ TAG_FEED_ATOM_URL.format(slug=tag.slug) }}{% else %}{{ TAG_FEED_ATOM.format(slug=tag.slug) }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ SITENAME|striptags }} Tags Atom Feed" />
{% endif %}
{% if TAG_FEED_RSS and tag %}
<link href="{{ FEED_DOMAIN }}/{% if TAG_FEED_RSS_URL %}{{ TAG_FEED_RSS_URL.format(slug=tag.slug) }}{% else %}{{ TAG_FEED_RSS.format(slug=tag.slug) }}{% endif %}" type="application/rss+xml" rel="alternate" title="{{ SITENAME|striptags }} Tags RSS Feed" />
{% endif %}
<link rel="stylesheet" href="{% if SITEURL %}{{ SITEURL }}{% endif %}/theme/css/fork-awesome.css">
<link rel="stylesheet" href="{% if SITEURL %}{{ SITEURL }}{% endif %}/theme/css/highlight.css">
<link rel="stylesheet" href="{% if SITEURL %}{{ SITEURL }}{% endif %}/theme/css/latest.css">
<link rel="icon" type="image/png" href="{% if SITEURL %}{{ SITEURL }}{% endif %}/theme/img/favicon.png" />
{%- endblock head %}
</head>
<body>
<header>
{% block nav %}
<nav>
{% if DISPLAY_PAGES_ON_MENU %}
{% for p in pages %}
{% if loop.first %}
<a href="{{ SITEURL }}/"{% if p==page %} aria-current="page" class="current"{% endif %}>{{ p.title }}</a>
{% else %}
<a href="{{ SITEURL }}/{{ p.url }}"{% if p==page %} aria-current="page" class="current"{% endif %}>{{ p.title }}</a>
{% endif %}
{% endfor %}
{% endif %}
{% if DISPLAY_CATEGORIES_ON_MENU %} |
{% for cat, null in categories %}
{% if cat!="author" %}
<a href="{{ SITEURL }}/{{ cat.url }}"{% if cat==category %} aria-current="page" class="current"{% endif %}>{{ cat}}</a>
{% endif %}
{% endfor %}
{% if DISPLAY_LINKS_ON_MENU %} |
{% for title, link in LINKS %}
<a href="{{ link }}">{{ title }}</a>
{% endfor %}
{% endif %}
{% endif %}
</nav>
{% if SOCIAL %}
<nav class="social">
{% for text, link, icon in SOCIAL %}
<a href="{{ link }}" title="{{ text }}"><i class="fa {{ icon }}"></i></a>
{% endfor %}
{% if CATEGORY_FEED_ATOM and category %}
<a href="{{ FEED_DOMAIN }}/{% if CATEGORY_FEED_ATOM_URL %}{{ CATEGORY_FEED_ATOM_URL.format(slug=category.slug) }}{% else %}{{ CATEGORY_FEED_ATOM.format(slug=category.slug) }}{% endif %}" title="Flux pour {{ category }}" target="_blank"><i class="fa fa-rss"></i></a>
{% endif %}
{% if TAG_FEED_ATOM and tag %}
<a href="{{ FEED_DOMAIN }}/{% if TAG_FEED_ATOM_URL %}{{ TAG_FEED_ATOM_URL.format(slug=tag.slug) }}{% else %}{{ TAG_FEED_ATOM.format(slug=tag.slug) }}{% endif %}" type="application/atom+xml" title="Flux pour {{ tag }}" target="_blank"><i class="fa fa-rss"></i></a>
{% endif %}
</nav>
{% endif %}
{% endblock %}
</header>
{% block pagination %}
{% endblock %}
<main>
{% block content %}
{% endblock %}
</main>
<footer>
{% include "footer.html" %}
</footer>
</body>
</html>

11
templates/categories.html Normal file
View File

@ -0,0 +1,11 @@
{% extends "base.html" %}
{% block title %}{{ SITENAME|striptags }} - Categories{% endblock %}
{% block content %}
<h2>Toutes les catégories sur {{ SITENAME }}</h2>
<ul>
{% for category, articles in categories|sort %}
<li><a href="{{ SITEURL }}/{{ category.url }}">{{ category }}</a> ({{ articles|count }})</li>
{% endfor %}
</ul>
{% endblock %}

2
templates/category.html Normal file
View File

@ -0,0 +1,2 @@
{% extends "listing.html" %}
{% block title %}{{ SITENAME|striptags }} - {{ category }} (Catégorie){% endblock %}

26
templates/footer.html Normal file
View File

@ -0,0 +1,26 @@
<a href="{{ SITEURL }}/">{{ SITENAME }}</a>{% if SITESUBTITLE %} ({{ SITESUBTITLE }}){%- endif %}.
{%- if DISPLAY_LEGAL %}
{%- if LEGAL_LICENCE %}
<a target="_blank" rel="license" href="{{ LEGAL_LICENCE_URL }}">{{ LEGAL_LICENCE }}</a>
{%- endif %}
{%- if LEGAL_NAME %}
{{ LEGAL_NAME}}
{%- endif %}
{% if LEGAL_ID %}
, <a href="{{ LEGAL_URL }}" target="_blank">{{ LEGAL_ID }}</a>.
{%- endif %}
{%- endif %}
{%- if DISPLAY_INFO %}
{%- if INFO_ENGINE_NAME %}
Générateur: <a target="_blank" href="{{ INFO_ENGINE_URL }}">{{ INFO_ENGINE_NAME }}</a>
{%- endif %}
{%- if INFO_THEME_NAME %}
, thème: <a href="{{ INFO_THEME_URL }}" target="_blank">{{ INFO_THEME_NAME }}</a>
{%- endif %}
{%- if INFO_HOSTING_NAME %}
et auto-hébergé avec <a href="{{ INFO_HOSTING_URL }}">{{ INFO_HOSTING_NAME }}</a>
{%- endif %}
.
{%- endif %}

45
templates/listing.html Normal file
View File

@ -0,0 +1,45 @@
{% extends "base.html" %}
{% block content %}
{% for article in articles_page.object_list %}
<article>
<h1>
{{ article.title }}
</h1>
<p>
{{ article.subtitle }}<br/>
{{ article.description }} <br/>
<a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permalink to {{ article.title|striptags }}">Lire la suite…</a>
</p>
</article>
{% endfor %}
{% endblock content %}
{% if articles_page.has_other_pages() %}
{% if DEFAULT_PAGINATION %}
{% block pagination %}
{% set first_page = articles_paginator.page(1) %}
{% set last_page = articles_paginator.page(articles_paginator.num_pages) %}
{% if articles_paginator.num_pages >1 %}
<nav class="pagination">
<a href="{{ SITEURL }}/{{ first_page.url }}"
{%- if articles_page.has_previous() %}
{%- else %}class="hidden"{% endif %}>
<i class="fa fa-angle-double-left"></i></a>
<a href="{{ SITEURL }}/{{ articles_previous_page.url }}"
{%- if articles_page.has_previous() %}
{%- else %}class="hidden"{% endif %}>
<i class="fa fa-angle-left"></i></a>
<p><strong>{{ category }}{{ tag }}</strong> | {{ articles_page.number }} de {{ articles_paginator.num_pages }}</p>
<a href="{{ SITEURL }}/{{ articles_next_page.url }}"
{%- if articles_page.has_next() %}
{%- else %}class="hidden"{% endif %}>
<i class="fa fa-angle-right"></i></a>
<a href="{{ SITEURL }}/{{ last_page.url }}"
{%- if articles_page.has_next() %}
{%- else %}class="hidden"{% endif %}>
<i class="fa fa-angle-double-right"></i></a>
</nav>
{% endif %}
{% endblock %}
{% endif %}
{% endif %}

13
templates/page.html Normal file
View File

@ -0,0 +1,13 @@
{% extends "base.html" %}
{% block title %}{{ SITENAME|striptags }} - {{ page.title|striptags }}{%endblock%}
{% block head %}
{{ super() }}
<meta name="description" content="{{ page.subtitle }} {{ page.description }}">
{% endblock %}
{% block content %}
<article>
{{ page.content }}
</article>
{% endblock %}

2
templates/tag.html Normal file
View File

@ -0,0 +1,2 @@
{% extends "listing.html" %}
{% block title %}{{ SITENAME|striptags }} - {{ tag }} (Mot clé){% endblock %}

11
templates/tags.html Normal file
View File

@ -0,0 +1,11 @@
{% extends "base.html" %}
{% block title %}{{ SITENAME|striptags }} - Mots clés{% endblock %}
{% block content %}
<h2>Tous les mots clés <em>(tags)</em> sur {{ SITENAME }}</h2>
<ul>
{% for tag, articles in tags|sort %}
<li><a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a> ({{ articles|count }})</li>
{% endfor %}
</ul>
{% endblock %}