From 12036876c72c25002204abb2bf07dff3fcdad38f Mon Sep 17 00:00:00 2001 From: Anton Podviaznikov Date: Thu, 25 Jun 2015 01:14:28 -0700 Subject: [PATCH] batteries for templates --- build.boot | 5 +++-- src/io/perun.clj | 49 ++++++++++++++++++++++++++++++++++-------------- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/build.boot b/build.boot index 7c256b49..93d0e87f 100644 --- a/build.boot +++ b/build.boot @@ -8,6 +8,7 @@ [circleci/clj-yaml "0.5.3" :scope "test"] [time-to-read "0.1.0" :scope "test"] [sitemap "0.2.4" :scope "test"] + [selmer "0.8.2" :scope "test"] [clj-rss "0.1.9" :scope "test"]]) (require '[adzerk.bootlaces :refer :all]) @@ -47,8 +48,8 @@ (ttr) (slug) (permalink) - (render :renderer renderer) - (collection :renderer index-renderer :page "index.html" :filter identity) + (render :template-engine :selmer :template-name "post.html") + (collection :template-engine :selmer :template-name "index.html" :page "index.html" :filter identity) (sitemap :filename "sitemap.xml") (rss :title "Hashobject" :description "Hashobject blog" :link "http://blog.hashobject.com") (notify))) diff --git a/src/io/perun.clj b/src/io/perun.clj index 8d18be7f..5a994ca9 100644 --- a/src/io/perun.clj +++ b/src/io/perun.clj @@ -9,10 +9,14 @@ (def ^:private global-deps '[]) -(defn- create-pod [deps] +(defn- create-pod-env [deps] (-> (boot/get-env) (update-in [:dependencies] into global-deps) - (update-in [:dependencies] into deps) + (update-in [:dependencies] into deps))) + +(defn- create-pod [deps] + (-> deps + create-pod-env pod/make-pod future)) @@ -176,6 +180,9 @@ ~options)) (commit fileset tmp))))) +(def ^:private render-deps + '[[selmer "0.8.2"]]) + (def ^:private +render-defaults+ {:out-dir "public"}) @@ -201,16 +208,21 @@ (deftask render "Render pages" - [o out-dir OUTDIR str "The output directory" - r renderer RENDERER sym "Page renderer. Must be fully qualified symbol which resolves to a function."] - (let [pods (wrap-pool (pod/pod-pool (boot/get-env))) + [o out-dir OUTDIR str "The output directory" + r renderer RENDERER sym "Page renderer. Must be fully qualified symbol which resolves to a function." + e template-engine ENGINE kw "Template engine used for rendering" + n template-name NAME str "Template filename"] + (let [pods (wrap-pool (pod/pod-pool (create-pod-env render-deps))) tmp (boot/tmp-dir!) options (merge +render-defaults+ *opts*)] (boot/with-pre-wrap fileset (let [pod (pods fileset) files (vals (get-perun-meta fileset))] (doseq [file files] - (let [html (render-in-pod pod renderer file) + (let [html (if (nil? renderer) + (pod/with-call-in pod + (io.perun.render-template/render ~template-engine ~template-name ~file)) + (render-in-pod pod renderer file)) page-filepath (perun/create-filepath (:out-dir options) (or (perun/url-to-path (:permalink file)) @@ -219,6 +231,9 @@ (u/info "Render all pages\n") (commit fileset tmp))))) +(def ^:private collection-deps + '[[selmer "0.8.2"]]) + (def ^:private +collection-defaults+ {:out-dir "public" :filterer identity @@ -227,13 +242,15 @@ (deftask collection "Render collection files" - [o out-dir OUTDIR str "The output directory" - r renderer RENDERER sym "Page renderer. Fully qualified symbol resolving to a function." - f filterer FILTER code "Filter function" - s sortby SORTBY code "Sort by function" - c comparator COMPARATOR code "Sort by comparator function" - p page PAGE str "Collection result page path"] - (let [pods (wrap-pool (pod/pod-pool (boot/get-env))) + [o out-dir OUTDIR str "The output directory" + r renderer RENDERER sym "Page renderer. Fully qualified symbol resolving to a function." + f filterer FILTER code "Filter function" + s sortby SORTBY code "Sort by function" + c comparator COMPARATOR code "Sort by comparator function" + p page PAGE str "Collection result page path" + e template-engine ENGINE kw "Template engine used for rendering" + n template-name NAME str "Template filename"] + (let [pods (wrap-pool (pod/pod-pool (create-pod-env collection-deps))) tmp (boot/tmp-dir!) options (merge +collection-defaults+ *opts*)] (boot/with-pre-wrap fileset @@ -241,7 +258,11 @@ files (vals (get-perun-meta fileset)) filtered-files (filter (:filterer options) files) sorted-files (vec (sort-by (:sortby options) (:comparator options) filtered-files)) - html (render-in-pod pod renderer sorted-files) + items {:items sorted-files} + html (if (nil? renderer) + (pod/with-call-in pod + (io.perun.render-template/render ~template-engine ~template-name ~items)) + (render-in-pod pod renderer sorted-files)) page-filepath (perun/create-filepath (:out-dir options) page)] (perun/create-file tmp page-filepath html) (u/info (str "Render collection " page "\n"))