/ src / admin / layouts.lisp
layouts.lisp
 1  (in-package :ami.admin)
 2  
 3  (defun admin-layout (title body-fn)
 4    (html
 5     (:html
 6      (:head
 7       (:title title)
 8       (:meta :charset "utf-8")
 9       (:meta :name "viewport" :content "width=device-width, initial-scale=1")
10       (:link :rel "preconnect" :href "https://fonts.googleapis.com")
11       (:link :rel "preconnect" :href "https://fonts.gstatic.com" :crossorigin "true")
12       (:link :href "https://fonts.googleapis.com/css2?family=Roboto+Condensed:ital,wght@0,100..900;1,100..900&display=swap" :rel "stylesheet")
13       (:script :src "/static/morphdom.js")
14       (:script :src "/static/htmx.min.js")
15       (:script :src "/static/hyperscript.min.js")
16       (:script :src "/static/ami.js")
17       (:script :src "https://unpkg.com/@phosphor-icons/web@2.0.3/src/index.js")
18       (:link :rel "stylesheet" :type "text/css" :blocking "render" :href "/static/ami.c.css")
19       (:link :id "base-css" :rel "stylesheet" :type "text/css" :blocking "render" :href "/static/ami.c.css")
20       (:link :rel "stylesheet" :type "text/css" :blocking "render" :href (format nil "/static/ami.c.css?t=~s" (local-time:now))))
21      (:body
22       (:div
23        :class "flex h-screen overflow-scroll"
24        (render-aside)
25        (:div :id "content" :class "flex justify-center w-[100%]"
26  	    (funcall body-fn)))))))
27  
28  
29  (defun render-aside ()
30    (let ((models (ami.modeling::model-space-models ami.modeling::*model-space*)))
31      (html
32       (:aside
33        :class "h-[100%] translate-x-0 -translate-x-full p-2.5 pt-14"
34        (:div :class "w-[100%] flex flex-col items-center"
35         (:h1 (:ruby "網" (:rt :class "text-sm" "あみ")))
36         (:h2 "HOLI"))
37        (:nav :class "p-8"
38         (:ul
39          (dolist (mdef (mapcar (lambda (mname) (gethash mname models))
40                                (alexandria:hash-table-keys models)))
41            (:li
42             :hx-push-url "true"
43             :hx-swap "outerHTML"
44             :hx-target "#content"
45             :hx-select "#content"
46             (ami.modeling::name-as-string mdef)))))))))