Rustelo/resources/nickel/site/defaults.ncl

97 lines
2.5 KiB
Text
Raw Normal View History

2026-07-18 20:16:16 +01:00
# Unified Site Configuration Defaults and Helpers
#
# Provides make_route, make_content_route, make_external and shared
# priority/order constants for site.ncl.
#
# All helpers return open records so callers can merge additional fields
# with the & operator.
let contracts = import "contracts.ncl" in
{
# SEO priority constants
priorities = {
critical = 1.0,
high = 0.9,
normal = 0.8,
low = 0.5,
minimal = 0.3,
},
# Default menu order constants for consistent navigation
orders = {
home = 1,
about = 2,
services = 3,
portfolio = 4,
projects = 5,
blog = 6,
recipes = 7,
contact = 10,
external = 100,
},
# Sentinel for routes that do not appear in any navigation menu
no_menu = {
enabled = false,
visible_in = [],
},
# make_route
#
# Create a standard page route covering multiple languages.
#
# Parameters:
# component : String — Component name, e.g. "HomePage"
# path_map : Record — Language → URL, e.g. { en = "/", es = "/inicio" }
#
# Returns a Route record with priority and menu set to defaults.
# Callers add specifics with & { priority = ..., menu = { ... } }.
make_route
| String -> { _ : String } -> Dyn
= fun comp path_map =>
{
component = comp,
paths = path_map,
priority | default = 0.8,
menu | default = { enabled = false, visible_in = [] },
},
# make_content_route
#
# Like make_route but also sets content_type for dynamic content pages.
#
# Parameters:
# comp : String — Component name (typically "ContentIndex")
# ct : String — Content kind, e.g. "blog", "recipes"
# path_map : Record — Language → URL
make_content_route
| String -> String -> { _ : String } -> Dyn
= fun comp ct path_map =>
make_route comp path_map & {
content_type = ct,
},
# make_external
#
# Create an external link entry (same URL for all languages).
# Produces a Route record with component = "ExternalLink".
#
# Parameters:
# lbl : String — Display label (used as fallback for all languages)
# ext_url : String — Full external URL
make_external
| String -> String -> Dyn
= fun lbl ext_url =>
{
component = "ExternalLink",
paths = { external = ext_url },
priority = 0.3,
menu = {
enabled = true,
labels = { en = lbl, es = lbl },
visible_in | default = [],
},
},
}