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 #-}
|
|
|
|
|
|
|
|
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]
|
|
|
|
selectNavBar = ifM (inFirstRun) (return firstRunNavBar, return defaultNavBar)
|
|
|
|
|
|
|
|
{- 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
|
|
|
|
sideBarDisplay
|
|
|
|
content
|
|
|
|
|
|
|
|
{- A custom page, with no title or sidebar set. -}
|
2013-06-27 05:15:28 +00:00
|
|
|
customPage :: Maybe NavBarItem -> Widget -> Handler Html
|
2012-11-25 04:26:46 +00:00
|
|
|
customPage navbaritem content = do
|
|
|
|
webapp <- getYesod
|
|
|
|
navbar <- map navdetails <$> selectNavBar
|
|
|
|
pageinfo <- widgetToPageContent $ do
|
|
|
|
addStylesheet $ StaticR css_bootstrap_css
|
|
|
|
addStylesheet $ StaticR css_bootstrap_responsive_css
|
|
|
|
addScript $ StaticR jquery_full_js
|
|
|
|
addScript $ StaticR js_bootstrap_dropdown_js
|
|
|
|
addScript $ StaticR js_bootstrap_modal_js
|
2012-12-03 02:33:30 +00:00
|
|
|
addScript $ StaticR js_bootstrap_collapse_js
|
2012-11-25 04:26:46 +00:00
|
|
|
$(widgetFile "page")
|
2013-06-27 05:15:28 +00:00
|
|
|
giveUrlRenderer $(Hamlet.hamletFile $ hamletTemplate "bootstrap")
|
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
|
|
|
|
|
|
|
controlMenu :: Widget
|
|
|
|
controlMenu = $(widgetFile "controlmenu")
|