Compare commits

..

194 commits

Author SHA1 Message Date
isUnknown
72031c6c09 send-button : fix remplissage date et changement de statut à l'envoi
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
Les appels update() et changeStatus() étaient placés après le return,
donc jamais exécutés. Déplacés avant le return dans le bloc try.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 19:48:26 +02:00
isUnknown
2e6c46719a code mark : decrease font-size
All checks were successful
Deploy / Deploy to Production (push) Successful in 7s
2026-03-31 19:41:32 +02:00
isUnknown
0d61dd4ab0 code mark : adjust style
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
2026-03-31 19:41:03 +02:00
isUnknown
f1733992db body blocks : add code mark and style
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
2026-03-31 19:28:10 +02:00
isUnknown
b492fbcf9b email blueprint > writer field disable marks
All checks were successful
Deploy / Deploy to Production (push) Successful in 8s
2026-03-31 19:08:04 +02:00
isUnknown
425073cff0 theme : dark par défaut, ignore la préférence système
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 19:00:16 +02:00
isUnknown
7efa08b269 indent
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
2026-03-30 11:16:01 +02:00
isUnknown
21efdf99b7 fix : toc/body visible pour sous-articles, tri abonnés par date
All checks were successful
Deploy / Deploy to Production (push) Successful in 7s
- toc plugin : remplace la vérification de profondeur fixe par parents()->findBy()
  pour supporter les sous-articles à n'importe quelle profondeur
