|
- package domain
-
- import (
- "regexp"
- "strings"
- )
-
- const (
- WebsiteSectionHero = "hero"
- WebsiteSectionIntro = "intro"
- WebsiteSectionServices = "services"
- WebsiteSectionServiceItem = "service_item"
- WebsiteSectionAbout = "about"
- WebsiteSectionTeam = "team"
- WebsiteSectionTestimonials = "testimonials"
- WebsiteSectionCTA = "cta"
- WebsiteSectionContact = "contact"
- WebsiteSectionFooter = "footer"
- WebsiteSectionGallery = "gallery"
- WebsiteSectionOther = "other"
- )
-
- var websiteSectionOrder = []string{
- WebsiteSectionHero,
- WebsiteSectionIntro,
- WebsiteSectionServices,
- WebsiteSectionServiceItem,
- WebsiteSectionAbout,
- WebsiteSectionTeam,
- WebsiteSectionTestimonials,
- WebsiteSectionCTA,
- WebsiteSectionContact,
- WebsiteSectionFooter,
- WebsiteSectionGallery,
- WebsiteSectionOther,
- }
-
- var websiteSectionLabels = map[string]string{
- WebsiteSectionHero: "Hero",
- WebsiteSectionIntro: "Intro",
- WebsiteSectionServices: "Services",
- WebsiteSectionServiceItem: "Service Item",
- WebsiteSectionAbout: "About",
- WebsiteSectionTeam: "Team",
- WebsiteSectionTestimonials: "Testimonials",
- WebsiteSectionCTA: "CTA",
- WebsiteSectionContact: "Contact",
- WebsiteSectionFooter: "Footer",
- WebsiteSectionGallery: "Gallery",
- WebsiteSectionOther: "Other",
- }
-
- var serviceItemIndexPattern = regexp.MustCompile(`_\d+$`)
-
- func WebsiteSectionOptions() []string {
- out := make([]string, len(websiteSectionOrder))
- copy(out, websiteSectionOrder)
- return out
- }
-
- func WebsiteSectionLabel(section string) string {
- normalized := NormalizeWebsiteSection(section)
- if label, ok := websiteSectionLabels[normalized]; ok {
- return label
- }
- return websiteSectionLabels[WebsiteSectionOther]
- }
-
- func NormalizeWebsiteSection(section string) string {
- normalized := strings.ToLower(strings.TrimSpace(section))
- for _, candidate := range websiteSectionOrder {
- if normalized == candidate {
- return candidate
- }
- }
- return WebsiteSectionOther
- }
-
- func SuggestWebsiteSection(field TemplateField) string {
- section := strings.ToLower(strings.TrimSpace(field.Section))
- key := strings.ToLower(strings.TrimSpace(field.KeyName))
- path := strings.ToLower(strings.TrimSpace(field.Path))
- sample := strings.ToLower(strings.TrimSpace(field.SampleValue))
- fieldKind := strings.ToLower(strings.TrimSpace(field.FieldKind))
-
- combined := strings.Join([]string{section, key, path}, " ")
- if fieldKind == "image" || containsAny(combined, "gallery", "image", "img", "photo", "picture", "media") {
- return WebsiteSectionGallery
- }
- if containsAny(combined, "testimonial") {
- return WebsiteSectionTestimonials
- }
- if section == "services" || containsAny(combined, "service") {
- if containsAny(combined, "item", "card") || serviceItemIndexPattern.MatchString(key) {
- return WebsiteSectionServiceItem
- }
- return WebsiteSectionServices
- }
- if containsAny(combined, "team", "member", "staff", "employee", "founder") {
- return WebsiteSectionTeam
- }
- if containsAny(combined, "welcome", "headline", "hero", "banner") {
- return WebsiteSectionHero
- }
- if containsAny(combined, "intro", "introduction", "lead") {
- return WebsiteSectionIntro
- }
- if containsAny(combined, "about", "company", "mission", "story") || len(sample) > 180 {
- return WebsiteSectionAbout
- }
- if containsAny(combined, "cta", "highlight", "button", "calltoaction", "call_to_action") {
- return WebsiteSectionCTA
- }
- if containsAny(combined, "contact", "email", "phone", "address") {
- return WebsiteSectionContact
- }
- if containsAny(combined, "footer", "copyright", "imprint", "legal") {
- return WebsiteSectionFooter
- }
- return WebsiteSectionOther
- }
-
- func containsAny(value string, needles ...string) bool {
- for _, needle := range needles {
- if strings.Contains(value, needle) {
- return true
- }
- }
- return false
- }
|