1 module Rakka.Wiki.Interpreter.PageList
9 import Network.HTTP.Lucu.RFC1123DateTime
14 import Rakka.Wiki.Interpreter
15 import Text.HyperEstraier
18 interpreters :: [Interpreter]
19 interpreters = [ recentUpdatesInterp ]
22 -- <div class="recentUpdates">
25 -- <a href="...">...</a>
26 -- <div class="date">...</div>
27 -- <p> <!-- サマリが無ければ存在しない -->
34 recentUpdatesInterp :: Interpreter
36 = BlockCommandInterpreter {
37 bciName = "recentUpdates"
39 = \ ctx (BlockCommand _ args _)
40 -> do let items = fromMaybe 10 $ fmap read $ lookup "items" args
41 showSummary = fromMaybe True $ fmap parseYesOrNo $ lookup "showSummary" args
42 onlyEntity = fromMaybe True $ fmap parseYesOrNo $ lookup "onlyEntity" args
43 onlySummarized = fromMaybe True $ fmap parseYesOrNo $ lookup "onlySummarized" args
47 setPhrase cond "[UVSET]"
49 $ addAttrCond cond "@type STRNE application/x-rakka-redirection"
51 $ addAttrCond cond "rakka:summary STRNE" -- summary が空でない
52 setOrder cond "@mdate NUMD"
55 result <- searchPages sto cond
56 pages <- mapM ( \ (name, rev)
57 -> getPage sto name (Just rev) >>= return . fromJust
60 mkPageList showSummary pages
63 mkPageList :: Bool -> [Page] -> IO BlockElement
64 mkPageList showSummary pages
65 = do items <- mapM (mkListItem showSummary) pages
66 return (Div [("class", "recentUpdates")]
67 [ Block (List Bullet items) ])
69 mkListItem :: Bool -> Page -> IO ListItem
70 mkListItem showSummary page
71 = do lastMod <- utcToLocalZonedTime (entityLastMod page)
72 return ( [ Inline ( PageLink {
73 linkPage = Just (pageName page)
74 , linkFragment = Nothing
78 , Block ( Div [("class", "date")]
79 [Inline (Text (formatRFC1123DateTime lastMod))]
83 case (showSummary, entitySummary page) of
85 -> [ Block (Paragraph [Text s]) ]