]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Wiki/Interpreter/PageList.hs
preparation for feed generation
[Rakka.git] / Rakka / Wiki / Interpreter / PageList.hs
index 2815bda638878a098715b57dd82d11988b445aa4..1ad6728c3ba370649cb961b8deeb8e452727ab2a 100644 (file)
@@ -3,11 +3,13 @@ module Rakka.Wiki.Interpreter.PageList
     )
     where
 
+import           Control.Monad
 import           Data.Maybe
 import           Data.Time
 import           Network.HTTP.Lucu.RFC1123DateTime
 import           Rakka.Page
 import           Rakka.Storage
+import           Rakka.Utils
 import           Rakka.Wiki
 import           Rakka.Wiki.Interpreter
 import           Text.HyperEstraier
@@ -35,12 +37,18 @@ recentUpdatesInterp
         bciName      = "recentUpdates"
       , bciInterpret
           = \ ctx (BlockCommand _ args _)
-          -> do let items = fromMaybe 10 $ fmap read $ lookup "items" args
-                    sto   = ctxStorage ctx
+          -> do let items          = fromMaybe 10   $ fmap read         $ lookup "items" args
+                    showSummary    = fromMaybe True $ fmap parseYesOrNo $ lookup "showSummary" args
+                    onlyEntity     = fromMaybe True $ fmap parseYesOrNo $ lookup "onlyEntity" args
+                    onlySummarized = fromMaybe True $ fmap parseYesOrNo $ lookup "onlySummarized" args
+                    sto            = ctxStorage ctx
                 
                 cond <- newCondition
                 setPhrase   cond "[UVSET]"
-                addAttrCond cond "rakka:summary STRNE" -- summary が空でない
+                when onlyEntity
+                    $ addAttrCond cond "@type STRNE application/x-rakka-redirection"
+                when onlySummarized
+                    $ addAttrCond cond "rakka:summary STRNE" -- summary が空でない
                 setOrder    cond "@mdate NUMD"
                 setMax      cond items
 
@@ -49,17 +57,17 @@ recentUpdatesInterp
                                      -> getPage sto name (Just rev) >>= return . fromJust
                                ) result
 
-                mkPageList pages
+                mkPageList showSummary pages
       }
     where
-      mkPageList :: [Page] -> IO BlockElement
-      mkPageList pages
-          = do items <- mapM mkListItem pages
+      mkPageList :: Bool -> [Page] -> IO BlockElement
+      mkPageList showSummary pages
+          = do items <- mapM (mkListItem showSummary) pages
                return (Div [("class", "recentUpdates")]
                        [ Block (List Bullet items) ])
 
-      mkListItem :: Page -> IO ListItem
-      mkListItem page
+      mkListItem :: Bool -> Page -> IO ListItem
+      mkListItem showSummary page
           = do lastMod <- utcToLocalZonedTime (entityLastMod page)
                return ( [ Inline ( PageLink {
                                      linkPage     = Just (pageName page)
@@ -72,7 +80,8 @@ recentUpdatesInterp
                                 )
                         ]
                         ++
-                        case entitySummary page of
-                          Just s  -> [ Block (Paragraph [Text s]) ]
-                          Nothing -> []
+                        case (showSummary, entitySummary page) of
+                          (True, Just s)
+                              -> [ Block (Paragraph [Text s]) ]
+                          _   -> []
                       )