X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=templates%2Fstatic%2Fupload.js;h=c62663d10e844bcc3d40a6de746df9f3fb28a8d2;hb=HEAD;hp=0b033c6951c8d7575a397efd49ff4f8bf20070d5;hpb=b9d021d4af1018ac2c60640678c1b790251190e9;p=memories.git diff --git a/templates/static/upload.js b/templates/static/upload.js index 0b033c6..c62663d 100644 --- a/templates/static/upload.js +++ b/templates/static/upload.js @@ -1,82 +1,59 @@ String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g,'') } String.prototype.escRegExp = function(){ return this.replace(/[\\$*+?()=!|,{}\[\]\.^]/g,'\\$&') } String.prototype.unescHtml = function(){ var i,t=this; for(i in e) t=t.replace(new RegExp(i,'g'),e[i]); return t } -function Suggestions() { this.length=0; this.picked=0 } -var suggestions = new Suggestions(); -var tagSearch='', lastEdit=''; -var h={}, sections=[{},{},{},{},{},{}], selected={}, currentTag={}, -e={'<':'<','>':'>','&':'&','"':'"'}; - -function init () { - document.onkeydown = document.onkeypress = document.onkeyup = handler - h.suggest = document.getElementById("suggestionlist"); - h.tags = document.getElementById("tags"); -} - -function handler(event) { var e=(event||window.event) //w3||ie - if (e.type == 'keyup') { +var availhash = {}; +var tags = tagList.split(/\s+/); +for (t in tags) { availhash[tags[t]] = 1 } + +function addHandler( elt ) { + var params = { + elt: elt, + oldvalue: elt.value + }; + document.onkeyup = function (event) { + var e=(event||window.event) //w3||ie switch(e.keyCode) { - //case 8: //backspace - //case 46: //delete case 35: //end case 36: //home case 39: // right case 37: // left case 32: // space - hideSuggestions(); break - case 38: case 40: break; - case 9: break; - case 13: break; + params.elt.style.background = "#fff"; + $("suggestionlist").style.visibility='hidden'; + break + case 38: case 40: case 9: case 13: break; default: - updateSuggestions() -}} - else if (e.type == "keypress") { lastEdit = h.tags.value } -} - -function makeTag(parent, tag, js) { - parent.appendChild(document.createTextNode(" "+ tag)) -} - -function updateSuggestions() { - while (h.suggest.hasChildNodes()) h.suggest.removeChild(h.suggest.firstChild) - if(!getCurrentTag() || !currentTag.text) { - hideSuggestions(); return false - } - var tagArray = h.tags.value.toLowerCase().split(' '), - txt=currentTag.text.trim().escRegExp(), tagHash={}, t - for(t in tagArray) tagHash[tagArray[t]] = true; - - var search = tagList.match(new RegExp(("(?:^| )("+txt+"[^ ]+)"), "gi")) - if(search){ - var i; - for (i=0; i 0) { showSuggestions() } - else { hideSuggestions(); } -} - -function getCurrentTag() { - if(h.tags.value == lastEdit) return true // no edit - if(h.tags == '') return false - currentTag = {} - var tagArray=h.tags.value.toLowerCase().split(' '), oldArray=lastEdit.toLowerCase().split(' '), currentTags = [], matched=false, t,o - for (t in tagArray) { - for (o in oldArray) { - if(typeof oldArray[o] == 'undefined') { oldArray.splice(o,1); break } - if(tagArray[t] == oldArray[o]) { matched = true; oldArray.splice(o,1); break; } + var tagArray = params.elt.value.toLowerCase().split(' '), + txt=tagArray[tagArray.length-1].trim().escRegExp(), tagHash={}, t + for(t in tagArray) tagHash[tagArray[t]] = true; + var sl = $("suggestionlist"); + if (!txt) { sl.style.visibility = 'hidden'; return; } + + var search = tagList.match(new RegExp(("(?:^| )("+txt+"[^ ]+)"), "gi")) + if(search){ + params.elt.style.background = availhash[txt] ? "#dfd" : "#fff"; + while(sl.childNodes.length > 0) { sl.removeChild(sl.firstChild) } + sl.style.visibility='visible'; + var i; + for (i in search) { + if (!tagHash[search[i]]) { + var tn = document.createTextNode(search[i]); + var a = document.createElement("a"); + var elt = params.elt; + var closureTxt = txt; + a.onclick = function () { + elt.value = elt.value.replace(new RegExp(closureTxt+"$"),this.firstChild.nodeValue+" "); + elt.focus(); + sl.style.visibility='hidden'; + }; + a.appendChild(tn); + sl.appendChild(a); + } + } + } else { + params.elt.style.background = availhash[txt] ? "#dfd" : "#fdd"; + sl.style.visibility='hidden'; + } } - if(!matched) currentTags[currentTags.length] = t - matched=false } - // more than one word changed... abort - currentTag = { text:tagArray[currentTags[0]], index:currentTags[0] } - return true } - - -function hideSuggestions() { h.suggest.style.visibility='hidden' } -function showSuggestions() { h.suggest.style.visibility='visible' }