)
where
-import qualified Codec.Binary.UTF8.String as UTF8
+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)
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
-import Text.XML.HXT.DOM.TypeDefs
+import Text.XML.HXT.XPath
resSearch :: Environment -> ResourceDef
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"
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
+= attr "name" (arr hpPageName >>> mkText)
+= attr "lastModified" ( arrIO (utcToLocalZonedTime . hpLastMod)
>>>
- arr formatW3CDateTime
+ arr W3C.format
>>>
mkText
)
+= sattr "class" "date"
+= ( getAttrValue "lastModified"
>>>
- arr (zonedTimeToUTC . fromJust . parseW3CDateTime)
+ arr (zonedTimeToUTC . fromJust . W3C.parse)
>>>
arrIO utcToLocalZonedTime
>>>