--- 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' );