1 module Rakka.Wiki.Interpreter.PageList
7 import Network.HTTP.Lucu.RFC1123DateTime
11 import Rakka.Wiki.Interpreter
12 import Text.HyperEstraier
15 interpreters :: [Interpreter]
16 interpreters = [ recentUpdatesInterp ]
19 -- <div class="recentUpdates">
22 -- <a href="...">...</a>
23 -- <div class="date">...</div>
24 -- <p> <!-- サマリが無ければ存在しない -->
31 recentUpdatesInterp :: Interpreter
33 = BlockCommandInterpreter {
34 bciName = "recentUpdates"
36 = \ ctx (BlockCommand _ args _)
37 -> do let items = fromMaybe 10 $ fmap read $ lookup "items" args
41 setPhrase cond "[UVSET]"
42 addAttrCond cond "rakka:isBoring STREQ no"
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
52 return $ mkPageList pages
55 mkPageList :: [Page] -> BlockElement
57 = Div [("class", "recentUpdates")]
58 [ Block (List Bullet (map mkListItem pages)) ]
60 mkListItem :: Page -> ListItem
62 = [ Inline ( PageLink {
63 linkPage = Just (pageName page)
64 , linkFragment = Nothing
68 , Block ( Div [("class", "date")]
69 [Inline (Text (formatRFC1123DateTime (pageLastMod page)))]
73 case pageSummary page of
74 Just s -> [ Block (Paragraph [Text s]) ]