diff options
| author | tim b <timb@camcompu.home> | 2010-06-10 07:20:27 -0700 |
|---|---|---|
| committer | tim b <timb@camcompu.home> | 2010-06-10 07:20:27 -0700 |
| commit | ba644ed21427afba75a8a578dda3e267c11c81f9 (patch) | |
| tree | b7cf97f1135e27d561378ad2cf2728909584571b | |
| parent | 0ff4dd1bbd2c917c28727346947a95f9c31e7b53 (diff) | |
hacky search
| -rw-r--r-- | src/site.clj | 22 | ||||
| -rw-r--r-- | template/search_files.st | 80 |
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 |
