Table of Contents
1 Namespaces
(ns exam-vault.views.transforms)
2 Tidy Tags
(defn tidy-tags [word]
(clojure.string/capitalize (clojure.string/replace (name word) "-" " ")))
3 HTMLize Years
(defn htmlize-years [module year years]
(when (not-empty years)
(into [:ul] (map (fn [x]
(let [url (str "/modules/" module "/" x)]
[:li [:a (if (= (str x) (str year)) {:class "toggled" :href url} {:href url}) x]])) years))))
4 HTMLize papers
(defn htmlize-papers [questions]
(for [q questions]
(let [{:keys [question mark topics]} q]
[:div {:class "question"}
(for [t topics] [:span {:class "topics"} (tidy-tags t)])
[:article question]
[:p {:class "marks"} mark]
])))
5 Listify
(defn listify [module-data selection]
(for [m module-data]
(let [mcode (:code m)
mname (:module m)]
[:li {:class (str "module " mcode)}
[:a
(if (= mcode selection) (conj {:class "selected"} {:href (str "/modules/" mcode)}) {:href (str "/modules/" mcode)})
[:span mcode]
[:p mname]]])))
6 Distribution Bar
(defn distribution-bar [t share]
(let [class
(cond
(= t "out of syllabus") "grey"
(> share 30) "green"
(> share 20) "teal"
(> share 10) "blue"
(>= share 0) "purple"
:else "grey")]
[:li {:class (str "share-bar " class) :style (str "width:" (int (* (/ share 100) 180)) "px;")}]
))
7 HTMLize Topics
(defn htmlize-topics [topics]
(let [sorted-topics (sort-by val > topics)]
[:ul {:class "topic-distribution"}
(for [[t share] sorted-topics]
[:li [:ul (distribution-bar t share) [:li {:class "topic-title"} (tidy-tags t)] [:li {:class "topic-share"} (str (if (integer? share) share (format "%.2f" (float share))) "%")]]])]))