module Rakka.Wiki.Interpreter.PageList
( interpreters
)
where
import Data.Maybe
import Data.Time
import Network.HTTP.Lucu.RFC1123DateTime
import Rakka.Page
import Rakka.Storage
import Rakka.Wiki
import Rakka.Wiki.Interpreter
import Text.HyperEstraier
interpreters :: [Interpreter]
interpreters = [ recentUpdatesInterp ]
--
--
-- -
-- ...
--
...
--
-- blah blah...
--
--
-- ...
--
--
recentUpdatesInterp :: Interpreter
recentUpdatesInterp
= BlockCommandInterpreter {
bciName = "recentUpdates"
, bciInterpret
= \ ctx (BlockCommand _ args _)
-> do let items = fromMaybe 10 $ fmap read $ lookup "items" args
sto = ctxStorage ctx
cond <- newCondition
setPhrase cond "[UVSET]"
addAttrCond cond "rakka:isBoring STREQ no"
addAttrCond cond "rakka:summary STRNE" -- summary が空でない
setOrder cond "@mdate NUMD"
setMax cond items
result <- searchPages sto cond
pages <- mapM ( \ (name, rev)
-> getPage sto name (Just rev) >>= return . fromJust
) result
mkPageList pages
}
where
mkPageList :: [Page] -> IO BlockElement
mkPageList pages
= do items <- mapM mkListItem pages
return (Div [("class", "recentUpdates")]
[ Block (List Bullet items) ])
mkListItem :: Page -> IO ListItem
mkListItem page
= do lastMod <- utcToLocalZonedTime (pageLastMod page)
return ( [ Inline ( PageLink {
linkPage = Just (pageName page)
, linkFragment = Nothing
, linkText = Nothing
}
)
, Block ( Div [("class", "date")]
[Inline (Text (formatRFC1123DateTime lastMod))]
)
]
++
case pageSummary page of
Just s -> [ Block (Paragraph [Text s]) ]
Nothing -> []
)