- newsletter : sortBy inscriptiondate (lowercase) pour correspondre au stockage Kirby

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 11:15:42 +02:00
isUnknown
5b019a8e7d body blocks : add underline mark
All checks were successful
Deploy / Deploy to Production (push) Successful in 7s
2026-03-30 09:31:15 +02:00
isUnknown
80b1c3bc5b meta tabs : add files and pages sections
All checks were successful
Deploy / Deploy to Production (push) Successful in 8s
2026-03-30 09:11:33 +02:00
isUnknown
3d43271191 subscribers list : disabled inscriptionDate
All checks were successful
Deploy / Deploy to Production (push) Successful in 5s
2026-03-29 22:11:40 +02:00
isUnknown
eb8044a4fc newsletter subscribers list fix
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
2026-03-29 22:10:57 +02:00
isUnknown
b2139d8f40 subscribe : fix date saving, duplicate detection and display format
All checks were successful
Deploy / Deploy to Production (push) Successful in 10s
Fix inscription date key to lowercase for Kirby compatibility, fix
duplicate email check using array_column, change date display to
DD/MM/YYYY, and sort subscribers by inscription date.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 20:58:28 +02:00
isUnknown
641ddc3fdd closes #50
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
2026-03-28 17:02:44 +01:00
isUnknown
3d842cb1b7 closes #53
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
2026-03-28 16:58:32 +01:00
isUnknown
80efbf3d5f texts : sort and style
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
2026-03-28 16:53:17 +01:00
isUnknown
680871d6e2 side panel : sort texts
All checks were successful
Deploy / Deploy to Production (push) Successful in 7s
2026-03-28 16:39:14 +01:00
isUnknown
b571bc285a article > toc button : top position relative to vw
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
2026-03-28 16:33:55 +01:00
isUnknown
554a650b91 article > toc button : at title leve
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
2026-03-28 16:32:27 +01:00
isUnknown
16b634aba3 article h4 : increase margin top
All checks were successful
Deploy / Deploy to Production (push) Successful in 8s
2026-03-28 16:28:26 +01:00
isUnknown
a352c48eaa refactor : merge light-mode into script.js, rename panel to side-panel, fix print styles
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
Integrate light-mode.js into script.js, unify .panel/.side-panel classes
into .side-panel, scope theme variables to @media screen for proper
print light mode, and add page-break after chapo.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-28 10:59:10 +01:00
isUnknown
a2e65635fb print style
All checks were successful
Deploy / Deploy to Production (push) Successful in 9s
2026-03-28 10:23:58 +01:00
isUnknown
6c1a8c8850 side-panel : refactor nav + toc into single side-panel with view switching
Rename nav.php to side-panel.php to host both navigation and table of contents
views. The panel uses data-view attributes to switch between nav and toc content.
Footer buttons updated to target the unified panel. TOC button now visible on desktop.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-28 09:28:47 +01:00
isUnknown
798123a60a styles : add h4 sizing, spacing and scroll-margin
All checks were successful
Deploy / Deploy to Production (push) Successful in 7s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 19:22:00 +01:00
isUnknown
b724ed1244 toc : add h4 support with nested structure and fix anchors in non-block mode
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 19:18:32 +01:00
isUnknown
4e5440a7ae toc plugin : refactor and fix for grid/linear templates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 19:12:14 +01:00
isUnknown
25d63346c6 body writer : add h4 headings
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
2026-03-27 18:46:41 +01:00
isUnknown
b1b3fcc8f6 linear blueprint : block mode by default
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
2026-03-27 18:43:15 +01:00
isUnknown
2f95bc207b disabled loop plugin
All checks were successful
Deploy / Deploy to Production (push) Successful in 8s
2026-03-27 18:41:34 +01:00
isUnknown
62144384ce optimize image blocks with responsive srcset and webp conversion
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 22:08:04 +01:00
isUnknown
31f1cd0ed5 loop : improve translation
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
2026-03-23 21:43:04 +01:00
isUnknown
ab7fd8b2ea add kirby-loop plugin with French translations
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 21:41:50 +01:00
isUnknown
8ea5f0c462 divider block : increase vertical margin
All checks were successful
Deploy / Deploy to Production (push) Successful in 6s
2026-03-23 21:07:30 +01:00
isUnknown
bfec3daef1 add line divider block
All checks were successful
Deploy / Deploy to Production (push) Successful in 8s
2026-03-23 21:06:18 +01:00
isUnknown
e425d6d141 add quote block, cite custom mark, and blockquote styles
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 08:08:27 +01:00
isUnknown
6ea1325e91 remove useless commented colors 2026-03-23 07:42:29 +01:00
isUnknown
849d96e75c isBlockMode default to false
All checks were successful
Deploy / Deploy to Production (push) Successful in 11s
2026-03-23 07:18:59 +01:00
isUnknown
c195ca6a59 remove assets/dist directory
All checks were successful
Deploy / Deploy to Production (push) Successful in 5s
No longer needed since gulp/babel build pipeline was removed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 17:22:39 +01:00
isUnknown
72a97b81ff add SASS source map
All checks were successful
Deploy / Deploy to Production (push) Successful in 8s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 17:19:13 +01:00
isUnknown
b2ac2b8f79 add Forgejo CI deploy workflow
Replaces GitLab CI. Deploys assets and site via FTP on push to main.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 17:18:21 +01:00
isUnknown
17345c9500 remove gulp and Node dependencies
CSS is now handled by SASS via IDE plugin (watchsass),
Node/gulp build pipeline is no longer needed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 17:11:34 +01:00
isUnknown
ccdfd37fe9 migrate CSS to SCSS
Rename all src/*.css to src/_*.scss partials and convert style.css
to style.scss with SASS imports.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 17:10:44 +01:00
isUnknown
30570cc931 remove tracked .claude files (already in .gitignore)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 17:04:27 +01:00
isUnknown
918b282417 add figure margin in articles and image block blueprint
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 17:04:01 +01:00
isUnknown
e4a04cd127 rename isArchiveMode to isBlockMode with inverted logic
Toggle now controls block mode (on = blocks, off = legacy text).
Update both blueprint conditions and front template to use isBlockMode.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 17:03:35 +01:00
isUnknown
3591af16e4 fix: add missing data-open-panel attribute on home textes button
The button was not opening the navigation panel because it lacked the
data-open-panel="text" attribute that the JS click handler requires.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 16:52:48 +01:00
isUnknown
d3b9220931 add plugin web2print 2026-03-09 10:14:25 +01:00
1f024a7e71 sommaire > table des matières 2026-02-20 17:14:40 +01:00
276c567bc8 newsletter blueprint add label and adjust layout. Sommaire > table des matières 2026-02-20 17:13:42 +01:00
01c5b098e4 refactoring avec claude + ajout scroll-margin-top et désaffichage du panel au click sur les liens du toc 2026-02-17 18:10:04 +01:00
d51fc592ed implémentation de la toc complete pour linear 2026-02-17 17:32:27 +01:00
0de3b29e8b début de mise en place de la toc. le design reste à voir 2026-02-16 16:11:36 +01:00
e210ed40f6 merge avec light_mod 2026-02-16 11:30:14 +01:00
e82ad2f4a8 Merge branch 'light_mod' of https://forge.studio-variable.com/Adrien/actuel-inactuel into light_mod 2026-02-16 11:23:12 +01:00
c5a130f9a5 close #46 : optimisation des images en reprenant le template du snipet pour les blocks image 2026-02-13 17:04:51 +01:00
f792954e04 ajout du champs blockBody dans le template. Avec possibilité de mettre des image. L'ancien champs s'affichera toujour si le nouveau est vide 2026-02-13 13:11:37 +01:00
bb5d12cb36 Mode archive ajouter pour visionner les linear avec l'ancien champs corp plus ajout du nouveau champs corp avec block 2026-02-12 15:53:28 +01:00
861cc67ccc closes #48 : date d'inscription associé au subscriber ajouter à la mailing list 2026-02-12 11:06:53 +01:00
3f5595144d j'avais oublié : header.php, linear.php, grid.php pour l'implémentation du allYears(). Peut-etr que ça vaudrait le coup de refactorisé tout ça parceque ça fait beaucoup de duplication 2026-02-09 22:44:13 +01:00
d4b7a3f3fb correction du champs linkedTexts pour ne pas in clure les page de la section texts 2026-02-09 22:32:19 +01:00
9789b645ff ajout d'une fonction pour faire dans l'autre sens : avoir toute les date (parent et linked) + implémentation de la fonction 2026-02-09 22:24:17 +01:00
7501e2cbb7 ajout des page lié pour le template year 2026-02-09 21:22:52 +01:00
d91455a0b4 corection des style css du panel pour ne pas avoir le before et le margin bottom sur la liste des pages liés 2026-02-09 21:10:27 +01:00
dee8f94182 ajout de la methode allTexts() dans site\models\year.php 2026-02-09 20:57:56 +01:00
344af4c0fe modification du blueprint year pour pouvoir séléctionner une page dans une autre année 2026-02-09 19:53:17 +01:00
9aece68498 fix les couleur du panel 2025-12-02 16:58:53 +01:00
20e305744f ajustement alignement toggle-mode ordi fix #42 2025-11-28 18:27:04 +01:00
8e9464f248 rééquilibrage marge (s'inscrire, à propos) 2025-11-24 12:03:36 +01:00
00ffa70d4c correction bouton du bas telephone, placement z-index 2025-11-24 11:58:20 +01:00
57b2e432e2 ajout du bouton de switch + quelque reglage des input 2025-11-21 15:32:57 +01:00
af6feaf913 ajusustement typo 2025-11-21 10:21:52 +01:00
1d95a53126 Front > nav > panel__item : changement de couleur barre left 2025-11-20 17:58:41 +01:00
0585421854 début implémentation light-mode avec son script : remplacement de tout les valeur de couleur par varriable corespondante, text-shadow autour de du logo pour le contour, changement de fonctionnement pour que svg puisse changer de couleur 2025-11-20 17:31:26 +01:00
isUnknown
8f9e75126e SEO : add tombi mori plugin 2025-05-13 09:03:14 +02:00
isUnknown
df2843123f fix strong tag font weight 2025-04-26 10:24:06 +02:00
isUnknown
78a63a9d60 footnote force style regular 2025-04-24 09:45:55 +02:00
isUnknown
e8e23379b0 fix strong fw bold 2025-04-24 09:44:51 +02:00
isUnknown
bf20f1d394 add space 2025-03-14 18:38:44 +01:00
isUnknown
772d310fa9 remove 'publication prévue le' 2025-02-27 08:18:48 +01:00
isUnknown
cba733c14c home page remove pointer events on header 2025-02-25 11:38:49 +01:00
isUnknown
6a841d3b57 normalize sup tag 2025-02-21 16:16:43 +01:00
isUnknown
5d63958374 article titles : adjust line height 2025-02-21 16:13:23 +01:00
isUnknown
b019b99284 fix nav spacing 2025-02-21 16:05:25 +01:00
isUnknown
9f65afaf70 unlock articles 2025-02-21 15:02:17 +01:00
isUnknown
bb924bed7b finish year page 2025-02-21 14:44:43 +01:00
isUnknown
9d3800690d adjust title wrapper h1 mgbt 2025-02-21 13:29:23 +01:00
isUnknown
7f661597ba fix category page 2025-02-21 13:24:06 +01:00
isUnknown
a1d945a8ab fix category page 2025-02-21 13:08:53 +01:00
isUnknown
18db74998d fix grid column spacing mobile 2025-02-21 12:43:48 +01:00
isUnknown
28fc768228 fix open nav button home 2025-02-21 12:30:54 +01:00
isUnknown
5496ae3964 h3 spacing 2025-02-21 09:41:30 +01:00
isUnknown
b6a573e7ad link break word 2025-02-21 09:38:53 +01:00
isUnknown
6c245966e1 mobile : center text button. homogenize close / open nav btns 2025-02-21 09:37:28 +01:00
isUnknown
455801a0d2 fix page cover top 2025-02-21 08:33:37 +01:00
isUnknown
217dde5842 desktop : page-cover min height 2025-02-21 08:26:11 +01:00
isUnknown
949d7437a4 fix title word wrapping 2025-02-21 08:20:01 +01:00
isUnknown
328fd95842 fix links overflow 2025-02-21 08:15:06 +01:00
isUnknown
915f3e91b5 body overflow-x hidden 2025-02-21 08:00:42 +01:00
isUnknown
dc3750ffb7 fix home page-cover 2025-02-21 07:58:58 +01:00
isUnknown
205dac3fde adjust page-cover 2025-02-21 07:58:25 +01:00
isUnknown
f951d3e5d6 remove footnote before space. Add underline on target 2025-02-21 07:30:28 +01:00
isUnknown
a5d8f4dc80 change footnote number color 2025-02-21 07:24:10 +01:00
isUnknown
0766e64b96 fix #31 2025-02-18 17:11:09 +01:00
isUnknown
b4217f80d4 add additionnalCss 2025-02-18 10:16:52 +01:00
isUnknown
08c2f57d6e improve main width 2025-02-18 09:58:31 +01:00
isUnknown
8629d58240 chapo : remove italic 2025-02-17 19:23:38 +01:00
isUnknown
57edf14f53 footer mobile : links only on home page and align left 2025-02-17 19:21:58 +01:00
isUnknown
60709ab632 fix body front 2025-02-17 19:13:21 +01:00
isUnknown
7f4eb816c1 consistancy isHtmlMode 2025-02-17 19:02:18 +01:00
isUnknown
23153263a0 fix linear body 2025-02-17 19:01:26 +01:00
isUnknown
be447667cc add html mode 2025-02-17 17:57:53 +01:00
isUnknown
72a84c9283 nav : increase spacing at the end of the collection list 2025-02-17 17:17:34 +01:00
isUnknown
4758048e61 ajustement graisse actuel 2025-02-13 10:08:34 +01:00
isUnknown
d76a53a3f6 remove useless variable 2025-02-10 10:05:04 +01:00
isUnknown
21e058b336 newsletter - little fixes 2025-02-09 17:36:12 +01:00
isUnknown
025b3a1d08 css build 2025-02-07 15:40:51 +01:00
isUnknown
ff2b7663a2 nav : adjust texts list spacing 2025-02-07 15:39:24 +01:00
isUnknown
1dad30e71a nav : remove sbtt mgt 2025-02-07 11:28:47 +01:00
isUnknown
014858fe82 css build 2025-02-07 10:49:53 +01:00
isUnknown
d5d0b29fb0 nav : add subtitle spacing 2025-02-07 10:46:52 +01:00
isUnknown
989f042158 email : create split panel 2025-02-07 10:44:01 +01:00
isUnknown
b525ea4f5c newsletter : liste d'adresse de test, écriture des logs 2025-02-06 18:34:46 +01:00
isUnknown
c053ce2d27 script d'envoi de newsletter en masse terminé 2025-02-06 17:28:09 +01:00
isUnknown
2e718f61ae nav : fix subtitle size 2025-02-06 15:37:36 +01:00
isUnknown
bd2503fb52 fix cedric problem wekbit line clamp 2025-02-06 15:36:45 +01:00
isUnknown
62c13dccee formulation 2025-02-06 13:28:38 +01:00
isUnknown
dd4be3e2fb fix date mistake 2025-02-06 13:16:29 +01:00
isUnknown
1cd5360a1a nav : mettre publication à venir plutôt que la date de publication 2025-02-06 13:14:57 +01:00
isUnknown
f903d12369 nav subtitles : adjust spacing 2025-02-06 13:06:01 +01:00
isUnknown
d54ed28aa0 nav - show subtitles 2025-02-06 13:03:33 +01:00
isUnknown
3a6ff118bc comment text footer button 2025-02-06 12:57:13 +01:00
isUnknown
3dd3286bb8 display footer on home page only 2025-02-06 11:38:29 +01:00
isUnknown
4f6e32bfaa send newsletter working through API for one adress 2025-02-05 16:01:16 +01:00
isUnknown
08323f4a02 remove composer install ci 2025-02-05 15:49:45 +01:00
isUnknown
b6df7adc6a add composer install to ci 2025-02-05 15:48:29 +01:00
isUnknown
cb5e08d3fc try send emails through mailerSend API 2025-02-05 15:44:09 +01:00
isUnknown
04b04ccf6a give access to texts 2025-02-05 15:02:44 +01:00
isUnknown
9b9e5a2ef7 batch email send 2025-02-05 13:51:13 +01:00
isUnknown
dde483ee20 fix mobile footer 2025-02-04 19:23:27 +01:00
isUnknown
669a35daaf fix unsubscribe route 2025-02-04 19:11:10 +01:00
isUnknown
0e7fa10ab3 fix unsuscribe route 2025-02-04 19:07:25 +01:00
isUnknown
5f3a577c1c update plugin 2025-02-04 19:00:47 +01:00
isUnknown
f76e3d9fb3 newsletter : handle errors 2025-02-04 19:00:27 +01:00
isUnknown
72fff85a8c change SMTP config 2025-02-04 18:17:31 +01:00
isUnknown
2ad2c593ce enable security 2025-02-04 17:41:02 +01:00
isUnknown
f095954a33 add unsubscribe and view mail on the web buttons 2025-02-04 17:35:09 +01:00
isUnknown
8bdd63afe2 fix html 2025-02-04 10:12:01 +01:00
isUnknown
416d8e94b3 add favicon 2025-02-04 09:54:20 +01:00
isUnknown
b2853043c8 disable ragadjust for h3 nodes 2025-02-04 09:33:15 +01:00
isUnknown
7d577654a4 fix nav panel texts list spacing 2025-02-03 16:43:24 +01:00
isUnknown
be631dbe67 save 2025-02-03 16:39:43 +01:00
isUnknown
84a8437ad2 fix year and panel texts list spacing 2025-02-03 16:36:42 +01:00
isUnknown
fc267d80d1 fix #15 2025-02-03 16:32:36 +01:00
isUnknown
1e91353c86 #16 2025-02-03 15:29:26 +01:00
isUnknown
3fd93ac292 #14 2025-02-03 15:18:39 +01:00
isUnknown
172923fc6d #11 2025-02-03 15:15:13 +01:00
isUnknown
1c2c45e5ab #26 2025-02-03 14:58:37 +01:00
isUnknown
4cdb92017b #9 2025-02-03 14:36:43 +01:00
isUnknown
4172bba4cc #10 2025-02-03 14:06:04 +01:00
isUnknown
979106e8eb #11 2025-02-03 13:48:12 +01:00
isUnknown
69f4cddd00 fix #11 2025-02-03 13:32:17 +01:00
isUnknown
5d927217f9 fix #13 2025-02-03 12:16:37 +01:00
isUnknown
5d09b519c3 fix #17 2025-02-03 12:13:52 +01:00
isUnknown
32b81867e5 fix #12 2025-02-03 12:05:07 +01:00
isUnknown
c4048f8a60 fix #18 2025-02-03 12:03:04 +01:00
isUnknown
9d3d534de3 fix #18 2025-02-03 12:01:13 +01:00
isUnknown
40685d633b refactoring 2025-02-03 10:01:50 +01:00
isUnknown
2af1980274 hide text button 2025-02-03 09:38:55 +01:00
isUnknown
cc3feb0366 fix #23 2025-02-03 09:35:57 +01:00
isUnknown
f1e85efcf9 fix email validation problem 2025-01-28 15:40:24 +01:00
isUnknown
aa237d8628 envoi des mails un par un pour ne pas partager toutes les adresses 2025-01-28 15:31:46 +01:00
isUnknown
b1923e8d4c send email - do not change status if test 2025-01-28 15:06:22 +01:00
isUnknown
afd3df123f send email v1 2025-01-28 14:55:10 +01:00
isUnknown
fe4df9cbd3 fix request -> data 2025-01-28 13:12:23 +01:00
isUnknown
49d48015a8 newsletter config try 2025-01-28 13:10:11 +01:00
isUnknown
7e5872aad1 fix #20 2025-01-27 07:57:48 +01:00
isUnknown
5c467757fe fix #21 2025-01-26 14:44:21 +01:00
isUnknown
b1418ef194 fix #24 2025-01-26 13:11:06 +01:00
isUnknown
aea050f6cc fix #14 2025-01-26 13:00:50 +01:00
isUnknown
6801286c5f fix #16 2025-01-26 12:22:57 +01:00
isUnknown
e3829df88c add + to footnotes links 2024-12-02 17:48:21 +01:00
isUnknown
fdd1650343 cover > title : add title attribute 2024-12-02 17:43:23 +01:00
isUnknown
affda01429 fix pointer events 2024-12-02 17:40:02 +01:00
isUnknown
9aee1ad5b5 fix main > article pointer event 2024-12-02 17:31:52 +01:00
isUnknown
7cda66f837 mobile grid : disable grid 2024-12-02 17:00:28 +01:00
isUnknown
cab0bb1ca4 tune grid layout 2024-12-02 16:52:35 +01:00
isUnknown
5252d51633 improve mobile footer 2024-12-02 16:39:38 +01:00
isUnknown
af1ffe78c6 add bottom margin 2024-12-02 15:30:24 +01:00
isUnknown
9b1aeb5cd0 create body reusable field 2024-12-01 13:57:24 +01:00
isUnknown
1b62fa7589 prepare subscription page 2024-12-01 12:55:24 +01:00
isUnknown
4c5b7677d7 improve home 2024-12-01 12:37:11 +01:00
isUnknown
8e09bceb02 home : center texts button 2024-12-01 12:16:27 +01:00
isUnknown
e3207ee58e aad fields 2024-11-30 18:49:45 +01:00
isUnknown
6f3774a5d7 new design 2024-11-30 18:18:43 +01:00
313 changed files with 30776 additions and 10590 deletions

View file

@ -0,0 +1,32 @@
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
name: Deploy to Production
runs-on: docker
steps:
- name: Checkout code
run: |
git clone --depth 1 --branch main https://oauth2:${{ github.token }}@forge.studio-variable.com/${{ github.repository }}.git .
ls -la
- name: Deploy via FTP
env:
USERNAME: ${{ secrets.USERNAME }}
PASSWORD: ${{ secrets.PASSWORD }}
HOST: ${{ secrets.HOST }}
run: |
apt-get update -qq && apt-get install -y -qq lftp
cat > /tmp/lftp-script.txt <<SCRIPT
set ftp:ssl-allow no
open -u $USERNAME,$PASSWORD $HOST
mirror --reverse --verbose --ignore-time --parallel=10 -x static/ assets assets
mirror --reverse --verbose --ignore-time --parallel=10 -x accounts/ -x cache/ -x sessions/ site site
quit
SCRIPT
lftp -f /tmp/lftp-script.txt

10
.gitignore vendored
View file

@ -51,12 +51,20 @@ Icon
/site/config/.license
# Local files
# ---------------
/0_local
# Managed through composer
# ---------------
/kirby
/vendor
/node_modules
/content
# Claude settings
# ---------------
.claude

BIN
apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

View file

@ -8,3 +8,25 @@
.k-panel-menu-button[aria-current] * {
color: #000;
}
.k-panel[data-template="year"]
.k-section-name-texts
.k-list-items
.k-item:first-child {
margin-bottom: 2rem;
}
.k-panel[data-template="year"] .k-section-name-texts .k-list-items::before {
content: "Texte princeps";
display: block;
padding: 0.5rem;
padding-bottom: 0.7rem;
border-radius: var(--rounded-md) var(--rounded-md) 0 0;
transform: translateY(0.3rem);
background-color: #000;
color: #fff;
}
.k-block-type-quote-citation {
font-style: normal;
}

View file

@ -0,0 +1,88 @@
[data-template="linear"],
[data-template="grid"] {
article #main-content {
scroll-margin-block-start: calc(var(--unit--vertical) * 6);
padding-bottom: calc(var(--unit--vertical) * 2);
margin-top: calc(2 * var(--unit--vertical));
}
#main-content .texts {
margin-top: calc(2 * var(--unit--vertical));
}
#main-content .see-more {
margin-top: calc(var(--unit--vertical) * 0.5);
}
[data-template="year"] article > h1 {
margin-bottom: 0;
}
article #main-content #chapo::after {
content: "";
display: block;
margin-top: calc(2 * var(--unit--vertical));
margin-bottom: calc(4 * var(--unit--vertical));
width: 100%;
height: 1px;
background-color: var(--color-background);
}
article #main-content li:not(.text) {
list-style-type: inherit;
}
article h3,
article h4 {
scroll-margin-top: calc(var(--unit--vertical) * 1);
margin-bottom: calc(1 * var(--unit--vertical));
}
article h3 {
margin-top: calc(3 * var(--unit--vertical));
}
article h4 {
margin-top: calc(2 * var(--unit--vertical));
}
article li,
article ol {
margin-left: var(--unit--horizontal);
}
article figure {
margin: 4rem 0;
}
article figure img {
max-width: 100%;
}
// Quotes
//
blockquote {
border-left: 1px solid #fff;
margin: calc(var(--unit--vertical) * 2) 0;
padding-left: var(--unit--horizontal);
}
blockquote footer {
margin-top: calc(var(--unit--vertical) / 2);
font-size: var(--font-size-m);
}
blockquote.big {
font-weight: var(--font-weight-light);
font-size: var(--font-size-l);
}
@media screen and (max-width: 640px) {
article h3,
article h4 {
scroll-margin-top: calc(var(--unit--vertical) * 5);
}
}
@media screen and (min-width: 640px) {
article #main-content {
max-width: auto;
}
}
}

View file

@ -0,0 +1,89 @@
#main-footer {
position: fixed;
bottom: 0;
box-sizing: border-box;
border-bottom: 0;
z-index: 2;
}
[data-template="home"] #main-footer {
position: fixed;
left: 0;
bottom: 0;
}
#main-footer li:not(.footer-btn-wrapper) {
display: none;
}
#main-footer li {
flex: 1;
}
#main-footer li > * {
width: calc(100% - var(--unit--vertical) * 2);
}
#main-footer button.plus {
transform: translateY(-2px);
}
[data-template="home"] .title-wrapper button.plus[data-open-panel] {
display: inline-block !important;
}
@media screen and (max-width: 640px) {
#main-footer .footer-btn-wrapper button {
display: flex;
justify-content: center;
outline: none;
font-size: var(--font-size-m);
background-color: var(--color-background);
color: var(--color-primary);
line-height: 1;
padding: calc(var(--unit--vertical) / 2) var(--unit--horizontal);
}
#main-footer ul {
bottom: 0;
display: flex;
justify-content: space-around;
border-top: 1px solid var(--color-primary);
background-color: var(--color-background);
}
}
@media screen and (min-width: 640px) {
#main-footer li {
display: block !important;
}
#main-footer {
position: fixed;
left: 0;
bottom: 0;
width: var(--body-padding);
background-color: transparent;
padding: var(--unit--vertical) var(--unit--horizontal);
}
#main-footer ul {
display: block;
}
#main-footer button.plus {
margin-bottom: var(--unit--vertical);
}
[data-template="home"] #main-footer .footer-btn-wrapper {
display: none !important;
}
.footer-btn-wrapper {
padding: 0;
border: none;
background-color: transparent;
}
.side-panel-button-wrapper {
position: fixed;
top: 15vw;
}
}

View file

@ -74,6 +74,18 @@ body {
opacity: var(--opacity-light);
}
.footnote::before {
content: "[";
}
.footnote::after {
content: "]";
}
/* ================= COLORS ================= */
.texts .text {
margin-bottom: var(--unit--vertical);
}
/* ================= COLORS ================= */
.color {
color: var(--color);
@ -84,7 +96,8 @@ body {
/* ================= BUTTONS ================= */
.toggle-btn--left::after,
button.plus::after {
button.plus::after,
button.less::after {
margin-left: var(--unit--horizontal);
}
@ -92,7 +105,8 @@ button.plus::after {
button.plus::after {
content: "+";
}
.toggle-btn--left.open::after {
.toggle-btn--left.open::after,
button.less::after {
content: "-";
}
.toggle-btn--right::before {
@ -108,3 +122,19 @@ button.plus::after {
.transition {
transition: all 0.5s var(--curve-sine);
}
.short {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 5;
overflow: hidden;
/* Do not remove : required not to crop letters descenders */
padding-bottom: 0.16rem;
height: 8.5rem;
}
.see-more {
width: 100%;
margin-top: calc(var(--unit--vertical) / 2);
}

45
assets/css/src/_grid.scss Normal file
View file

@ -0,0 +1,45 @@
body.full-width #desktop-nav {
height: auto;
}
body.full-width #desktop-nav .empty {
height: calc(var(--unit--vertical) / 2);
}
body.full-width #main-content {
position: absolute;
left: 0;
width: 100vw;
padding: 0 var(--unit--horizontal) var(--unit--vertical)
var(--unit--horizontal);
box-sizing: border-box;
}
.grid .column {
grid-column: span var(--span);
}
.grid[data-columns="1"] .column {
grid-column: 11 / span 20;
}
[data-template="grid"] main #main-content {
margin-left: inherit;
}
@media screen and (max-width: 640px) {
.grid .column:not(:last-child) {
margin-bottom: calc(2 * var(--unit--vertical));
}
}
@media screen and (min-width: 640px) {
[data-template="grid"] main #main-content {
margin-left: calc(0px - calc(4 * var(--unit--horizontal)));
}
[data-template="grid"] .grid {
display: grid;
grid-template-columns: repeat(39, 1fr);
column-gap: var(--unit--horizontal);
margin-bottom: calc(var(--unit--vertical) * 2);
}
}

182
assets/css/src/_header.scss Normal file
View file

@ -0,0 +1,182 @@
main {
pointer-events: none;
}
main article > div {
pointer-events: all;
}
.page-cover > * {
pointer-events: all;
}
#main-header {
position: fixed;
z-index: 2;
box-sizing: border-box;
width: 100vw;
padding-top: calc(var(--unit--vertical) / 2);
}
[data-template="home"] #main-header {
pointer-events: none;
}
#logo * {
font-size: 25.3vw;
font-weight: var(--font-weight-extra-bold);
}
#logo span {
height: 20vw;
width: 100%;
box-sizing: border-box;
padding-right: 3vw;
display: flex;
justify-content: flex-end;
align-items: center;
}
#logo {
text-align: right;
}
#logo #actuel {
font-weight: 550;
}
[data-theme="light"] #logo #actuel {
font-weight: 550;
color: white;
text-shadow: -1px 0 var(--color-primary), 1px 0 var(--color-primary), 0 -1px var(--color-primary),0 1px var(--color-primary);
}
#logo #actuel,
#logo #inactuel {
mix-blend-mode: difference;
}
#logo #inactuel {
transition: margin-top 0.3s ease-in-out, transform 0.3s ease-in-out;
}
[data-theme="light"] #logo #inactuel {
mix-blend-mode: difference;
}
#main-header.minimized #inactuel {
margin-top: -20vw;
transform: translateX(-1px) translateY(-1px);
}
#main-header.minimized #inactuel:not([data-template="home"] *) {
transform: translateX(-1px) translateY(-1px) !important;
}
.page-cover,
article > h1 {
padding-top: calc(50vw);
}
.page-cover {
position: relative;
height: 100svh;
box-sizing: border-box;
display: flex;
flex-direction: column;
gap: var(--unit--vertical);
}
[data-template="home"] .page-cover {
padding-top: calc(42.5vw);
}
.page-cover .title-wrapper h1 {
margin-bottom: calc(0.255 * var(--unit--vertical));
}
.page-cover .text-wrapper {
height: 100%;
overflow: auto;
}
button.toggle.left::after,
button.toggle.right::before {
transition: all 0.5s var(--curve-sine);
content: "+";
}
.page-cover .links {
position: absolute;
bottom: calc(var(--unit--vertical) / 2);
width: 100%;
box-sizing: border-box;
}
.page-cover .links li {
display: inline-block;
margin-right: var(--unit--horizontal);
}
[data-template="author"] .page-cover,
[data-template="category"] .page-cover,
[data-template="year"] .page-cover,
[data-template="email"] .page-cover,
[data-template="error"] .page-cover,
[data-template="info"] .page-cover {
height: initial !important;
}
[data-template="author"] .page-cover .links,
[data-template="category"] .page-cover .links,
[data-template="year"] .page-cover .links,
[data-template="email"] .page-cover .links,
[data-template="error"] .page-cover .links,
[data-template="info"] .page-cover .links {
display: none;
}
@media screen and (min-width: 640px) {
body:not([data-template="home"]) #main-header {
width: var(--body-padding);
}
#logo * {
font-size: 26.65vw;
}
#logo span {
padding-right: 1vw;
}
body:not([data-template="home"]) #logo * {
font-size: 5.6vw;
}
body:not([data-template="home"]) #logo span {
height: 5vw;
padding-right: calc(var(--unit--horizontal) - 0.3vw);
}
body:not([data-template="home"]) #main-header.minimized #inactuel {
margin-top: -4.9vw;
transform: translateX(-2px) translateY(-2px);
}
.page-cover:not(
[data-template="author"] .page-cover,
[data-template="year"] .page-cover,
[data-template="category"] .page-cover
) {
height: 100vh;
}
.page-cover,
article > h1 {
padding-top: 15vw;
}
.page-cover {
min-height: calc(22 * var(--unit--vertical));
}
[data-template="home"] .page-cover {
padding-top: calc(42.5vw) !important;
}
.page-cover .links {
display: none;
}
}

