start with rendering forms

This commit is contained in:
Helmut Merz 2025-06-23 10:15:57 +02:00
parent e7eb71a840
commit 37b39c596f
4 changed files with 18 additions and 13 deletions

View file

@ -9,7 +9,8 @@
(:response :scopes/web/response) (:response :scopes/web/response)
(:shape :scopes/shape) (:shape :scopes/shape)
(:util :scopes/util)) (:util :scopes/util))
(:import-from :scopes/web/dom #:div #:label) (:import-from :scopes/web/dom
#:button #:div #:input #:label)
(:export #:render-content #:response)) (:export #:render-content #:response))
(in-package :scopes/frontend/cs-hx) (in-package :scopes/frontend/cs-hx)
@ -26,16 +27,21 @@
(defun view (resp msg) (defun view (resp msg)
(div nil (util:loop-plist (shape:data msg) k v collect (view-field k v)))) (div nil (util:loop-plist (shape:data msg) k v collect (view-field k v))))
(defun form (resp msg)
(let* ((data (shape:data msg))
(fields (getf data :fields)))
(mapcar (lambda (f) (form-field f)) fields)))
(defun view-field (label value) (defun view-field (label value)
(div nil (label nil label) ": " value)) (div nil (label nil label) ": " value))
(defun form (resp msg)
(let* ((data (shape:data msg))
(fields (getf data :fields)))
(dom:form (list :name "login" :hx-target "#cs-debug" :hx-post "/hx/auth/login")
(mapcar (lambda (f) (form-field f)) fields)
(button '(:class "btn btn-primary") "Login")
)))
(defun form-field (name) (defun form-field (name)
(div nil (label nil name) ": " name)) (div nil
(label '(:class "form-label") name)
(input (list :type "text" :name name :class "form-control"))))
(setf (gethash :view *templates*) #'view) (setf (gethash :view *templates*) #'view)
(setf (gethash :form *templates*) #'form) (setf (gethash :form *templates*) #'form)

View file

@ -47,7 +47,7 @@
(setf inp "<a href=\"https://example.com\">Link</a>") (setf inp "<a href=\"https://example.com\">Link</a>")
(setf parsed (dom:parse inp)) (setf parsed (dom:parse inp))
(== parsed '(((:a :href "https://example.com") "Link"))) (== parsed '(((:a :href "https://example.com") "Link")))
;(== (dom:from-list parsed) ((dom:a '(:href "https://example.com") "Link"))) ;(== (car (dom:from-list parsed)) (dom:a '(:href "https://example.com") "Link"))
(== (dom:render (dom:from-list parsed)) inp) (== (dom:render (dom:from-list parsed)) inp)
(== (dom:to-list (dom:a '(:href "https://example.com") "Link")) (car parsed)) (== (dom:to-list (dom:a '(:href "https://example.com") "Link")) (car parsed))
)) ))

View file

@ -34,10 +34,9 @@
(make-instance 'mailbox)) (make-instance 'mailbox))
(defun rcv (mb) (defun rcv (mb)
(handler-case (handler-case (lpq:pop-queue (queue mb))
(lpq:pop-queue (queue mb))
(condition (cnd) (condition (cnd)
(util:lg :info "condition on pop-queue" cnd) (util:lg :info "rcv -> lpq:pop-queue" cnd)
+quit-message+))) +quit-message+)))
(defun try-rcv (mb) (defun try-rcv (mb)

View file

@ -8,7 +8,7 @@
(:export #:xml-element (:export #:xml-element
#:elem #:element #:void-element #:render #:elem #:element #:void-element #:render
#:dlist #:dlist
#:a #:dd #:div #:dl #:dt #:label #:a #:button #:dd #:div #:dl #:dt #:form #:label
#:br #:input #:br #:input
#:parse #:from-list #:to-list)) #:parse #:from-list #:to-list))
@ -81,7 +81,7 @@
tags))) tags)))
(eval-when (:compile-toplevel :load-toplevel :execute) (eval-when (:compile-toplevel :load-toplevel :execute)
(make-elements (a dd div dl dt label))) (make-elements (a button dd div dl dt form label)))
(eval-when (:compile-toplevel :load-toplevel :execute) (eval-when (:compile-toplevel :load-toplevel :execute)
(make-elements (br input) void-element)) (make-elements (br input) void-element))