From c3aec0b3c4c7a46f3b791c1c7495594f90d1b6d6 Mon Sep 17 00:00:00 2001 From: HighImKevin Date: Wed, 26 Nov 2025 06:49:57 -0500 Subject: [PATCH] Add functionality to Enable/Disable KefinTweaks from the configuration window --- injector.js | 31 ++++++++++++++- scripts/configuration.js | 85 +++++++++++++++++++++++++++++++++++++--- 2 files changed, 110 insertions(+), 6 deletions(-) diff --git a/injector.js b/injector.js index e8c77c4..b4cfe19 100644 --- a/injector.js +++ b/injector.js @@ -527,13 +527,42 @@ async function initialize() { console.log(`[KefinTweaks Injector] Starting KefinTweaks v${versionNumber} initialization...`); - // Check if kefinTweaksRoot is configured const scriptRoot = await getScriptRoot(); if (!scriptRoot) { console.log('[KefinTweaks Injector] kefinTweaksRoot is not configured. Please configure KefinTweaks using the installer before scripts can be loaded.'); return; } + // Check if KefinTweaks is enabled in config + const isKefinTweaksEnabled = window.KefinTweaksConfig?.enabled !== false; + + if (!isKefinTweaksEnabled) { + console.log('[KefinTweaks Injector] KefinTweaks is disabled in configuration. Only loading configuration UI requirements for admin access.'); + + try { + // Ensure configuration dependencies are loaded so the admin UI works + const configDependencyNames = ['modal', 'toaster', 'utils']; + for (const depName of configDependencyNames) { + const depScript = SCRIPT_DEFINITIONS.find(script => script.name === depName); + if (depScript) { + try { + await loadScriptSync(depScript); + } catch (error) { + console.warn(`[KefinTweaks Injector] Failed to load configuration dependency '${depName}':`, error); + } + } + } + + // Load configuration UI so admins can re-enable KefinTweaks + await loadScript('configuration.js'); + await loadCSS('configuration.css'); + console.log('[KefinTweaks Injector] Configuration script loaded (KefinTweaks is disabled)'); + } catch (error) { + console.warn('[KefinTweaks Injector] Failed to load configuration UI while disabled:', error); + } + return; + } + // Validate configuration if (!validateConfiguration()) { console.error('[KefinTweaks Injector] Configuration validation failed. Aborting.'); diff --git a/scripts/configuration.js b/scripts/configuration.js index abb0a33..c331b4d 100644 --- a/scripts/configuration.js +++ b/scripts/configuration.js @@ -104,6 +104,8 @@ if (scriptMatch && scriptMatch[1]) { try { const config = JSON.parse(scriptMatch[1]); + // Store enabled state globally for use in modal (defaults to true if not set) + window.KefinTweaksConfigEnabled = config.enabled !== false; console.log('[KefinTweaks Configuration] Loaded config from JS Injector:', config); return config; } catch (parseError) { @@ -120,6 +122,12 @@ const currentConfigSource = currentLoadedConfig || window.KefinTweaksCurrentConfig || window.KefinTweaksConfig || {}; const currentKefinRoot = currentConfigSource.kefinTweaksRoot || defaultConfig.kefinTweaksRoot; defaultConfig.kefinTweaksRoot = currentKefinRoot; + // Ensure enabled field is set (defaults to true if not present) + if (defaultConfig.enabled === undefined) { + defaultConfig.enabled = true; + } + // Store enabled state globally for use in modal + window.KefinTweaksConfigEnabled = defaultConfig.enabled !== false; // Note: scriptRoot is no longer used - scripts are loaded from kefinTweaksRoot + '/scripts/' // Save defaults to JS Injector for future use @@ -414,8 +422,25 @@ // Get all skin names for autocomplete const allSkinNames = skins.map(skin => skin.name).filter(Boolean); + const isEnabled = window.KefinTweaksConfigEnabled !== false; + return `
+
+
+ + +
+
+
+ +