diff --git a/locales/en/messages.json b/locales/en/messages.json
index c26fe3b09b..51fc9d780c 100755
--- a/locales/en/messages.json
+++ b/locales/en/messages.json
@@ -340,6 +340,9 @@
"tabOptions": {
"message": "Options"
},
+ "tabDevelopment": {
+ "message": "Development"
+ },
"tabSetup": {
"message": "Setup"
@@ -6279,7 +6282,7 @@
"message": "RSSI dBm",
"description": "Text of the RSSI dBm alarm"
},
-
+
"osdWarningTextArmingDisabled": {
"message": "Arming disabled",
"description": "One of the warnings that can be selected to be shown in the OSD"
diff --git a/src/index.html b/src/index.html
index 469824a91f..38686e68ce 100644
--- a/src/index.html
+++ b/src/index.html
@@ -133,6 +133,7 @@
+
diff --git a/src/js/gui.js b/src/js/gui.js
index 22bda5348e..c0187eca9e 100644
--- a/src/js/gui.js
+++ b/src/js/gui.js
@@ -4,6 +4,8 @@ import Switchery from 'switchery-latest';
import jBox from 'jbox';
import $ from 'jquery';
+const appMode = import.meta.env.MODE;
+
const TABS = {};
const GUI_MODES = {
@@ -60,6 +62,10 @@ class GuiControl {
'transponder',
];
+ if (appMode === 'development') {
+ this.defaultAllowedTabsWhenDisconnected.push('development');
+ }
+
this.defaultAllowedFCTabsWhenConnected = [ ...this.defaultAllowedTabs, ...this.defaultCloudBuildTabOptions];
this.allowedTabs = this.defaultAllowedTabsWhenDisconnected;
diff --git a/src/js/main.js b/src/js/main.js
index 4f283baad0..08af98ae9c 100644
--- a/src/js/main.js
+++ b/src/js/main.js
@@ -91,6 +91,8 @@ function appReady() {
cleanupLocalStorage();
+ updateTabList();
+
i18n.init(function() {
// pass the configurator version as a custom header for every AJAX request.
@@ -435,6 +437,11 @@ function startProcess() {
presets.initialize(content_ready),
);
break;
+ case 'development':
+ import("./tabs/development").then(({ development }) =>
+ development.initialize(content_ready),
+ );
+ break;
default:
console.log(`Tab not found: ${tab}`);
diff --git a/src/js/tabs/development.js b/src/js/tabs/development.js
new file mode 100644
index 0000000000..5480418d40
--- /dev/null
+++ b/src/js/tabs/development.js
@@ -0,0 +1,25 @@
+import GUI, { TABS } from '../gui';
+import { i18n } from '../localization';
+import $ from 'jquery';
+
+const development = {};
+development.initialize = function (callback) {
+
+ if (GUI.active_tab != 'development') {
+ GUI.active_tab = 'development';
+ }
+
+ $('#content').load("./tabs/development.html", function () {
+ i18n.localizePage();
+
+ GUI.content_ready(callback);
+ });
+};
+
+development.cleanup = function (callback) {
+ if (callback) callback();
+};
+
+TABS.development = development;
+
+export { development };
diff --git a/src/js/utils/updateTabList.js b/src/js/utils/updateTabList.js
index 0cbd14988d..eec5ceebfc 100644
--- a/src/js/utils/updateTabList.js
+++ b/src/js/utils/updateTabList.js
@@ -1,8 +1,13 @@
import $ from 'jquery';
import FC from '../fc';
+const appMode = import.meta.env.MODE;
+
export function updateTabList(features) {
const isExpertModeEnabled = $('input[name="expertModeCheckbox"]').is(':checked');
+ const isDevelopmentMode = appMode === 'development';
+
+ $('#tabs ul.mode-disconnected li.tab_development').toggle(isDevelopmentMode);
$('#tabs ul.mode-connected li.tab_failsafe').toggle(isExpertModeEnabled);
$('#tabs ul.mode-connected li.tab_adjustments').toggle(isExpertModeEnabled);
@@ -10,8 +15,8 @@ export function updateTabList(features) {
$('#tabs ul.mode-connected li.tab_logging').toggle(isExpertModeEnabled);
$('#tabs ul.mode-connected li.tab_servos').toggle(isExpertModeEnabled && FC.CONFIG?.buildOptions?.includes('USE_SERVOS'));
- $('#tabs ul.mode-connected li.tab_gps').toggle(features.isEnabled('GPS'));
- $('#tabs ul.mode-connected li.tab_led_strip').toggle(features.isEnabled('LED_STRIP'));
- $('#tabs ul.mode-connected li.tab_transponder').toggle(features.isEnabled('TRANSPONDER'));
- $('#tabs ul.mode-connected li.tab_osd').toggle(features.isEnabled('OSD'));
+ $('#tabs ul.mode-connected li.tab_gps').toggle(features?.isEnabled('GPS'));
+ $('#tabs ul.mode-connected li.tab_led_strip').toggle(features?.isEnabled('LED_STRIP'));
+ $('#tabs ul.mode-connected li.tab_transponder').toggle(features?.isEnabled('TRANSPONDER'));
+ $('#tabs ul.mode-connected li.tab_osd').toggle(features?.isEnabled('OSD'));
}
diff --git a/src/main.html b/src/main.html
index a7745098d5..7652f20000 100644
--- a/src/main.html
+++ b/src/main.html
@@ -223,6 +223,7 @@
+
diff --git a/src/tabs/development.html b/src/tabs/development.html
new file mode 100644
index 0000000000..2adb27fc4a
--- /dev/null
+++ b/src/tabs/development.html
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
Wide GUI Box
+
+
+
Spacer Box Content
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptates reiciendis magnam tempora eligendi, nobis sapiente consectetur commodi harum. Debitis voluptatibus iure provident ea esse eveniet eaque inventore? Consequatur, sapiente iste?
+
+
+
+
+
+
+
GUI Box
+
+
+
Spacer Box Content
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptates reiciendis magnam tempora eligendi, nobis sapiente consectetur commodi harum. Debitis voluptatibus iure provident ea esse eveniet eaque inventore? Consequatur, sapiente iste?
+
+
+
+
+
+
+
GUI Box
+
+
+
Spacer Box Content
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptates reiciendis magnam tempora eligendi, nobis sapiente consectetur commodi harum. Debitis voluptatibus iure provident ea esse eveniet eaque inventore? Consequatur, sapiente iste?
+
+
+
+
+
+
+
+ Note Content
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit doloribus amet voluptas error corporis veniam recusandae adipisci a rerum distinctio asperiores omnis inventore eum, illum aut delectus vel pariatur alias.
+
+
+
+
+
+ Danger Content
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit doloribus amet voluptas error corporis veniam recusandae adipisci a rerum distinctio asperiores omnis inventore eum, illum aut delectus vel pariatur alias.
+