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>
23 lines
966 B
Plaintext
23 lines
966 B
Plaintext
;; Market container-nav fragment handler
|
|
;; returns: sx
|
|
;;
|
|
;; Renders marketplace link nav items for blog post pages.
|
|
|
|
(defhandler container-nav (&key container_type container_id post_slug)
|
|
(let ((ct (or container_type "page"))
|
|
(cid (parse-int (or container_id "0")))
|
|
(slug (or post_slug ""))
|
|
(markets (service "market" "marketplaces-for-container"
|
|
:container-type ct :container-id cid)))
|
|
(when (not (empty? markets))
|
|
(let ((styles (or (jinja-global "styles") (dict)))
|
|
(nav-class (or (get styles "nav_button") ""))
|
|
(sel-colours (or (jinja-global "select_colours") "")))
|
|
(<> (map (fn (m)
|
|
(let ((href (app-url "market" (str "/" slug "/" (get m "slug") "/"))))
|
|
(~market-link-nav
|
|
:href href
|
|
:name (get m "name")
|
|
:nav-class nav-class
|
|
:select-colours sel-colours))) markets))))))
|