{-# LANGUAGE FlexibleContexts #-}
module Network.Gitit.Layout ( defaultPageLayout
, defaultRenderPage
, formattedPage
, filledPageTemplate
, uploadsAllowed
)
where
import Network.Gitit.Server
import Network.Gitit.Framework
import Network.Gitit.State
import Network.Gitit.Types
import Network.HTTP (urlEncodeVars)
import qualified Text.StringTemplate as T
import Text.XHtml hiding ( (</>), dir, method, password, rev )
import Text.XHtml.Strict ( stringToHtmlString )
import Data.Maybe (isNothing)
defaultPageLayout :: PageLayout
defaultPageLayout :: PageLayout
defaultPageLayout = PageLayout :: String
-> Maybe String
-> Bool
-> [String]
-> String
-> [String]
-> Bool
-> Bool
-> Maybe Text
-> [Tab]
-> Tab
-> Bool
-> PageLayout
PageLayout
{ pgPageName :: String
pgPageName = String
""
, pgRevision :: Maybe String
pgRevision = Maybe String
forall a. Maybe a
Nothing
, pgPrintable :: Bool
pgPrintable = Bool
False
, pgMessages :: [String]
pgMessages = []
, pgTitle :: String
pgTitle = String
""
, pgScripts :: [String]
pgScripts = []
, pgShowPageTools :: Bool
pgShowPageTools = Bool
True
, pgShowSiteNav :: Bool
pgShowSiteNav = Bool
True
, pgMarkupHelp :: Maybe Text
pgMarkupHelp = Maybe Text
forall a. Maybe a
Nothing
, pgTabs :: [Tab]
pgTabs = [Tab
ViewTab, Tab
EditTab, Tab
HistoryTab, Tab
DiscussTab]
, pgSelectedTab :: Tab
pgSelectedTab = Tab
ViewTab
, pgLinkToFeed :: Bool
pgLinkToFeed = Bool
False
}
formattedPage :: PageLayout -> Html -> Handler
formattedPage :: PageLayout -> Html -> Handler
formattedPage PageLayout
layout Html
htmlContents = do
PageLayout -> Html -> Handler
renderer <- (GititState -> PageLayout -> Html -> Handler)
-> ServerPartT
(ReaderT WikiState IO) (PageLayout -> Html -> Handler)
forall (m :: * -> *) a. MonadIO m => (GititState -> a) -> m a
queryGititState GititState -> PageLayout -> Html -> Handler
renderPage
PageLayout -> Html -> Handler
renderer PageLayout
layout Html
htmlContents
defaultRenderPage :: T.StringTemplate String -> PageLayout -> Html -> Handler
defaultRenderPage :: StringTemplate String -> PageLayout -> Html -> Handler
defaultRenderPage StringTemplate String
templ PageLayout
layout Html
htmlContents = do
Config
cfg <- GititServerPart Config
getConfig
String
base' <- ServerPartT (ReaderT WikiState IO) String
forall (m :: * -> *). ServerMonad m => m String
getWikiBase
Response -> Handler
forall (m :: * -> *) a. FilterMonad Response m => a -> m a
ok (Response -> Handler)
-> (StringTemplate String -> Response)
-> StringTemplate String
-> Handler
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Response -> Response
setContentType String
"text/html; charset=utf-8" (Response -> Response)
-> (StringTemplate String -> Response)
-> StringTemplate String
-> Response
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Response
forall a. ToMessage a => a -> Response
toResponse (String -> Response)
-> (StringTemplate String -> String)
-> StringTemplate String
-> Response
forall b c a. (b -> c) -> (a -> b) -> a -> c
. StringTemplate String -> String
forall a. Stringable a => StringTemplate a -> a
T.render (StringTemplate String -> String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String
-> Config
-> PageLayout
-> Html
-> StringTemplate String
-> StringTemplate String
filledPageTemplate String
base' Config
cfg PageLayout
layout Html
htmlContents (StringTemplate String -> Handler)
-> StringTemplate String -> Handler
forall a b. (a -> b) -> a -> b
$ StringTemplate String
templ
filledPageTemplate :: String -> Config -> PageLayout -> Html ->
T.StringTemplate String -> T.StringTemplate String
filledPageTemplate :: String
-> Config
-> PageLayout
-> Html
-> StringTemplate String
-> StringTemplate String
filledPageTemplate String
base' Config
cfg PageLayout
layout Html
htmlContents StringTemplate String
templ =
let rev :: Maybe String
rev = PageLayout -> Maybe String
pgRevision PageLayout
layout
page :: String
page = PageLayout -> String
pgPageName PageLayout
layout
prefixedScript :: String -> String
prefixedScript String
x = case String
x of
Char
'h':Char
't':Char
't':Char
'p':String
_ -> String
x
String
_ -> String
base' String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"/js/" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
x
scripts :: [String]
scripts = [String
"jquery-1.2.6.min.js", String
"jquery-ui-combined-1.6rc2.min.js", String
"footnotes.js"] [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ PageLayout -> [String]
pgScripts PageLayout
layout
scriptLink :: String -> Html
scriptLink String
x = Html -> Html
script (Html -> Html) -> [HtmlAttr] -> Html -> Html
forall a. ADDATTRS a => a -> [HtmlAttr] -> a
! [String -> HtmlAttr
src (String -> String
prefixedScript String
x),
String -> HtmlAttr
thetype String
"text/javascript"] (Html -> Html) -> Html -> Html
forall a b. HTML a => (Html -> b) -> a -> b
<< Html
noHtml
javascriptlinks :: String
javascriptlinks = Html -> String
forall html. HTML html => html -> String
renderHtmlFragment (Html -> String) -> Html -> String
forall a b. (a -> b) -> a -> b
$ [Html] -> Html
forall a. HTML a => [a] -> Html
concatHtml ([Html] -> Html) -> [Html] -> Html
forall a b. (a -> b) -> a -> b
$ (String -> Html) -> [String] -> [Html]
forall a b. (a -> b) -> [a] -> [b]
map String -> Html
scriptLink [String]
scripts
article :: String
article = if String -> Bool
isDiscussPage String
page then Int -> String -> String
forall a. Int -> [a] -> [a]
drop Int
1 String
page else String
page
discussion :: String
discussion = Char
'@'Char -> String -> String
forall a. a -> [a] -> [a]
:String
article
tabli :: Tab -> Html -> Html
tabli Tab
tab = if Tab
tab Tab -> Tab -> Bool
forall a. Eq a => a -> a -> Bool
== PageLayout -> Tab
pgSelectedTab PageLayout
layout
then Html -> Html
li (Html -> Html) -> [HtmlAttr] -> Html -> Html
forall a. ADDATTRS a => a -> [HtmlAttr] -> a
! [String -> HtmlAttr
theclass String
"selected"]
else Html -> Html
li
tabs' :: [Tab]
tabs' = [Tab
x | Tab
x <- PageLayout -> [Tab]
pgTabs PageLayout
layout,
Bool -> Bool
not (Tab
x Tab -> Tab -> Bool
forall a. Eq a => a -> a -> Bool
== Tab
EditTab Bool -> Bool -> Bool
&& String
page String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` Config -> [String]
noEdit Config
cfg)]
tabs :: Html
tabs = Html -> Html
ulist (Html -> Html) -> [HtmlAttr] -> Html -> Html
forall a. ADDATTRS a => a -> [HtmlAttr] -> a
! [String -> HtmlAttr
theclass String
"tabs"] (Html -> Html) -> [Html] -> Html
forall a b. HTML a => (Html -> b) -> a -> b
<< (Tab -> Html) -> [Tab] -> [Html]
forall a b. (a -> b) -> [a] -> [b]
map ((Tab -> Html -> Html)
-> String -> String -> Maybe String -> Tab -> Html
linkForTab Tab -> Html -> Html
tabli String
base' String
page Maybe String
rev) [Tab]
tabs'
setStrAttr :: String -> String -> StringTemplate b -> StringTemplate b
setStrAttr String
attr = String -> String -> StringTemplate b -> StringTemplate b
forall a b.
(ToSElem a, Stringable b) =>
String -> a -> StringTemplate b -> StringTemplate b
T.setAttribute String
attr (String -> StringTemplate b -> StringTemplate b)
-> (String -> String)
-> String
-> StringTemplate b
-> StringTemplate b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String
stringToHtmlString
setBoolAttr :: String -> Bool -> StringTemplate b -> StringTemplate b
setBoolAttr String
attr Bool
test = if Bool
test then String -> String -> StringTemplate b -> StringTemplate b
forall a b.
(ToSElem a, Stringable b) =>
String -> a -> StringTemplate b -> StringTemplate b
T.setAttribute String
attr String
"true" else StringTemplate b -> StringTemplate b
forall a. a -> a
id
in String -> String -> StringTemplate String -> StringTemplate String
forall a b.
(ToSElem a, Stringable b) =>
String -> a -> StringTemplate b -> StringTemplate b
T.setAttribute String
"base" String
base' (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> Bool -> StringTemplate String -> StringTemplate String
forall a b.
(ToSElem a, Stringable b) =>
String -> a -> StringTemplate b -> StringTemplate b
T.setAttribute String
"feed" (PageLayout -> Bool
pgLinkToFeed PageLayout
layout) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> String -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> String -> StringTemplate b -> StringTemplate b
setStrAttr String
"wikititle" (Config -> String
wikiTitle Config
cfg) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> String -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> String -> StringTemplate b -> StringTemplate b
setStrAttr String
"pagetitle" (PageLayout -> String
pgTitle PageLayout
layout) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> String -> StringTemplate String -> StringTemplate String
forall a b.
(ToSElem a, Stringable b) =>
String -> a -> StringTemplate b -> StringTemplate b
T.setAttribute String
"javascripts" String
javascriptlinks (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> String -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> String -> StringTemplate b -> StringTemplate b
setStrAttr String
"pagename" String
page (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> String -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> String -> StringTemplate b -> StringTemplate b
setStrAttr String
"articlename" String
article (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> String -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> String -> StringTemplate b -> StringTemplate b
setStrAttr String
"discussionname" String
discussion (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> String -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> String -> StringTemplate b -> StringTemplate b
setStrAttr String
"pageUrl" (String -> String
urlForPage String
page) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> String -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> String -> StringTemplate b -> StringTemplate b
setStrAttr String
"articleUrl" (String -> String
urlForPage String
article) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> String -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> String -> StringTemplate b -> StringTemplate b
setStrAttr String
"discussionUrl" (String -> String
urlForPage String
discussion) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> Bool -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> Bool -> StringTemplate b -> StringTemplate b
setBoolAttr String
"ispage" (String -> Bool
isPage String
page) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> Bool -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> Bool -> StringTemplate b -> StringTemplate b
setBoolAttr String
"isarticlepage" (String -> Bool
isPage String
page Bool -> Bool -> Bool
&& Bool -> Bool
not (String -> Bool
isDiscussPage String
page)) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> Bool -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> Bool -> StringTemplate b -> StringTemplate b
setBoolAttr String
"isdiscusspage" (String -> Bool
isDiscussPage String
page) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> Bool -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> Bool -> StringTemplate b -> StringTemplate b
setBoolAttr String
"pagetools" (PageLayout -> Bool
pgShowPageTools PageLayout
layout) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> Bool -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> Bool -> StringTemplate b -> StringTemplate b
setBoolAttr String
"sitenav" (PageLayout -> Bool
pgShowSiteNav PageLayout
layout) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
(StringTemplate String -> StringTemplate String)
-> (Text -> StringTemplate String -> StringTemplate String)
-> Maybe Text
-> StringTemplate String
-> StringTemplate String
forall b a. b -> (a -> b) -> Maybe a -> b
maybe StringTemplate String -> StringTemplate String
forall a. a -> a
id (String -> Text -> StringTemplate String -> StringTemplate String
forall a b.
(ToSElem a, Stringable b) =>
String -> a -> StringTemplate b -> StringTemplate b
T.setAttribute String
"markuphelp") (PageLayout -> Maybe Text
pgMarkupHelp PageLayout
layout) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> Bool -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> Bool -> StringTemplate b -> StringTemplate b
setBoolAttr String
"printable" (PageLayout -> Bool
pgPrintable PageLayout
layout) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
(StringTemplate String -> StringTemplate String)
-> (String -> StringTemplate String -> StringTemplate String)
-> Maybe String
-> StringTemplate String
-> StringTemplate String
forall b a. b -> (a -> b) -> Maybe a -> b
maybe StringTemplate String -> StringTemplate String
forall a. a -> a
id (String -> String -> StringTemplate String -> StringTemplate String
forall a b.
(ToSElem a, Stringable b) =>
String -> a -> StringTemplate b -> StringTemplate b
T.setAttribute String
"revision") Maybe String
rev (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
(if [Tab] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (PageLayout -> [Tab]
pgTabs PageLayout
layout) then StringTemplate String -> StringTemplate String
forall a. a -> a
id else String -> String -> StringTemplate String -> StringTemplate String
forall a b.
(ToSElem a, Stringable b) =>
String -> a -> StringTemplate b -> StringTemplate b
T.setAttribute String
"tabs"
(Html -> String
forall html. HTML html => html -> String
renderHtmlFragment Html
tabs)) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
(\[String] -> StringTemplate String -> StringTemplate String
f StringTemplate String -> StringTemplate String
x [String]
xs -> if [String] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
xs then StringTemplate String -> StringTemplate String
x else [String] -> StringTemplate String -> StringTemplate String
f [String]
xs) (String
-> [String] -> StringTemplate String -> StringTemplate String
forall a b.
(ToSElem a, Stringable b) =>
String -> a -> StringTemplate b -> StringTemplate b
T.setAttribute String
"messages") StringTemplate String -> StringTemplate String
forall a. a -> a
id (PageLayout -> [String]
pgMessages PageLayout
layout) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> Bool -> StringTemplate String -> StringTemplate String
forall a b.
(ToSElem a, Stringable b) =>
String -> a -> StringTemplate b -> StringTemplate b
T.setAttribute String
"usecache" (Config -> Bool
useCache Config
cfg) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> String -> StringTemplate String -> StringTemplate String
forall a b.
(ToSElem a, Stringable b) =>
String -> a -> StringTemplate b -> StringTemplate b
T.setAttribute String
"content" (Html -> String
forall html. HTML html => html -> String
renderHtmlFragment Html
htmlContents) (StringTemplate String -> StringTemplate String)
-> (StringTemplate String -> StringTemplate String)
-> StringTemplate String
-> StringTemplate String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> Bool -> StringTemplate String -> StringTemplate String
forall b.
Stringable b =>
String -> Bool -> StringTemplate b -> StringTemplate b
setBoolAttr String
"wikiupload" ( Config -> Bool
uploadsAllowed Config
cfg) (StringTemplate String -> StringTemplate String)
-> StringTemplate String -> StringTemplate String
forall a b. (a -> b) -> a -> b
$
StringTemplate String
templ
linkForTab :: (Tab -> Html -> Html) -> String -> String -> Maybe String -> Tab -> Html
linkForTab :: (Tab -> Html -> Html)
-> String -> String -> Maybe String -> Tab -> Html
linkForTab Tab -> Html -> Html
tabli String
base' String
page Maybe String
_ Tab
HistoryTab =
Tab -> Html -> Html
tabli Tab
HistoryTab (Html -> Html) -> Html -> Html
forall a b. HTML a => (Html -> b) -> a -> b
<< Html -> Html
anchor (Html -> Html) -> [HtmlAttr] -> Html -> Html
forall a. ADDATTRS a => a -> [HtmlAttr] -> a
! [String -> HtmlAttr
href (String -> HtmlAttr) -> String -> HtmlAttr
forall a b. (a -> b) -> a -> b
$ String
base' String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"/_history" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
urlForPage String
page] (Html -> Html) -> String -> Html
forall a b. HTML a => (Html -> b) -> a -> b
<< String
"history"
linkForTab Tab -> Html -> Html
tabli String
_ String
_ Maybe String
_ Tab
DiffTab =
Tab -> Html -> Html
tabli Tab
DiffTab (Html -> Html) -> Html -> Html
forall a b. HTML a => (Html -> b) -> a -> b
<< Html -> Html
anchor (Html -> Html) -> [HtmlAttr] -> Html -> Html
forall a. ADDATTRS a => a -> [HtmlAttr] -> a
! [String -> HtmlAttr
href String
""] (Html -> Html) -> String -> Html
forall a b. HTML a => (Html -> b) -> a -> b
<< String
"diff"
linkForTab Tab -> Html -> Html
tabli String
base' String
page Maybe String
rev Tab
ViewTab =
let origPage :: String -> String
origPage String
s = if String -> Bool
isDiscussPage String
s
then Int -> String -> String
forall a. Int -> [a] -> [a]
drop Int
1 String
s
else String
s
in if String -> Bool
isDiscussPage String
page
then Tab -> Html -> Html
tabli Tab
DiscussTab (Html -> Html) -> Html -> Html
forall a b. HTML a => (Html -> b) -> a -> b
<< Html -> Html
anchor (Html -> Html) -> [HtmlAttr] -> Html -> Html
forall a. ADDATTRS a => a -> [HtmlAttr] -> a
!
[String -> HtmlAttr
href (String -> HtmlAttr) -> String -> HtmlAttr
forall a b. (a -> b) -> a -> b
$ String
base' String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
urlForPage (String -> String
origPage String
page)] (Html -> Html) -> String -> Html
forall a b. HTML a => (Html -> b) -> a -> b
<< String
"page"
else Tab -> Html -> Html
tabli Tab
ViewTab (Html -> Html) -> Html -> Html
forall a b. HTML a => (Html -> b) -> a -> b
<< Html -> Html
anchor (Html -> Html) -> [HtmlAttr] -> Html -> Html
forall a. ADDATTRS a => a -> [HtmlAttr] -> a
!
[String -> HtmlAttr
href (String -> HtmlAttr) -> String -> HtmlAttr
forall a b. (a -> b) -> a -> b
$ String
base' String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
urlForPage String
page String -> String -> String
forall a. [a] -> [a] -> [a]
++
case Maybe String
rev of
Just String
r -> String
"?revision=" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
r
Maybe String
Nothing -> String
""] (Html -> Html) -> String -> Html
forall a b. HTML a => (Html -> b) -> a -> b
<< String
"view"
linkForTab Tab -> Html -> Html
tabli String
base' String
page Maybe String
_ Tab
DiscussTab =
Tab -> Html -> Html
tabli (if String -> Bool
isDiscussPage String
page then Tab
ViewTab else Tab
DiscussTab) (Html -> Html) -> Html -> Html
forall a b. HTML a => (Html -> b) -> a -> b
<<
Html -> Html
anchor (Html -> Html) -> [HtmlAttr] -> Html -> Html
forall a. ADDATTRS a => a -> [HtmlAttr] -> a
! [String -> HtmlAttr
href (String -> HtmlAttr) -> String -> HtmlAttr
forall a b. (a -> b) -> a -> b
$ String
base' String -> String -> String
forall a. [a] -> [a] -> [a]
++ if String -> Bool
isDiscussPage String
page then String
"" else String
"/_discuss" String -> String -> String
forall a. [a] -> [a] -> [a]
++
String -> String
urlForPage String
page] (Html -> Html) -> String -> Html
forall a b. HTML a => (Html -> b) -> a -> b
<< String
"discuss"
linkForTab Tab -> Html -> Html
tabli String
base' String
page Maybe String
rev Tab
EditTab =
Tab -> Html -> Html
tabli Tab
EditTab (Html -> Html) -> Html -> Html
forall a b. HTML a => (Html -> b) -> a -> b
<< Html -> Html
anchor (Html -> Html) -> [HtmlAttr] -> Html -> Html
forall a. ADDATTRS a => a -> [HtmlAttr] -> a
!
[String -> HtmlAttr
href (String -> HtmlAttr) -> String -> HtmlAttr
forall a b. (a -> b) -> a -> b
$ String
base' String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"/_edit" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
urlForPage String
page String -> String -> String
forall a. [a] -> [a] -> [a]
++
case Maybe String
rev of
Just String
r -> String
"?revision=" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
r String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"&" String -> String -> String
forall a. [a] -> [a] -> [a]
++
[(String, String)] -> String
urlEncodeVars [(String
"logMsg", String
"Revert to " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
r)]
Maybe String
Nothing -> String
""] (Html -> Html) -> String -> Html
forall a b. HTML a => (Html -> b) -> a -> b
<< if Maybe String -> Bool
forall a. Maybe a -> Bool
isNothing Maybe String
rev
then String
"edit"
else String
"revert"
uploadsAllowed :: Config -> Bool
uploadsAllowed :: Config -> Bool
uploadsAllowed = (Integer
0 Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
<) (Integer -> Bool) -> (Config -> Integer) -> Config -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Config -> Integer
maxUploadSize