From cf691411d76f8cc1466da4006f784d0ede2af6e7 Mon Sep 17 00:00:00 2001
From: paku <paku@skyizwhite.dev>
Date: Fri, 19 Apr 2024 13:04:30 +0900
Subject: [PATCH] Improve view

---
 src/components/.keep                          |  0
 .../document.lisp}                            | 21 ++++---------------
 src/components/layout.lisp                    | 13 ++++++++++++
 src/routes/about.lisp                         |  2 +-
 src/routes/index.lisp                         |  2 +-
 src/routes/not-found.lisp                     |  2 +-
 src/view.lisp                                 | 19 +++++++++++++++++
 7 files changed, 39 insertions(+), 20 deletions(-)
 delete mode 100644 src/components/.keep
 rename src/{view/renderer.lisp => components/document.lisp} (62%)
 create mode 100644 src/components/layout.lisp
 create mode 100644 src/view.lisp

diff --git a/src/components/.keep b/src/components/.keep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/view/renderer.lisp b/src/components/document.lisp
similarity index 62%
rename from src/view/renderer.lisp
rename to src/components/document.lisp
index 0ffb2d6..f99b614 100644
--- a/src/view/renderer.lisp
+++ b/src/components/document.lisp
@@ -1,10 +1,8 @@
-(defpackage #:hp/view/renderer
+(defpackage #:hp/components/document
   (:use #:cl)
-  (:local-nicknames (#:jg #:jingle))
   (:local-nicknames (#:pi #:piccolo))
-  (:export #:render
-           #:partial-render))
-(in-package #:hp/view/renderer)
+  (:export #:document))
+(in-package #:hp/components/document)
 
 (pi:define-element document (title description)
   (pi:h
@@ -24,15 +22,4 @@
         (meta
           :name "description"
           :content (or description "pakuの個人サイト")))
-      (body :hx-ext "head-support"
-        (main pi:children)))))
-
-(defun render (page &key status metadata)
-  (jg:with-html-response
-    (and status (jg:set-response-status status))
-    (pi:elem-str (document metadata page))))
-
-(defun partial-render (component &key status)
-  (jg:with-html-response
-    (and status (jg:set-response-status status))
-    (pi:elem-str component)))
+      pi:children)))
diff --git a/src/components/layout.lisp b/src/components/layout.lisp
new file mode 100644
index 0000000..15f22ed
--- /dev/null
+++ b/src/components/layout.lisp
@@ -0,0 +1,13 @@
+(defpackage #:hp/components/layout
+  (:use #:cl)
+  (:local-nicknames (#:pi #:piccolo))
+  (:export #:layout))
+(in-package #:hp/components/layout)
+
+(pi:define-element layout ()
+  (pi:h
+    (body :hx-ext "head-support"
+      ; header
+      (main pi:children)
+      ; footer
+      )))
diff --git a/src/routes/about.lisp b/src/routes/about.lisp
index 4bbbe77..18a5df8 100644
--- a/src/routes/about.lisp
+++ b/src/routes/about.lisp
@@ -1,7 +1,7 @@
 (defpackage #:hp/routes/about
   (:use #:cl)
   (:local-nicknames (#:pi #:piccolo))
-  (:local-nicknames (#:view #:hp/view/*))
+  (:local-nicknames (#:view #:hp/view))
   (:export #:handle-get))
 (in-package #:hp/routes/about)
 
diff --git a/src/routes/index.lisp b/src/routes/index.lisp
index 857142f..69bd28d 100644
--- a/src/routes/index.lisp
+++ b/src/routes/index.lisp
@@ -1,7 +1,7 @@
 (defpackage #:hp/routes/index
   (:use #:cl)
   (:local-nicknames (#:pi #:piccolo))
-  (:local-nicknames (#:view #:hp/view/*))
+  (:local-nicknames (#:view #:hp/view))
   (:export #:handle-get))
 (in-package #:hp/routes/index)
 
diff --git a/src/routes/not-found.lisp b/src/routes/not-found.lisp
index f6c7f31..3078a05 100644
--- a/src/routes/not-found.lisp
+++ b/src/routes/not-found.lisp
@@ -2,7 +2,7 @@
   (:use #:cl)
   (:local-nicknames (#:jg #:jingle))
   (:local-nicknames (#:pi #:piccolo))
-  (:local-nicknames (#:view #:hp/view/*))
+  (:local-nicknames (#:view #:hp/view))
   (:export #:handle-not-found))
 (in-package #:hp/routes/not-found)
 
diff --git a/src/view.lisp b/src/view.lisp
new file mode 100644
index 0000000..48d13c8
--- /dev/null
+++ b/src/view.lisp
@@ -0,0 +1,19 @@
+(defpackage #:hp/view
+  (:use #:cl)
+  (:local-nicknames (#:jg #:jingle))
+  (:local-nicknames (#:pi #:piccolo))
+  (:local-nicknames (#:cmp #:hp/components/*))
+  (:export #:render
+           #:partial-render))
+(in-package #:hp/view)
+
+(defun render (page &key status metadata)
+  (jg:with-html-response
+    (and status (jg:set-response-status status))
+    (pi:elem-str (cmp:document metadata
+                   (cmp:layout page)))))
+
+(defun partial-render (component &key status)
+  (jg:with-html-response
+    (and status (jg:set-response-status status))
+    (pi:elem-str component)))