Retourner � la page d'accueil de TJSRetourner � la page d'accueil de TJS

Créez des graphes et des organigrammes facilement avec JS et Mermaid

Mermaid.js est une bibliothèque JS puissante qui permet de générer des diagrammes et des graphiques organisationnels à partir de texte brut dans une syntaxe qui ressemble au Markdown.

Nous allons voir ici comment installer et utiliser Mermaid.js et découvrir la syntaxe mermaid pour définir des diagrammes.

Installation comme module avec un CDN

Attention, la version actuelle de Mermaid.js nécessite une intégration sur la page HTML comme un script de type module. La syntaxe des scripts de type module est une fonctionnalité récente de JavaScript avec une syntaxe particulière. Il est nécessaire d'inclure la ligne d'import avant toute autre ligne de code JavaScript. Toute action sur l'objet JS mermaid, nécessite l'import du module.

<script type="module">
  /* Import du module Mermaid.js */
  import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';

  /* Initialisation de l'objet JS mermaid */
  mermaid.initialize({ startOnLoad: true });
  
  /* Création du graphique quand la page est chargée */
  window.addEventListener("load", async () => {
    const result = await mermaid.render("ID_diagram", "code en syntaxe Mermaid");
    document.getElementById("diagram").innerHTML = result.svg;
  });
</script>    

Vous pouvez aussi choisir de ne pas dépendre d'un service externe et inclure les scripts avec npm ou yarn en exécutant dans le terminal au niveau de votre projet la commande :
npm install mermaid

Utilisation concrète

Voici un premier exemple de code mermaid:

Ce qui rend un graphique comme celui-ci :

Première explication

Notez que mermaid.render()attend en entrée deux paramètres :
- Le premier paramètre est un identifiant de graphique de type string. C'est l'identifiant unique du graphique dans votre application. - Le second est la chaine de caractères contenant le descriptif du graphique, la convertit et retourne un objet complexe.

Le graphique est généré sous forme d'une image SVG, une image au format vectoriel qui ne génère ni flou ni pixelisation quel que soit le niveau de grossissement.
Le code de l'image est contenu dans l'attribut svg qui doit être placé dans le contenu HTML de l'élément recevant le graphique.

La première ligne de code graph TD est une instruction mermaid qui définit le type de graphique que vous voulez créer. Dans ce cas, nous utilisons un graphique dirigé du haut vers le bas (TD: Top Down).

La ligne suivante A[Start] --> B{Ca marche ?} définit le premier noeud A avec comme libellé "Start" et le second noeud B avec comme libellé "Ca marche ?".
Le lien entre les deux noeuds est une arrête qui indique que l'on peut aller de A à B.
Le style de noeud box est défini par les crochets [ ] autour du libellé.
Les accolades { } définissent le noeud B comme une boite de condition.

La ligne suivante B -->|Oui| C[Super !] définit un lien entre le noeud B et le nouveau noeud C.
Le libellé Oui est affiché sur la flêche car il est entouré du caractère pipe (|) qui indique que l'on peut aller de B à C si la réponse est positive.
Le nouveau noeud C a comme libellé "Super !" et le style de noeud box est défini par les crochets [ ] autour du libellé.

Enfin, la dernière ligne B -->|Non| D[Vérifier le code]reprend les éléments de syntaxe déja vus :
Un libellé Non sur la flêche et un dernier noeud D avec le libellé "Vérifier le code".

Utiliser la gestion des erreurs avec les exceptions

Avec la syntaxe potentiellement complexe de Mermaid, il est recommandé d'utiliser le gestionnaire d'erreurs pour identifier les mauvaises syntaxes.

Notre appel à mermaid.render() est effectué dans une fonction asynchrone qui ne bloque pas le processus du navigateur.

Si l'erreur se produit, elle sera capturée par la clause catch. Elle est affichée sur la console sans bloquer le reste du script :

window.addEventListener("load", async () => {
    try {
        const result = await mermaid.render(
        "mermaidDiagram",
        document.getElementById("editor").value
        );
        document.getElementById("diagram").innerHTML = result.svg;
    } catch (error) {
        console.log(error);
    }
});

En utilisant cette approche, nous pouvons détecter et corriger les erreurs de syntaxe de la définition des graphs grâce à une analyse fine et précise de Mermaid.

