module Web.Alert.Renderer.Common
( renderAlerts
) where
import Data.Maybe
import Data.Text.Lazy hiding (intersperse)
import Data.Monoid
import Data.List (intersperse)
import Data.Foldable (fold)
import Text.Blaze.Html
import Text.Blaze.Html.Renderer.Text
import qualified Text.Blaze.Html5 as H
import qualified Text.Blaze.Html5.Attributes as A
import Web.Alert
renderAlerts
:: AttributeValue
-> [AttributeValue]
-> Maybe Attribute
-> Maybe Html
-> (AlertStatus -> AttributeValue)
-> [Alert]
-> Text
renderAlerts _ _ _ _ _ [] = mempty
renderAlerts baseClass extraClass mAttr mInternal clases msgs =
renderHtml $ foldMap makeDivs msgs
where
attr = fromMaybe mempty mAttr
internal = fromMaybe mempty mInternal
extras = fold $ intersperse " " extraClass
makeDivs (Alert stat msg) =
H.div
! attr
! A.class_ (baseClass <> " " <> (clases stat) <> " " <> extras)
$ internal <> (toHtml msg)