fix: prevent line breaks before punctuation in TFE titles and meta labels

- Override aggressive word-break: break-word from base.css
  with word-break: normal + overflow-wrap: break-word + hyphens: auto
  on .tfe-title, .tfe-author, .tfe-meta-item
- Replace regular spaces before colons with   in all meta labels
  (French typographic rule: non-breaking space before double punctuation)
- Rebuild tfe.min.css
This commit is contained in:
Pontoporeia
2026-07-10 14:47:52 +02:00
parent bbf063f3eb
commit 2461f526bf
3 changed files with 28 additions and 18 deletions
+1
View File
@@ -53,3 +53,4 @@
- [x] Redirect internal metadata links on TFE page from /repertoire to /search (orientation, AP, finalité, year, keywords); add query= for search bar prefill; fix filter <details> visibility on desktop; add keyword to filterKeys badge; add hidden keyword input + visible chip to filter form so keyword filter survives form submission - [x] Redirect internal metadata links on TFE page from /repertoire to /search (orientation, AP, finalité, year, keywords); add query= for search bar prefill; fix filter <details> visibility on desktop; add keyword to filterKeys badge; add hidden keyword input + visible chip to filter form so keyword filter survives form submission
- [x] Fix Logger default level: production default was WARNING, but all facades (AppLogger, AdminLogger, Audit) write at INFO — causing submission/admin/audit logs to be silently discarded - [x] Fix Logger default level: production default was WARNING, but all facades (AppLogger, AdminLogger, Audit) write at INFO — causing submission/admin/audit logs to be silently discarded
- [x] Add structured logging to PeerTube upload/delete: replace raw error_log() with Logger::get('app')->info() for successes and ErrorHandler::log() for failures in PeerTubeService, FilepondHandler, ThesisCreateController, ThesisFileHandler - [x] Add structured logging to PeerTube upload/delete: replace raw error_log() with Logger::get('app')->info() for successes and ErrorHandler::log() for failures in PeerTubeService, FilepondHandler, ThesisCreateController, ThesisFileHandler
- [x] Fix word-break before punctuation in TFE titles/meta: override aggressive `word-break: break-word` from base.css with `word-break: normal` + `hyphens: auto` on .tfe-title, .tfe-author, .tfe-meta-item; replace spaces before colons in meta labels with `&nbsp;` (French typographic rule)
+9
View File
@@ -213,12 +213,18 @@
color: var(--text-primary); color: var(--text-primary);
margin: 0; margin: 0;
line-height: 1.3; line-height: 1.3;
word-break: normal;
overflow-wrap: break-word;
hyphens: auto;
} }
/* Title (h1) — inherits global scale from base.css */ /* Title (h1) — inherits global scale from base.css */
.tfe-title { .tfe-title {
margin: 0; margin: 0;
font-size: var(--step-2); font-size: var(--step-2);
word-break: normal;
overflow-wrap: break-word;
hyphens: auto;
} }
/* Metadata block */ /* Metadata block */
@@ -234,6 +240,9 @@
.tfe-meta-item { .tfe-meta-item {
margin: 0; margin: 0;
font-weight: 700; font-weight: 700;
word-break: normal;
overflow-wrap: break-word;
hyphens: auto;
} }
.tfe-meta-label { .tfe-meta-label {
+18 -18
View File
@@ -17,28 +17,28 @@
<div class="tfe-meta"> <div class="tfe-meta">
<?php if (!empty($data["orientation"])): ?> <?php if (!empty($data["orientation"])): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Orientation :</span> <span class="tfe-meta-label">Orientation&nbsp;:</span>
<a href="/search?orientation=<?= urlencode($data["orientation"]) ?>&query=<?= urlencode($data["orientation"]) ?>"><?= htmlspecialchars($data["orientation"]) ?></a> <a href="/search?orientation=<?= urlencode($data["orientation"]) ?>&query=<?= urlencode($data["orientation"]) ?>"><?= htmlspecialchars($data["orientation"]) ?></a>
</p> </p>
<?php endif; ?> <?php endif; ?>
<?php if (!empty($data["ap_program"])): ?> <?php if (!empty($data["ap_program"])): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Atelier pluridisciplinaire :</span> <span class="tfe-meta-label">Atelier pluridisciplinaire&nbsp;:</span>
<a href="/search?ap_program=<?= urlencode($data["ap_program"]) ?>&query=<?= urlencode($data["ap_program"]) ?>"><?= htmlspecialchars($data["ap_program"]) ?></a> <a href="/search?ap_program=<?= urlencode($data["ap_program"]) ?>&query=<?= urlencode($data["ap_program"]) ?>"><?= htmlspecialchars($data["ap_program"]) ?></a>
</p> </p>
<?php endif; ?> <?php endif; ?>
<?php if (!empty($data["finality_type"])): ?> <?php if (!empty($data["finality_type"])): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Finalité :</span> <span class="tfe-meta-label">Finalité&nbsp;:</span>
<a href="/search?finality=<?= urlencode($data["finality_type"]) ?>&query=<?= urlencode($data["finality_type"]) ?>"><?= htmlspecialchars($data["finality_type"]) ?></a> <a href="/search?finality=<?= urlencode($data["finality_type"]) ?>&query=<?= urlencode($data["finality_type"]) ?>"><?= htmlspecialchars($data["finality_type"]) ?></a>
</p> </p>
<?php endif; ?> <?php endif; ?>
<?php if (!empty($data["year"])): ?> <?php if (!empty($data["year"])): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Date :</span> <span class="tfe-meta-label">Date&nbsp;:</span>
<a href="/search?year=<?= urlencode($data["year"]) ?>&query=<?= urlencode($data["year"]) ?>"><?= htmlspecialchars($data["year"]) ?></a> <a href="/search?year=<?= urlencode($data["year"]) ?>&query=<?= urlencode($data["year"]) ?>"><?= htmlspecialchars($data["year"]) ?></a>
</p> </p>
<?php endif; ?> <?php endif; ?>
@@ -58,14 +58,14 @@
unset($_h, $_m); unset($_h, $_m);
?> ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Durée :</span> <span class="tfe-meta-label">Durée&nbsp;:</span>
<?= $_duree ?> <?= $_duree ?>
</p> </p>
<?php endif; unset($_hasPages, $_hasMins, $_parts, $_duree); ?> <?php endif; unset($_hasPages, $_hasMins, $_parts, $_duree); ?>
<?php if (!empty($data["languages"])): ?> <?php if (!empty($data["languages"])): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Langue :</span> <span class="tfe-meta-label">Langue&nbsp;:</span>
<?php <?php
$langs = array_map("trim", explode(",", $data["languages"])); $langs = array_map("trim", explode(",", $data["languages"]));
$langLinks = array_map( $langLinks = array_map(
@@ -79,7 +79,7 @@
<?php if (!empty($data["formats"])): ?> <?php if (!empty($data["formats"])): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Format :</span> <span class="tfe-meta-label">Format&nbsp;:</span>
<?php <?php
$fmts = array_map("trim", explode(",", $data["formats"])); $fmts = array_map("trim", explode(",", $data["formats"]));
$fmtLinks = array_map( $fmtLinks = array_map(
@@ -93,7 +93,7 @@
<?php if (!empty($data["keywords"])): ?> <?php if (!empty($data["keywords"])): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Mots-clés :</span> <span class="tfe-meta-label">Mots-clés&nbsp;:</span>
<?php <?php
$kws = array_map("trim", explode(",", $data["keywords"])); $kws = array_map("trim", explode(",", $data["keywords"]));
$kwLinks = array_map( $kwLinks = array_map(
@@ -107,7 +107,7 @@
<?php if (!empty($promoteursInternes)): ?> <?php if (!empty($promoteursInternes)): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Promoteur·ice interne :</span> <span class="tfe-meta-label">Promoteur·ice interne&nbsp;:</span>
<?php <?php
$links = array_map( $links = array_map(
fn($n) => '<a href="/search?query=' . urlencode($n) . '">' . htmlspecialchars($n) . '</a>', fn($n) => '<a href="/search?query=' . urlencode($n) . '">' . htmlspecialchars($n) . '</a>',
@@ -120,7 +120,7 @@
<?php if (!empty($promoteursExternes)): ?> <?php if (!empty($promoteursExternes)): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Promoteur·ice externe :</span> <span class="tfe-meta-label">Promoteur·ice externe&nbsp;:</span>
<?php <?php
$links = array_map( $links = array_map(
fn($n) => '<a href="/search?query=' . urlencode($n) . '">' . htmlspecialchars($n) . '</a>', fn($n) => '<a href="/search?query=' . urlencode($n) . '">' . htmlspecialchars($n) . '</a>',
@@ -133,7 +133,7 @@
<?php if (!empty($promoteursUlb)): ?> <?php if (!empty($promoteursUlb)): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Promoteur·ice université :</span> <span class="tfe-meta-label">Promoteur·ice université&nbsp;:</span>
<?php <?php
$links = array_map( $links = array_map(
fn($n) => '<a href="/search?query=' . urlencode($n) . '">' . htmlspecialchars($n) . '</a>', fn($n) => '<a href="/search?query=' . urlencode($n) . '">' . htmlspecialchars($n) . '</a>',
@@ -146,7 +146,7 @@
<?php if (!empty($juryPresidents)): ?> <?php if (!empty($juryPresidents)): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Président·e du jury :</span> <span class="tfe-meta-label">Président·e du jury&nbsp;:</span>
<?php <?php
$links = array_map( $links = array_map(
fn($n) => '<a href="/search?query=' . urlencode($n) . '">' . htmlspecialchars($n) . '</a>', fn($n) => '<a href="/search?query=' . urlencode($n) . '">' . htmlspecialchars($n) . '</a>',
@@ -159,7 +159,7 @@
<?php if (!empty($juryLecteursInternes)): ?> <?php if (!empty($juryLecteursInternes)): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Lecteur·ice(s) interne :</span> <span class="tfe-meta-label">Lecteur·ice(s) interne&nbsp;:</span>
<?php <?php
$links = array_map( $links = array_map(
fn($n) => '<a href="/search?query=' . urlencode($n) . '">' . htmlspecialchars($n) . '</a>', fn($n) => '<a href="/search?query=' . urlencode($n) . '">' . htmlspecialchars($n) . '</a>',
@@ -172,7 +172,7 @@
<?php if (!empty($juryLecteursExternes)): ?> <?php if (!empty($juryLecteursExternes)): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Lecteur·ice(s) externe :</span> <span class="tfe-meta-label">Lecteur·ice(s) externe&nbsp;:</span>
<?php <?php
$links = array_map( $links = array_map(
fn($n) => '<a href="/search?query=' . urlencode($n) . '">' . htmlspecialchars($n) . '</a>', fn($n) => '<a href="/search?query=' . urlencode($n) . '">' . htmlspecialchars($n) . '</a>',
@@ -185,7 +185,7 @@
<?php if (!empty($data["access_type"])): ?> <?php if (!empty($data["access_type"])): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Accès :</span> <span class="tfe-meta-label">Accès&nbsp;:</span>
<?= htmlspecialchars($data["access_type"]) ?> <?= htmlspecialchars($data["access_type"]) ?>
</p> </p>
<?php endif; ?> <?php endif; ?>
@@ -195,7 +195,7 @@
$_lic = !empty($data["license_type"]) ? $data["license_type"] : ($data["license_custom"] ?? null); $_lic = !empty($data["license_type"]) ? $data["license_type"] : ($data["license_custom"] ?? null);
if ($_cc2r || $_lic): ?> if ($_cc2r || $_lic): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Licence :</span> <span class="tfe-meta-label">Licence&nbsp;:</span>
<?= htmlspecialchars(implode(", ", array_filter([$_cc2r ? "CC2r" : null, $_lic]))) ?> <?= htmlspecialchars(implode(", ", array_filter([$_cc2r ? "CC2r" : null, $_lic]))) ?>
</p> </p>
<?php endif; ?> <?php endif; ?>
@@ -203,7 +203,7 @@
<?php if (!empty($data["contact_visible"])): ?> <?php if (!empty($data["contact_visible"])): ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Contact :</span> <span class="tfe-meta-label">Contact&nbsp;:</span>
<?php <?php
$_contact = $data["contact_visible"]; $_contact = $data["contact_visible"];
$_isUrl = filter_var($_contact, FILTER_VALIDATE_URL) !== false; $_isUrl = filter_var($_contact, FILTER_VALIDATE_URL) !== false;
@@ -249,7 +249,7 @@
$_baiuLabel = parse_url($data["baiu_link"], PHP_URL_HOST) ?: preg_replace("#^https?://(www\\.)?#i", "", rtrim($data["baiu_link"], "/")); $_baiuLabel = parse_url($data["baiu_link"], PHP_URL_HOST) ?: preg_replace("#^https?://(www\\.)?#i", "", rtrim($data["baiu_link"], "/"));
?> ?>
<p class="tfe-meta-item"> <p class="tfe-meta-item">
<span class="tfe-meta-label">Lien :</span> <span class="tfe-meta-label">Lien&nbsp;:</span>
<a href="<?= $_baiuHref ?>" target="_blank" rel="noopener"> <a href="<?= $_baiuHref ?>" target="_blank" rel="noopener">
<?= htmlspecialchars($_baiuLabel) ?> <?= htmlspecialchars($_baiuLabel) ?>
<span class="sr-only">(ouvre dans un nouvel onglet)</span> <span class="sr-only">(ouvre dans un nouvel onglet)</span>