From 44d460c3d669457601fd77d4dca599d20f401f88 Mon Sep 17 00:00:00 2001
From: Alexis POYEN <apoyen@grandlyon.com>
Date: Tue, 4 Aug 2020 11:24:07 +0200
Subject: [PATCH] Resolve "User Doc"

---
 data/test.db                                 | Bin 73728 -> 73728 bytes
 web/components/help/help.js                  | 112 +++++++++++
 web/components/help/management-help.js       | 188 +++++++++++++++++++
 web/components/help/results-help.js          |  65 +++++++
 web/components/help/user-help.js             |  63 +++++++
 web/components/help/vote-help.js             |  46 +++++
 web/components/home/home.js                  |  20 --
 web/components/management/candidate-lists.js |   2 +-
 web/components/navbar/navbar.js              |   6 +-
 web/components/visualization/results-zone.js |   2 +-
 web/main.js                                  |  14 +-
 web/style.css                                |   5 +
 12 files changed, 491 insertions(+), 32 deletions(-)
 create mode 100644 web/components/help/help.js
 create mode 100644 web/components/help/management-help.js
 create mode 100644 web/components/help/results-help.js
 create mode 100644 web/components/help/user-help.js
 create mode 100644 web/components/help/vote-help.js
 delete mode 100644 web/components/home/home.js

diff --git a/data/test.db b/data/test.db
index 2f2f142d93f55b5661c089395d795c6bd40d1d10..c72faf72e932c1aa982825c4d8c93b11503077dc 100644
GIT binary patch
literal 73728
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
Y7!V8y1_T3w0l|P^KrkQ}_{}l!zY6rQ5dZ)H

