X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=Rakka%2FWiki%2FInterpreter%2FPageList.hs;h=2fe9d305fc46509926a60aa6b1ddff9d22a5c403;hb=d717326c5f603dd140a0b5ee27b412e5e09685cd;hp=2815bda638878a098715b57dd82d11988b445aa4;hpb=bc8616eec0bcac3102860c76f93ebfd0da24c2d6;p=Rakka.git
diff --git a/Rakka/Wiki/Interpreter/PageList.hs b/Rakka/Wiki/Interpreter/PageList.hs
index 2815bda..2fe9d30 100644
--- a/Rakka/Wiki/Interpreter/PageList.hs
+++ b/Rakka/Wiki/Interpreter/PageList.hs
@@ -3,18 +3,40 @@ module Rakka.Wiki.Interpreter.PageList
)
where
+import Control.Monad
import Data.Maybe
import Data.Time
-import Network.HTTP.Lucu.RFC1123DateTime
-import Rakka.Page
+import qualified Data.Time.RFC1123 as RFC1123
+import Network.URI
import Rakka.Storage
+import Rakka.SystemConfig
+import Rakka.Utils
import Rakka.Wiki
import Rakka.Wiki.Interpreter
+import System.FilePath
import Text.HyperEstraier
interpreters :: [Interpreter]
-interpreters = [ recentUpdatesInterp ]
+interpreters = [ recentUpdatesURLInterp
+ , recentUpdatesInterp
+ ]
+
+
+recentUpdatesURLInterp :: Interpreter
+recentUpdatesURLInterp
+ = InlineCommandInterpreter {
+ iciName = "recentUpdatesURL"
+ , iciInterpret
+ = \ ctx _ -> do BaseURI baseURI <- getSysConf (ctxSysConf ctx)
+ let uri = baseURI {
+ uriPath = uriPath baseURI > "search.html"
+ , uriQuery = '?' : mkQueryString [ ("q" , "[UVSET]")
+ , ("order", "@mdate NUMD")
+ ]
+ }
+ return $ ExternalLink uri (Just "List all pages")
+ }
--
@@ -35,44 +57,46 @@ 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 ã空ã§ãªã
- setOrder cond "@mdate NUMD"
- setMax cond items
+ when onlyEntity
+ $ addAttrCond cond "@type STRNE application/x-rakka-redirection"
+ when onlySummarized
+ $ addAttrCond cond "rakka:summary STRNE" -- summary ã空ã§ãªã
+ setPhrase cond "[UVSET]"
+ 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
+ mkPageList showSummary (srPages result)
}
where
- mkPageList :: [Page] -> IO BlockElement
- mkPageList pages
- = do items <- mapM mkListItem pages
+ mkPageList :: Bool -> [HitPage] -> 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
- = do lastMod <- utcToLocalZonedTime (entityLastMod page)
- return ( [ Inline ( PageLink {
- linkPage = Just (pageName page)
- , linkFragment = Nothing
- , linkText = Nothing
- }
- )
+ mkListItem :: Bool -> HitPage -> IO ListItem
+ mkListItem showSummary page
+ = do lastMod <- utcToLocalZonedTime (hpLastMod page)
+ return ( [ Inline PageLink {
+ linkPage = Just (hpPageName page)
+ , linkFragment = Nothing
+ , linkText = Nothing
+ }
, Block ( Div [("class", "date")]
- [Inline (Text (formatRFC1123DateTime lastMod))]
+ [Inline (Text (RFC1123.format lastMod))]
)
]
++
- case entitySummary page of
- Just s -> [ Block (Paragraph [Text s]) ]
- Nothing -> []
+ case (showSummary, hpSummary page) of
+ (True, Just s)
+ -> [ Block (Paragraph [Text s]) ]
+ _ -> []
)