diff --git a/index.js b/index.js index a1d70cf..c32a4c3 100644 --- a/index.js +++ b/index.js @@ -792,6 +792,14 @@ async function initUI() { await updateRPGData(renderUserStats, renderInfoBox, renderThoughts, renderInventory); }); + // Strip widget refresh button - same functionality as main refresh button + $('#rpg-strip-refresh').on('click', async function() { + if (!extensionSettings.enabled) { + return; + } + await updateRPGData(renderUserStats, renderInfoBox, renderThoughts, renderInventory); + }); + $('#rpg-stat-bar-color-low').on('change', function() { extensionSettings.statBarColorLow = String($(this).val()); saveSettings(); diff --git a/src/systems/generation/apiClient.js b/src/systems/generation/apiClient.js index b5fe503..6cb3024 100644 --- a/src/systems/generation/apiClient.js +++ b/src/systems/generation/apiClient.js @@ -35,6 +35,7 @@ import { renderMusicPlayer } from '../rendering/musicPlayer.js'; import { i18n } from '../../core/i18n.js'; import { generateAvatarsForCharacters } from '../features/avatarGenerator.js'; import { setFabLoadingState, updateFabWidgets } from '../ui/mobile.js'; +import { updateStripWidgets } from '../ui/desktop.js'; // Store the original preset name to restore after tracker generation let originalPresetName = null; @@ -240,8 +241,10 @@ export async function updateRPGData(renderUserStats, renderInfoBox, renderThough // Update button to show "Updating..." state const $updateBtn = $('#rpg-manual-update'); + const $stripRefreshBtn = $('#rpg-strip-refresh'); const updatingText = i18n.getTranslation('template.mainPanel.updating') || 'Updating...'; $updateBtn.html(` ${updatingText}`).prop('disabled', true); + $stripRefreshBtn.html('').prop('disabled', true); const prompt = await generateSeparateUpdatePrompt(); @@ -380,11 +383,14 @@ export async function updateRPGData(renderUserStats, renderInfoBox, renderThough setIsGenerating(false); setFabLoadingState(false); // Stop spinning FAB on mobile updateFabWidgets(); // Update FAB widgets with new data + updateStripWidgets(); // Update strip widgets with new data // Restore button to original state const $updateBtn = $('#rpg-manual-update'); + const $stripRefreshBtn = $('#rpg-strip-refresh'); const refreshText = i18n.getTranslation('template.mainPanel.refreshRpgInfo') || 'Refresh RPG Info'; $updateBtn.html(` ${refreshText}`).prop('disabled', false); + $stripRefreshBtn.html('').prop('disabled', false); // Reset the flag after tracker generation completes // This ensures the flag persists through both main generation AND tracker generation diff --git a/src/systems/ui/layout.js b/src/systems/ui/layout.js index 8b92cf4..c1fc7bd 100644 --- a/src/systems/ui/layout.js +++ b/src/systems/ui/layout.js @@ -434,6 +434,7 @@ export function updateGenerationModeUI() { if (extensionSettings.generationMode === 'together') { // In "together" mode, manual update button is hidden $('#rpg-manual-update').hide(); + $('#rpg-strip-refresh').hide(); $('#rpg-external-api-settings').slideUp(200); $('#rpg-separate-mode-settings').slideUp(200); // Hide auto-update toggle (not applicable in together mode) @@ -441,6 +442,7 @@ export function updateGenerationModeUI() { } else if (extensionSettings.generationMode === 'separate') { // In "separate" mode, manual update button is visible $('#rpg-manual-update').show(); + $('#rpg-strip-refresh').show(); $('#rpg-external-api-settings').slideUp(200); $('#rpg-separate-mode-settings').slideDown(200); // Show auto-update toggle @@ -448,6 +450,7 @@ export function updateGenerationModeUI() { } else if (extensionSettings.generationMode === 'external') { // In "external" mode, manual update button is visible AND both settings are shown $('#rpg-manual-update').show(); + $('#rpg-strip-refresh').show(); $('#rpg-external-api-settings').slideDown(200); $('#rpg-separate-mode-settings').slideDown(200); // Show auto-update toggle for external mode too diff --git a/style.css b/style.css index eac54dc..740742d 100644 --- a/style.css +++ b/style.css @@ -11227,6 +11227,38 @@ body:has(.rpg-panel[data-theme="light"]) .rpg-fab-widget:hover { font-family: 'Roboto Mono', 'Consolas', monospace; } +/* Strip Refresh Button */ +.rpg-strip-refresh-btn { + margin-top: auto; + padding: 8px; + background: var(--rpg-accent, rgba(22, 33, 62, 0.9)); + border: 1px solid var(--rpg-border, rgba(100, 150, 255, 0.3)); + border-radius: 6px; + color: var(--rpg-highlight, #4a90e2); + cursor: pointer; + font-size: 14px; + width: calc(100% - 8px); + transition: all 0.2s ease; + display: flex; + align-items: center; + justify-content: center; +} + +.rpg-strip-refresh-btn:hover { + background: var(--rpg-highlight, #4a90e2); + color: var(--rpg-bg, #1a1a2e); + box-shadow: 0 0 10px rgba(100, 150, 255, 0.4); +} + +.rpg-strip-refresh-btn:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +.rpg-strip-refresh-btn i.fa-spin { + animation: fa-spin 1s linear infinite; +} + /* ============================================ STRIP WIDGET THEME VARIATIONS ============================================ */ diff --git a/template.html b/template.html index d651658..c23cb3b 100644 --- a/template.html +++ b/template.html @@ -38,6 +38,10 @@
+ +