{-# LANGUAGE FlexibleContexts, TypeFamilies #-} {-# OPTIONS -F -pgmFhsx2hs #-} {-# OPTIONS -Wall -Werror #-} {-# OPTIONS -fno-warn-orphans -fno-warn-name-shadowing #-} module Scaffolding.ProfileData.Markup where import Control.Monad.Trans (MonadIO) import qualified Data.Text.Lazy as TL import Happstack.Auth.Core.Profile (UserId(..)) import HSP (GenXML, XMLGenerator, EmbedAsAttr(..), StringType, genElement, asChild, Attr((:=)), asAttr, fromStringLit) import Scaffolding.MkURL (MkURL(userURL)) import Scaffolding.ProfileData.User (MonadUserName, userName) import Web.Routes (showURL) import Web.Routes.RouteT (MonadRoute, URL) userMarkup :: (MonadRoute m, MonadUserName m, MkURL (URL m), MonadIO m, XMLGenerator m, EmbedAsAttr m (Attr TL.Text TL.Text), StringType m ~ TL.Text) => UserId -> GenXML m userMarkup u = do name <- userName u link <- userLink u <% link %>:<% either (TL.pack . show) TL.fromStrict name %> userLink :: (MonadRoute m, MonadUserName m, MkURL (URL m), XMLGenerator m, EmbedAsAttr m (Attr TL.Text TL.Text), StringType m ~ TL.Text) => UserId -> GenXML m userLink u = do url <- showURL (userURL u) U<% TL.pack $ show (unUserId u) %>