From 61761832512c46bc3b439d648dea7bbdd1c9b989 Mon Sep 17 00:00:00 2001 From: HighImKevin Date: Thu, 27 Nov 2025 20:37:28 -0500 Subject: [PATCH] Allow users to configure the plugin settings from the KefinTweaks configuration modal in addition to the plugin page --- kefinTweaks-plugin.js | 83 ++++++++++++++++++++++--- pages/images/discord.png | Bin 0 -> 13796 bytes scripts/configuration.js | 131 ++++++++++----------------------------- 3 files changed, 109 insertions(+), 105 deletions(-) create mode 100644 pages/images/discord.png diff --git a/kefinTweaks-plugin.js b/kefinTweaks-plugin.js index f48813e..8496f55 100644 --- a/kefinTweaks-plugin.js +++ b/kefinTweaks-plugin.js @@ -476,22 +476,50 @@ window.KefinTweaksConfig = ${JSON.stringify(config, null, 2)};`; const content = document.createElement('div'); content.style.display = 'flex'; content.style.flexDirection = 'column'; - content.style.gap = '1em'; content.style.lineHeight = '1.6'; if (isInitialInstall) { // Initial installation message with support information content.innerHTML = ` -

Thanks for installing KefinTweaks.

-

KefinTweaks is not maintained by the Jellyfin team, and as a result you are encouraged to seek support from me directly. Sadly, there is no place suitable for discussion of plugins built by community members or fan-made projects in the official Jellyfin Discord, so please visit the Jellyfin Community Discord to find me (username: HighImKevin) and other users who would be happy to help you out. Please also feel free to report bugs and request features from the Issues page. The strength of this plugin relies on awesome community members like you, so thanks for using KefinTweaks!

+

Thanks so much for installing KefinTweaks!

+

KefinTweaks is not maintained by the Jellyfin team, and as a result you are encouraged to seek support from me directly.

+

Sadly, there is currently no place suitable for discussion of plugins built by community members or fan-made projects in the official Jellyfin Discord, so please visit the Jellyfin Community Discord to find me (username: HighImKevin) and other users who would be happy to help you out.

+

Please also feel free to report bugs and request features from the Issues page. The strength of this plugin relies on awesome community members like you, so thanks for using KefinTweaks!

`; } else { // Update message with refresh instruction content.innerHTML = ` -

KefinTweaks ${version} has been installed. Please refresh your page for the changes to take effect!

+

KefinTweaks configuration has been successfully updated. Please refresh your page for the changes to take effect!