View file

@ -0,0 +1,9 @@
.main-edito-btn {
display: inline-block;
margin-right: calc(2 * var(--unit--horizontal));
}
#main-edito {
margin-top: calc(var(--unit--vertical) * 4);
scroll-margin-block-start: 25vw;
}

View file

@ -8,15 +8,32 @@ body {
main {
padding: 0 var(--unit--horizontal);
padding-bottom: calc(2 * var(--unit--vertical)) !important;
}
[data-template="info"] main {
/* [data-template="info"] main {
margin-top: calc(var(--unit--vertical) * 2);
}
} */
hr {
height: 1px;
border: none;
background-color: var(--color-primary);
margin: calc(var(--unit--vertical) * 2) 0;
}
hr::before,
hr::after {
display: flex;
justify-content: center;
color: #fff;
font-size: var(--font-size-m);
font-weight: var(--font-weight-light);
line-height: 0.8;
}
hr::before {
content: "+";
}
hr::after {
content: "+ +";
}
nav hr {
@ -38,7 +55,7 @@ html {
* {
scrollbar-width: thin;
scrollbar-color: rgba(255, 255, 255, 0.25) transparent;
scrollbar-color: var(--color-primary) transparent;
}
/* Works on Chrome, Edge, and Safari */
@ -53,11 +70,24 @@ html {
}
*::-webkit-scrollbar-thumb {
background-color: rgba(255, 255, 255, 0.25);
background-color: var(--color-primary);
border-radius: 0px;
border: none;
}
code {
font-family: monospace;
font-size: 1rem;
padding: 0.1rem 0.4rem;
background-color: rgba(255, 255, 255, 0.7);
color: #000;
}
[data-theme="light"] code {
background-color: rgba(0, 0, 0, 0.7);
color: #ffff;
}
@media screen and (min-width: 640px) {
body.full-width {
--padding-body: calc(var(--unit--horizontal) * 10);
@ -69,6 +99,7 @@ html {
}
main {
padding: 0 var(--body-padding);
width: min(60vw, 45rem);
padding-left: var(--body-padding);
}
}

View file

@ -0,0 +1,35 @@
#subscribe-btn-wrapper {
height: 2.5rem;
margin-bottom: 0.2rem;
}
#subscribe-form {
position: relative;
width: fit-content;
}
#subscribe-form input {
background-color: transparent;
border: none;
box-sizing: border-box;
padding-bottom: 0.3rem;
padding-right: 2rem;
width: 15rem;
border-bottom: 1px solid var(--color-primary);
color: var(--color-primary);
caret-color: var(--color-primary);
}
#subscribe-form input::placeholder {
color: var(--color-primary);
opacity: 0.55;
}
#subscribe-form input:focus-visible {
outline: none;
}
#subscribe-form button[type="submit"] {
color: var(--color-primary);
position: absolute;
top: 0;
right: 0;
}

View file

