diff --git a/src/Shift/Server.hs b/src/Shift/Server.hs index 0e69ee400e0ad33b1bb910e535d125cfe60b28e8..3eaff0d12b153c88a39ae65ab3a67046bfc18d90 100644 --- a/src/Shift/Server.hs +++ b/src/Shift/Server.hs @@ -1,16 +1,22 @@ {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE ScopedTypeVariables #-} module Shift.Server (runServer) where -import Web.Scotty (scotty, get, param, html) +import CMarkGFM (commonmarkToHtml, nodeToCommonmark, nodeToHtml) +import Control.Monad.IO.Class (MonadIO (liftIO)) +import Data.Text.Lazy (fromChunks) import Shift.CLI (ShiftOptions) import Shift.Git (renderToNode) -import Control.Monad.IO.Class (MonadIO(liftIO)) -import CMarkGFM (nodeToHtml, nodeToHtml, commonmarkToHtml) -import Data.Text.Lazy (fromChunks) +import Web.Scotty (rescue, rescue, get, html, param, scotty, text) runServer :: ShiftOptions -> IO () runServer options = scotty 3000 $ - get "/" $ do - node <- liftIO $ renderToNode options - html $ fromChunks [nodeToHtml [] [] node] + get "/" $ do + (asMarkdown :: Bool) <- param "as_markdown" `rescue` (\_ -> pure False) + + node <- liftIO $ renderToNode options + + if asMarkdown + then text $ fromChunks [nodeToCommonmark [] Nothing node] + else html $ fromChunks [nodeToHtml [] [] node]