Set of functions helpful for formatting. Formatting functions always return string.
This library also comes with optional mount module at district.format.mount, that
helps to set up global configuration in a cleaner way.
Include [district.format]
in your CLJS file
Optionally include [district.format.mount]
in your CLJS file, where you use mount/start
- district.format
- format-datetime
- format-local-datetime
- format-date
- format-local-date
- format-number
- format-currency
- format-token
- format-eth
- format-dnt
- format-number-metric
- etherscan-addr-url
- etherscan-tx-url
- time-ago
- pluralize
- truncate
- format-bool
- format-time-unit
- format-time-units
- zero-time-units?
- format-url
- format-namespaced-kw
- format-percentage
- ensure-trailing-slash
- clj->json
- district.format.mount
Formats cljs-time datetime. Optionally you can pass a formatter. List of available formatters can be found at cljs-time.format/formatters, or you can pass formatting string as well.
Default formatter can be set at format/*default-datetime-formatter*
or with mount under the key :default-datetime-formatter
.
Default: :rfc822
(format/format-datetime (t/date-time 2018 2 3))
;; => "Sat, 03 Feb 2018 00:00:00 Z"
(format/format-datetime (t/date-time 2018 2 3) :basic-date)
;; => "20180203"
Formats local datetime.
Default formatter can be set at format/*default-local-datetime-formatter*
or with mount under the key :default-local-datetime-formatter
.
Default: :rfc822
(format/format-local-datetime (t/local-date-time 2018 2 3 10 11 12))
;; => "Sat, 03 Feb 2018 10:11:12"
Formats date.
Default formatter can be set at format/*default-date-formatter*
or with mount under the key :default-date-formatter
.
Default: "EEE, dd MMM yyyy"
(format/format-date (t/date-time 2018 2 3))
;; => "Sat, 03 Feb 2018"
Formats local date.
Default formatter can be set at format/*default-local-date-formatter*
or with mount under the key :default-local-date-formatter
.
Default: "EEE, dd MMM yyyy"
(format/format-local-date (t/local-date-time 2018 2 3))
;; => "Sat, 03 Feb 2018"
Formats a number.
Optional opts:
:locale
:max-fraction-digits
:min-fraction-digits
Default locale can be set at format/*default-locale*
or with mount under the key :default-locale
.
Default max-fraction-digits can be set at format/*default-max-number-fraction-digits*
or with mount under the key :default-max-number-fraction-digits
.
Default locale: "en-US"
Default max-fraction-digits: 2
(format/format-number 1000000.12945678)
;; => "1,000,000.13"
(format/format-number 1000000.12945678 {:locale "de-DE" :max-fraction-digits 3})
;; => "1.000.000,129"
Formats a number with fiat currency.
Optional opts:
:locale
:max-fraction-digits
:min-fraction-digits
:currency
Default locale can be set at format/*default-locale*
or with mount under the key :default-locale
.
Default max-fraction-digits can be set at format/*default-max-currency-fraction-digits*
or with mount under the key :default-max-currency-fraction-digits
.
Default min-fraction-digits can be set at format/*default-min-currency-fraction-digits*
or with mount under the key :default-min-currency-fraction-digits
.
Default locale: "en-US"
Default max-fraction-digits: 2
Default min-fraction-digits: nil
(format/format-currency 1000000.12945678 {:currency "USD"})
;; => "$1,000,000.13"
Formats a number.
Optional opts:
:locale
:max-fraction-digits
:min-fraction-digits
:token
Default locale can be set at format/*default-locale*
or with mount under the key :default-locale
.
Default max-fraction-digits can be set at format/*default-max-token-fraction-digits*
or with mount under the key :default-max-token-fraction-digits
.
Default min-fraction-digits can be set at format/*default-min-token-fraction-digits*
or with mount under the key :default-min-token-fraction-digits
.
Default locale: "en-US"
Default max-fraction-digits: 2
Default min-fraction-digits: nil
(format/format-token 1000000.12945678 {:token "DNT"})
;; => "1,000,000.13 DNT"
Calls format-token
with token ETH
.
(format/format-eth 1000000.12945678)
;; => "1,000,000.13 ETH"
Calls format-token
with token DNT
.
(format/format-dnt 1000000.12945678)
;; => "1,000,000.13 DNT"
Formats number in shortened form with metric unit symbols.
(format/format-number-metric 10000)
;; => "10K"
(format/format-number-metric 10000000)
;; => "10M"
Returns etherscan url for an address
(format/etherscan-addr-url "0x7d10b16dd1f9e0df45976d402879fb496c114936")
;; => "https://etherscan.io/address/0x7d10b16dd1f9e0df45976d402879fb496c114936"
Returns etherscan url for a transaction
(format/etherscan-tx-url "0x60a1ef75c4217e2a23eab7ae508ff000b458abe92a2f80d766da1223917faa26")
;; => "https://etherscan.io/tx/0x60a1ef75c4217e2a23eab7ae508ff000b458abe92a2f80d766da1223917faa26"
Returns time ago string. If to-time
is not given, current time is used.
(format/time-ago (t/minus (t/now) (t/minutes 5)))
;; => "5 minutes ago"
(format/time-ago (t/date-time 2017 10 10) (t/date-time 2017 11 10))
;; => "1 month ago"
(format/pluralize 2 "car")
;; => "2 cars"
(format/pluralize 2 "lad" "y" "ies")
;; => "2 ladies"
(format/truncate "abcdefghlij" 6)
;; => "abc..."
(format/truncate "abcdefghlij" 2 "")
;; => "ab"
(format/format-bool true)
;; => "true"
(format/format-time-unit :days 1)
;; => "1 day"
(format/format-time-unit :seconds 2)
;; => "2 seconds"
(format/format-time-unit :seconds 2 {:short? true})
;; => "2 sec."
(format/format-time-units {:days 1 :hours 10 :minutes 4 :seconds 5})
;; => "1 day 10 hours 4 minutes 5 seconds"
(format/format-time-units {:hours 10 :minutes 4 :seconds 5} {:short? true})
;; => "10 hours 4 min. 5 sec."
(format/zero-time-units? {:days 0 :hours 0 :minutes 0 :seconds 0})
;; => true
(format/zero-time-units? {:days 0 :hours 0 :minutes 0 :seconds 1})
;; => false
(format/format-url "/abc" {:a 1 :b 2})
;; => "/abc?a=1&b=2"
(format/format-namespaced-kw :a/b)
;; => "a/b"
(format/format-percentage 1 3)
;; => "33.3%"
(format/format-percentage 1 7 {:max-fraction-digits 4})
;; => "14.2857%"
(format/ensure-trailing-slash "http://127.0.0.1:8080")
;; => "http://127.0.0.1:8080/"
(format/ensure-trailing-slash "http://127.0.0.1:8080/")
;; => "http://127.0.0.1:8080/"
(format/clj->json {:title "PepeSmile"
:image-hash "data"
:search-tags "pepe frog dank"})
;; => "{\"title\":\"PepeSmile\",\"image-hash\":\"data\",\"search-tags\":\"pepe frog dank\"}"
With mount you can setup all global configs at once under the key :format
.
(ns my-district.core
(:require [mount.core :as mount]
[district.format.mount]))
(-> (mount/with-args
{:format {:default-datetime-formatter :basic-ordinal-date-time-no-ms
:default-local-datetime-formatter :basic-week-date-time
:default-local-date-formatter :week-date
:default-date-formatter :date
:default-locale "sk-SK"
:default-max-number-fraction-digits 4
:default-max-currency-fraction-digits 5
:default-min-currency-fraction-digits 3
:default-max-token-fraction-digits 6
:default-min-token-fraction-digits 3}})
(mount/start))
lein deps
# To run tests and rerun on changes
lein doo chrome tests