| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Network.Gitit
Description
Functions for embedding a gitit wiki into a Happstack application.
The following is a minimal standalone wiki program:
import Network.Gitit
import Happstack.Server.SimpleHTTP
main = do
conf <- getDefaultConfig
createStaticIfMissing conf
createTemplateIfMissing conf
createRepoIfMissing conf
initializeGititState conf
simpleHTTP nullConf{port = 5001} $ wiki confHere is a more complex example, which serves different wikis under different paths, and uses a custom authentication scheme:
import Network.Gitit
import Control.Monad
import Text.XHtml hiding (dir)
import Happstack.Server.SimpleHTTP
type WikiSpec = (String, FileStoreType, PageType)
wikis = [ ("markdownWiki", Git, Markdown)
, ("latexWiki", Darcs, LaTeX) ]
-- custom authentication
myWithUser :: Handler -> Handler
myWithUser handler = do
-- replace the following with a function that retrieves
-- the logged in user for your happstack app:
user <- return "testuser"
localRq (setHeader "REMOTE_USER" user) handler
myAuthHandler = msum
[ dir "_login" $ seeOther "/your/login/url" $ toResponse ()
, dir "_logout" $ seeOther "/your/logout/url" $ toResponse () ]
handlerFor :: Config -> WikiSpec -> ServerPart Response
handlerFor conf (path', fstype, pagetype) = dir path' $
wiki conf{ repositoryPath = path'
, repositoryType = fstype
, defaultPageType = pagetype}
indexPage :: ServerPart Response
indexPage = ok $ toResponse $
(p << "Wiki index") +++
ulist << map (\(path', _, _) -> li << hotlink (path' ++ "/") << path') wikis
main = do
conf <- getDefaultConfig
let conf' = conf{authHandler = myAuthHandler, withUser = myWithUser}
forM wikis $ \(path', fstype, pagetype) -> do
let conf'' = conf'{ repositoryPath = path'
, repositoryType = fstype
, defaultPageType = pagetype
}
createStaticIfMissing conf''
createRepoIfMissing conf''
createTemplateIfMissing conf'
initializeGititState conf'
simpleHTTP nullConf{port = 5001} $
(nullDir >> indexPage) `mplus` msum (map (handlerFor conf') wikis)Synopsis
- wiki :: Config -> ServerPart Response
- reloadTemplates :: ServerPart Response
- runHandler :: WikiState -> Handler -> ServerPart Response
- module Network.Gitit.Initialize
- module Network.Gitit.Config
- loginUserForm :: Handler
- module Network.Gitit.Types
- module Network.Gitit.Framework
- module Network.Gitit.Layout
- module Network.Gitit.ContentTransformer
- module Network.Gitit.Page
- getFileStore :: GititServerPart FileStore
- getUser :: String -> GititServerPart (Maybe User)
- getConfig :: GititServerPart Config
- queryGititState :: MonadIO m => (GititState -> a) -> m a
- updateGititState :: MonadIO m => (GititState -> GititState) -> m ()
Wiki handlers
reloadTemplates :: ServerPart Response Source #
Recompiles the gitit templates.
runHandler :: WikiState -> Handler -> ServerPart Response Source #
Converts a gitit Handler into a standard happstack ServerPart.
Initialization
module Network.Gitit.Initialize
Configuration
module Network.Gitit.Config
Types
module Network.Gitit.Types
Tools for building handlers
module Network.Gitit.Framework
module Network.Gitit.Layout
module Network.Gitit.Page
queryGititState :: MonadIO m => (GititState -> a) -> m a Source #
updateGititState :: MonadIO m => (GititState -> GititState) -> m () Source #