docs: restructure README with concise overview and improved organization - Condensed README from 715 to 113 lines with streamlined feature descriptions - Replaced verbose documentation with quick-start focused content - Reorganized sections: removed detailed architecture, API endpoints, and Meilisearch implementation details - Added version badges and simplified feature categories (Navigation, Markdown, Graph) - Streamlined installation instructions with Docker-first approach and simplified local
158 lines
5.5 KiB
Markdown
158 lines
5.5 KiB
Markdown
# Code Block Component - Fixes Applied
|
|
|
|
## Issues Fixed ✅
|
|
|
|
### 1. Line Numbers Not Working
|
|
**Problem**: Line numbers were displayed but the code content overlapped them because there was no padding.
|
|
|
|
**Solution**:
|
|
- Added dynamic padding to the `<pre>` element based on `props.showLineNumbers`
|
|
- When line numbers are shown: `padding: 12px 12px 12px 48px` (48px left padding for line numbers)
|
|
- When line numbers are hidden: `padding: 12px`
|
|
- Applied the same font family to line numbers to ensure proper alignment
|
|
|
|
### 2. Font Selection Menu Missing
|
|
**Problem**: There was no way to change the font of the code block.
|
|
|
|
**Solution**:
|
|
- Added `availableFonts` array with popular monospace fonts:
|
|
- JetBrains Mono
|
|
- Fira Code
|
|
- Consolas
|
|
- Monaco
|
|
- Courier New
|
|
- Monospace
|
|
- Added font selection menu in the "More" dropdown
|
|
- Implemented `onFontChange()` method to update the font
|
|
- Implemented `getFontFamily()` method to apply the selected font
|
|
- Font is applied via `[style.font-family]="getFontFamily()"`
|
|
|
|
### 3. Language Detection Not Working
|
|
**Problem**: There was no automatic language detection feature.
|
|
|
|
**Solution**:
|
|
- Implemented `detectLanguageInternal()` method with pattern matching for 16+ languages
|
|
- Auto-detection runs on component initialization if no language is set
|
|
- Added "Auto-detect Language" button in the menu
|
|
- Detection patterns include:
|
|
- JavaScript, TypeScript, Python, Java, C#, C++, C, Go, Rust
|
|
- PHP, Ruby, HTML, CSS, JSON, XML, YAML
|
|
- SQL, Bash, Dockerfile, Markdown
|
|
|
|
### 4. Theme Selection Doesn't Change Text Color
|
|
**Problem**: Theme selection menu was missing.
|
|
|
|
**Solution**:
|
|
- Added theme selection menu in the "More" dropdown
|
|
- Lists all available themes from `CodeThemeService`
|
|
- Implemented `onThemeChange()` method
|
|
- Fixed `getThemeClass()` to use 'darcula' as default theme
|
|
- Theme CSS class is properly applied to the code container
|
|
|
|
### 5. Preview/Collapse Option Missing
|
|
**Problem**: The header didn't have a collapse/preview toggle like the file block.
|
|
|
|
**Solution**:
|
|
- Complete UI restructure following the file block pattern
|
|
- Added header button with:
|
|
- 💻 emoji icon
|
|
- Language label
|
|
- Line count display
|
|
- "More" menu (⋮ button)
|
|
- Collapse/Preview label
|
|
- Implemented `toggleCollapse()`, `isCollapsed()` methods
|
|
- Code editor is conditionally rendered based on `!isCollapsed()`
|
|
- Uses `props.collapsed` to track state
|
|
|
|
## New Features Added 🎁
|
|
|
|
### Enhanced Menu System
|
|
- Created comprehensive dropdown menu with sections:
|
|
- **Language Selection**: All supported languages with visual checkmarks
|
|
- **Theme Selection**: All available themes
|
|
- **Font Selection**: Multiple monospace font options
|
|
- **Options**: Toggle line numbers and word wrap
|
|
- **Actions**: Copy to clipboard and auto-detect language
|
|
|
|
### Better UX
|
|
- Menu closes automatically after selection
|
|
- Menu positioning follows cursor
|
|
- Escape key closes menu
|
|
- Click outside closes menu
|
|
- Visual feedback (checkmarks) for selected options
|
|
|
|
### Keyboard Accessibility
|
|
- Header button supports Enter and Space keys
|
|
- ARIA attributes for screen readers
|
|
- Focus management
|
|
|
|
### Additional Utilities
|
|
- `getLineCount()`: Shows number of lines in the header
|
|
- `getLanguageLabel()`: Displays friendly language name
|
|
- `copyToClipboard()`: One-click code copying
|
|
- `onBlur()`: Updates line numbers after editing
|
|
|
|
## Architecture Improvements
|
|
|
|
### Consistent with File Block
|
|
The component now follows the same pattern as the file block:
|
|
- Same header structure
|
|
- Same menu positioning logic
|
|
- Same collapse/expand behavior
|
|
- Better visual consistency across the app
|
|
|
|
### Better State Management
|
|
- All props updates go through `this.update.emit()`
|
|
- Menu state managed with `menuOpen` and `menuPos`
|
|
- Proper cleanup with `@HostListener` decorators
|
|
|
|
## Testing Recommendations
|
|
|
|
1. **Test Line Numbers**:
|
|
- Toggle line numbers on/off
|
|
- Add/remove lines and verify numbers update
|
|
- Check alignment with different fonts
|
|
|
|
2. **Test Themes**:
|
|
- Switch between all available themes
|
|
- Verify text color changes properly
|
|
- Check that default theme (Darcula) loads correctly
|
|
|
|
3. **Test Fonts**:
|
|
- Try each font option
|
|
- Verify line numbers align correctly with each font
|
|
- Check that font persists after editing
|
|
|
|
4. **Test Language Detection**:
|
|
- Paste code in different languages
|
|
- Click "Auto-detect Language"
|
|
- Verify correct language is detected
|
|
|
|
5. **Test Collapse/Expand**:
|
|
- Click header to collapse
|
|
- Verify content hides
|
|
- Verify "Preview/Collapse" label updates
|
|
- Expand and verify content shows
|
|
|
|
6. **Test Menu**:
|
|
- Open menu and click outside to close
|
|
- Press Escape to close
|
|
- Select options and verify menu closes
|
|
- Check menu positioning on different screen sizes
|
|
|
|
## Known Limitations
|
|
|
|
1. **Language Detection**: The detection is pattern-based and may not be 100% accurate for ambiguous code snippets.
|
|
2. **Font Loading**: Custom fonts (JetBrains Mono, Fira Code) need to be loaded in your app for them to work properly. Consider adding them to your global styles.
|
|
3. **Syntax Highlighting**: This component uses CSS themes but doesn't have actual syntax highlighting (would need a library like Prism or Highlight.js for that).
|
|
|
|
## Next Steps (Optional Enhancements)
|
|
|
|
1. Add syntax highlighting with Prism.js or Highlight.js
|
|
2. Add line highlighting feature
|
|
3. Add search/replace functionality
|
|
4. Add code folding
|
|
5. Load custom fonts via CDN or local assets
|
|
6. Add more sophisticated language detection (using a library)
|
|
7. Add export functionality (download as file)
|