crieur 2.0.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,44 @@
1
+ {% extends "base.html" %}
2
+
3
+ {% block content %}
4
+ <div class="aside">
5
+ <hgroup>
6
+ <h2>{{ article.title_f|typography }}</h2>
7
+ <div>
8
+ <p>{{ article.subtitle_f|typography }}</p>
9
+ <p class="muted">
10
+ {% if article.authors %}
11
+ {% for author in article.authors %}
12
+ <h4><em><a href="{{ base_url }}auteur/{{ author.slug }}/">{{ author.forname }} {{ author.surname }}</a></em></h4>
13
+ {% endfor %}
14
+ {% endif %}
15
+ </p>
16
+ <br>
17
+ <p class="muted">
18
+ <small>
19
+ <a href="{{ base_url }}blog/#date-{{ article.date }}">{{ article.date.strftime('%d %B %Y') }}</a>
20
+ <small class="muted" aria-hidden="true"> ⁙ </small>
21
+ <a href="{{ base_url }}numero/{{ article.numero.slug }}/">{{ article.numero.title_f }}</a>
22
+ {% if article.keywords %}
23
+ <small class="muted" aria-hidden="true"> ⁙ </small>
24
+ {% for keyword in article.keywords %}
25
+ <a href="{{ base_url }}mot-clef/{{ keyword.slug }}/">#{{ keyword.name }}</a>{%- if not loop.last -%}, {% endif %}
26
+ {% endfor %}
27
+ {% endif %}
28
+ </small>
29
+ </p>
30
+ </div>
31
+ </hgroup>
32
+ <div class="article-body">
33
+ {% if article.abstract_fr %}
34
+ <div class="article-abstract">{{ article.abstract_fr|typography|markdown }}</div>
35
+ {% else %}
36
+ {% if article.abstract_en %}
37
+ <div class="article-abstract" lang="en">{{ article.abstract_en|markdown }}</div>
38
+ {% endif %}
39
+ {% endif %}
40
+
41
+ {{ article.content_html }}
42
+ </div>
43
+ </div>
44
+ {% endblock content %}
@@ -0,0 +1,52 @@
1
+ {% extends "base.html" %}
2
+
3
+ {% block content %}
4
+ <h2 class="centered"><span class="muted">Auteur·ice :</span> {{ author }}</h2>
5
+ <blockquote>
6
+ {{ author.biography|markdown }}
7
+ </blockquote>
8
+ {% for article in author.articles %}
9
+ <div class="aside">
10
+ <hgroup>
11
+ <h3><a href="{{ base_url }}{{ article.url }}">{{ article.title_f }}</a></h3>
12
+ <div>
13
+ <p>{{ article.subtitle_f }}</p>
14
+ <p class="muted">
15
+ {% if article.authors %}
16
+ {% for author in article.authors %}
17
+ <h4><em><a href="{{ base_url }}auteur/{{ author.slug }}/">{{ author.forname }} {{ author.surname }}</a></em></h4>
18
+ {% endfor %}
19
+ {% endif %}
20
+ </p>
21
+ <br>
22
+ <p class="muted">
23
+ <small>
24
+ <a href="{{ base_url }}blog/#date-{{ article.date }}">{{ article.date.strftime('%d %B %Y') }}</a>
25
+ <small class="muted" aria-hidden="true"> ⁙ </small>
26
+ <a href="{{ base_url }}numero/{{ article.numero.slug }}/">{{ article.numero.title_f }}</a>
27
+ {% if article.keywords %}
28
+ <small class="muted" aria-hidden="true"> ⁙ </small>
29
+ {% for keyword in article.keywords %}
30
+ <a href="{{ base_url }}mot-clef/{{ keyword.slug }}/">#{{ keyword.name }}</a>{%- if not loop.last -%}, {% endif %}
31
+ {% endfor %}
32
+ {% endif %}
33
+ </small>
34
+ </p>
35
+ </div>
36
+ </hgroup>
37
+ <div class="article-body">
38
+ {% if article.abstract_fr %}
39
+ <div class="article-abstract">{{ article.abstract_fr|markdown }}</div>
40
+ {% else %}
41
+ {% if article.abstract_en %}
42
+ <div class="article-abstract" lang="en">{{ article.abstract_en|markdown }}</div>
43
+ {% endif %}
44
+ {% endif %}
45
+
46
+ <div class="article-nav">
47
+ <a href="{{ base_url }}{{ article.url }}" role="button" class="secondary">Lire l’article</a>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ {% endfor %}
52
+ {% endblock content %}
@@ -0,0 +1,21 @@
1
+ {% extends "base.html" %}
2
+
3
+ {% block content %}
4
+ {% for slug, author in authors.items() %}
5
+ <div class="aside">
6
+ <hgroup>
7
+ <h2><a href="{{ base_url }}auteur/{{ author.slug }}/">{{ author }}</a></h2>
8
+ <p><small>{{ author.articles|length }} article{{ author.articles|length|pluralize }}</small></p>
9
+ </hgroup>
10
+ <ul>
11
+ {% for article in author.articles %}
12
+ <li>
13
+ <a href="{{ base_url }}{{ article.url }}">{{ article.title_f }}</a>
14
+ dans <em>{{ article.numero.title_f }}</em>
15
+ <nobr><span class="muted"><small>({{ article.date.strftime('%d %B %Y') }})</small></span></nobr>
16
+ </li>
17
+ {% endfor %}
18
+ </ul>
19
+ </div>
20
+ {% endfor %}
21
+ {% endblock content %}
@@ -0,0 +1,307 @@
1
+ <!DOCTYPE html><!-- This is a valid HTML5 document. -->
2
+ <!-- Screen readers, SEO, extensions and so on. -->
3
+ <html lang="fr">
4
+ <!-- Has to be within the first 1024 bytes, hence before the <title>
5
+ See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
6
+ <meta charset="utf-8" />
7
+ <meta name="generator" content="Crieur {{ crieur_version }}">
8
+ <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
9
+ <!-- The viewport meta is quite crowded and we are responsible for that.
10
+ See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
11
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
12
+ <!-- Prevent access via referrers, only the domain will be available. -->
13
+ <meta content="origin-when-cross-origin" name="referrer" />
14
+ <!-- Required to make a valid HTML5 document. -->
15
+ <title>{{ title }}</title>
16
+ <!-- Lightest blank gif, avoids an extra query to the server. -->
17
+ <link rel="icon" href="data:;base64,iVBORw0KGgo=" />
18
+ <link rel="stylesheet"
19
+ href="{{ base_url }}statics/pico.css" />
20
+ <link rel="stylesheet"
21
+ href="{{ base_url }}statics/font_caslon_pro.css" />
22
+ <link rel="stylesheet"
23
+ href="{{ base_url }}statics/font_noto_sans.css" />
24
+ <link rel="alternate" type="application/atom+xml"
25
+ title="Feed" href="{{ base_url }}feed.xml">
26
+ <style>
27
+ :root {
28
+ --pico-font-family: "noto_sansregular";
29
+ --pico-spacing: 0.25rem;
30
+ }
31
+ em, i {
32
+ font-family: "noto_sansitalic";
33
+ font-style: normal;
34
+ }
35
+ strong, b {
36
+ font-family: "noto_sansbold";
37
+ font-weight: normal;
38
+ }
39
+ h1, h3, h4, h5, h6 {
40
+ font-family: "adobe_caslon_probold_italic";
41
+ font-weight: normal;
42
+ font-style: normal;
43
+ }
44
+ h2 {
45
+ font-family: "adobe_caslon_prosemibold";
46
+ font-weight: normal;
47
+ font-style: normal;
48
+ }
49
+ h3 em, h3 i,
50
+ h4 em, h4 i,
51
+ h5 em, h5 i,
52
+ h6 em, h6 i,
53
+ nav {
54
+ font-family: "adobe_caslon_proregular";
55
+ font-weight: normal;
56
+ font-style: normal;
57
+ }
58
+ header:has(h1) {
59
+ display: flex;
60
+ align-items: center;
61
+ text-align: center;
62
+ margin: calc(var(--pico-block-spacing-vertical) * 10) auto calc(var(--pico-block-spacing-vertical) * 2) auto;
63
+ max-width: 40rem;
64
+ }
65
+ header:has(h1):before,
66
+ header:has(h1):after {
67
+ content: '';
68
+ flex: 1;
69
+ height: var(--pico-border-width);
70
+ background-color: var(--pico-muted-border-color);
71
+ margin: 0 var(--pico-block-spacing-horizontal);
72
+ }
73
+ h1 {
74
+ margin: 0;
75
+ }
76
+ h1 a {
77
+ color: var(--pico-contrast);
78
+ text-decoration: none;
79
+ }
80
+ h1 a:hover {
81
+ text-decoration: underline;
82
+ }
83
+ dt {
84
+ font-weight: bold;
85
+ }
86
+ nav li a[aria-current] {
87
+ text-decoration: underline;
88
+ text-decoration-thickness: 2px;
89
+ }
90
+ nav.header,
91
+ nav.footer {
92
+ text-align: center;
93
+ border-bottom-style: double;
94
+ border-bottom-color: var(--pico-muted-border-color);
95
+ max-width: 48rem;
96
+ margin: 0 auto calc(var(--pico-block-spacing-vertical) * 6) auto;
97
+ justify-content: center;
98
+ }
99
+ nav.footer {
100
+ margin: calc(var(--pico-block-spacing-vertical) * 6) auto calc(var(--pico-block-spacing-vertical) * 4) auto;
101
+ border-bottom: none;
102
+ border-top-style: double;
103
+ border-top-color: var(--pico-muted-border-color);
104
+ padding-top: var(--pico-block-spacing-vertical);
105
+ }
106
+ nav li {
107
+ padding: 0 var(--pico-nav-element-spacing-horizontal);
108
+ }
109
+ footer nav ul {
110
+ margin: 0 auto !important;
111
+ text-align: center;
112
+ }
113
+ .centered {
114
+ text-align: center;
115
+ }
116
+ .muted {
117
+ color: var(--pico-muted-color) !important;
118
+ }
119
+ .border-muted {
120
+ color: var(--pico-muted-border-color);
121
+ }
122
+
123
+ .aside {
124
+ display: flex;
125
+ flex-direction: column;
126
+ margin-top: calc(var(--pico-block-spacing-vertical) * 10);
127
+ padding-bottom: calc(var(--pico-block-spacing-vertical) * 5);
128
+ }
129
+ .aside:not(:last-child) {
130
+ border-bottom-style: double;
131
+ border-bottom-color: var(--pico-muted-border-color);
132
+ }
133
+ .aside h2,
134
+ .aside hgroup {
135
+ padding-right: calc(var(--pico-block-spacing-horizontal) * 4);
136
+ }
137
+ .aside hgroup {
138
+ text-align: right;
139
+ }
140
+ .aside h2 a,
141
+ .aside h3 a {
142
+ color: var(--pico-contrast);
143
+ }
144
+ .aside ul {
145
+ border-left: var(--pico-border-width) solid var(--pico-muted-border-color);
146
+ }
147
+ @media (min-width: 768px) {
148
+ .aside {
149
+ flex-direction: row;
150
+ }
151
+ .aside h2,
152
+ .aside hgroup {
153
+ width: 15rem;
154
+ flex-shrink: 0;
155
+ }
156
+ }
157
+ @media (min-width: 992px) {
158
+ .aside h2,
159
+ .aside hgroup {
160
+ width: 20rem;
161
+ }
162
+ }
163
+
164
+ :root {
165
+ /* Grid adjustments, see
166
+ https://css-tricks.com/an-auto-filling-css-grid-with-max-columns/
167
+ */
168
+ /**
169
+ * User input values.
170
+ */
171
+ --grid-layout-gap: 10px;
172
+ --grid-column-count: 1;
173
+ --grid-item--min-width: 100px;
174
+
175
+ /**
176
+ * Calculated values.
177
+ */
178
+ --gap-count: calc(var(--grid-column-count) - 1);
179
+ --total-gap-width: calc(var(--gap-count) * var(--grid-layout-gap));
180
+ --grid-item--max-width: calc((100% - var(--total-gap-width)) / var(--grid-column-count));
181
+ }
182
+
183
+ @media (min-width: 576px) {
184
+ :root {
185
+ --grid-column-count: 1;
186
+ }
187
+ }
188
+
189
+ @media (min-width: 768px) {
190
+ :root {
191
+ --grid-column-count: 2;
192
+ }
193
+ }
194
+
195
+ .content {
196
+ width: 100%;
197
+ }
198
+
199
+ .grid {
200
+ grid-template-columns: repeat(auto-fill, minmax(max(var(--grid-item--min-width), var(--grid-item--max-width)), 1fr));
201
+ grid-gap: var(--grid-layout-gap);
202
+ }
203
+
204
+ .grid article header {
205
+ text-align: center;
206
+ }
207
+
208
+ .grid h2, .grid h3 {
209
+ margin-bottom: 0;
210
+ margin-top: var(--pico-typography-spacing-vertical);
211
+ }
212
+ .grid ul.by-2 {
213
+ columns: 2;
214
+ }
215
+ .grid hgroup {
216
+ margin-bottom: 0;
217
+ }
218
+
219
+ .article-content {
220
+ min-height: 15rem;
221
+ padding: var(--pico-nav-element-spacing-vertical) var(--pico-nav-element-spacing-horizontal);
222
+ }
223
+ .article-body {
224
+ border-left: var(--pico-border-width) solid var(--pico-muted-border-color);
225
+ padding-left: calc(var(--pico-nav-element-spacing-horizontal) * 2);
226
+ flex-grow: 1;
227
+ }
228
+ .article-body h2 {
229
+ width: initial;
230
+ }
231
+ .article-body figure {
232
+ margin: calc(var(--pico-nav-element-spacing-vertical) * 2) calc(var(--pico-nav-element-spacing-horizontal) * 2);
233
+ text-align: center;
234
+ }
235
+ .article-body img {
236
+ padding: 2px;
237
+ border-top: var(--pico-border-width) solid var(--pico-muted-border-color);
238
+ border-left: var(--pico-border-width) solid var(--pico-muted-border-color);
239
+ border-right: var(--pico-border-width) solid var(--pico-muted-border-color);
240
+ }
241
+ .article-body figcaption {
242
+ font-size: calc(var(--pico-font-size) * 0.6);
243
+ border-top-color: var(--pico-muted-border-color);
244
+ border-top-style: double;
245
+ }
246
+
247
+ .article-nav {
248
+ text-align: right;
249
+ }
250
+ .article-nav [role="button"] {
251
+ padding: calc(var(--pico-form-element-spacing-vertical) / 2) var(--pico-form-element-spacing-horizontal);
252
+ margin: 0 0 calc(var(--pico-form-element-spacing-vertical) * 2) 0;
253
+ }
254
+
255
+ .article-abstract {
256
+ padding: calc(var(--pico-spacing) * 4);
257
+ border-color: var(--pico-muted-border-color);
258
+ border-style: double;
259
+ background-color: var(--pico-code-background-color);
260
+ margin-bottom: calc(var(--pico-form-element-spacing-vertical) * 2);
261
+ }
262
+
263
+ blockquote {
264
+ padding: calc(var(--pico-spacing) * 4);
265
+ border-left-style: double;
266
+ }
267
+ </style>
268
+ {% block extra_head %}
269
+ {% endblock extra_head %}
270
+
271
+ <body>
272
+ <main class="container">
273
+ <header>
274
+ <h1><a href="{{ base_url }}" title="Retour à l’accueil">{{ title }}</a></h1>
275
+ </header>
276
+ {% block menu %}
277
+ <nav class="header">
278
+ <ul>
279
+ <li><a href="{{ base_url }}numero/" {% if is_numeros %}aria-current="page"{% endif %}>Par numéro</a></li>
280
+ <li class="muted" aria-hidden="true"> ⁙ </li>
281
+ <li><a href="{{ base_url }}blog/" {% if is_blog %}aria-current="page"{% endif %}>Par date</a></li>
282
+ <li class="muted" aria-hidden="true"> ⁙ </li>
283
+ <li><a href="{{ base_url }}mot-clef/" {% if is_keywords %}aria-current="page"{% endif %}>Par mot-clé</a></li>
284
+ <li class="muted" aria-hidden="true"> ⁙ </li>
285
+ <li><a href="{{ base_url }}auteur/" {% if is_authors %}aria-current="page"{% endif %}>Par auteur·ice</a></li>
286
+ </ul>
287
+ </nav>
288
+ {% endblock menu %}
289
+ <div class="content">
290
+ {% block content %}
291
+ {% endblock content %}
292
+ </div>
293
+ {% block footer %}
294
+ <nav class="footer">
295
+ <ul>
296
+ <li>Initiative du <a href="https://www.ecrituresnumeriques.ca/fr">Laboratoire de recherche sur les écritures numériques</a></li>
297
+ <li class="muted" aria-hidden="true"> ⁙ </li>
298
+ <li>Site généré par le <a href="https://gitlab.huma-num.fr/ecrinum/crieur">Crieur</a></li>
299
+ </ul>
300
+ </nav>
301
+ {% endblock footer %}
302
+ </main>
303
+ {% block extra_body %}
304
+ {% endblock extra_body %}
305
+
306
+ </body>
307
+ </html>
@@ -0,0 +1,23 @@
1
+ {% extends "base.html" %}
2
+
3
+ {% block content %}
4
+ {% for date, grouped_articles in articles|groupby("date")|reverse %}
5
+ <div class="aside">
6
+ <hgroup>
7
+ <h2 id="date-{{ date }}">{{ date.strftime('%d %B %Y') }} <a href="#date-{{ date }}" class="muted" title="Lien vers cette partie">⁙</a></h2>
8
+ </hgroup>
9
+ <ul>
10
+ {% for article in grouped_articles %}
11
+ <li>
12
+ <a href="{{ base_url }}{{ article.url }}">{{ article.title_f }}</a>
13
+ par
14
+ {% for author in article.authors -%}
15
+ <em>{{ author.forname }} {{ author.surname }}{%- if not loop.last -%}, {% endif %}</em>
16
+ {%- endfor %}
17
+ <nobr><span class="muted"><small>({{ article.numero.title_f }})</small></span></nobr>
18
+ </li>
19
+ {% endfor %}
20
+ </ul>
21
+ </div>
22
+ {% endfor %}
23
+ {% endblock content %}
@@ -0,0 +1,99 @@
1
+ {% extends "base.html" %}
2
+
3
+ {% block extra_head %}
4
+ <style type="text/css">
5
+ .grid footer {
6
+ text-align: right;
7
+ }
8
+ .grid footer [role="button"] {
9
+ padding: calc(var(--pico-form-element-spacing-vertical) / 4) calc(var(--pico-form-element-spacing-horizontal) / 2);
10
+ margin: calc(var(--pico-form-element-spacing-horizontal) / 2);
11
+ font-weight: bold;
12
+ }
13
+ a.outline:hover {
14
+ text-decoration: underline;
15
+ }
16
+ .grid ul {
17
+ margin-top: var(--pico-typography-spacing-vertical);
18
+ min-height: 12rem;
19
+ }
20
+
21
+ </style>
22
+ {% endblock extra_head %}
23
+
24
+ {% block content %}
25
+ <div class="grid">
26
+ <article>
27
+ <header>
28
+ <h2>Derniers numéros</h2>
29
+ </header>
30
+ <ul>
31
+ {% for numero in numeros|reverse %}
32
+ {% if loop.index <= 4 %}
33
+ <li>
34
+ <a href="{{ base_url }}numero/{{ numero.slug }}/">{{ numero.title_f }}</a>
35
+ <nobr><span class="muted"><small>({{ numero.date.strftime('%d %B %Y') }})</small></span></nobr>
36
+ </li>
37
+ {% endif %}
38
+ {% endfor %}
39
+ </ul>
40
+ <footer>
41
+ <a href="{{ base_url }}numero/" role="button" class="outline secondary">Voir les {{ numeros|length }} numéros</a>
42
+ </footer>
43
+ </article>
44
+ <article>
45
+ <header>
46
+ <h2>Derniers articles</h2>
47
+ </header>
48
+ <ul>
49
+ {% for article in articles %}
50
+ {% if loop.index <= 4 %}
51
+ <li>
52
+ <a href="{{ base_url }}{{ article.url }}">{{ article.title_f }}</a>
53
+ <nobr><span class="muted"><small>({{ article.date.strftime('%d %B %Y') }})</small></span></nobr>
54
+ </li>
55
+ {% endif %}
56
+ {% endfor %}
57
+ </ul>
58
+ <footer>
59
+ <a href="{{ base_url }}blog/" role="button" class="outline secondary">Voir les {{ articles|length }} articles</a>
60
+ </footer>
61
+ </article>
62
+ <article>
63
+ <header>
64
+ <h2>Mots-clés populaires</h2>
65
+ </header>
66
+ <ul class="by-2">
67
+ {% for slug, keyword in keywords.items() %}
68
+ {% if loop.index <= 10 %}
69
+ <li>
70
+ <a href="{{ base_url }}mot-clef/{{ keyword.slug }}/">#{{ keyword.name }}</a>
71
+ <nobr><span class="muted"><small>({{ keyword.articles|length }})</small></span></nobr>
72
+ </li>
73
+ {% endif %}
74
+ {% endfor %}
75
+ </ul>
76
+ <footer>
77
+ <a href="{{ base_url }}mot-clef/" role="button" class="outline secondary">Voir les {{ keywords|length }} mots-clés</a>
78
+ </footer>
79
+ </article>
80
+ <article>
81
+ <header>
82
+ <h2>Auteur·ices prolixes <nobr><span class="muted"><small>({{ authors|length }})</small></span></nobr></h2>
83
+ </header>
84
+ <ul class="by-2">
85
+ {% for slug, author in authors.items() %}
86
+ {% if loop.index <= 10 %}
87
+ <li>
88
+ <a href="{{ base_url }}auteur/{{ author.slug }}/">{{ author }}</a>
89
+ <nobr><span class="muted"><small>({{ author.articles|length }})</small></span></nobr>
90
+ </li>
91
+ {% endif %}
92
+ {% endfor %}
93
+ </ul>
94
+ <footer>
95
+ <a href="{{ base_url }}auteurice/" role="button" class="outline secondary">Voir les {{ authors|length }} auteur·ices</a>
96
+ </footer>
97
+ </article>
98
+ </div>
99
+ {% endblock content %}
@@ -0,0 +1,49 @@
1
+ {% extends "base.html" %}
2
+
3
+ {% block content %}
4
+ <h2 class="centered"><span class="muted">Mot-clé :</span> {{ keyword.name }}</h2>
5
+ {% for article in keyword.articles %}
6
+ <div class="aside">
7
+ <hgroup>
8
+ <h3><a href="{{ base_url }}{{ article.url }}">{{ article.title_f }}</a></h3>
9
+ <div>
10
+ <p>{{ article.subtitle_f }}</p>
11
+ <p class="muted">
12
+ {% if article.authors %}
13
+ {% for author in article.authors %}
14
+ <h4><em><a href="{{ base_url }}auteur/{{ author.slug }}/">{{ author.forname }} {{ author.surname }}</a></em></h4>
15
+ {% endfor %}
16
+ {% endif %}
17
+ </p>
18
+ <br>
19
+ <p class="muted">
20
+ <small>
21
+ <a href="{{ base_url }}blog/#date-{{ article.date }}">{{ article.date.strftime('%d %B %Y') }}</a>
22
+ <small class="muted" aria-hidden="true"> ⁙ </small>
23
+ <a href="{{ base_url }}numero/{{ article.numero.slug }}/">{{ article.numero.title_f }}</a>
24
+ {% if article.keywords %}
25
+ <small class="muted" aria-hidden="true"> ⁙ </small>
26
+ {% for keyword in article.keywords %}
27
+ <a href="{{ base_url }}mot-clef/{{ keyword.slug }}/">#{{ keyword.name }}</a>{%- if not loop.last -%}, {% endif %}
28
+ {% endfor %}
29
+ {% endif %}
30
+ </small>
31
+ </p>
32
+ </div>
33
+ </hgroup>
34
+ <div class="article-body">
35
+ {% if article.abstract_fr %}
36
+ <div class="article-abstract">{{ article.abstract_fr|markdown }}</div>
37
+ {% else %}
38
+ {% if article.abstract_en %}
39
+ <div class="article-abstract" lang="en">{{ article.abstract_en|markdown }}</div>
40
+ {% endif %}
41
+ {% endif %}
42
+
43
+ <div class="article-nav">
44
+ <a href="{{ base_url }}{{ article.url }}" role="button" class="secondary">Lire l’article</a>
45
+ </div>
46
+ </div>
47
+ </div>
48
+ {% endfor %}
49
+ {% endblock content %}
@@ -0,0 +1,24 @@
1
+ {% extends "base.html" %}
2
+
3
+ {% block content %}
4
+ {% for slug, keyword in keywords.items() %}
5
+ <div class="aside">
6
+ <hgroup>
7
+ <h2><a href="{{ base_url }}mot-clef/{{ keyword.slug }}/">{{ keyword.name }}</a></h2>
8
+ <p><small>{{ keyword.articles|length }} article{{ keyword.articles|length|pluralize }}</small></p>
9
+ </hgroup>
10
+ <ul>
11
+ {% for article in keyword.articles %}
12
+ <li>
13
+ <a href="{{ base_url }}{{ article.url }}">{{ article.title_f }}</a>
14
+ par
15
+ {% for author in article.authors -%}
16
+ <em>{{ author.forname }} {{ author.surname }}{%- if not loop.last -%}, {% endif %}</em>
17
+ {%- endfor %}
18
+ <nobr><span class="muted"><small>({{ article.date.strftime('%d %B %Y') }})</small></span></nobr>
19
+ </li>
20
+ {% endfor %}
21
+ </ul>
22
+ </div>
23
+ {% endfor %}
24
+ {% endblock content %}
@@ -0,0 +1,46 @@
1
+ {% extends "base.html" %}
2
+
3
+ {% block content %}
4
+ <h2 class="centered"><span class="muted">Numéro :</span> {{ numero.title_f }}</h2>
5
+ {% for article in numero.articles %}
6
+ <div class="aside">
7
+ <hgroup>
8
+ <h3><a href="{{ base_url }}{{ article.url }}">{{ article.title_f }}</a></h3>
9
+ <div>
10
+ <p>{{ article.subtitle_f }}</p>
11
+ <p class="muted">
12
+ {% if article.authors %}
13
+ {% for author in article.authors %}
14
+ <h4><em><a href="{{ base_url }}auteur/{{ author.slug }}/">{{ author.forname }} {{ author.surname }}</a></em></h4>
15
+ {% endfor %}
16
+ {% endif %}
17
+ </p>
18
+ <br>
19
+ <p class="muted">
20
+ <small>
21
+ <a href="{{ base_url }}blog/#date-{{ article.date }}">{{ article.date.strftime('%d %B %Y') }}</a>
22
+ {% if article.keywords %}
23
+ <small class="muted" aria-hidden="true"> ⁙ </small>
24
+ {% for keyword in article.keywords %}
25
+ <a href="{{ base_url }}mot-clef/{{ keyword.slug }}/">#{{ keyword.name }}</a>{%- if not loop.last -%}, {% endif %}
26
+ {% endfor %}
27
+ {% endif %}
28
+ </small>
29
+ </p>
30
+ </div>
31
+ </hgroup>
32
+ <div class="article-body">
33
+ {% if article.abstract_fr %}
34
+ <div class="article-abstract">{{ article.abstract_fr|markdown }}</div>
35
+ {% else %}
36
+ {% if article.abstract_en %}
37
+ <div class="article-abstract" lang="en">{{ article.abstract_en|markdown }}</div>
38
+ {% endif %}
39
+ {% endif %}
40
+ <div class="article-nav">
41
+ <a href="{{ base_url }}{{ article.url }}" role="button" class="secondary">Lire l’article</a>
42
+ </div>
43
+ </div>
44
+ </div>
45
+ {% endfor %}
46
+ {% endblock content %}