git-annex/Assistant/WebApp/Page.hs

85 lines
2.5 KiB
Haskell
Raw Normal View History

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.
-}
{-# 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
import qualified Text.Hamlet as Hamlet
2012-11-25 04:26:46 +00:00
import Data.Text (Text)
data NavBarItem = DashBoard | Configuration | About
deriving (Eq, Ord, Enum, Bounded)
2012-11-25 04:26:46 +00:00
navBarName :: NavBarItem -> Text
navBarName DashBoard = "Dashboard"
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
navBarRoute Configuration = ConfigurationR
2012-11-25 04:26:46 +00:00
navBarRoute About = AboutR
defaultNavBar :: [NavBarItem]
defaultNavBar = [minBound .. maxBound]
2012-11-25 04:26:46 +00:00
firstRunNavBar :: [NavBarItem]
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. -}
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
sideBarDisplay
2012-11-25 04:26:46 +00:00
{- A custom page, with no title or sidebar set. -}
customPage :: Maybe NavBarItem -> Widget -> Handler Html
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
addStylesheet $ StaticR bootstrap_css
addStylesheet $ StaticR bootstrap_responsive_css
2013-11-17 18:58:35 +00:00
addScript $ StaticR jquery_full_js
addScript $ StaticR bootstrap_dropdown_js
addScript $ StaticR bootstrap_modal_js
addScript $ StaticR bootstrap_collapse_js
when with_longpolling $
addScript $ StaticR longpolling_js
2013-11-17 18:58:35 +00:00
$(widgetFile "page")
giveUrlRenderer $(Hamlet.hamletFile $ hamletTemplate "bootstrap")
Just msg -> error msg
2012-11-25 04:26:46 +00:00
where
navdetails i = (navBarName i, navBarRoute i, Just i == navbaritem)
hasFileBrowser :: Bool
#ifdef ANDROID_SPLICES
hasFileBrowser = False
#else
hasFileBrowser = True
#endif
controlMenu :: Widget
controlMenu = $(widgetFile "controlmenu")