]> git.decadent.org.uk Git - memories.git/blob - templates/static/upload.js
Rather more lightweight (and functional) tag completion code.
[memories.git] / templates / static / upload.js
1 String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g,'') }
2 String.prototype.escRegExp = function(){ return this.replace(/[\\$*+?()=!|,{}\[\]\.^]/g,'\\$&') }
3 String.prototype.unescHtml = function(){ var i,t=this; for(i in e) t=t.replace(new RegExp(i,'g'),e[i]); return t }
4 var availhash = {};
5 var tags = tagList.split(/\s+/); 
6 for (t in tags) { availhash[tags[t]] = 1 }
7
8 function addHandler( elt ) {
9     var params = {
10         elt: elt,
11         oldvalue: elt.value
12     };
13     document.onkeyup = function (event) {
14        var e=(event||window.event) //w3||ie
15         switch(e.keyCode) {
16             case 35: //end
17             case 36: //home
18             case 39: // right
19             case 37: // left
20             case 32: // space
21                 params.elt.style.background = "#fff";
22                 $("suggestionlist").style.visibility='hidden';
23                 break
24             case 38: case 40: case 9: case 13: break;
25             default: 
26             var tagArray = params.elt.value.toLowerCase().split(' '),
27             txt=tagArray[tagArray.length-1].trim().escRegExp(), tagHash={}, t
28             for(t in tagArray) tagHash[tagArray[t]] = true;
29             var sl = $("suggestionlist");
30             if (!txt) { sl.style.visibility = 'hidden'; return; }
31
32             var search = tagList.match(new RegExp(("(?:^| )("+txt+"[^ ]+)"), "gi"))
33             if(search){ 
34                 params.elt.style.background = availhash[txt] ? "#dfd" : "#fff";
35                 while(sl.childNodes.length > 0) { sl.removeChild(sl.firstChild) }
36                 sl.style.visibility='visible';
37                 var i;
38                 for (i in search) {
39                     if (!tagHash[search[i]]) {
40                         var tn = document.createTextNode(search[i]);
41                         var a = document.createElement("a");
42                         var elt = params.elt;
43                         var closureTxt = txt;
44                         a.onclick = function () {
45                             elt.value = elt.value.replace(new RegExp(closureTxt+"$"),this.firstChild.nodeValue+" ");
46                             elt.focus(); 
47                             sl.style.visibility='hidden';
48                         };
49                         a.appendChild(tn);
50                         sl.appendChild(a);
51                     }
52                 }
53             } else { 
54                 params.elt.style.background = availhash[txt] ? "#dfd" : "#fdd";
55                 sl.style.visibility='hidden';
56            }
57         }
58     }
59 }