goffeetabler/controllers/tablerbase.go
2026-05-02 23:51:21 -05:00

162 lines
5.5 KiB
Go

// Copyright (c) 2026 Jose Cely <me@jacs.guru>
// Use of this source code is governed by MIT-style
// license that can be found in the LICENSE file.
package controllers
import (
"html/template"
"git.smarteching.com/goffee/core"
)
// TablerDemo1 renders a Tabler-themed demo page
func TablerDemo1(c *core.Context) *core.Response {
// first, include compoment
type templateData struct {
Content template.HTML
}
// Build the template data
data := templateData{
// The main page content (rendered HTML)
Content: template.HTML("<h2>Hola mundo</h2>"),
}
return c.Response.Template("tabler_demo.html", data)
}
// TablerSingle renders a page using the single layout (centered page with logo)
func TablerSingle(c *core.Context) *core.Response {
data := TablerPageData{
PageTitle: "Tabler Single",
PageDescription: "A single centered page",
Content: template.HTML("<div class=\"card card-md\"><div class=\"card-body\"><h2 class=\"card-title text-center mb-4\">Login</h2><p class=\"text-secondary mb-4\">Enter your credentials to access your account.</p></div></div>"),
}
return c.Response.Template("tabler_single.html", data)
}
// TablerDefault renders a page using the default layout (with navbar, page header, footer)
func TablerDefault(c *core.Context) *core.Response {
data := TablerPageData{
PageTitle: "Tabler Default",
PageDescription: "A default page layout",
Sidebar: false,
ShowTopbar: true,
PageHeader: "Default Page",
PagePretitle: "Overview",
UserName: "Jane Doe",
UserRole: "Administrator",
Content: template.HTML("<div class=\"card\"><div class=\"card-body\"><h3 class=\"card-title\">Content Area</h3><p>This is the main content area of the default page layout.</p></div></div>"),
}
return c.Response.Template("tabler_default.html", data)
}
// TablerNavbar renders a page using the default layout (with navbar, navbarmenu, page header, footer)
func TablerNavbar(c *core.Context) *core.Response {
data := TablerPageData{
PageTitle: "Navbar Menu Demo",
PageDescription: "Sample page with navbar menu",
ShowTopbar: true,
Sidebar: false,
PageHeader: "Navbar Menu Demo",
PagePretitle: "Components",
UserName: "Jane Doe",
UserRole: "Administrator",
NavbarMenu: SampleNavbarMenu(),
Content: template.HTML("<div class=\"card\"><div class=\"card-body\"><h3 class=\"card-title\">Navbar Menu Example</h3><p>This page demonstrates the navbar menu component migrated from the Liquid template. The menu items (Dashboards, Layout, Help) are rendered from sample data.</p></div></div>"),
}
return c.Response.Template("tabler_default.html", data)
}
// TablerCards renders a page with card component demos.
// Uses the composition pattern: embeds TablerPageData and adds Cards.
func TablerCards(c *core.Context) *core.Response {
type cardsPageData struct {
TablerPageData
Cards []FormtablerCard
}
data := cardsPageData{
TablerPageData: TablerPageData{
PageTitle: "Cards",
PageDescription: "Card component demo page",
ShowTopbar: true,
Sidebar: false,
PageHeader: "Cards",
PagePretitle: "Components",
UserName: "Jane Doe",
UserRole: "Administrator",
NavbarMenu: SampleNavbarMenu(),
Content: template.HTML(""),
},
Cards: SampleCards(),
}
return c.Response.Template("tabler_cards.html", data)
}
// TablerFormElements renders a page with all 25 formtabler form components.
// Uses the composition pattern: embeds TablerPageData and adds
// a FormElements field containing all form component data.
func TablerFormElements(c *core.Context) *core.Response {
type formelementsPageData struct {
TablerPageData
FormElements FormtablerFormElementsPage
}
data := formelementsPageData{
TablerPageData: TablerPageData{
PageTitle: "Form Elements",
PageDescription: "Form element demo page",
ShowTopbar: true,
Sidebar: false,
PageHeader: "Form Elements",
PagePretitle: "Components",
UserName: "Jane Doe",
UserRole: "Administrator",
NavbarMenu: SampleNavbarMenu(),
Content: template.HTML(""),
},
FormElements: SampleFormElements(),
}
return c.Response.Template("tabler_formelements.html", data)
}
// TablerTables renders a page with table components.
// Uses a page-specific struct that embeds TablerPageData and adds the Tables field.
// The template detects tables via hasField and renders them.
func TablerTables(c *core.Context) *core.Response {
type tablesPageData struct {
TablerPageData
Tables []TableComponent
}
data := tablesPageData{
TablerPageData: TablerPageData{
PageTitle: "Tables",
PageDescription: "Table demo page",
ShowTopbar: true,
Sidebar: false,
PageHeader: "Tables",
PagePretitle: "Components",
UserName: "Jane Doe",
UserRole: "Administrator",
NavbarMenu: SampleNavbarMenu(),
Content: template.HTML(""),
},
Tables: SampleTables(),
}
return c.Response.Template("tabler_tables.html", data)
}
// TablerHome renders the homepage/dashboard layout
func TablerHome(c *core.Context) *core.Response {
data := TablerPageData{
PageTitle: "Dashboard",
PageDescription: "Dashboard home page",
PageHeader: "Dashboard",
PagePretitle: "Overview",
UserName: "Jane Doe",
UserRole: "Administrator",
ShowTopbar: true,
Sidebar: false,
}
return c.Response.Template("tabler_homepage.html", data)
}