Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
navbar.js 2.76 KiB
Newer Older
  • Learn to ignore specific revisions
  • "use strict";
    
    const { images_url } = require("../../../constants");
    
    
    peter_rabbit's avatar
    peter_rabbit committed
    const HOME_LOGO = "logo_kuadrado.svg";
    
    const NAV_MENU_ITEMS = [
        ["/public/games/", "Jeux"],
        ["/public/software-development/", "Software"],
        [
            "/public/education/",
            "Pédagogie",
            [
                // submenu
                ["/public/education/#game-studio-club", "Game Studio Club"],
                ["/public/education/#popularization", "Animations vulgarisation"],
            ],
        ],
    ];
    
    class NavBar {
        constructor() {
            this.initEventHandlers();
        }
    
        handleBurgerClick() {
            document.getElementById("nav-menu-list").classList.toggle("responsive-show");
        }
    
        initEventHandlers() {
            window.addEventListener("click", event => {
                if (
                    event.target.id !== "nav-menu-list" &&
                    !event.target.classList.contains("burger") &&
                    !event.target.parentNode.classList.contains("burger")
                ) {
                    document.getElementById("nav-menu-list").classList.remove("responsive-show");
                }
            });
        }
    
        renderHome() {
            return {
                tag: "div",
                class: "home",
                contents: [
                    {
                        tag: "a",
                        href: "/public/",
                        contents: [
                            {
                                tag: "img",
                                src: `${images_url}/${HOME_LOGO}`,
                            },
                        ],
                    },
                ],
            };
        }
    
        renderMenu(menuItemsArray, isSubmenu = false) {
            return {
                tag: "ul",
                id: "nav-menu-list",
                class: isSubmenu ? "submenu" : "",
                contents: menuItemsArray.map(link => {
                    const [href, text, submenu] = link;
                    return {
                        tag: "li",
                        class: !isSubmenu && window.location.pathname === href ? "active" : "",
                        contents: [
                            {
                                tag: "a",
                                href,
                                contents: text,
                            },
                        ].concat(submenu ? [this.renderMenu(submenu, true)] : []),
                    };
                }),
            };
        }
    
        renderResponsiveBurger() {
            return {
                tag: "div",
                class: "burger",
                onclick: this.handleBurgerClick.bind(this),
                contents: [{ tag: "span", contents: "···" }],
            };
        }
    
        render() {
            return {
                tag: "nav",
                contents: [
                    this.renderHome(),
                    this.renderResponsiveBurger(),
                    this.renderMenu(NAV_MENU_ITEMS),
                ],
            };
        }
    }
    
    module.exports = NavBar;