summaryrefslogtreecommitdiff
path: root/src/clj/nicktodo/layout.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/clj/nicktodo/layout.clj')
-rw-r--r--src/clj/nicktodo/layout.clj39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/clj/nicktodo/layout.clj b/src/clj/nicktodo/layout.clj
new file mode 100644
index 0000000..5a9f097
--- /dev/null
+++ b/src/clj/nicktodo/layout.clj
@@ -0,0 +1,39 @@
+(ns nicktodo.layout
+ (:require
+ [clojure.java.io]
+ [selmer.parser :as parser]
+ [selmer.filters :as filters]
+ [markdown.core :refer [md-to-html-string]]
+ [ring.util.http-response :refer [content-type ok]]
+ [ring.util.anti-forgery :refer [anti-forgery-field]]
+ [ring.middleware.anti-forgery :refer [*anti-forgery-token*]]
+ [ring.util.response]))
+
+(parser/set-resource-path! (clojure.java.io/resource "html"))
+(parser/add-tag! :csrf-field (fn [_ _] (anti-forgery-field)))
+(filters/add-filter! :markdown (fn [content] [:safe (md-to-html-string content)]))
+
+(defn render
+ "renders the HTML template located relative to resources/html"
+ [request template & [params]]
+ (content-type
+ (ok
+ (parser/render-file
+ template
+ (assoc params
+ :page template
+ :csrf-token *anti-forgery-token*)))
+ "text/html; charset=utf-8"))
+
+(defn error-page
+ "error-details should be a map containing the following keys:
+ :status - error status
+ :title - error title (optional)
+ :message - detailed error message (optional)
+
+ returns a response map with the error page as the body
+ and the status specified by the status key"
+ [error-details]
+ {:status (:status error-details)
+ :headers {"Content-Type" "text/html; charset=utf-8"}
+ :body (parser/render-file "error.html" error-details)})