diff --git a/src/common/interfaces/SettingsInterface.ts b/src/common/interfaces/SettingsInterface.ts index a2fa3e5..287879c 100644 --- a/src/common/interfaces/SettingsInterface.ts +++ b/src/common/interfaces/SettingsInterface.ts @@ -183,7 +183,8 @@ interface SettingsInterface { offsetX: number, // fed to translateX(offsetX + '%'). Valid range [-100, 0] offsetY: number // fed to translateY(offsetY + '%'). Valid range [-100, 100] }, - } + }, + devMode?: boolean, } restrictions?: RestrictionsSettings; diff --git a/src/csui/src/PlayerUIWindow.vue b/src/csui/src/PlayerUIWindow.vue index 5ebe2ae..3ddfeba 100644 --- a/src/csui/src/PlayerUIWindow.vue +++ b/src/csui/src/PlayerUIWindow.vue @@ -30,22 +30,26 @@
-
- -
-
- {{tab.label}} +
+
+ +
+
+ {{tab.label}} +
@@ -171,7 +175,7 @@ export default { // {id: 'advancedOptions', label: 'Advanced options', icon: 'cogs' }, {id: 'changelog', label: 'What\'s new', icon: 'alert-decagram' }, {id: 'about', label: 'About', icon: 'information-outline'}, - {id: 'debugging', label: 'Debugging', icon: 'bug-outline' }, + {id: 'debugging', label: 'Debugging', icon: 'bug-outline', hidden: true}, ], selectedTab: 'extensionSettings', BrowserDetect: BrowserDetect, @@ -196,6 +200,8 @@ export default { } }, created() { + this.settings.listenAfterChange(this.setDebugTabVisibility); + if (this.defaultTab) { this.selectedTab = this.defaultTab; } @@ -213,8 +219,10 @@ export default { }, } ) + this.setDebugTabVisibility(); }, destroyed() { + this.settings.removeListenerAfterChange(this.setDebugTabVisibility); this.eventBus.unsubscribeAll(this); }, methods: { @@ -230,6 +238,12 @@ export default { setPreventClose(bool) { this.preventClose = bool; this.$emit('preventClose', bool); + }, + setDebugTabVisibility() { + const debugTab = this.tabs.find( x => x.id === 'debugging'); + if (debugTab) { + debugTab.hidden = !this.settings.active.ui.devMode; + } } } } diff --git a/src/csui/src/PlayerUiPanels/BaseExtensionSettings.vue b/src/csui/src/PlayerUiPanels/BaseExtensionSettings.vue index df342ad..bf21f0a 100644 --- a/src/csui/src/PlayerUiPanels/BaseExtensionSettings.vue +++ b/src/csui/src/PlayerUiPanels/BaseExtensionSettings.vue @@ -90,11 +90,15 @@
Show developer options
- +
-
+

Settings editor

@@ -144,7 +148,6 @@ export default { return { tab: 'siteSettings', importSettingDialogConfig: {visible: false}, - showSettingsEditor: false, allowSettingsEditing: false, editorSaveFinished: false, settingsJson: {}, diff --git a/src/ext/lib/Settings.ts b/src/ext/lib/Settings.ts index 498d9fa..8f19295 100644 --- a/src/ext/lib/Settings.ts +++ b/src/ext/lib/Settings.ts @@ -37,8 +37,8 @@ class Settings { onSettingsChanged: any; afterSettingsSaved: any; - onChangedCallbacks: any[] = []; - afterSettingsChangedCallbacks: any[] = []; + onChangedCallbacks: (() => void)[] = []; + afterSettingsChangedCallbacks: (() => void)[] = []; //#endregion constructor(options) { @@ -398,9 +398,15 @@ class Settings { listenOnChange(fn: () => void): void { this.onChangedCallbacks.push(fn); } + removeOnChangeListener(fn: () => void): void { + this.onChangedCallbacks = this.afterSettingsChangedCallbacks.filter(x => x !== fn); + } listenAfterChange(fn: () => void): void { this.afterSettingsChangedCallbacks.push(fn); } + removeAfterChangeListener(fn: () => void): void { + this.afterSettingsChangedCallbacks = this.afterSettingsChangedCallbacks.filter(x => x !== fn); + } } export default Settings;