début de mise en place de la toc. le design reste à voir

This commit is contained in:
antonin gallon 2026-02-16 16:11:36 +01:00
parent e210ed40f6
commit 0de3b29e8b
7 changed files with 44 additions and 2 deletions

View file

@ -29,7 +29,8 @@ h5,
h5 *,
p,
p *:not(strong),
figcaption {
figcaption,
.toc{
font-weight: var(--font-weight-light);
line-height: 1;
}

15
assets/css/src/toc.css Normal file
View file

@ -0,0 +1,15 @@
.page-cover .toc{
position: fixed;
display: block;
width: calc(var(--body-padding) - var(--unit--horizontal) * 2) ;
left: 0;
top: 15vw;
padding-inline: var(--unit--horizontal);
}
.toc_label{
font-size: var(--font-size-m);
}
.toc li{
margin-left: 0;
}

View file

@ -12,6 +12,7 @@
@import url("src/footer.css");
@import url("src/toggle-light-mode.css");
@import url("src/print.css");
@import url("src/toc.css");

View file

@ -12,6 +12,14 @@ function allYears ($article) {
return $years;
}
function addAnchors($content) {
$content = preg_replace_callback('/<h3>(.*?)<\/h3>/', function($matches) {
$slug = Str::slug($matches[1]);
return '<h3 id="' . $slug . '">' . $matches[1] . '</h3>';
}, $content);
return $content;
}
function setTitleFontSizeClass($title, $level = 'h1')
{
$length = strlen($title);

View file

@ -8,6 +8,9 @@ $isOpen ??= false;
<?= $slots->title() ?>
</a>
</div>
<?php if ($page->parent()->parent()->is('textes')){
snippet('toc', ["content" => $page->bodyBlocks()->toBlocks()]);
} ?>
<?php if ($slots->text()): ?>
<div class="text-wrapper">
<?= $slots->text() ?>

13
site/snippets/toc.php Normal file
View file

@ -0,0 +1,13 @@
<nav class="toc">
<div class="light toc_label">Sommaire</div>
<ul>
<?php
preg_match_all('/<h3>(.*?)<\/h3>/', $content, $titres);
foreach ($titres[1] as $index => $titre) {
$slug = Str::slug($titre);
echo '<li><a href="#' . $slug . '">' . $titre . '</a></li>';
}
?>
</ul>
</nav>

View file

@ -24,6 +24,7 @@
<?php endslot() ?>
<?php endsnippet() ?>
<div id="main-content">
<?php if ($page->chapo()->isNotEmpty()): ?>
<div id="chapo">
@ -33,7 +34,7 @@
<?php if ($page->isHtmlMode()->isTrue()): ?>
<?= $page->htmlBody()->kt() ?>
<?php elseif ($page->bodyBlocks()->isNotEmpty()): ?>
<?= $page->bodyBlocks()->toBlocks() ?>
<?= addAnchors($page->bodyBlocks()->toBlocks()) ?>
<?php else: ?>
<?= $page->body() ?>
<?php endif ?>