{# ================================================================================ TEMPLATE VARIABLES ================================================================================ Bengal provides: page, site, config, params (page.metadata alias), meta, section Cache expensive function calls once per render. Page properties like title, _path, kind, tags are always defined - no defensive checks needed. ================================================================================ #} {# Template-wide variables using {% let %} for explicit scope NOTE: `page` can be None in some render contexts (e.g., error shells, test fixtures). Kida 0.7.0 strict_undefined requires guarded access. #} {% let params = params ?? {} %} {% let _page_title = page?.title ?? none %} {% let _page_url = page?._path ?? none %} {# Navigation - cache function calls #} {% let _current_lang = current_lang() %} {% let _direction = direction() %} {% let _site_title = site.title %} {# Normalized config objects (pre-processed by Site with defaults applied) #} {% let _build_badge = site.build_badge %} {% let _doc_app = site.document_application %} {% let _link_previews = site.link_previews %} {% let _per_page_json = 'json' in ((config?.output_formats ?? {})?.per_page ?? []) %} {% let _per_page_md = 'markdown' in ((config?.output_formats ?? {})?.per_page ?? []) %} {# Derived values #} {% let _main_menu = get_menu_lang('main', _current_lang) %} {% let _footer_menu = get_menu_lang('footer', _current_lang) %} {% let _doc_app_nav = _doc_app?.navigation ?? {} %} {% let _view_transitions = (_doc_app?.enabled ?? false) and (_doc_app_nav?.view_transitions ?? false) %} {% let _transition_style = _doc_app_nav?.transition_style ?? none %} {% let _llms_txt_url = '/llms.txt' | absolute_url %} {# Auto navigation if main menu is empty #} {% let _auto_nav = get_auto_nav() if _main_menu | length == 0 else [] %} {# ============================================================================= HELPER: Render a menu item (desktop/mobile) ============================================================================= #} {% def render_menu_item(item, is_mobile=false) %} {% let _children = item?.children ?? [] %} {% let _item_href = item?.href ?? '' %} {% let _item_name = item?.name ?? '' %} {% let has_children = _children | length > 0 %} {% let is_active = (item?.active ?? false) or (_page_url == _item_href) %} {% let is_trail = item?.active_trail ?? false %}
For a complete page index, fetch {{ _llms_txt_url }}.
{# Header #} {% let _header_sticky = theme.header_sticky ?? true %} {% let _header_nav_position = theme.header_nav_position ?? 'left' %}