add undo/redo to page editors with keyboard shortcuts
All checks were successful
deploy / deploy (push) Successful in 1m29s
All checks were successful
deploy / deploy (push) Successful in 1m29s
History stacks (@history/@future) on both admin editor and live sidebar, capped at 50 entries. All mutations routed through apply_mutation for consistent history tracking. EditorKeyboard JS hook combines DirtyGuard with Ctrl+Z/Ctrl+Shift+Z. Settings panel fade-in animation. 10 new tests. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -147,7 +147,7 @@ Plans: [admin-redesign.md](docs/plans/admin-redesign.md) | [admin-font-loading.m
|
||||
| ~~98~~ | ~~Stage 2: routing + LiveView — `Shop.CustomPage`, catch-all route, 404 handling~~ | 97 | 1h | done |
|
||||
| ~~99~~ | ~~Stage 3: admin CRUD — create/edit/delete pages, page settings, admin index~~ | 98 | 2.5h | done |
|
||||
| ~~100~~ | ~~Stage 4: navigation management — data-driven nav, settings storage, admin editor~~ | 99 | 3h | done |
|
||||
| 101 | Stage 5: SEO + redirects — sitemap, auto-redirect on slug change, draft/published | 100 | 1h | planned |
|
||||
| ~~101~~ | ~~Stage 5: SEO + redirects — sitemap, auto-redirect on slug change, draft/published~~ | 100 | 1h | done |
|
||||
| 102 | Stage 6: polish — page templates, new block types, bulk ops | 101 | 3-4h | deferred |
|
||||
| | **Platform site** | | | |
|
||||
| 73 | Platform/marketing site — brochure, pricing, sign-up | — | TBD | planned |
|
||||
@@ -487,7 +487,7 @@ Admin media library at `/admin/media` with image grid, type/search/orphan filter
|
||||
See: [docs/plans/media-library.md](docs/plans/media-library.md) for full plan
|
||||
|
||||
### Page Editor
|
||||
**Status:** In progress — Stage 8 of 9 complete, 1455 tests
|
||||
**Status:** Complete — all 9 stages done, 1485 tests
|
||||
|
||||
Database-driven page builder. Every page is a flat list of blocks stored as JSON — add, remove, reorder, and edit blocks on any page. One generic renderer for all pages (no page-specific render functions). Portable blocks (hero, featured_products, image_text, etc.) work on any page. Page-specific blocks (product_hero, cart_items, etc.) are restricted to their native page. Block data loaders dynamically load data based on which blocks are on the page. ETS-cached page definitions. Mobile-first admin editor with live preview, undo/redo, accessible reordering (no drag-and-drop), inline settings forms, and "reset to defaults". CSS-driven page layout (not renderer-driven).
|
||||
|
||||
@@ -501,7 +501,7 @@ Database-driven page builder. Every page is a flat list of blocks stored as JSON
|
||||
7. ~~Admin editor — inline block settings editing~~ ✅ (`3f97742`)
|
||||
7b. ~~SettingsField struct + repeater field type for info_card items~~ ✅ (`6fbd654`)
|
||||
8. ~~Live page editor sidebar — collapsible sidebar on shop pages, backdrop dismiss, portable content block~~ ✅ (`a039c8d`)
|
||||
9. **Next →** Undo/redo + polish — history stacks, keyboard shortcuts, animations
|
||||
9. ~~Undo/redo + polish — history stacks, keyboard shortcuts, settings animations~~ ✅
|
||||
|
||||
**Key files created:**
|
||||
- `lib/berrypod/pages.ex` — context (CRUD + cache + load_block_data)
|
||||
|
||||
Reference in New Issue
Block a user