Ver Código Fonte

support Value types outside of unions.

Lucas Stadler 12 anos atrás
pai
commit
075fc3c289
1 arquivos alterados com 17 adições e 1 exclusões
  1. 17 1
      clj/clarity/cljs/clarity.cljs

+ 17 - 1
clj/clarity/cljs/clarity.cljs

43
(defmethod empty-value 'String [{:keys [default]}]
43
(defmethod empty-value 'String [{:keys [default]}]
44
  (or default ""))
44
  (or default ""))
45
45
46
(defmethod empty-value 'Value [[_ v]]
47
  v)
48
46
(defmethod empty-value 'U [[_ & [[_ v]]]]
49
(defmethod empty-value 'U [[_ & [[_ v]]]]
47
  v)
50
  v)
48
51
66
                    :value (om/value number)
69
                    :value (om/value number)
67
                    :onChange #(om/update! number (fn [_ n] n) (js/parseFloat (.. % -target -value)))})))
70
                    :onChange #(om/update! number (fn [_ n] n) (js/parseFloat (.. % -target -value)))})))
68
71
72
(def keyword-pattern "^:(\\w+|\\w+(\\.\\w+)*\\/\\w+)$")
73
69
(defmethod make-typed-input 'Keyword [kw owner]
74
(defmethod make-typed-input 'Keyword [kw owner]
70
  (om/component
75
  (om/component
71
    (dom/input #js {:type "text"
76
    (dom/input #js {:type "text"
72
                    :value (om/value kw)
77
                    :value (om/value kw)
73
                    :pattern "^:(\\w+|\\w+(\\.\\w+)*\\/\\w+)$"
78
                    :pattern keyword-pattern
74
                    :onChange (fn [ev]
79
                    :onChange (fn [ev]
75
                                (when (valid? (.-target ev))
80
                                (when (valid? (.-target ev))
76
                                  (om/update! kw (fn [o n] n) (or (read-keyword (.. ev -target -value))
81
                                  (om/update! kw (fn [o n] n) (or (read-keyword (.. ev -target -value))
82
                    :value (om/value string)
87
                    :value (om/value string)
83
                    :onChange #(om/update! string (fn [_ n] n) (.. % -target -value))})))
88
                    :onChange #(om/update! string (fn [_ n] n) (.. % -target -value))})))
84
89
90
(defmethod make-typed-input 'Value [value owner]
91
  (om/component
92
   (dom/input (clj->js
93
                (into {:value (str value)
94
                       :readOnly ""}
95
                  (cond
96
                    (instance? js/Boolean value) {:type "checkbox", :checked value}
97
                    (number? value) {:type "number"}
98
                    (keyword? value) {:type "text", :pattern keyword-pattern}
99
                    :else {:type "text"}))))))
100
85
(defmethod make-typed-input 'U [value owner {type :type}]
101
(defmethod make-typed-input 'U [value owner {type :type}]
86
  (om/component
102
  (om/component
87
    (dom/select nil
103
    (dom/select nil