X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FResource%2FSearch.hs;h=993788ded4b17001ce8cc75047549330ebdce3fe;hb=223d4df57fa1371945075d4d2714e5f36c1fc5dd;hp=6f72195b41c0ffb172c5ee499242381c1805da7f;hpb=9d86882fe1630c844e11cf2cf760110c04ea10d4;p=Rakka.git diff --git a/Rakka/Resource/Search.hs b/Rakka/Resource/Search.hs index 6f72195..993788d 100644 --- a/Rakka/Resource/Search.hs +++ b/Rakka/Resource/Search.hs @@ -3,15 +3,12 @@ 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 qualified Data.Time.W3C as W3C import Network.HTTP.Lucu import Network.HTTP.Lucu.RFC1123DateTime import Network.URI hiding (query, fragment) @@ -21,14 +18,11 @@ import Rakka.Resource import Rakka.Storage import Rakka.SystemConfig import Rakka.Utils -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 + {- 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 @@ -117,7 +116,7 @@ handleSearch env += attr "name" (arr hpPageName >>> mkText) += attr "lastModified" ( arrIO (utcToLocalZonedTime . hpLastMod) >>> - arr formatW3CDateTime + arr W3C.format >>> mkText ) @@ -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" @@ -282,7 +281,7 @@ searchResultToXHTML env += sattr "class" "date" += ( getAttrValue "lastModified" >>> - arr (zonedTimeToUTC . fromJust . parseW3CDateTime) + arr (zonedTimeToUTC . fromJust . W3C.parse) >>> arrIO utcToLocalZonedTime >>> @@ -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