delta 1105
zcmYjPU1%It6rMXjJAXTKle*1@Zo;OtP*crz{&zO0i3FvDG~038h_+TjGQs$>TXr_W
z3dyDlh4dwE4`w0BCR8c-Vj*3z4<bYZf<+0wh~z>1p)Vq&ArHkD@y;Yl8HSnjecw6f
zyXV~bO?G~h{qWckYL%j>BZn^{-=6x@hDOlL&^Jm<quLNq_@uh0t}FNBJMshRZ;2N6
zh0|;ocY>ecGYIHUP)EIfgJxp&dbKshG+Bw1`6ro7q7N>@Rc60M3(c5x?Io5^rqk&C
z04~$_TWjhY$2&cQ_wXP1XWYVH<0bqtUcer%;&)o@Jt@rMDXO#nd;+|I&NiNulrWQQ
zf45Ze14D!AKo??QY2frQCvr>@Px`@IflXADES5_%#mPWqm?Ro6`{Mx}r<t_qzwJ*{
zrc1>@K};G?j9;zHl>Ks`D<lWu1qv^awlyryAf74|DBFhD^1U#T?}neQB;Z~?5f7C#
zK1<=-_$<*rgXK%K7;426NP*8@?}Z<><zCIr=&s{hj%DjlX-2=MjZ{m;o*}<jDf{dz
z=pZ9aG9F!tGBTQ((X?#VGz>laSjK3nJjsPUIdu@>PjOy-q^_xht@gHzDqrSA$}3Rl
z6s5pou^_+9Ms-n&#QVijd5k&e6UJWYoIG~uG>q?*&c&&*(1=Hg-2~8!k&!c@5#2CN
z(={IRq5I_n7j}5^VRctsQf-A*SmNYioJKb{>U{|8ISXE#>xS!dsvwMqc03P$o9%<Y
zX1gRd8iC{Uo3J})-K=#>OoUiI{|gM)EVx7<I)V(Jy9l=l^aX(;g!GTecjr-CN_jv@
z@&!u1fN$UgnZ=VzRZ-)&;*R_s@#4zy07=n4#DXBgUNZrem7|dVR%|?nQB26`Imfiz
zT;rOGQt;)<5X>%O_;W>t>#N6jZd#N=&)X|0Xf8hyam{6gaOcB+-Z328(M_nW9_N{9
z{(tS6W-Zb#H={ZNS=dl`C*ViYdvvXnkg{TEnF@E{O(?)_vk%U1@v7Tzh7-4S)6H5s
zY-}BEcl$Lflhwk@V`vuH0xYlP;HxdM@vDe9(KWJ;Z5xIiiX#Zv^%o+3QAQkZ>bhpT
zCJb&R8zBJi9kPQe;snQW9bL=jz}xO<ga|xbPe_cqL*aG&thz&n_`TZNxpT^kky9kZ
kk&k%PEAhYo_YgjavBIm!-l&_1MsIG^r_j9-5q;kAFTd6;4gdfE

diff --git a/web/components/help/help.js b/web/components/help/help.js
new file mode 100644
index 0000000..96c1112
--- /dev/null
+++ b/web/components/help/help.js
@@ -0,0 +1,112 @@
+// Imports
+import * as Results from "/components/help/results-help.js";
+import * as Vote from "/components/help/vote-help.js";
+import * as Management from "/components/help/management-help.js";
+import * as User from "/components/help/user-help.js";
+
+// DOM elements
+
+export async function mount(where) {
+  const helperPage = new Helper();
+  await helperPage.mount(where);
+}
+
+class Helper {
+  constructor() {}
+
+  async mount(where) {
+    const mountpoint = where;
+    document.getElementById(mountpoint).innerHTML = /* HTML */ `
+      <div class="tabs is-boxed is-toggle is-fullwidth">
+        <ul>
+          <li id="results-helper" class="is-active">
+            <a>
+              <span class="icon is-small"
+                ><i class="fas fa-poll" aria-hidden="true"></i
+              ></span>
+              <span>Résultats</span>
+            </a>
+          </li>
+          <li id="votes-helper">
+            <a>
+              <span class="icon is-small"
+                ><i class="fas fa-vote-yea" aria-hidden="true"></i
+              ></span>
+              <span>Votes</span>
+            </a>
+          </li>
+          <li id="management-helper">
+            <a>
+              <span class="icon is-small"
+                ><i class="fas fas fa-edit" aria-hidden="true"></i
+              ></span>
+              <span>Gestion</span>
+            </a>
+          </li>
+          <li id="user-helper">
+            <a>
+              <span class="icon is-small"
+                ><i class="fas fas fa-users" aria-hidden="true"></i
+              ></span>
+              <span>Utilisateurs</span>
+            </a>
+          </li>
+        </ul>
+      </div>
+      <section id="help-section" class="container" style="margin-bottom: 230px;"></section>
+    `;
+
+    this.handleDOM();
+    await Results.mount("help-section");
+
+  }
+  handleDOM() {
+    document
+      .getElementById("results-helper")
+      .addEventListener("click", async function () {
+        await Results.mount("help-section");
+        document.getElementById("votes-helper").setAttribute("class", "");
+        document.getElementById("management-helper").setAttribute("class", "");
+        document.getElementById("user-helper").setAttribute("class", "");
+        document
+          .getElementById("results-helper")
+          .setAttribute("class", "is-active");
+      });
+
+    document
+      .getElementById("votes-helper")
+      .addEventListener("click", async function () {
+          await Vote.mount("help-section");
+        document.getElementById("results-helper").setAttribute("class", "");
+        document.getElementById("management-helper").setAttribute("class", "");
+        document.getElementById("user-helper").setAttribute("class", "");
+        document
+          .getElementById("votes-helper")
+          .setAttribute("class", "is-active");
+      });
+
+    document
+      .getElementById("management-helper")
+      .addEventListener("click", async function () {
+          await Management.mount("help-section");
+        document.getElementById("results-helper").setAttribute("class", "");
+        document.getElementById("votes-helper").setAttribute("class", "");
+        document.getElementById("user-helper").setAttribute("class", "");
+        document
+          .getElementById("management-helper")
+          .setAttribute("class", "is-active");
+      });
+
+    document
+      .getElementById("user-helper")
+      .addEventListener("click", async function () {
+          await User.mount("help-section");
+        document.getElementById("results-helper").setAttribute("class", "");
+        document.getElementById("votes-helper").setAttribute("class", "");
+        document.getElementById("management-helper").setAttribute("class", "");
+        document
+          .getElementById("user-helper")
+          .setAttribute("class", "is-active");
+      });
+  }
+}
diff --git a/web/components/help/management-help.js b/web/components/help/management-help.js
new file mode 100644
index 0000000..22cdcd7
--- /dev/null
+++ b/web/components/help/management-help.js
@@ -0,0 +1,188 @@
+export async function mount(where) {
+  const managementHelperComponent = new ManagementHelper();
+  await managementHelperComponent.mount(where);
+}
+
+class ManagementHelper {
+  constructor() {}
+
+  async mount(where) {
+    const mountpoint = where;
+    document.getElementById(mountpoint).innerHTML = /* HTML */ `
+      <div class="card-no-hover helper">
+        <h2 class="title is-2">Aide pour la gestion d'une élection</h2>
+
+        <h5 class="title is-5">Onglet Partis politiques</h5>
+
+        L'onglet "Partis Politiques" permet de créer des tendances poltiques qui
+        se retrouvent sur plusieurs circonscriptions.<br />
+        Pour ajuter un parti il suffit de cliquer sur
+        <span class="icon is-small">
+          <i class="fas fa-plus"></i>
+        </span>
+        Un fenêtre s'ouvre et permet de saisir le nom du parti (ou de la
+        tendance politique) et de choisir la couleur qui sera associé à ce parti
+        dans l'affichage des résultats. Pour modifier un parti, il suffit de
+        cliquer sur
+        <span class="icon is-small">
+          <i class="fas fa-pen"></i>
+        </span>
+        et pour en supprimer un sur
+        <span class="icon is-small"> <i class="fas fa-times"></i> </span>. La
+        suppression affichera l'ensemble des listes qui sont rattachées à ce
+        parti sur toutes les élections et demandera de confirmer l'action de
+        suppression car toutes ces listes seront alors supprimées.<br /><br />
+
+        <h5 class="title is-5">Onglet Élection</h5>
+        L'onglet élection permet de créer le découpage territorial d'une
+        élection. Il est possible de naviguer dans l'abrorescence de l'élection
+        en cliquant sur les différentes zones la composant<br /><br />
+
+        <article class="message is-warning">
+          <div class="message-header">
+            <p>Attention</p>
+          </div>
+          <div class="message-body">
+            Il est necessaire pour que l'application fonctionne corrctement que
+            chaque élection ai au moins une circonscription composée elle même
+            d'au moins une ville avec au minimum un bureau.
+          </div>
+        </article>
+
+        <strong>Élection</strong>
+        Pour créer une nouvelle élection cliquer sur
+        <span class="icon is-small"> <i class="fas fa-plus"></i> </span>, une
+        fenêtre s'ouvre alors, il faut saisir le nom de cette élection, choisir
+        le système de vote qui sera appliqué (pour calculer les résultats),
+        selectionner la carte pour les cirocnscriptions et celle pour les
+        villes. En cliquant sur "Sauvegarder" l'élection sera ajoutée et en
+        cliquant sur "Sauvegarder (ajouter circonscription)" elle sera
+        sauvegardée et la fenêtre pour y attacher une circonscription sera
+        ouverte.<br /><br />
+
+        <strong>Circonscription</strong>
+        Une circonscription peut être ajoutée à l'élection selectionnée en
+        cliquant sur
+        <span class="icon is-small"><i class="fas fa-plus"></i></span> . Il faut
+        alors saisir son nom, le nombre de siège à pourvoir et l'identifiant qui
+        lui correspond sur la carte des circonscriptions. <br />En cliquant sur
+        "Sauvegarder" la circonscription sera ajoutée et en cliquant sur
+        "Sauvegarder (ajouter circonscription)" elle sera ajoutée et la fenêtre
+        pour ajouter une nouvelle circonscription à l'élection sera ouverte. En
+        cliquant sur "Sauvegarder (ajouter ville)" elle sera ajoutée et la
+        fenêtre pour ajouter une ville à la circonscription sera ouverte.<br /><br />
+
+        <strong>Ville</strong>
+        Une ville peut être ajoutée à une circonscription selectionnée en
+        cliquant sur
+        <span class="icon is-small"><i class="fas fa-plus"></i></span> . Il faut
+        alors saisir son nom et l'identifiant qui lui correspond sur la carte
+        des villes. <br />En cliquant sur "Sauvegarder" la ville sera ajoutée et
+        en cliquant sur "Sauvegarder (ajouter ville)" elle sera ajoutée et la
+        fenêtre pour ajouter une nouvelle ville à la circonscription sera
+        ouverte. En cliquant sur "Sauvegarder (ajouter bureau)" elle sera
+        ajoutée et la fenêtre pour ajouter un bureau à la ville sera ouverte.<br /><br />
+
+        <strong>Bureau</strong>
+        Un bureau peut être ajoutée à une ville selectionnée en cliquant sur
+        <span class="icon is-small"><i class="fas fa-plus"></i></span> . Il faut
+        alors saisir son nom et le nombre d'inscrit dans ce bureau.
+        <article class="message is-warning">
+          <div class="message-header">
+            <p>Attention</p>
+            <button class="delete" aria-label="delete"></button>
+          </div>
+          <div class="message-body">
+            Le nombre d'inscrit est obligatoire car il permet de calculer le
+            taux d'abstention et le pourcentage de saisie en cours qui est
+            pondéré par le nombre d'inscrits par bureau.
+          </div>
+        </article>
+        En cliquant sur "Sauvegarder" le bureau sera ajouté et en cliquant sur
+        "Sauvegarder (ajouter bureau)" il sera ajouté et la fenêtre pour ajouter
+        un nouveau bureau à la ville sera ouverte.<br /><br />
+
+        <strong>Cloner une élection</strong>
+        Il est possible de cloner une élection et son arborescence en cliquant
+        sur
+        <span class="icon is-small">
+          <i class="fas fa-clone"></i>
+        </span>
+        dans la liste des élections.<br /><br />
+
+        <h5 class="title is-5">Onglet Tour</h5>
+        Une élection est composée de un ou plusieurs tours, il faut donc
+        configuré ces tours pour utiliser l'application.<br /><br />
+
+        Dans l'onglet "Tour" il est possible de créer un tour pour une élection
+        en cliquant sur
+        <span class="icon is-small"><i class="fas fa-plus"></i></span>. Il faut
+        alors sélectionner l'élection à laquelle on crée un tour, la date du
+        tour et le numéro du tour. Il est possible de modifier les informations
+        en cliquant sur
+        <span class="icon is-small"><i class="fas fa-pen"></i></span> et de le
+        supprimer en cliquant sur
+        <span class="icon is-small"><i class="fas fa-times"></i></span
+        ><br /><br />
+
+        En cliquant sur un tour, on rentre dans la configuration du tour. La
+        bouton sur la gauche permet de revenir à l'écran précédent. Il y a deux
+        sections qui peuvent être ouvertes l'une après l'autre, il faut cliquer
+        sur la barre de titre de l'une des deux sections pour en changer.<br /><br />
+
+        <strong>Section "Bureaux de Votes"</strong><br />
+        La liste de tous les bureaux de votes de l'éelection s'affiche ici. En
+        cliquant sur un bureau les détails de ce bureau s'affiche. Il est
+        possible de consulter les votes et de les modifier comme dans l'onglet
+        "Votes". Il est possible de "Valider" un bureau, les votes de ce bureau
+        ne pourront alors plus être modifié.<br /><br />
+
+        Pour ajouter un utilisateur à la liste des saisseurs, cliquer sur
+        l'icône
+        <span class="icon is-small">
+          <i class="fas fa-user"></i>
+        </span>
+        pour ouvrir la liste des saisisseurs de ce burea, il suffit ensuite de
+        cliquer sur l'utilisateur dans la colonne de droite "Saisisseurs
+        disponibles", il va alors basculer dans la colonne de gauche
+        "Saisisseurs actifs". Pour le supprimer il suffit de faire de même dans
+        la colonne de gauche "Saisisseurs actifs", il va alors basculer dans la
+        colonne de droite "Saisisseurs disponibles".<br /><br />
+
+        <strong>Section "Liste des candidats par circonscription"</strong>
+        La liste des circonscription du tour est affichée, en cliquant sur une
+        circonscription, la liste des listes de candidats de la circonscription
+        s'affiche. Il est possible d'en créer une en cliquant sur
+        <span class="icon is-small"> <i class="fas fa-plus"></i>. </span>Une
+        fenêtre s'ouvre alors pour saisir le nom de la liste et le parti auquel
+        elle est attachée. En cliquant sur
+        <span class="icon is-small">
+          <i class="fas fa-download"></i>
+        </span>
+        Une fenêtre s'ouvre et permet d'importer une liste directement depuis un
+        tour précédent pour éviter de resaisir toutes les informations de la
+        listes.<br /><br />
+
+        En cliquant sur une liste, les canddiats s'affichent, il est possible
+        d'ajouter et de modifier des candidats en éditant les champs dans le
+        tableau et en cliquant sur
+        <span class="icon is-small">
+          <i class="fas fa-check"></i>
+        </span>
+        pour chaque ligne éditée afin qu'elles soient prises en compte.<br />
+        Le rang ordonne les candidats lors du calcul des élus, la date de
+        naissance permet de départager des listes et des candidats lors du
+        calcul des élus en cas d'égalité, la case incompatibilité potentielle
+        permet d'identifier les élus qui pourraient poser problème s'ils sont
+        élus (autre mandat en cours, fonctionnaire...). La case refusé permet
+        d'éliminer du calcul des élus des candidats qui se sont porter sur une
+        liste mais qui finalement ne souhaient pas siéger. La case supprimer
+        permet d'éliminer du calcul des élus les candidats qui seraient décédé
+        entre la date de cloture de dépôt des listes et l'élection. (La case
+        "Conseiller communautaire" n'est pas fonctionelle mais permettrai
+        d'identifier les élus qui vont siéger au conseil communautaire lors
+        d'élection municipale)
+      </div>
+    `;
+  }
+}
diff --git a/web/components/help/results-help.js b/web/components/help/results-help.js
new file mode 100644
index 0000000..17a1ac3
--- /dev/null
+++ b/web/components/help/results-help.js
@@ -0,0 +1,65 @@
+export async function mount(where) {
+  const resultsHelperComponent = new ResultsHelper();
+  await resultsHelperComponent.mount(where);
+}
+
+class ResultsHelper {
+  constructor() {}
+
+  async mount(where) {
+    const mountpoint = where;
+    document.getElementById(mountpoint).innerHTML = /* HTML */ `
+      <div class="card-no-hover helper">
+        <h2 class="title is-2">Aide pour les résultats</h2>
+
+        Le menu "Résultats" permet de voir les résultats d'un tour d'une
+        élection. Il faut donc sélectionner le tour de l'élection que l'on
+        souhaite consulter.<br />
+
+        Il est possible de filtrer les résultats pour ne prendre en compte que
+        les zones qui sont complétées, que celles qui ont étaient validée avec
+        les résultats de la préfecture ou alors en prenant en compte les zones
+        avec des résultats partiels.<br /><br />
+
+        <h5 class="title is-5">Onglet Général</h5>
+
+        L'onglet général permet de voir les résultats pour l'ensemble du
+        tour.<br />
+        À venir : la partie statistiques permet de comparer les résultats avec
+        d'autres élections afin de suivre la tendande dans le temps.<br /><br />
+
+        <h5 class="title is-5">Onglet circonscriptions ou villes</h5>
+        Les onglets "Circonscription" et "Villes" fonctionnent de la même façon
+        mais avec le zonage appropié.<br />
+
+        L'écran est découpé en trois composants : la carte (à gauche), le flux
+        d'actualité (en haut à droite) et les résultats détaillés (en bas à
+        droite).<br />Chaque zone peut être aggrandie en appuyant sur
+        <span class="icon is-small">
+          <i class="fa fa-expand-arrows-alt"></i> </span
+        >. Pour diminuer la taille de la zone et revenir à l'état initial il
+        suffit de cliquer sur
+        <span class="icon is-small">
+          <i class="fa fa-compress-arrows-alt"></i> </span
+        ><br /><br />
+        Le flux d'actualité défile de manière automatique, il est possible de
+        désactiver ce défilement en décochant la case "Défilement automatique".
+        Lorsque la souris se trouve au dessus de la zone du flux, le défilement
+        s'arrête. Il est possible d'ouvrir les résultats détaillés d'une zone en
+        cliquant dessus dans le flux, les détails s'affichent alors dans la
+        partie "Résultats détaillés" <br /><br />
+        La partie résultat détaillés permet de voir les résultats d'une zone en
+        particulier en selectionnant la circonscription (et la ville dans l'onglet "Villes"). En cliquant sur
+        <span class="icon is-small">
+          <i class="fa fa-expand-arrows-alt"></i>
+        </span>
+        il est possible de voir des statistiques sur la zone comme
+        l'abstention, le nombre de votes blanc et nuls. Avec le filtre "partiel"
+        le pourcentage de saisie de la zone s'affiche également afin de savoir
+        si les résultats donnés sont proche d'être complets ou non.<br />
+        Dans l'onglet "Circonscription" lorsque les résultats d'une
+        circonscription sont tous saisis la liste des élus s'affiche.
+      </div>
+    `;
+  }
+}
diff --git a/web/components/help/user-help.js b/web/components/help/user-help.js
new file mode 100644
index 0000000..7ee8b46
--- /dev/null
+++ b/web/components/help/user-help.js
@@ -0,0 +1,63 @@
+export async function mount(where) {
+  const userHelperComponent = new UserHelper();
+  await userHelperComponent.mount(where);
+}
+
+class UserHelper {
+  constructor() {}
+
+  async mount(where) {
+    const mountpoint = where;
+    document.getElementById(mountpoint).innerHTML = /* HTML */ `
+      <div class="card-no-hover helper">
+        <h2 class="title is-2">Aide pour la gestion des utilisateurs</h2>
+
+        Les utilisateurs peuvent soient provenir de la base locale de
+        l'application soit être provisionnés par un fournisseur d'identité. La
+        différence se fait sur la présence du champ IdOAuth qui n'est renseigné
+        que pour les utilisateurs provisonnés depuis le fournisseur d'identité
+        raccordé à l'application.<br /><br />
+
+        <h5 class="title is-5">Ajout d'un utilisateur</h5>
+
+        Pour ajouter un utilisateur il faut cliquer sur le bouton
+        <span class="icon is-small">
+          <i class="fas fa-plus"></i>
+        </span>
+        en dessous du tabeau avec la liste des utilisateurs. Il faut au minimum
+        renseigner un identifiant et un rôle pour l'utilisateur. Le mot de
+        passe, qui est également obligatoire, est généré de manière aléatoire et
+        peut être modifié. <br /><br />
+
+        <h5 class="title is-5">Modification d'un utilisateur</h5>
+
+        Pour modifier un utilisateur il faut cliquer sur le bouton "modifier"
+        dans la colonne action des utilisateurs. La même modale que pour la
+        création s'ouvre. Enlever le rôle de saisisseur à un utilisateur
+        enlèvera toutes ses affectations sur les bureaux qui seront
+        définitivement perdus.<br />
+
+        Lors de la modification d'un utilisateur le champ mot de passe est vide,
+        s'il est laissé vide le mot de passe ne sera pas modifié, autrement il
+        sera modifié par la valeur du champ.<br /><br />
+
+        <h5 class="title is-5">Affectation des saisisseurs sur les bureaux</h5>
+
+        Pour affecter des utilisateurs à un bureau il faut se rendre dans le
+        menu "Gestion" puis dans l'onglet "Tour", sélectionner un tour, puis
+        dans la liste des bureaux de votes cliquer sur l'icône
+        <span class="icon is-small">
+          <i class="fas fa-user"></i>
+        </span>
+        pour ouvrir la liste des saisisseurs de ce bureau.<br />
+
+        Pour ajouter un utilisateur à la liste des saisseurs il suffit de
+        cliquer sur l'utilisateur dans la colonne de droite "Saisisseurs
+        disponibles", il va alors basculer dans la colonne de gauche
+        "Saisisseurs actifs". Pour le supprimer il suffit de faire de même dans
+        la colonne de gauche "Saisisseurs actifs", il va alors basculer dans la
+        colonne de droite "Saisisseurs disponibles".
+      </div>
+    `;
+  }
+}
diff --git a/web/components/help/vote-help.js b/web/components/help/vote-help.js
new file mode 100644
index 0000000..756f6f9
--- /dev/null
+++ b/web/components/help/vote-help.js
@@ -0,0 +1,46 @@
+export async function mount(where) {
+  const voteHelperComponent = new VoteHelper();
+  await voteHelperComponent.mount(where);
+}
+
+class VoteHelper {
+  constructor() {}
+
+  async mount(where) {
+    const mountpoint = where;
+    document.getElementById(mountpoint).innerHTML = /* HTML */ `
+      <div class="card-no-hover helper">
+        <h2 class="title is-2">Aide pour la saisie des votes</h2>
+        <h5 class="title is-5">Sélection d'un bureau</h5>
+        Lors de l'ouverture du menu "Votes", il est necessaire de choisir le
+        bureau de vote qui sera saisi. Il faut commencer par choisir une
+        élection puis un tour par exemple "Métropolitaine 2020") et tour 1 pour
+        saisir les résultats du premier tour des élections métropolitaines
+        2020.<br />
+        À partir de ce moment tous les bureaux du premier tour des élections
+        métropolitaines 2020 apparaissent dans la partie droite de l'écran. Il
+        est possible de filtrer plus en profondeur les bureaux en sélectionnant
+        une Circonscription puis une Ville.<br />
+        Il faut ensuite cliquer sur un des bureaux de la liste pour saisir les
+        résultats de ce bureau. <br /><br />
+        <h5 class="title is-5">Saisie des votes</h5>
+        Il est possible de vérifier que l'on saisi les résultats pour le bon
+        bureau en vérifiant en haut de la page le fil d'ariane qui indique le
+        bureau selectionné dans son arborescence.<br />
+        Chaque ligne du tableau correspond à une liste de la circonscription,
+        les deux dernières lignes correspondent aux votes blanc et nuls. Il faut
+        alors sasir le nombre de voix dans chaque ligne du tableau.<br />
+        En bas du tableau, la somme des suffrages et la somme des suffrages
+        exprimées (sans les votes blanc et nuls) permet de vérifier la saisie en
+        accord avec le PV de vote après sauvegarde des résultats. <br /> 
+        Pour sauvegarder les résultats il faut cliquer sur le bouton "Sauvegarder".<br />
+        Le bouton "Supprimer" permet de supprimer les résultats saisis pour ce
+        bureau.<br />
+        Le bouton "Annuler" permet d'annuler les modifications apportées mais
+        qui n'ont pas était sauvegardées et revient donc à l'état initial.<br />
+        Le bouton "Retour" permet de revenir à la page de sélection des
+        bureaux.<br />
+      </div>
+    `;
+  }
+}
diff --git a/web/components/home/home.js b/web/components/home/home.js
deleted file mode 100644
index 7c04186..0000000
--- a/web/components/home/home.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// Imports
-
-// DOM elements
-let mountpoint;
-
-// local variables
-
-export async function mount(where) {
-  mountpoint = where;
-  document.getElementById(mountpoint).innerHTML = /* HTML */ `
-    <section class="section">
-      <div class="container">
-        <h1 class="title">Accueil</h1>
-        <h2 class="subtitle">
-          Cette application permet de gérer, saisir et voir les résultats d'une élection.
-        </h2>
-      </div>
-    </section>
-  `;
-}
diff --git a/web/components/management/candidate-lists.js b/web/components/management/candidate-lists.js
index 1f77a2d..2cc80e6 100644
--- a/web/components/management/candidate-lists.js
+++ b/web/components/management/candidate-lists.js
@@ -176,7 +176,7 @@ class CandidateList {
             <div class="control select">
               <select
                 name="party"
-                id="candclone-cardidateList-modal-party"
+                id="candidateList-modal-party"
               ></select>
             </div>
           </div>
diff --git a/web/components/navbar/navbar.js b/web/components/navbar/navbar.js
index f0e19ae..991b6cb 100644
--- a/web/components/navbar/navbar.js
+++ b/web/components/navbar/navbar.js
@@ -59,9 +59,6 @@ export async function CreateMenu() {
             user === undefined
               ? ``
               : /* HTML */ `
-                  <a class="navbar-item" href="#home"
-                    ><i class="navbar-menu-icon fas fa-home"></i>Accueil</a
-                  >
                   <a class="navbar-item" href="#visualization"
                     ><i class="navbar-menu-icon fas fa-poll"></i>Résultats</a
                   >
@@ -85,6 +82,9 @@ export async function CreateMenu() {
                         >
                       `
                     : ""}
+                    <a class="navbar-item" href="#help"
+                    ><i class="navbar-menu-icon fas fa-question-circle"></i>Aide</a
+                  >
                 `
           }
         </div>
diff --git a/web/components/visualization/results-zone.js b/web/components/visualization/results-zone.js
index d52f471..1279afa 100644
--- a/web/components/visualization/results-zone.js
+++ b/web/components/visualization/results-zone.js
@@ -68,7 +68,7 @@ class ResultZoneComponent {
         <div id="results-section" class="card-no-hover" ">
         <header class="card-header">
           <p class="card-header-title">
-            Résultats
+            Résultats détaillés
           </p>
           <button id="zoom-results" class="button is-success">
             <span class="icon is-small">
diff --git a/web/main.js b/web/main.js
index 6cb579d..1ad9ed9 100644
--- a/web/main.js
+++ b/web/main.js
@@ -1,10 +1,10 @@
-import * as Home from "/components/home/home.js";
 import * as Users from "/components/users/users.js";
 import * as Management from "/components/management/management.js";
 import * as Votes from "/components/vote/vote-page.js";
 import * as Visualization from "/components/visualization/visualization-page.js";
 import * as Login from "/components/login/login.js";
 import * as Navbar from "/components/navbar/navbar.js";
+import * as Helper from "/components/help/help.js";
 import { AnimateCSS } from "/services/common/common.js";
 
 const mountPoint = document.getElementById("main");
@@ -19,11 +19,6 @@ document.addEventListener("DOMContentLoaded", function () {
 async function navigate() {
   window.clearInterval(window.intervalRefreshResults);
   switch (location.hash) {
-    case "#home":
-      load(mountPoint, async function () {
-        await Home.mount("main");
-      });
-      break;
     case "#votes":
       load(mountPoint, async function () {
         await Votes.mount("main");
@@ -49,8 +44,13 @@ async function navigate() {
         await Login.mount("main");
       });
       break;
+    case "#help":
+      load(mountPoint, async function () {
+        await Helper.mount("main");
+      });
+      break;
     default:
-      location.hash = "#home";
+      location.hash = "#visualization";
       break;
   }
 }
diff --git a/web/style.css b/web/style.css
index 59436c8..56fdee4 100644
--- a/web/style.css
+++ b/web/style.css
@@ -227,3 +227,8 @@ select {
 #map-component {
   height: 100%;
 }
+
+.helper {
+  text-align: justify;
+  padding: 2em;
+}
-- 
GitLab