Phase 1 of zero-Python rendering: account service. - Auth pages (login, device, check-email) use _render_auth_page() helper calling render_to_sx() + full_page_sx() directly in routes - Newsletter toggle POST renders inline via render_to_sx() - Newsletter page helper returns data dict; defpage :data slot fetches, :content slot renders via ~account-newsletters-content defcomp - Fragment page uses (frag ...) IO primitive directly in .sx - Defpage _eval_slot now uses async_eval_slot_to_sx which expands component bodies server-side (executing IO) but serializes tags as SX - Fix pre-existing OOB ParseError: _eval_slot was producing HTML instead of s-expressions for component content slots - Fix market url_for endpoint: defpage_market_home (app-level, not blueprint) - Fix events calendar nav: wrap multiple SX parts in fragment Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
41 lines
1.3 KiB
Plaintext
41 lines
1.3 KiB
Plaintext
;; Account app — declarative page definitions
|
|
|
|
;; ---------------------------------------------------------------------------
|
|
;; Account dashboard
|
|
;; ---------------------------------------------------------------------------
|
|
|
|
(defpage account-dashboard
|
|
:path "/"
|
|
:auth :login
|
|
:layout :account
|
|
:content (~account-dashboard-content))
|
|
|
|
;; ---------------------------------------------------------------------------
|
|
;; Newsletters
|
|
;; ---------------------------------------------------------------------------
|
|
|
|
(defpage newsletters
|
|
:path "/newsletters/"
|
|
:auth :login
|
|
:layout :account
|
|
:data (newsletters-data)
|
|
:content (~account-newsletters-content
|
|
:newsletter-list newsletter-list
|
|
:account-url account-url))
|
|
|
|
;; ---------------------------------------------------------------------------
|
|
;; Fragment pages (tickets, bookings, etc. from events service)
|
|
;; ---------------------------------------------------------------------------
|
|
|
|
(defpage fragment-page
|
|
:path "/<slug>/"
|
|
:auth :login
|
|
:layout :account
|
|
:content (let* ((user (current-user))
|
|
(result (frag "events" "account-page"
|
|
:slug slug
|
|
:user-id (str (get user "id")))))
|
|
(if (or (nil? result) (empty? result))
|
|
(abort 404)
|
|
result)))
|