{-# LANGUAGE TypeSynonymInstances #-} module Text.BluePrintCSS.Attr where import Text.BluePrintCSS.Base data BoxStyle = Box | Error | Notice | Success deriving(Show) data Attr = Decoration BoxStyle | Append Int | Prepend Int | ShowGrid | ColBorder deriving(Show) type Attrs = [Attr] toCssClass :: Attr -> String toCssClass (Decoration Error) = "error" toCssClass (Decoration Notice) = "notice" toCssClass (Decoration Success) = "success" toCssClass (Decoration Box) = "box" toCssClass ShowGrid = "showgrid" toCssClass (Append x) = "append-"++show(x) toCssClass (Prepend x) = "prepend-"++show(x) toCssClass (ColBorder) = "colborder" margin :: Attr -> Int margin (Decoration _) = 1 margin (ColBorder) = 1 margin (Append x) = x margin (Prepend x) = x margin _ = 0 instance AsCssClass Attrs where asCssClass = map toCssClass instance AsMargin Attrs where smargin = sum . map margin