@ -0,0 +1,71 @@
@media print {
.side-panel,
nav,
.toggle-light {
display: none;
}
:root,
[data-theme="dark"] {
--color-background: #ffffff;
--color-primary: #000;
--color-secondary-rgb: 140, 140, 140;
--font-weight-light: 240;
}
body {
padding-top: 8rem;
background-image: none;
background-color: var(--color-background) !important;
}
.minimized #inactuel {
transform: none !important;
margin: 0 !important;
}
#logo h1 {
display: grid;
grid-template-columns: 100%;
grid-template-rows: auto;
}
#logo #actuel,
#logo #inactuel {
grid-column: 1;
grid-row: 1;
}
#logo #actuel {
font-weight: 550;
color: rgb(254, 250, 254) !important;
text-shadow: -1px 0 var(--color-primary), 1px 0 var(--color-primary),
0 -1px var(--color-primary), 0 1px var(--color-primary);
z-index: 100;
}
#logo #inactuel {
z-index: 0;
}
.main-title.fs-xxl {
font-size: 7rem !important;
line-height: 1 !important;
}
#main-header {
position: relative;
}
#entry-btns {
display: none;
}
a {
text-decoration: none !important;
}
#chapo {
page-break-after: always;
}
article #main-content {
width: 70%;
margin: auto;
}
}

View file

@ -6,7 +6,8 @@ h3,
h4,
h5,
p,
ul {
ul,
figure {
margin: 0;
padding: 0;
}

View file

@ -1,8 +1,7 @@
/* ================= PANELS ================= */
#nav-overlay {
position: fixed;
inset: 0;
background-color: #000;
background-color: var(--color-background);
opacity: 0.7;
z-index: 2;
cursor: w-resize;
@ -11,31 +10,31 @@
display: none;
}
.panel {
.side-panel {
display: none;
position: fixed;
overflow: auto;
width: 100vw;
height: 100dvh;
top: 0;
background-color: #000;
outline: 1px solid #fff;
background-color: var(--color-background);
outline: 1px solid var(--color-primary);
transition: all 0.5s var(--curve-sine);
z-index: 3;
box-sizing: border-box;
scroll-behavior: smooth;
flex-direction: column;
}
.panel.panel--visible {
.side-panel.side-panel--visible {
display: flex;
}
.panel header {
.side-panel header {
position: sticky;
top: 0;
z-index: 1;
background-color: #000;
background-color: var(--color-background);
padding: var(--unit--vertical) var(--unit--horizontal);
padding-bottom: 0;
}
@ -65,10 +64,13 @@
position: relative;
width: 100%;
margin-top: var(--unit--vertical);
background-color: #000;
background-color: var(--color-background);
z-index: 1;
top: 0;
box-sizing: border-box;
border-bottom: 1px solid var(--color-primary);
display: flex;
align-items: center;
}
.search__input {
all: unset;
@ -76,137 +78,148 @@
background-color: transparent;
padding: calc(var(--unit--vertical) / 4) 0;
border: none;
border-bottom: 1px solid #fff;
color: #fff;
border-bottom: 1px solid var(--color-background);
color: var(--color-primary);
font-size: var(--font-size-m);
font-weight: var(--font-weight-light);
caret-color: var(--color-primary);
}
.search__input::placeholder {
color: var(--color-primary);
font-size: var(--font-size-sm);
letter-spacing: 1px;
opacity: 0.55;
}
.search__icon {
all: unset;
position: absolute;
width: 1.2rem;
height: 1.2rem;
width: 0.2rem;
height: 0.2rem;
padding: 0.5rem;
right: 0;
transform: translateX(0.5rem) translateY(0.2rem);
/* transform: translateY(0.2rem); */
background-color: var(--color-primary);
mask: var(--icon-search) no-repeat center;
mask-size: contain;
-webkit-mask: var(--icon-search) no-repeat center;
-webkit-mask-size: contain;
}
button.search__icon {
cursor: pointer;
}
.panel__collection {
.side-panel__collection {
scroll-behavior: smooth;
height: 100%;
overflow: auto;
padding: var(--unit--vertical) var(--unit--horizontal);
}
.panel-close {
footer {
width: 100%;
}
.side-panel-close {
position: fixed;
box-sizing: border-box;
bottom: 0;
justify-content: center;
width: 100%;
outline: none;
border-top: 1px solid #fff;
border-top: 1px solid var(--color-primary);
font-size: var(--font-size-m);
background-color: #000;
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;
}
/* ================= LISTS ================= */
.panel__toggle-btn {
.side-panel__toggle-btn {
width: 100%;
display: flex;
justify-content: space-between;
margin-bottom: var(--unit--vertical);
}
.panel__toggle-icon {
.side-panel__toggle-icon {
color: var(--color-secondary);
font-size: var(--font-size-xl);
}
/* ================= YEARS ================= */
.panel-item-content__edito {
.side-panel__collection .side-panel__item:last-child {
margin-bottom: 6rem;
}
.side-panel-item-content__edito {
margin-bottom: calc(var(--unit--vertical) / 2);
}
.panel-item-content__edito.short {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 5;
overflow: hidden;
.side-panel-item-content__edito p:not(:last-child) {
margin-bottom: var(--unit--vertical);
}
button.see-more {
margin-bottom: var(--unit--vertical);
}
.panel-item-content__texts:not(.panel__collection .panel-item-content__texts) {
.side-panel-item-content__texts:not(
.side-panel__collection .side-panel-item-content__texts
) {
padding: var(--unit--vertical) var(--unit--horizontal);
}
/* ================= TEXT ITEM ================= */
.text {
margin-bottom: var(--unit--vertical);
.side-panel .text:first-child,
.side-panel .text:last-child {
margin-bottom: calc(var(--unit--vertical) * 2);
}
.side-panel__item > a {
scroll-margin-top: 9rem;
}
.side-panel__collection--years .text:first-child .text__title {
display: inline-block;
padding-left: var(--unit--horizontal);
}
.side-panel .text__subtitle {
margin-bottom: calc(var(--unit--vertical) / 4);
}
.side-panel__collection--years .text:first-child .text__infos {
padding-left: var(--unit--horizontal);
}
.side-panel__collection--years .text:first-child .text__infos::before {
content: "";
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 1px;
background-color: var(--color-primary);
}
@media screen and (min-width: 640px) {
nav.panel {
.side-panel {
width: 40rem;
}
#subscribe-btn-wrapper {
height: 2.5rem;
margin-bottom: 0.2rem;
}
#subscribe-form {
position: relative;
width: fit-content;
}
#subscribe-form input {
background-color: transparent;
border: none;
border-bottom: 1px solid #fff;
box-sizing: border-box;
padding-bottom: 0.3rem;
padding-right: 2rem;
color: #fff;
width: 15rem;
}
#subscribe-form input:focus-visible {
outline: none;
}
#subscribe-form button[type="submit"] {
color: #fff;
position: absolute;
top: 0;
right: 0;
}
.panel {
z-index: 4;
width: var(--padding-body);
}
.panel-close {
.side-panel-close {
display: none;
}
.panel--right {
.side-panel--right {
right: auto;
left: calc(-100vw - 1px);
}
.panel--right.open {
.side-panel--right.open {
left: 0;
}
}

View file

@ -56,7 +56,7 @@ button.toggle.right.open::before {
.active-tab {
scrollbar-width: thin;
scrollbar-color: #fff transparent;
scrollbar-color: var(--color-background) transparent;
}
/* Works on Chrome, Edge, and Safari */
@ -71,23 +71,11 @@ button.toggle.right.open::before {
}
.active-tab::-webkit-scrollbar-thumb {
background-color: #fff;
background-color: var(--color-background);
border-radius: 1px;
border: none;
}
.texts__year.short .year__edito {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 5;
overflow: hidden;
}
.texts__year .see-more {
width: 100%;
margin-top: calc(var(--unit--vertical) / 2);
}
@media screen and (min-width: 640px) {
[data-template="home"] #tabs {
margin-top: calc(0px - (10 * var(--unit--vertical)));

View file

@ -28,12 +28,14 @@ h4 *,
h5,
h5 *,
p,
p * {
p *:not(strong),
figcaption,
.toc {
font-weight: var(--font-weight-light);
line-height: 1;
}
h2 {
h1 {
font-size: var(--font-size-xl);
}
@ -43,6 +45,12 @@ h3,
color: var(--color-primary);
}
h4,
.h4 {
font-size: var(--font-size-l);
color: var(--color-primary);
}
article h2 {
margin-bottom: calc(var(--unit--vertical) / 2);
}
@ -87,11 +95,11 @@ button,
}
.fs-l {
font-size: var(--font-size-l) !important;
line-height: var(--unit--vertical);
line-height: calc(var(--unit--vertical) * 1.3);
}
.fs-xl {
font-size: var(--font-size-xl) !important;
line-height: calc(var(--unit--vertical) * 1.5) !important;
line-height: calc(var(--unit--vertical) * 2) !important;
}
.fs-xxl {
font-size: var(--font-size-xxl) !important;
@ -137,6 +145,14 @@ button {
align-items: center;
}
a {
word-break: break-word;
}
a > * {
word-break: normal;
}
a * {
transition: font 0.2s ease-in-out;
}
@ -160,20 +176,37 @@ a:not(.no-underline) {
text-decoration-thickness: 0.5px;
}
article p:not(:last-child) {
article p:not(:last-child),
article ul:not(:last-child),
article figure:not(:last-child) {
margin-bottom: var(--unit--vertical);
}
.footnote,
.footnote * {
font-style: normal !important;
scroll-margin-block-start: calc(var(--unit--vertical) * 6);
color: var(--color-secondary);
color: var(--color-primary);
text-decoration: none !important;
font-weight: var(--font-weight-bold) !important;
}
.footnote sup {
all: unset;
}
.footnote:focus-visible,
.footnote:target {
text-decoration: underline !important;
text-underline-offset: 0.5rem;
}
@media screen and (min-width: 640px) {
.title-center {
margin-left: calc(2 * var(--unit--horizontal));
}
.fs-l {
line-height: calc(var(--unit--vertical) * 1.5);
}
}

45
assets/css/src/_toc.scss Normal file
View file

@ -0,0 +1,45 @@
.toc {
display: flex;
flex-direction: column;
justify-content: center;
}
.page-cover .toc {
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);
}
}
.side-panel__view[data-view="toc"] .toc {
padding: var(--unit--vertical) var(--unit--horizontal);
}
.toc_label {
font-size: var(--font-size-m);
margin-bottom: calc(var(--unit--vertical) / 4);
}
.toc > ul {
display: flex;
flex-direction: column;
gap: calc(var(--unit--vertical) / 4);
> li {
> ul {
margin-left: var(--unit--horizontal);
}
}
}
.toc li {
margin-left: 0;
}

View file

@ -0,0 +1,34 @@
.toggle-light {
position: fixed;
right: 0;
bottom: 0;
padding: calc((var(--unit--vertical) / 2) / 2)
calc(var(--unit--horizontal) / 2);
margin: calc((var(--unit--vertical) / 2) / 2)
calc(var(--unit--horizontal) / 2);
margin-bottom: calc(
var(--unit--vertical) - ((var(--unit--vertical) / 2) / 2)
);
z-index: 1;
}
.toggle-light-icon {
width: 1.2rem;
height: 1.2rem;
background-color: var(--color-primary);
mask-size: cover;
-webkit-mask-size: cover;
mask: var(--icon-toggle-light) no-repeat center;
-webkit-mask: var(--icon-toggle-light) no-repeat center;
}
@media screen and (max-width: 640px) {
.toggle-light {
margin-bottom: calc((var(--unit--vertical) / 2) / 2);
}
.toggle-light-icon {
width: 1.1rem;
height: 1.1rem;
}
}

13
assets/css/src/_year.scss Normal file
View file

@ -0,0 +1,13 @@
[data-template="year"] {
#main-content {
ul.texts {
margin-top: calc(var(--unit--vertical) * 2);
> li:first-child {
padding-left: var(--unit--horizontal);
border-left: 1px solid #fff;
margin-bottom: calc(var(--unit--vertical) * 2);
}
}
}
}

View file

@ -1,12 +0,0 @@
article #main-content {
max-width: calc(18 * var(--unit--horizontal));
scroll-margin-block-start: calc(var(--unit--vertical) * 6);
margin-top: calc(var(--unit--vertical) * 2);
padding-bottom: calc(var(--unit--vertical) * 2);
}
@media screen and (min-width: 640px) {
article #main-content {
max-width: auto;
}
}

View file

@ -1,36 +0,0 @@
#main-footer {
position: fixed;
bottom: 0;
width: 100%;
box-sizing: border-box;
padding: var(--unit--horizontal);
}
[data-template="home"] #main-footer {
position: fixed;
left: 0;
bottom: 0;
}
#main-footer ul {
display: flex;
justify-content: center;
gap: calc(2 * var(--unit--horizontal));
}
#main-footer a {
text-shadow: 0 0 2px #000;
-moz-text-shadow: 0 0 2px #000;
-webkit-text-shadow: 0 0 2px #000;
}
@media screen and (min-width: 640px) {
#main-footer {
position: fixed;
left: 0;
bottom: 0;
width: var(--body-padding);
}
#main-footer ul {
display: block;
}
}

View file

@ -1,29 +0,0 @@
body.full-width #desktop-nav {
height: auto;
}
body.full-width #desktop-nav .empty {
height: calc(var(--unit--vertical) / 2);
}
body.full-width #main-content {
position: absolute;
left: 0;
width: 100vw;
padding: 0 var(--unit--horizontal) var(--unit--vertical)
var(--unit--horizontal);
box-sizing: border-box;
}
.grid {
display: grid;
grid-template-columns: repeat(39, 1fr);
column-gap: var(--unit--horizontal);
margin-bottom: calc(var(--unit--vertical) * 2);
}
.grid .column {
grid-column: span var(--span);
}
.grid[data-columns="1"] .column {
grid-column: 11 / span 20;
}

