Namespaces
(ns docs-gen.collect
(:require [stasis.core :as stasis]
[prone.debug :refer [debug]]))
Settings
(def settings {:supported-formats ["css" "svg"]})
Collecting Files
Collection Helpers
(defn scan-format [format]
({"css" #".*\.css"
"svg" #".*\.svg"
"org" #".*\.org"} format))
Get Assets
Gets the assets from the given directory Only takes in the supported formats.
(defn slurp-files [format dir]
{:post [#((complement empty?) %)]}
(let [format-regex (scan-format format)]
(stasis/slurp-directory dir format-regex)))
(def clean-numbering #(clojure.string/replace % #"\d+-" ""))
(defn replace-org [url replacement]
(clojure.string/replace url #".org" replacement))
(defn knit-url [& args]
(apply str (interpose "/" args)))
(defn dest-url [site file-type source-dir]
(knit-url "" site (str file-type source-dir)))
(defn page-url [site url]
(knit-url "" (str site (replace-org (clean-numbering url) ".html"))))
(defn asset-key [k] ({"css" :css "svg" :img} k))
(defn get-assets [asset site source-dir]
(let [k (asset-key asset)
asset-dir (knit-url source-dir (name k))
asset-map (slurp-files asset asset-dir)
source-urls (keys asset-map)
assets (vals asset-map)
dest-urls (map #(dest-url site (name k) %) source-urls)]
{k (zipmap dest-urls assets)}))
(defn get-org-pages [site source-dir render-fn]
(let [org-dir (knit-url source-dir "org")
org-map (slurp-files "org" org-dir)
source-urls (keys org-map)
cleaned-urls (map #(replace-org % "") (keys org-map))
org-pages (vals org-map)
dest-urls (map #(page-url site %) source-urls)]
(zipmap dest-urls (render-fn cleaned-urls org-pages))))
(defn collect-all [site source-dir render-fn]
(into {:pages (get-org-pages site source-dir render-fn)}
(map #(get-assets % site source-dir) (:supported-formats settings))))