Files
ersteller/starter/index/index.go
T
2025-11-15 12:16:59 +01:00

112 lines
3.4 KiB
Go

package index
import (
. "git.gorlug.de/code/ersteller"
. "maragu.dev/gomponents"
. "maragu.dev/gomponents/html"
)
const IndexPath = "/"
const IndexPathDe = "/"
var indexTexts *IndexTexts
type IndexTexts struct {
PageTitle I18nText
PageDescription I18nText
WelcomeTitle I18nText
WelcomeText I18nText
FeaturesTitle I18nText
FeaturesText I18nText
ContactTitle I18nText
ContactText I18nText
}
type Page struct {
createPage CreateHtmxPageFunc
ViewRoute HtmxRoute
}
func NewPage(createPage CreateHtmxPageFunc, server HtmxServer, path *ActivePath) *Page {
if indexTexts == nil {
createIndexTexts()
}
page := &Page{
createPage: createPage,
}
page.ViewRoute = NewHtmxGetRoute(page.View, LanguagePaths{
En: IndexPath,
De: IndexPathDe,
}).SetActivePath(path)
page.ViewRoute.Add(server)
return page
}
func createIndexTexts() {
indexTexts = &IndexTexts{
PageTitle: NewI18nText(map[Language]string{
En: "Home",
De: "Startseite",
}),
PageDescription: NewI18nText(map[Language]string{
En: "Welcome to our application - Your digital solution",
De: "Willkommen bei unserer Anwendung - Ihre digitale Lösung",
}),
WelcomeTitle: NewI18nText(map[Language]string{
En: "Welcome to Your Application",
De: "Willkommen bei Ihrer Anwendung",
}),
WelcomeText: NewI18nText(map[Language]string{
En: "This is your white label template starter kit. Customize this content to match your brand and requirements.",
De: "Dies ist Ihr White-Label-Template-Starter-Kit. Passen Sie diesen Inhalt an Ihre Marke und Anforderungen an.",
}),
FeaturesTitle: NewI18nText(map[Language]string{
En: "Key Features",
De: "Hauptfunktionen",
}),
FeaturesText: NewI18nText(map[Language]string{
En: "Built with modern web technologies, responsive design, and multi-language support. Perfect foundation for your next project.",
De: "Entwickelt mit modernen Web-Technologien, responsivem Design und mehrsprachiger Unterstützung. Perfekte Grundlage für Ihr nächstes Projekt.",
}),
ContactTitle: NewI18nText(map[Language]string{
En: "Get Started",
De: "Erste Schritte",
}),
ContactText: NewI18nText(map[Language]string{
En: "Ready to customize this template? Replace this placeholder content with your own information and branding.",
De: "Bereit, diese Vorlage anzupassen? Ersetzen Sie diesen Platzhalter-Inhalt durch Ihre eigenen Informationen und Ihr Branding.",
}),
}
}
func (p *Page) getMetaData() PageWebsiteMetaData {
return PageWebsiteMetaData{
Title: indexTexts.PageTitle,
Lang: En,
Description: indexTexts.PageDescription,
}
}
func (p *Page) View(c HtmxContext) {
content := IndexContent(c.GetLanguage())
p.createPage(c, p.getMetaData(), content)
}
func IndexContent(language Language) Group {
return []Node{
Div(Class("hero-section"),
H1(Class("hero-title"), Text(indexTexts.WelcomeTitle.FromLang(language))),
P(Class("hero-description"), Text(indexTexts.WelcomeText.FromLang(language))),
),
Div(Class("content-section"),
H2(Class("section-title"), Text(indexTexts.FeaturesTitle.FromLang(language))),
P(Class("section-description"), Text(indexTexts.FeaturesText.FromLang(language))),
),
Div(Class("content-section"),
H2(Class("section-title"), Text(indexTexts.ContactTitle.FromLang(language))),
P(Class("section-description"), Text(indexTexts.ContactText.FromLang(language))),
),
}
}