From 61b36328143edb4b7d4bd879b249dedd6b8133c1 Mon Sep 17 00:00:00 2001
From: Arkerthan <arkerthan@gmail.com>
Date: Mon, 18 May 2020 12:20:45 +0200
Subject: [PATCH] add hidden passage framework

---
 src/gui/quicklinks.js | 36 +++++++++++++++++++++++++-----------
 1 file changed, 25 insertions(+), 11 deletions(-)

diff --git a/src/gui/quicklinks.js b/src/gui/quicklinks.js
index cea5904c230..d70fe43c525 100644
--- a/src/gui/quicklinks.js
+++ b/src/gui/quicklinks.js
@@ -42,8 +42,13 @@ App.UI.quickMenu = (function() {
 	 */
 	let currentPassageDOM = null;
 
+	// true means hidden
+	const hiddenPassages = cleanPassageMapping({
+		"Cellblock": () => !V.cellblock
+	});
+
 	// setup hotkeys list, upper/lower case is important!
-	const hotkeys = cleanHotkeys({
+	const hotkeys = cleanPassageMapping({
 		Main: "m",
 		"Manage Personal Affairs": "x"
 	});
@@ -137,7 +142,7 @@ App.UI.quickMenu = (function() {
 		const fragment = document.createDocumentFragment();
 		for (const passage in group) {
 			if (group[passage] === true) {
-				fragment.append(menuLink(passage));
+				addMenuLink(fragment, passage);
 			} else {
 				fragment.append(generateCategory(passage, group[passage]));
 			}
@@ -148,7 +153,7 @@ App.UI.quickMenu = (function() {
 	function generateCategory(name, group) {
 		const toggle = document.createElement("div");
 		toggle.classList.add("toggle");
-		toggle.append(menuLink(name, true));
+		addMenuLink(toggle, name, true);
 		const content = document.createElement("div");
 		content.classList.add("content");
 		content.append(generateLinkList(group));
@@ -163,8 +168,18 @@ App.UI.quickMenu = (function() {
 		return wrapper;
 	}
 
-	function menuLink(passage, toggle = false) {
+	function addMenuLink(container, passage, toggle = false) {
+		// passage is hidden
+		let hidden = false;
+		if (hiddenPassages.hasOwnProperty(passage) && hiddenPassages[passage]()) {
+			if (!toggle) {
+				return;
+			}
+			hidden = true;
+		}
+		// we show some kind of text/link
 		const div = document.createElement("div");
+		container.append(div);
 		if (!toggle) {
 			div.classList.add("menu-link");
 		}
@@ -172,12 +187,12 @@ App.UI.quickMenu = (function() {
 		if (State.passage === passage) {
 			div.append(passage);
 			currentPassageDOM = div;
-			return div;
+			return;
 		}
 		// That is not a passage we can safely jump to, it's a deco element
-		if (!jumpTo.includes(passage)) {
+		if (hidden || !jumpTo.includes(passage)) {
 			div.append(passage);
-			return div;
+			return;
 		}
 		// Create link
 		const a = document.createElement("a");
@@ -189,7 +204,6 @@ App.UI.quickMenu = (function() {
 		if (hotkeys[passage]) {
 			div.append(" ", App.UI.DOM.makeElement("span", `[${hotkeys[passage]}]`, "hotkey"));
 		}
-		return div;
 	}
 
 	function addOtherCategory(layout) {
@@ -219,18 +233,18 @@ App.UI.quickMenu = (function() {
 	}
 
 	/**
-	 * Cleans out all keys that are not contained in jumpTo and therefore not considered safe.
+	 * Cleans out all mappings that are not contained in jumpTo and therefore not considered safe.
 	 *
 	 * @param {object} keys
 	 * @returns {object}
 	 */
-	function cleanHotkeys(keys) {
+	function cleanPassageMapping(keys) {
 		const result = {};
 		for (const key in keys) {
 			if (jumpTo.includes(key)) {
 				result[key] = keys[key];
 			} else {
-				console.log("Found hotkey to unsafe passage: " + key);
+				console.log("Found mapping to unsafe passage: " + key + " to " + keys[key]);
 			}
 		}
 		return result;
-- 
GitLab