--- tag_complete/jquery-tac.js 2006/08/20 03:35:32 54 +++ tag_complete/jquery-tac.js 2006/08/20 23:23:29 58 @@ -33,8 +33,10 @@ this.suggest_selector = '#suggest'; this.tags_input = '#tags'; - // tags from previous event + // all tags from previous event this.last_tags = ''; + // just last tag + this.last_tag = ''; // parse all tags from html var obj = this; @@ -57,6 +59,8 @@ $.log.debug('keyup: '+e.keyCode); + var ret = true; + switch (e.keyCode) { case 38: // up e.preventDefault(); @@ -67,28 +71,32 @@ obj.move_suggested( +1 ); return false; case 9: // tab + obj.focus(); + obj.take_suggested(); + return false; case 13: // return if (obj.current_selected != null) obj.focus(); - e.preventDefault(); - return false; + return true; case 8: // backspace case 46: // del - obj.parse(); - return false; + ret = false; + case 37: // left + case 39: // right + return true; } var t = obj.current_tag(); + if (t == '') return false; + $.log.debug('tag: ' + t + ' ['+t.length+']'); obj.clean_suggested(); - - if (t == '') return false; - obj.suggest(t); - return true; + return ret; + }).submit( function() { $.log.debug('submit'); return obj.take_suggested(); @@ -117,15 +125,21 @@ jQuery.className.add( this.t.obj[t], 'suggested' ); - suggest += '' + - t + ' '; + suggest += '">' + t + ' '; this.suggested.push(t); } } $(this.suggest_selector).html( suggest ); + var obj = this; + $(this.suggest_selector+' a').click( function() { + var t = this.firstChild.nodeValue; + $.log.debug('click add: '+ t); + obj.clean_suggested(); + obj.add_tag( t ); + }); this.current_suggested = 0; $.log.info('suggested ' + this.suggested.length + ' tags'); @@ -161,7 +175,7 @@ } var i = this.suggested[c].i; - $.log.debug('take_suggested '+i+':'+s); + $.log.debug('take_suggested: '+s); this.add_tag( s ); return false; } @@ -236,7 +250,8 @@ this.clean_suggested(); - var tags = this.entered.ordered.join(' ')+' '; + var tags = this.entered.ordered.join(' '); + if (tags.length) tags += ' '; $.log.debug('removed '+o+' left: '+tags); $(this.tags_input).val( tags ); return false; @@ -259,13 +274,14 @@ var t = $(this.tags_input).val().replace(/^ */,'').replace(/ *$/,'').split(/ /); + if (this.entered.ordered.length) $('.entered').removeClass('entered'); + this.clean_suggested(); + this.entered = { ordered: new Array(), tag: new Array() }; - if (this.entered.ordered.length) $('.entered').removeClass('entered'); - var debug = ''; for (var i = 0; i < t.length; i++) { var tag = t[i]; @@ -279,7 +295,6 @@ } } $.log.debug('parsed '+debug+' to '+this.entered.ordered.join(',')); - } tac.prototype.current_tag = function() { @@ -288,7 +303,14 @@ this.last_tags = tags; this.parse(); } - return tags.replace(/^([^ ][^ ]* )*/, ''); + var last_tag = tags.replace(/^([^ ][^ ]* )*/, ''); + if (last_tag != this.last_tag) { + this.last_tag = last_tag; + return last_tag; + } else { + this.parse(); + return ''; + } } tac.prototype.focus = function() {