Loading edit capabilities...
❌ Edit Mode Failed
@@ -708,67 +781,6 @@ class DocumentManager:
}}
}}
- // Enhanced error recovery utility
- function attemptErrorRecovery(error, context) {{
- console.warn('[MarkiTect] Attempting error recovery for:', context, error);
-
- try {{
- // Try to ensure content is still visible
- const contentDiv = document.getElementById('markdown-content');
- if (contentDiv && !contentDiv.innerHTML.trim()) {{
- // Fallback content rendering
- const fallbackHtml = markdownContent
- .replace(/^# (.*$)/gim, '
$1
')
- .replace(/^## (.*$)/gim, '
$1
')
- .replace(/\\n\\n/g, '
')
- .replace(/\\n/g, '
');
- contentDiv.innerHTML = '
' + fallbackHtml + '
';
-
- reportEditModeError('Recovered with fallback rendering', 'Edit features disabled', 'warning');
- return true;
- }}
- }} catch (recoveryError) {{
- console.error('[MarkiTect] Recovery failed:', recoveryError);
- }}
-
- return false;
- }}
-
- // Validation utility for edit mode state
- function validateEditModeState() {{
- const issues = [];
-
- // Check required elements
- if (!document.getElementById('markdown-content')) {{
- issues.push('Missing markdown-content container');
- }}
-
- if (!document.getElementById('markitect-status')) {{
- issues.push('Missing status display');
- }}
-
- // Check JavaScript dependencies
- if (typeof marked === 'undefined') {{
- issues.push('marked.js library not available');
- }}
-
- if (typeof MARKITECT_EDIT_MODE === 'undefined') {{
- issues.push('Edit mode configuration missing');
- }}
-
- // Check for MarkitectEditor
- if (typeof MarkitectEditor === 'undefined') {{
- issues.push('MarkitectEditor class not defined');
- }}
-
- if (issues.length > 0) {{
- console.warn('[MarkiTect] Edit mode validation issues:', issues);
- reportEditModeError('Edit mode validation failed', issues.join(', '), 'warning');
- return false;
- }}
-
- return true;
- }}
// Status update utility
function updateStatus(message, isError = false) {{
@@ -815,44 +827,19 @@ class DocumentManager:
}}
// Step 2: Try to enhance with edit capabilities (if in edit mode)
- {'''if (typeof MARKITECT_EDIT_MODE !== 'undefined' && MARKITECT_EDIT_MODE) {{
+ {'''if (typeof MARKITECT_EDIT_MODE !== 'undefined' && MARKITECT_EDIT_MODE) {
updateStatus("Initializing edit capabilities...");
-
- // Validate edit mode prerequisites
- if (!validateEditModeState()) {{
- if (!attemptErrorRecovery('validation failed', 'edit mode prerequisites')) {{
- return; // Stop here if recovery fails
- }}
- }}
-
- try {{
+ try {
updateStatus("Creating editor instance...");
markitectEditor = new MarkitectEditor();
updateStatus("✓ Edit mode active - click any section to edit");
console.log("✓ Edit mode initialized successfully");
-
- // Final validation check
- setTimeout(() => {{
- const sections = document.querySelectorAll('.markitect-section-editable');
- if (sections.length === 0) {{
- reportEditModeError('No editable sections found', 'Content may not be compatible with edit mode', 'warning');
- }} else {{
- console.log(`[MarkiTect] Found ${{sections.length}} editable sections`);
- }}
- }}, 1000);
-
- }} catch (error) {{
+ } catch (error) {
updateStatus("Edit mode failed to initialize", true);
+ reportEditModeError("Edit mode initialization failed", error.message);
console.error("Edit mode error:", error);
-
- // Try error recovery
- if (attemptErrorRecovery(error, 'editor initialization')) {{
- reportEditModeError("Edit mode partially recovered", error.message, 'warning');
- }} else {{
- reportEditModeError("Edit mode initialization failed", error.message);
- }}
- }}
- }}''' if edit_mode else ''}
+ }
+ }''' if edit_mode else ''}
}});
// Handle CDN loading errors
diff --git a/markitect/plugins/builtin/markdown_commands.py b/markitect/plugins/builtin/markdown_commands.py
index 6467fbe4..ca33248c 100644
--- a/markitect/plugins/builtin/markdown_commands.py
+++ b/markitect/plugins/builtin/markdown_commands.py
@@ -1501,8 +1501,7 @@ class MarkdownCommandsPlugin(CommandPlugin):
'md-explode': md_explode_command,
'md-implode': md_implode_command,
'md-package': md_package_command,
- 'md-transclude': md_transclude_command,
- 'html-inject-editing': html_inject_editing
+ 'md-transclude': md_transclude_command
}
@@ -2984,542 +2983,3 @@ class FilenameDecoder:
return [self.decode(filename) for filename in filenames]
-# ==============================================================================
-# HTML Editing Injection Command - Graceful Enhancement System
-# ==============================================================================
-
-@click.command()
-@click.argument('html_file', type=click.Path(exists=True))
-@click.option('--output', '-o', type=click.Path(),
- help='Output HTML file with editing capabilities (default:
-editable.html)')
-@click.option('--editor-theme', default='github',
- type=click.Choice(['github', 'monokai', 'tomorrow', 'dark']),
- help='Editor theme for edit mode (default: github)')
-@click.option('--keyboard-shortcuts', is_flag=True, default=True,
- help='Enable keyboard shortcuts in edit mode')
-@click.option('--fallback-mode', type=click.Choice(['graceful', 'minimal', 'none']),
- default='graceful', help='Fallback strategy when JavaScript fails')
-@click.option('--backup/--no-backup', default=True,
- help='Create backup of original file')
-@click.option('--dry-run', is_flag=True,
- help='Show what would be done without making changes')
-@click.pass_context
-def html_inject_editing(ctx, html_file, output, editor_theme, keyboard_shortcuts,
- fallback_mode, backup, dry_run):
- """
- Inject editing capabilities into existing HTML files.
-
- This command adds JavaScript editing functionality to any HTML file
- containing markdown content. It provides graceful fallback when
- JavaScript fails, ensuring the document remains readable.
-
- HTML_FILE: Path to the HTML file to enhance with editing capabilities
-
- Fallback modes:
- graceful - Full fallback with basic editing via contenteditable
- minimal - Fallback to read-only with error messages
- none - No fallback, editing simply won't work if JS fails
-
- Examples:
- markitect html-inject-editing document.html
- markitect html-inject-editing doc.html --output doc-editable.html
- markitect html-inject-editing page.html --fallback-mode minimal --no-backup
- """
- config = ctx.obj or {}
-
- try:
- input_path = Path(html_file)
-
- # Determine output path
- if output:
- output_path = Path(output)
- else:
- # Create name like "document-editable.html"
- stem = input_path.stem
- suffix = input_path.suffix
- output_path = input_path.parent / f"{stem}-editable{suffix}"
-
- if dry_run:
- click.echo(f"🔍 Would inject editing capabilities into: {input_path}")
- click.echo(f"📝 Would create enhanced file: {output_path}")
- click.echo(f"🎨 Editor theme: {editor_theme}")
- click.echo(f"⌨️ Keyboard shortcuts: {'enabled' if keyboard_shortcuts else 'disabled'}")
- click.echo(f"🛡️ Fallback mode: {fallback_mode}")
- if backup:
- backup_path = input_path.parent / f"{input_path.stem}.backup{input_path.suffix}"
- click.echo(f"💾 Would create backup: {backup_path}")
- return
-
- # Create backup if requested
- if backup and not output:
- backup_path = input_path.parent / f"{input_path.stem}.backup{input_path.suffix}"
- backup_path.write_text(input_path.read_text(encoding='utf-8'), encoding='utf-8')
- click.echo(f"💾 Created backup: {backup_path}")
-
- # Read original HTML
- html_content = input_path.read_text(encoding='utf-8')
-
- # Inject editing capabilities
- enhanced_html = inject_editing_capabilities(
- html_content=html_content,
- editor_theme=editor_theme,
- keyboard_shortcuts=keyboard_shortcuts,
- fallback_mode=fallback_mode
- )
-
- # Write enhanced HTML
- output_path.parent.mkdir(parents=True, exist_ok=True)
- output_path.write_text(enhanced_html, encoding='utf-8')
-
- click.echo(f"✨ Enhanced HTML with editing capabilities: {output_path}")
- click.echo(f"🎨 Editor theme: {editor_theme}")
- click.echo(f"🛡️ Fallback mode: {fallback_mode}")
-
- if config.get('verbose', False):
- click.echo(f"⌨️ Keyboard shortcuts: {'enabled' if keyboard_shortcuts else 'disabled'}")
- click.echo(f"📄 Original size: {len(html_content)} chars")
- click.echo(f"📄 Enhanced size: {len(enhanced_html)} chars")
-
- except Exception as e:
- click.echo(f"Error injecting editing capabilities: {e}", err=True)
- raise click.Abort()
-
-
-def inject_editing_capabilities(html_content: str, editor_theme: str = 'github',
- keyboard_shortcuts: bool = True,
- fallback_mode: str = 'graceful') -> str:
- """
- Inject editing capabilities into HTML content with graceful fallback.
-
- This function adds editing functionality that degrades gracefully:
- 1. Full editing if JavaScript loads successfully
- 2. Basic contenteditable if CDN fails but DOM works
- 3. Read-only mode with clear error messages if everything fails
- """
- import re
-
- # Generate the editing enhancement script
- enhancement_script = generate_editing_enhancement_script(
- editor_theme=editor_theme,
- keyboard_shortcuts=keyboard_shortcuts,
- fallback_mode=fallback_mode
- )
-
- # Try to inject before closing