From 4089ba01e0881c89a72332e13bc3a80b6bddec2a Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Mon, 29 Jun 2026 22:15:55 +0000
Subject: [PATCH] =DashboardManager overhaul. A bit easier to modify the output of pages. Still have to get the account pages to work as expected, as well as verify the integrations and others are working - but registrar/content pages work as expected. Also fixed up the table generation in CRUD.js and CRUDSkeleton.php

---
 assets/js/concise/Tabs.js |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/assets/js/concise/Tabs.js b/assets/js/concise/Tabs.js
index 3828671..d3559d8 100644
--- a/assets/js/concise/Tabs.js
+++ b/assets/js/concise/Tabs.js
@@ -10,6 +10,7 @@
 		this.tabs = new Map();
 
 		this.hasHash = false;
+		this.shouldNotify = true;
 		this.init();
 	}
 	init() {
@@ -37,6 +38,9 @@
 
 			const tab = e.target.closest(this.selectors.tab);
 			if (tab) {
+				if (tab.dataset.skip) {
+					delete config.preCheck;
+				}
 				this.switchTab(tab.dataset.tab, config);
 			}
 		}
@@ -72,7 +76,7 @@
 		ui.sections.forEach(section => {
 			if (section.querySelector('.tabs')) {
 				options.hasChildren = true;
-				this.registerTab(section, {parent: tabsId});
+				this.registerTab(section, {parent: tabsId, ... options});
 			}
 		});
 
@@ -83,7 +87,8 @@
 		let config = {
 			id: tabsId,
 			ui: ui,
-			updateURL: options.updateURL ?? true
+			updateURL: options.updateURL ?? true,
+			... options
 		};
 		if (Object.hasOwn(options, 'preCheck')) {
 			config.preCheck = options.preCheck;
@@ -93,8 +98,10 @@
 		ui.nav.addEventListener('click', this.clickHandler);
 		ui.select?.addEventListener('change', this.changeHandler);
 		this.tabs.set(tabsId, config);
+		this.shouldNotify = false;
 		this.determineActiveTab(config);
 
+		this.shouldNotify = true;
 		return config;
 	}
 
@@ -153,7 +160,6 @@
 		config = (typeof config === 'string') ? this.tabs.get(config) : config;
 		if (!config) return;
 		let activeTab = config.ui.sections.filter(section => section.classList.contains('active'));
-
 		if (Object.hasOwn(config, 'preCheck') && !config.preCheck(activeTab[0], tab, config)) return;
 
 		if (document.activeElement && this.isInTabs(document.activeElement, config)) document.activeElement.blur();
@@ -197,7 +203,9 @@
 		if (config?.updateURL) this.updateURL(config);
 		if (config.ui.select) this.maybeUpdateSelect(tab, config);
 
-		this.a11y.announce(`Switched to ${tab} tab`);
+		if (this.shouldNotify) {
+			this.a11y.announce(`Switched to ${tab} tab`);
+		}
 	}
 	updateChildTabs(id) {
 		Array.from(this.tabs.values()).filter(conf => conf.parent === id).forEach(inst => {

--
Gitblit v1.10.0