packages feed

gitit 0.14.0.0 → 0.15.0.0

raw patch · 13 files changed

+22/−390 lines, 13 filesdep ~HStringTemplatedep ~basePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: HStringTemplate, base

API changes (from Hackage documentation)

- Network.Gitit.ContentTransformer: exportPage :: Handler
- Network.Gitit.ContentTransformer: exportPandoc :: Pandoc -> ContentTransformer Response
- Network.Gitit.Export: exportFormats :: Config -> [(String, String -> Pandoc -> Handler)]
- Network.Gitit.Handlers: exportPage :: Handler
- Network.Gitit.Interface: [pdfExport] :: Config -> Bool
- Network.Gitit.Types: [pdfExport] :: Config -> Bool
- Network.Gitit.Interface: Config :: FilePath -> FileStoreType -> PageType -> String -> MathMethod -> Bool -> Bool -> (Handler -> Handler) -> AuthenticationLevel -> Handler -> FilePath -> Int -> FilePath -> FilePath -> Priority -> FilePath -> [String] -> Bool -> Integer -> Integer -> String -> Int -> Bool -> String -> [String] -> [String] -> String -> String -> Maybe (String, [String]) -> Bool -> Bool -> String -> String -> String -> String -> Bool -> Bool -> FilePath -> Map String String -> String -> String -> Text -> Bool -> String -> Bool -> String -> Integer -> Integer -> Bool -> Maybe FilePath -> Bool -> Int -> GithubConfig -> Config
+ Network.Gitit.Interface: Config :: FilePath -> FileStoreType -> PageType -> String -> MathMethod -> Bool -> Bool -> (Handler -> Handler) -> AuthenticationLevel -> Handler -> FilePath -> Int -> FilePath -> FilePath -> Priority -> FilePath -> [String] -> Bool -> Integer -> Integer -> String -> Int -> Bool -> String -> [String] -> [String] -> String -> String -> Maybe (String, [String]) -> Bool -> Bool -> String -> String -> String -> String -> Bool -> Bool -> FilePath -> Map String String -> String -> String -> Text -> Bool -> String -> Bool -> String -> Integer -> Integer -> Maybe FilePath -> Bool -> Int -> GithubConfig -> Config
- Network.Gitit.Types: Config :: FilePath -> FileStoreType -> PageType -> String -> MathMethod -> Bool -> Bool -> (Handler -> Handler) -> AuthenticationLevel -> Handler -> FilePath -> Int -> FilePath -> FilePath -> Priority -> FilePath -> [String] -> Bool -> Integer -> Integer -> String -> Int -> Bool -> String -> [String] -> [String] -> String -> String -> Maybe (String, [String]) -> Bool -> Bool -> String -> String -> String -> String -> Bool -> Bool -> FilePath -> Map String String -> String -> String -> Text -> Bool -> String -> Bool -> String -> Integer -> Integer -> Bool -> Maybe FilePath -> Bool -> Int -> GithubConfig -> Config
+ Network.Gitit.Types: Config :: FilePath -> FileStoreType -> PageType -> String -> MathMethod -> Bool -> Bool -> (Handler -> Handler) -> AuthenticationLevel -> Handler -> FilePath -> Int -> FilePath -> FilePath -> Priority -> FilePath -> [String] -> Bool -> Integer -> Integer -> String -> Int -> Bool -> String -> [String] -> [String] -> String -> String -> Maybe (String, [String]) -> Bool -> Bool -> String -> String -> String -> String -> Bool -> Bool -> FilePath -> Map String String -> String -> String -> Text -> Bool -> String -> Bool -> String -> Integer -> Integer -> Maybe FilePath -> Bool -> Int -> GithubConfig -> Config

Files

