website/js/customElements/mainMenu.js
2021-11-09 13:06:35 +01:00

82 lines
2.8 KiB
JavaScript

class MainMenu extends HTMLElement {
constructor() {
super();
this.generateMenu();
}
async generateMenu() {
let menu = await (await fetch("/API/mainMenu.json")).json();
let menuContainer = document.createElement("div");
menuContainer.className = "mainMenuContainer";
let burgerMenu = document.createElement("div");
burgerMenu.id = "burgerMenu";
burgerMenu.onclick = () => {
document.getElementById("burgerMenu").classList.toggle("change");
document.querySelector(".mainMenuContainer").classList.toggle("visible");
}
for (let i = 1; i <= 3; i++) {
let bar = document.createElement("div");
bar.className = "bar" + i;
burgerMenu.appendChild(bar);
}
this.appendChild(burgerMenu);
menu.forEach((element) => {
if (element["type"] === "link") {
let a = document.createElement("a");
a.href = element["url"];
a.innerText = element["name"];
a.classList.add("navLink");
menuContainer.appendChild(a);
if (window.location['pathname'] === element["url"]) {
document.title = element["name"] + " - Jonas Leder";
}
} else if (element["type"] === "dropdown") {
let dropdown = document.createElement("div");
dropdown.className = "dropdown";
let a = document.createElement("a");
a.href = element["url"];
a.classList.add("navLink");
a.innerText = element["name"];
dropdown.appendChild(a)
let dropdownContent = document.createElement("div");
dropdownContent.className = "dropdown-content"
element["childElements"].forEach((childElement) => {
let a = document.createElement("a");
a.href = childElement["url"];
a.innerText = childElement["name"];
dropdownContent.appendChild(a);
let br = document.createElement("br");
dropdownContent.appendChild(br);
if (window.location['pathname'] === childElement["url"]) {
document.title = childElement["name"] + " - Jonas Leder";
}
});
dropdown.appendChild(dropdownContent);
menuContainer.appendChild(dropdown);
}
});
this.appendChild(menuContainer);
if(document.title == "") {
document.title = this.getAttribute("data-title") + " - Jonas Leder";
}
}
}
customElements.define("jl-main_menu", MainMenu);