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))) "%")]]])]))