first working HTML rendering using div, label defined via make-elements macro

This commit is contained in:
Helmut Merz 2024-07-20 17:08:15 +02:00
parent a404e8ee88
commit f092b5bde2
2 changed files with 23 additions and 4 deletions

View file

@ -6,13 +6,20 @@
(:use :common-lisp) (:use :common-lisp)
(:local-nicknames (:dom :scopes/web/dom) (:local-nicknames (:dom :scopes/web/dom)
(:message :scopes/core/message) (:message :scopes/core/message)
(:response :scopes/web/response)) (:response :scopes/web/response)
(:util :scopes/util))
(:import-from :scopes/web/dom #:div #:label)
(:export #:render-content #:response)) (:export #:render-content #:response))
(in-package :scopes/frontend/cs-hx) (in-package :scopes/frontend/cs-hx)
(defclass response (response:html-response) ()) (defclass response (response:html-response) ())
(defmethod render-content ((resp response) msg) (defmethod response:render-content ((resp response) msg)
(dom:render (dom:dlist nil (message:data msg)))) ;(dom:render (dom:dlist nil (message:data msg))))
(dom:render
(apply #'div nil
(util:loop-plist (message:data msg) k v collect (view-field k v)))))
(defun view-field (label value)
(div nil (label nil (string-downcase label)) value))

View file

@ -5,7 +5,8 @@
(:local-nicknames (:util :scopes/util) (:local-nicknames (:util :scopes/util)
(:alx :alexandria)) (:alx :alexandria))
(:export #:elem #:element #:void-element #:render (:export #:elem #:element #:void-element #:render
#:dlist)) #:dlist
#:div #:label))
(in-package :scopes/web/dom) (in-package :scopes/web/dom)
@ -46,6 +47,17 @@
(defmethod put ((el void-element)) (defmethod put ((el void-element))
(start (tag el) (attrs el))) (start (tag el) (attrs el)))
(defmacro make-element (tag)
`(defun ,tag (attrs &rest body)
(elem ',tag attrs body)))
(defmacro make-elements (tags)
`(progn
,@(mapcar (lambda (tag) `(make-element ,tag)) tags)))
(eval-when (:compile-toplevel :load-toplevel :execute)
(make-elements (div label)))
;;;; elements with specific functionality ;;;; elements with specific functionality
(defun dlist (attrs plist) (defun dlist (attrs plist)