]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Wiki/Interpreter/PageList.hs
merge branch origin/master
[Rakka.git] / Rakka / Wiki / Interpreter / PageList.hs
index 6afae0fd8750ec9f989a4a0e29a1a7db5871562e..4faee0f091ca48f2fd1cdce27895308d8eb2984f 100644 (file)
@@ -1,22 +1,51 @@
+{-# LANGUAGE
+    OverloadedStrings
+  , RecordWildCards
+  , UnicodeSyntax
+  #-}
 module Rakka.Wiki.Interpreter.PageList
     ( interpreters
     )
     where
-
-import           Control.Monad
-import           Data.Maybe
+import Control.Applicative
+import Control.Monad
+import qualified Data.ByteString.Char8 as C8
+import Data.Maybe
+import Data.Monoid.Unicode
+import qualified Data.Text as T
 import           Data.Time
-import           Network.HTTP.Lucu.RFC1123DateTime
-import           Rakka.Page
+import qualified Data.Time.RFC1123 as RFC1123
+import           Network.URI
+import Prelude.Unicode
 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 = '?' : C8.unpack (mkQueryString [ ("q"    , "[UVSET]")
+                                                                                , ("order", "@mdate NUMD")
+                                                                                ])
+                                    }
+                          return $ ExternalLink uri (Just "List all pages")
+      }
 
 
 -- <div class="recentUpdates">
@@ -31,59 +60,49 @@ interpreters = [ recentUpdatesInterp ]
 --     ...
 --   </ul>
 -- </div>
-recentUpdatesInterp :: Interpreter
+recentUpdatesInterp  Interpreter
 recentUpdatesInterp 
     = BlockCommandInterpreter {
         bciName      = "recentUpdates"
       , bciInterpret
-          = \ ctx (BlockCommand _ args _)
-          -> 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
-                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 (getPageBySR sto) result
-
-                mkPageList showSummary pages
+          = \(InterpreterContext {..}) (BlockCommand _ args _) →
+            do let items          = fromMaybe 10   $ read ∘ T.unpack <$> lookup "items" args
+                   showSummary    = fromMaybe True $ parseYesOrNo    <$> lookup "showSummary" args
+                   onlyEntity     = fromMaybe True $ parseYesOrNo    <$> lookup "onlyEntity" args
+                   onlySummarized = fromMaybe True $ parseYesOrNo    <$> lookup "onlySummarized" args
+               cond ← newCondition
+               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 ctxStorage cond
+               mkPageList showSummary (srPages result)
       }
     where
-      getPageBySR :: Storage -> SearchResult -> IO Page
-      getPageBySR sto sr
-          = getPage sto (srPageName sr) (Just (srPageRev sr)) >>= return . fromJust
-
-      mkPageList :: Bool -> [Page] -> IO BlockElement
+      mkPageList :: Bool -> [HitPage] -> IO BlockElement
       mkPageList showSummary pages
           = do items <- mapM (mkListItem showSummary) pages
                return (Div [("class", "recentUpdates")]
                        [ Block (List Bullet items) ])
 
-      mkListItem :: Bool -> Page -> IO ListItem
+      mkListItem ∷ Bool → HitPage → IO ListItem
       mkListItem showSummary page
-          = do lastMod <- utcToLocalZonedTime (entityLastMod page)
-               return ( [ Inline ( PageLink {
-                                     linkPage     = Just (pageName page)
-                                   , linkFragment = Nothing
-                                   , linkText     = Nothing
-                                   }
-                                 )
+          = 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 (T.pack $ RFC1123.format lastMod))]
                                 )
                         ]
-                        ++
-                        case (showSummary, entitySummary page) of
+                        ⊕
+                        case (showSummary, hpSummary page) of
                           (True, Just s)
-                              -> [ Block (Paragraph [Text s]) ]
-                          _   -> []
+                               [ Block (Paragraph [Text s]) ]
+                          _    []
                       )