module Rakka.Wiki.Interpreter.PageList ( interpreters ) where import Data.Maybe import Data.Time 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: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 mkPageList pages } where mkPageList :: [Page] -> IO BlockElement mkPageList pages = do items <- mapM mkListItem pages return (Div [("class", "recentUpdates")] [ Block (List Bullet items) ]) mkListItem :: Page -> IO ListItem mkListItem page = do lastMod <- utcToLocalZonedTime (entityLastMod page) return ( [ Inline ( PageLink { linkPage = Just (pageName page) , linkFragment = Nothing , linkText = Nothing } ) , Block ( Div [("class", "date")] [Inline (Text (formatRFC1123DateTime lastMod))] ) ] ++ case entitySummary page of Just s -> [ Block (Paragraph [Text s]) ] Nothing -> [] )