From 55bba6448176dc419312c995be76ff05ce49e2d1 Mon Sep 17 00:00:00 2001 From: gered Date: Sun, 26 May 2013 13:48:35 -0400 Subject: [PATCH] added view tags namespace. added ifempty tag --- src/blarg/views/layout.clj | 3 ++- src/blarg/views/tags.clj | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/blarg/views/tags.clj diff --git a/src/blarg/views/layout.clj b/src/blarg/views/layout.clj index e1320cb..bfa7e88 100644 --- a/src/blarg/views/layout.clj +++ b/src/blarg/views/layout.clj @@ -2,7 +2,8 @@ (:use noir.request) (:require [clabango.parser :as parser] [noir.session :as session] - [blarg.views.viewfilters])) + [blarg.views.viewfilters] + [blarg.views.tags])) (def template-path "blarg/views/templates/") diff --git a/src/blarg/views/tags.clj b/src/blarg/views/tags.clj new file mode 100644 index 0000000..d66bb72 --- /dev/null +++ b/src/blarg/views/tags.clj @@ -0,0 +1,19 @@ +(ns blarg.views.tags + (:use [clabango.tags]) + (:require [clabango.filters :refer [context-lookup]])) + +(deftemplatetag "ifempty" "endifempty" [[if-node & nodes] context] + (let [args (:args if-node) + body-nodes (butlast nodes) + [flip decision] (cond (= 1 (count args)) + [empty? (first args)] + + (and (= 2 (count args)) + (= "not" (first args))) + [not-empty (second args)] + + :default (throw (Exception. (str "Syntax error: " + if-node))))] + {:nodes (if (flip (context-lookup context decision)) + (take-while #(not= "else" (:tag-name %)) body-nodes) + (rest (drop-while #(not= "else" (:tag-name %)) body-nodes)))})) \ No newline at end of file