]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Resource/Search.hs
Resurrection from slight bitrot.
[Rakka.git] / Rakka / Resource / Search.hs
index 6f72195b41c0ffb172c5ee499242381c1805da7f..423bfdc3f32b921393c95892362dbf920f29431d 100644 (file)
@@ -3,13 +3,9 @@ module Rakka.Resource.Search
     )
     where
 
-import qualified Codec.Binary.UTF8.String as UTF8
-import           Control.Arrow
-import           Control.Arrow.ArrowIO
-import           Control.Arrow.ArrowIf
-import           Control.Arrow.ArrowList
-import           Control.Arrow.ArrowTree
+import qualified Codec.Binary.UTF8.Generic as UTF8
 import           Control.Monad.Trans
+import           Data.List
 import           Data.Maybe
 import           Data.Time
 import           Network.HTTP.Lucu
@@ -25,10 +21,8 @@ import           Rakka.W3CDateTime
 import           Rakka.Wiki.Engine
 import           System.FilePath
 import           Text.HyperEstraier hiding (getText)
-import           Text.XML.HXT.Arrow.Namespace
-import           Text.XML.HXT.Arrow.XmlArrow
-import           Text.XML.HXT.Arrow.XmlNodeSet
-import           Text.XML.HXT.DOM.TypeDefs
+import           Text.XML.HXT.Arrow
+import           Text.XML.HXT.XPath
 
 
 resSearch :: Environment -> ResourceDef
@@ -52,6 +46,11 @@ maxSectionWindowSize :: Int
 maxSectionWindowSize = 10
 
 
+findQueryParam :: String -> [FormData] -> Maybe String
+findQueryParam name qps
+    = do fd <- find (\ qp -> fdName qp == name) qps
+         return $ UTF8.toString $ fdContent fd
+
 {-
   <searchResult query="foo bar baz"
                 from="0"
@@ -69,12 +68,12 @@ handleSearch :: Environment -> Resource ()
 handleSearch env
     = do params <- getQueryForm
 
-         let query = UTF8.decodeString $ fromMaybe ""  $ lookup "q" params
-             order = fmap UTF8.decodeString (lookup "order" params)
+         let query = fromMaybe "" $ findQueryParam "q" params
+             order = findQueryParam "order" params
              from  = fromMaybe 0
-                     $ fmap read $ lookup "from" params
+                     $ fmap read $ findQueryParam "from" params
              to    = fromMaybe (from + resultsPerSection)
-                     $ fmap read $ lookup "to"   params
+                     $ fmap read $ findQueryParam "to" params
 
          cond   <- liftIO $ mkCond query order from to
          result <- searchPages (envStorage env) cond
@@ -148,9 +147,9 @@ searchResultToXHTML env
           let cssHref   = [uriToString id (mkObjectURI baseURI styleSheet) ""]
               scriptSrc = [uriToString id (baseURI { uriPath = uriPath baseURI </> "js" }) ""]
 
-          pageTitle    <- listA (readSubPage env) -< (Nothing, Nothing, "PageTitle")
-          leftSideBar  <- listA (readSubPage env) -< (Nothing, Nothing, "SideBar/Left")
-          rightSideBar <- listA (readSubPage env) -< (Nothing, Nothing, "SideBar/Right")
+          pageTitle    <- listA (readSubPage env) -< "PageTitle"
+          leftSideBar  <- listA (readSubPage env) -< "SideBar/Left"
+          rightSideBar <- listA (readSubPage env) -< "SideBar/Right"
 
           ( eelem "/"
             += ( eelem "html"
@@ -382,12 +381,11 @@ searchResultToXHTML env
       uriToText = arr (\ uri -> uriToString id uri "") >>> mkText
 
 
+-- FIXME: localize
 readSubPage :: (ArrowXml a, ArrowChoice a, ArrowIO a) =>
-               Environment
-            -> a (Maybe PageName, Maybe XmlTree, PageName) XmlTree
+               Environment -> a PageName XmlTree
 readSubPage env
-    = proc (mainPageName, mainPage, subPageName) ->
+    = proc (subPageName) ->
       do subPage  <- getPageA (envStorage env) >>> arr fromJust >>> xmlizePage -< (subPageName, Nothing)
-         subXHTML <- makeSubXHTML (envStorage env) (envSysConf env) (envInterpTable env)
-                     -< (mainPageName, mainPage, subPage)
+         subXHTML <- makeSubXHTML (envStorage env) (envSysConf env) (envInterpTable env) -< (Nothing, Nothing, subPage)
          returnA -< subXHTML