mirror of
https://github.com/m1ngsama/TUT.git
synced 2026-02-08 09:04:04 +00:00
Completed Phase 1 high priority task - comprehensive bookmark management:
BookmarkManager (New):
- JSON persistence to ~/.config/tut/bookmarks.json
- Add, remove, contains, getAll operations
- Automatic sorting by timestamp (newest first)
- Each bookmark stores: title, URL, timestamp
- Handles special characters with JSON escaping
- Auto-creates config directory if needed
UI Integration:
- Bookmark panel in bottom-left of UI
- Shows up to 5 most recent bookmarks
- Displays "[1] Title" format with yellow highlighting
- Shows "+N more..." indicator if >5 bookmarks
- Real-time update when bookmarks change
Keyboard Shortcuts:
- Ctrl+D: Toggle bookmark for current page
* Adds if not bookmarked
* Removes if already bookmarked
* Shows status message confirmation
- F2: Toggle bookmark panel visibility
* Refreshes bookmark list when opened
Features:
- Persistent storage across browser sessions
- Duplicate detection (one bookmark per URL)
- Toggle behavior (add/remove with same key)
- Real-time panel updates
- Empty state handling ("(empty)" message)
- Sorted display (newest first)
Technical Implementation:
- BookmarkManager class with Pimpl idiom
- Simple JSON format for easy manual editing
- Event-driven architecture (WindowEvent::AddBookmark)
- Lambda callback for bookmark updates
- Integrated with main browser engine
Storage Format:
[
{"title": "Page Title", "url": "https://...", "timestamp": 1234567890},
...
]
Documentation:
- Updated KEYBOARD.md with bookmark shortcuts
- Updated STATUS.md to reflect completion
- Added bookmark feature to interactive features list
Next Step: History system! 📚✅
153 lines
4.4 KiB
Markdown
153 lines
4.4 KiB
Markdown
# TUT Browser - Development Status
|
|
|
|
## ✅ Working Features (v0.2.0-alpha) - INTERACTIVE!
|
|
|
|
### Core Functionality
|
|
- ✅ **HTTP/HTTPS Client** - Fully functional with cpp-httplib
|
|
- GET/POST/HEAD requests
|
|
- SSL/TLS support
|
|
- Cookie management
|
|
- Redirect following
|
|
- Timeout handling
|
|
|
|
- ✅ **HTML Parsing** - Working with gumbo-parser
|
|
- Full HTML5 parsing
|
|
- DOM tree construction
|
|
- Title extraction
|
|
- Link extraction with numbering
|
|
|
|
- ✅ **Content Rendering** - Basic text-based rendering
|
|
- Headings (H1-H6) with bold formatting
|
|
- Lists (UL/OL) with bullet points
|
|
- Links with [N] numbering and blue underline
|
|
- Paragraph and block element handling
|
|
- Skip script/style/head tags
|
|
|
|
- ✅ **Browser Engine** - Integrated pipeline
|
|
- Fetches URLs via HTTP client
|
|
- Parses HTML with renderer
|
|
- Resolves relative URLs
|
|
- Error handling for failed requests
|
|
- Back/forward navigation history
|
|
|
|
- ✅ **Interactive UI** - Fully keyboard-driven navigation
|
|
- **Content Scrolling** - j/k, g/G, Space/b for navigation
|
|
- **Link Navigation** - Tab, number keys (1-9), Enter to follow
|
|
- **Address Bar** - 'o' to open, type URL, Enter to navigate
|
|
- **Browser Controls** - Backspace to go back, 'f' to go forward, r/F5 to refresh
|
|
- **In-Page Search** - '/' to search, n/N to navigate results, highlighted matches
|
|
- **Bookmark System** - Ctrl+D to add/remove, F2 to toggle panel, JSON persistence
|
|
- **Real-time Status** - Load stats, scroll position, selected link, search results
|
|
- **Visual Feedback** - Navigation button states, link highlighting, search highlighting
|
|
|
|
### Build & Deployment
|
|
- ✅ Binary size: **827KB** (well under 1MB target!)
|
|
- ✅ Clean compilation with no warnings
|
|
- ✅ All tests build successfully
|
|
- ✅ CI/CD pipeline configured
|
|
- ✅ macOS and Linux support
|
|
|
|
## ⚠️ Known Limitations
|
|
|
|
### UI Components (Not Yet Fully Implemented)
|
|
- ⚠️ **History Panel** - Backend works, UI not implemented
|
|
- Back navigation works with Backspace
|
|
- No visual history panel (F3)
|
|
- No persistence across sessions
|
|
|
|
### Feature Gaps
|
|
- ⚠️ No form support (input fields, buttons, etc.)
|
|
- ⚠️ No image rendering (even ASCII art)
|
|
- ⚠️ No CSS parsing (only basic tag-based formatting)
|
|
- ⚠️ No JavaScript support (by design)
|
|
|
|
## 🎯 Next Steps Priority
|
|
|
|
### Phase 1: Enhanced UX (High Priority)
|
|
|
|
1. **Add History** (new files)
|
|
- Implement history storage (JSON file)
|
|
- Create history panel UI
|
|
- F3 to view history
|
|
- Auto-record visited pages
|
|
|
|
### Phase 3: Advanced Features (Low Priority)
|
|
7. **Improve Rendering**
|
|
- Better word wrapping
|
|
- Table rendering
|
|
- Code block formatting
|
|
- Better list indentation
|
|
|
|
8. **Add Form Support**
|
|
- Input field rendering
|
|
- Button rendering
|
|
- Form submission
|
|
|
|
9. **Add Image Support**
|
|
- ASCII art rendering
|
|
- Image-to-text conversion
|
|
|
|
## 📊 Test Results
|
|
|
|
```bash
|
|
./test_browse.sh
|
|
|
|
Test 1: TLDP HOWTO index - ✅ PASSED
|
|
Test 2: example.com - ✅ PASSED
|
|
|
|
Interactive test:
|
|
./build_ftxui/tut https://tldp.org/HOWTO/HOWTO-INDEX/howtos.html
|
|
|
|
✅ Scrolling with j/k - WORKS
|
|
✅ Tab to cycle links - WORKS
|
|
✅ Press '1' to jump to link 1 - WORKS
|
|
✅ Enter to follow link - WORKS
|
|
✅ Backspace to go back - WORKS
|
|
✅ 'f' to go forward - WORKS
|
|
✅ '/' to search - WORKS
|
|
✅ 'n'/'N' to navigate search results - WORKS
|
|
✅ Ctrl+D to add/remove bookmark - WORKS
|
|
✅ F2 to toggle bookmark panel - WORKS
|
|
✅ 'r' to refresh - WORKS
|
|
✅ 'o' to open address bar - WORKS
|
|
```
|
|
|
|
Successfully browses:
|
|
- https://tldp.org/HOWTO/HOWTO-INDEX/howtos.html ⭐ FULLY INTERACTIVE
|
|
- https://example.com ⭐ FULLY INTERACTIVE
|
|
- Any static HTML page ⭐ FULLY INTERACTIVE
|
|
|
|
## 🚀 Quick Start
|
|
|
|
```bash
|
|
# Build
|
|
cmake -B build_ftxui -DCMAKE_PREFIX_PATH=/opt/homebrew
|
|
cmake --build build_ftxui -j$(nproc)
|
|
|
|
# Test
|
|
./test_browse.sh
|
|
|
|
# Try it
|
|
./build_ftxui/tut https://example.com
|
|
```
|
|
|
|
## 📝 Notes
|
|
|
|
**THE BROWSER IS NOW FULLY INTERACTIVE AND USABLE!** 🎉
|
|
|
|
You can actually browse the web with TUT:
|
|
- Load pages via HTTP/HTTPS
|
|
- Scroll content with vim-style keys
|
|
- Navigate between links with Tab or numbers
|
|
- Follow links by pressing Enter
|
|
- Go back in history with Backspace
|
|
- Enter new URLs with 'o' key
|
|
- See real-time load stats
|
|
|
|
The core experience is complete! Remaining work is mostly enhancements:
|
|
- Search within pages
|
|
- Persistent bookmarks and history
|
|
- Form support
|
|
- Better styling
|
|
|
|
See [KEYBOARD.md](KEYBOARD.md) for complete keyboard shortcuts reference.
|