View file

@ -1,142 +0,0 @@
#main-header {
position: fixed;
box-sizing: border-box;
width: 100vw;
padding-top: calc(var(--unit--vertical) / 2);
}
#logo * {
font-size: 26.65vw;
font-weight: var(--font-weight-extra-bold);
}
#logo span {
height: 20vw;
width: 100%;
box-sizing: border-box;
padding-right: 1vw;
display: flex;
justify-content: flex-end;
align-items: center;
}
#logo {
text-align: right;
}
#logo #actuel,
#logo #inactuel {
mix-blend-mode: difference;
}
#logo #inactuel {
transition: margin-top 0.3s ease-in-out, transform 0.3s ease-in-out;
}
#main-header.minimized #inactuel {
margin-top: -20vw;
transform: translateX(-2px) translateY(-2px);
}
#main-header.minimized #inactuel:not([data-template="home"] *) {
transform: translateX(-1px) translateY(-1px) !important;
}
.page-cover {
position: relative;
height: 100svh;
box-sizing: border-box;
padding-top: calc(var(--unit--vertical-relative) * 9);
display: flex;
flex-direction: column;
}
.page-cover .text-wrapper {
height: 100%;
overflow: auto;
}
/* ================= ENTRY BTNS ================= */
#entry-btns {
position: sticky;
position: -webkit-sticky;
top: calc(var(--unit--vertical) * 4);
height: var(--entry-btns-height);
display: flex;
justify-content: space-between;
}
[data-template="info"] #entry-btns {
top: calc(var(--unit--vertical) * 4);
}
[data-template="home"] .entry-btn {
align-items: start;
}
button.toggle.left::after,
button.toggle.right::before {
transition: all 0.5s var(--curve-sine);
content: "+";
}
#entry-btns.minimized {
color: #000;
}
#entry-btns.minimized .entry-btn--left::before,
#entry-btns.minimized .entry-btn--right::after {
background-color: var(--color-secondary);
}
#entry-btns.minimized .entry-btn::before,
#entry-btns.minimized .entry-btn::after {
font-weight: bold;
}
#entry-btns.minimized .entry-btn--left {
padding-right: 4px;
margin-left: calc(-4px - var(--width));
}
#entry-btns.minimized .entry-btn--right {
padding-left: 4px;
margin-right: calc(-4px - var(--width));
}
@media screen and (min-width: 640px) {
body:not([data-template="home"]) #main-header {
width: var(--body-padding);
}
body:not([data-template="home"]) #logo * {
font-size: 6vw;
}
body:not([data-template="home"]) #logo span {
height: 5vw;
}
body:not([data-template="home"]) #main-header.minimized #inactuel {
margin-top: -4.9vw;
transform: translateX(-2px) translateY(-2px);
}
.page-cover:not(
[data-template="author"] .page-cover,
[data-template="year"] .page-cover,
[data-template="category"] .page-cover
) {
height: 100vh;
padding: calc(10 * var(--unit--vertical)) 0;
padding-top: calc(var(--unit--vertical) * 8);
}
[data-template="home"] .page-cover {
padding-top: calc(42.5vw) !important;
}
[data-template="author"] .page-cover,
[data-template="category"] .page-cover,
[data-template="year"] .page-cover {
height: initial;
}
#entry-btns {
display: none;
}
}

View file

@ -1 +0,0 @@

View file

@ -1,67 +0,0 @@
@media print {
/* Hide header / footer infos. */
@page {
margin: 0;
size: auto;
@top-left {
content: none;
}
@top-right {
content: none;
}
@top-center {
content: none;
}
@bottom-left {
content: none;
}
@bottom-right {
content: none;
}
@bottom-center {
content: none;
}
}
body {
padding-top: 4rem;
color: #000;
}
.panel {
display: none;
}
.main-title.fs-xxl {
font-size: 7rem !important;
line-height: 1 !important;
}
#main-header {
position: relative;
}
#logo #actuel {
color: #000;
opacity: 0.8;
}
#logo #inactuel {
color: rgb(86, 217, 163);
}
#entry-btns {
display: none;
}
a {
text-decoration: none !important;
}
article #main-content {
width: 60%;
margin: auto;
}
}

File diff suppressed because it is too large Load diff

1
assets/css/style.css.map Normal file

File diff suppressed because one or more lines are too long

84
assets/css/style.scss Normal file
View file

@ -0,0 +1,84 @@
@import "src/reset";
@import "src/html";
@import "src/generic";
@import "src/texts";
@import "src/header";
@import "src/side-panel";
@import "src/article";
@import "src/virtual";
@import "src/home";
@import "src/grid";
@import "src/newsletter";
@import "src/footer";
@import "src/toggle-light-mode";
@import "src/print";
@import "src/toc";
@import "src/year";
:root {
--color-primary--transparent: rgba(255, 255, 255, 0.86);
--color-secondary-rgb: 200, 200, 200;
--color-secondary: rgba(var(--color-secondary-rgb), 0.86);
--color-secondary--light: rgba(var(--color-secondary-rgb), 0.2);
--color-secondary--x-light: rgb(var(--color-secondary-rgb), 0.1);
--color-tertiary-rgb: 200, 200, 200;
--color-tertiary: rgba(var(--color-tertiary-rgb), 0.86);
--color-tertiary--light: rgba(var(--color-tertiary-rgb), 0.2);
--color-tertiary--x-light: rgb(var(--color-tertiary-rgb), 0.1);
--unit--horizontal: 5vw;
--unit--vertical: 1.7rem;
--unit--vertical-relative: calc(
var(--unit--vertical) * var(--window-height-factor)
);
--font-size-s: 0.8rem;
--font-size-m: calc(var(--font-size-s) * 1.5);
--font-size-l: calc(var(--font-size-m) * 1.5);
--font-size-xl: calc(var(--font-size-l) * 1.5);
--font-size-xxl: calc(var(--font-size-xl) * 1.5);
--font-weight-light: 200;
--font-weight-bold: 400;
--font-weight-extra-bold: 550;
--opacity-light: 0.6;
--curve-sine: cubic-bezier(0.445, 0.05, 0.55, 0.95);
}
@media screen {
[data-theme="dark"] {
--color-background: #000;
--color-primary: #ffffff;
--font-weight-light: 200;
}
[data-theme="light"] {
--color-background: #ffffff;
--color-primary: #000;
--color-secondary-rgb: 140, 140, 140;
--font-weight-light: 240;
}
}
@media screen and (min-width: 640px) {
:root {
--unit--horizontal: 2.5vw;
--unit--vertical: 1.7rem;
--font-size-s: 0.9rem;
--font-size-m: calc(var(--font-size-s) * 1.5);
--font-size-l: calc(var(--font-size-m) * 1.5);
--font-size-xl: calc(var(--font-size-l) * 1.5);
--font-size-xxl: calc(var(--font-size-xl) * 1.5);
/* --font-weight-light: 200;
--font-weight-bold: 400;
--font-weight-extra-bold: 550; */
--body-padding: calc(10 * var(--unit--horizontal));
}
}

63
assets/dist/script.js vendored
View file

@ -1,63 +0,0 @@
"use strict";
var remFactor = 16;
var verticalUnit = 1.3 * remFactor;
function toggleTab(data, tab) {
if (data.activeTab === tab) {
window.scrollTo({
top: 0,
behavior: "smooth"
});
setTimeout(function () {
data.isOpen = false;
data.activeTab = "";
}, 500);
} else {
data.activeTab = tab;
data.isOpen = true;
scrollToElem(".active-tab");
}
}
function scrollToElem(selector) {
document.querySelector(".active-tab").scrollTop = 0;
setTimeout(function () {
var yOffset = -7 * verticalUnit;
var elem = document.querySelector(selector);
var top = elem.getBoundingClientRect().top;
window.scrollTo({
top: top + window.scrollY + yOffset,
behavior: "smooth"
});
}, 100);
}
function setWindowHeightFactor() {
var windowHeight = window.innerHeight;
var min = 650;
var delta = windowHeight - min;
var factor = roundToNearestHalf(delta / 300) + 1;
var head = document.querySelector("head");
var style = document.createElement("style");
style.innerText = ":root { --window-height-factor:".concat(factor, " }");
head.appendChild(style);
}
function roundToNearestHalf(num) {
var round = Math.round(num * 2) / 2;
return Math.max(round, 0);
}
setWindowHeightFactor();
document.addEventListener("DOMContentLoaded", function () {
function toggleLogoState() {
var scrollY = window.scrollY || window.pageYOffset;
if (scrollY > 10) {
document.querySelector("#main-header").classList.add("minimized");
} else {
document.querySelector("#main-header").classList.remove("minimized");
}
}
window.window.scrollTo({
top: 0
});
window.addEventListener("scroll", function () {
toggleLogoState();
});
});

474
assets/dist/style.css vendored
View file

