From d51fc592ede190c7e055390af585059347dd6355 Mon Sep 17 00:00:00 2001 From: antonin gallon Date: Tue, 17 Feb 2026 17:32:27 +0100 Subject: [PATCH] =?UTF-8?q?impl=C3=A9mentation=20de=20la=20toc=20complete?= =?UTF-8?q?=20pour=20linear?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/css/src/footer.css | 40 ++++++++++++++++++++++++-------- assets/css/src/header.css | 1 + assets/css/src/toc.css | 46 +++++++++++++++++++++++++++++++------ assets/js/script.js | 33 ++++++++++++++++++-------- site/snippets/cover.php | 2 +- site/snippets/footer.php | 9 ++++++-- site/snippets/header.php | 14 ++++++++++- site/snippets/nav.php | 5 ++-- site/snippets/panel-toc.php | 6 +++++ site/snippets/toc.php | 2 +- 10 files changed, 125 insertions(+), 33 deletions(-) create mode 100644 site/snippets/panel-toc.php diff --git a/assets/css/src/footer.css b/assets/css/src/footer.css index a50de8a..6f0f5da 100644 --- a/assets/css/src/footer.css +++ b/assets/css/src/footer.css @@ -12,12 +12,37 @@ bottom: 0; } +@media screen and (max-width: 640px) { + #main-footer ul { + bottom: 0; + display: flex; + justify-content: space-around; + border-top: 1px solid var(--color-primary); + background-color: var(--color-background); + } + #main-footer .open-nav-wrapper_toc{ + margin-right: 50px; + } +} +@media screen and (min-width: 1100px) { + #main-footer .open-nav-wrapper_toc{ + display: none !important; + } +} + #main-footer li:not(.open-nav-wrapper) { display: none; } +#main-footer li{ + flex: 1; +} +#main-footer li > *{ + width:calc(100% - var(--unit--vertical) * 2); +} + #main-footer button.open-nav { - transform: translateY(-1px); + transform: translateY(-2px); } [data-template="home"] .title-wrapper button.open-nav { @@ -26,20 +51,17 @@ @media screen and (max-width: 640px) { #main-footer .open-nav { - box-sizing: border-box; - bottom: 0; display: flex; - justify-content: center; - width: 100%; outline: none; - border-top: 1px solid var(--color-primary); font-size: var(--font-size-m); background-color: var(--color-background); - padding: calc(var(--unit--vertical) / 2) var(--unit--horizontal); - margin-bottom: env(safe-area-inset-bottom); color: var(--color-primary); line-height: 1; - } + padding: calc(var(--unit--vertical) / 2) var(--unit--horizontal); + } + [data-is_toc="false"] #main-footer .open-nav { + justify-content: center; + } } @media screen and (min-width: 640px) { diff --git a/assets/css/src/header.css b/assets/css/src/header.css index 783e683..a2cce66 100644 --- a/assets/css/src/header.css +++ b/assets/css/src/header.css @@ -82,6 +82,7 @@ article > h1 { display: flex; flex-direction: column; + gap: var(--unit--vertical); } [data-template="home"] .page-cover { diff --git a/assets/css/src/toc.css b/assets/css/src/toc.css index 9239140..a2faacd 100644 --- a/assets/css/src/toc.css +++ b/assets/css/src/toc.css @@ -1,15 +1,47 @@ +.toc{ + display: flex; + flex-direction: column; + justify-content: center; +} .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); + flex: 1; +} +@media (min-width: 1100px){ + .page-cover .toc{ + position: fixed; + width: calc(var(--body-padding) - var(--unit--horizontal) * 2) ; + left: 0; + top: 15vw; + padding-inline: var(--unit--horizontal); + padding-top: calc(var(--unit--vertical) / 2); + } +} +.page-cover .toc{ + flex: 1; +} +.panel-toc .toc{ + padding: var(--unit--vertical) var(--unit--horizontal); + } .toc_label{ font-size: var(--font-size-m); + margin-bottom: calc(var(--unit--vertical) / 4); /*option 1*/ +} +.toc ul{ + display: flex; + flex-direction: column; + gap: calc(var(--unit--vertical) / 4); /*option 1*/ } .toc li{ margin-left: 0; -} \ No newline at end of file + /* text-indent: var(--unit--horizontal) hanging; */ /*option 2*/ + + /* list-style: square; */ /*option 3*/ +} + + +[data-is_toc="false"] .if_toc, +[data-is_toc="false"] #main-footer li.if_toc{ /*obliger d'être si précis car si non pas la priorité*/ + display: none !important; +} diff --git a/assets/js/script.js b/assets/js/script.js index f734272..65b8735 100644 --- a/assets/js/script.js +++ b/assets/js/script.js @@ -69,9 +69,13 @@ function toggleLogoState() { } function toggleFooterState() { if (scrollY > 90) { - document.querySelector(".open-nav-wrapper").classList.remove("hidden"); + document.querySelectorAll(".open-nav-wrapper").forEach(element => { + element.classList.remove("hidden"); + }); } else { - document.querySelector(".open-nav-wrapper").classList.add("hidden"); + document.querySelectorAll(".open-nav-wrapper").forEach(element => { + element.classList.add("hidden"); + }); } } @@ -125,12 +129,16 @@ function subscribe(event) { } } -const panelNav = document.querySelector(".panel"); +const panelsNav = document.querySelectorAll(".panel"); +const panelNavText = document.querySelector(".panel-text"); +const panelNavToc = document.querySelector(".panel-toc"); const navOverlay = document.querySelector("#nav-overlay"); const openNavBtns = document.querySelectorAll("button.open-nav"); -const closeNavBtn = document.querySelector(".panel-close"); +const closeNavBtns = document.querySelectorAll(".panel-close"); function closeNav() { - panelNav.classList.remove("panel--visible"); + panelsNav.forEach(element => { + element.classList.remove("panel--visible"); + }); navOverlay.classList.remove("nav-overlay--visible"); document.body.classList.remove("no-scroll"); } @@ -194,15 +202,22 @@ document.addEventListener("DOMContentLoaded", () => { }); openNavBtns.forEach((openNavBtn) => { - openNavBtn.addEventListener("click", () => { - panelNav.classList.add("panel--visible"); + openNavBtn.addEventListener("click", (event) => { + target = event.currentTarget; + if(target.classList.contains("open-nav_text")){ + panelNavText.classList.add("panel--visible"); + }else if(target.classList.contains("open-nav_toc")){ + panelNavToc.classList.add("panel--visible"); + } navOverlay.classList.add("nav-overlay--visible"); document.body.classList.add("no-scroll"); }); }); - closeNavBtn.addEventListener("click", () => { - closeNav(); + closeNavBtns.forEach(element => { + element.addEventListener("click", () => { + closeNav(); + }); }); navOverlay.addEventListener("click", () => { closeNav(); diff --git a/site/snippets/cover.php b/site/snippets/cover.php index 1b2f77a..37ed66a 100644 --- a/site/snippets/cover.php +++ b/site/snippets/cover.php @@ -8,7 +8,7 @@ $isOpen ??= false; title() ?> - parent()->parent()->is('textes')){ + parent() && $page->parent()->parent()->is('textes')){ snippet('toc', ["content" => $page->bodyBlocks()->toBlocks()]); } ?> text()): ?> diff --git a/site/snippets/footer.php b/site/snippets/footer.php index 87457ce..8ea5582 100644 --- a/site/snippets/footer.php +++ b/site/snippets/footer.php @@ -2,9 +2,14 @@ is(page('lettre')) && !$page->is(page('a-propos'))): ?>