1 module Rakka.Wiki.Interpreter.PageList
8 import Network.HTTP.Lucu.RFC1123DateTime
12 import Rakka.Wiki.Interpreter
13 import Text.HyperEstraier
16 interpreters :: [Interpreter]
17 interpreters = [ recentUpdatesInterp ]
20 -- <div class="recentUpdates">
23 -- <a href="...">...</a>
24 -- <div class="date">...</div>
25 -- <p> <!-- サマリが無ければ存在しない -->
32 recentUpdatesInterp :: Interpreter
34 = BlockCommandInterpreter {
35 bciName = "recentUpdates"
37 = \ ctx (BlockCommand _ args _)
38 -> do let items = fromMaybe 10 $ fmap read $ lookup "items" args
42 setPhrase cond "[UVSET]"
43 addAttrCond cond "rakka:summary STRNE" -- summary が空でない
44 setOrder cond "@mdate NUMD"
47 result <- searchPages sto cond
48 pages <- mapM ( \ (name, rev)
49 -> getPage sto name (Just rev) >>= return . fromJust
55 mkPageList :: [Page] -> IO BlockElement
57 = do items <- mapM mkListItem pages
58 return (Div [("class", "recentUpdates")]
59 [ Block (List Bullet items) ])
61 mkListItem :: Page -> IO ListItem
63 = do lastMod <- utcToLocalZonedTime (entityLastMod page)
64 return ( [ Inline ( PageLink {
65 linkPage = Just (pageName page)
66 , linkFragment = Nothing
70 , Block ( Div [("class", "date")]
71 [Inline (Text (formatRFC1123DateTime lastMod))]
75 case entitySummary page of
76 Just s -> [ Block (Paragraph [Text s]) ]