@ -1,474 +0,0 @@
body,
h1,
h2,
h3,
h4,
h5,
html,
p,
ul {
margin: 0;
padding: 0;
}
button {
background: none;
border: none;
padding: 0;
font: inherit;
cursor: pointer;
outline: inherit;
}
a,
button {
color: inherit;
}
a {
text-decoration: none;
}
li {
list-style-type: none;
}
:root {
--color-background: #000;
--color-primary: #fff;
--color-primary--transparent: hsla(0, 0%, 100%, 0.86);
--color-secondary: rgba(120, 171, 150, 0.86);
--color-secondary--light: rgba(119, 177, 157, 0.2);
--color-secondary--x-light: rgba(119, 177, 157, 0.1);
--unit--horizontal: 5vw;
--unit--vertical: 1.7rem;
--unit--vertical-relative: calc(
var(--unit--vertical) * var(--window-height-factor)
);
--font-size-s: 0.8rem;
--font-size-m: calc(var(--font-size-s) * 1.5);
--font-size-l: calc(var(--font-size-m) * 1.5);
--font-size-xl: calc(var(--font-size-l) * 1.5);
--font-size-xxl: calc(var(--font-size-xl) * 1.5);
--font-weight-light: 200;
--font-weight-bold: 400;
--font-weight-extra-bold: 550;
}
@media screen and (min-width: 640px) {
:root {
--color-background: #000;
--color-primary: #fff;
--color-primary--transparent: hsla(0, 0%, 100%, 0.86);
--color-secondary: rgba(120, 171, 150, 0.86);
--color-secondary--light: rgba(119, 177, 157, 0.25);
--color-secondary--x-light: rgba(119, 177, 157, 0.15);
--unit--horizontal: 5vw;
--unit--vertical: 1.7rem;
--font-size-s: 0.9rem;
--font-size-m: calc(var(--font-size-s) * 1.5);
--font-size-l: calc(var(--font-size-m) * 1.5);
--font-size-xl: calc(var(--font-size-l) * 1.5);
--font-size-xxl: calc(var(--font-size-xl) * 1.5);
--font-weight-light: 200;
--font-weight-bold: 400;
--font-weight-extra-bold: 550;
}
}
body {
box-sizing: border-box;
padding: 0 var(--unit--horizontal);
background-color: var(--color-background);
color: var(--color-primary);
}
body,
main {
position: relative;
}
hr {
height: calc(var(--unit--vertical) / 2);
border: none;
background-color: var(--color-primary);
width: calc(var(--unit--horizontal) * 4);
margin: calc(var(--unit--vertical) * 2) calc(var(--unit--horizontal));
}
nav hr {
background-color: var(--color-background);
margin-left: 0;
}
body,
html {
scroll-behavior: smooth;
}
* {
scrollbar-width: thin;
scrollbar-color: transparent transparent;
}
::-webkit-scrollbar {
width: 6px;
height: 6px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background-color: transparent;
border-radius: 0;
border: none;
}
@media screen and (min-width: 640px) {
body {
padding: 0 calc(6 * var(--unit--horizontal));
}
}
.hidden {
display: none;
}
.background-grid {
background-size: var(--unit--horizontal) var(--unit--vertical);
background-image: linear-gradient(
90deg,
var(--color-secondary--x-light) 1px,
transparent 0
),
linear-gradient(180deg, var(--color-secondary--light) 1px, transparent 0),
linear-gradient(180deg, var(--color-secondary--x-light) 1px, transparent 0);
background-position: 0 0, 0 0, 0 calc(var(--unit--vertical) / 2);
background-attachment: fixed;
}
.left:not(.padding) {
margin-left: calc(var(--unit--horizontal) * var(--left));
}
.padding.left {
padding-left: calc(var(--unit--horizontal) * var(--left));
}
.top:not(.padding) {
margin-top: calc(var(--unit--vertical) * var(--top));
}
.padding.top {
padding-top: calc(var(--unit--vertical) * var(--top));
}
.right:not(.padding) {
margin-right: calc(var(--unit--horizontal) * var(--right));
}
.padding.right {
padding-right: calc(var(--unit--horizontal) * var(--right));
}
.bottom:not(.padding) {
margin-bottom: calc(var(--unit--vertical) * var(--bottom));
}
.padding.bottom {
padding-bottom: calc(var(--unit--vertical) * var(--bottom));
}
.full-width {
width: 100%;
}
.width {
width: calc(var(--unit--horizontal) * var(--width));
}
.flex {
display: flex;
justify-content: var(--content);
align-items: var(--align);
gap: calc(var(--gap) * var(--unit--horizontal));
}
.flex.column {
flex-direction: column;
}
.color {
color: var(--color);
}
.opacity {
opacity: var(--opacity);
}
@font-face {
font-family: Switzer-Variable;
src: url(/assets/fonts/Switzer-Variable.woff2) format("woff2"),
url(/assets/fonts/Switzer-Variable.woff) format("woff"),
url(/assets/fonts/Switzer-Variable.ttf) format("truetype");
font-weight: 100 900;
font-display: swap;
font-style: normal;
}
.accent {
color: var(--color-secondary);
font-weight: 400;
}
* {
font-family: Switzer-Variable, sans-serif;
}
#logo * {
font-size: 25vw;
line-height: 4rem;
transform: translate(-2px, -13px);
font-weight: var(--font-weight-extra-bold);
}
h1,
h2,
h3,
h4,
h5,
p {
font-weight: var(--font-weight-light);
line-height: 1;
}
h2 {
font-size: var(--font-size-xl);
}
article h2 {
margin-bottom: calc(var(--unit--vertical) / 2);
}
.title-center {
--margin-left: calc(4 * var(--unit--horizontal));
width: calc(100% - var(--margin-left));
margin-left: var(--margin-left);
font-size: var(--font-size-l);
line-height: var(--unit--vertical);
}
.main-title {
line-height: calc(var(--unit--vertical) * 2);
text-align: left;
box-sizing: border-box;
font-weight: var(--font-weight-light);
margin-bottom: var(--unit--vertical);
}
.texts__title {
font-size: var(--font-size-l);
}
.fs-m,
button,
li,
p {
transform: translateY(calc(var(--unit--vertical) * 0.12));
font-size: var(--font-size-m);
line-height: calc(var(--unit--vertical));
}
.fs-s {
font-size: var(--font-size-s) !important;
}
.fs-m {
font-size: var(--font-size-m) !important;
}
.fs-l {
font-size: var(--font-size-l) !important;
}
.fs-xl {
font-size: var(--font-size-xl) !important;
line-height: calc(var(--unit--vertical) * 1.5) !important;
}
.fs-xxl {
font-size: var(--font-size-xxl) !important;
line-height: calc(var(--unit--vertical) * 2.5) !important;
}
.fw-light,
button,
li,
p {
font-weight: var(--font-weight-light);
}
.fw-bold {
font-weight: var(--font-weight-bold);
}
.fw-extra-bold {
font-weight: var(--font-weight-extra-bold);
}
.f-inherit {
font-size: inherit;
line-height: inherit;
font-weight: inherit;
}
.ta-center {
text-align: center;
}
p {
transform: translateY(3px);
}
button {
display: flex;
align-items: center;
}
a * {
transition: font 0.2s ease-in-out;
}
a.no-underline:hover * {
font-weight: 250;
}
a:not(.no-underline):hover {
text-decoration: none;
}
a:not(.no-underline) {
text-decoration: underline;
text-decoration-color: inherit;
text-decoration-line: underline;
text-underline-offset: 0.2rem;
text-decoration-thickness: 0.5px;
}
article p:not(:last-child) {
margin-bottom: var(--unit--vertical);
}
@media screen and (min-width: 640px) {
.title-center {
margin-left: calc(2 * var(--unit--horizontal));
}
}
#main-header {
position: fixed;
z-index: 1;
top: 0;
left: 0;
box-sizing: border-box;
width: 100vw;
height: calc(var(--unit--vertical) * 5);
padding: var(--unit--vertical) var(--unit--horizontal);
transition: height 0.2s ease-in-out;
}
#logo {
position: relative;
}
#main-header.open #actuel {
color: var(--color-background);
}
#logo #actuel {
color: var(--color-primary--transparent);
position: relative;
z-index: 1;
}
#logo #inactuel {
position: absolute;
z-index: 0;
color: var(--color-secondary);
bottom: -48%;
transition: bottom 0.2s ease-in-out;
}
#main-header.minimized #logo #inactuel {
bottom: 0;
}
.page-cover {
position: relative;
box-sizing: border-box;
height: 100svh;
display: flex;
flex-direction: column;
justify-content: space-between;
padding-top: calc(var(--unit--vertical-relative) * 5);
padding-bottom: calc(5 * var(--unit--vertical));
}
.page-cover.open + * {
margin-top: calc(var(--unit--vertical-relative) * 19);
}
[data-template="home"] .page-cover {
padding-top: calc(var(--unit--vertical-relative) * 6);
}
#category .page-cover {
height: auto;
padding-bottom: 0;
margin-bottom: calc(2 * var(--unit--vertical));
}
#category .active-tab {
max-height: none;
}
@media screen and (min-width: 640px) {
#main-header {
display: flex;
justify-content: center;
}
#logo {
width: 37vw;
}
#logo * {
font-size: 11vw;
}
#main-header.minimized {
height: calc(var(--unit--vertical) * 4.3);
}
.page-cover {
padding: calc(10 * var(--unit--vertical)) 0;
}
}
.toggle-btns {
position: sticky;
}
button.toggle.open:not(.see-more) {
font-weight: 700;
}
button.toggle.left:after {
margin-left: var(--unit--horizontal);
}
button.toggle.left.close:after {
content: "+";
}
button.toggle.left.open:after {
content: "-";
}
button.toggle.right:before {
margin-right: var(--unit--horizontal);
}
button.toggle.right.close:before {
content: "+";
}
button.toggle.right.open:before {
content: "-";
}
#tabs {
position: absolute;
width: 100%;
z-index: 1;
bottom: calc(var(--unit--vertical-relative) * 4);
}
.active-tab {
position: absolute;
max-height: calc(var(--unit--vertical-relative) * 17);
overflow: auto;
transition: max-height 0.5s ease-in-out;
padding: var(--unit--vertical) 0;
scrollbar-width: thin;
scrollbar-color: #fff transparent;
}
.active-tab::-webkit-scrollbar {
width: 3px;
height: auto;
}
.active-tab::-webkit-scrollbar-track {
background: transparent;
}
.active-tab::-webkit-scrollbar-thumb {
background-color: #fff;
border-radius: 1px;
border: none;
}
.texts__year.short .year__edito {
display: -webkit-box;
-webkit-line-clamp: 5;
overflow: hidden;
}
.texts__year .see-more {
width: 100%;
margin-top: calc(var(--unit--vertical) / 2);
}
@media screen and (min-width: 640px) {
[data-template="home"] #tabs {
margin-top: calc(0px - (10 * var(--unit--vertical)));
}
button.toggle.left:after {
margin-left: calc(var(--unit--horizontal) / 2);
}
button.toggle.right:before {
margin-right: calc(var(--unit--horizontal) / 2);
}
}
.article-header .title-wrapper {
--margin-left: 2;
width: calc(100% - (var(--margin-left) * var(--unit--horizontal)));
padding-left: calc(var(--margin-left) * var(--unit--horizontal));
}
#main-footer {
position: fixed;
left: 0;
bottom: 0;
width: calc(18 * var(--unit--horizontal));
padding: var(--unit--horizontal);
}
#main-footer a {
text-shadow: 0 0 2px #000;
-moz-text-shadow: 0 0 2px #000;
-webkit-text-shadow: 0 0 2px #000;
}
@media screen and (min-width: 640px) {
#main-footer {
padding: calc(var(--unit--horizontal) / 2) var(--unit--horizontal);
}
}

View file

@ -1,5 +1,5 @@
:root {
--fc-border: 2px solid #000;
--fc-border: 2px solid var(--color-primary);
--fc-border-light: 1px solid #999;
--fc-font-size-m: 1.2rem;
--fc-font-size-s: calc(var(--fc-font-size-m) / 1.3);
@ -91,7 +91,7 @@
.fc__edition-panel textarea {
position: relative !important;
resize: none !important;
color: #000 !important;
color: var(--color-primary) !important;
font-family: sans-serif !important;
font-weight: 100 !important;
@ -108,14 +108,14 @@
.fc__edition-panel__btns {
display: flex;
background-color: #fff;
background-color: var(--color-background);
margin-top: 0.5rem;
}
.fc__edition-panel__btns button {
all: initial;
color: #000;
color: var(--color-primary);
font-family: sans-serif;
font-weight: 100;
text-align: center;
@ -124,7 +124,7 @@
width: 100%;
padding: 0.5rem;
border: var(--fc-border) !important;
background-color: #fff;
background-color: var(--color-background);
cursor: pointer;
}
.fc__edition-panel__btns button:first-child {
@ -145,7 +145,7 @@
height: 2.9rem;
scroll-margin-top: 6rem;
color: #000;
color: var(--color-primary);
font-family: sans-serif;
font-size: var(--fc-font-size-m);
font-weight: 500;
@ -162,12 +162,12 @@
width: 20rem;
padding: 1rem;
background-color: #fff;
background-color: var(--color-background);
border: var(--fc-border) !important;
}
.fc__comment * {
color: #000 !important;
color: var(--color-primary) !important;
font-family: sans-serif !important;
font-weight: 100 !important;
}
@ -248,20 +248,20 @@
.fc__context-item:not(:last-child) {
padding-bottom: 0.5rem;
margin-bottom: 0.5rem;
border-bottom: 1px dotted #000;
border-bottom: 1px dotted var(--color-primary);
}
.fc__open-window {
background-color: transparent;
border: 1px solid #000;
border: 1px solid var(--color-primary);
border-radius: 0;
cursor: pointer;
margin-left: 1rem;
}
.fc__open-window:hover {
background-color: #000;
color: #fff !important;
background-color: var(--color-primary);
color: var(--color-background) !important;
}
/* ================= END CONTEXT ================= */
@ -281,8 +281,8 @@
border: var(--fc-border);
}
.fc__suggestion:hover {
color: #fff;
background-color: #000;
color: var(--color-background);
background-color: var(--color-primary);
}
.fc__suggestion--edit {
background-color: rgba(0, 0, 0, 0.1) !important;
@ -292,8 +292,8 @@
position: absolute;
z-index: 999;
width: 20vw;
background-color: #fff;
color: #000;
background-color: var(--color-background);
color: var(--color-primary);
border: var(--fc-border);
padding: 1rem;
left: -0.1rem;

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="bi bi-circle-half" viewBox="0 0 16 16">
<path d="M8 15A7 7 0 1 0 8 1zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16"/>
</svg>

After

Width:  |  Height:  |  Size: 181 B

31
assets/js/light-mode.js Normal file
View file

@ -0,0 +1,31 @@
(function () {
const root = document.documentElement;
function toggleDarkMode() {
const currentTheme = root.getAttribute("data-theme");
const newTheme = currentTheme === "dark" ? "light" : "dark";
root.setAttribute("data-theme", newTheme);
localStorage.setItem("theme", newTheme);
}
function init() {
const storedPreference = localStorage.getItem("theme");
const systemPrefersDark = window.matchMedia(
"(prefers-color-scheme: dark)"
).matches;
const theme = storedPreference || (systemPrefersDark ? "dark" : "light");
// const theme = "dark";
root.setAttribute("data-theme", theme);
}
init();
document.addEventListener("DOMContentLoaded", function () {
const togglers = document.querySelectorAll(".toggle-light");
togglers.forEach((toggler) => {
toggler.addEventListener("click", toggleDarkMode);
});
});
})();

View file

@ -1,3 +1,20 @@
const root = document.documentElement;
function initTheme() {
const storedPreference = localStorage.getItem("theme");
const theme = storedPreference || "dark";
root.setAttribute("data-theme", theme);
}
function toggleDarkMode() {
const currentTheme = root.getAttribute("data-theme");
const newTheme = currentTheme === "dark" ? "light" : "dark";
root.setAttribute("data-theme", newTheme);
localStorage.setItem("theme", newTheme);
}
initTheme();
const verticalUnit = getUnit("--unit--vertical");
function getUnit(id) {
@ -9,16 +26,36 @@ function getUnit(id) {
return pxUnit;
}
function throttle(callback, limit) {
let waiting = false;
// Throttle found here : https://gist.github.com/ionurboz/51b505ee3281cd713747b4a84d69f434
function throttle(func, wait, options) {
var context, args, result;
var timeout = null;
var previous = 0;
if (!options) options = {};
var later = function () {
previous = options.leading === false ? 0 : Date.now();
timeout = null;
result = func.apply(context, args);
if (!timeout) context = args = null;
};
return function () {
if (!waiting) {
callback.apply(this, arguments);
waiting = true;
setTimeout(function () {
waiting = false;
}, limit);
var now = Date.now();
if (!previous && options.leading === false) previous = now;
var remaining = wait - (now - previous);
context = this;
args = arguments;
if (remaining <= 0 || remaining > wait) {
if (timeout) {
clearTimeout(timeout);
timeout = null;
}
previous = now;
result = func.apply(context, args);
if (!timeout) context = args = null;
} else if (!timeout && options.trailing !== false) {
timeout = setTimeout(later, remaining);
}
return result;
};
}
@ -47,17 +84,29 @@ function toggleLogoState() {
document.querySelector("#main-header").classList.remove("minimized");
}
}
function toggleFooterState() {
if (scrollY > 90) {
document.querySelectorAll(".footer-btn-wrapper").forEach(element => {
element.classList.remove("hidden");
});
} else {
document.querySelectorAll(".footer-btn-wrapper").forEach(element => {
element.classList.add("hidden");
});
}
}
function fixFootNotes() {
const footnotes = document.querySelectorAll('a[href^="#sdfootnote"]');
footnotes.forEach((footnote) => {
const href = footnote.href;
footnote.classList.add("footnote");
if (href.includes("sym")) {
footnote.id = footnote.hash.replace("sym", "anc").replace("#", "");
}
if (href.includes("anc")) {
} else if (href.includes("anc")) {
footnote.id = footnote.hash.replace("anc", "sym").replace("#", "");
}
});
@ -76,54 +125,63 @@ function slugify(str) {
return removeAccents(str.toLowerCase());
}
const subscribeBtn = document.querySelector("#subscribe-btn");
function showSubscribeField(event) {
event.preventDefault();
const button = event.target;
const li = button.parentNode;
const form = li.querySelector("#subscribe-form");
const input = form.querySelector("input");
form.classList.remove("hidden");
button.classList.add("hidden");
input.focus();
}
function subscribe(event) {
event.preventDefault();
const email = document.querySelector("#subscribe-form input");
const emailInput = document.querySelector("#subscribe-form input");
if (email.value.toLowerCase().match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/)) {
if (emailInput.value.toLowerCase().match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/)) {
const header = {
method: "POST",
body: email.value,
body: JSON.stringify(emailInput.value),
};
fetch("/subscribe.json");
fetch("/subscribe.json", header)
.then((res) => res.json())
.then((data) => {
const formNode = emailInput.parentNode.parentNode;
formNode.outerHTML = "<p>" + data.message + "</p>";
});
} else {
email.value = "E-mail invalide. Recommencez.";
emailInput.value = "E-mail invalide. Recommencez.";
}
}
const panelNav = document.querySelector(".panel");
const panels = document.querySelectorAll(".side-panel[data-panel]");
const navOverlay = document.querySelector("#nav-overlay");
const openNavBtn = document.querySelector("button.open-nav");
const closeNavBtn = document.querySelector(".panel-close");
function closeNav() {
panelNav.classList.remove("panel--visible");
function closeAllPanels() {
panels.forEach(panel => panel.classList.remove("side-panel--visible"));
navOverlay.classList.remove("nav-overlay--visible");
document.body.classList.remove("no-scroll");
}
function openPanel(name, view) {
const panel = document.querySelector(`.side-panel[data-panel="${name}"]`);
if (panel) {
if (view) {
panel.querySelectorAll('[data-view]').forEach(v => v.classList.add('hidden'));
const target = panel.querySelector(`[data-view="${view}"]`);
if (target) target.classList.remove('hidden');
}
panel.classList.add("side-panel--visible");
navOverlay.classList.add("nav-overlay--visible");
document.body.classList.add("no-scroll");
}
}
document.addEventListener("DOMContentLoaded", () => {
ragadjust("h1, h2, h3, h4, h5", ["all"]);
ragadjust("h1, h2, h4, h5", ["all"]);
window.window.scrollTo({
top: 0,
});
window.addEventListener("scroll", () => {
const handleScroll = throttle(() => {
toggleLogoState();
});
if (window.innerWidth <= 680) {
toggleFooterState();
}
}, 100);
window.addEventListener("scroll", handleScroll);
setWindowHeightFactor();
window.addEventListener("resize", () => {
@ -132,20 +190,24 @@ document.addEventListener("DOMContentLoaded", () => {
fixFootNotes();
document.querySelectorAll(".toggle-light").forEach((toggler) => {
toggler.addEventListener("click", toggleDarkMode);
});
window.addEventListener("keyup", (event) => {
if (event.key === "Escape") {
closeNav();
closeAllPanels();
}
});
document.querySelectorAll(".panel").forEach((panel) => {
panels.forEach((panel) => {
panel.addEventListener("click", (event) => {
event.stopPropagation();
});
});
const navSortBtns = document.querySelectorAll("nav .sort-btn");
const navSortBtns = document.querySelectorAll(".side-panel .sort-btn");
const navSections = document.querySelectorAll(
".panel__all-texts, .panel__collection"
".side-panel__all-texts, .side-panel__collection"
);
navSortBtns.forEach((sortBtn) => {
@ -154,9 +216,9 @@ document.addEventListener("DOMContentLoaded", () => {
sortBtn.classList.add("active");
const sections = {
"sort-btn--all": ".panel__all-texts",
"sort-btn--years": ".panel__collection--years",
"sort-btn--categories": ".panel__collection--categories",
"sort-btn--all": ".side-panel__all-texts",
"sort-btn--years": ".side-panel__collection--years",
"sort-btn--categories": ".side-panel__collection--categories",
};
navSections.forEach((navSection) => navSection.classList.add("hidden"));
@ -169,18 +231,20 @@ document.addEventListener("DOMContentLoaded", () => {
});
});
openNavBtn.addEventListener("click", () => {
panelNav.classList.add("panel--visible");
navOverlay.classList.add("nav-overlay--visible");
document.body.classList.add("no-scroll");
document.querySelectorAll("[data-open-panel]").forEach((btn) => {
btn.addEventListener("click", () => {
openPanel(btn.dataset.openPanel, btn.dataset.view);
});
});
closeNavBtn.addEventListener("click", () => {
closeNav();
});
navOverlay.addEventListener("click", () => {
closeNav();
document.querySelectorAll(".side-panel-close").forEach((btn) => {
btn.addEventListener("click", closeAllPanels);
});
subscribeBtn.addEventListener("click", showSubscribeField);
navOverlay.addEventListener("click", closeAllPanels);
// Fermer le panel TOC quand on clique sur un lien
document.querySelectorAll('[data-view="toc"] .toc a').forEach((link) => {
link.addEventListener("click", closeAllPanels);
});
});

View file

@ -23,11 +23,22 @@
},
"require": {
"php": "~8.1.0 || ~8.2.0 || ~8.3.0",
"getkirby/cms": "^4.0"
"getkirby/cms": "^4.5",
"symfony/http-client": "^7.2",
"nyholm/psr7": "^1.8",
"php-http/guzzle7-adapter": "^1.1",
"mailersend/mailersend": "^0.28.0",
"sylvainjule/code-editor": "^1.0",
"tobimori/kirby-seo": "^1.1",
"moinframe/kirby-loop": "^1.0"
},
"config": {
"platform": {
"php": "8.3.0"
},
"allow-plugins": {
"getkirby/composer-installer": true
"getkirby/composer-installer": true,
"php-http/discovery": true
},
"optimize-autoloader": true
},

2497
composer.lock generated

File diff suppressed because it is too large Load diff

BIN
favicon-96x96.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

17
favicon.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 38 KiB

View file

@ -1,36 +0,0 @@
import gulp from "gulp"
const { watch, parallel, src, dest } = gulp
import cssnano from "gulp-cssnano"
import autoprefixer from "gulp-autoprefixer"
import cssimport from "gulp-cssimport"
import babel from "gulp-babel"
function cssProcess() {
return src("assets/css/style.css")
.pipe(cssimport())
.pipe(
autoprefixer({
cascade: false,
})
)
.pipe(cssnano())
.pipe(dest("assets/dist"))
}
function jsProcess() {
return src("assets/js/script.js")
.pipe(
babel({
presets: ["@babel/env"],
})
)
.pipe(dest("assets/dist"))
}
function dev() {
watch("assets/css/src/*.css", cssProcess)
}
const build = parallel(cssProcess, jsProcess)
export { dev, build }

BIN
layouts.zip Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

8813
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,11 +0,0 @@
{
"devDependencies": {
"@babel/core": "^7.23.9",
"@babel/preset-env": "^7.23.9",
"gulp": "^4.0.2",
"gulp-autoprefixer": "^9.0.0",
"gulp-babel": "^8.0.0",
"gulp-cssimport": "^7.0.0",
"gulp-cssnano": "^2.1.3"
}
}

21
site.webmanifest Normal file
View file

@ -0,0 +1,21 @@
{
"name": "actuel-inactuel",
"short_name": "a-i",
"icons": [
{
"src": "/web-app-manifest-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/web-app-manifest-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
],
"theme_color": "#000000",
"background_color": "#000000",
"display": "standalone"
}

View file

@ -0,0 +1,27 @@
name: field.blocks.image.name
icon: image
preview: image
fields:
image:
label: field.blocks.image.name
type: files
query: model.images
multiple: false
image:
back: black
uploads:
template: blocks/image
alt:
label: field.blocks.image.alt
type: text
icon: title
help: Lu par les robots d'indexation, par les lecteurs d'écran et affiché à la place de l'image si celle-ci ne charge pas.
caption:
label: field.blocks.image.caption
type: writer
icon: text
inline: true
link:
label: field.blocks.image.link
type: text
icon: url

View file

@ -0,0 +1,4 @@
name: Séparateur
icon: divider
preview: line
wysiwyg: true

View file

@ -0,0 +1,33 @@
name: field.blocks.quote.name
icon: quote
wysiwyg: true
preview: quote
fields:
mode:
type: toggles
default: long
options:
- value: long
text: Longue
icon: false
- value: big
text: Forte
icon: false
text:
label: field.blocks.quote.text.label
placeholder: field.blocks.quote.text.placeholder
type: writer
inline: true
icon: quote
citation:
label: field.blocks.quote.citation.label
placeholder: field.blocks.quote.citation.placeholder
type: writer
inline: true
icon: user
marks:
- bold
- italic
- underline
- link
- cite

View file

@ -0,0 +1,11 @@
label: Corps
type: writer
headings:
- 3
- 4
marks:
- bold
- italic
- link
- underline
- code

View file

@ -0,0 +1,18 @@
label: Corps
type: blocks
default:
- type: heading
content:
level: h2
fieldsets:
text:
name: Texte
icon: text
wysiwyg: true
fields:
text:
extends: fields/body
label: false
image: true
quote: true
line: true

View file

@ -9,11 +9,16 @@ tabs:
type: fields
fields:
presentation:
extends: fields/body
label: Présentation
type: writer
help: Optionnelle
help: |
Optionnelle, sans mention du poste. Peut inclure un lien.
Exemple : "Co-fondateur des éditions [Athom](http://www.athom.xyz/)."
texts:
label: Textes
type: pages
create: false
query: page.getTexts()
seo:
extends: seo/page
label: Indexation

View file

@ -7,3 +7,6 @@ tabs:
label: Liste
type: pages
template: author
seo:
extends: seo/page
label: Indexation

View file

@ -6,21 +6,47 @@ image:
back: black
color: white
icon: email
options:
changeStatus: false
tabs:
contentTab:
label: Contenu
icon: text
columns:
- width: 1/1
fields:
month:
label: Mois
type: date
display: "mmmm YYYY"
default: today
width: 1/4
sendBtn:
type: send-button
width: 1/4
content:
body:
label: Contenu
type: writer
nodes: false
marks:
- bold
- link
- italic
- email
sendTab:
label: Envoi
icon: plane
columns:
- width: 1/4
fields:
published:
label: Date d'envoi
type: date
help: Automatiquement rempli au moment de l'envoi.
disabled: true
width: 1/2
- width: 1/2
fields:
testAdressList:
label: Liste d'adresses de test
type: structure
sortBy: email asc
help: Le bouton "Tester" ci-dessous tentera d'envoyer l'email aux adresses de cette liste
fields:
email:
type: email
sendBtn:
type: send-button
seo:
extends: seo/page
label: Indexation

View file

@ -18,6 +18,17 @@ tabs:
fullWidth:
label: Pleine largeur
type: toggle
subtitle:
label: Sous-titre
type: writer
help: optionnel
marks:
- italic
node: false
chapo:
label: Chapo
extends: fields/body
help: optionnel
body:
label: Corps
type: layout
@ -31,4 +42,9 @@ tabs:
- image
- line
- quote
metaTab: tabs/meta
seo:
extends: seo/page
label: Indexation

View file

@ -15,6 +15,7 @@ tabs:
label: Corps
type: fields
fields:
body:
label: Corps
type: writer
body: fields/body
seo:
extends: seo/page
label: Indexation

View file

@ -15,7 +15,54 @@ tabs:
label: Corps
type: fields
fields:
body:
label: Corps
subtitle:
label: Sous-titre
type: writer
help: optionnel
marks:
- italic
node: false
chapo:
label: Chapo
extends: fields/body
help: optionnel
isBlockMode:
label: Mode blocs
type: toggle
default: true
width: 1/4
help: |
Actif : éditeur en blocs (texte + médias). Inactif : ancien champ texte sans médias, utile pour éditer d'anciens articles uniquement.
when:
isHtmlMode: false
bodyBlocks:
extends: fields/bodyBlocks
width: 3/4
when:
isHtmlMode: false
isBlockMode: true
body:
extends: fields/body
help: Anciens champs conservés pour archive (ne pas remplir pour les nouveaux articles). Ce champs ne sera utiliser en front que si le champs "corp" normal est vide.
width: 3/4
when:
isHtmlMode: false
isBlockMode: false
htmlBody:
label: Corps
type: textarea
buttons:
- headlines
- bold
- italic
- link
when:
isHtmlMode: true
paramsTab: tabs/params
metaTab: tabs/meta
seo:
extends: seo/page
label: Indexation

View file

@ -3,19 +3,31 @@ title: Liste de diffusion
tabs:
content:
columns:
- width: 1/2
- width: 1/1
fields:
body:
extends: fields/body
- width: 2/3
fields:
subscribers:
label: Abonnés
type: structure
sortBy: inscriptiondate desc
fields:
email:
type: email
- width: 1/2
inscriptionDate:
label: Date d'inscription
type: date
display: DD/MM/YYYY
disabled: true
- width: 1/3
sections:
newsletters:
label: Emails
label: Lettres
type: pages
template: email
info: "{{ page.month.toDate('M Y') }}"
sortBy: month desc
info: "{{ page.status == 'listed' ? 'envoyée' : 'brouillon' }}"
seo:
extends: seo/page
label: Indexation

View file

@ -1,5 +1,8 @@
title: texts
tabs:
contentTab:
label: Contenu
columns:
- width: 1/2
fields:
@ -12,7 +15,7 @@ columns:
type: pages
template: year
sortBy: title desc
- width: 1/1
- width: 1/2
sections:
allTextsSection:
label: Tous les textes
@ -22,3 +25,6 @@ columns:
query: page.children.children
info: "{{ page.author.toPage.title }} [{{ page.category }}]"
sortBy: modified desc
seo:
extends: seo/page
label: Indexation

View file

@ -4,16 +4,38 @@ image:
back: black
color: white
tabs:
contentTab:
label: Contenu
columns:
- width: 1/3
sections:
fieldsSection:
type: fields
fields:
openDate:
label: Date d'ouverture
type: date
display: DD/MM/YYYY
texts:
label: Textes
type: pages
help: **Pour réorganiser les textes**, utiliser la poignée ⁝⁝ qui apparait au survol.
templates:
- linear
- grid
linkedTextsSection:
type: fields
fields:
linkedTexts:
label: Textes liés
type: pages
query : site.find('textes').grandChildren.not(page.children)
help: textes enregistrés à une autre année à inclure aussi dans celle-ci.
- width: 2/3
fields:
edito:
type: writer
seo:
extends: seo/page
label: Indexation

View file

@ -9,6 +9,7 @@ tabs:
type: writer
nodes: false
marks: false
edito:
label: Éditorial
type: writer
edito: fields/body
seo:
extends: seo/site
label: Indexation

View file

@ -1,8 +1,10 @@
label: Métadonnées
sections:
metadata:
type: fields
columns:
- width: 3/4
fields:
keywords:
label: Mots-clés
type: tags
published:
label: Date de publication
type: date
@ -22,3 +24,14 @@ sections:
multiple: false
required: true
width: 1/3
- width: 1/4
sections:
referencedTexts:
label: Textes référencés
type: pages
template: linear
help: Les textes ajoutés ici n'apparaissent nulle part dans la navigation du site mais peuvent être référencés via leurs URLs.
referencedFiles:
label: Fichiers
type: files
help: Ce champ contient tous les médias stockés par la page, tels que les images intégrées au texte. On peut aussi y ajouter des fichiers (PDFs etc.) pour pouvoir les lier via leurs URLs.

View file

@ -0,0 +1,13 @@
label: Paramètres
fields:
isHtmlMode:
label: Mode HTML
type: toggle
width: 1/3
help: |
Actif : le code HTML du corps sera exécuté.
additionnalCss:
label: CSS additionnel
type: code-editor
help: Le point de rupture mobile / ordinateur se situe à 640px.
width: 2/3

View file

@ -1,25 +0,0 @@
title: Auteur
description: Droits de lecture et écriture de certaines pages.
image:
icon: pen
color: "#FFF"
permissions:
access:
*: false
files:
*: false
languages:
*: false
pages:
*: false
site:
*: false
user:
*: false
users:
*: false
fields:
presentation:
type: writer

View file

@ -1,6 +1,7 @@
<?php
function createEmptyCategories() {
function createEmptyCategories()
{
$categories = new Pages();
foreach (page('textes')->categories()->split() as $categoryName) {
$category = new Page([
@ -10,7 +11,7 @@ function createEmptyCategories() {
'content' => [
'title' => $categoryName,
],
'children' => []
'children' => [],
]);
$categories->add($category);
@ -20,7 +21,8 @@ function createEmptyCategories() {
}
function createCategories() {
function createCategories()
{
$emptyCategories = createEmptyCategories();
foreach (page('textes')->grandChildren() as $text) {
try {

View file

@ -1,5 +1,5 @@
<?php
return function ($site) {
return $site->find('textes')->children();
return $site->find('textes')->children()->sort('title', 'desc');
};

View file

@ -1,25 +1,32 @@
<?php
return array(
return [
'debug' => true,
'panel' => array(
'panel' => [
'menu' => require __DIR__ . '/menu.php',
'css' => 'assets/css/panel.css'
),
'css' => 'assets/css/panel.css',
],
'mailerSendApiKey' => 'mlsn.0a9f20751951e3c2d130b1d6c3749b0a0f5b14f1c52da65a3369d658c736513c',
'email' => [
'transport' => [
'type' => 'smtp',
'host' => 'smtp.outlook.com',
'host' => 'smtp.mailersend.net',
'port' => 587,
'security' => 'tls',
'security' => true,
'auth' => true,
'username' => 'adrien.payet@outlook.com',
'password' => 't8nVpxCpEZcqH8y'
]
'username' => 'MS_ncQ2K5@actuel-inactuel.fr',
'password' => 'mssp.ou3hOyX.z86org8y2kklew13.raOTfvP',
],
'routes' => array(
require __DIR__ . '/routes/virtual-author.php',
],
'routes' => [
require __DIR__ . '/routes/virtual-category.php',
require __DIR__ . '/routes/send-newsletter.php',
),
);
require __DIR__ . '/routes/subscribe.php',
require __DIR__ . '/routes/virtual-pending.php',
],
'hooks' => [
'page.create:after' => require __DIR__ . '/hooks/prefill-test-adress-list.php',
],
'moinframe.loop.language' => 'fr',
'thumbs' => require __DIR__ . '/thumbs.php',
];

View file

@ -0,0 +1,17 @@
<?php
return function ($page) {
if ($page->template() == 'email') {
$list = [
['email' => 'fournelcecile@yahoo.fr'],
['email' => 'payet.adrien@protonmail.com'],
['email' => 'mazet.zaccardelli@free.fr'],
['email' => 'wafaabida@hotmail.com'],
['email' => 'elisegarraud@yahoo.fr'],
['email' => 'pierre-damien.huyghe@univ-paris1.fr'],
];
$page->update([
'testAdressList' => Yaml::encode($list),
]);
}
};

View file

@ -6,7 +6,7 @@ return [
'current' => function ($current) {
$path = Kirby::instance()->request()->path()->toString();
return Str::contains($path, 'site');
}
},
],
'texts' => [
'icon' => 'pen',
@ -15,7 +15,7 @@ return [
'current' => function ($current) {
$path = Kirby::instance()->request()->path()->toString();
return Str::contains($path, 'pages/textes');
}
},
],
'authors' => [
'icon' => 'users',
@ -24,7 +24,7 @@ return [
'current' => function ($current) {
$path = Kirby::instance()->request()->path()->toString();
return Str::contains($path, 'pages/auteurs');
}
},
],
'-',
'-',
@ -35,16 +35,16 @@ return [
'current' => function ($current) {
$path = Kirby::instance()->request()->path()->toString();
return Str::contains($path, 'pages/a-propos');
}
},
],
'newsletter' => [
'subscription' => [
'icon' => 'email',
'label' => 'Liste de diffusion',
'link' => 'pages/liste-de-diffusion',
'link' => 'pages/lettre',
'current' => function ($current) {
$path = Kirby::instance()->request()->path()->toString();
return Str::contains($path, 'pages/liste-de-diffusion');
}
},
],
'-',
'-',
@ -57,7 +57,7 @@ return [
'current' => function ($current) {
$path = Kirby::instance()->request()->path()->toString();
return Str::contains($path, 'pages/admin');
}
},
],
'-',
'-',

View file

@ -1,24 +0,0 @@
<?php
return [
'pattern' => '/send-newsletter.json',
'method' => 'POST',
'action' => function () {
$jsonRequest = file_get_contents("php://input");
$request = json_decode($jsonRequest);
$kirby = kirby();
try {
$kirby->email([
'from' => "adrien.payet@outlook.com",
'to' => 'payet.adrien@protonmail.com',
'subject' => 'actualités',
'body' => 'Ceci est un test simple.',
]);
return json_encode(['status' => 'success', 'message' => 'Email envoyé avec succès.']);
} catch (Exception $error) {
return json_encode(['status' => 'error', 'message' => $error->getMessage()]);
}
}
];

View file

@ -0,0 +1,46 @@
<?php
return [
'pattern' => '/subscribe.json',
'method' => 'POST',
'action' => function () {
$jsonRequest = file_get_contents('php://input');
$email = Str::lower(json_decode($jsonRequest));
if (V::email($email)) {
kirby()->impersonate('kirby');
$page = page('lettre');
$subscribers = $page->subscribers()->yaml();
$emailExists = in_array($email, array_column($subscribers, 'email'));
if ($emailExists) {
return [
'status' => 'error',
'message' => 'Cet email est déjà inscris.',
];
}
$newSubscriber = [
'email' => $email,
'inscriptiondate' => date('Y-m-d')
];
$subscribers[] = $newSubscriber;
$page->update([
'subscribers' => $subscribers,
]);
return [
'status' => 'success',
'message' => 'Inscription réussie.',
];
} else {
return [
'status' => 'error',
'message' => 'Email invalide.',
];
}
},
];

View file

@ -1,25 +0,0 @@
<?php
use Kirby\Uuid\Uuid;
return [
'pattern' => 'auteurs/(:any)',
'action' => function ($slug) {
$kirby = kirby();
$author = getAuthorBySlug($slug);
return Page::factory(
[
'slug' => '',
'template' => 'author',
'model' => 'authors',
'content' => [
'title' => $author->name(),
'presentation' => $author->presentation(),
'author' => $author->name(),
'uuid' => Uuid::generate(),
]
]
);
}
];

View file

@ -5,18 +5,33 @@ use Kirby\Uuid\Uuid;
return [
'pattern' => 'categories/(:any)',
'action' => function ($category) {
$kirby = kirby();
return Page::factory(
[
'slug' => '',
'template' => 'category',
'model' => 'categories',
'content' => [
'title' => $category,
'uuid' => Uuid::generate(),
]
]
$allTexts = page('textes')->grandChildren();
$textsInCategory = $allTexts->filter(
fn($text) => Str::slug($text->category()) === $category
);
$texts = [];
foreach ($textsInCategory as $text) {
$texts[] = (string) $text->uri();
}
try {
$title = $textsInCategory->first()->category();
} catch (\Throwable $th) {
go('/erreur');
}
return Page::factory([
'slug' => Str::slug($category) . '-' . Uuid::generate(),
'template' => 'category',
'model' => 'category',
'content' => [
'title' => $title,
'texts' => Yaml::encode($texts),
'uuid' => Uuid::generate(),
],
]);
},
];

Some files were not shown because too many files have changed in this diff Show more