{-# LANGUAGE BangPatterns #-} {-# LANGUAGE OverloadedStrings #-} {-# OPTIONS_GHC -Wall #-} module Bootstrap.V3 ( Context(..) , Size(..) , Column(..) , Flow(..) , Panel(..) , NavbarTheme(..) , NavbarPosition(..) , NavbarItem(..) , NavbarDropdownItem(..) , contextClass , sizeClass , columnClass , buttonClass , navbarThemeClass , navbarPositionClass , emptyColumn , singletonColumn ) where import Data.Text (Text) import Data.Monoid import qualified Data.Text as Text data NavbarTheme = NavbarThemeDefault | NavbarThemeInverse | NavbarThemeOther Text data NavbarPosition = NavbarPositionStandard | NavbarPositionStatic | NavbarPositionFixed data NavbarItem r c = NavbarItemLink r c | NavbarItemDropdown c [NavbarDropdownItem r c] data NavbarDropdownItem r c = NavbarDropdownItemLink r c | NavbarDropdownItemHeader c | NavbarDropdownItemSeparator data Context = Success | Info | Warning | Danger | Default | Primary | Link | Error data Size = ExtraSmall | Small | Medium | Large deriving (Eq,Ord) data Column = Column { columnsExtraSmall :: !Int , columnsSmall :: !Int , columnsMedium :: !Int , columnsLarge :: !Int } data Flow = Block | Inline data Panel c = Panel { panelTitle :: !c , panelBody :: !c , panelContext :: !Context } contextClass :: Context -> Text contextClass x = case x of Success -> "success" Info -> "info" Warning -> "warning" Default -> "default" Primary -> "primary" Link -> "link" Error -> "error" Danger -> "danger" sizeClass :: Size -> Text sizeClass x = case x of ExtraSmall -> "xs" Small -> "sm" Medium -> "md" Large -> "lg" columnClass :: Column -> Text columnClass (Column xs sm md lg) = Text.concat [ "col-xs-",Text.pack (show xs) , " col-sm-",Text.pack (show sm) , " col-md-",Text.pack (show md) , " col-lg-",Text.pack (show lg) ] emptyColumn :: Column emptyColumn = Column 12 12 12 12 singletonColumn :: Size -> Int -> Column singletonColumn sz i = Column (if sz >= ExtraSmall then i else 12) (if sz >= Small then i else 12) (if sz >= Medium then i else 12) (if sz >= Large then i else 12) buttonClass :: Context -> Size -> Text buttonClass ctx size = Text.concat [ "btn btn-" , contextClass ctx , " btn-" , sizeClass size ] navbarThemeClass :: NavbarTheme -> Text navbarThemeClass x = case x of NavbarThemeDefault -> "navbar-default" NavbarThemeInverse -> "navbar-inverse" NavbarThemeOther t -> "navbar-" <> t navbarPositionClass :: NavbarPosition -> Text navbarPositionClass x = case x of NavbarPositionStandard -> "" NavbarPositionStatic -> "navbar-static-top" NavbarPositionFixed -> "navbar-fixed-top" -- setColumns :: Size -> Int -> Column -> Column -- setColumns sz i (Column xs sm md lg) = Column