diff --git a/scopes-web.asd b/scopes-web.asd index e362b74..74b09ce 100644 --- a/scopes-web.asd +++ b/scopes-web.asd @@ -10,7 +10,8 @@ :lack :lack-component :lack-app-file :quri :scopes-core) :components ((:file "web/client") - (:file "web/response") + (:file "web/dom") + (:file "web/response" :depends-on ("web/dom")) (:file "web/server" :depends-on ("web/response"))) :long-description "scopes/web: Web server and web/API/REST client." :in-order-to ((test-op (test-op "scopes-web/test")))) diff --git a/web/dom.lisp b/web/dom.lisp new file mode 100644 index 0000000..fdc2158 --- /dev/null +++ b/web/dom.lisp @@ -0,0 +1,32 @@ +;;;; cl-scopes/web/dom - "Data Output Model" = simple and dedicated HTML generator + +(defpackage :scopes/web/dom + (:use :common-lisp) + (:local-nicknames (:alx :alexandria)) + (:export #:render #:dl)) + +(in-package :scopes/web/dom) + +(defvar *output* nil) + +(defmacro render (&body body) + `(let ((*output* (make-string-output-stream))) + ,@body + (get-output-stream-string *output*))) + +(defun dl (plist) + (write-string "