Implémentation "HATEOAS" de l'interface pour HTMX et update des URLs qui fonctionne ! #57
No reviewers
Labels
No Label
bug
duplicate
enhancement
help wanted
independant
invalid
module/autre
module/backend
module/desktop
module/docs
module/frontend
module/scripts
module/sesam-vitale
module/utils
open-source
question
to-triage
wontfix
No Milestone
No project
No Assignees
3 Participants
Notifications
Total Time Spent: 3 hours 30 minutes
Due Date
florian_briand
3 hours 30 minutes
No due date set.
Dependencies
No dependencies set.
Reference: P4Pillon/Krys4lide#57
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/54_update_url_on_navbar_navigation"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Détails
Implémente une approche plus respectueuse de "HATEOAS" comme nécessité par HTMX.
Dans cette approche, les routes des pages, comme
/index
ou/cps
, ont, par défaut, un rendu "complet", comme cela serait si l'on n'utilisait pas HTMX.Certains helpers sont utilisés pour éviter la duplication de code (entre particulier une "macro" Jinja pour la navbar).
Un "Extractor" issu de
axum-htmx
permet d'identifier quand une requête sur ces pages est issue d'un appelhtmx
, et permet de générer un rendu "simplifié", ne contenant (quasiment) que les éléments HTML ayant leur contenu qui change.Par exemple, la page
/cps
, dans le cadre d'une requêtehtmx
(hx-request=true
), ne retourne que : une nouvelle balise<title>
, la navbar (pour changer le design de l'élément "courant") et le contenu de la page. Tout le contenu de<head>
ou lesdiv
qui encapsulent l'ensemble de la page ne sont pas re-envoyé.Cela permet de mettre à jour les URLs dans la barre du navigateur, sans provoquer les problèmes de rechargement de page identifié dans le ticket #54.
Au passage, cette PR organise les templates d'une manière qui me parait un peu plus "claire" qu'avant :
app/src/pages
app/src/components
L'avantage de leur présence dans le dossier
src
est qu'on peut sans problème mettre à côté les fichiers.rs
qui leur correspondent.Pourquoi ?
La PR #53 et le ticket #54 avaient éclairé un problème lorsqu'on souhaitait pouvoir refléter la navigation dans l'URL du navigateur. Cette PR corrige ce problème en adoptant une approche plus respectueuse de la philosophie de HTMX.
Documentation
axum-htmx
qui offre des helpers pour faire du HTMX dans AxumCloses #46
Closes #54
feat/54_update_url_on_navbar_navigationto Implémentation "HATEOAS" de l'interface pour HTMX et update des URLs qui fonctionne !Génial, je trouve que le rapprochement des fichiers
html
etrs
est une super nouvelle. Encore une fois le code est vraiment compréhensible. Ça fonctionne bien de mon côté. Ça résout le problème de l'autoreload en plus 👍Un dernier détail : devrions nous pas renommer
home.rs
enindex.rs
?@ -0,0 +6,4 @@
<div class="max-w-screen-xl flex flex-wrap items-center justify-between mx-auto p-4">
<a href="/" class="flex items-center space-x-3 rtl:space-x-reverse">
<img src="https://flowbite.com/docs/images/logo.svg" class="h-8" alt="Flowbite Logo" />
<span class="self-center text-2xl font-semibold whitespace-nowrap dark:text-white">Krys4lide</span>
Le fond de la
nav
est blanc ainsi que ce titre du coup il n'est pas visible ;)Bien vu ... ce code est totalement faussement compatible avec le mode sombre oO
C'était lié au CSS de Flowbite, qui "surchargeait" inutilement Tailwind tout en faisant bugguer le darkmode.
Corrigé par
d4e5656
@ -27,2 +29,3 @@
.merge(templates::get_routes())
.merge(pages::get_routes())
.fallback(fallback)
.layer(AutoVaryLayer)
C'est assez subtile l'
AutoVaryLayer
ça peut valoir le coup d'ajouter un commentaire pour expliquer ? Voir la doc080e392c21
tod4e565601a
Nickel les modifs ça permet d'être plus homogène pour la page d'accueil 👍
@ -6,3 +6,3 @@
pub fn get_routes() -> Router {
Router::new()
.route("/home", routing::get(home::home))
.route("/", axum::routing::get(home::home))
micro typo
axum::routing
->routing
Je suis pas 100℅ sur de l'intérêt de mix HTML + rust mais j'ai pas plus d'arguments que ca.
Je ne veux pas plus bloquer cette da donc si go