Simplified css and static code.
This commit is contained in:
parent
cd51ba5789
commit
664111c001
3 changed files with 32 additions and 37 deletions
|
@ -10,7 +10,6 @@ module Text.Hakyll.Internal.Render
|
|||
import qualified Data.Map as M
|
||||
import Control.Monad.Reader (liftIO)
|
||||
import Data.Maybe (fromMaybe)
|
||||
import System.IO (hPutStrLn, stderr)
|
||||
|
||||
import Text.Hakyll.Context (Context, ContextManipulation)
|
||||
import Text.Hakyll.File
|
||||
|
@ -42,6 +41,4 @@ writePage = createRenderAction $ \initialContext -> do
|
|||
destination <- toDestination url
|
||||
makeDirectories destination
|
||||
-- Substitute $root here, just before writing.
|
||||
liftIO $ do
|
||||
writeFile destination $ finalSubstitute (fromString body) context
|
||||
hPutStrLn stderr $ "Writing " ++ destination
|
||||
liftIO $ writeFile destination $ finalSubstitute (fromString body) context
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
-- | Module containing rendering functions. All these functions are used to
|
||||
-- render files to the @_site@ directory.
|
||||
module Text.Hakyll.Render
|
||||
( depends
|
||||
, render
|
||||
( render
|
||||
, renderWith
|
||||
, renderAndConcat
|
||||
, renderAndConcatWith
|
||||
|
@ -12,7 +11,6 @@ module Text.Hakyll.Render
|
|||
, css
|
||||
) where
|
||||
|
||||
import Control.Monad (unless)
|
||||
import Control.Arrow ((>>>))
|
||||
import Control.Monad.Reader (liftIO)
|
||||
import System.Directory (copyFile)
|
||||
|
@ -27,16 +25,6 @@ import Text.Hakyll.Internal.CompressCss
|
|||
import Text.Hakyll.Internal.Render
|
||||
import Text.Hakyll.Internal.Template (readTemplate)
|
||||
|
||||
-- | Execute an IO action only when the cache is invalid.
|
||||
depends :: FilePath -- ^ File to be rendered or created.
|
||||
-> [FilePath] -- ^ Files the render depends on.
|
||||
-> Hakyll () -- ^ Action to execute when the file is out of date.
|
||||
-> Hakyll ()
|
||||
depends file dependencies action = do
|
||||
destination <- toDestination file
|
||||
valid <- isFileMoreRecent destination dependencies
|
||||
unless valid action
|
||||
|
||||
-- | Render to a Page.
|
||||
render :: FilePath -- ^ Template to use for rendering.
|
||||
-> RenderAction Context Context -- ^ The render computation.
|
||||
|
@ -113,7 +101,7 @@ renderChainWith :: ContextManipulation
|
|||
-> RenderAction () Context
|
||||
-> Hakyll ()
|
||||
renderChainWith manipulation templatePaths initial =
|
||||
runRenderAction renderChainWith'
|
||||
runRenderActionIfNeeded renderChainWith'
|
||||
where
|
||||
renderChainWith' :: RenderAction () ()
|
||||
renderChainWith' = initial >>> manipulationAction >>> chain' >>> writePage
|
||||
|
@ -125,30 +113,18 @@ renderChainWith manipulation templatePaths initial =
|
|||
-- | Mark a certain file as static, so it will just be copied when the site is
|
||||
-- generated.
|
||||
static :: FilePath -> Hakyll ()
|
||||
static source = runRenderAction static'
|
||||
static source = runRenderActionIfNeeded static'
|
||||
where
|
||||
static' = RenderAction
|
||||
{ actionDependencies = [source]
|
||||
, actionUrl = Just $ return source
|
||||
, actionFunction = actionFunction'
|
||||
}
|
||||
|
||||
actionFunction' _ = do
|
||||
static' = createFileRenderAction source $ do
|
||||
destination <- toDestination source
|
||||
makeDirectories destination
|
||||
liftIO $ copyFile source destination
|
||||
|
||||
-- | Render a css file, compressing it.
|
||||
css :: FilePath -> Hakyll ()
|
||||
css source = runRenderAction css'
|
||||
css source = runRenderActionIfNeeded css'
|
||||
where
|
||||
css' = RenderAction
|
||||
{ actionDependencies = [source]
|
||||
, actionUrl = Just $ return source
|
||||
, actionFunction = actionFunction'
|
||||
}
|
||||
|
||||
actionFunction' _ = do
|
||||
css' = createFileRenderAction source $ do
|
||||
contents <- liftIO $ readFile source
|
||||
destination <- toDestination source
|
||||
makeDirectories destination
|
||||
|
|
|
@ -2,17 +2,22 @@ module Text.Hakyll.RenderAction
|
|||
( RenderAction (..)
|
||||
, createRenderAction
|
||||
, createSimpleRenderAction
|
||||
, createFileRenderAction
|
||||
, createManipulationAction
|
||||
, chain
|
||||
, runRenderAction
|
||||
, runRenderActionIfNeeded
|
||||
) where
|
||||
|
||||
import Prelude hiding ((.), id)
|
||||
import Control.Category
|
||||
import Control.Monad ((<=<), mplus)
|
||||
import Control.Monad ((<=<), mplus, unless)
|
||||
import Control.Monad.Reader (liftIO)
|
||||
import Prelude hiding ((.), id)
|
||||
import System.IO (hPutStrLn, stderr)
|
||||
|
||||
import Text.Hakyll.Hakyll
|
||||
import Text.Hakyll.Context
|
||||
import Text.Hakyll.File (toDestination, isFileMoreRecent)
|
||||
import Text.Hakyll.Hakyll
|
||||
|
||||
data RenderAction a b = RenderAction
|
||||
{ actionDependencies :: [FilePath]
|
||||
|
@ -26,6 +31,13 @@ createRenderAction f = id { actionFunction = f }
|
|||
createSimpleRenderAction :: Hakyll b -> RenderAction () b
|
||||
createSimpleRenderAction = createRenderAction . const
|
||||
|
||||
createFileRenderAction :: FilePath -> Hakyll b -> RenderAction () b
|
||||
createFileRenderAction path action = RenderAction
|
||||
{ actionDependencies = [path]
|
||||
, actionUrl = Just $ return path
|
||||
, actionFunction = const action
|
||||
}
|
||||
|
||||
instance Category RenderAction where
|
||||
id = RenderAction
|
||||
{ actionDependencies = []
|
||||
|
@ -47,3 +59,13 @@ chain = foldl1 (>>>)
|
|||
|
||||
runRenderAction :: RenderAction () a -> Hakyll a
|
||||
runRenderAction action = actionFunction action ()
|
||||
|
||||
runRenderActionIfNeeded :: RenderAction () () -> Hakyll ()
|
||||
runRenderActionIfNeeded action = do
|
||||
url <- case actionUrl action of
|
||||
(Just u) -> u
|
||||
Nothing -> error "No url when checking dependencies."
|
||||
destination <- toDestination url
|
||||
valid <- isFileMoreRecent destination $ actionDependencies action
|
||||
unless valid $ do liftIO $ hPutStrLn stderr $ "Rendering " ++ destination
|
||||
runRenderAction action
|
||||
|
|
Loading…
Reference in a new issue