module Data.Markup.Library where
import Data.Markup.Class
import UrlPath
import qualified Lucid as L
import qualified Lucid.Base as LBase
import qualified Text.Blaze.Html5 as H
import qualified Text.Blaze.Html5.Attributes as A
import qualified Text.Blaze.Internal as HI
import qualified Data.Text as T
import qualified Data.Text.Lazy as LT
import Data.Monoid
import Control.Monad.Trans
data Image = Image deriving (Show, Eq)
data JavaScript = JavaScript deriving (Show, Eq)
instance Monad m =>
HostedMarkup (LBase.HtmlT m ()) Image T.Text where
renderHosted Image t =
L.img_ [L.src_ t]
instance ( Monad m
, Url input m ) =>
LocalMarkup (LBase.HtmlT m ()) Image input where
renderLocal Image t = do
url <- lift $ renderUrl t
L.img_ [L.src_ url]
instance Monad m =>
InlineMarkup (LBase.HtmlT m ()) JavaScript T.Text where
renderInline JavaScript t =
L.script_ [] t
instance Monad m =>
InlineMarkup (LBase.HtmlT m ()) JavaScript LT.Text where
renderInline JavaScript t =
L.script_ [] t
instance Monad m =>
HostedMarkup (LBase.HtmlT m ()) JavaScript T.Text where
renderHosted JavaScript t =
L.script_ [L.src_ t] ("" :: T.Text)
instance ( Monad m
, Url input m ) =>
LocalMarkup (LBase.HtmlT m ()) JavaScript input where
renderLocal JavaScript t = do
url <- lift $ renderUrl t
L.script_ [L.src_ url] ("" :: T.Text)
instance H.ToValue a =>
HostedMarkup (HI.MarkupM ()) Image a where
renderHosted Image t =
H.img H.! A.src (H.toValue t)
instance Url input HI.MarkupM =>
LocalMarkup (HI.MarkupM ()) Image input where
renderLocal Image t = do
url <- renderUrl t
H.img H.! A.src (H.toValue url)
instance H.ToMarkup a =>
InlineMarkup (HI.MarkupM ()) JavaScript a where
renderInline JavaScript t =
H.script (H.toMarkup t)
instance H.ToValue a =>
HostedMarkup (HI.MarkupM ()) JavaScript a where
renderHosted JavaScript t =
(H.script H.! A.src (H.toValue t)) HI.Empty
instance Url input HI.MarkupM =>
LocalMarkup (HI.MarkupM ()) JavaScript input where
renderLocal JavaScript t = do
url <- renderUrl t
(H.script H.! A.src (H.toValue url)) HI.Empty