Created feature documentation structure: docs/features/README.md: - Overview of all control panels - Configuration examples - Use case scenarios - Feature toggle documentation docs/features/section-editing.md: - Complete section editing guide - How it works (automatic detection, states, visual feedback) - Configuration options - Advanced features (metadata, events, section types) - Examples and troubleshooting - Best practices Remaining documentation to be created: - edit-control.md - status-control.md - contents-control.md - debug-control.md - keyboard-shortcuts.md - themes.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com)
7.5 KiB
Section Editing
Click any section to edit it independently
Section editing is the core feature of TestDrive-JSUI that enables interactive markdown editing. Each section of your document can be edited independently without affecting other sections.
Overview
TestDrive-JSUI automatically parses your markdown into logical sections and makes each one independently editable. Click any section to open a floating editor with Accept, Cancel, and Reset options.
Key Benefits
- ✅ Non-destructive - Changes are isolated to individual sections
- ✅ Visual feedback - Hover effects and editing indicators
- ✅ Easy to use - Simple click-to-edit interface
- ✅ Undo/redo - Cancel or reset changes at any time
How It Works
1. Automatic Section Detection
TestDrive-JSUI splits your markdown into sections using these rules:
- Double newlines create section boundaries
- Headings start new sections
- Images are treated as individual sections
- Code blocks stay together in one section
Example markdown:
# My Document
This is the first section.
## A Heading
This is the second section.

Final section here.
This creates 4 sections:
- Heading + paragraph
- Subheading + paragraph
- Image
- Final paragraph
2. Section States
Each section has a state:
| State | Description | Visual |
|---|---|---|
| Original | Unchanged from initial load | Normal appearance |
| Editing | Currently being edited | Blue border, floating editor |
| Modified | Changed but not saved | Pending changes |
| Saved | Changes accepted | Saved to current document |
3. Visual Feedback
Hover Effect:
- Light background highlight
- Subtle border
- Shows section is clickable
Editing State:
- Blue border with glow
- Floating editor dialog
- Textarea with current content
Using Section Editing
Basic Workflow
- Click a section to start editing
- Edit the markdown in the textarea
- Choose an action:
- ✓ Accept - Save changes to section
- ✗ Cancel - Discard changes
- ↺ Reset - Restore original content
Keyboard Shortcuts
While editing:
Ctrl+Enter- Accept changes (coming soon)Escape- Cancel editingTab- Insert tab character
Tips
Multiple Edits:
- Edit one section at a time
- Previous section auto-saves when starting a new edit
- All changes stay in memory until you export/save the document
Long Sections:
- Textarea expands vertically
- Scroll within the editor
- Resize handle in floating dialog
Image Sections:
- Special image editor with preview
- Drag & drop image replacement
- Edit alt text inline
Configuration
Enable/Disable Section Editing
new TestDriveJSUI({
container: '#editor',
sections: true // Enable section editing (default: true)
});
Disable for View-Only Mode
new TestDriveJSUI({
container: '#viewer',
mode: 'view', // No editing allowed
sections: false // Disable section detection
});
Advanced Features
Section Metadata
Each section has metadata you can access:
const editor = new TestDriveJSUI({ container: '#editor' });
// Get section manager
const manager = editor.sectionManager;
// Get all sections
const sections = manager.getAllSections();
sections.forEach(section => {
console.log({
id: section.id,
type: section.type, // 'heading', 'paragraph', 'image', etc.
state: section.state, // 'original', 'editing', 'modified', 'saved'
hasChanges: section.hasChanges(),
isEditing: section.isEditing(),
content: section.currentMarkdown
});
});
Section Types
| Type | Description | Detection |
|---|---|---|
| heading | h1-h6 headings | Starts with # |
| paragraph | Regular text | Default type |
| image | Images |  pattern |
| code | Code blocks | Fenced with ``` |
| list | Lists | Starts with - or 1. |
| quote | Blockquotes | Starts with > |
Events
Listen to section editing events:
const editor = new TestDriveJSUI({ container: '#editor' });
// Section manager events
editor.sectionManager.on('edit-started', (data) => {
console.log('Started editing:', data.sectionId);
});
editor.sectionManager.on('changes-accepted', (data) => {
console.log('Accepted changes:', data.sectionId, data.content);
});
editor.sectionManager.on('changes-cancelled', (data) => {
console.log('Cancelled edit:', data.sectionId);
});
Examples
Basic Section Editing
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script src="testdrive-jsui.js"></script>
</head>
<body>
<div id="editor"></div>
<script>
const editor = new TestDriveJSUI({
container: '#editor',
markdown: '# Welcome\n\nClick this section to edit it.\n\n## Try It!\n\nClick this section too!',
mode: 'edit',
sections: true
});
</script>
</body>
</html>
With Event Tracking
const editor = new TestDriveJSUI({
container: '#editor',
markdown: '# My Document\n\nEditable content here.'
});
// Track edits
let editCount = 0;
editor.sectionManager.on('changes-accepted', (data) => {
editCount++;
console.log(`Edit #${editCount}:`, data.content.substring(0, 50) + '...');
});
// Get final document
document.getElementById('export').addEventListener('click', () => {
const markdown = editor.getMarkdown();
console.log('Final document:', markdown);
console.log('Total edits made:', editCount);
});
Troubleshooting
Sections Not Clickable
Problem: Sections don't respond to clicks
Solutions:
- Check that
mode: 'edit'(not 'view') - Ensure
sections: truein config - Verify SectionManager and DOMRenderer are loaded
- Check browser console for JavaScript errors
Editor Dialog Not Appearing
Problem: Click works but no floating editor shows
Solutions:
- Check z-index conflicts with other elements
- Verify CSS is loaded properly
- Check for JavaScript errors in console
- Ensure marked.js is loaded for markdown parsing
Changes Not Persisting
Problem: Edits disappear after accepting
Solutions:
- Click Accept (✓) not Cancel
- Check that section state changed to 'saved'
- Use
editor.getMarkdown()to export current state - Enable autosave or use save button to persist
Best Practices
For Writers
- Edit small sections - Break long documents into manageable pieces
- Use Accept liberally - Save frequently as you edit
- Test with Reset - Preview original vs edited
- Export regularly - Download or save your work
For Developers
- Listen to events - Track user edits for analytics
- Validate sections - Check content before accepting
- Custom section types - Extend Section.detectType() for custom logic
- Batch operations - Use sectionManager API for bulk updates
Related Features
- Edit Control - Document-level save/export actions
- Status Control - Track editing progress
- Keyboard Shortcuts - Quick editing actions
See Also:
Version: 1.0.0 Last Updated: 2025-12-16