summaryrefslogtreecommitdiff
path: root/Assistant/Threads/WebApp.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Assistant/Threads/WebApp.hs')
-rw-r--r--Assistant/Threads/WebApp.hs53
1 files changed, 38 insertions, 15 deletions
diff --git a/Assistant/Threads/WebApp.hs b/Assistant/Threads/WebApp.hs
index d9b648831..4e6fea6b1 100644
--- a/Assistant/Threads/WebApp.hs
+++ b/Assistant/Threads/WebApp.hs
@@ -13,38 +13,69 @@ import Assistant.Common
import Assistant.ThreadedMonad
import Assistant.DaemonStatus
import Utility.WebApp
+import Utility.Yesod
+import Git
import Yesod
+import Yesod.Static
import Text.Hamlet
import Network.Socket (PortNumber)
import Text.Blaze.Renderer.Utf8
import Data.ByteString.Lazy as L
-data WebApp = WebApp DaemonStatusHandle
+data WebApp = WebApp
+ { daemonStatus :: DaemonStatusHandle
+ , baseTitle :: String
+ , getStatic :: Static
+ }
+
+staticFiles "static"
mkYesod "WebApp" [parseRoutes|
+/static StaticR Static getStatic
/ HomeR GET
/config ConfigR GET
|]
-instance Yesod WebApp
+instance Yesod WebApp where
+ defaultLayout contents = do
+ page <- widgetToPageContent contents
+ mmsg <- getMessage
+ webapp <- getYesod
+ hamletToRepHtml $(hamletFile $ hamletTemplate "default-layout")
getHomeR :: Handler RepHtml
-getHomeR = defaultLayout [whamlet|Hello, World<p><a href=@{ConfigR}>config|]
+getHomeR = defaultLayout $ do
+ [whamlet|Hello, World<p><a href=@{ConfigR}>config|]
getConfigR :: Handler RepHtml
-getConfigR = defaultLayout [whamlet|<a href=@{HomeR}>main|]
+getConfigR = defaultLayout $ do
+ setTitle "configuration"
+ [whamlet|<a href=@{HomeR}>main|]
webAppThread :: ThreadState -> DaemonStatusHandle -> IO ()
webAppThread st dstatus = do
+ webapp <- mkWebApp st dstatus
app <- toWaiApp webapp
app' <- ifM debugEnabled
( return $ httpDebugLogger app
, return app
)
runWebApp app' $ \port -> runThreadState st $ writeHtmlShim port
- where
- webapp = WebApp dstatus
+
+mkWebApp :: ThreadState -> DaemonStatusHandle -> IO WebApp
+mkWebApp st dstatus = do
+ dir <- absPath =<< runThreadState st (fromRepo repoPath)
+ home <- myHomeDir
+ let reldir = if dirContains home dir
+ then relPathDirToFile home dir
+ else dir
+ let s = $(embed "static")
+ return $ WebApp
+ { daemonStatus = dstatus
+ , baseTitle = reldir
+ , getStatic = s
+ }
{- Creates a html shim file that's used to redirect into the webapp. -}
writeHtmlShim :: PortNumber -> Annex ()
@@ -54,14 +85,6 @@ writeHtmlShim port = do
{- TODO: generate this static file using Yesod. -}
genHtmlShim :: PortNumber -> L.ByteString
-genHtmlShim port = renderHtml [shamlet|
-$doctype 5
-<html>
- <head>
- <meta http-equiv="refresh" content="0; URL=#{url}">
- <body>
- <p>
- <a href=#{url}">Starting webapp...
-|]
+genHtmlShim port = renderHtml $(shamletFile $ hamletTemplate "htmlshim")
where
url = "http://localhost:" ++ show port ++ "/"