gitit 0.3.1 → 0.3.2
raw patch · 9 files changed
+212/−184 lines, 9 filesdep +HStringTemplate
Dependencies added: HStringTemplate
Files
- Gitit.hs +71/−88
- Gitit/State.hs +2/−6
- README.markdown +17/−17
- css/print.css +6/−6
- css/screen.css +35/−60
- data/FrontPage.page +2/−2
- data/SampleConfig.hs +1/−3
- data/template.html +74/−0
- gitit.cabal +4/−2
Gitit.hs view
@@ -49,17 +49,22 @@ import Text.Pandoc.Definition (processPandoc) import Text.Pandoc.Shared (HTMLMathMethod(..), substitute) import Data.Char (isAlphaNum, isAlpha)-import Codec.Binary.UTF8.String (decodeString) import Control.Monad.Reader import qualified Data.ByteString.Lazy as B import Network.HTTP (urlEncodeVars, urlEncode) import System.Console.GetOpt import System.Exit import Text.Highlighting.Kate+import Text.StringTemplate as T+import Data.IORef+import System.IO.Unsafe (unsafePerformIO) gititVersion :: String-gititVersion = "0.3.1"+gititVersion = "0.3.2" +template :: IORef (StringTemplate String)+template = unsafePerformIO $ newIORef $ newSTMP "" -- initialize template to empty string+ main :: IO () main = do argv <- getArgs@@ -68,6 +73,9 @@ gitPath <- findExecutable "git" when (isNothing gitPath) $ error "'git' program not found in system path." initializeWiki conf+ -- initialize template+ templ <- liftIO $ readFile (templateFile conf)+ writeIORef template (newSTMP templ) control <- startSystemState entryPoint update $ SetConfig conf -- read user file and update state@@ -147,6 +155,7 @@ let repodir = repositoryPath conf let frontpage = frontPage conf <.> "page" let staticdir = staticDir conf+ let templatefile = templateFile conf repoExists <- doesDirectoryExist repodir unless repoExists $ do postupdatepath <- getDataFileName $ "data" </> "post-update"@@ -198,6 +207,11 @@ "If you want support for math, copy the jsMath directory into " ++ staticdir ++ "/js/\n" ++ "jsMath can be obtained from http://www.math.union.edu/~dpvc/jsMath/\n" ++ replicate 80 '*'+ templateExists <- doesFileExist templatefile+ unless templateExists $ do+ templatePath <- getDataFileName $ "data" </> "template.html"+ copyFile templatePath templatefile+ hPutStrLn stderr $ "Created " ++ templatefile type Handler = ServerPart Response @@ -224,6 +238,7 @@ handle isSourceCode GET showFileDiff ] , withCommand "export" [ handlePage POST exportPage, handlePage GET exportPage ] , withCommand "cancel" [ handlePage POST showPage ]+ , withCommand "discuss" [ handlePage GET discussPage ] , withCommand "update" [ handlePage POST $ unlessNoEdit $ ifLoggedIn "?edit" updatePage ] , withCommand "delete" [ handlePage GET $ unlessNoDelete $ ifLoggedIn "?delete" confirmDelete, handlePage POST $ unlessNoDelete $ ifLoggedIn "?delete" deletePage ]@@ -331,7 +346,7 @@ data Command = Command (Maybe String) commandList :: [String]-commandList = ["edit", "showraw", "history", "export", "diff", "cancel", "update", "delete"]+commandList = ["edit", "showraw", "history", "export", "diff", "cancel", "update", "delete", "discuss"] instance FromData Command where fromData = do@@ -420,6 +435,9 @@ isPage ('_':_) = False isPage s = '.' `notElem` s +isDiscussPage :: String -> Bool+isDiscussPage s = isPage s && ":discuss" `isSuffixOf` s+ isSourceCode :: String -> Bool isSourceCode = not . null . languagesByExtension . takeExtension @@ -465,7 +483,7 @@ randomPage :: String -> Params -> Web Response randomPage _ _ = do files <- gitLsTree "HEAD" >>= return . map (unwords . drop 3 . words) . lines- let pages = map dropExtension $ filter (\f -> takeExtension f == ".page") files+ let pages = map dropExtension $ filter (\f -> takeExtension f == ".page" && not (":discuss.page" `isSuffixOf` f)) files if null pages then error "No pages found!" else do@@ -494,6 +512,12 @@ then createPage page params else error $ "Invalid revision: " ++ revision +discussPage :: String -> Params -> Web Response+discussPage page params = do+ if isDiscussPage page+ then showPage page params+ else showPage (page ++ ":discuss") params+ createPage :: String -> Params -> Web Response createPage page params = formattedPage (defaultPageLayout { pgTabs = [] }) page params $@@ -644,7 +668,7 @@ [thespan ! [theclass "date"] << logDate entry, stringToHtml " (", thespan ! [theclass "author"] << anchor ! [href $ "/_activity?" ++ urlEncodeVars [("forUser", logAuthor entry)]] <<- (logAuthor entry), stringToHtml "):",+ (logAuthor entry), stringToHtml "): ", thespan ! [theclass "subject"] << logSubject entry, stringToHtml " (", thespan ! [theclass "files"] << filesFor (logFiles entry), stringToHtml ")"]) hist@@ -677,7 +701,7 @@ Nothing -> gitCatFile revision (pathForPage page) Just t -> return $ Just t let contents = case raw of- Nothing -> "# Title goes here\n\nContent goes here"+ Nothing -> "" Just c -> c sha1 <- case (pSHA1 params) of "" -> gitGetSHA1 (pathForPage page) >>= return . fromMaybe ""@@ -767,7 +791,7 @@ let page = "_index" let revision = pRevision params files <- gitLsTree revision >>= return . map (unwords . drop 3 . words) . lines- let htmlIndex = fileListToHtml "/" $ map splitPath $ sort files+ let htmlIndex = fileListToHtml "/" $ map splitPath $ sort $ filter (\f -> not (":discuss.page" `isSuffixOf` f)) files formattedPage (defaultPageLayout { pgShowPageTools = False, pgTabs = [], pgScripts = ["folding.js"], pgTitle = "All pages" }) page params htmlIndex -- | Map a list of nonempty lists onto a list of pairs of list heads and list of tails.@@ -781,9 +805,9 @@ -- | Create a hierarchical ordered list (with links) for a list of files fileListToHtml :: String -> [[FilePath]] -> Html fileListToHtml prefix lst = ulist ! [identifier "index", theclass "folding"] <<- (map (\(h, l) -> let h' = if ".page" `isSuffixOf` h then dropExtension h else h+ (map (\(h, l) -> let h' = if takeExtension h == ".page" then dropExtension h else h in if [] `elem` l- then li ! [theclass $ if isPage h' then "page" else "upload"] << anchor ! [href $ prefix ++ h'] << h'+ then li ! [theclass $ if takeExtension h == ".page" then "page" else "upload"] << anchor ! [href $ prefix ++ h'] << h' else li ! [theclass "folder"] << [stringToHtml h', fileListToHtml (prefix ++ h') l]) $ consolidateHeads lst) @@ -822,14 +846,14 @@ , pgSelectedTab :: Tab } -data Tab = ViewTab | EditTab | HistoryTab deriving (Eq, Show)+data Tab = ViewTab | EditTab | HistoryTab | DiscussTab deriving (Eq, Show) defaultPageLayout :: PageLayout defaultPageLayout = PageLayout { pgTitle = "" , pgScripts = [] , pgShowPageTools = True- , pgTabs = [ViewTab, EditTab, HistoryTab]+ , pgTabs = [ViewTab, EditTab, HistoryTab, DiscussTab] , pgSelectedTab = ViewTab } @@ -842,98 +866,57 @@ then gitGetSHA1 path' >>= return . fromMaybe "" else return revision user <- getLoggedInUser params- cfg <- (query GetConfig)- let stylesheetlinks = - if pPrintable params- then thelink ! [href "/css/print.css", rel "stylesheet", strAttr "media" "all", thetype "text/css"] << noHtml- else thelink ! [href "/css/screen.css", rel "stylesheet",- strAttr "media" "screen, projection", thetype "text/css"] << noHtml +++- primHtml "<!--[if IE]>" +++- thelink ! [href "/css/ie.css", rel "stylesheet",- strAttr "media" "screen, projection", thetype "text/css"] << noHtml +++- primHtml "<![endif]-->" +++- thelink ! [href "/css/hk-pyg.css", rel "stylesheet",- strAttr "media" "screen, projection", thetype "text/css"] << noHtml +++- thelink ! [href "/css/print.css", rel "stylesheet", strAttr "media" "print", thetype "text/css"] << noHtml let javascriptlinks = if null (pgScripts layout)- then noHtml- else concatHtml $ map+ then ""+ else renderHtmlFragment $ concatHtml $ map (\x -> script ! [src ("/js/" ++ x), thetype "text/javascript"] << noHtml) (["jquery.min.js", "jquery-ui.packed.js"] ++ pgScripts layout)- let pageTitle' = pgTitle layout `orIfNull` page- let title' = thetitle << (wikiTitle cfg ++ " - " ++ pageTitle')- let head' = header << [title', stylesheetlinks, javascriptlinks]- let searchbox = gui ("/_search") ! [identifier "searchform"] <<- [ textfield "patterns"- , submit "search" "Search" ]- let sitenav = thediv ! [theclass "sitenav"] <<- fieldset <<- [ legend << "Site"- , ulist << (map li- [ anchor ! [href "/"] << "Front page"- , anchor ! [href "/_index"] << "All pages"- , anchor ! [href "/_random"] << "Random page"- , anchor ! [href "/_activity"] << "Recent activity"- , anchor ! [href "/_upload"] << "Upload a file"- , anchor ! [href "/Help"] << "Help" ])- , searchbox ]- let tools = if pgShowPageTools layout- then thediv ! [theclass "pageTools"] <<- fieldset <<- [ legend << "This page"- , ulist << (map li- [ anchor ! [href $ urlForPage page ++ "?revision=" ++ revision ++ "&showraw"] << "Raw page source"- , anchor ! [href $ urlForPage page ++ "?revision=" ++ revision ++ "&printable"] << "Printable version"- , anchor ! [href $ urlForPage page ++ "?revision=" ++ sha1] << "Permanent link"- , anchor ! [href $ urlForPage page ++ "?delete"] << "Delete this page" ])- , exportBox page params ]- else noHtml+ let pageTitle = pgTitle layout `orIfNull` page let tabli tab = if tab == pgSelectedTab layout then li ! [theclass "selected"] else li+ let origPage s = if ":discuss" `isSuffixOf` s then take (length s - 8) s else s let linkForTab HistoryTab = Just $ tabli HistoryTab << anchor ! [href $ urlForPage page ++ "?revision=" ++ revision ++ "&history"] << "history"- linkForTab ViewTab = Just $ tabli ViewTab << anchor ! [href $ urlForPage page ++ if revision == "HEAD" then "" else "?revision=" ++ revision] << "view"+ linkForTab ViewTab = if isDiscussPage page+ then Just $ tabli DiscussTab << anchor ! [href $ urlForPage $ origPage page] << "page"+ else Just $ tabli ViewTab << anchor ! [href $ urlForPage page ++ if revision == "HEAD" then "" else "?revision=" ++ revision] << "view"+ linkForTab DiscussTab = if isDiscussPage page+ then Just $ tabli ViewTab << anchor ! [href $ urlForPage page] << "discuss"+ else Just $ tabli DiscussTab << anchor ! [href $ urlForPage page ++ "?discuss"] << "discuss" linkForTab EditTab = if isPage page then Just $ tabli EditTab << anchor ! [href $ urlForPage page ++ "?edit&revision=" ++ revision ++ if revision == "HEAD" then "" else "&" ++ urlEncodeVars [("logMsg", "Revert to " ++ revision)]] << if revision == "HEAD" then "edit" else "revert" else Nothing- let buttons = ulist ! [theclass "tabs"] << mapMaybe linkForTab (pgTabs layout)- let userbox = thediv ! [identifier "userbox"] <<- case user of- Just u -> [ anchor ! [href ("/_logout?" ++ urlEncodeVars [("destination", page)])] << - ("Logout " ++ u) ]- Nothing -> [ anchor ! [href ("/_login?" ++ urlEncodeVars [("destination", page)])] <<- "Login"- , primHtml " • "- , anchor ! [href ("/_register?" ++ urlEncodeVars [("destination", page)])] <<- "Get an account" ]+ let tabs = ulist ! [theclass "tabs"] << mapMaybe linkForTab (pgTabs layout)+ let searchbox = gui ("/_search") ! [identifier "searchform"] <<+ [ textfield "patterns"+ , submit "search" "Search" ] let messages = pMessages params let htmlMessages = if null messages then noHtml else ulist ! [theclass "messages"] << map (li <<) messages- let body' = body << thediv ! [identifier "container"] <<- [ thediv ! [identifier "sidebar"] <<- [ thediv ! [identifier "logo"] << - anchor ! [href "/", title "Go to top page"] <<- case wikiLogo cfg of- Nothing -> noHtml- Just f -> image ! [src f]- , sitenav- , tools ]- , userbox- , thediv ! [identifier "maincol"] <<- [ thediv ! [theclass "pageControls"] << buttons- , thediv ! [identifier "content"] << - [ anchor ! [href $ urlForPage page] << (h1 ! [theclass "pageTitle"] << pageTitle')- , if revision == "HEAD"- then noHtml- else h2 ! [theclass "revision"] << ("Revision " ++ revision)- , htmlMessages- , htmlContents ]- , thediv ! [identifier "footer"] << primHtml (wikiFooter cfg) ]- ]- ok $ toResponse $ head' +++ body'+ templ <- liftIO $ readIORef template+ let filledTemp = T.render $+ setAttribute "pagetitle" pageTitle $+ setAttribute "javascripts" javascriptlinks $+ setAttribute "pagename" page $+ (case user of+ Just u -> setAttribute "user" u+ Nothing -> id) $+ (if isPage page then setAttribute "ispage" "true" else id) $+ (if pgShowPageTools layout then setAttribute "pagetools" "true" else id) $+ (if pPrintable params then setAttribute "printable" "true" else id) $+ (if pRevision params == "HEAD" then id else setAttribute "nothead" "true") $+ setAttribute "revision" revision $+ setAttribute "sha1" sha1 $+ setAttribute "searchbox" (renderHtmlFragment searchbox) $+ setAttribute "exportbox" (renderHtmlFragment $ exportBox page params) $+ setAttribute "tabs" (renderHtmlFragment tabs) $+ setAttribute "messages" (renderHtmlFragment htmlMessages) $+ setAttribute "content" (renderHtmlFragment htmlContents) $+ templ+ ok $ setContentType "text/html" $ toResponse filledTemp -- user authentication loginForm :: Params -> Html@@ -1120,7 +1103,7 @@ textToPandoc :: String -> Pandoc textToPandoc = readMarkdown (defaultParserState { stateSanitizeHTML = True, stateSmart = True }) .- filter (/= '\r') . decodeString+ filter (/= '\r') pageAsPandoc :: String -> Params -> Web (Maybe Pandoc) pageAsPandoc page params = do
Gitit/State.hs view
@@ -38,10 +38,8 @@ data Config = Config { repositoryPath :: FilePath, -- path of git repository for pages userFile :: FilePath, -- path of users database + templateFile :: FilePath, -- path of page template file staticDir :: FilePath, -- path of static directory- wikiLogo :: Maybe String, -- Nothing, or Just path to an image to be displayed at top left- wikiTitle :: String, -- title of wiki - wikiFooter :: String, -- HTML to be included at bottom of pages tableOfContents :: Bool, -- should each page have an automatic table of contents? maxUploadSize :: Integer, -- maximum size of pages and file uploads portNumber :: Int, -- port number to serve content on@@ -59,10 +57,8 @@ defaultConfig = Config { repositoryPath = "wikidata", userFile = "gitit-users",+ templateFile = "template.html", staticDir = "static",- wikiLogo = Just "/img/logo.png",- wikiTitle = "Wiki",- wikiFooter = "powered by <a href=\"http://github.com/jgm/gitit/tree/master/\">gitit</a>", tableOfContents = True, maxUploadSize = 100000, portNumber = 5001,
README.markdown view
@@ -72,7 +72,8 @@ Switch to the directory where you want to run gitit. This should be a directory where you have write access, since two directories, `static` and `wikidata`, and-a file, `gitit-users`, will be created here. To start gitit, just type:+two files, `gitit-users` and `template.html`, will be created here. To+start gitit, just type: gitit @@ -80,7 +81,9 @@ 1. Create a git repository, `wikidata`, and add a default front page. 2. Create a `static` directory containing the scripts and CSS used by gitit.- 3. Start a web server on port 5001.+ 3. Create a `template.html` file containing an (HStringTemplate) template+ for wiki pages.+ 4. Start a web server on port 5001. Check that it worked: open a web browser and go to http://localhost:5001. @@ -93,10 +96,8 @@ Config { repositoryPath = "wikidata", userFile = "gitit-users",+ templateFile = "template.html", staticDir = "static",- wikiLogo = Just "/img/logo.png",- wikiTitle = "Wiki",- wikiFooter = "Powered by Gitit\n<!-- Logo courtesy of http://flickr.com/photos/wolfhound/127936545/, licensed under Creative Commons Attribution license -->", tableOfContents = False, maxUploadSize = 100000, portNumber = 5001,@@ -112,24 +113,20 @@ the wiki's pages will be stored. If it does not exist, gitit will create it on startup. -- `gitit-users` is a file containing user login information (with hashed+- `userFile` is a file containing user login information (with hashed passwords). If it does not exist, gitit will start with an empty list- of users. Gitit will write a new `gitit-users` file on shutdown.+ of users. Gitit will write a new `userFile` on shutdown. +- `templateFile` is a file containing an HTML template for the wiki pages.+ If it does not exist, gitit will create a default template. (For most+ purposes, this can be used just as it is, but some users may wish to+ customize the look of their wiki.) `templateFile` is an+ `HStringTemplate` template.+ - `staticDir` is the (relative) path of a directory in which static content (javascript, CSS, images) is stored. If it does not exist, gitit will create it on startup. -- `wikiLogo` is either `Nothing` (no logo) or `Just "/url/of/logo"`.- By default, the logo is set to `/img/logo.png`, so the easiest way to- change the logo is just to copy a new file to `static/img/logo.png`.- Be sure to use an absolute URL.--- `wikiTitle` is the title that will be shown on the browser's title bar,- together with the name of the page being viewed.--- `wikiFooter` is raw HTML that will be inserted in the footer of every page.- - `tableOfContents` is either `False` or `True`. If it is `True`, a table of contents (derived from the page's headers) will appear on each page. @@ -176,6 +173,9 @@ To change the look of the wiki, modify `screen.css` in `static/css`. To change the look of printed pages, modify `print.css`.+The logo picture can be changed by copying a new PNG file to+`static/img/logo.png`. For more radical changes, one can modify+`template.html`. Adding support for math -----------------------
css/print.css view
@@ -19,7 +19,7 @@ h3{font-size:15pt;} h4,h5,h6{font-size:12pt;} -code { font: 10pt Courier, monospace; } +pre, code { font: 10pt Courier, monospace; } blockquote { margin: 1.3em; padding: 1em; font-size: 10pt; } hr { background-color: #ccc; } @@ -28,14 +28,13 @@ a img { border: none; } /* Links */-a:link, a:visited { background: transparent; font-weight: 700; text-decoration: underline;color:#333; }-a:link[href^="http://"]:after, a[href^="http://"]:visited:after { content: " (" attr(href) ") "; font-size: 90%; }+a:link, a:visited { background: transparent; font-weight: normal; text-decoration: underline; color:#333; }+a:link[href^="http://"]:after, a[href^="http://"]:visited:after { content: " (" attr(href) ")"; font-size: 90%; } a[href^="http://"] {color:#000; } /* Table */ table { margin: 1px; text-align:left; }-th { border-bottom: 1px solid #333; font-weight: bold; }-td { border-bottom: 1px solid #333; }+th { font-weight: bold; } th,td { padding: 4px 10px 4px 0; } tfoot { font-style: italic; } caption { background: #fff; margin-bottom:2em; text-align:left; }@@ -46,8 +45,9 @@ #maincol { margin-left: 1em; margin-right: 1em; border: none; } #content { border: none; }-#sidebar, div.pageControls, #userbox, #footer {display:none;}+#sidebar, #userbox, #footer {display:none;} #toc { display: none; } h1 a:link, h2 a:link, h3 a:link, h4 a:link, h5 a:link, h6 a:link { text-decoration: none; } h1.pageTitle { font-size: 220%; } td.lineNumbers { display: none; }+ul.tabs { display: none; }
css/screen.css view
@@ -32,8 +32,9 @@ /* QUOTES */ blockquote { border-top: 1px solid #ccc; border-bottom: 1px solid #ccc; color: #666; }-blockquote *:first-child:before { content: "\201C"; }-blockquote *:first-child:after { content: "\201D"; }+/* Uncomment these lines to have quotation marks inserted around block quotes: */+/* blockquote *:first-child:before { content: "\201C"; } */+/* blockquote *:first-child:after { content: "\201D"; } */ /* FORMS */ @@ -158,60 +159,6 @@ .success a {color:#264409; background:none; padding:0; margin:0; } .center {text-align: center;} -/*---------STYLES FOR BUTTONS----------*/-/* Demo: particletree.com/features/rediscovering-the-button-element */-/*- <button type="submit" class="button positive">- <img src="css/blueprint/plugins/buttons/icons/tick.png" alt=""/> Save- </button>-- <a class="button" href="/password/reset/">- <img src="css/blueprint/plugins/buttons/icons/key.png" alt=""/> Change Password- </a>-- <a href="#" class="button negative">- <img src="css/blueprint/plugins/buttons/icons/cross.png" alt=""/> Cancel- </a>-*/--a.button, button {- margin:0 0.583em 0.667em 0;- padding:5px 10px 5px 7px; /* Links */- border:1px solid #dedede;- border-top:1px solid #eee;- border-left:1px solid #eee;- background-color:#f5f5f5;- font-family:"Lucida Grande", Tahoma, Arial, Verdana, sans-serif;- font-size:100%;- line-height:130%;- text-decoration:none;- font-weight:bold;- color:#565656;- cursor:pointer;-}-button {- width:auto;- overflow:visible;- padding:4px 10px 3px 7px; /* IE6 */-}-button[type] {- padding:4px 10px 4px 7px; /* Firefox */- line-height:17px; /* Safari */-}--*:first-child+html button[type] {- padding:4px 10px 3px 7px; /* IE7 */-}--button img, a.button img{- margin:0 3px -3px 0 !important;- padding:0;- border:none;- width:16px;- height:16px;- float:none;-}- input.search_term { width: 95% } /* Standard Buttons */@@ -226,6 +173,35 @@ color:#fff; } +/* Link icons */++/* Use this class if a link gets an icon when it shouldn't. */+body a.noicon { background:none; padding:0; margin:0; }++/* Make sure the icons are not cut */+a[href^="http:"], a[href^="mailto:"],+a[href$=".pdf"], a[href$=".doc"], a[href$=".xls"], a[href$=".rss"],+a[href$=".rdf"], a[href^="aim:"] {+ padding:2px 22px 2px 0;+ margin:-2px 0;+ background-repeat: no-repeat;+ background-position: right center;+}++/* External links */+a[href^="http:"] { background-image: url(../img/icons/external.png); padding-right: 14px; }+a[href^="mailto:"] { background-image: url(../img/icons/email.png); }++/* Files */+a[href$=".pdf"] { background-image: url(../img/icons/pdf.png); }+a[href$=".doc"] { background-image: url(../img/icons/doc.png); }+a[href$=".xls"] { background-image: url(../img/icons/xls.png); }++/* Misc */+a[href$=".rss"],+a[href$=".rdf"] { background-image: url(../img/icons/feed.png); }+a[href^="aim:"] { background-image: url(../img/icons/im.png); }+ h1 > a:link, h1 > a:active, h1 > a:hover, h1 > a:focus, h1 > a:visited, h2 > a:link, h2 > a:active, h2 > a:hover, h2 > a:focus, h2 > a:visited, h3 > a:link, h3 > a:active, h3 > a:hover, h3 > a:focus, h3 > a:visited,@@ -269,9 +245,8 @@ #sidebar ul li { color: #888; } #maincol { position: absolute; margin-left: 13em; margin-top: 1em; padding-top: 0; margin-right: 0; } #content { border: 1px solid #ccc; background-color: #fff; padding: 1em; font-size: 110%; line-height: 150%; }-#pageControls { } div#toc {- float: right; + float: right; background-color: #f9f9f9; border: 10px solid white; margin: 0.8em;@@ -311,7 +286,7 @@ line-height: 1.2em; } ul.tabs li.selected {- border-bottom: 1px solid white;+ border-bottom: 3px solid white; } ul.tabs li a { text-decoration: none;@@ -392,7 +367,7 @@ .deleted { text-decoration: line-through; color: gray; } h2.revision { font-size: 100%;- color: #ccc;+ color: #888; font-style: italic; border: none; margin: 0 0 0.5em 0;
data/FrontPage.page view
@@ -8,7 +8,7 @@ display TeX math and highlighted source code. You can edit this page by double-clicking on it, or by clicking on the-"edit" button at the bottom of the screen.+"edit" tab at the top of the screen. You can make a link to another wiki page like this: `[French Cheeses]()`.@@ -21,7 +21,7 @@ To create a new wiki page, just create a link to it and follow the link. -Help is always available through the "help" link on the top bar.+Help is always available through the "Help" link in the sidebar. [Wiki]: http://en.wikipedia.org/wiki/Wiki [git]: http://git.or.cz/
data/SampleConfig.hs view
@@ -1,10 +1,8 @@ Config { repositoryPath = "wikidata", userFile = "gitit-users",+templateFile = "template.html", staticDir = "static",-wikiLogo = Just "/img/logo.png",-wikiTitle = "Wiki",-wikiFooter = "Powered by Gitit\n<!-- Logo courtesy of http://flickr.com/photos/wolfhound/127936545/, licensed under Creative Commons Attribution license -->", tableOfContents = False, maxUploadSize = 100000, portNumber = 5001,
+ data/template.html view
@@ -0,0 +1,74 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">+ <head>+ <title>Wiki - $pagetitle$</title>+ $if(printable)$+ <link href="/css/print.css" rel="stylesheet" media="all" type= "text/css" />+ $else$+ <link href="/css/screen.css" rel="stylesheet" media="screen, projection" type="text/css" />+ <link href="/css/hk-pyg.css" rel="stylesheet" media="screen, projection" type="text/css" />+ <link href="/css/print.css" rel="stylesheet" media="print" type= "text/css" />+ $endif$+ <!--[if IE]><link href="/css/ie.css" rel="stylesheet" media="screen, projection" type="text/css" /><![endif]-->+ $javascripts$+ </head>+ <body>+ <div id="container">+ <div id="sidebar">+ <div id="logo">+ <a href="/" title="Go to top page"><img src="/img/logo.png" /></a>+ </div>+ <div class="sitenav">+ <fieldset>+ <legend>Site</legend>+ <ul>+ <li><a href="/">Front page</a></li>+ <li><a href="/_index">All pages</a></li>+ <li><a href="/_random">Random page</a></li>+ <li><a href="/_activity">Recent activity</a></li>+ <li><a href="/_upload">Upload a file</a></li>+ <li><a href="/Help">Help</a></li>+ </ul>+ $searchbox$+ </fieldset>+ </div>+ $if(pagetools)$+ <div class="pageTools">+ <fieldset>+ <legend>This page</legend>+ <ul>+ <li><a href="/$pagename$?revision=$revision$&showraw">Raw page source</a></li>+ <li><a href="/$pagename$?revision=$revision$&printable">Printable version</a></li>+ <li><a href="/$pagename$?revision=$sha1$">Permanent link</a></li>+ <li><a href="/$pagename$?delete">Delete this page</a></li>+ </ul>+ $exportbox$+ </fieldset>+ </div>+ $endif$+ </div>+ <div id="userbox">+ $if(user)$+ <a href="/_logout?destination=$pagename$">Logout $user$</a>+ $else$+ <a href="/_login?destination=$pagename$">Login</a> • <a href="/_register?destination=$pagename$">Get an account</a>+ $endif$+ </div>+ <div id="maincol">+ $tabs$ + <div id="content">+ $if(nothead)$+ <h2 class="revision">Revision $revision$</h2>+ $endif$+ <h1 class="pageTitle"><a href="/$pagename$">$pagetitle$</a></h1>+ $messages$+ <div id="wikipage" ondblclick="window.location='/$pagename$?edit">+ $content$+ </div>+ </div>+ <div id="footer">powered by <a href="http://github.com/jgm/gitit/tree/master/">gitit</a></div>+ </div>+ </div>+ </body>+</html>
gitit.cabal view
@@ -1,5 +1,5 @@ name: gitit-version: 0.3.1+version: 0.3.2 Cabal-version: >= 1.2 build-type: Simple synopsis: Wiki using HAppS, git, and pandoc.@@ -34,6 +34,7 @@ js/jquery-ui.packed.js, js/preview.js, js/search.js, data/post-update, data/FrontPage.page, data/Help.page,+ data/template.html, README.markdown, data/SampleConfig.hs, BLUETRIP-LICENSE, TANGOICONS @@ -46,7 +47,8 @@ network, old-time, highlighting-kate, bytestring, utf8-string, HAppS-Server >= 0.9.3 && < 0.9.4, HAppS-State >= 0.9.3 && < 0.9.4,- HAppS-Data >= 0.9.3 && < 0.9.4, SHA > 1, HTTP+ HAppS-Data >= 0.9.3 && < 0.9.4, SHA > 1, HTTP,+ HStringTemplate if impl(ghc >= 6.10) build-depends: base >= 4, syb ghc-options: -Wall -threaded