module Text.HTML.Moe2.Element where
import Text.HTML.Moe2.Type
import Text.HTML.Moe2.Utils
import Data.Default
import Control.Monad.Writer
import Prelude hiding (id, span, div, head, (>), (.), ())
import Air.Light ((), first)
import Data.DList (singleton, toList)
import Data.Maybe (fromMaybe)
element :: String -> MoeCombinator
element x u = tell singleton
def
{
name = pack escape x
, elements = toList execWriter u
}
(!) :: (MoeUnit -> MoeUnit) -> [Attribute] -> (MoeUnit -> MoeUnit)
(!) = add_attributes
infixl 1 !
add_attributes :: (MoeUnit -> MoeUnit) -> [Attribute] -> (MoeUnit -> MoeUnit)
add_attributes f xs = \u ->
let r = f u
in
tell singleton Attributes xs fromMaybe def first toList execWriter r
e :: String -> MoeCombinator
e = element
no_indent_element :: String -> MoeCombinator
no_indent_element x u = tell singleton
def
{
name = pack x
, elements = toList execWriter u
, indent = False
}
ne :: String -> MoeCombinator
ne = no_indent_element
self_close_element :: String -> LightCombinator
self_close_element x _ = tell singleton
def
{
name = pack escape x
, self_close = True
}
sc :: String -> LightCombinator
sc = self_close_element
no_escape_no_indent_str :: String -> MoeUnit
no_escape_no_indent_str = raw
escape_no_indent_str :: String -> MoeUnit
escape_no_indent_str = _pre
no_escape_indent_str :: String -> MoeUnit
no_escape_indent_str = prim
str, raw, _pre, prim :: String -> MoeUnit
str x = tell singleton Data (pack escape x)
raw x = tell singleton Raw (pack x)
_pre x = tell singleton Pre (pack escape x)
prim x = tell singleton Prim (pack x)
raw_bytestring, prim_bytestring :: Internal -> MoeUnit
raw_bytestring x = tell singleton Raw x
prim_bytestring x = tell singleton Prim x