Major architectural simplification removing content type complexity: Database Schema: - Remove 'type' field from content and content_versions tables - Simplify to pure HTML storage with html_content + original_template - Regenerate all sqlc models for SQLite and PostgreSQL API Simplification: - Remove content type routing and validation - Eliminate type-specific handlers (text/markdown/structured) - Unified HTML-first approach for all content operations - Simplify CreateContent and UpdateContent to HTML-only Backend Enhancements: - Update enhancer to only generate data-content-id (no data-content-type) - Improve container expansion utilities with comprehensive block/inline rules - Add Phase 3 preparation with boundary-respecting traversal logic - Strengthen element classification for viable children detection Documentation: - Update TODO.md to reflect Phase 1-3 completion status - Add WORKING_ON.md documenting the architectural transformation - Mark container expansion and HTML-first architecture as complete This completes the transition to a unified HTML-first content management system with automatic style detection and element-based behavior, eliminating the complex multi-type system in favor of semantic HTML-driven editing.
68 lines
2.3 KiB
Go
68 lines
2.3 KiB
Go
package engine
|
|
|
|
import (
|
|
"golang.org/x/net/html"
|
|
)
|
|
|
|
// ProcessMode defines how the engine should process content
|
|
type ProcessMode int
|
|
|
|
const (
|
|
// Enhancement mode: Parse + Generate IDs + Inject content + Add editor assets
|
|
Enhancement ProcessMode = iota
|
|
// IDGeneration mode: Parse + Generate IDs only (for API)
|
|
IDGeneration
|
|
// ContentInjection mode: Parse + Generate IDs + Inject content only
|
|
ContentInjection
|
|
)
|
|
|
|
// ContentInput represents input to the content engine
|
|
type ContentInput struct {
|
|
HTML []byte // Raw HTML or markup
|
|
FilePath string // File context (e.g., "index.html")
|
|
SiteID string // Site identifier
|
|
Mode ProcessMode // Processing mode
|
|
}
|
|
|
|
// ContentResult represents the result of content processing
|
|
type ContentResult struct {
|
|
Document *html.Node // Processed HTML document
|
|
Elements []ProcessedElement // All processed elements
|
|
GeneratedIDs map[string]string // Map of element positions to generated IDs
|
|
}
|
|
|
|
// ProcessedElement represents an element that has been processed
|
|
type ProcessedElement struct {
|
|
Node *html.Node // HTML node
|
|
ID string // Generated content ID
|
|
Content string // Injected content (if any)
|
|
Generated bool // Whether ID was generated (vs existing)
|
|
Tag string // Element tag name
|
|
Classes []string // Element CSS classes
|
|
}
|
|
|
|
// ContentClient interface for accessing content data
|
|
// This will be implemented by database clients, HTTP clients, and mock clients
|
|
type ContentClient interface {
|
|
GetContent(siteID, contentID string) (*ContentItem, error)
|
|
GetBulkContent(siteID string, contentIDs []string) (map[string]ContentItem, error)
|
|
GetAllContent(siteID string) (map[string]ContentItem, error)
|
|
CreateContent(siteID, contentID, htmlContent, originalTemplate, lastEditedBy string) (*ContentItem, error)
|
|
}
|
|
|
|
// ContentItem represents a piece of content from the database
|
|
type ContentItem struct {
|
|
ID string `json:"id"`
|
|
SiteID string `json:"site_id"`
|
|
HTMLContent string `json:"html_content"`
|
|
OriginalTemplate string `json:"original_template"`
|
|
UpdatedAt string `json:"updated_at"`
|
|
LastEditedBy string `json:"last_edited_by,omitempty"`
|
|
}
|
|
|
|
// ContentResponse represents the API response structure
|
|
type ContentResponse struct {
|
|
Content []ContentItem `json:"content"`
|
|
Error string `json:"error,omitempty"`
|
|
}
|