on master help sign in
Add setPageField
commit0b4abde7cc4be3f4ccfe9598096f9cfdfb481382 authorJasper Van der Jeugt <jaspervdj@gmail.com> dateFri 10 Jun 2011, 20:09 (15 years ago) parent1ccc5fd
1 file changed+11−1
src/Hakyll/Web/Page/Metadata.hs+11−1
src/Hakyll/Web/Page/Metadata.hs+11−1
@@ -6,6 +6,7 @@ module Hakyll.Web.Page.Metadata
66 , setField
77 , trySetField
88 , setFieldA
9+ , setFieldPage
910 , renderField
1011 , changeField
1112 , copyField
@@ -17,7 +18,7 @@ module Hakyll.Web.Page.Metadata
1718
1819import Prelude hiding (id)
1920import Control.Category (id)
20−import Control.Arrow (Arrow, (>>>), (***), arr)
21+import Control.Arrow (Arrow, arr, (>>>), (***), (&&&))
2122import Data.List (intercalate)
2223import Data.Maybe (fromMaybe)
2324import Data.Time.Clock (UTCTime)
@@ -28,6 +29,8 @@ import System.Locale (TimeLocale, defaultTimeLocale)
2829
2930import Hakyll.Web.Page.Internal
3031import Hakyll.Core.Util.String
32+import Hakyll.Core.Identifier
33+import Hakyll.Core.Compiler
3134
3235-- | Get a metadata field. If the field does not exist, the empty string is
3336-- returned.
@@ -69,6 +72,13 @@ setFieldA :: Arrow a
6972 -> a (Page b, x) (Page b) -- ^ Resulting arrow
7073setFieldA k v = id *** v >>> arr (uncurry $ flip $ setField k)
7174
75+-- | Set a field of a page to the contents of another page
76+--
77+setFieldPage :: String -- ^ Key to add the page under
78+ -> Identifier (Page String) -- ^ Page to add
79+ -> Compiler (Page a) (Page a) -- ^ Page compiler
80+setFieldPage key page = id &&& require_ page >>> setFieldA key (arr pageBody)
81+
7282-- | Do something with a metadata value, but keep the old value as well. If the
7383-- key given is not present in the metadata, nothing will happen. If the source
7484-- and destination keys are the same, the value will be changed (but you should