Menu de navigation (visiteur non connecté)

Le header non connecté est Orientation | Pistes d'études | Articles, sur les pages publiques SSR (voir ssr-pages.md) comme dans la SPA. Orientation est un groupe déroulant : au clic, des cartes (« Test d'orientation », « Échanger avec des étudiants »), en accordéon sur mobile.

Deux copies à garder synchronisées à la main

Le header existe deux fois, sans code partagé :

Où Fichiers
SPA (Vue/Quasar) front/src/components/layouts/standard/menu-items.ts (données), toolbar/ToolbarContent.vue (desktop + drawer mobile), toolbar/MenuDropdown.vue et MenuDropdownCard.vue (panneau desktop), layouts/Logo.vue (lien du logo)
Pages SSR (Handlebars) api/src/public-pages/views/partials/header.hbs, données des cartes dans services/orientation-menu.data.ts (exposées par le helper orientationMenu), styles .site-header__* dans api/src/public/css/public.css

Modifier un libellé, un lien ou une carte impose de le faire des deux côtés (menu-items.ts d'un côté, orientation-menu.data.ts de l'autre). Les icônes des cartes (icone_Vert_boussole.png, icone_Vert_Bulle_discussion.png) ne sont qu'à un seul endroit, api/src/public/images/, servi à la SPA via le proxy /images/.

Règles non évidentes

  • Dans menu-items.ts, un item avec children est un groupe déroulant (sans path). NavMobile.vue (barre d'onglets du bas en mobile) les ignore : Orientation n'y apparaît pas, seul le drawer du burger le propose.
  • Le drawer mobile de la SPA est rendu dans le q-header de Quasar, dont le texte est blanc : tout élément qui n'est pas un DBtn (ex. l'en-tête de DExpansionItem) doit fixer sa couleur (text-text), sinon il est invisible sur fond blanc.
  • Le partial header.hbs est chargé au démarrage de l'API (registerPartials dans main.ts) : en dev, un changement de ce fichier n'est visible qu'après redémarrage du conteneur API. Le CSS, lui, est servi à chaud.
  • Une règle globale a:hover { text-decoration: underline; } (public.css) s'applique à toute balise <a> : .site-header__card:hover doit explicitement repasser en text-decoration: none, sinon le survol d'une carte souligne tout son texte.
  • Les icônes doivent être dans un dossier relayé vers l'API par le front (/images/, /svg/ssr/ : proxy Vite dans quasar.config.js, location dans nginx.conf.template). /img/ ne l'est pas : il est servi par le front (front/public/img/), donc un fichier déposé dans api/src/public/img/ renvoie une 404 depuis la page.