|
1 | 1 | (ns java-time.properties |
2 | 2 | (:require [java-time.core :as jt.c] |
3 | 3 | [java-time.util :as jt.u]) |
4 | | - (:import [java.time.temporal |
5 | | - TemporalField IsoFields ChronoField JulianFields |
6 | | - TemporalUnit ChronoUnit])) |
| 4 | + #?(:clj (:import [java.time.temporal |
| 5 | + TemporalField IsoFields ChronoField JulianFields |
| 6 | + TemporalUnit ChronoUnit]))) |
| 7 | + |
| 8 | +#?(:cljs |
| 9 | + (do |
| 10 | + (def TemporalField (.. js/JSJoda -TemporalField)) |
| 11 | + (def IsoFields (.. js/JSJoda -IsoFields)) |
| 12 | + (def ChronoField (.. js/JSJoda -ChronoField)) |
| 13 | + (def TemporalUnit (.. js/JSJoda -TemporalUnit)) |
| 14 | + (def ChronoUnit (.. js/JSJoda -ChronoUnit)) |
| 15 | + ;(def JulianFields (.. js/JSJoda -JulianFields)) |
| 16 | + )) |
7 | 17 |
|
8 | 18 | (defn- property->key [p] |
9 | 19 | (keyword (jt.u/dashize (str p)))) |
|
31 | 41 | ;;;;;;;;; UNIT |
32 | 42 |
|
33 | 43 | (def iso-units |
34 | | - (vals (jt.u/get-static-fields-of-type IsoFields TemporalUnit))) |
| 44 | + (vals |
| 45 | + #?(:clj (jt.u/get-static-fields-of-type IsoFields TemporalUnit) |
| 46 | + :cljs (jt.u/get-fields-matching IsoFields #".*YEARS")))) ;todo |
35 | 47 |
|
36 | 48 | (def chrono-units |
37 | | - (vals (jt.u/get-static-fields-of-type ChronoUnit TemporalUnit))) |
| 49 | + (vals |
| 50 | + #?(:clj (jt.u/get-static-fields-of-type ChronoUnit TemporalUnit) |
| 51 | + :cljs (jt.u/get-fields-matching ChronoUnit #".*")))) |
38 | 52 |
|
39 | 53 | (def predefined-units |
40 | 54 | (concat iso-units chrono-units)) |
|
68 | 82 | (defn ^TemporalUnit get-unit-checked [o] |
69 | 83 | (if-let [u (get-unit o)] |
70 | 84 | u |
71 | | - (throw (NullPointerException. (str "No temporal unit found for " o "!"))))) |
| 85 | + (throw (#?(:clj NullPointerException. |
| 86 | + :cljs js/Error.) (str "No temporal unit found for " o "!"))))) |
72 | 87 |
|
73 | 88 | (defn unit-key [o] |
74 | 89 | (cond (keyword? o) |
|
80 | 95 | ;;;;;;;;; FIELD |
81 | 96 |
|
82 | 97 | (def iso-fields |
83 | | - (vals (jt.u/get-static-fields-of-type IsoFields TemporalField))) |
| 98 | + (vals |
| 99 | + #?(:clj (jt.u/get-static-fields-of-type IsoFields TemporalField) |
| 100 | + :cljs (jt.u/get-fields-matching IsoFields #".*")))) |
84 | 101 |
|
85 | 102 | (def julian-fields |
86 | | - (vals (jt.u/get-static-fields-of-type JulianFields TemporalField))) |
| 103 | + (vals |
| 104 | + #?(:clj (jt.u/get-static-fields-of-type JulianFields TemporalField) |
| 105 | + :cljs {}))) |
87 | 106 |
|
88 | 107 | (def chrono-fields |
89 | | - (vals (jt.u/get-static-fields-of-type ChronoField TemporalField))) |
| 108 | + (vals |
| 109 | + #?(:clj (jt.u/get-static-fields-of-type ChronoField TemporalField) |
| 110 | + :cljs (jt.u/get-fields-matching ChronoField #".*")))) |
90 | 111 |
|
91 | 112 | (def predefined-fields |
92 | 113 | (concat iso-fields chrono-fields julian-fields)) |
|
106 | 127 | (supports? [f t] |
107 | 128 | (.isSupportedBy f ^TemporalAccessor t))) |
108 | 129 |
|
109 | | -(extend TemporalField |
| 130 | +(extend-type TemporalField |
110 | 131 | jt.c/ReadableRangeProperty |
111 | | - (assoc jt.c/readable-range-property-fns |
112 | | - :range (fn [^TemporalField f] (.range f)))) |
| 132 | + (range [^TemporalField k] |
| 133 | + (.range k)) |
| 134 | + (min-value [p] |
| 135 | + ((jt.c/readable-range-property-fns :min-value) p)) |
| 136 | + (largest-min-value [p] |
| 137 | + ((jt.c/readable-range-property-fns :largest-min-value) p)) |
| 138 | + (smallest-max-value [p] |
| 139 | + ((jt.c/readable-range-property-fns :smallest-max-value) p)) |
| 140 | + (max-value [p] |
| 141 | + ((jt.c/readable-range-property-fns :max-value) p))) |
113 | 142 |
|
114 | 143 | (defn field? |
115 | 144 | "True if this is a `TemporalField`." |
|
160 | 189 | (supports? [k t] |
161 | 190 | (jt.c/supports? (or (get-field k) (get-unit k)) t))) |
162 | 191 |
|
163 | | -(extend clojure.lang.Keyword |
| 192 | +(extend-type clojure.lang.Keyword |
164 | 193 | jt.c/ReadableRangeProperty |
165 | | - (assoc jt.c/readable-range-property-fns |
166 | | - :range (fn [k] (jt.c/range (get-field k))))) |
| 194 | + (range [k] |
| 195 | + (jt.c/range (get-field k))) |
| 196 | + (min-value [p] |
| 197 | + ((jt.c/readable-range-property-fns :min-value) p)) |
| 198 | + (largest-min-value [p] |
| 199 | + ((jt.c/readable-range-property-fns :largest-min-value) p)) |
| 200 | + (smallest-max-value [p] |
| 201 | + ((jt.c/readable-range-property-fns :smallest-max-value) p)) |
| 202 | + (max-value [p] |
| 203 | + ((jt.c/readable-range-property-fns :max-value) p))) |
0 commit comments