slideshow
This commit is contained in:
1 parent
988a5410f7
commit
262b853c5b
18 files changed
+1305
-30
No files matched your search
@@ -162,15 +162,29 @@ hyprcrd plugin system
|
||||
│ │ ├── loader.js conditionally imports tests.js on ?test or Ctrl+Shift+T
|
||||
│ │ ├── Test files import from '../../js/modules/...' (NOT '../modules/...')
|
||||
│ │ └── Both static AND dynamic imports use that path — sed both when moving files
|
||||
│ └── email/ (~1300 lines, biggest)
|
||||
│ ├── Backend: ImapClient.php (pure-PHP IMAP4) + backend.php (table + routes)
|
||||
│ ├── Schema: email_accounts table, passwords AES-256-CBC with vault key
|
||||
│ ├── Routes: /api/email/{accounts, accounts/{id}, accounts/{id}/test, messages, message/{accId}/{uid}}
|
||||
│ ├── Settings tab: registered via hyprcrd.settings.registerTab({id:'email', label:'mail'})
|
||||
│ │ └── onShow rebuilds form on first show, refreshes accounts list every show
|
||||
│ ├── Welcome view: shown when accounts.length === 0, "configure accounts" → openTab('email')
|
||||
│ ├── Header button "mail" injected via JS into #main-header right group, before #add-btn
|
||||
│ └── Card extraction: POST /api/cards with #email tag, calls window._reloadAll()
|
||||
│ ├── email/ (~1300 lines, biggest)
|
||||
│ │ ├── Backend: ImapClient.php (pure-PHP IMAP4) + backend.php (table + routes)
|
||||
│ │ ├── Schema: email_accounts table, passwords AES-256-CBC with vault key
|
||||
│ │ ├── Routes: /api/email/{accounts, accounts/{id}, accounts/{id}/test, messages, message/{accId}/{uid}}
|
||||
│ │ ├── Settings tab: registered via hyprcrd.settings.registerTab({id:'email', label:'mail'})
|
||||
│ │ │ └── onShow rebuilds form on first show, refreshes accounts list every show
|
||||
│ │ ├── Welcome view: shown when accounts.length === 0, "configure accounts" → openTab('email')
|
||||
│ │ ├── Header button "mail" injected via JS into #main-header right group, before #add-btn
|
||||
│ │ └── Card extraction: POST /api/cards with #email tag, calls window._reloadAll()
|
||||
│ └── slideshow/ (~500 lines)
|
||||
│ ├── No backend — data stored as ```slide-image fenced block in card body
|
||||
│ ├── Slideshow = parent card (start slide) + children (in position order)
|
||||
│ ├── Text slides: normal markdown rendered fullscreen via hyprcrd.markdown.render
|
||||
│ ├── Image slides: fenced block with `src:` + `x,y,w,h -> target` lines (coords in %)
|
||||
│ │ └── Targets: card:<id>, slide:next, slide:prev, slide:first, slide:<index>
|
||||
│ ├── Viewer: fullscreen overlay, ArrowLeft/Right + Esc, HUD with counter
|
||||
│ │ ├── Image slides use object-fit:contain; hotspots positioned relative to img box
|
||||
│ │ ├── Arrow keys always work as fallback, even when hotspots are present
|
||||
│ │ └── 'h' key toggles debug-hotspots class to visualize rects during presentation
|
||||
│ ├── Hotspot editor: drag on image to create rect, picker assigns target, dbl-click rect to re-pick
|
||||
│ ├── Group-bar button: mutation-observed injection; reads parent id from #group-bar[data-group-id]
|
||||
│ │ └── Requires board.js renderGroupBar to write bar.dataset.groupId — small core patch
|
||||
│ └── Toolbar button "slideHotspots" injected into #md-toolbar, detects existing block at cursor
|
||||
│
|
||||
├── Gotchas / lessons learned
|
||||
│ ├── statusHeight vs scrollHeight — textarea.scrollHeight includes padding, mind it
|
||||
|
||||
Reference in new issue
Block a user