hakyll 3.1.2.3 → 3.1.2.4
raw patch · 3 files changed
+8/−32 lines, 3 files
Files
- hakyll.cabal +1/−1
- src/Hakyll/Core/Writable.hs +3/−0
- src/Hakyll/Web/Preview/Server.hs +4/−31
hakyll.cabal view
@@ -1,5 +1,5 @@ Name: hakyll-Version: 3.1.2.3+Version: 3.1.2.4 Synopsis: A simple static site generator library. Description: A simple static site generator library, mainly aimed at
src/Hakyll/Core/Writable.hs view
@@ -20,6 +20,9 @@ -- | Save an item to the given filepath write :: FilePath -> a -> IO () +instance Writable () where+ write _ _ = return ()+ instance Writable [Char] where write = writeFile
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 (serveFile)+import Snap.Util.FileServe import Snap.Types (Snap, rqURI, getRequest, writeBS) import Snap.Http.Server ( httpServe, setAccessLog, setErrorLog, addListen , ConfigListen (..), emptyConfig@@ -21,41 +21,14 @@ 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 = 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+static directory preServe = serveDirectoryWith cfg directory+ where+ cfg = fancyDirectoryConfig {preServeHook = liftIO . preServe} -- | Main method, runs a static server in the given directory --