first working HTML rendering using div, label defined via make-elements macro
This commit is contained in:
parent
a404e8ee88
commit
f092b5bde2
2 changed files with 23 additions and 4 deletions
|
@ -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))
|
||||||
|
|
14
web/dom.lisp
14
web/dom.lisp
|
@ -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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue