packages feed

hakyll 3.1.2.4 → 3.1.2.5

raw patch · 2 files changed

+32/−5 lines, 2 files

Files

hakyll.cabal view
@@ -1,5 +1,5 @@ Name:               hakyll-Version:            3.1.2.4+Version:            3.1.2.5  Synopsis:           A simple static site generator library. Description:        A simple static site generator library, mainly aimed at
src/Hakyll/Web/Preview/Server.hs view
@@ -13,7 +13,7 @@ import System.Directory (doesFileExist)  import qualified Data.ByteString as SB-import Snap.Util.FileServe+import Snap.Util.FileServe (serveFile) import Snap.Types (Snap, rqURI, getRequest, writeBS) import Snap.Http.Server ( httpServe, setAccessLog, setErrorLog, addListen                         , ConfigListen (..), emptyConfig@@ -21,14 +21,41 @@  import Hakyll.Core.Util.String (replaceAll) +-- | The first file in the list that actually exists is returned+--+findFile :: [FilePath] -> IO (Maybe FilePath)+findFile [] = return Nothing+findFile (x : xs) = do+    exists <- doesFileExist x+    if exists then return (Just x) else findFile xs+ -- | Serve a given directory -- static :: FilePath             -- ^ Directory to serve        -> (FilePath -> IO ())  -- ^ Pre-serve hook        -> Snap ()-static directory preServe = serveDirectoryWith cfg directory-  where-    cfg = fancyDirectoryConfig {preServeHook = liftIO . preServe}+static directory preServe = do+    -- Obtain the path+    uri <- rqURI <$> getRequest+    let filePath = replaceAll "\\?.*$"  (const "")  -- Remove trailing ?+                 $ replaceAll "#[^#]*$" (const "")  -- Remove #section+                 $ replaceAll "^/"      (const "")  -- Remove leading /+                 $ urlDecode $ decode $ SB.unpack uri++    -- Try to find the requested file+    r <- liftIO $ findFile $ map (directory </>) $+        [ filePath+        , filePath </> "index.htm"+        , filePath </> "index.html"+        ]++    case r of+        -- Not found, error+        Nothing -> writeBS "Not found"+        -- Found, serve+        Just f  -> do+            liftIO $ preServe f+            serveFile f  -- | Main method, runs a static server in the given directory --