   (and (not (js/isNaN (js/parseFloat n))) (js/isFinite n)))
 
 
-(defn parse-int-or-nil [v]
+(defn parse-int-or [v dv]
   (if (is-numeric? v)
     (js/parseInt v)
-    nil))
+    dv))
+
+
+(defn parse-int-or-nil [v]
+  (parse-int-or v nil))
+
+(defn parse-int-or-zero [v]
+  (parse-int-or v 0))
 
 
 (defn on-click-com-fn [f]

   (ui-virtual-page-<< app page-key nil body))
  ([app page-key back-key body]
   (dom/div #js {:style #js {:display
                             (if (= (virtual-pages-current app) page-key)
                               "" "none") }}
            (when back-key
              (ui-button {:type :default
                          :on-click (fn [_]
                                      (virtual-pages-go-to-page app back-key)
                                      1)
                          :text (dom/span nil
                                          (dom/span #js {:className "glyphicon glyphicon-backward"

(def textarea-app-init
  {:value ""})

(defn textarea-value [app] (get app :value))

(defn textarea [app owner {:keys [class+
                                  onChange-valid?-fn
