diff --git a/frontend/cs-hx.lisp b/frontend/cs-hx.lisp index 22e3643..92df45d 100644 --- a/frontend/cs-hx.lisp +++ b/frontend/cs-hx.lisp @@ -6,13 +6,20 @@ (:use :common-lisp) (:local-nicknames (:dom :scopes/web/dom) (: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)) (in-package :scopes/frontend/cs-hx) (defclass response (response:html-response) ()) -(defmethod render-content ((resp response) msg) - (dom:render (dom:dlist nil (message:data msg)))) +(defmethod response:render-content ((resp response) 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)) diff --git a/web/dom.lisp b/web/dom.lisp index a4e2532..834ba20 100644 --- a/web/dom.lisp +++ b/web/dom.lisp @@ -5,7 +5,8 @@ (:local-nicknames (:util :scopes/util) (:alx :alexandria)) (:export #:elem #:element #:void-element #:render - #:dlist)) + #:dlist + #:div #:label)) (in-package :scopes/web/dom) @@ -46,6 +47,17 @@ (defmethod put ((el void-element)) (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 (defun dlist (attrs plist)