diff --git a/src/uxbox/util/data.cljs b/src/uxbox/util/data.cljs index 43bff3dc5..d86d914e9 100644 --- a/src/uxbox/util/data.cljs +++ b/src/uxbox/util/data.cljs @@ -1,6 +1,7 @@ (ns uxbox.util.data "A collection of data transformation utils." - (:require [cljs.reader :as r])) + (:require [cljs.reader :as r] + [cuerdas.core :as str])) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Data structure manipulation @@ -29,6 +30,14 @@ (persistent! (reduce #(dissoc! %1 %2) (transient data) keys))) +(defn index-of + "Return the first index when appears the `v` value + in the `coll` collection." + [coll v] + (first (keep-indexed (fn [idx x] + (when (= v x) idx)) + coll))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Numbers Parsing ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -58,3 +67,17 @@ (if (or (not v) (nan? v)) default v)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Other +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defn classnames + [& params] + {:pre [(even? (count params))]} + (str/join " " (reduce (fn [acc [k v]] + (if (true? v) + (conj acc (name k)) + acc)) + [] + (partition 2 params))))