summaryrefslogtreecommitdiff
path: root/static/js
diff options
context:
space:
mode:
Diffstat (limited to 'static/js')
-rw-r--r--static/js/pichat.js145
1 files changed, 145 insertions, 0 deletions
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("<scr"+"ipt src='/cmd/ghettosearch/"+term+"' id='search-script'></sc"+"ript>")
+ },
+ '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 += '<a href="'+Search.images[i]+'" target="_blank" onclick="return Search.addToChatBoxIfPossible(this)"><img src="'+Search.images[i]+'"></a>'
+ imageCounter += 1
+ }
+ contentString += '<br><br><div id="search-commands">'
+ 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<results.length; r++){
+ 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.length; i++){
+ var imageUrl = imageUrls[i];
+ if (imageUrl in alreadyGot) continue;
+ alreadyGot[imageUrl] = true
+ var validImage = true;
+ for(var t = 0; t<Search.tokens.length; t++){
+ if (imageUrl.toLowerCase().indexOf(Search.tokens[t]) == -1) {
+ validImage = false;
+ break;
+ }
+ }
+ if (validImage)
+ Search.images.push(imageUrl);
+ }
+ }
+ if (Search.images.length == 0) {
+ Search.setMessage("no results found")
+ }
+ Search.renderPage(0)
+ }
+ },
+ 'close': function(){
+ Search.setContent("")
+ $("#search-results-images").css("display", "none")
+ $("#search-controls").css("display", "none")
+ }
+
+
+}
+
// scrolling stuff
// this code keeps the div scrolled to the bottom, but will also let the user scroll up, without jumping down
@@ -821,6 +965,7 @@ function initDirectory() {
var t = $(this);
t.html(buildMsgContent(t.text()));
});
+ Search.init()
}
//big hand stuff