From f1c4f253c31478ae721b162f9a3cd218493558ce Mon Sep 17 00:00:00 2001
From: jahugg <jan@huggenberg.ch>
Date: Wed, 22 Feb 2023 15:37:24 +0100
Subject: [PATCH] added content handling

---
 src/main.js | 136 +++++++++++++++++++++++++++++-----------------------
 1 file changed, 77 insertions(+), 59 deletions(-)

diff --git a/src/main.js b/src/main.js
index 4d77150..16d8742 100644
--- a/src/main.js
+++ b/src/main.js
@@ -123,69 +123,87 @@ function init() {
 }
 
 // update navigation
-function updateNavigation(object) {
-  // update navigation
-  const listEl = document.createElement("ul");
-
-  // add navigation items
-  for (let key in object.submenu) {
-    let itemEl = buildNavigationItemEl(object.submenu[key]);
-    itemEl.classList.add("forward-btn");
-    listEl.appendChild(itemEl);
+function buildPageContents(object) {
+  // handle message content
+  if (object.hasOwnProperty("message")) {
+    // create content element
+    const appEl = document.getElementById("app");
+    const contentEl = document.createElement("div");
+    contentEl.id = "content";
+    contentEl.innerHTML = object.message;
+    appEl.prepend(contentEl);
+  } else {
+    // remove content element
+    const contentEl = document.getElementById("content");
+    if (contentEl) contentEl.remove();
   }
 
-  // add "special back" button
-  if (object.path !== "/") {
-    // determine depth of object
-    const segments = object.path.split("/");
-    const depth = segments.length - 1;
-    let backItemEl;
-    if (depth === 1)
-      backItemEl = buildNavigationItemEl({
-        label: "Close",
-        path: "/",
-        command: "close",
-      });
-    else if (depth === 2)
-      backItemEl = buildNavigationItemEl({
-        label: "Back",
-        path: "/menu",
-        command: "back",
-      });
-    else if (depth === 3)
-      backItemEl = buildNavigationItemEl({
-        label: "Exit",
-        path: "/",
-        command: "exit",
-      });
-
-    backItemEl.classList.add("back-btn");
-    listEl.appendChild(backItemEl);
-  }
+  updateNavigation();
 
-  const navigationEl = document.getElementById("navigation");
-  navigationEl.replaceChildren(listEl);
-
-  focusNavigationItem(1);
-
-  // build navigation item
-  function buildNavigationItemEl(item) {
-    const itemEl = document.createElement("li");
-    itemEl.className = "link";
-    const linkEl = document.createElement("a");
-    linkEl.href = item.path;
-    linkEl.innerHTML = item.label;
-    linkEl.dataset.command = item.command;
-    itemEl.appendChild(linkEl);
-
-    if (item.label.toLowerCase() !== item.command.toLowerCase()) {
-      const commandEl = document.createElement("div");
-      commandEl.className = "command";
-      commandEl.innerHTML = item.command;
-      itemEl.appendChild(commandEl);
+  // update navigation
+  function updateNavigation() {
+    const listEl = document.createElement("ul");
+
+    // add navigation items
+    for (let key in object.submenu) {
+      let itemEl = buildNavigationItemEl(object.submenu[key]);
+      itemEl.classList.add("forward-btn");
+      listEl.appendChild(itemEl);
     }
 
-    return itemEl;
+    // add "special back" button
+    if (object.path !== "/") {
+      // determine depth of object
+      const segments = object.path.split("/");
+      const depth = segments.length - 1;
+      let backItemEl;
+      if (depth === 1)
+        backItemEl = buildNavigationItemEl({
+          label: "Close",
+          path: "/",
+          command: "close",
+        });
+      else if (depth === 2)
+        backItemEl = buildNavigationItemEl({
+          label: "Back",
+          path: "/menu",
+          command: "back",
+        });
+      else if (depth === 3)
+        backItemEl = buildNavigationItemEl({
+          label: "Exit",
+          path: "/",
+          command: "exit",
+        });
+
+      backItemEl.classList.add("back-btn");
+      listEl.appendChild(backItemEl);
+    }
+
+    const navigationEl = document.getElementById("navigation");
+    navigationEl.replaceChildren(listEl);
+
+    focusNavigationItem(1);
+
+    // build navigation item
+    function buildNavigationItemEl(item) {
+      const itemEl = document.createElement("li");
+      itemEl.className = "link";
+      const linkEl = document.createElement("a");
+      linkEl.href = item.path;
+      linkEl.innerHTML = item.label;
+      linkEl.dataset.command = item.command;
+      itemEl.appendChild(linkEl);
+
+      if (item.label.toLowerCase() !== item.command.toLowerCase()) {
+        const commandEl = document.createElement("div");
+        commandEl.className = "command";
+        commandEl.innerHTML = item.command;
+        itemEl.appendChild(commandEl);
+      }
+
+      return itemEl;
+    }
   }
 }
 
@@ -197,7 +215,7 @@ function navigateToPath(path, pushState = true) {
   // find object with path
   let navObj = helpers.findNestedObject(navigation, "path", path);
   if (!navObj) navObj = navigation.home; // fallback to home
-  updateNavigation(navObj);
+  buildPageContents(navObj);
 
   // State Object
   var stateObj = {
-- 
GitLab