fix: resolve markdown roundtrip formatting issue in save functionality

Fixed critical bug where saving unedited content would introduce unwanted
indentation and formatting changes due to unnecessary DOM reconstruction.

Problem:
- getMarkdownContent() always reconstructed from DOM elements
- textContent doesn't preserve original markdown formatting
- HTML rendering adds/removes whitespace causing formatting drift
- Lines after first would get extra indentation on roundtrip

Solution:
- Added hasEdits tracking to MarkitectEditor class
- Return original markdown content when no edits have been made
- Only reconstruct from DOM when actual edits occurred
- Mark hasEdits=true when textarea blur event fires

This ensures perfect fidelity when saving unedited documents while
maintaining the reconstruction capability for edited content.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-25 21:15:48 +02:00
parent aefece1fe7
commit 74ee2760e2

View File

@@ -657,6 +657,7 @@ class DocumentManager:
editor_scripts = """ editor_scripts = """
class MarkitectEditor { class MarkitectEditor {
constructor() { constructor() {
this.hasEdits = false; // Track if any edits have been made
this.initializeEditor(); this.initializeEditor();
this.setupKeyboardShortcuts(); this.setupKeyboardShortcuts();
} }
@@ -707,6 +708,7 @@ class DocumentManager:
textarea.className = 'edit-mode'; textarea.className = 'edit-mode';
textarea.addEventListener('blur', () => { textarea.addEventListener('blur', () => {
this.hasEdits = true; // Mark that edits have been made
section.innerHTML = marked.parse(textarea.value); section.innerHTML = marked.parse(textarea.value);
this.markSections(section.parentElement); this.markSections(section.parentElement);
}); });
@@ -781,6 +783,11 @@ class DocumentManager:
} }
getMarkdownContent() { getMarkdownContent() {
// If no edits have been made, return the original markdown content
if (!this.hasEdits) {
return markdownContent;
}
// Reconstruct markdown content from the current state of sections // Reconstruct markdown content from the current state of sections
const content = document.getElementById('markdown-content'); const content = document.getElementById('markdown-content');
if (!content) { if (!content) {