CHANGES view
@@ -1,3 +1,12 @@+Version 0.15.0.0 released 12 Aug 2021++  * Remove the Export feature entirely.+    There were too many security problems associated with exports.+    Given limitations on developer time, removing the feature entirely+    seemed the best solution.  API change: removed Network.Gitit.Export.++  * Fix dependencies to compile with ghc 9.+ Version 0.14.0.0 released 12 Aug 2021    * PDF export: fix vulnerability.  Augustin Laville pointed
README.markdown view
@@ -7,10 +7,9 @@ and may be modified either by using the VCS's command-line tools or through the wiki's web interface. By default, pandoc's extended version of markdown is used as a markup language, but reStructuredText, LaTeX, HTML,-DocBook, or Emacs Org-mode markup can also be used. Pages can be exported in a-number of different formats, including LaTeX, RTF, OpenOffice ODT, and-MediaWiki markup.  Gitit can be configured to display TeX math (using-[texmath]) and highlighted source code (using [highlighting-kate]).+DocBook, or Emacs Org-mode markup can also be used.  Gitit can+be configured to display TeX math (using [texmath]) and+highlighted source code (using [highlighting-kate]).  Other features include @@ -411,7 +410,7 @@ By default, gitit does not cache content.  If your wiki receives a lot of traffic or contains pages that are slow to render, you may want to activate caching.  To do this, set the configuration option `use-cache` to `yes`.-By default, rendered pages, highlighted source files, and exported PDFs+By default, rendered pages, and highlighted source files will be cached in the `cache` directory. (Another directory can be specified by setting the `cache-dir` configuration option.) 
data/default.conf view
@@ -266,16 +266,9 @@ feed-refresh-time: 60 # number of minutes to cache feeds before refreshing -pdf-export: no-# if yes, PDF will appear in export options. PDF will be created using-# pdflatex, which must be installed and in the path. Note that PDF-# exports create significant additional server load.- pandoc-user-data: # if a directory is specified, this will be searched for pandoc-# customizations. These can include a templates/ directory for custom-# templates for various export formats, an S5 directory for custom-# S5 styles, and a reference.odt for ODT exports. If no directory is+# customizations.  If no directory is # specified, $HOME/.pandoc will be searched. See pandoc's README for # more information. 
data/templates/pagetools.st view
@@ -9,6 +9,5 @@       <li><a href="$base$/_feed$pageUrl$" type="application/atom+xml" rel="alternate" title="This page's ATOM Feed">Atom feed</a> <img alt="feed icon" src="$base$/img/icons/feed.png"/></li>       $endif$     </ul>-    $exportbox$   </fieldset> </div>
gitit.cabal view
@@ -1,6 +1,6 @@ cabal-version:       2.0 name:                gitit-version:             0.14.0.0+version:             0.15.0.0 build-type:          Simple synopsis:            Wiki using happstack, git or darcs, and pandoc. description:         Gitit is a wiki backed by a git, darcs, or mercurial@@ -9,9 +9,7 @@                      the wiki's web interface. Pandoc is used for markup                      processing, so pages may be written in                      (extended) markdown, reStructuredText, LaTeX, HTML,-                     or literate Haskell, and exported in ten different-                     formats, including LaTeX, ConTeXt, DocBook, RTF,-                     OpenOffice ODT, and MediaWiki markup.+                     or literate Haskell.                      .                      Notable features include                      .@@ -115,14 +113,13 @@                      Network.Gitit.Authentication.Github,                      Network.Gitit.Util, Network.Gitit.Server                      Network.Gitit.Cache, Network.Gitit.State,-                     Network.Gitit.Export,                      Network.Gitit.Handlers,                      Network.Gitit.Plugins, Network.Gitit.Rpxnow,                      Network.Gitit.Page, Network.Gitit.Feed,                      Network.Gitit.Compat.Except,                      Paths_gitit   autogen-modules:   Paths_gitit-  build-depends:     base >= 4.9 && < 4.15,+  build-depends:     base >= 4.9 && < 5,                      syb,                      filepath,                      safe,@@ -145,7 +142,7 @@                      utf8-string >= 0.3 && < 1.1,                      SHA > 1,                      HTTP >= 4000.0,-                     HStringTemplate >= 0.6 && < 0.9,+                     HStringTemplate >= 0.8.8 && < 0.9,                      old-locale,                      time,                      recaptcha >= 0.1,
src/Network/Gitit.hs view
@@ -199,7 +199,6 @@           authenticate ForModify (unlessNoDelete deletePage showPage) ]   , dir "_preview" preview   , guardIndex >> indexPage-  , guardCommand "export" >> exportPage   , method POST >> guardCommand "cancel" >> showPage   , method POST >> guardCommand "update" >>       authenticate ForModify (unlessNoEdit updatePage showPage)
src/Network/Gitit/Cache.hs view
@@ -41,23 +41,13 @@ import Text.Pandoc.UTF8 (encodePath)  -- | Expire a cached file, identified by its filename in the filestore.--- If there is an associated exported PDF, expire it too. -- Returns () after deleting a file from the cache, fails if no cached file. expireCachedFile :: String -> GititServerPart () expireCachedFile file = do   cfg <- getConfig   let target = encodePath $ cacheDir cfg </> file   exists <- liftIO $ doesFileExist target-  when exists $ liftIO $ do-    liftIO $ removeFile target-    expireCachedPDF target (defaultExtension cfg)--expireCachedPDF :: String -> String -> IO ()-expireCachedPDF file ext = -  when (takeExtension file == "." ++ ext) $ do-    let pdfname = file ++ ".export.pdf"-    exists <- doesFileExist pdfname-    when exists $ removeFile pdfname+  when exists $ liftIO $ liftIO $ removeFile target  lookupCache :: String -> GititServerPart (Maybe (UTCTime, B.ByteString)) lookupCache file = do@@ -84,4 +74,3 @@   liftIO $ do     createDirectoryIfMissing True targetDir     B.writeFile target contents-    expireCachedPDF target (defaultExtension cfg)
src/Network/Gitit/Config.hs view
@@ -130,7 +130,6 @@       cfWikiTitle <- get cp "DEFAULT" "wiki-title"       cfFeedDays <- get cp "DEFAULT" "feed-days"       cfFeedRefreshTime <- get cp "DEFAULT" "feed-refresh-time"-      cfPDFExport <- get cp "DEFAULT" "pdf-export"       cfPandocUserData <- get cp "DEFAULT" "pandoc-user-data"       cfXssSanitize <- get cp "DEFAULT" "xss-sanitize"       cfRecentActivityDays <- get cp "DEFAULT" "recent-activity-days"@@ -232,7 +231,6 @@         , wikiTitle            = cfWikiTitle         , feedDays             = readNumber "feed-days" cfFeedDays         , feedRefreshTime      = readNumber "feed-refresh-time" cfFeedRefreshTime-        , pdfExport            = cfPDFExport         , pandocUserData       = if null cfPandocUserData                                     then Nothing                                     else Just cfPandocUserData
src/Network/Gitit/ContentTransformer.hs view
@@ -31,7 +31,6 @@   , showRawPage   , showFileAsText   , showPage-  , exportPage   , showHighlightedSource   , showFile   , preview@@ -45,7 +44,6 @@   , textResponse   , mimeFileResponse   , mimeResponse-  , exportPandoc   , applyWikiTemplate   -- * Content-type transformation combinators   , pageToWikiPandoc@@ -79,7 +77,6 @@ import Data.Maybe (isNothing, mapMaybe) import Data.Semigroup ((<>)) import Network.Gitit.Cache (lookupCache, cacheContents)-import Network.Gitit.Export (exportFormats) import Network.Gitit.Framework hiding (uriPath) import Network.Gitit.Layout import Network.Gitit.Page (stringToPage)@@ -186,10 +183,6 @@ showPage :: Handler showPage = runPageTransformer htmlViaPandoc --- | Responds with page exported into selected format.-exportPage :: Handler-exportPage = runPageTransformer exportViaPandoc- -- | Responds with highlighted source code. showHighlightedSource :: Handler showHighlightedSource = runFileTransformer highlightRawSource@@ -220,15 +213,6 @@ rawTextResponse :: ContentTransformer Response rawTextResponse = rawContents >>= textResponse --- | Responds with a wiki page in the format specified--- by the @format@ parameter.-exportViaPandoc :: ContentTransformer Response-exportViaPandoc = rawContents >>=-                  maybe mzero return >>=-                  contentsToPage >>=-                  pageToWikiPandoc >>=-                  exportPandoc- -- | Responds with a wiki page. Uses the cache when -- possible and caches the rendered page when appropriate. htmlViaPandoc :: ContentTransformer Response@@ -321,17 +305,6 @@              -> m Response mimeResponse c mimeType =   return . setContentType mimeType . toResponse $ c---- | Converts Pandoc to response using format specified in parameters.-exportPandoc :: Pandoc -> ContentTransformer Response-exportPandoc doc = do-  params <- getParams-  page <- getPageName-  cfg <- lift getConfig-  let format = pFormat params-  case lookup format (exportFormats cfg) of-       Nothing     -> error $ "Unknown export format: " ++ format-       Just writer -> lift (writer page doc)  -- | Adds the sidebar, page tabs, and other elements of the wiki page -- layout to the raw content.
− src/Network/Gitit/Export.hs
@@ -1,307 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE FlexibleContexts #-}-{--Copyright (C) 2009 John MacFarlane <jgm@berkeley.edu>--This program is free software; you can redistribute it and/or modify-it under the terms of the GNU General Public License as published by-the Free Software Foundation; either version 2 of the License, or-(at your option) any later version.--This program is distributed in the hope that it will be useful,-but WITHOUT ANY WARRANTY; without even the implied warranty of-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the-GNU General Public License for more details.--You should have received a copy of the GNU General Public License-along with this program; if not, write to the Free Software-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA--}--{- Functions for exporting wiki pages in various formats.--}--module Network.Gitit.Export ( exportFormats ) where-import Control.Exception (throwIO)-import Text.Pandoc hiding (HTMLMathMethod(..), getDataFileName)-import qualified Text.Pandoc as Pandoc-import Text.Pandoc.PDF (makePDF)-import Text.Pandoc.SelfContained as SelfContained-import qualified Text.Pandoc.UTF8 as UTF8-import qualified Data.Map as M-import Network.Gitit.Server-import Network.Gitit.Framework (pathForPage)-import Network.Gitit.State (getConfig)-import Network.Gitit.Types-import Network.Gitit.Cache (cacheContents, lookupCache)-import Text.DocTemplates as DT-import Control.Monad.Trans (liftIO)-import Control.Monad (unless)-import Text.XHtml (noHtml)-import qualified Data.ByteString as B-import qualified Data.ByteString.Lazy as L-import System.FilePath ((</>), takeDirectory)-import System.Environment (setEnv)-import System.Directory (doesFileExist)-import Text.HTML.SanitizeXSS-import Data.ByteString.Lazy (fromStrict)-import Data.Text (Text)-import qualified Data.Text as T-import Data.Text.Encoding (encodeUtf8)-import Data.List (isPrefixOf)-import Skylighting (styleToCss, pygments)-import System.IO.Temp (withSystemTempDirectory)-import Paths_gitit (getDataFileName)--defaultRespOptions :: WriterOptions-defaultRespOptions = def { writerHighlightStyle = Just pygments }--respondX :: String -> String -> String-          -> (WriterOptions -> Pandoc -> PandocIO L.ByteString)-          -> WriterOptions -> String -> Pandoc -> Handler-respondX templ mimetype ext fn opts page doc = do-  cfg <- getConfig-  doc' <- if ext `elem` ["odt","pdf","beamer","epub","docx","rtf"]-             then fixURLs page doc-             else return doc-  doc'' <- liftIO $ runIO $ do-        setUserDataDir $ pandocUserData cfg-        compiledTemplate <- compileDefaultTemplate (T.pack templ)-        fn opts{ writerTemplate = Just compiledTemplate } doc'-  either (liftIO . throwIO)-         (ok . setContentType mimetype .-           (if null ext then id else setFilename (page ++ "." ++ ext)) .-            toResponseBS B.empty)-         doc''--respondS :: String -> String -> String -> (WriterOptions -> Pandoc -> PandocIO Text)-          -> WriterOptions -> String -> Pandoc -> Handler-respondS templ mimetype ext fn =-  respondX templ mimetype ext (\o d -> fromStrict . encodeUtf8 <$> fn o d)--respondSlides :: String -> (WriterOptions -> Pandoc -> PandocIO Text) -> String -> Pandoc -> Handler-respondSlides templ fn page doc = do-    cfg <- getConfig-    let math = case mathMethod cfg of-                   MathML       -> Pandoc.MathML-                   WebTeX u     -> Pandoc.WebTeX $ T.pack u-                   _            -> Pandoc.PlainMath-    let opts' = defaultRespOptions { writerIncremental = True-                                   , writerHTMLMathMethod = math}-    -- We sanitize the body only, to protect against XSS attacks.-    -- (Sanitizing the whole HTML page would strip out javascript-    -- needed for the slides.)  We then pass the body into the-    -- slide template using the 'body' variable.-    Pandoc meta blocks <- fixURLs page doc-    docOrError <- liftIO $ runIO $ do-          setUserDataDir $ pandocUserData cfg-          body' <- writeHtml5String opts' (Pandoc meta blocks) -- just body-          let body'' = T.unpack-                       $ (if xssSanitize cfg then sanitizeBalance else id)-                       $ body'-          let setVariable key val (DT.Context ctx) =-                DT.Context $ M.insert (T.pack key) (toVal (T.pack val)) ctx-          variables' <- if mathMethod cfg == MathML-                          then do-                              s <- readDataFile "MathMLinHTML.js"-                              return $ setVariable "mathml-script"-                                         (UTF8.toString s) mempty-                          else return mempty-          compiledTemplate <- compileDefaultTemplate (T.pack templ)-          dzcore <- if templ == "dzslides"-                      then do-                        dztempl <- readDataFile $ "dzslides" </> "template.html"-                        return $ unlines-                            $ dropWhile (not . isPrefixOf "<!-- {{{{ dzslides core")-                            $ lines $ UTF8.toString dztempl-                      else return ""-          let opts'' = opts'{-                             writerVariables =-                               setVariable "body" body'' $-                               setVariable "dzslides-core" dzcore $-                               setVariable "highlighting-css" pygmentsCss-                               $ variables'-                            ,writerTemplate = Just compiledTemplate }-          h <- fn opts'' (Pandoc meta [])-          makeSelfContained h-    either (liftIO . throwIO)-           (ok . setContentType "text/html;charset=UTF-8" .-             (setFilename (page ++ ".html")) .-             toResponseBS B.empty . L.fromStrict . UTF8.fromText)-           docOrError--respondLaTeX :: String -> Pandoc -> Handler-respondLaTeX = respondS "latex" "application/x-latex" "tex"-  writeLaTeX defaultRespOptions--respondConTeXt :: String -> Pandoc -> Handler-respondConTeXt = respondS "context" "application/x-context" "tex"-  writeConTeXt defaultRespOptions---respondRTF :: String -> Pandoc -> Handler-respondRTF = respondX "rtf" "application/rtf" "rtf"-  (\o d -> L.fromStrict . UTF8.fromText <$> writeRTF o d) defaultRespOptions--respondRST :: String -> Pandoc -> Handler-respondRST = respondS "rst" "text/plain; charset=utf-8" ""-  writeRST defaultRespOptions{writerReferenceLinks = True}--respondMarkdown :: String -> Pandoc -> Handler-respondMarkdown = respondS "markdown" "text/plain; charset=utf-8" ""-  writeMarkdown defaultRespOptions{writerReferenceLinks = True}--respondCommonMark :: String -> Pandoc -> Handler-respondCommonMark = respondS "commonmark" "text/plain; charset=utf-8" ""-  writeCommonMark defaultRespOptions{writerReferenceLinks = True}--respondPlain :: String -> Pandoc -> Handler-respondPlain = respondS "plain" "text/plain; charset=utf-8" ""-  writePlain defaultRespOptions--respondMan :: String -> Pandoc -> Handler-respondMan = respondS "man" "text/plain; charset=utf-8" ""-  writeMan defaultRespOptions--respondTexinfo :: String -> Pandoc -> Handler-respondTexinfo = respondS "texinfo" "application/x-texinfo" "texi"-  writeTexinfo defaultRespOptions--respondDocbook :: String -> Pandoc -> Handler-respondDocbook = respondS "docbook" "application/docbook+xml" "xml"-  writeDocbook5 defaultRespOptions--respondOrg :: String -> Pandoc -> Handler-respondOrg = respondS "org" "text/plain; charset=utf-8" ""-  writeOrg defaultRespOptions--respondICML :: String -> Pandoc -> Handler-respondICML = respondX "icml" "application/xml; charset=utf-8" ""-              (\o d -> L.fromStrict . UTF8.fromText <$> writeICML o d)-                         defaultRespOptions--respondTextile :: String -> Pandoc -> Handler-respondTextile = respondS "textile" "text/plain; charset=utf-8" ""-  writeTextile defaultRespOptions--respondAsciiDoc :: String -> Pandoc -> Handler-respondAsciiDoc = respondS "asciidoc" "text/plain; charset=utf-8" ""-  writeAsciiDoc defaultRespOptions--respondMediaWiki :: String -> Pandoc -> Handler-respondMediaWiki = respondS "mediawiki" "text/plain; charset=utf-8" ""-  writeMediaWiki defaultRespOptions--respondODT :: String -> Pandoc -> Handler-respondODT = respondX "opendocument" "application/vnd.oasis.opendocument.text"-              "odt" writeODT defaultRespOptions--respondEPUB :: String -> Pandoc -> Handler-respondEPUB = respondX "html" "application/epub+zip" "epub" writeEPUB3-               defaultRespOptions--respondDocx :: String -> Pandoc -> Handler-respondDocx = respondX "native"-  "application/vnd.openxmlformats-officedocument.wordprocessingml.document"-  "docx" writeDocx defaultRespOptions--respondPDF :: Bool -> String -> Pandoc -> Handler-respondPDF useBeamer page old_pndc = fixURLs page old_pndc >>= \pndc -> do-  cfg <- getConfig-  unless (pdfExport cfg) $ error "PDF export disabled"-  let cacheName = pathForPage page (defaultExtension cfg) ++ ".export.pdf"-  cached <- if useCache cfg-               then lookupCache cacheName-               else return Nothing-  pdf' <- case cached of-            Just (_modtime, bs) -> return $ Right $ L.fromChunks [bs]-            Nothing -> liftIO $-                withSystemTempDirectory "gitit" $ \tmpdir -> do-              let toc = tableOfContents cfg-              -- ensure that LaTeX \include commands can't include-              -- files outside the working directory, e.g. /etc/passwd:-              writeFile (tmpdir </> "texmf.cnf")-                "openout_any = p\nopenin_any = p\n"-              setEnv "TEXMFCNF" (tmpdir ++ ":")-              res <- runIO $ do-                setUserDataDir $ pandocUserData cfg-                setInputFiles [baseUrl cfg]-                let templ = if useBeamer then "beamer" else "latex"-                compiledTemplate <- compileDefaultTemplate templ-                makePDF "pdflatex" [] (if useBeamer then writeBeamer else writeLaTeX)-                  defaultRespOptions{ writerTemplate = Just compiledTemplate-                                    , writerTableOfContents = toc } pndc-              either (liftIO . throwIO) return res--  case pdf' of-       Left logOutput' -> simpleErrorHandler ("PDF creation failed:\n"-                           ++ UTF8.toStringLazy logOutput')-       Right pdfBS -> do-              case cached of-                Nothing ->-                     cacheContents cacheName $ B.concat . L.toChunks $ pdfBS-                _ -> return ()-              ok $ setContentType "application/pdf" $ setFilename (page ++ ".pdf") $-                        (toResponse noHtml) {rsBody = pdfBS}---- | When we create a PDF or ODT from a Gitit page, we need to fix the URLs of any--- images on the page. Those URLs will often be relative to the staticDir, but the--- PDF or ODT processor only understands paths relative to the working directory.------ Because the working directory will not in general be the root of the gitit instance--- at the time the Pandoc is fed to e.g. pdflatex, this function replaces the URLs of--- images in the staticDir with their correct absolute file path.-fixURLs :: String -> Pandoc -> GititServerPart Pandoc-fixURLs page pndc = do-    cfg <- getConfig-    defaultStatic <- liftIO $ getDataFileName $ "data" </> "static"--    let static = staticDir cfg-    let repoPath = repositoryPath cfg--    let go (Image attr ils (url, title)) = do-           fixedURL <- fixURL $ T.unpack url-           return $ Image attr ils (T.pack fixedURL, title)-        go x                        = return x--        fixURL ('/':url) = resolve url-        fixURL url       = resolve $ takeDirectory page </> url--        resolve p = do-           sp <- doesFileExist $ static </> p-           dsp <- doesFileExist $ defaultStatic </> p-           return (if sp then static </> p-                   else (if dsp then defaultStatic </> p-                         else repoPath </> p))-    liftIO $ bottomUpM go pndc--exportFormats :: Config -> [(String, String -> Pandoc -> Handler)]-exportFormats cfg = if pdfExport cfg-                       then ("PDF", respondPDF False) :-                            ("Beamer", respondPDF True) :-                            rest-                       else rest-   where rest = [ ("LaTeX",     respondLaTeX)     -- (description, writer)-                , ("ConTeXt",   respondConTeXt)-                , ("Texinfo",   respondTexinfo)-                , ("reST",      respondRST)-                , ("Markdown",  respondMarkdown)-                , ("CommonMark",respondCommonMark)-                , ("Plain text",respondPlain)-                , ("MediaWiki", respondMediaWiki)-                , ("Org-mode",  respondOrg)-                , ("ICML",      respondICML)-                , ("Textile",   respondTextile)-                , ("AsciiDoc",  respondAsciiDoc)-                , ("Man page",  respondMan)-                , ("DocBook",   respondDocbook)-                , ("DZSlides",  respondSlides "dzslides" writeDZSlides)-                , ("Slidy",     respondSlides "slidy" writeSlidy)-                , ("S5",        respondSlides "s5" writeS5)-                , ("EPUB",      respondEPUB)-                , ("ODT",       respondODT)-                , ("DOCX",      respondDocx)-                , ("RTF",       respondRTF) ]--pygmentsCss :: String-pygmentsCss = styleToCss pygments
src/Network/Gitit/Handlers.hs view
@@ -42,7 +42,6 @@                       , showPage                       , showPageDiff                       , showFileDiff-                      , exportPage                       , updatePage                       , editPage                       , deletePage@@ -61,7 +60,7 @@ import Network.Gitit.Util (orIfNull) import Network.Gitit.Cache (expireCachedFile, lookupCache, cacheContents) import Network.Gitit.ContentTransformer (showRawPage, showFileAsText, showPage,-        exportPage, showHighlightedSource, preview, applyPreCommitPlugins)+        showHighlightedSource, preview, applyPreCommitPlugins) import Network.Gitit.Page (readCategories) import qualified Control.Exception as E import System.FilePath
src/Network/Gitit/Layout.hs view
@@ -31,12 +31,11 @@ import Network.Gitit.Framework import Network.Gitit.State import Network.Gitit.Types-import Network.Gitit.Export (exportFormats) 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, isJust, fromJust)+import Data.Maybe (isNothing)  defaultPageLayout :: PageLayout defaultPageLayout = PageLayout@@ -111,8 +110,6 @@                    maybe id (T.setAttribute "markuphelp") (pgMarkupHelp layout) .                    setBoolAttr "printable" (pgPrintable layout) .                    maybe id (T.setAttribute "revision") rev .-                   T.setAttribute "exportbox"-                       (renderHtmlFragment $  exportBox base' cfg page rev) .                    (if null (pgTabs layout) then id else T.setAttribute "tabs"                        (renderHtmlFragment tabs)) .                    (\f x xs -> if null xs then x else f xs) (T.setAttribute "messages") id (pgMessages layout) .@@ -121,17 +118,6 @@                    setBoolAttr "wikiupload" ( uploadsAllowed cfg) $                    templ --exportBox :: String -> Config -> String -> Maybe String -> Html-exportBox base' cfg page rev | not (isSourceCode page) =-  gui (base' ++ urlForPage page) ! [identifier "exportbox"] <<-    ([ textfield "revision" ! [thestyle "display: none;",-         value (fromJust rev)] | isJust rev ] ++-     [ select ! [name "format"] <<-         map ((\f -> option ! [value f] << f) . fst) (exportFormats cfg)-     , primHtmlChar "nbsp"-     , submit "export" "Export" ])-exportBox _ _ _ _ = noHtml  -- auxiliary functions: 
src/Network/Gitit/Types.hs view
@@ -204,8 +204,6 @@   feedDays             :: Integer,   -- | Number of minutes to cache feeds before refreshing   feedRefreshTime      :: Integer,-  -- | Allow PDF export?-  pdfExport            :: Bool,   -- | Directory to search for pandoc customizations   pandocUserData       :: Maybe FilePath,   -- | Filter HTML through xss-sanitize@@ -467,7 +465,7 @@        return $ case map fst pairs `intersect` commandList of                  []          -> Command Nothing                  (c:_)       -> Command $ Just c-               where commandList = ["update", "cancel", "export"]+               where commandList = ["update", "cancel"]  -- | State for a single wiki. data WikiState = WikiState {