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