From 9c0e888284caab587663ad55d0e90a8782e9ee3c Mon Sep 17 00:00:00 2001 From: KKlochko Date: Wed, 10 Apr 2024 21:47:10 +0300 Subject: [PATCH] Add the helpers for timestamp and brief contents. --- src/main/blog/helpers.cljs | 23 +++++++++++++++++++++++ src/main/blog/server.cljs | 28 ++++++++++++++++++++++++---- 2 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 src/main/blog/helpers.cljs 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."