content: {-# LANGUAGE OverloadedStrings, GeneralizedNewtypeDeriving #-}
  module Clay.List
  ( ListStyleType
  , listStyleType
  , disc
  , armenian
  , circleListStyle
  , cjkIdeographic
  , decimal
  , decimalLeadingZero
  , georgian
  , hebrew
  , hiragana
  , hiraganaIroha
  , katakana
  , katakanaIroha
  , lowerAlpha
  , lowerGreek
  , lowerLatin
  , lowerRoman
  , square
  , upperAlpha
  , upperLatin
  , upperRoman
  
  , ListStylePosition
  , listStylePosition
  , inside
  , outside
  
  , ListStyleImage
  , listStyleImage
  , imageUrl
  
  , listStyle
  )
  where
  
  import Data.Text (Text)
  
  import Clay.Common
  import Clay.Property
  import Clay.Stylesheet
  
  newtype ListStyleType = ListStyleType Value
    deriving (Val, Initial, Inherit, None, Other)
  
  disc, armenian, circleListStyle, cjkIdeographic, decimal, decimalLeadingZero, georgian
      , hebrew, hiragana, hiraganaIroha, katakana, katakanaIroha, lowerAlpha
      , lowerGreek, lowerLatin, lowerRoman, square, upperAlpha, upperLatin, upperRoman :: ListStyleType
  
  disc                = ListStyleType "disc"
  armenian            = ListStyleType "armenian"
  circleListStyle     = ListStyleType "circle"
  cjkIdeographic      = ListStyleType "cjk-ideographic"
  decimal             = ListStyleType "decimal"
  decimalLeadingZero  = ListStyleType "decimal-leading-zero"
  georgian            = ListStyleType "georgian"
  hebrew              = ListStyleType "hebrew"
  hiragana            = ListStyleType "hiragana"
  hiraganaIroha       = ListStyleType "hiragana-iroha"
  katakana            = ListStyleType "katakana"
  katakanaIroha       = ListStyleType "katakana-iroha"
  lowerAlpha          = ListStyleType "lower-alpha"
  lowerGreek          = ListStyleType "lower-greek"
  lowerLatin          = ListStyleType "lower-latin"
  lowerRoman          = ListStyleType "lower-roman"
  square              = ListStyleType "square"
  upperAlpha          = ListStyleType "upper-alpha"
  upperLatin          = ListStyleType "upper-latin"
  upperRoman          = ListStyleType "upper-roman"
  
  listStyleType :: ListStyleType -> Css
  listStyleType = key "list-style-type"
  
  newtype ListStylePosition = ListStylePosition Value
    deriving (Val, Initial, Inherit, Other)
  
  inside, outside :: ListStylePosition
  
  inside  = ListStylePosition "inside"
  outside = ListStylePosition "outside"
  
  listStylePosition :: ListStylePosition -> Css
  listStylePosition = key "list-style-position"
  
  newtype ListStyleImage = ListStyleImage Value
    deriving (Val, Initial, Inherit, None, Other)
  
  listStyleImage :: ListStyleImage -> Css
  listStyleImage = key "list-style-image"
  
  imageUrl :: Text -> ListStyleImage
  imageUrl u = ListStyleImage ("url(" <> value (Literal u) <> ")")
  
  listStyle :: ListStyleType -> ListStylePosition -> ListStyleImage -> Css
  listStyle a b c = key "list-style" (a ! b ! c)
  