142 lines
4 KiB
Text
142 lines
4 KiB
Text
# Route Configuration Defaults and Helpers
|
|
#
|
|
# Provides shared default values and helper functions for route creation.
|
|
# Reduces duplication by providing common patterns.
|
|
|
|
let contracts = import "contracts.ncl" in
|
|
|
|
{
|
|
# Base route with common defaults
|
|
# Use this as foundation via merge operator (&)
|
|
# Note: | default = allows overriding via merge
|
|
base_route = {
|
|
enabled | default = true,
|
|
generate_boilerplate_only | default = false,
|
|
replace_existing_boilerplate | default = false,
|
|
show_in_sitemap | default = true,
|
|
menu_group | default = "main",
|
|
priority | default = 0.8,
|
|
is_external | default = false,
|
|
component_dynamic | default = false,
|
|
content_type_param | default = false,
|
|
keywords | default = [],
|
|
lang_prefixes | default = [],
|
|
menu_order | default = 999,
|
|
},
|
|
|
|
# Helper function: Create a route with minimal required fields
|
|
#
|
|
# Usage:
|
|
# make_route "Home" "/" "en"
|
|
# & { priority = 1.0, menu_icon = "home", ... }
|
|
#
|
|
# Parameters:
|
|
# comp_name: Component name (e.g., "Home", "About")
|
|
# url_path: URL path (e.g., "/", "/about")
|
|
# lang: Language code (e.g., "en", "es")
|
|
#
|
|
# Returns: Route record with defaults + generated keys
|
|
make_route
|
|
| String -> String -> String -> Dyn
|
|
= fun comp_name url_path lang =>
|
|
base_route & {
|
|
component = comp_name,
|
|
path = url_path,
|
|
language = lang,
|
|
# Auto-generate title/description keys from component name (| default = allows override)
|
|
title_key | default = "%{std.string.lowercase comp_name}-page-title",
|
|
description_key | default = "%{std.string.lowercase comp_name}-page-description",
|
|
},
|
|
|
|
# Helper function: Create a content route (blog, portfolio, etc.)
|
|
#
|
|
# Usage:
|
|
# make_content_route "ContentIndex" "/blog" "en" "blog"
|
|
# & { menu_icon = "book", ... }
|
|
#
|
|
# Parameters:
|
|
# comp_name: Component name
|
|
# url_path: URL path
|
|
# lang: Language code
|
|
# ctype: Content type (e.g., "blog", "portfolio")
|
|
#
|
|
# Returns: Route record with content-specific settings
|
|
make_content_route
|
|
| String -> String -> String -> String -> Dyn
|
|
= fun comp_name url_path lang ctype =>
|
|
make_route comp_name url_path lang & {
|
|
component_dynamic = true,
|
|
content_type_param = true,
|
|
props = {
|
|
content_type = ctype,
|
|
use_categories = true,
|
|
use_feature = true,
|
|
},
|
|
},
|
|
|
|
# Helper function: Create an admin route (protected)
|
|
#
|
|
# Usage:
|
|
# make_admin_route "AdminDashboard" "/admin" "en"
|
|
# & { menu_icon = "shield", ... }
|
|
#
|
|
# Parameters:
|
|
# comp_name: Component name
|
|
# url_path: URL path
|
|
# lang: Language code
|
|
#
|
|
# Returns: Route record with admin-specific settings
|
|
make_admin_route
|
|
| String -> String -> String -> Dyn
|
|
= fun comp_name url_path lang =>
|
|
make_route comp_name url_path lang & {
|
|
menu_group = "admin",
|
|
show_in_sitemap = false,
|
|
priority = 0.3,
|
|
},
|
|
|
|
# Helper function: Create an external link route
|
|
#
|
|
# Usage:
|
|
# make_external_link "GitHub" "https://github.com" "en"
|
|
# & { menu_icon = "external", ... }
|
|
#
|
|
# Parameters:
|
|
# lbl: Display label
|
|
# ext_url: External URL
|
|
# lang: Language code
|
|
#
|
|
# Returns: Route record for external links
|
|
make_external_link
|
|
| String -> String -> String -> Dyn
|
|
= fun lbl ext_url lang =>
|
|
base_route & {
|
|
component = "ExternalLink",
|
|
path = ext_url,
|
|
language = lang,
|
|
title_key = lbl,
|
|
description_key = lbl,
|
|
is_external = true,
|
|
show_in_sitemap = false,
|
|
},
|
|
|
|
# Common menu orders for consistency
|
|
menu_orders = {
|
|
home = 1,
|
|
about = 2,
|
|
services = 3,
|
|
portfolio = 4,
|
|
blog = 5,
|
|
contact = 10,
|
|
admin = 100,
|
|
},
|
|
|
|
# Common priorities for SEO
|
|
priorities = {
|
|
critical = 1.0, # Home page
|
|
high = 0.9, # Main pages (About, Services)
|
|
normal = 0.8, # Content pages (Blog posts)
|
|
low = 0.5, # Archive, Tags
|
|
minimal = 0.3, # Admin, Login
|
|
},
|
|
}
|