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")
}