From c1fc8bcf052c2c7e9d912c4af0f3c33f345ac64d Mon Sep 17 00:00:00 2001 From: tim b Date: Sat, 17 Jul 2010 00:03:19 -0700 Subject: better search --- static/js/pichat.js | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) (limited to 'static/js') diff --git a/static/js/pichat.js b/static/js/pichat.js index 44db3cf..de078f6 100644 --- a/static/js/pichat.js +++ b/static/js/pichat.js @@ -482,6 +482,8 @@ function refresh() { } function initChat() { + Search.init() + $('.oldmsg').each(function() { var dump = $(this); var content = dump.find(".content") @@ -556,6 +558,7 @@ function enableProfileEdit() { } function initProfile() { + Search.init() $(".linkify").each(function() { var text = jQuery(this).text(); jQuery(this).html(linkifyWithoutImage(text)); @@ -571,6 +574,7 @@ function initProfile() { }; function initLog() { + Search.init() $('.logged-dump .content').each(function() { var t = $(this); t.html(buildMsgContent(t.text())); @@ -771,6 +775,146 @@ function setupUploadAvatar(elementId) { }); } +var Search = { + + 'term': "", + 'imagesPerPage': 25, + 'images': [], + 'tokens': [], + + 'init': function(){ + $("#search-query").val("search dump.fm") + $("#search-query").focus(function(){ + if ($("#search-query").val() == 'search dump.fm') + $("#search-query").val("") + }) + $("#search-query").blur(function(){ + if ($("#search-query").val().trim() == '') + $("#search-query").val("search dump.fm") + }) + $("#search-query").keydown(ifEnter(Search.doSearch)) + }, + + 'addScript': function(term) { + $("#search-script").remove() + $("head").append("") + }, + 'setContent': function(x){ + $("#search-results-images").html(x) + }, + 'setMessage': function(x){ + $("#search-controls").css("display", "block") + $("#search-control-text").html(x) + }, + 'searchError': function(error){ + Search.setContent("") + $('#search-control-previous').css("visibility", "hidden") + $('#search-control-next').css("visibility", "hidden") + Search.setMessage(error) + }, + + 'doSearch': function(){ + term = $("#search-query").val().trim().toLowerCase() + var rawTokens = term.split(" ") + Search.tokens = [] + for(var t = 0; t < rawTokens.length; t++) { + if (rawTokens[t].length > 2) + Search.tokens.push(rawTokens[t]) + } + if (Search.tokens.length == 0) { + Search.setMessage("search query too small") + } else { + Search.setMessage("searching for '"+Search.tokens.join(" and ")+"'") + Search.addScript(Search.tokens.join("+")) + } + }, + + 'renderPage': function(num){ + $("#search-results-images").css("display", "block") + $("#search-controls").css("display", "block") + if (Search.images.length > 0) + Search.setMessage("results for '"+Search.tokens.join(" and ")+"' (page " + (num + 1) + ")"); + var contentString = '' + var start = num * Search.imagesPerPage + var imageCounter = 0 + for(var i = start; i < Search.images.length; i++){ + if(imageCounter > Search.imagesPerPage) break; + contentString += '' + imageCounter += 1 + } + contentString += '

' + if(num > 0) { + $('#search-control-previous').attr("href", 'javascript:Search.renderPage('+(num-1)+')') + $('#search-control-previous').css("visibility", "visible") + } else { + $('#search-control-previous').attr("href", 'javascript:void()') + $('#search-control-previous').css("visibility", "hidden") + } + + if (Search.images.length > start + imageCounter) { + $('#search-control-next').attr("href", 'javascript:Search.renderPage('+(num+1)+')') + $('#search-control-next').css("visibility", "visible") + } else { + $('#search-control-next').attr("href", 'javascript:void()') + $('#search-control-next').css("visibility", "hidden") + } + Search.setContent(contentString) + }, + + 'addToChatBoxIfPossible': function(img){ + var chatBoxExists = $("#msgInput").length + if (chatBoxExists) { + var chatText = $("#msgInput").val() + if (chatText.length && chatText[chatText.length - 1] != " ") + chatText += " " + chatText += $(img).attr("href") + " " + $("#msgInput").val(chatText) + $("#msgInput").focus().val($("#msgInput").val()) //http://stackoverflow.com/questions/1056359/ + return false + } else return true + }, + + 'searchResult': function(results){ + Search.images = [] + var alreadyGot = {} + if(results === null || results.length == 0) { + Search.setContent("") + Search.setMessage("no results found") + } else { + for(var r = 0; r") continue; // skip html posts + var imageUrls = getImagesAsArray(content); + for (var i=0; i