From 2b5e67ebb302bdd8f15993753c27c71465cdc959 Mon Sep 17 00:00:00 2001
From: Arkerthan <arkerthan@gmail.com>
Date: Thu, 1 Apr 2021 21:33:52 +0200
Subject: [PATCH] Convert Main to new tab system

---
 css/gui/tabs.css       |  5 ++---
 src/gui/tabs.js        | 30 ++++++++++++++++++++++++------
 src/js/slaveListing.js | 35 +++++++++++------------------------
 3 files changed, 37 insertions(+), 33 deletions(-)

diff --git a/css/gui/tabs.css b/css/gui/tabs.css
index afa0a58b812..e4a8c1df42e 100644
--- a/css/gui/tabs.css
+++ b/css/gui/tabs.css
@@ -57,11 +57,10 @@ div.tab-bar a.active {
 }
 
 .tab-content.active {
-	display: unset;
+	display: block;
 }
 
-.tab-content:not(.noFade) {
-	/*display: none;*/
+.tab-content:not(.no-fade) {
 	padding: 6px 12px;
 	-webkit-animation: fadeEffect 0.3s;
 	animation: fadeEffect 0.3s;
diff --git a/src/gui/tabs.js b/src/gui/tabs.js
index da794affab0..a618182521a 100644
--- a/src/gui/tabs.js
+++ b/src/gui/tabs.js
@@ -1,6 +1,6 @@
 App.UI.tabs = (function() {
 	/**
-	 * @type {Array<HTMLButtonElement>}
+	 * @type {Array<HTMLButtonElement|HTMLAnchorElement>}
 	 */
 	let active = null;
 
@@ -11,6 +11,7 @@ App.UI.tabs = (function() {
 		 * @property {string} id
 		 * @property {Node} content
 		 * @property {string} [buttonClass]
+		 * @property {string} [contentClass]
 		 */
 
 		/**
@@ -28,28 +29,31 @@ App.UI.tabs = (function() {
 		 * @param {string} name Display name
 		 * @param {string} id Saved, should stay the same across versions
 		 * @param {Node} content
-		 * @param {string} [buttonClass] class applied to the button
+		 * @param {string} [buttonClass] CSS class applied to the button
+		 * @param {string} [contentClass] CSS class applied to the content holder
 		 */
-		addTab(name, id, content, buttonClass) {
+		addTab(name, id, content, buttonClass, contentClass) {
 			this._tabs.push({
 				name: name,
 				id: id,
 				content: content,
 				buttonClass: buttonClass,
+				contentClass: contentClass,
 			});
 		}
 
 		/**
+		 * @param {boolean} plainLinks
 		 * @returns {DocumentFragment}
 		 */
-		render() {
+		render(plainLinks = false) {
 			const f = new DocumentFragment();
 			const tabBar = document.createElement("div");
 			tabBar.classList.add("tab-bar");
 			f.append(tabBar);
 
 			/**
-			 * @type {Array<HTMLButtonElement>}
+			 * @type {Array<HTMLButtonElement|HTMLAnchorElement>}
 			 */
 			const buttonList = [];
 			/**
@@ -64,9 +68,19 @@ App.UI.tabs = (function() {
 					selected = V.tabChoice[this._id] === tab.id;
 				}
 
-				const button = App.UI.DOM.appendNewElement("button", tabBar, tab.name, tab.buttonClass);
+				/** @type {HTMLButtonElement|HTMLAnchorElement} */
+				let button;
+				if (!plainLinks) {
+					button = App.UI.DOM.appendNewElement("button", tabBar, tab.name, tab.buttonClass);
+				} else {
+					button = App.UI.DOM.makeElement("a", tab.name, tab.buttonClass);
+				}
 				buttonList.push(button);
+
 				const contentHolder = App.UI.DOM.appendNewElement("div", f, tab.content, "tab-content");
+				if (tab.contentClass) {
+					contentHolder.classList.add(tab.contentClass);
+				}
 				contentList.push(contentHolder);
 
 				button.onclick = () => {
@@ -84,6 +98,10 @@ App.UI.tabs = (function() {
 				selected = false;
 			}
 
+			if (plainLinks) {
+				tabBar.append(App.UI.DOM.generateLinksStrip(buttonList));
+			}
+
 			active = buttonList;
 
 			return f;
diff --git a/src/js/slaveListing.js b/src/js/slaveListing.js
index 0dad38b0a0e..5bd6ffa1439 100644
--- a/src/js/slaveListing.js
+++ b/src/js/slaveListing.js
@@ -1019,34 +1019,21 @@ App.UI.SlaveList.penthousePage = function() {
 		tabs.push(allTab());
 	}
 
-	const div = document.createElement("div");
-	div.classList.add("tab-bar");
+	const tabBar = new App.UI.tabs.TabBar("Main");
+	let buttonClass = undefined;
+	if (V.useSlaveSummaryTabs === 2) {
+		buttonClass = "card";
+	}
+	let contentClass = undefined;
 	if (V.useSlaveSummaryTabs === 0) {
-		const links = [];
-		for (const tab of tabs) {
-			links.push(App.UI.tabBar.tabButton(tab.tabName, tab.caption, true));
-		}
-		div.append(App.UI.DOM.generateLinksStrip(links));
-	} else {
-		for (const tab of tabs) {
-			const button = App.UI.tabBar.tabButton(tab.tabName, tab.caption);
-			if (V.useSlaveSummaryTabs === 2) {
-				button.classList.add("card");
-			}
-			div.append(button);
-		}
+		contentClass = "no-fade";
+	} else if (V.useSlaveSummaryTabs === 2) {
+		contentClass = "card";
 	}
-	fragment.append(div);
-
 	for (const tab of tabs) {
-		const div = App.UI.tabBar.makeTab(tab.tabName, tab.content);
-		if (V.useSlaveSummaryTabs === 0) {
-			div.classList.add("noFade");
-		} else if (V.useSlaveSummaryTabs === 2) {
-			div.classList.add("card");
-		}
-		fragment.append(div);
+		tabBar.addTab(tab.caption, tab.tabName, tab.content, buttonClass, contentClass);
 	}
+	fragment.append(tabBar.render(V.useSlaveSummaryTabs === 0));
 
 	if (V.positionMainLinks <= 0) {
 		fragment.append(App.UI.DOM.makeElement("div", App.UI.View.mainLinks(), "center"));
-- 
GitLab