[Add mode=embed support Neil Mitchell**20110121075136] { hunk ./CHANGES.txt 3 + Add mode=embed support hunk ./src/Web/Response.hs 18 +import System.IO.Unsafe(unsafeInterleaveIO) hunk ./src/Web/Response.hs 27 - let response x = responseOk [Header HdrContentType x] + let response x ys = responseOk $ [Header HdrContentType x] ++ ys hunk ./src/Web/Response.hs 29 - let res ajax = do - dbs <- if isRight $ queryParsed q - then fmap snd $ loadQueryDatabases (databases q) (fromRight $ queryParsed q) - else return mempty - return $ runQuery ajax dbs q + dbs <- unsafeInterleaveIO $ case queryParsed q of + Left _ -> return mempty + Right x -> fmap snd $ loadQueryDatabases (databases q) (fromRight $ queryParsed q) hunk ./src/Web/Response.hs 34 - Just "ajax" -> do - res <- res True - return $ response "text/html" $ unlines res - Just "web" -> do - res <- res False - return $ response "text/html" $ unlines $ header resources (escapeHTML $ queryText q) ++ res ++ footer - Just "suggest" -> fmap (response "application/json") $ runSuggest q - Just e -> return $ response "text/html" $ "Unknown webmode: " ++ e + Just "suggest" -> fmap (response "application/json" []) $ runSuggest q + Just "embed" -> return $ response "text/html" [hdr] $ unlines $ runEmbed dbs q + where hdr = Header (HdrCustom "Access-Control-Allow-Origin") "*" + Just "ajax" -> return $ response "text/html" [] $ unlines $ runQuery True dbs q + Just "web" -> return $ response "text/html" [] $ unlines $ + header resources (escapeHTML $ queryText q) ++ + runQuery False dbs q ++ footer + mode -> return $ response "text/html" [] $ "Unknown webmode: " ++ fromMaybe "none" mode hunk ./src/Web/Response.hs 63 + +runEmbed :: Database -> CmdLine -> [String] +runEmbed dbs Search{queryParsed = Left err} = ["Parse error: " ++& errorMessage err ++ ""] +runEmbed dbs Search{queryParsed = Right q} + | null now = ["No results found"] + | otherwise = + ["" ++ showTagHTML (transform f $ self $ snd x) ++ "" + | x <- now, let url = fromList "" $ map fst $ locations $ snd x] ++ + ["Press enter for more results..." | not $ null next] + where + (now,next) = splitAt 10 $ search dbs q + + f (TagEmph x) = TagBold x + f (TagBold x) = x + f x = x + }