summaryrefslogtreecommitdiff
path: root/template/search_script.st
blob: 94461b3385d6152fe4ac801e2650985a2364194d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
var term = ""
var imagesPerPage = 25;
var images = []
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("#searchresults").html(x)
}

function setMessage(x){
    jQuery("#message").html(x)
}

function searchError(error){
    setContent("")
    setMessage(error)
}

function renderPage(num){
    if (images.length > 0)
        setMessage("page " + (num + 1));
    var contentString = ''
    var start = num * imagesPerPage
    var imageCounter = 0
    for(var i = start; i < images.length; i++){
        if(imageCounter > imagesPerPage) break;
        contentString += '<a href="'+images[i]+'"target="_blank"><img src="'+images[i]+'"></a>'
        imageCounter += 1
    }
    contentString += '<br><br>'
    if(num > 0)
        contentString += '<a href="javascript:renderPage('+(num-1)+')"><h1>previous</h1></a> '
    if (images.length > start + imageCounter)
        contentString += ' <a href="javascript:renderPage('+(num+1)+')"><h1>next</h1></a>'
    setContent(contentString)
}

function searchResult(results){
    images = []
    var alreadyGot = {}
    if(results === null || results.length == 0) {
        setContent("")
        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<tokens.length; t++){
		    if (imageUrl.toLowerCase().indexOf(tokens[t]) == -1) {
			validImage = false;
			break;
		    }
		}
		if (validImage)
		    images.push(imageUrl);
            }
        }
        if (images.length == 0) {
            setMessage("no results found")  
        }
        renderPage(0)
    }
}

var tokens = []

function doSearch(){
    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 '"+tokens.join(" and ")+"'")
        addScript(tokens.join("+"))
    }
}

// only search every 800ms while someone is typing
function keyHandler(){
    if (keyHandler.timeout) clearTimeout(keyHandler.timeout);
    keyHandler.timeout = setTimeout(doSearch, 800)
}

jQuery("#search-query").keyup(keyHandler)