Par exemple, si on ajoute un espace dans la définition du lien entre deux noeuds B - ->|Oui| C[Super !], la console affiche exactement l'emplacement de l'erreur et les caractères possibles attendus :

Error: Parse error on line 3:
B - ->|Oui| C[Super !]
--^
Expecting 'SEMI', 'NEWLINE', 'EOF', 'AMP', 'START_LINK', 'LINK', got 'NODE_STRING'

Les syntaxes de Mermaid pour les graphes TD et LR

Les graphes TD (Top Down) et LR (Left Right) sont des graphes qui sont utilisés pour visualiser les relations entre les éléments d'un système.

Voici une liste exhaustive des syntaxes de Mermaid pour les graphes TD et LR :

La première ligne définit le type de graphique. On peut donc avoir graph TD ou graph LR

Un noeud est défini par la syntaxe node [label]. node est le nom interne du noeud qui servira dans la définition des relations. label est le texte qui sera affiché sur le noeud. Le label peut être entouré par des crochets pour afficher une boîte rectangulaire, par des parenthères pour afficher une boîte rectangulaire avec des bords arrondis ou avec des accolades pour une boîte losange utilisée pour marquer une condition.

La connexion entre les noeuds A et B est définie par ces syntaxes :
A --> B. Une flêche relie A vers B.
A <--> B. Une flêche double relie A et B.
A -- Lien --> B. Une flêche relie A vers B, avec le libellé "Lien" au milieu de la connexion.

Voici un graphe LR prédifini. Vous pouvez le modifier et cliquer sur le bouton "Générer" pour mettre à jour le rendu ou l'éventuel erreur détectée :

La mise en forme

Naturellement, vous pouvez définir la mise en forme et les couleurs de tous les éléments du graphique.

Mise en forme globale

La mise en forme générale de votre diagramme peut être définie à l'initialisation de l'objet mermaid. Voici quelques options parmi les plus intéressantes :

fontFamily est une chaîne de caractères. Par exemple "Arial, \"Helvetica Neue\", sans-serif"
look vaut "handDrawn" ou "classic". L'option dessiné à la main a un rendu particulièrement réussi.
theme offre le choix parmi de nombreux thèmes prédéfinis, comme "light", "dark", "forest", ...
mermaid.initialize({
  startOnLoad: true,
  look: "handDrawn",
  theme: "forest",
  fontFamily: "Arial, \"Helvetica Neue\", sans-serif"
});

Mise en forme dans le code mermaid

La configuration globale peut être définie aussi dans le code mermaid avec l'entête suivante, semblable à du code JSON :

---
config:
    look: handDrawn
    theme: forest
    fontFamily: Arial, "Helvetica Neue", sans-serif
---
graph LR
  ...

Chaque élément du diagramme peut aussi être stylisé directement dans le code mermaid de définition de l'organisation du diagramme.

Les balises HTML sont reconnues pour mettre en forme le texte avec le soulignement <u>, l'italiques <i>ou le gras <b>.

La mise en forme des couleurs utilisent une syntaxe inspirée du CSS.

Par exemple, pour que le noeud A soit écrit en blanc et gras sur fond rouge entouré de noir, on ajoute en fin de code mermaid :
style A fill:#f00000,stroke:#000000,color:#ffffff
Pour que le premier lien soit affiché en rouge, épais et pointillé, on ajoute :
linkStyle 0 stroke:#ff0000,stroke-width:4px,stroke-dasharray: 5 5

Aller plus loin

Le projet Mermaid est très actif et propose de très nombreuses options de personnalisation. Pour plus d'informations, vous pouvez consulter la documentation officielle de Mermaid sur Mermaid.js.

Les autres formes de diagrammes

Mermaid supporte plusieurs autres formes de diagrammes comme la séquence sequenceDiagram, le Gantt Gantt, les classes classDiagram, la timeline classDiagram et bien d'autres.

Cliquez sur les boutons suivants pour voir le rendu en direct. Vous pouvez aussi éditer le code et voir le rendu en temps réel.





Tutoriel �crit par webmaster mis � jour le

Troisième édition Tout JavaScript chez Dunod

Tout JavaScript le livre chez DunodEn savoir plus
Sortie le 4 janvier 2023

Version papier 29€90
Format électronique 22€99.

Commandez en ligne

Chercher une fonction, un objet, ...

Le 01/05/2025 00:58:11 sur php 7 en 27.29 ms