feat: html 캐시
All checks were successful
build / build (push) Successful in 4s

This commit was merged in pull request #27.
This commit is contained in:
2026-03-24 17:49:50 -06:00
parent e02b77e1e4
commit 9cc0def4d5
21 changed files with 247 additions and 100 deletions

View File

@@ -45,29 +45,35 @@
(and (fs/exists? x) x))
(fs/split-paths (System/getenv "XDG_DATA_DIRS"))))
(defn make-read-config [spec]
(fn [& files]
(let [r (->> files
(filter identity)
(map aero/read-config)
(apply merge))
conformed (s/conform spec r)]
(if-not (s/invalid? conformed)
conformed
(throw (IllegalArgumentException.
"bad config"
(ex-info "couldn't conform"
(s/explain-data spec r))))))))
(defmethod aero/reader 'file
[{:keys [source]} tag value]
"Aero tag to reference a `java.io.File` relative to the config
file."
(-> (aero/relative-resolver source value)
fs/file))
(def read-config (make-read-config ::d/config))
(defn read-config [spec files & {:as opts}]
(let [r (->> files
(filter identity)
(map #(aero/read-config % opts))
(apply merge))
conformed (s/conform spec r)]
(if-not (s/invalid? conformed)
conformed
(throw (ex-info "Failed to conform config"
(s/explain-data spec r))))))
(def default
(read-config
;; Default config.
(defn load-config! [var spec files & {:as opts}]
(alter-var-root var (constantly (read-config spec files opts))))
(def sources
[;; Default config.
(io/resource "net/deertopia/doerg/default-config.edn")
;; Defaults set at build time, if any.
(io/resource "net/deertopia/doerg/extra-config.edn")
;; Config set at runtime.
(System/getenv "DOERG_CONFIG")))
(System/getenv "DOERG_CONFIG")])
(def default (read-config ::d/config sources))
(def ^:dynamic *cfg* default)

View File

@@ -27,7 +27,7 @@
[:meta {:charset "utf-8"}])
(defn external-stylesheet [href]
[:link {:rel "stylesheet" :type "text/css" :href href}])
[:link {:rel "stylesheet" :type "text/css" :href (str "/resource/" href)}])
(def ibm-plex
(concat

View File

@@ -179,7 +179,7 @@
(defn- render-pprint
(defn render-pprint
"Render the argument inline as `clojure.pprint/pprint` output."
[x & {:keys [text]
:or {text "debug!"}}]

View File

@@ -31,17 +31,17 @@
(defn render-html [& {:keys [src dest]
:or {src some-org-file
dest "/tmp/doerg-test"}}]
(fs/create-dirs dest)
(force-create-sym-link (fs/file dest "ibm-plex-web")
(-> cfg/*cfg* ::doerg/ibm-plex-web))
(force-create-sym-link (fs/file dest "deerstar.css")
(io/resource "net/deertopia/doerg/deerstar.css"))
(force-create-sym-link (fs/file dest "tuftesque.css")
(io/resource "net/deertopia/doerg/tuftesque.css"))
(force-create-sym-link (fs/file dest "Temml-Plex.css")
(io/resource "net/deertopia/doerg/Temml-Plex.css"))
(fs/delete-if-exists (fs/file dest "index.html"))
(->> src render/to-html str (spit (fs/file dest "index.html"))))
(let [resource-dir (fs/file dest "resource")]
(fs/create-dirs dest)
(fs/create-dirs resource-dir)
(force-create-sym-link (fs/file resource-dir "ibm-plex-web")
(-> cfg/*cfg* ::doerg/ibm-plex-web))
(doseq [x #{"Temml-Plex.css" "tuftesque.css" "deerstar.css"}]
(force-create-sym-link
(fs/file resource-dir x)
(io/resource (str "net/deertopia/doerg/" x))))
(fs/delete-if-exists (fs/file dest "index.html"))
(->> src render/to-html str (spit (fs/file dest "index.html")))))
(defn render-edn [& {:keys [src dest]
:or {src some-org-file