module DSS.Html where
import Control.Monad
import DSS.Parser
import Text.Html ( stringToHtmlString )
import Text.Blaze
import Text.Blaze.Html5
import Text.Blaze.Html5.Attributes
instance ToMarkup ( String , Discussion ) where
toMarkup ( baseUrl , Discussion opinion basiss claim ) = do
toMarkup ( baseUrl , opinion )
toMarkup ( baseUrl , basiss )
toMarkup ( baseUrl , claim )
instance ToMarkup ( String , Maybe Expression ) where
toMarkup ( baseUrl , Just expr ) = h1 $ do
toMarkup "to "
toMarkup ( baseUrl , expr )
toMarkup ( _ , Nothing ) = h1 $ do
toMarkup "Begin discussion"
instance ToMarkup ( String , Basiss ) where
toMarkup ( baseUrl , Basiss pairs ) = p $ do
toMarkup "My basis's is "
ul $ do
mapM_ ( toMarkup . ( , ) baseUrl ) pairs
instance ToMarkup ( String ,( Maybe Label , Basis ) ) where
toMarkup ( baseUrl , ( Just l , b ) ) = li ! ( \ ( Label s ) -> Text.Blaze.Html5.Attributes.id $ toValue . stringToHtmlString $ s ) l $ do
a ! href ( ( \ ( Label s ) -> toValue . stringToHtmlString $ s ) l ) $ ( ( \ ( Label s ) -> toMarkup . stringToHtmlString $ s ) l )
br
toMarkup ( baseUrl , b )
toMarkup ( baseUrl , ( Nothing , b ) ) = li $ do
toMarkup ( baseUrl , b )
instance ToMarkup ( String , Basis ) where
toMarkup ( _ , UrlBasis ( Url s ) ) = a ! href ( toValue $ stringToHtmlString s ) $ toMarkup $ stringToHtmlString s
toMarkup ( _ , BookBasis ( Book ( Isbn isbn ) pages ) ) = do
toMarkup $ "book of ISBN " ++ stringToHtmlString isbn
br
maybe ( toMarkup "" ) ( \ ( Pages ps ) -> do
br
toMarkup $ "pages of " ++ stringToHtmlString ( concat ( show ( Prelude.head ps ) : [ ',' : show s | s <- tail ps ] ) ) ) pages
toMarkup ( baseUrl , QuoteBasis ( Quote exprs ) ) = toMarkup $ mapM_ ( toMarkup . ( , ) baseUrl ) exprs
instance ToMarkup ( String , ExpressionString ) where
toMarkup ( _ , StringExpression s ) = toMarkup s
toMarkup ( baseUrl , ( QuoteExpression expr ) ) = toMarkup ( baseUrl , expr )
instance ToMarkup ( String , Expression ) where
toMarkup ( baseUrl , Expression [ name , discussion ] ) = a ! href ( toValue $ stringToHtmlString ( baseUrl ++ '/' : name ++ '/' : discussion ) ) $ toMarkup $ stringToHtmlString ( name ++ '.' : discussion )
toMarkup ( baseUrl , Expression [ name , discussion , label ] ) = a ! href ( toValue $ stringToHtmlString ( baseUrl ++ '/' : name ++ '/' : discussion ++ '#' : label ) ) $ toMarkup $ stringToHtmlString ( name ++ '.' : discussion ++ '.' : label )
instance ToMarkup ( String , Claim ) where
toMarkup ( baseUrl , Claim exprs ) = do
toMarkup "My claim is"
br
strong $ do
mapM_ ( toMarkup . ( , ) baseUrl ) exprs