readysite / website / internal / content / seed / partials.go
2.4 KB
partials.go
package seed

import (
	"log"

	"github.com/readysite/readysite/pkg/database"
	"github.com/readysite/readysite/website/models"
)

// Partials seeds the default partials (head, header, footer).
func Partials() {
	// Check if head partial already exists
	if _, err := models.Partials.Get("head"); err == nil {
		return // Already seeded
	}

	log.Println("seed: creating default partials...")

	// Head partial - essential CDN includes
	headPartial := &models.Partial{
		Model:       database.Model{ID: "head"},
		Name:        "Head",
		Description: "Essential meta tags and CDN includes for Tailwind, DaisyUI, and HTMX",
		HTML: `<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://cdn.jsdelivr.net/npm/daisyui@5" rel="stylesheet" type="text/css" />
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<script src="https://unpkg.com/htmx.org@2"></script>`,
		Published: true,
	}
	if _, err := models.Partials.Insert(headPartial); err != nil {
		log.Printf("seed: failed to insert head partial: %v", err)
	}

	// Header partial - site navigation
	headerPartial := &models.Partial{
		Model:       database.Model{ID: "header"},
		Name:        "Header",
		Description: "Site navigation header",
		HTML: `<div class="navbar bg-base-100 shadow-lg">
    <div class="flex-1">
        <a href="/" class="btn btn-ghost text-xl">{{site_name}}</a>
    </div>
    <div class="flex-none">
        <ul class="menu menu-horizontal px-1">
            <li><a href="/">Home</a></li>
            {{range $p := published_pages}}
            {{if ne $p.ID "home"}}
            <li><a href="{{$p.Path}}">{{$p.Title}}</a></li>
            {{end}}
            {{end}}
        </ul>
    </div>
</div>`,
		Published: true,
	}
	if _, err := models.Partials.Insert(headerPartial); err != nil {
		log.Printf("seed: failed to insert header partial: %v", err)
	}

	// Footer partial
	footerPartial := &models.Partial{
		Model:       database.Model{ID: "footer"},
		Name:        "Footer",
		Description: "Site footer",
		HTML: `<footer class="footer footer-center p-4 bg-base-100 text-base-content border-t">
    <p>© 2024 {{site_name}}. Built with ReadySite.</p>
</footer>`,
		Published: true,
	}
	if _, err := models.Partials.Insert(footerPartial); err != nil {
		log.Printf("seed: failed to insert footer partial: %v", err)
	}

	log.Println("seed: default partials created successfully")
}
← Back