Alex Dunmow 4713787bbd initial: theme plugin corporate-modernist
Bootstrapped during the 2026-06-06 BlockNinja consolidation. Was previously
an unversioned directory inside ~/src/blockninja-themes/corporate-modernist.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 14:11:24 +08:00

83 lines
1.9 KiB
Go

package main
import "strconv"
// getString extracts a string value from content map.
func getString(content map[string]any, key string) string {
if content == nil {
return ""
}
if v, ok := content[key].(string); ok {
return v
}
return ""
}
// getBool extracts a bool value from content map (handles JSON unmarshalling forms).
func getBool(content map[string]any, key string, defaultVal bool) bool {
if content == nil {
return defaultVal
}
if v, ok := content[key].(bool); ok {
return v
}
if v, ok := content[key].(string); ok {
if b, err := strconv.ParseBool(v); err == nil {
return b
}
}
return defaultVal
}
// getSlice extracts a slice of maps from content.
func getSlice(content map[string]any, key string) []map[string]any {
if content == nil {
return nil
}
if v, ok := content[key].([]any); ok {
result := make([]map[string]any, 0, len(v))
for _, item := range v {
if m, ok := item.(map[string]any); ok {
result = append(result, m)
}
}
return result
}
return nil
}
// getNested extracts a nested map from content for sub-object fields (e.g. CTA link).
func getNested(content map[string]any, key string) map[string]any {
if content == nil {
return nil
}
if v, ok := content[key].(map[string]any); ok {
return v
}
return nil
}
// linkHref returns the href value from a link object (label/href shape),
// defaulting to "#" when missing so anchors stay valid.
func linkHref(link map[string]any) string {
if href := getString(link, "href"); href != "" {
return href
}
if url := getString(link, "url"); url != "" {
return url
}
return "#"
}
// linkLabel returns the visible label for a link object.
func linkLabel(link map[string]any, fallback string) string {
if label := getString(link, "label"); label != "" {
return label
}
if text := getString(link, "text"); text != "" {
return text
}
return fallback
}