Présentation technique du site web KMLk.ch

Frameworks utilisés

Pour le design général, j’ai opté pour Bootstrap v5. Classique, sans surprise, efficace. Pour fonctionnement, j’ai choisi VueJs v3. Sur un site avec trois pages, c’est parfait. Pour la génération de codes QR, j’ai complété VueJS avec le plugin QRcode. C’est tout. Simple, efficace.

Disséquons le code

Le code source est disponible sur mon repository Codeberg.

Fichier index.html

Il n’y a rien de spécial:

  • On charge les fichiers CSS nécessaires (Bootstrap notamment), le javascript de VueJS
  • On ajoute quelques infos pour le SEO (mais pas grand chose)

Ensuite, le corps de la page se décompose en deux partie:

  • Une section qui affichera le contenu de la page sélectionnée ainsi que le menu principal
  • Un footer basique. Pour finir, la magie de VueJS intervient en chargeant le code JS de l’appli.

Fichier vue/assets/pages/app.js

C’est le point d’entrée de l’appli VueJS. On y trouve trois parties:

  1. Les imports
  2. La mise en place du routage entre composants
  3. Le chargement de la page initiale

1. Les imports

On a besoin de plusieurs fonctionnalités:

  • La création d’une app VueJS (createApp)
  • La gestion du routage entre les composants (createRouter, createWebHistory).
  • Ensuite on référence les fichiers CSS afin qu’ils soient inclus dans le fichier CSS global qui sera produit lors du
  • build final.
  • Pour finir, on charge les composants de l’application.
NomFonction du composant
Appaffiche le menu et le composant sélectionné
TechLoaderViewaffiche l’écran d’attente
LinkKeepViewreçoit le lien et le transforme en code QR
KmlkAboutViewAffiche les informations sur le projet
KmlkGetAppViewaffiche les informations de téléchargement

2. Routage entre composants

Ici rien de spécial, c’est du VueJS basique: on associe chaque composant à une URL. Bien sûr, les URLs en question sont interceptées par la fonction de routage et n’arrivent pas au serveur (Apache dans le cas de KMLk.ch).

3. Chargement de la page initiale

Par coquetterie uniquement, on demande d’abord à VueJS d’afficher le composant de chargement puis, moins d’une seconde après, on route vers le composant permettant de conserver un lien.

Fichier vue/assets/pages/app.vue

Ici il s’agit du markup HTML du composant principal. Ce composant affichant le menu principal, il est donc responsable de piloter le routage vers les différents composants. A part cela, il n’y a aucune fonctionnalité qui mérite qu’on s’y attarde.

Fichier vue/assets/pages/kmlk/kmlk.about.vue

Ce composant est chargé d’afficher les informations sur le projet (site web et app android). Il est composé uniquement de markup HTML.

Fichier vue/assets/pages/kmlk/kmlk.getapp.vue

Ici ce composant présente les liens de téléchargement de l’app android. On n’y trouve que du markup HTML.

Fichier vue/assets/pages/tech/tech.loader.vue

Rien d’incroyable non plus dans ce compostant, consitué uniquement de markup HTML, qui se contente d’afficher une animation d’attente sour forme de fichier SVG,

Fichier vue/assets/pages/link/link.keep.vue

On attaque LE composant principal et primordial de KMLk! Le markup HTML est divisable en deux segments:

  1. le champ de saisie du lien et le bouton de transformation
  2. l’affichage du code QR

1. Champ de saisie du lien

On peut noter l’utilisation de la directive :disabled="qrGen" qui permet de bloquer le champ et le bouton le temps que le code QR soit généré. C’est très rapide mais en cas de lenteur, l’interface se comporte comme attendu: on ne peut pas modifier le lien tant que la génération n’est pas terminée. La directive v-show="!hasQrScan" permet de masquer ce bloc dès que le code QR est disponible.

2. Affichage du code QR

Le bloc est affiché uniquement si le code QR a été généré (directive v-show="!hasError && hasQrScan"). Le code QR est affiché dans le tag <img :src="qrScan" class="kmlk-qrcode" />, la magie tenant à l’attribut :src que VueJS traite en tant que contenu Base64.

La méthode saveLink utilise la méthode toDataURL de la classe QRCode pour produire une représentation en Base64 du code QR contenant l’URL. D’ailleurs, ce code QR ne contient rien d’autre, d’où le fait qu’il est lisible avec n’importe quelle app. La seule particularité de ce code QR est sa couleur: blanc sur fond bleu.

Configuration Apache

Si comme moi, vous hébergez KMLk.ch sur un serveur Apache (c’est généralement l’option la moins chère chez les hébergeurs comme Infomaniak ou OVH), il reste une petite blague à régler. Lorsqu’on appelle directement une URL définie dans le router VueJS (par exemple, on tape https://www.kmlk.ch/spa/kmlk/about), c’est le serveur Apache qui cherche en premier à résoudre la page demandée. Et cette page n’existe pas! Elle n’existe que dans le contxte de l’app VueJS. Sauf que ce contexte n’est pas encore chargé. L’astuce est de configurer le fichier .htaccess pour rediriger les URLs inconnues d’Apache vers la page index.html.

Modification du fichier .htaccess

Dans ce fichier, on ajoute la directive ErrorDocument 404 https://www.kmlk.ch. C’est clairement brutal puisque toutes les pages introuvables par le serveur Apache vont produire une erreur 404 et l’utilisateur sera redirigé vers la page d’accueil.

Liens