1 module Rakka.Wiki.Interpreter.PageList
9 import Network.HTTP.Lucu.RFC1123DateTime
12 import Rakka.SystemConfig
15 import Rakka.Wiki.Interpreter
16 import System.FilePath
17 import Text.HyperEstraier
20 interpreters :: [Interpreter]
21 interpreters = [ recentUpdatesURLInterp
26 recentUpdatesURLInterp :: Interpreter
27 recentUpdatesURLInterp
28 = InlineCommandInterpreter {
29 iciName = "recentUpdatesURL"
31 = \ ctx _ -> do BaseURI baseURI <- getSysConf (ctxSysConf ctx)
33 uriPath = uriPath baseURI </> "search.html"
34 , uriQuery = '?' : mkQueryString [ ("q" , "[UVSET]")
35 , ("order", "@mdate NUMD")
38 return $ ExternalLink uri (Just "List all pages")
42 -- <div class="recentUpdates">
45 -- <a href="...">...</a>
46 -- <div class="date">...</div>
47 -- <p> <!-- サマリが無ければ存在しない -->
54 recentUpdatesInterp :: Interpreter
56 = BlockCommandInterpreter {
57 bciName = "recentUpdates"
59 = \ ctx (BlockCommand _ args _)
60 -> do let items = fromMaybe 10 $ fmap read $ lookup "items" args
61 showSummary = fromMaybe True $ fmap parseYesOrNo $ lookup "showSummary" args
62 onlyEntity = fromMaybe True $ fmap parseYesOrNo $ lookup "onlyEntity" args
63 onlySummarized = fromMaybe True $ fmap parseYesOrNo $ lookup "onlySummarized" args
68 $ addAttrCond cond "@type STRNE application/x-rakka-redirection"
70 $ addAttrCond cond "rakka:summary STRNE" -- summary が空でない
71 setPhrase cond "[UVSET]"
72 setOrder cond "@mdate NUMD"
75 result <- searchPages sto cond
76 mkPageList showSummary (srPages result)
79 mkPageList :: Bool -> [HitPage] -> IO BlockElement
80 mkPageList showSummary pages
81 = do items <- mapM (mkListItem showSummary) pages
82 return (Div [("class", "recentUpdates")]
83 [ Block (List Bullet items) ])
85 mkListItem :: Bool -> HitPage -> IO ListItem
86 mkListItem showSummary page
87 = do lastMod <- utcToLocalZonedTime (hpLastMod page)
88 return ( [ Inline PageLink {
89 linkPage = Just (hpPageName page)
90 , linkFragment = Nothing
93 , Block ( Div [("class", "date")]
94 [Inline (Text (formatRFC1123DateTime lastMod))]
98 case (showSummary, hpSummary page) of
100 -> [ Block (Paragraph [Text s]) ]