feat(editor): blog editor element with exact untouched value

- golem15-journal-blogeditor (BlogEditorElement): light-DOM element with a
  TipTap WYSIWYG tab and a Source tab that edits the exact HTML string
- The value is the exact served string until a user edit; external values
  go in with emitUpdate false; summer-change fires on user edits only and
  an echo set is a no-op
- StarterKit without the trailing node, links without target, rel or class;
  injectCSS false with the ProseMirror base rules in blogeditor.css under
  the element tag, colours from --c-* only
- Committed bundle embedded through admin.go; vitest smoke on an imported
  post fixture (footer, style block, spans, figure, table, entities)
This commit is contained in:
2026-10-10 11:35:51 +02:00
parent 234e6169cc
commit 47f3032dcf
10 changed files with 745 additions and 2 deletions

View File

@@ -10,14 +10,16 @@ import (
"git.golem15.com/golem15/summercms/modules/pact"
)
// adminFS holds the admin YAML and the nav SVG file by file: the controllers
// directory also holds Go sources that are not admin assets.
// adminFS holds the admin YAML, the nav SVG and the committed Blog Editor
// bundle file by file: the controllers directory also holds Go sources that
// are not admin assets, and assets/src is the bundle's source.
//
//go:embed controllers/posts/config_list.yaml controllers/posts/config_form.yaml controllers/posts/config_filter.yaml models/post/fields.yaml models/post/columns.yaml
//go:embed controllers/categories/config_list.yaml controllers/categories/config_form.yaml models/category/fields.yaml models/category/columns.yaml
//go:embed controllers/tags/config_list.yaml controllers/tags/config_form.yaml models/tag/fields.yaml models/tag/columns.yaml
//go:embed models/settings/fields.yaml
//go:embed assets/images/journal-icon.svg
//go:embed assets/dist/blogeditor.js assets/dist/blogeditor.css
var adminFS embed.FS
func (p *Plugin) AdminFS() fs.FS { return adminFS }