// KefinTweaks Watchlist Configuration UI (function () { 'use strict'; const LOG = (...args) => console.log('[KefinTweaks Watchlist Config]', ...args); const ERR = (...args) => console.error('[KefinTweaks Watchlist Config]', ...args); const MODAL_ID = 'kefin-watchlist-config'; const DEFAULTS = { sideMenu: true, topNavigation: 'main', userMenu: true, order: 2 }; function normalizeConfig(raw) { const cfg = raw && typeof raw === 'object' ? raw : {}; const orderRaw = parseInt(cfg.order, 10); return { sideMenu: cfg.sideMenu !== false, topNavigation: typeof cfg.topNavigation === 'boolean' ? (cfg.topNavigation ? 'main' : 'none') : cfg.topNavigation === undefined ? 'main' : cfg.topNavigation, userMenu: cfg.userMenu !== false, order: Number.isFinite(orderRaw) ? orderRaw : DEFAULTS.order }; } async function loadConfig() { const config = window.KefinTweaksConfig || {}; return normalizeConfig(config.watchlist); } async function saveConfig(watchlistConfig) { try { if (!window.KefinTweaksConfig) { window.KefinTweaksConfig = {}; } window.KefinTweaksConfig.watchlist = watchlistConfig; if (window.KefinTweaksUtils && window.KefinTweaksUtils.saveConfigToJavaScriptInjector) { await window.KefinTweaksUtils.saveConfigToJavaScriptInjector(); LOG('Configuration saved to JS Injector'); return true; } 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; } } function buildToggleCard(id, checked, label, description) { if (typeof window.KefinTweaksUI?.buildToggleCard === 'function') { return window.KefinTweaksUI.buildToggleCard(id, checked, label, description); } return `
${description ? `
${description}
` : ''}
`; } function buildConfigHTML(config) { const order = Number.isFinite(config.order) ? config.order : DEFAULTS.order; return `
${buildToggleCard( 'wl-side-menu', config.sideMenu, 'Side menu', 'Show a Watchlist link in the left navigation drawer.' )} ${buildToggleCard( 'wl-top-navigation', config.topNavigation !== false && config.topNavigation !== 'none', 'Top navigation', 'Show Watchlist in the main top navigation bar (or via Custom Tabs when available).' )} ${buildToggleCard( 'wl-user-menu', config.userMenu, 'User menu', 'Show a Watchlist link in the user settings menu.' )}
Menu order
Lower values appear earlier in the side menu and top navigation.
`; } function collectConfig() { const side = document.getElementById('wl-side-menu'); const top = document.getElementById('wl-top-navigation'); const user = document.getElementById('wl-user-menu'); const orderRaw = parseInt(document.getElementById('wl-order')?.value || String(DEFAULTS.order), 10); return { sideMenu: side ? side.checked : DEFAULTS.sideMenu, topNavigation: top ? (top.checked ? 'main' : 'none') : DEFAULTS.topNavigation, userMenu: user ? user.checked : DEFAULTS.userMenu, order: Number.isFinite(orderRaw) ? orderRaw : DEFAULTS.order }; } function attachToggleHandlers(root) { if (typeof window.KefinTweaksUI?.bindToggleCards === 'function') { window.KefinTweaksUI.bindToggleCards(root); return; } root.querySelectorAll('.kefin-toggle-switch').forEach((btn) => { if (btn.dataset.kefinToggleBound === 'true') return; btn.dataset.kefinToggleBound = 'true'; btn.addEventListener('click', () => { const next = btn.dataset.enabled !== 'true'; btn.dataset.enabled = String(next); btn.setAttribute('aria-pressed', String(next)); const checkboxId = btn.dataset.checkboxId; const checkbox = checkboxId ? document.getElementById(checkboxId) : null; if (checkbox) checkbox.checked = next; }); }); } async function openConfigModal() { try { const config = await loadConfig(); const content = document.createElement('div'); content.innerHTML = buildConfigHTML(config); const footer = document.createElement('div'); footer.style.display = 'flex'; footer.style.gap = '0.75em'; footer.style.justifyContent = 'flex-end'; footer.innerHTML = ` `; window.ModalSystem.create({ id: MODAL_ID, title: 'Watchlist', content, footer, closeOnBackdrop: true, closeOnEscape: true, showCloseButton: true, dialogStyle: { maxWidth: '90vw', width: '560px' }, onOpen: (modal) => { attachToggleHandlers(modal.dialogContent || content); const saveBtn = modal.dialogFooter.querySelector('#save-watchlist-config-btn'); if (saveBtn) { saveBtn.addEventListener('click', async () => { const next = collectConfig(); const success = await saveConfig(next); if (success) { window.KefinTweaksToaster?.toast?.('Watchlist configuration saved!'); window.ModalSystem.close(MODAL_ID); } else { alert('Error saving configuration. Please ensure the JavaScript Injector plugin is installed and you have administrator permissions.'); } }); } } }); LOG('Watchlist configuration modal opened'); } catch (error) { ERR('Error opening Watchlist config modal:', error); alert('Error opening configuration: ' + error.message); } } window.KefinTweaksFeatureConfigs = window.KefinTweaksFeatureConfigs || {}; window.KefinTweaksFeatureConfigs.watchlist = { openConfigModal, DEFAULTS, normalizeConfig }; console.log('[KefinTweaks Watchlist Config] Script loaded'); })();