;; scittle-run filter over the embedded marketplace data (no build step)
(ns marketplace.page)
(def entries
  (js->clj (js/JSON.parse (.-textContent (js/document.getElementById "marketplace-data")))
           :keywordize-keys true))
(defn- esc [s]
  (-> (str s) (.replaceAll "&" "&amp;") (.replaceAll "<" "&lt;") (.replaceAll ">" "&gt;")))
(defn- row-html [e]
  (str "<tr><td>" (esc (:id e)) "</td><td>" (esc (:name e)) "</td><td>"
       (if (:repo e) (str "<a href=\"" (esc (:repo e)) "\">repo</a>") "—") "</td><td>"
       (if (:demo e) (str "<a href=\"" (esc (:demo e)) "\">demo</a>") "—") "</td></tr>"))
(defn- render! []
  (let [q (.toLowerCase (.-value (js/document.getElementById "q")))
        hits (filter #(or (= q "") (.includes (.toLowerCase (str (:id %) " " (:name %))) q)) entries)]
    (set! (.-innerHTML (js/document.getElementById "rows")) (apply str (map row-html hits)))
    (set! (.-hidden (js/document.getElementById "empty")) (boolean (seq hits)))))
(.addEventListener (js/document.getElementById "q") "input" render!)
(render!)