// Copyright (c) 2026 Jose Cely // 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("

Hola mundo

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

Login

Enter your credentials to access your account.

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

Content Area

This is the main content area of the default page layout.

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

Navbar Menu Example

This page demonstrates the navbar menu component migrated from the Liquid template. The menu items (Dashboards, Layout, Help) are rendered from sample data.

"), } return c.Response.Template("tabler_default.html", data) } // TablerComponents renders a page with alerts, breadcrumbs, and toasts. // Uses the composition pattern: embeds TablerPageData and adds Components. func TablerComponents(c *core.Context) *core.Response { type componentsPageData struct { TablerPageData Components FormtablerComponentsPage } data := componentsPageData{ TablerPageData: TablerPageData{ PageTitle: "UI Components", PageDescription: "Alerts, breadcrumbs and toasts demo", ShowTopbar: true, Sidebar: false, PageHeader: "Components", PagePretitle: "UI Elements", UserName: "Jane Doe", UserRole: "Administrator", NavbarMenu: SampleNavbarMenu(), Content: template.HTML(""), }, Components: SampleComponents(), } return c.Response.Template("tabler_components.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) } // UserSignIn renders the sign-in page. func UserSignIn(c *core.Context) *core.Response { type authPageData struct { TablerPageData } data := authPageData{ TablerPageData: TablerPageData{ PageTitle: "Sign In", }, } return c.Response.Template("apptabler_sign-in.html", data) } // UserSignUp renders the sign-up page. func UserSignUp(c *core.Context) *core.Response { type authPageData struct { TablerPageData } data := authPageData{ TablerPageData: TablerPageData{ PageTitle: "Sign Up", }, } return c.Response.Template("apptabler_sign-up.html", data) } // UserForgot renders the forgot password page. func UserForgot(c *core.Context) *core.Response { type authPageData struct { TablerPageData } data := authPageData{ TablerPageData: TablerPageData{ PageTitle: "Forgot Password", }, } return c.Response.Template("apptabler_forgot.html", data) } // UserLock renders the account lock page. func UserLock(c *core.Context) *core.Response { type authLockPageData struct { TablerPageData PersonName string } data := authLockPageData{ TablerPageData: TablerPageData{ PageTitle: "Account Locked", }, PersonName: "Paweł Kuna", } return c.Response.Template("apptabler_auth-lock.html", data) } // AdminCustomers renders the admin customers listing page. func AdminCustomers(c *core.Context) *core.Response { type adminCustomersPageData struct { TablerPageData AdminCustomers AdminCustomersPage } data := adminCustomersPageData{ TablerPageData: TablerPageData{ PageTitle: "Customers", PageDescription: "Manage customers", ShowTopbar: true, Sidebar: false, PageHeader: "Customers", PagePretitle: "Customer Management", UserName: "Jane Doe", UserRole: "Administrator", NavbarMenu: SampleNavbarMenu(), }, AdminCustomers: AdminCustomersPage{ Customers: SampleCustomersTable(), }, } return c.Response.Template("apptabler_admincustomers.html", data) } // AdminUsers renders the admin users listing page. func AdminUsers(c *core.Context) *core.Response { type adminUsersPageData struct { TablerPageData AdminUsers AdminUsersPage } data := adminUsersPageData{ TablerPageData: TablerPageData{ PageTitle: "Admin Users", PageDescription: "Manage system users", ShowTopbar: true, Sidebar: false, PageHeader: "Admin Users", PagePretitle: "User Management", UserName: "Jane Doe", UserRole: "Administrator", NavbarMenu: SampleNavbarMenu(), }, AdminUsers: SampleAdminUsers(), } return c.Response.Template("apptabler_admin-users.html", data) } // UserSettings renders the user settings page. func UserSettings(c *core.Context) *core.Response { type userSettingsPageData struct { TablerPageData UserSettings FormtablerUserSettingsPage } data := userSettingsPageData{ TablerPageData: TablerPageData{ PageTitle: "Account Settings", PageDescription: "User account settings", ShowTopbar: true, Sidebar: false, PageHeader: "Account Settings", PagePretitle: "User Profile", UserName: "Jane Doe", UserRole: "Administrator", NavbarMenu: SampleNavbarMenu(), }, UserSettings: SampleUserSettings(), } return c.Response.Template("apptabler_usersettings.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) } // DemoForm1 renders the sample contact form using the form generator. func DemoForm1(c *core.Context) *core.Response { type demoForm1Data struct { TablerPageData FormDefinition FormtablerFormDefinition } data := demoForm1Data{ TablerPageData: TablerPageData{ PageTitle: "Demo Form 1", PageDescription: "Sample contact form generated from JSON definition", ShowTopbar: true, Sidebar: false, PageHeader: "Contact Form", PagePretitle: "Demo Form Generator", UserName: "Jane Doe", UserRole: "Administrator", NavbarMenu: SampleNavbarMenu(), }, FormDefinition: FormtablerFormDefinition{ ID: "contact-form", Title: "Contact us", SuccessMessage: "Thanks! We'll get back to you soon.", Method: "POST", Fields: []FormtablerFormField{ { Name: "name", Label: "Name", Type: "text", Required: true, Placeholder: "Jane Doe", }, { Name: "email", Label: "Email", Type: "email", Required: true, Placeholder: "jane@example.com", }, { Name: "phone", Label: "Phone", Type: "phone", Required: false, Placeholder: "+1 555 000 0000", }, { Name: "message", Label: "Message", Type: "textarea", Required: true, Placeholder: "How can we help?", MaxLength: 1000, }, }, }, } return c.Response.Template("apptabler_demoform.html", data) } // DemoForm2 renders an advanced form using all available field types. func DemoForm2(c *core.Context) *core.Response { type demoForm2Data struct { TablerPageData FormDefinition FormtablerFormDefinition } data := demoForm2Data{ TablerPageData: TablerPageData{ PageTitle: "Demo Form 2", PageDescription: "Advanced form with all field types", ShowTopbar: true, Sidebar: false, PageHeader: "Advanced Registration Form", PagePretitle: "Demo Form Generator", UserName: "Jane Doe", UserRole: "Administrator", NavbarMenu: SampleNavbarMenu(), }, FormDefinition: FormtablerFormDefinition{ ID: "advanced-registration", Title: "User Registration", SuccessMessage: "Registration submitted successfully! We'll review your application.", Method: "POST", Columns: 3, FieldsetTitle: "Personal Information", FieldsetDescription: "Please fill in all required fields marked with an asterisk (*).", Fields: []FormtablerFormField{ { Name: "first_name", Label: "First Name", Type: "text", Required: true, Placeholder: "John", MinLength: 2, MaxLength: 50, Autofocus: true, }, { Name: "last_name", Label: "Last Name", Type: "text", Required: true, Placeholder: "Doe", MinLength: 2, MaxLength: 50, }, { Name: "email", Label: "Email Address", Type: "email", Required: true, Placeholder: "john.doe@example.com", }, { Name: "phone", Label: "Phone Number", Type: "phone", Required: true, Placeholder: "+1 (555) 000-0000", HelpText: "Include country code for international numbers.", }, { Name: "account_type", Label: "Account Type", Type: "select", Required: true, Options: []FormtablerFormFieldOption{ {Label: "Personal", Value: "personal", Selected: true}, {Label: "Business", Value: "business"}, {Label: "Enterprise", Value: "enterprise"}, }, }, { Name: "password", Label: "Password", Type: "password", Required: true, Placeholder: "••••••••", MinLength: 8, MaxLength: 128, HelpText: "At least 8 characters with uppercase, lowercase and numbers.", }, { Name: "company", Label: "Company Name", Type: "text", Placeholder: "Acme Inc.", HelpText: "Only required for Business and Enterprise accounts.", }, { Name: "website", Label: "Website", Type: "url", Placeholder: "https://example.com", }, { Name: "bio", Label: "Biography", Type: "textarea", Placeholder: "Tell us about yourself...", MaxLength: 500, HelpText: "Maximum 500 characters.", }, { Name: "birth_date", Label: "Date of Birth", Type: "date", }, { Name: "preferred_language", Label: "Preferred Language", Type: "select", Options: []FormtablerFormFieldOption{ {Label: "English", Value: "en", Selected: true}, {Label: "Spanish", Value: "es"}, {Label: "French", Value: "fr"}, {Label: "German", Value: "de"}, {Label: "Japanese", Value: "ja"}, {Label: "Chinese", Value: "zh"}, }, }, { Name: "experience_level", Label: "Experience Level", Type: "radio", Required: true, Options: []FormtablerFormFieldOption{ {Label: "Beginner", Value: "beginner", Checked: true}, {Label: "Intermediate", Value: "intermediate"}, {Label: "Advanced", Value: "advanced"}, {Label: "Expert", Value: "expert"}, }, }, { Name: "skills", Label: "Skills & Technologies", Type: "checkbox", HelpText: "Select all that apply.", Options: []FormtablerFormFieldOption{ {Label: "Go", Value: "go", Checked: true}, {Label: "JavaScript", Value: "javascript", Checked: true}, {Label: "Python", Value: "python"}, {Label: "Rust", Value: "rust"}, {Label: "Docker", Value: "docker"}, {Label: "Kubernetes", Value: "kubernetes"}, {Label: "PostgreSQL", Value: "postgresql"}, {Label: "Redis", Value: "redis"}, }, }, { Name: "notifications", Label: "Email Notifications", Type: "toggle", HelpText: "Receive updates about new features and security alerts.", }, { Name: "website_color", Label: "Preferred Accent Color", Type: "color", Value: "#206bc4", }, { Name: "priority_level", Label: "Priority Level", Type: "range", Min: 1, Max: 10, Step: 1, Value: "5", HelpText: "1 = Lowest priority, 10 = Highest priority", }, { Name: "agree_terms", Label: "I agree to the Terms of Service and Privacy Policy", Type: "checkbox", Required: true, }, { Name: "marketing_consent", Label: "I would like to receive marketing communications", Type: "toggle", }, { Name: "csrf_token", Type: "hidden", Value: "abc123xyz", }, }, SubmitText: "Create Account", ShowReset: true, ResetText: "Clear All", }, } return c.Response.Template("apptabler_demoform.html", data) }