Index: haskell-hoogle-4.2.10/src/Web/Server.hs =================================================================== --- haskell-hoogle-4.2.10.orig/src/Web/Server.hs 2012-09-13 10:00:53.975656209 +0900 +++ haskell-hoogle-4.2.10/src/Web/Server.hs 2012-10-05 01:07:30.000000000 +0900 @@ -1,6 +1,6 @@ {-# LANGUAGE RecordWildCards, ScopedTypeVariables, PatternGuards #-} -module Web.Server(server) where +module Web.Server(server, serveFile) where import General.Base import General.Web Index: haskell-hoogle-4.2.10/src/Web/All.hs =================================================================== --- haskell-hoogle-4.2.10.orig/src/Web/All.hs 2012-10-05 01:07:30.000000000 +0900 +++ haskell-hoogle-4.2.10/src/Web/All.hs 2012-10-05 01:23:02.354839824 +0900 @@ -2,11 +2,13 @@ module Web.All(action) where import CmdLine.All +import General.System import General.Base import General.Web import Web.Server import Web.Response import Web.Page +import Network.Wai import Paths_hoogle @@ -15,4 +17,21 @@ action q = do f <- readFile' =<< getDataFileName ("resources" "template" <.> "html") let t = loadTemplates f - cgiResponse =<< response responseArgs{templates=t} q + d <- getDataDir + p <- getEnvVar "PATH_INFO" + let p' = fromMaybe "" p + cgiResponse =<< go t d p' + where + go t d p | "/res/" `isPrefixOf` p = + serveFile True $ d "resources" takeFileName p + go t d p | "/file/usr/share/doc/" `isPrefixOf` p = + let p' = if "/" `isSuffixOf` p then p ++ "index.html" else p + in rewriteRootLinks =<< serveFile False (fromJust (stripPrefix "/file" p')) + go t _ _ = rewriteRootLinks =<< response responseArgs{templates=t} q + +rewriteRootLinks :: Response -> IO Response +rewriteRootLinks = responseRewrite $ foldl1 (.) $ map f p + where + p = [("href=\"/", "href=\"/cgi-bin/hoogle/file/") + ,("href='file:/", "href='/cgi-bin/hoogle/file/")] + f (f,t) = lbsReplace (fromString f) (fromString t)