Utils.purs 1.53 KB
Newer Older
1
module Gargantext.Utils where
2 3

import Prelude
4
import Data.Lens (Lens', lens)
5
import Data.Newtype (class Newtype, unwrap, wrap)
6 7
import Data.Set as Set
import Data.Set (Set)
8

James Laver's avatar
James Laver committed
9 10 11 12
-- | Astonishingly, not in the prelude
id :: forall a. a -> a
id a = a

13 14 15 16 17 18
setterv :: forall nt record field.
           Newtype nt record
           => (record -> field -> record)
           -> field
           -> nt
           -> nt
19 20
setterv fn v t = (setter (flip fn v) t)

21 22 23 24 25
setter :: forall nt record.
          Newtype nt record
          => (record -> record)
          -> nt
          -> nt
26 27
setter fn = wrap <<< fn <<< unwrap

28 29 30 31 32
getter :: forall record field nt.
          Newtype nt record
          => (record -> field)
          -> nt
          -> field
33
getter fn = fn <<< unwrap
34 35 36 37 38 39

-- TODO: not optimal but Data.Set lacks some function (Set.alter)
toggleSet :: forall a. Ord a => a -> Set a -> Set a
toggleSet a s
  | Set.member a s = Set.delete a s
  | otherwise      = Set.insert a s
40 41 42 43 44 45 46

-- Default sort order is ascending, we may want descending
invertOrdering :: Ordering -> Ordering
invertOrdering LT = GT
invertOrdering GT = LT
invertOrdering EQ = EQ

47 48 49
csrfMiddlewareToken :: String
csrfMiddlewareToken = "Wy52D2nor8kC1r1Y4GrsrSIxQ2eqW8UwkdiQQshMoRwobzU4uldknRUhP0j4WcEM"

50 51 52
-- A lens that always returns unit
_unit :: forall s. Lens' s Unit
_unit = lens (\_ -> unit) (\s _ -> s)
53

54
glyphicon :: String -> String
55
glyphicon t = "btn glyphitem glyphicon glyphicon-" <> t
56

57 58 59
glyphiconActive :: String -> Boolean -> String
glyphiconActive icon b = glyphicon icon <> if b then " active" else ""

60 61