All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 5m35s
- Server sends sexp source text, client (sexp.js) renders everything - SexpExpr marker class for nested sexp composition in serialize() - sexp_page() HTML shell with data-mount="body" for full page loads - sexp_response() returns text/sexp for OOB/partial responses - ~app-body layout component replaces ~app-layout (no raw!) - ~rich-text is the only component using raw! (for CMS HTML content) - Fragment endpoints return text/sexp, auto-wrapped in SexpExpr - All _*_html() helpers converted to _*_sexp() returning sexp source - Head auto-hoist: sexp.js moves meta/title/link/script[ld+json] from rendered body to document.head automatically - Unknown components render warning box instead of crashing page - Component kwargs preserve AST for lazy rendering (fixes <> in kwargs) - Fix unterminated paren in events/sexp/tickets.sexpr Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
59 lines
1.5 KiB
HTML
59 lines
1.5 KiB
HTML
|
|
|
|
{% macro link(url, select, select_colours='', highlight=True, _class='', aclass='') %}
|
|
{% set href=url|host%}
|
|
<div class="relative nav-group {{_class}}">
|
|
<a
|
|
href="{{ href }}"
|
|
sx-get="{{ href }}"
|
|
sx-target="#main-panel"
|
|
sx-select="{{select}}"
|
|
sx-swap="outerHTML"
|
|
sx-push-url="true"
|
|
aria-selected="{{ 'true' if (request.path|host).startswith(href) else 'false' }}"
|
|
{% if aclass %}
|
|
class="{{aclass}}"
|
|
{% elif select_colours %}
|
|
class="whitespace-normal flex gap-2 px-3 py-2 rounded
|
|
text-center break-words leading-snug
|
|
bg-stone-200 text-black
|
|
{{select_colours if highlight else ''}}
|
|
"
|
|
{% else %}
|
|
class="w-full whitespace-normal flex items-center gap-2 font-bold text-2xl px-3 py-2"
|
|
{% endif %}
|
|
>
|
|
{{ caller() }}
|
|
</a>
|
|
</div>
|
|
{% endmacro %}
|
|
|
|
|
|
{% macro menu_row(id=False, oob=False) %}
|
|
<div
|
|
{% if id %}
|
|
id="{{id}}"
|
|
{% endif %}
|
|
{% if oob %}
|
|
sx-swap-oob="outerHTML"
|
|
{% endif %}
|
|
class="flex flex-col items-center md:flex-row justify-center md:justify-between w-full p-1 bg-{{menu_colour}}-{{(500-(level()*100))|string}}"
|
|
>
|
|
{{ caller() }}
|
|
</div>
|
|
{{level_up()}}
|
|
{% endmacro %}
|
|
|
|
{% macro desktop_nav() %}
|
|
<nav class="hidden md:flex gap-4 text-sm ml-2 justify-end items-center flex-0">
|
|
{{ caller() }}
|
|
</nav>
|
|
{% endmacro %}
|
|
|
|
{% macro admin() %}
|
|
<i class="fa fa-cog" aria-hidden="true"></i>
|
|
<div>
|
|
settings
|
|
</div>
|
|
|
|
{% endmacro %} |