- Moved 20 root-level markdown files to readmes/ - Includes COMMANDS.md, CONFIG_README.md, all UNO docs, all completion reports - Added new: MEMORY_EDITOR_FEATURE.md, MEMORY_EDITOR_ESCAPING_FIX.md, CONFIG_SOURCES_ANALYSIS.md, MCP_TOOL_CALLING_ANALYSIS.md, and others - Root directory is now clean of documentation clutter
2.5 KiB
2.5 KiB
JavaScript String Escaping Bug - FIXED
Issue
When editing memories that contained quotes, newlines, or other special characters, the Edit button would throw:
Uncaught SyntaxError: "" literal not terminated before end of script
Root Cause
The original code passed JSON data directly into the HTML onclick attribute:
const factData = JSON.stringify(fact).replace(/'/g, "\\'");
html += `<button onclick='showEditMemoryModal("declarative", "${fact.id}", ${factData})'>✏️</button>`;
Problem: When the fact content contained characters like:
- Double quotes:
"My favorite song is "Monitoring"" - Newlines:
"Line 1\nLine 2" - Backslashes:
"Path: C:\Users\Name"
The escaping with .replace(/'/g, "\\'") only handled single quotes, causing syntax errors in the generated HTML.
Solution
Encode the data using encodeURIComponent:
const factDataEncoded = encodeURIComponent(JSON.stringify(fact));
html += `<button onclick='showEditMemoryModal("declarative", "${fact.id}", "${factDataEncoded}")'>✏️</button>`;
Decode in the modal function:
function showEditMemoryModal(collection, pointId, memoryData) {
const decodedData = typeof memoryData === 'string' ? decodeURIComponent(memoryData) : memoryData;
const memory = typeof decodedData === 'string' ? JSON.parse(decodedData) : decodedData;
// ... rest of function
}
Why This Works
encodeURIComponent()converts all special characters to URL-safe percent-encoded format- The encoded string is safe to use in HTML attributes
decodeURIComponent()converts it back to the original JSON stringJSON.parse()then converts it to a JavaScript object
Files Modified
/bot/static/index.html:- Line ~5356:
loadFacts()function - changed factData to factDataEncoded - Line ~5400:
loadEpisodicMemories()function - changed memData to memDataEncoded - Line ~5535:
showEditMemoryModal()function - added decodeURIComponent step
- Line ~5356:
Testing
Before Fix:
// Memory with quotes
Content: 'My favorite song is "Monitoring"'
Result: ❌ Syntax error when clicking Edit button
After Fix:
// Memory with quotes
Content: 'My favorite song is "Monitoring"'
Encoded: 'My%20favorite%20song%20is%20%22Monitoring%22'
Result: ✅ Modal opens correctly with content displayed
Status
✅ FIXED - Encoding/decoding properly handles all special characters
Restart Required
After making these changes, restart the container:
docker restart miku-bot