diff --git a/configuration/thumbnailScrubber-configuration.js b/configuration/thumbnailScrubber-configuration.js new file mode 100644 index 0000000..e44a616 --- /dev/null +++ b/configuration/thumbnailScrubber-configuration.js @@ -0,0 +1,247 @@ +// KefinTweaks Thumbnail Scrubber Configuration UI +// Modular configuration modal for managing thumbnail scrubber settings + +(function() { + 'use strict'; + + const LOG = (...args) => console.log('[KefinTweaks ThumbnailScrubber Config]', ...args); + const ERR = (...args) => console.error('[KefinTweaks ThumbnailScrubber Config]', ...args); + + const MODAL_ID = 'kefin-thumbnailscrubber-config'; + + /** + * Load configuration from window.KefinTweaksConfig + */ + async function loadConfig() { + const config = window.KefinTweaksConfig || {}; + return config.thumbnailScrubber || {}; + } + + /** + * Save configuration to JS Injector + */ + async function saveConfig(thumbnailScrubberConfig) { + try { + // Ensure window.KefinTweaksConfig exists + if (!window.KefinTweaksConfig) { + window.KefinTweaksConfig = {}; + } + + // Update thumbnailScrubber config + window.KefinTweaksConfig.thumbnailScrubber = thumbnailScrubberConfig; + + // Save to JS Injector using utils + if (window.KefinTweaksUtils && window.KefinTweaksUtils.saveConfigToJavaScriptInjector) { + await window.KefinTweaksUtils.saveConfigToJavaScriptInjector(); + LOG('Configuration saved to JS Injector'); + return true; + } else { + // Fallback: use findJavaScriptInjectorPlugin and saveConfigToJavaScriptInjector from configuration.js + if (window.KefinTweaksConfiguration && window.KefinTweaksConfiguration.findJavaScriptInjectorPlugin) { + const pluginId = await window.KefinTweaksConfiguration.findJavaScriptInjectorPlugin(); + if (pluginId) { + await window.KefinTweaksConfiguration.saveConfigToJavaScriptInjector(window.KefinTweaksConfig); + LOG('Configuration saved to JS Injector (fallback)'); + return true; + } + } + ERR('saveConfigToJavaScriptInjector not available'); + return false; + } + } catch (error) { + ERR('Error saving config:', error); + return false; + } + } + + /** + * Build configuration HTML + */ + function buildConfigHTML(config) { + const previewOnHover = config.PreviewOnHover === true; + const hoverDelay = Number.isFinite(config.HOVER_PREVIEW_TIMEOUT_MS * 1) + ? config.HOVER_PREVIEW_TIMEOUT_MS * 1 + : (Number.isFinite(config.HOVER_TIMEOUT * 1) ? config.HOVER_TIMEOUT * 1 : 800); + const hoverSpeed = Number.isFinite(config.HOVER_PREVIEW_FRAME_MS * 1) + ? config.HOVER_PREVIEW_FRAME_MS * 1 + : 250; + const scrubDelay = Number.isFinite(config.SCRUB_ACTIVATION_DELAY_MS * 1) + ? config.SCRUB_ACTIVATION_DELAY_MS * 1 + : 300; + + return ` +