From d00026366c78ef8578f7a9503ced4915b1d4ec28 Mon Sep 17 00:00:00 2001 From: Jasper Van der Jeugt Date: Tue, 15 Feb 2011 22:15:02 +0100 Subject: defaultPageRead → defaultPageCompiler MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Hakyll/Web.hs | 10 ++-------- src/Hakyll/Web/Page.hs | 15 +++++++++++---- src/Hakyll/Web/Page/Metadata.hs | 10 +++++++++- src/Hakyll/Web/Pandoc.hs | 2 +- src/Hakyll/Web/Template.hs | 6 +++--- 5 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/Hakyll/Web.hs b/src/Hakyll/Web.hs index 74c5c6c..bd9ce31 100644 --- a/src/Hakyll/Web.hs +++ b/src/Hakyll/Web.hs @@ -1,8 +1,7 @@ -- | Module exporting commonly used web-related functions -- module Hakyll.Web - ( defaultPageRead - , defaultTemplateRead + ( defaultTemplateRead , defaultTemplateReadWith , defaultRelativizeUrls , defaultCopyFile @@ -11,7 +10,7 @@ module Hakyll.Web import Prelude hiding (id) import Control.Category (id) -import Control.Arrow (arr, (>>>), (>>^), (&&&)) +import Control.Arrow ((>>^), (&&&)) import Text.Hamlet (HamletSettings) @@ -20,15 +19,10 @@ import Hakyll.Core.Writable import Hakyll.Core.Identifier import Hakyll.Core.ResourceProvider import Hakyll.Web.Page -import Hakyll.Web.Pandoc import Hakyll.Web.Template import Hakyll.Web.RelativizeUrls import Hakyll.Web.Util.String -defaultPageRead :: Compiler Resource (Page String) -defaultPageRead = cached "Hakyll.Web.defaultPageRead" $ - pageRead >>> addDefaultFields >>> arr applySelf >>> pageRenderPandoc - defaultRelativizeUrls :: Compiler (Page String) (Page String) defaultRelativizeUrls = getRoute &&& id >>^ uncurry relativize where diff --git a/src/Hakyll/Web/Page.hs b/src/Hakyll/Web/Page.hs index 03995cd..30578e9 100644 --- a/src/Hakyll/Web/Page.hs +++ b/src/Hakyll/Web/Page.hs @@ -51,14 +51,15 @@ module Hakyll.Web.Page , fromBody , fromMap , toMap - , pageRead + , readPageCompiler + , defaultPageCompiler , addDefaultFields , sortByBaseName ) where import Prelude hiding (id) import Control.Category (id) -import Control.Arrow ((>>^), (&&&), (>>>)) +import Control.Arrow (arr, (>>^), (&&&), (>>>)) import System.FilePath (takeBaseName, takeDirectory) import Data.Monoid (Monoid, mempty) import Data.Map (Map) @@ -72,6 +73,8 @@ import Hakyll.Core.ResourceProvider import Hakyll.Web.Page.Internal import Hakyll.Web.Page.Read import Hakyll.Web.Page.Metadata +import Hakyll.Web.Pandoc +import Hakyll.Web.Template import Hakyll.Web.Util.String -- | Create a page from a body, without metadata @@ -91,8 +94,12 @@ toMap (Page m b) = M.insert "body" b m -- | Read a page (do not render it) -- -pageRead :: Compiler Resource (Page String) -pageRead = getResourceString >>^ readPage +readPageCompiler :: Compiler Resource (Page String) +readPageCompiler = getResourceString >>^ readPage + +defaultPageCompiler :: Compiler Resource (Page String) +defaultPageCompiler = cached "Hakyll.Web.Page.defaultPageCompiler" $ + readPageCompiler >>> addDefaultFields >>> arr applySelf >>> pageRenderPandoc -- | Add a number of default metadata fields to a page. These fields include: -- diff --git a/src/Hakyll/Web/Page/Metadata.hs b/src/Hakyll/Web/Page/Metadata.hs index 2880ece..23d98a4 100644 --- a/src/Hakyll/Web/Page/Metadata.hs +++ b/src/Hakyll/Web/Page/Metadata.hs @@ -2,6 +2,7 @@ -- module Hakyll.Web.Page.Metadata ( getField + , getFieldMaybe , setField , setFieldA , renderField @@ -31,7 +32,14 @@ import Hakyll.Web.Util.String getField :: String -- ^ Key -> Page a -- ^ Page -> String -- ^ Value -getField key = fromMaybe "" . M.lookup key . pageMetadata +getField key = fromMaybe "" . getFieldMaybe key + +-- | Get a field in a 'Maybe' wrapper +-- +getFieldMaybe :: String -- ^ Key + -> Page a -- ^ Page + -> Maybe String -- ^ Value, if found +getFieldMaybe key = M.lookup key . pageMetadata -- | Add a metadata field. If the field already exists, it is not overwritten. -- diff --git a/src/Hakyll/Web/Pandoc.hs b/src/Hakyll/Web/Pandoc.hs index 308d06b..f225997 100644 --- a/src/Hakyll/Web/Pandoc.hs +++ b/src/Hakyll/Web/Pandoc.hs @@ -27,7 +27,7 @@ import Text.Pandoc import Hakyll.Core.Compiler import Hakyll.Web.FileType -import Hakyll.Web.Page +import Hakyll.Web.Page.Internal -- | Read a string using pandoc, with the default options -- diff --git a/src/Hakyll/Web/Template.hs b/src/Hakyll/Web/Template.hs index 78ddbba..70b689a 100644 --- a/src/Hakyll/Web/Template.hs +++ b/src/Hakyll/Web/Template.hs @@ -51,7 +51,6 @@ module Hakyll.Web.Template import Control.Arrow import Data.Maybe (fromMaybe) -import qualified Data.Map as M import System.FilePath (takeExtension) import Text.Hamlet (HamletSettings, defaultHamletSettings) @@ -61,7 +60,8 @@ import Hakyll.Core.Identifier import Hakyll.Core.ResourceProvider import Hakyll.Web.Template.Internal import Hakyll.Web.Template.Read -import Hakyll.Web.Page +import Hakyll.Web.Page.Internal +import Hakyll.Web.Page.Metadata -- | Substitutes @$identifiers@ in the given @Template@ by values from the given -- "Page". When a key is not found, it is left as it is. You can specify @@ -73,7 +73,7 @@ applyTemplate template page = where substitute (Chunk chunk) = chunk substitute (Key key) = - fromMaybe ("$" ++ key ++ "$") $ M.lookup key $ toMap page + fromMaybe ("$" ++ key ++ "$") $ getFieldMaybe key page substitute (Escaped) = "$" -- | Apply a page as it's own template. This is often very useful to fill in -- cgit v1.2.3