{-# LANGUAGE OverloadedStrings #-}

module Blizzard.Internal.Html
    ( documentTag
    , normalTag
    , voidTag
    ) where


import Data.Maybe (catMaybes)
import Data.Text (Text)
import Text.Blaze.Html


documentTag :: (Html -> Html) -> [Html] -> Html
documentTag :: (Html -> Html) -> [Html] -> Html
documentTag Html -> Html
element []       = Html -> Html
element (Html -> Html) -> Html -> Html
forall a b. (a -> b) -> a -> b
$ Text -> Html
forall a. ToMarkup a => a -> Html
toHtml (Text
"" :: Text)
documentTag Html -> Html
element [Html]
children = Html -> Html
element (Html -> Html) -> Html -> Html
forall a b. (a -> b) -> a -> b
$ (Html -> Html -> Html) -> [Html] -> Html
forall (t :: * -> *) a. Foldable t => (a -> a -> a) -> t a -> a
foldl1 Html -> Html -> Html
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) [Html]
children


normalTag :: (Html -> Html) -> [Maybe Attribute] -> [Html] -> Html
normalTag :: (Html -> Html) -> [Maybe Attribute] -> [Html] -> Html
normalTag Html -> Html
element [Maybe Attribute]
attributes []       = ((Html -> Html) -> Attribute -> Html -> Html)
-> (Html -> Html) -> [Attribute] -> Html -> Html
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (!) Html -> Html
element ([Maybe Attribute] -> [Attribute]
forall a. [Maybe a] -> [a]
catMaybes [Maybe Attribute]
attributes) (Html -> Html) -> Html -> Html
forall a b. (a -> b) -> a -> b
$ Text -> Html
forall a. ToMarkup a => a -> Html
toHtml (Text
"" :: Text)
normalTag Html -> Html
element [Maybe Attribute]
attributes [Html]
children = ((Html -> Html) -> Attribute -> Html -> Html)
-> (Html -> Html) -> [Attribute] -> Html -> Html
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (!) Html -> Html
element ([Maybe Attribute] -> [Attribute]
forall a. [Maybe a] -> [a]
catMaybes [Maybe Attribute]
attributes) (Html -> Html) -> Html -> Html
forall a b. (a -> b) -> a -> b
$ (Html -> Html -> Html) -> [Html] -> Html
forall (t :: * -> *) a. Foldable t => (a -> a -> a) -> t a -> a
foldl1 Html -> Html -> Html
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) [Html]
children


voidTag :: Html -> [Maybe Attribute] -> Html
voidTag :: Html -> [Maybe Attribute] -> Html
voidTag Html
element [Maybe Attribute]
attributes = (Html -> Attribute -> Html) -> Html -> [Attribute] -> Html
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (!) Html
element ([Maybe Attribute] -> [Attribute]
forall a. [Maybe a] -> [a]
catMaybes [Maybe Attribute]
attributes)