SxExpr is now a str subclass so it works everywhere a plain string does (join, isinstance, f-strings) while serialize() still emits it unquoted. sx_call() and all internal render functions (_render_to_sx, async_eval_to_sx, etc.) return SxExpr, eliminating the "forgot to wrap" bug class that caused the sx_content leak and list serialization bugs. - Phase 0: SxExpr(str) with .source property, __add__/__radd__ - Phase 1: sx_call returns SxExpr (drop-in, all 200+ sites unchanged) - Phase 2: async_eval_to_sx, async_eval_slot_to_sx, _render_to_sx, mobile_menu_sx return SxExpr; remove isinstance(str) workaround - Phase 3: Remove ~150 redundant SxExpr() wrappings across 45 files - Phase 4: serialize() docstring, handler return docs, ;; returns: sx Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
21 lines
739 B
Plaintext
21 lines
739 B
Plaintext
;; Events account-nav-item fragment handler
|
|
;; returns: sx
|
|
;;
|
|
;; Renders tickets + bookings links for the account dashboard nav.
|
|
|
|
(defhandler account-nav-item (&key)
|
|
(let ((styles (or (jinja-global "styles") (dict)))
|
|
(nav-class (or (get styles "nav_button") ""))
|
|
(hx-select "#main-panel, #search-mobile, #search-count-mobile, #search-desktop, #search-count-desktop, #menu-items-nav-wrapper"))
|
|
(<>
|
|
(~nav-group-link
|
|
:href (app-url "account" "/tickets/")
|
|
:hx-select hx-select
|
|
:nav-class nav-class
|
|
:label "tickets")
|
|
(~nav-group-link
|
|
:href (app-url "account" "/bookings/")
|
|
:hx-select hx-select
|
|
:nav-class nav-class
|
|
:label "bookings"))))
|