diff --git a/PolyPilot/wwwroot/index.html b/PolyPilot/wwwroot/index.html index 2b14de7e2..b9cf2b8f2 100644 --- a/PolyPilot/wwwroot/index.html +++ b/PolyPilot/wwwroot/index.html @@ -423,6 +423,9 @@ el.value = ''; if (window.__liveDrafts) delete window.__liveDrafts[elementId]; el.__lastRestoredDraft = ''; + // Mark this input as recently cleared — prevents stale draft restore on re-render + window.__recentlySentIds = window.__recentlySentIds || Object.create(null); + window.__recentlySentIds[elementId] = Date.now(); el.style.height = 'auto'; // Remove slash command ghost overlay var ghost = document.getElementById(elementId + '--slash-ghost'); @@ -818,12 +821,30 @@ } } } + // Sweep stale __recentlySentIds entries (5s TTL prevents unbounded growth) + if (window.__recentlySentIds) { + var now = Date.now(); + for (var k in window.__recentlySentIds) { + if (now - window.__recentlySentIds[k] > 5000) delete window.__recentlySentIds[k]; + } + } for (var id in drafts) { var el = document.getElementById(id); if (!el) continue; var desired = drafts[id] || ''; var current = (typeof el.value === 'string') ? el.value : ''; var lastRestored = (typeof el.__lastRestoredDraft === 'string') ? el.__lastRestoredDraft : ''; + + // Skip restore if this input was recently cleared (prevents re-filling with stale draft) + if (window.__recentlySentIds && window.__recentlySentIds[id]) { + if (desired && !current) { + continue; // Don't restore stale text into a cleared input (flag survives for next re-render) + } + // Danger window over: desired is empty or user has typed — flag no longer needed + delete window.__recentlySentIds[id]; + } + + // Skip restore if user has typed diverged content since last restore var hasDivergedUserText = current.length > 0 && current !== desired && current !== lastRestored; if (hasDivergedUserText) continue; if (current !== desired) {