--- tag_complete/jquery-tac.js 2006/08/20 23:23:29 58 +++ tag_complete/jquery-tac.js 2006/08/20 23:37:52 59 @@ -16,6 +16,7 @@ exists: new Array() }; + // all tags indexed by first letter this.all_tags = new Array(); this.suggested = new Array(); @@ -42,17 +43,22 @@ var obj = this; $( this.tags_selector ).each( function(i) { var n = this.firstChild.nodeValue; + var c = n.substr(0,1); obj.t.obj[n] = this; obj.t.exists[n] = true; - obj.all_tags.push( n ); + if (obj.all_tags[c] == null) { + obj.all_tags[c] = new Array( n ); + } else { + obj.all_tags[c].push( n ); + } this.onclick = function() { return obj.tag( n ); } this.href = '#'+i; // FIXME debug }); - $.log.info( 'found ' + this.all_tags.length + ' tags' ); + $.log.info( 'found ' + this.t.obj.length + ' tags' ); $.log.info( 'hook onchange to '+this.tags_form ); $( this.tags_form ).keyup( function(e) { @@ -80,6 +86,7 @@ case 8: // backspace case 46: // del ret = false; + break; case 37: // left case 39: // right return true; @@ -118,10 +125,13 @@ var suggest = ''; this.suggested = new Array(); - for(var i = 0; i < this.all_tags.length; i++) { - var t = this.all_tags[i]; - if ( t.substr(0, len) == partial ) { - $.log.debug('suggested: ' + t ); + var c = partial.substr(0,1); + + for(var i = 0; i < this.all_tags[ c ].length; i++) { + var t = this.all_tags[c][i]; + if ( t.substr(0, len) == partial && this.entered.tag[ t ] == null) { + + //$.log.debug('suggested: ' + t ); jQuery.className.add( this.t.obj[t], 'suggested' );