1

Ajoute un mode de centrage des figures et améliore les légendes

This commit is contained in:
2026-03-03 01:10:02 +01:00
parent 16b95458f1
commit 8a1ce77c17
3 changed files with 115 additions and 13 deletions

View File

@@ -1,6 +1,9 @@
goldmark: goldmark:
parser: parser:
wrapStandAloneImageWithinParagraph: false wrapStandAloneImageWithinParagraph: false
attribute:
block: true
title: true
renderer: renderer:
unsafe: true unsafe: true
tableOfContents: tableOfContents:

View File

@@ -671,14 +671,14 @@ main > article figure.figure-media {
align-items: stretch; align-items: stretch;
} }
main > article > figure.figure-media.figure-media-with-meta:nth-of-type(odd) { main > article > figure.figure-media.figure-media-with-meta:not(.figure-media-centered):nth-of-type(odd) {
--figure-media-column: 2; --figure-media-column: 2;
--figure-meta-column: 1; --figure-meta-column: 1;
--figure-media-justify: start; --figure-media-justify: start;
grid-template-columns: minmax(0, 1fr) minmax(0, 1.7fr); grid-template-columns: minmax(0, 1fr) minmax(0, 1.7fr);
} }
main > article > figure.figure-media.figure-media-with-meta:nth-of-type(odd) > figcaption.figure-media-meta { main > article > figure.figure-media.figure-media-with-meta:not(.figure-media-centered):nth-of-type(odd) > figcaption.figure-media-meta {
text-align: right; text-align: right;
border-left: 0; border-left: 0;
padding-left: 0; padding-left: 0;
@@ -726,16 +726,33 @@ main > article figure.figure-media.figure-media-without-meta > :is(video, img, a
grid-column: 1; grid-column: 1;
} }
main > article figure.figure-media.figure-media-centered {
--figure-media-column: 1;
--figure-meta-column: 1;
--figure-media-justify: center;
grid-template-columns: minmax(0, 1fr);
gap: var(--space-2);
}
main > article figure.figure-media.figure-media-centered > :is(video, img, a) {
grid-column: 1;
grid-row: 1;
}
main > article figure.figure-media > figcaption.figure-media-meta { main > article figure.figure-media > figcaption.figure-media-meta {
grid-column: var(--figure-meta-column); grid-column: var(--figure-meta-column);
grid-row: 1; grid-row: 1;
margin-top: 0; margin-top: 0;
border-top: 1px solid var(--color-border-strong);
border-left: 1px solid var(--color-border-strong); border-left: 1px solid var(--color-border-strong);
padding-left: var(--space-6); padding-left: var(--space-6);
padding-top: var(--space-2);
padding-bottom: var(--space-2);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
min-height: 100%; min-height: 100%;
gap: var(--space-2); gap: var(--space-2);
background: color-mix(in srgb, var(--color-background-alt) 82%, transparent);
} }
main > article figure.figure-media > figcaption.figure-media-meta > .figure-media-meta-main { main > article figure.figure-media > figcaption.figure-media-meta > .figure-media-meta-main {
@@ -752,19 +769,62 @@ main > article figure.figure-media > figcaption.figure-media-meta > .figure-medi
gap: var(--space-2); gap: var(--space-2);
} }
main > article figure.figure-media > figcaption.figure-media-meta > .figure-media-meta-extra > p.cover-attribution {
border-top: var(--border-width-regular) solid var(--color-accent-2);
padding-top: var(--space-4);
}
main > article figure.figure-media > figcaption.figure-media-meta p { main > article figure.figure-media > figcaption.figure-media-meta p {
margin-top: 0; margin-top: 0;
} }
main > article > figure.figure-media.figure-media-with-meta:nth-of-type(odd) > figcaption.figure-media-meta > .figure-media-meta-extra > p.cover-attribution { main > article figure.figure-media > figcaption.figure-media-meta .cover-title {
font-size: clamp(0.98rem, 1.15vw, 1.06rem);
letter-spacing: 0.03em;
text-transform: uppercase;
}
main > article figure.figure-media > figcaption.figure-media-meta .cover-description {
font-size: 0.95rem;
color: var(--color-text-muted);
}
main > article figure.figure-media > figcaption.figure-media-meta > .figure-media-meta-extra > p.cover-attribution {
border-top: 1px solid var(--color-border);
padding-top: var(--space-2);
}
main > article > figure.figure-media.figure-media-with-meta:not(.figure-media-centered):nth-of-type(odd) > figcaption.figure-media-meta > .figure-media-meta-extra > p.cover-attribution {
justify-content: flex-end; justify-content: flex-end;
} }
main > article figure.figure-media.figure-media-centered > figcaption.figure-media-meta {
grid-column: 1;
grid-row: 2;
width: min(100%, 72ch);
margin-inline: auto;
min-height: 0;
text-align: center;
border-left: 0;
border-right: 0;
padding-left: var(--space-2);
padding-right: var(--space-2);
}
main > article figure.figure-media.figure-media-centered > figcaption.figure-media-meta > .figure-media-meta-main,
main > article figure.figure-media.figure-media-centered > figcaption.figure-media-meta > .figure-media-meta-extra {
align-items: center;
}
main > article figure.figure-media.figure-media-centered > figcaption.figure-media-meta > .figure-media-meta-main > :is(.cover-title, .cover-description),
main > article figure.figure-media.figure-media-centered > figcaption.figure-media-meta > .figure-media-meta-extra > :is(.cover-attribution, details) {
width: min(100%, 68ch);
}
main > article figure.figure-media.figure-media-centered > figcaption.figure-media-meta > .figure-media-meta-extra > p.cover-attribution {
width: min(100%, 68ch);
justify-content: center;
}
main > article figure.figure-media.figure-media-centered > figcaption.figure-media-meta > .figure-media-meta-extra > details {
text-align: left;
}
main > article figure.figure-media > figcaption.figure-media-meta > .figure-media-meta-extra > details { main > article figure.figure-media > figcaption.figure-media-meta > .figure-media-meta-extra > details {
margin-top: 0; margin-top: 0;
} }
@@ -981,13 +1041,17 @@ body:has(> header.article-header) > main > aside.article-toc nav[aria-label="Som
gap: var(--space-2); gap: var(--space-2);
} }
main > article > figure.figure-media.figure-media-with-meta:nth-of-type(odd) { main > article > figure.figure-media.figure-media-with-meta:not(.figure-media-centered):nth-of-type(odd) {
--figure-media-column: 1; --figure-media-column: 1;
--figure-meta-column: 1; --figure-meta-column: 1;
--figure-media-justify: start; --figure-media-justify: start;
grid-template-columns: minmax(0, 1fr); grid-template-columns: minmax(0, 1fr);
} }
main > article figure.figure-media.figure-media-centered {
--figure-media-justify: center;
}
main > article figure.figure-media > :is(video, img, a), main > article figure.figure-media > :is(video, img, a),
main > article figure.figure-media > figcaption.figure-media-meta { main > article figure.figure-media > figcaption.figure-media-meta {
grid-column: 1; grid-column: 1;
@@ -1006,11 +1070,11 @@ body:has(> header.article-header) > main > aside.article-toc nav[aria-label="Som
margin-top: 0; margin-top: 0;
} }
main > article > figure.figure-media.figure-media-with-meta:nth-of-type(odd) > figcaption.figure-media-meta { main > article > figure.figure-media.figure-media-with-meta:not(.figure-media-centered):nth-of-type(odd) > figcaption.figure-media-meta {
text-align: left; text-align: left;
} }
main > article > figure.figure-media.figure-media-with-meta:nth-of-type(odd) > figcaption.figure-media-meta > .figure-media-meta-extra > p.cover-attribution { main > article > figure.figure-media.figure-media-with-meta:not(.figure-media-centered):nth-of-type(odd) > figcaption.figure-media-meta > .figure-media-meta-extra > p.cover-attribution {
justify-content: flex-start; justify-content: flex-start;
} }

View File

@@ -19,11 +19,46 @@
{{- end -}} {{- end -}}
{{- $metaTitle := index $data "title" -}} {{- $metaTitle := index $data "title" -}}
{{- $hasMeta := or $metaTitle (or $description (or $data.attribution $data.prompt)) -}} {{- $hasMeta := or $metaTitle (or $description (or $data.attribution $data.prompt)) -}}
<figure class="figure-media{{ if $hasMeta }} figure-media-with-meta{{ else }} figure-media-without-meta{{ end }}"> {{- $attributes := .Attributes | default dict -}}
{{- $imageClasses := "" -}}
{{- with index $attributes "class" -}}
{{- $imageClasses = lower (trim . " ") -}}
{{- end -}}
{{- $layout := "" -}}
{{- with index $attributes "layout" -}}
{{- $layout = lower (trim . " ") -}}
{{- end -}}
{{- $hasCenterClass := gt (len (findRE `(^|\\s)(center|centered)(\\s|$)` $imageClasses)) 0 -}}
{{- $hasFullClass := gt (len (findRE `(^|\\s)(full|full-width|wide)(\\s|$)` $imageClasses)) 0 -}}
{{- $forceCentered := false -}}
{{- if or (in (slice "center" "centered") $layout) $hasCenterClass -}}
{{- $forceCentered = true -}}
{{- end -}}
{{- if or (in (slice "full" "full-width" "wide") $layout) $hasFullClass -}}
{{- $forceCentered = true -}}
{{- end -}}
{{- $forceWithoutMeta := false -}}
{{- if or (in (slice "full" "full-width" "wide") $layout) $hasFullClass -}}
{{- $forceWithoutMeta = true -}}
{{- end -}}
{{- $showMeta := and $hasMeta (not $forceWithoutMeta) -}}
{{- $figureClasses := slice "figure-media" -}}
{{- if $showMeta -}}
{{- $figureClasses = $figureClasses | append "figure-media-with-meta" -}}
{{- else -}}
{{- $figureClasses = $figureClasses | append "figure-media-without-meta" -}}
{{- end -}}
{{- if $forceCentered -}}
{{- $figureClasses = $figureClasses | append "figure-media-centered" -}}
{{- end -}}
{{- with $imageClasses -}}
{{- $figureClasses = $figureClasses | append . -}}
{{- end -}}
<figure class="{{ delimit $figureClasses " " }}">
<a href="{{ $image.RelPermalink }}" title="Cliquez pour agrandir l'image"> <a href="{{ $image.RelPermalink }}" title="Cliquez pour agrandir l'image">
<img src="{{ $display.RelPermalink }}" alt="{{ $alt }}" title="{{ $title }}"> <img src="{{ $display.RelPermalink }}" alt="{{ $alt }}" title="{{ $title }}">
</a> </a>
{{- if $hasMeta -}} {{- if $showMeta -}}
<figcaption class="figure-media-meta cover-meta"> <figcaption class="figure-media-meta cover-meta">
<div class="figure-media-meta-main"> <div class="figure-media-meta-main">
{{- with $metaTitle -}} {{- with $metaTitle -}}