summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortim b <timb@camcompu.home>2010-06-10 07:20:27 -0700
committertim b <timb@camcompu.home>2010-06-10 07:20:27 -0700
commitba644ed21427afba75a8a578dda3e267c11c81f9 (patch)
treeb7cf97f1135e27d561378ad2cf2728909584571b
parent0ff4dd1bbd2c917c28727346947a95f9c31e7b53 (diff)
hacky search
-rw-r--r--src/site.clj22
-rw-r--r--template/search_files.st80
2 files changed, 102 insertions, 0 deletions
diff --git a/src/site.clj b/src/site.clj
index 9a5cda3..2e4180c 100644
--- a/src/site.clj
+++ b/src/site.clj
@@ -795,6 +795,25 @@ FROM users u
favs (reduce (fn [m fav] (assoc m (str (fav :message_id)) (fav :content))) {} raw-favs)]
(str "RawFavs=" (json-str favs))))
+(defn ghetto-search-query []
+ (str "select
+ content from messages, rooms
+ where messages.room_id=rooms.room_id
+ and content ilike ? and content like '%http://%'
+ and admin_only = 'f'
+ order by message_id desc
+ limit 100;"))
+
+(def *ghetto-search-regex* #"^[A-Za-z0-9\-_]*$")
+
+(defn json-ghetto-search [searchterm]
+ ( if (re-matches *ghetto-search-regex* searchterm)
+ (let [searchterm (str "%" searchterm "%")
+ query (ghetto-search-query)
+ rows (do-select [query searchterm])]
+ (str "searchResult(" (json-str rows) ")"))
+ (str "searchError('sorry, no fancy characters')")))
+
;; Account resets
(defn reset-request-page [session]
@@ -1001,6 +1020,9 @@ FROM users u
(POST "/cancel-mute" (handle-cancel-mute! session params))
(GET "/profile-test/:t" (profile session "ryder" "0" (params :t)))
+ (GET "/cmd/ghettosearch/:searchterm" (json-ghetto-search (params :searchterm)))
+ (GET "/search" (serve-template "search_files" session))
+
;; Footer pages
(GET "/about_us" (serve-template "about_us" session))
(GET "/goodies" (serve-template "goodies" session))
diff --git a/template/search_files.st b/template/search_files.st
new file mode 100644
index 0000000..ebe4d39
--- /dev/null
+++ b/template/search_files.st
@@ -0,0 +1,80 @@
+<html>
+ <head>
+ <title>dump.fm image search</title>
+ $head()$
+ </head>
+ <body>
+
+ <input type="text" name="search-query" id="search-query" />
+ <div id="message"></div>
+ <div id="content"></div>
+
+ </body>
+
+ <script>
+ var term = ""
+ var maxImages = 20;
+
+ function addScript(term){
+ jQuery("#search-script").remove()
+ jQuery("head").append("<scr"+"ipt src='/cmd/ghettosearch/"+term+"' id='search-script'></sc"+"ript>")
+ }
+
+ function setContent(x){
+ jQuery("#content").html(x)
+ }
+
+ function setMessage(x){
+ jQuery("#message").html(x)
+ }
+
+ function searchError(error){
+ setContent("")
+ setMessage(error)
+ }
+
+ function searchResult(results){
+ var images = []
+ var alreadyGot = {}
+ if(results === null || results.length == 0) {
+ setContent("")
+ setMessage("no results found")
+ } else {
+
+ for(var r = 0; r<results.length; r++){
+ if (images.length == maxImages) break;
+ var content = results[r]['content']
+ if (content.substring(0,6) == "<safe>") continue; // skip html posts
+ var imageUrls = getImagesAsArray(content);
+ for (var i=0; i<imageUrls; i++){
+ var imageUrl = imageUrls[i];
+ if (imageUrl in alreadyGot) continue;
+ alreadyGot[imageUrl] = true
+ if (imageUrl.indexOf(term) > -1)
+ images.push(imageUrl)
+ }
+ }
+ var contentString = ''
+ for(var i = 0; i < images.length; i++){
+ contentString += '<a href="'+images[i]+'"><img src="'+images[i]+'"></a>'
+ }
+ setContent(contentString)
+ }
+ }
+
+ function keyHandler(){
+ term = jQuery("#search-query").val().trim()
+ if (term.length < 3) {
+ setMessage("search query too small")
+ } else {
+ setMessage("searching for '"+term+"'")
+ addScript(term)
+ }
+ }
+
+ jQuery("#search-query").keyup(keyHandler)
+
+
+ </script>
+
+</html> \ No newline at end of file