module Rakka.Wiki.Interpreter.PageList ( interpreters ) where import Data.Maybe import Network.HTTP.Lucu.RFC1123DateTime import Rakka.Page import Rakka.Storage import Rakka.Wiki import Rakka.Wiki.Interpreter import Text.HyperEstraier interpreters :: [Interpreter] interpreters = [ recentUpdatesInterp ] --
-- --
recentUpdatesInterp :: Interpreter recentUpdatesInterp = BlockCommandInterpreter { bciName = "recentUpdates" , bciInterpret = \ ctx (BlockCommand _ args _) -> do let items = fromMaybe 10 $ fmap read $ lookup "items" args sto = ctxStorage ctx cond <- newCondition setPhrase cond "[UVSET]" addAttrCond cond "rakka:isBoring STREQ no" addAttrCond cond "rakka:summary STRNE" -- summary が空でない setOrder cond "@mdate NUMD" setMax cond items result <- searchPages sto cond pages <- mapM ( \ (name, rev) -> getPage sto name (Just rev) >>= return . fromJust ) result return $ mkPageList pages } where mkPageList :: [Page] -> BlockElement mkPageList pages = Div [("class", "recentUpdates")] [ Block (List Bullet (map mkListItem pages)) ] mkListItem :: Page -> ListItem mkListItem page = [ Inline ( PageLink { linkPage = Just (pageName page) , linkFragment = Nothing , linkText = Nothing } ) , Block ( Div [("class", "date")] [Inline (Text (formatRFC1123DateTime (pageLastMod page)))] ) ] ++ case pageSummary page of Just s -> [ Block (Paragraph [Text s]) ] Nothing -> []