From c12dce577ccd01027407e67b84f2cf0bbaae0b5e Mon Sep 17 00:00:00 2001 From: Alexis POYEN <apoyen@grandlyon.com> Date: Wed, 20 May 2020 10:40:23 +0200 Subject: [PATCH] Resolve "Manage Election menu" --- web/assets/brand/brand.js | 4 +- web/components/home/home.js | 4 +- web/components/management/election.js | 24 ++++++++++ web/components/management/management.js | 62 +++++++++++++++++++++++++ web/components/management/round.js | 24 ++++++++++ web/components/navbar/navbar.js | 1 + web/index.html | 4 +- web/main.js | 6 +++ 8 files changed, 123 insertions(+), 6 deletions(-) create mode 100644 web/components/management/election.js create mode 100644 web/components/management/management.js create mode 100644 web/components/management/round.js diff --git a/web/assets/brand/brand.js b/web/assets/brand/brand.js index ee52b4d..9f20fb0 100644 --- a/web/assets/brand/brand.js +++ b/web/assets/brand/brand.js @@ -1,3 +1,3 @@ -export const windowTitle = "SDK-GO"; -export const navTitle = "SDK-GO"; +export const windowTitle = "Elections"; +export const navTitle = "Elections"; export const loginModes = { inmemory: true, oauth2: true }; diff --git a/web/components/home/home.js b/web/components/home/home.js index 97b7678..7c04186 100644 --- a/web/components/home/home.js +++ b/web/components/home/home.js @@ -10,9 +10,9 @@ export async function mount(where) { document.getElementById(mountpoint).innerHTML = /* HTML */ ` <section class="section"> <div class="container"> - <h1 class="title">Accueil de la GO-banque</h1> + <h1 class="title">Accueil</h1> <h2 class="subtitle"> - Ceci est une application de démonstration du SDK écrit en GO avec GORM et Vanilla JS avec le framework CSS Bulma. + Cette application permet de gérer, saisir et voir les résultats d'une élection. </h2> </div> </section> diff --git a/web/components/management/election.js b/web/components/management/election.js new file mode 100644 index 0000000..c7eaf22 --- /dev/null +++ b/web/components/management/election.js @@ -0,0 +1,24 @@ +// Imports +import * as Auth from "/services/auth/auth.js"; + +// DOM elements + +// local variables +let current_user; + +export async function mount(where) { + const roundComponent = new Election(); + await roundComponent.mount(where); +} + +class Election { + constructor() {} + + async mount(where) { + const mountpoint = where; + document.getElementById(mountpoint).innerHTML = /* HTML */ ` + Ceci est une élection + `; + current_user = await Auth.GetUser(); + } +} diff --git a/web/components/management/management.js b/web/components/management/management.js new file mode 100644 index 0000000..ab67841 --- /dev/null +++ b/web/components/management/management.js @@ -0,0 +1,62 @@ +// Imports +import * as Auth from "/services/auth/auth.js"; +import * as Election from "/components/management/election.js"; +import * as Round from "/components/management/round.js"; + +// DOM elements + +// local variables +let current_user; + +export async function mount(where) { + const managementPage = new Management(); + await managementPage.mount(where); +} + +class Management { + constructor() {} + + async mount(where) { + const mountpoint = where; + document.getElementById(mountpoint).innerHTML = /* HTML */ ` + <div class="tabs is-boxed is-toggle is-fullwidth"> + <ul> + <li id="election" class="is-active"> + <a> + <span class="icon is-small" + ><i class="fas fa-vote-yea" aria-hidden="true"></i + ></span> + <span>Election</span> + </a> + </li> + <li id="round"> + <a> + <span class="icon is-small" + ><i class="fas fa-calendar" aria-hidden="true"></i + ></span> + <span>Tour</span> + </a> + </li> + </ul> + </div> + <section class="section" id="management-section" style="margin-bottom: 230px;"></section> + `; + current_user = await Auth.GetUser(); + this.handleDom(); + document.getElementById("election").click() + + } + + handleDom(){ + document.getElementById("election").addEventListener("click", async function (){ + await Election.mount("management-section"); + document.getElementById("election").setAttribute("class", "is-active") + document.getElementById("round").setAttribute("class", "") + }); + document.getElementById("round").addEventListener("click", async function (){ + await Round.mount("management-section"); + document.getElementById("election").setAttribute("class", "") + document.getElementById("round").setAttribute("class", "is-active") + }); + } +} diff --git a/web/components/management/round.js b/web/components/management/round.js new file mode 100644 index 0000000..74f8947 --- /dev/null +++ b/web/components/management/round.js @@ -0,0 +1,24 @@ +// Imports +import * as Auth from "/services/auth/auth.js"; + +// DOM elements + +// local variables +let current_user; + +export async function mount(where) { + const roundComponent = new Round(); + await roundComponent.mount(where); +} + +class Round { + constructor() {} + + async mount(where) { + const mountpoint = where; + document.getElementById(mountpoint).innerHTML = /* HTML */ ` + Ceci est un tour d'élection. + `; + current_user = await Auth.GetUser(); + } +} diff --git a/web/components/navbar/navbar.js b/web/components/navbar/navbar.js index 98229b6..0e5145c 100644 --- a/web/components/navbar/navbar.js +++ b/web/components/navbar/navbar.js @@ -54,6 +54,7 @@ export async function CreateMenu() { <a class="navbar-item" href="#home"><i class="navbar-menu-icon fas fa-home"></i>Accueil</a> ${user.role == "ADMIN" ? /* HTML */ ` + <a class="navbar-item" href="#management"><i class="navbar-menu-icon fas fa-edit"></i>Gestion</a> <a class="navbar-item" href="#users"><i class="navbar-menu-icon fas fa-users"></i>Utilisateurs</a> ` : ""} diff --git a/web/index.html b/web/index.html index f8494dc..b294e90 100644 --- a/web/index.html +++ b/web/index.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html lang="en" class="has-navbar-fixed-top"> <head> - <title>SDK-GO</title> + <title>Elections</title> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <link rel="icon" href="assets/brand/favicon.ico" /> @@ -28,7 +28,7 @@ <div class="navbar-brand"> <div class="navbar-item"> <div class="buttons"> - <a class="button is-danger" href="https://forge.grandlyon.com/apoyen/sdk-go" target="_blank" rel="noopener noreferrer"> + <a class="button is-danger" href="https://forge.grandlyon.com/apoyen/elections" target="_blank" rel="noopener noreferrer"> <span class="icon"> <svg class="svg-inline--fa fa-gitlab fa-w-16" diff --git a/web/main.js b/web/main.js index 552aa2f..fd9f743 100644 --- a/web/main.js +++ b/web/main.js @@ -1,5 +1,6 @@ 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 Login from "/components/login/login.js"; import * as Navbar from "/components/navbar/navbar.js"; import { AnimateCSS } from "/services/common/common.js"; @@ -27,6 +28,11 @@ async function navigate() { await Users.mount("main"); }); break; + case "#management": + load(mountPoint, async function () { + await Management.mount("main"); + }); + break; case "#login": load(mountPoint, async function () { await Login.mount("main"); -- GitLab