diff options
Diffstat (limited to 'src/clj/nicktodo/layout.clj')
-rw-r--r-- | src/clj/nicktodo/layout.clj | 39 |
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)}) |