diff --git a/src/main/blog/helpers.cljs b/src/main/blog/helpers.cljs new file mode 100644 index 0000000..198a7e4 --- /dev/null +++ b/src/main/blog/helpers.cljs @@ -0,0 +1,23 @@ +(ns blog.helpers + (:require ["date-fns" :refer [format]])) + +(defn truncatestring-factory + [] + (fn [text limit] + (-> (. text substring 0 limit) + (str "...")))) + +(defn full-timestamp-factory + [] + (clj->js + (fn [timestamp] + (format timestamp "HH:mm MMM. do, yyyy")))) + +(defn is-brief-factory + [] + (clj->js + (fn [length] + (if (> length 60) + "..." + "")))) + diff --git a/src/main/blog/server.cljs b/src/main/blog/server.cljs index 6ddffe9..8c259f5 100644 --- a/src/main/blog/server.cljs +++ b/src/main/blog/server.cljs @@ -1,15 +1,33 @@ (ns blog.server (:require ["express" :as express] - ["express-handlebars" :refer [engine]] + ["express-handlebars" :refer [engine create]] ["body-parser" :as body-parser] [blog.db :as db] [blog.env :as env] - [blog.handlers :as handlers])) + [blog.handlers :as handlers] + [blog.helpers :as helpers])) (def app (express)) (def port (env/get-port)) (def client (db/create-client)) +(defn register-helpers + "Register helpers to use them in the handlebars's templates." + [] + + (let [hbs (create (clj->js {}))] + (.registerHelper (.-handlebars hbs) + "full-timestamp" + (helpers/full-timestamp-factory)) + + (.registerHelper (.-handlebars hbs) + "truncatestring" + (helpers/truncatestring-factory)) + + (.registerHelper (.-handlebars hbs) + "is-brief" + (helpers/is-brief-factory)))) + (defn setup-engine "Sets the engine to handlebars and simple set up." [] @@ -18,13 +36,15 @@ (. app engine ".hbs" (engine (-> {:extname ".hbs" :defaultLayout "main"} - (cljs.core/clj->js)))) + (clj->js)))) (. app set "view engine" ".hbs") (. app - set "views" "./views")) + set "views" "./views") + + (register-helpers)) (defn set-routes "Sets the routes for server."