-
Notifications
You must be signed in to change notification settings - Fork 1
/
render.cljs
35 lines (30 loc) · 1.35 KB
/
render.cljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
(ns ssr-stages.boot
(:require
[respo.alias :refer [html head title script style meta' div link body]]
[respo.render.html :refer [make-html make-string]]
[debounced-input-demo.comp.container :refer [comp-container]]
[planck.core :refer [spit]]))
(defn use-text [x] {:attrs {:innerHTML x}})
(defn html-dsl [data html-content ssr-stages]
(make-html
(html {}
(head {}
(title (use-text (str "Debounced input")))
(link {:attrs {:rel "icon" :type "image/png" :href "http://logo.respo.site/respo.png"}})
(link {:attrs {:rel "stylesheet" :href "style.css"}})
(meta' {:attrs {:charset "utf-8"}})
(meta' {:attrs {:name "viewport" :content "width=device-width, initial-scale=1"}})
(meta' {:attrs {:id "ssr-stages" :content (pr-str ssr-stages)}})
(style (use-text "body {margin: 0;}"))
(style (use-text "body * {box-sizing: border-box;}"))
(script {:attrs {:id "config" :type "text/edn" :innerHTML (pr-str data)}}))
(body {}
(div {:attrs {:id "app" :innerHTML html-content}})
(script {:attrs {:src "main.js"}})))))
(defn generate-html [ssr-stages]
(let [ tree (comp-container {} ssr-stages)
html-content (make-string tree)]
(html-dsl {:build? true} html-content ssr-stages)))
(defn -main []
(spit "target/index.html" (generate-html #{:shell})))
(-main)