2012-11-25 04:26:46 +00:00
|
|
|
{- git-annex assistant webapp page display
|
|
|
|
-
|
|
|
|
- Copyright 2012 Joey Hess <joey@kitenet.net>
|
|
|
|
-
|
|
|
|
- Licensed under the GNU AGPL version 3 or higher.
|
|
|
|
-}
|
|
|
|
|
2013-12-03 17:41:23 +00:00
|
|
|
{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes, CPP #-}
|
2012-11-25 04:26:46 +00:00
|
|
|
|
|
|
|
module Assistant.WebApp.Page where
|
|
|
|
|
|
|
|
import Assistant.Common
|
|
|
|
import Assistant.WebApp
|
|
|
|
import Assistant.WebApp.Types
|
|
|
|
import Assistant.WebApp.SideBar
|
|
|
|
import Utility.Yesod
|
|
|
|
|
2013-06-27 05:15:28 +00:00
|
|
|
import qualified Text.Hamlet as Hamlet
|
2012-11-25 04:26:46 +00:00
|
|
|
import Data.Text (Text)
|
|
|
|
|
2013-03-15 04:34:42 +00:00
|
|
|
data NavBarItem = DashBoard | Configuration | About
|
2013-03-13 01:51:03 +00:00
|
|
|
deriving (Eq, Ord, Enum, Bounded)
|
2012-11-25 04:26:46 +00:00
|
|
|
|
|
|
|
navBarName :: NavBarItem -> Text
|
|
|
|
navBarName DashBoard = "Dashboard"
|
2012-12-30 03:10:18 +00:00
|
|
|
navBarName Configuration = "Configuration"
|
2012-11-25 04:26:46 +00:00
|
|
|
navBarName About = "About"
|
|
|
|
|
|
|
|
navBarRoute :: NavBarItem -> Route WebApp
|
2013-03-13 02:18:36 +00:00
|
|
|
navBarRoute DashBoard = DashboardR
|
2012-12-30 03:10:18 +00:00
|
|
|
navBarRoute Configuration = ConfigurationR
|
2012-11-25 04:26:46 +00:00
|
|
|
navBarRoute About = AboutR
|
|
|
|
|
|
|
|
defaultNavBar :: [NavBarItem]
|
2013-03-13 01:51:03 +00:00
|
|
|
defaultNavBar = [minBound .. maxBound]
|
2012-11-25 04:26:46 +00:00
|
|
|
|
|
|
|
firstRunNavBar :: [NavBarItem]
|
2012-12-30 03:10:18 +00:00
|
|
|
firstRunNavBar = [Configuration, About]
|
2012-11-25 04:26:46 +00:00
|
|
|
|
|
|
|
selectNavBar :: Handler [NavBarItem]
|
2013-10-02 05:06:59 +00:00
|
|
|
selectNavBar = ifM inFirstRun (return firstRunNavBar, return defaultNavBar)
|
2012-11-25 04:26:46 +00:00
|
|
|
|
|
|
|
{- A standard page of the webapp, with a title, a sidebar, and that may
|
|
|
|
- be highlighted on the navbar. -}
|
2013-06-27 05:15:28 +00:00
|
|
|
page :: Hamlet.Html -> Maybe NavBarItem -> Widget -> Handler Html
|
2012-11-25 04:26:46 +00:00
|
|
|
page title navbaritem content = customPage navbaritem $ do
|
|
|
|
setTitle title
|
|
|
|
content
|
2013-10-21 22:05:52 +00:00
|
|
|
sideBarDisplay
|
2012-11-25 04:26:46 +00:00
|
|
|
|
|
|
|
{- A custom page, with no title or sidebar set. -}
|
2013-06-27 05:15:28 +00:00
|
|
|
customPage :: Maybe NavBarItem -> Widget -> Handler Html
|
2013-11-23 20:21:09 +00:00
|
|
|
customPage = customPage' True
|
|
|
|
|
|
|
|
customPage' :: Bool -> Maybe NavBarItem -> Widget -> Handler Html
|
|
|
|
customPage' with_longpolling navbaritem content = do
|
2012-11-25 04:26:46 +00:00
|
|
|
webapp <- getYesod
|
2013-11-17 18:58:35 +00:00
|
|
|
case cannotRun webapp of
|
|
|
|
Nothing -> do
|
|
|
|
navbar <- map navdetails <$> selectNavBar
|
|
|
|
pageinfo <- widgetToPageContent $ do
|
2014-04-07 17:37:03 +00:00
|
|
|
addStylesheet $ StaticR css_bootstrap_css
|
|
|
|
addStylesheet $ StaticR css_bootstrap_theme_css
|
|
|
|
addScript $ StaticR js_jquery_full_js
|
|
|
|
addScript $ StaticR js_bootstrap_js
|
2013-11-23 20:21:09 +00:00
|
|
|
when with_longpolling $
|
2014-04-07 17:37:03 +00:00
|
|
|
addScript $ StaticR js_longpolling_js
|
2013-11-17 18:58:35 +00:00
|
|
|
$(widgetFile "page")
|
2014-10-24 00:26:46 +00:00
|
|
|
withUrlRenderer $(Hamlet.hamletFile $ hamletTemplate "bootstrap")
|
2013-11-17 18:58:35 +00:00
|
|
|
Just msg -> error msg
|
2012-11-25 04:26:46 +00:00
|
|
|
where
|
|
|
|
navdetails i = (navBarName i, navBarRoute i, Just i == navbaritem)
|
2013-03-16 04:12:28 +00:00
|
|
|
|
2013-12-03 17:41:23 +00:00
|
|
|
hasFileBrowser :: Bool
|
|
|
|
#ifdef ANDROID_SPLICES
|
|
|
|
hasFileBrowser = False
|
|
|
|
#else
|
|
|
|
hasFileBrowser = True
|
|
|
|
#endif
|
|
|
|
|
2013-03-16 04:12:28 +00:00
|
|
|
controlMenu :: Widget
|
|
|
|
controlMenu = $(widgetFile "controlmenu")
|