Files
tibi-svelte-starter/api/collections/navigation.yml
T
LeanAgent 45a021fb53
deploy to production / deploy (push) Successful in 43s
chore: YAML-Schemas in Dateiköpfe, tibi-types auf 4c55f82
- yaml-language-server-Schema direkt in jeder api-YAML statt
  .vscode/yaml.schemas-Mapping (exakter pro Datei, kein Glob-Rätsel)
- erweiterte meta.agent-Doku in den Collections
- tibi-types-Submodul auf 4c55f82 (meta.agent- + meta.query-Schemas)
2026-10-12 16:15:16 +00:00

179 lines
5.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# yaml-language-server: $schema=../../tibi-types/schemas/config/collection.schema.json
########################################################################
# Navigation collection — header and footer navigation entries
########################################################################
name: navigation
uploadPath: ../media/navigation
audit:
enabled: true
meta:
label: { de: "Navigation", en: "Navigation" }
muiIcon: menu
group: content
imageUrl: "https://images.unsplash.com/photo-1452423668729-43a98052d3ee?auto=format&fit=crop&q=80&w=800"
viewHint:
navigation:
nodesField: elements
preview:
label: name
secondary:
eval: "$this.external && $this.externalUrl ? $this.externalUrl : ($this._lookup?.page ? $this._lookup.page.name + ' (' + $this._lookup.page.path + ')' : '')"
select: [external, externalUrl, page]
declaredTrees:
- label: { de: "Header DE", en: "Header DE" }
singleton:
type: header
language: de
maxLevel: 2
- label: { de: "Header EN", en: "Header EN" }
singleton:
type: header
language: en
maxLevel: 2
- label: { de: "Footer DE", en: "Footer DE" }
singleton:
type: footer
language: de
maxLevel: 1
- label: { de: "Footer EN", en: "Footer EN" }
singleton:
type: footer
language: en
maxLevel: 1
preview:
label: type
secondary: language
table:
- type
- language
sidebar:
- group: settings
label: { de: "Einstellungen", en: "Settings" }
agent:
purpose: "Header/footer trees per language, rendered by App.svelte from elements."
instructions: "Singletons: type header/footer x language de/en (unique type+language). elements: {name, page->content.id} internal, {name, external:true, externalUrl} external, optional hash without #. Always request lookup elements.page:content; href = localizedPath(_lookup.page.path) + hash. GOTCHA 2026-10-05: filter_public.js forces active:true on anonymous reads although this schema declares no active field – without stored active:true the header/footer query returns count 0 publicly (PAT reads still succeed). Always store active:true on every navigation doc."
fieldHints:
type: "header or footer"
language: "de or en"
examples: [{ language: "de", type: "header", elements: [{ name: "Start", page: "<content.id>" }] }]
hints: ["page holds content.id, resolve via _lookup.page.path", "never hardcode /de prefix in DB", "missing active:true => public nav empty + SSR count 0 (verified incident 2026-10-05)"]
hooks:
get:
read:
type: javascript
file: hooks/filter_public.js
post:
return:
type: javascript
file: hooks/clear_cache.js
put:
return:
type: javascript
file: hooks/clear_cache.js
delete:
return:
type: javascript
file: hooks/clear_cache.js
permissions:
public:
methods:
get: true
user:
methods:
get: true
post: true
put: true
delete: true
indexes:
- name: type_language
key:
- type
- language
unique: true
background: true
search:
- name: default
mode: regex
fields: [type, "elements.name", "elements.page"]
fields:
- name: language
type: string
validator:
in: ["de", "en"]
required: true
meta:
label: { de: "Sprache", en: "Language" }
position: sidebar:settings
widget: select
choices:
- id: de
name: { de: "Deutsch", en: "German" }
- id: en
name: { de: "Englisch", en: "English" }
- name: type
type: string
validator:
in: ["header", "footer"]
required: true
meta:
label: { de: "Typ", en: "Type" }
helperText: { de: "header oder footer", en: "header or footer" }
position: sidebar:settings
widget: select
choices:
- id: header
name: { de: "Header", en: "Header" }
- id: footer
name: { de: "Footer", en: "Footer" }
- name: elements
type: object[]
meta:
label: { de: "Elemente", en: "Elements" }
preview: name
subFields:
- name: name
type: string
validator:
required: true
maxLength: 100
meta:
label: { de: "Bezeichnung", en: "Label" }
- name: page
type: string
meta:
label: { de: "Seite", en: "Page" }
widget: foreignKey
foreign:
collection: content
id: id
- name: external
type: boolean
meta:
label: { de: "Externer Link", en: "External Link" }
- name: externalUrl
type: string
validator:
maxLength: 1024
meta:
label: { de: "Externe URL", en: "External URL" }
- name: hash
type: string
validator:
pattern: ^[a-zA-Z0-9_-]+$
meta:
label: { de: "Anker", en: "Anchor" }
- name: elements
type: object[]
meta:
label: { de: "Unterpunkte", en: "Child Items" }
- name: _testdata
type: boolean
meta:
hide: true