--- tag_complete/tag_complete.js 2006/08/19 10:50:49 51 +++ tag_complete/tag_complete.js 2006/08/19 12:53:59 52 @@ -8,8 +8,12 @@ name: new Array(), obj: new Array(), selected: new Array(), + entered: { // array of entered tags + i: new Array(), // offset to tags + tag: new Array() // mapping from tag i to entered + }, - current: null, // current selected suggestion + current: null, // current selected suggestion select: function( tag ) { @@ -26,10 +30,10 @@ jQuery.className.add( _tag.obj[i], 'selected' ); - suggest += '' + t + ' '; + suggest += '' + t + ' '; _tag.selected[j++] = { i: i, - obj: _tag.obj[i], + obj: _tag.obj[i] } } } @@ -80,6 +84,9 @@ $.log.info('add '+i+': '+t); _tag.focus(); jQuery.className.add( _tag.obj[i], 'entered' ); + var entered_i = _tag.entered.i.length; + _tag.entered.i[ entered_i ] = i; + _tag.entered.tag[i] = entered_i; _tag.clean_selected(); $('#tags').val( $('#tags').val().replace( @@ -89,6 +96,40 @@ return false; }, + remove_tag: function( t, i ) { + $.log.info('remove '+i+': '+t); + _tag.focus(); + jQuery.className.remove( _tag.obj[i], 'entered' ); + // remove selected tag and rebuild tags + + var ent_i = _tag.entered.tag[i]; + $.log.debug('entered i:'+ent_i); + _tag.entered.i.splice(ent_i,1); + _tag.entered.tag[i] = null; + + $.log.debug("tags "+_tag.entered.i.join(",")); + + var tags = ''; + for (var j = 0; j < _tag.entered.i.length; j++) { + var tag_i = _tag.entered.i[j]; + tags += _tag.name[ tag_i ] + ' '; + _tag.entered.tag[ tag_i ] = j; + } + + _tag.clean_selected(); + $.log.debug('tags left: '+tags); + $('#tags').val( tags ); + return false; + }, + + tag: function( t, i ) { + if (_tag.entered.tag[i] != null) { + _tag.remove_tag( t, i ); + } else { + _tag.add_tag( t, i ); + } + }, + move_suggested: function( where ) { var c = _tag.current; if (c == null) { @@ -127,8 +168,9 @@ _tag.name[i] = n; _tag.obj[i] = this; this.onclick = function() { - return _tag.add_tag( n, i ); + return _tag.tag( n, i ); } + this.href = '#'+i; // FIXME debug }); $.log.info( 'found ' + _tag.name.length + ' tags' );