--- tag_complete/tag_complete.js 2006/08/19 12:53:59 52 +++ tag_complete/tag_complete.js 2006/08/19 23:11:12 53 @@ -7,6 +7,7 @@ var _tag = { name: new Array(), obj: new Array(), + tag2i: new Array(), selected: new Array(), entered: { // array of entered tags i: new Array(), // offset to tags @@ -14,6 +15,7 @@ }, current: null, // current selected suggestion + last_tags: '', select: function( tag ) { @@ -151,9 +153,44 @@ _tag.current = to; }, - last_tag: function() { - return $('#tags').val().replace(/^([^ ][^ ]* )*/, ''); + parse: function() { + $.log.info('re-parse tags'); + + var t = $('#tags').val().replace(/^ */,'').replace(/ *$/,'').split(/ /); + + _tag.entered = { + i: new Array(), + tag: new Array() + }; + + $('.entered').removeClass('entered'); + + var ids = ''; + for (var i = 0; i < t.length; i++) { + var tag = t[i]; + if (_tag.tag2i[ tag ] != null) { + var tag_i = _tag.tag2i[ tag ]; + _tag.entered.tag[ tag ] = + _tag.entered.i.push( tag_i ) - 1; + jQuery.className.add( _tag.obj[ tag_i ], 'entered' ); + ids += i + ':' + tag_i + ' '; + } else { + ids += i + ':{' + tag + '} '; + } + } + $.log.debug('tags: '+t.join(','), 'ids:'+ids); + }, + + current_tag: function() { + var tags = $('#tags').val(); + if (tags != _tag.last_tags) { + _tag.last_tags = tags; + _tag.parse(); + } + return tags.replace(/^([^ ][^ ]* )*/, ''); + }, + focus: function() { // $('#tags').focus() doesn't work! document.getElementById('tags').focus(); @@ -167,6 +204,7 @@ var n = this.firstChild.nodeValue; _tag.name[i] = n; _tag.obj[i] = this; + _tag.tag2i[n] = i; this.onclick = function() { return _tag.tag( n, i ); } @@ -193,10 +231,14 @@ if (_tag.current != null) _tag.focus(); e.preventDefault(); return false; + case 8: // backspace + case 46: // del + _tag.parse(); + return false; } - var t = _tag.last_tag(); + var t = _tag.current_tag(); $.log.debug('tag: ' + t + ' ['+t.length+']');