Browse Source

support the `Any` type.

Lucas Stadler 12 years ago
parent
commit
e237f05588
1 changed files with 15 additions and 4 deletions
  1. 15 4
      clj/clarity/cljs/clarity.cljs

+ 15 - 4
clj/clarity/cljs/clarity.cljs

22
      (keyword name)
22
      (keyword name)
23
      nil)))
23
      nil)))
24
24
25
(defn read-string-safe [s default]
26
  (try
27
    (r/read-string s)
28
    (catch js/Error e
29
      default)))
30
25
(defmulti empty-value
31
(defmulti empty-value
26
  (fn get-type [type]
32
  (fn get-type [type]
27
    (cond
33
    (cond
46
(defmethod empty-value 'Value [[_ v]]
52
(defmethod empty-value 'Value [[_ v]]
47
  v)
53
  v)
48
54
55
(defmethod empty-value 'Any [{:keys [default]}]
56
  (or default nil))
57
49
(defmethod empty-value 'Option [[_ v]]
58
(defmethod empty-value 'Option [[_ v]]
50
  (empty-value v))
59
  (empty-value v))
51
60
115
                           (keyword? value) {:type "text", :pattern keyword-pattern}
124
                           (keyword? value) {:type "text", :pattern keyword-pattern}
116
                           :else {:type "text"})))))))
125
                           :else {:type "text"})))))))
117
126
127
(defmethod make-typed-input 'Any [m owner {:keys [key] :as opts}]
128
  (om/component
129
    (dom/input #js {:type "text"
130
                    :onChange (update-on-change! m key
131
                                                 (assoc opts :transform-fn #(read-string-safe % nil)))})))
132
118
(defmethod make-typed-input 'Option [m owner {type :type :as opts}]
133
(defmethod make-typed-input 'Option [m owner {type :type :as opts}]
119
  (let [[_ type] type]
134
  (let [[_ type] type]
120
    (make-typed-input m owner (assoc opts :type type))))
135
    (make-typed-input m owner (assoc opts :type type))))
134
      (om/build make-typed-input m {:opts {:type (om/value t), :key k, :val (k m)
149
      (om/build make-typed-input m {:opts {:type (om/value t), :key k, :val (k m)
135
                                           :optional? optional?}}))))
150
                                           :optional? optional?}}))))
136
151
137
(defn read-string-safe [s default]
138
  (let [r (r/push-back-reader s)]
139
    (r/read r false default false)))
140
141
(defn update-dynamic-field! [type owner]
152
(defn update-dynamic-field! [type owner]
142
  (fn [ev]
153
  (fn [ev]
143
    (let [k (om/get-state owner :key)
154
    (let [k (om/get-state owner :key)