                         (remove nil?))]
       (not (empty? filtered)))))
 
-(defn formatter [field language row cell value columnDef dataContext]
+(defn formatter
   "Formatter for slickgrid columns takes row,cell,value,columnDef,dataContext.
    Get one with (partial formatter field language)."
+  [field language row cell value columnDef dataContext]
   (let [clj-value (js->clj value :keywordize-keys true)]
     (forms/format-answer field clj-value language true)))
 

                  (.sort dataview (compfn args) (aget args "sortAsc"))))
    (.subscribe (.-onDblClick grid)
                (fn [e args]
                  (let [rank (aget (.getItem dataview (aget args "row")) _rank)]
                    (put! shared/event-chan {:submission-to-rank rank}))))
    ;; page, filter, and data set-up on the dataview
    (init-sg-pager grid dataview)

;; EVENT LOOPS

(defn handle-table-events
  "Event loop for the table view. Processes a tap of share/event-chan,
   and updates app-state/dataview/grid as needed."
  [app-state grid dataview]
  (let [event-chan (shared/event-tap)]
    (go
     (while true
