diff --git a/src/blarg/handler.clj b/src/blarg/handler.clj index b51caff..33ff592 100644 --- a/src/blarg/handler.clj +++ b/src/blarg/handler.clj @@ -54,7 +54,7 @@ (.printStackTrace e) {:status 500 :headers {"Content-Type" "text/html"} - :body (layout/render "error.html" {:error-info e})})))) + :body (layout/render-template request "error.html" {:error-info e})})))) (def app (app-handler [auth-routes home-routes posts-routes files-routes rss-routes app-routes] diff --git a/src/blarg/routes/auth.clj b/src/blarg/routes/auth.clj index 6fde196..dcc75a0 100644 --- a/src/blarg/routes/auth.clj +++ b/src/blarg/routes/auth.clj @@ -4,6 +4,8 @@ [noir.util.route]) (:require [blarg.views.layout :as layout] [blarg.models.users :as users] + [ring.util.response :refer [status]] + [ring.middleware.head :refer [wrap-head]] [noir.session :as session] [noir.response :as resp] [noir.validation :as vali])) @@ -14,8 +16,10 @@ (defn login-page [] (if (logged-in?) (resp/redirect "/") - (layout/render "auth/login.html" {:login-error (session/flash-get :login-error) - :html-title (->html-title ["Login"])}))) + (layout/render + "auth/login.html" + :params {:login-error (session/flash-get :login-error) + :html-title (->html-title ["Login"])}))) (defn handle-login [id pass] (if-let [user (users/get-user id pass)] @@ -31,9 +35,7 @@ (resp/redirect "/")) (defn handle-unauthorized [] - {:status 401 - :headers {"Content-Type" "text/html"} - :body (layout/render "unauthorized.html")}) + (layout/render "unauthorized.html" :status 401)) (defroutes auth-routes (GET "/unauthorized" [] (handle-unauthorized)) diff --git a/src/blarg/routes/files.clj b/src/blarg/routes/files.clj index 2e1e7cc..85f5173 100644 --- a/src/blarg/routes/files.clj +++ b/src/blarg/routes/files.clj @@ -17,13 +17,13 @@ (let [p (ensure-prefix-suffix path "/")] (layout/render "files/list.html" - {:html-title (->html-title [(str "Files in " p)]) - :path p - :files (files/list-files p) - :tree (files/get-tree) - :error (session/flash-get :file-error) - :success (session/flash-get :file-success) - :notice (session/flash-get :file-notice)}))) + :params {:html-title (->html-title [(str "Files in " p)]) + :path p + :files (files/list-files p) + :tree (files/get-tree) + :error (session/flash-get :file-error) + :success (session/flash-get :file-success) + :notice (session/flash-get :file-notice)}))) (defn handle-new-file [path file returnpath] (if (valid-upload? file) diff --git a/src/blarg/routes/home.clj b/src/blarg/routes/home.clj index 9bce41d..ab42039 100644 --- a/src/blarg/routes/home.clj +++ b/src/blarg/routes/home.clj @@ -7,11 +7,13 @@ (defn about-page [] (layout/render - "about.html" {:html-title (->html-title ["About"])})) + "about.html" + :params {:html-title (->html-title ["About"])})) (defn projects-page [] (layout/render - "projects.html" {:html-title (->html-title ["Projects"])})) + "projects.html" + :params {:html-title (->html-title ["Projects"])})) (defroutes home-routes (GET "/about" [] (about-page)) diff --git a/src/blarg/routes/posts.clj b/src/blarg/routes/posts.clj index 37437cc..9f46521 100644 --- a/src/blarg/routes/posts.clj +++ b/src/blarg/routes/posts.clj @@ -43,23 +43,23 @@ offset (* currentpage posts/per-page)] (layout/render "posts/list.html" - {:posts (posts/list-posts (auth/logged-in?) posts/per-page offset) - :prevpage (- currentpage 1) - :nextpage (+ currentpage 1) - :atlastpage (= currentpage lastpage) - :atfirstpage (= currentpage 0) - :inlist true}))) + :params {:posts (posts/list-posts (auth/logged-in?) posts/per-page offset) + :prevpage (- currentpage 1) + :nextpage (+ currentpage 1) + :atlastpage (= currentpage lastpage) + :atfirstpage (= currentpage 0) + :inlist true}))) (defn list-by-tag [tag] (layout/render "posts/listbytag.html" - {:posts (posts/list-posts-by-tag (auth/logged-in?) tag) - :tag tag})) + :params {:posts (posts/list-posts-by-tag (auth/logged-in?) tag) + :tag tag})) (defn list-archive [] (layout/render "posts/listarchive.html" - {:months (posts/list-posts-archive (auth/logged-in?))})) + :params {:months (posts/list-posts-archive (auth/logged-in?))})) (defn show-post-page [year month day slug] (let [date (str (string->int year) "-" (string->int month) "-" (string->int day)) @@ -67,17 +67,18 @@ (if (not-empty post) (layout/render "posts/showpost.html" - {:post post - :html-title (->html-title [(:title post)])}) + :params {:post post + :html-title (->html-title [(:title post)])}) (resp/redirect "/notfound")))) (defn new-post-page [& post] (layout/render "posts/newpost.html" - (merge (first post) - {:all-tags (posts/list-tags) - :html-title (->html-title ["New Post"]) - :validation-errors @vali/*errors*}))) + :params (merge + (first post) + {:all-tags (posts/list-tags) + :html-title (->html-title ["New Post"]) + :validation-errors @vali/*errors*}))) (defn handle-new-post [title tags body] (if (valid-post? title tags body) @@ -94,11 +95,12 @@ (posts/get-post id))] (layout/render "posts/editpost.html" - (merge post - {:tags (tags->string (:tags post)) - :all-tags (posts/list-tags) - :html-title (->html-title ["Edit Post"]) - :validation-errors @vali/*errors*})))) + :params (merge + post + {:tags (tags->string (:tags post)) + :all-tags (posts/list-tags) + :html-title (->html-title ["Edit Post"]) + :validation-errors @vali/*errors*})))) (defn handle-edit-post [id title tags body] (if (valid-post? title tags body) diff --git a/src/blarg/views/layout.clj b/src/blarg/views/layout.clj index 8a3a172..e50c751 100644 --- a/src/blarg/views/layout.clj +++ b/src/blarg/views/layout.clj @@ -1,23 +1,27 @@ (ns blarg.views.layout (:require [selmer.parser :as parser] - [ring.util.response :refer [content-type response]] + [ring.util.response :as resp] [compojure.response :refer [Renderable]] [noir.session :as session]) (:use [blarg.views.viewfilters])) (def template-path "blarg/views/templates/") -(deftype RenderableTemplate [template params] +(defn render-template [request template params] + (parser/render-file + (str template-path template) + (assoc params + :context (:context request) + :user-id (session/get :user)))) + +(deftype RenderableTemplate [template params status content-type] Renderable (render [this request] - (content-type - (response - (parser/render-file - (str template-path template) - (assoc params - :context (:context request) - :user-id (session/get :user)))) - "text/html; charset=utf-8"))) + (-> (render-template request template params) + (resp/response) + (resp/content-type (or content-type "text/html; charset=utf-8")) + (resp/status (or status 200))))) + +(defn render [template & {:keys [params status content-type]}] + (RenderableTemplate. template params status content-type)) -(defn render [template & [params]] - (RenderableTemplate. template params))