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:isBoring STREQ no"
44 addAttrCond cond "rakka:summary STRNE" -- summary が空でない
45 setOrder cond "@mdate NUMD"
48 result <- searchPages sto cond
49 pages <- mapM ( \ (name, rev)
50 -> getPage sto name (Just rev) >>= return . fromJust
56 mkPageList :: [Page] -> IO BlockElement
58 = do items <- mapM mkListItem pages
59 return (Div [("class", "recentUpdates")]
60 [ Block (List Bullet items) ])
62 mkListItem :: Page -> IO ListItem
64 = do lastMod <- utcToLocalZonedTime (entityLastMod page)
65 return ( [ Inline ( PageLink {
66 linkPage = Just (pageName page)
67 , linkFragment = Nothing
71 , Block ( Div [("class", "date")]
72 [Inline (Text (formatRFC1123DateTime lastMod))]
76 case entitySummary page of
77 Just s -> [ Block (Paragraph [Text s]) ]