diff options
| -rw-r--r-- | src/site.clj | 20 | ||||
| -rw-r--r-- | template/search_files.st | 29 |
2 files changed, 33 insertions, 16 deletions
diff --git a/src/site.clj b/src/site.clj index 8596021..75980aa 100644 --- a/src/site.clj +++ b/src/site.clj @@ -795,22 +795,24 @@ 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 [] +(defn ghetto-search-query [num-tokens] (str "select content from messages, rooms where messages.room_id=rooms.room_id - and content ilike ? and content like '%http://%' + and content ilike " (str-join " and content ilike " (take num-tokens (repeat "?"))) " + and content like '%http://%' and admin_only = 'f' order by message_id desc limit 250;")) -(def *ghetto-search-regex* #"^[A-Za-z0-9\-_]*$") +(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])] +(defn json-ghetto-search [undecoded-url-searchterms] + ( if (re-matches *ghetto-search-regex* undecoded-url-searchterms) + (let [tokens (map url-decode (re-split #"\+" undecoded-url-searchterms)) + tokens (map #(str "%" %1 "%") tokens) + query (ghetto-search-query (count tokens)) + rows (do-select (vec (concat [query] tokens)))] (str "searchResult(" (json-str rows) ")")) (str "searchError('sorry, no fancy characters')"))) @@ -1020,7 +1022,7 @@ 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 "/cmd/ghettosearch/:searchterm" (json-ghetto-search (undecoded-url-piece (request-url request) 2))) (GET "/search" (serve-template "search_files" session)) ;; Footer pages diff --git a/template/search_files.st b/template/search_files.st index f726364..d3deea5 100644 --- a/template/search_files.st +++ b/template/search_files.st @@ -9,7 +9,7 @@ </head> <body> - <center>search dumps: <input type="text" name="search-query" id="search-query" /></center> + <center>search dumps: <input type="text" name="search-query" id="search-query" /></center><br><br> <center><div id="message"></div><br><br></center> <div id="content"></div> @@ -72,8 +72,15 @@ var imageUrl = imageUrls[i]; if (imageUrl in alreadyGot) continue; alreadyGot[imageUrl] = true - if (imageUrl.indexOf(term) > -1) - images.push(imageUrl) + var validImage = true; + for(var t = 0; t<tokens.length; t++){ + if (imageUrl.toLowerCase().indexOf(tokens[t]) == -1) { + validImage = false; + break; + } + } + if (validImage) + images.push(imageUrl); } } if (images.length == 0) { @@ -83,13 +90,21 @@ } } + var tokens = [] + function doSearch(){ - term = jQuery("#search-query").val().trim() - if (term.length < 3) { + term = jQuery("#search-query").val().trim().toLowerCase() + var rawTokens = term.split(" ") + tokens = [] + for(var t = 0; t < rawTokens.length; t++) { + if (rawTokens[t].length > 2) + tokens.push(rawTokens[t]) + } + if (tokens.length == 0) { setMessage("search query too small") } else { - setMessage("searching for '"+term+"'") - addScript(term) + setMessage("searching for '"+tokens.join(" and ")+"'") + addScript(tokens.join("+")) } } |
