{-# LANGUAGE OverloadedStrings #-}
module Hasmin.Types.BgSize (
BgSize(..), Auto(..)
) where
import Control.Monad.Reader (ask)
import Data.Monoid ((<>))
import Data.Text.Lazy.Builder (singleton)
import Hasmin.Types.Class
import Hasmin.Types.PercentageLength
data Auto = Auto
deriving (Eq, Show)
instance ToText Auto where
toBuilder Auto = "auto"
data BgSize = Cover
| Contain
| BgSize (Either PercentageLength Auto) (Maybe (Either PercentageLength Auto))
deriving (Eq, Show)
instance ToText BgSize where
toBuilder Cover = "cover"
toBuilder Contain = "contain"
toBuilder (BgSize x y) = toBuilder x <> maybe mempty (\a -> singleton ' ' <> toBuilder a) y
instance Minifiable BgSize where
minifyWith (BgSize x y) = do
conf <- ask
nx <- minFirst x
ny <- mapM minFirst y
let b = BgSize nx ny
pure $ if True
then minifyBgSize b
else b
where minFirst (Left a) = Left <$> minifyWith a
minFirst (Right Auto) = pure (Right Auto)
minifyWith x = pure x
minifyBgSize :: BgSize -> BgSize
minifyBgSize (BgSize l (Just (Right Auto))) = BgSize l Nothing
minifyBgSize x = x