summaryrefslogtreecommitdiff
path: root/src/render.lisp
diff options
context:
space:
mode:
authorcolin <colin@cicadas.surf>2023-03-05 16:36:44 -0800
committercolin <colin@cicadas.surf>2023-03-05 16:36:44 -0800
commitf7abccc38ceda7024ca375d34ed88f4fb561ef02 (patch)
tree432d6673e9e8d53b5fbc43e25a684b654f6dea1d /src/render.lisp
parent89d0d687992b41f7f0f9b0d3da19d9d587f06010 (diff)
Reorganized codebase
Diffstat (limited to 'src/render.lisp')
-rw-r--r--src/render.lisp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/render.lisp b/src/render.lisp
new file mode 100644
index 0000000..140e1ec
--- /dev/null
+++ b/src/render.lisp
@@ -0,0 +1,23 @@
+;;;; render.lisp -- render protocol and tools
+
+(in-package :dnd)
+
+(defgeneric render (view object &key)
+ (:documentation "Render OBJECT as VIEW. VIEW could be anything, but it is intended to
+be a keyword for usin in EQL method specializers."))
+
+(defmacro defrender (view (spec &rest kwargs) &body body)
+ "A helper macro for defining specializations of render."
+ (let ((viewvar (gensym)))
+ `(defmethod render ((,viewvar ,(if (eq t view) t `(eql ,view))) ,spec &key ,@kwargs)
+ ,@body)))
+
+(defmacro with-page ((&key title) &body body)
+ "A helper macro fordefining some standard page boilerplate."
+ `(with-html-string
+ (:doctype)
+ (:html
+ (:head
+ (:title ,title))
+ (:body
+ ,@body))))