`; } + // Add discord icon link to the bottom of the content use a background img on an element + const kefinRoot = window.KefinTweaksConfig?.kefinTweaksRoot; + + if (kefinRoot) { + // Wrapped in a link to the discord server + const discordLinkWrapper = document.createElement('div'); + discordLinkWrapper.style.display = 'flex'; + discordLinkWrapper.style.justifyContent = 'center'; + + const discordLink = document.createElement('a'); + discordLink.href = 'https://discord.gg/v7P9CAvCKZ'; + discordLink.target = '_blank'; + discordLink.style.display = 'inline-block'; + discordLink.style.width = '50px'; + + + const discordIcon = document.createElement('div'); + discordIcon.style.backgroundImage = `url(${kefinRoot}/pages/images/discord.png)`; + discordIcon.style.backgroundSize = 'contain'; + discordIcon.style.backgroundPosition = 'center'; + discordIcon.style.backgroundRepeat = 'no-repeat'; + discordIcon.style.height = '35px'; + discordLink.appendChild(discordIcon); + discordLinkWrapper.appendChild(discordLink); + content.appendChild(discordLinkWrapper); + } + const footer = document.createElement('div'); footer.style.display = 'flex'; footer.style.justifyContent = 'flex-end'; @@ -510,7 +538,7 @@ window.KefinTweaksConfig = ${JSON.stringify(config, null, 2)};`; footer.appendChild(okBtn); - createSimpleModal(SUCCESS_MODAL_ID, 'KefinTweaks', content, footer); + createSimpleModal(SUCCESS_MODAL_ID, `${isInitialInstall ? 'Plugin Installed' : 'Plugin Updated'}`, content, footer); } // Open source configuration modal @@ -531,6 +559,42 @@ window.KefinTweaksConfig = ${JSON.stringify(config, null, 2)};`; content.style.flexDirection = 'column'; content.style.gap = '1.5em'; + // Enabled checkbox + const isEnabled = currentConfig?.enabled !== false; + const enabledContainer = document.createElement('div'); + enabledContainer.style.display = 'flex'; + enabledContainer.style.alignItems = 'center'; + enabledContainer.style.gap = '0.75em'; + + const enabledCheckbox = document.createElement('input'); + enabledCheckbox.type = 'checkbox'; + enabledCheckbox.id = 'kefinTweaksEnabledModal'; + enabledCheckbox.className = 'checkbox'; + enabledCheckbox.checked = isEnabled; + + const enabledLabel = document.createElement('label'); + enabledLabel.setAttribute('for', 'kefinTweaksEnabledModal'); + enabledLabel.style.cursor = 'pointer'; + enabledLabel.style.margin = '0'; + enabledLabel.style.display = 'flex'; + enabledLabel.style.alignItems = 'center'; + enabledLabel.style.gap = '0.75em'; + + const enabledText = document.createElement('span'); + enabledText.textContent = isEnabled ? 'Enabled' : 'Disabled'; + enabledText.id = 'kefinTweaksEnabledModalLabel'; + + enabledLabel.appendChild(enabledCheckbox); + enabledLabel.appendChild(enabledText); + enabledContainer.appendChild(enabledLabel); + + // Update label text when checkbox changes + enabledCheckbox.addEventListener('change', () => { + enabledText.textContent = enabledCheckbox.checked ? 'Enabled' : 'Disabled'; + }); + + content.appendChild(enabledContainer); + // Source Type dropdown const sourceTypeLabel = document.createElement('label'); sourceTypeLabel.textContent = 'Source Type:'; @@ -643,12 +707,16 @@ window.KefinTweaksConfig = ${JSON.stringify(config, null, 2)};`; }; } + // Get enabled state from checkbox + const enabledState = enabledCheckbox.checked; + // Merge with existing config to preserve user settings const mergedConfig = { ...defaultConfig, kefinTweaksRoot: kefinTweaksRoot, ...(currentConfig || {}), - kefinTweaksRoot: kefinTweaksRoot // Ensure root is updated + kefinTweaksRoot: kefinTweaksRoot, // Ensure root is updated + enabled: enabledState // Update enabled state }; // Remove scriptRoot if it exists (legacy field) @@ -660,6 +728,7 @@ window.KefinTweaksConfig = ${JSON.stringify(config, null, 2)};`; // Update window.KefinTweaksConfig immediately so injector can use it window.KefinTweaksConfig = mergedConfig; + window.KefinTweaksConfigEnabled = enabledState; closeSimpleModal(MODAL_ID); @@ -746,7 +815,7 @@ window.KefinTweaksConfig = ${JSON.stringify(config, null, 2)};`; footer.appendChild(cancelBtn); footer.appendChild(uninstallBtn); - createSimpleModal(MODAL_ID, 'Configure KefinTweaks Source', content, footer); + createSimpleModal(MODAL_ID, 'KefinTweaks Plugin Settings', content, footer); } /** diff --git a/pages/images/discord.png b/pages/images/discord.png new file mode 100644 index 0000000000000000000000000000000000000000..c49cc20a02056e0e05fa8edf8dbef012cf510d1e GIT binary patch literal 13796 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 QW*I { - if (!window.ModalSystem) { - resolve(false); - return; - } - - const modal = window.ModalSystem.create({ - id: 'scriptRootEditConfirmation', - title: 'Edit KefinTweaks Root URL', - content: ` -
- Editing the Root URL is useful if you are hosting the scripts yourself or if you want to use a specific KefinTweaks version. Scripts will be loaded from this root URL + '/scripts/'. There is no validation done for the URL provided so please ensure it is valid. In any case, you can easily revert this setting. -
- `, - footer: ` - - - `, - closeOnBackdrop: true, - closeOnEscape: true, - onOpen: (modalInstance) => { - const confirmBtn = modalInstance.dialogFooter?.querySelector('#confirmEditScriptRoot'); - const cancelBtn = modalInstance.dialogFooter?.querySelector('#cancelEditScriptRoot'); - - if (confirmBtn) { - confirmBtn.addEventListener('click', () => { - modalInstance.close(); - resolve(true); - }); - } - - if (cancelBtn) { - cancelBtn.addEventListener('click', () => { - modalInstance.close(); - resolve(false); - }); - } - } - }); - }); - } // Build the configuration page content function buildConfigPageContent(config) { @@ -427,40 +380,16 @@ return `
-
+
- -
-
-
- -
@@ -1162,7 +1091,6 @@
Sort Order