{-# LANGUAGE FlexibleInstances #-} 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