/[jquery]/tag_complete/tag_complete.js
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /tag_complete/tag_complete.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 48 - (show annotations)
Fri Aug 18 23:10:48 2006 UTC (17 years, 8 months ago) by dpavlin
File MIME type: application/javascript
File size: 3489 byte(s)
create onclick for tags which work!
1 /*
2 tag auto-completer written with jquery
3
4 2006-08-18 Dobrica Pavlinusic <dpavlin@rot13.org>
5 */
6
7 var _tag = {
8 name: new Array(),
9 obj: new Array(),
10 selected_obj: new Array(),
11
12 select: function( tag ) {
13
14 $.log.info('filter '+tag);
15
16 _tag.selected_obj = Array();
17 var j = 0;
18 var tag_len = tag.length;
19 var suggest = '<ul>';
20
21 for(var i = 0; i < _tag.name.length; i++) {
22 var t = _tag.name[i];
23 if ( t.substr(0, tag_len) == tag ) {
24 $.log.debug('selected ['+i+']: ' + t );
25
26 jQuery.className.add( _tag.obj[i], 'selected' );
27
28 suggest += '<li>' + t + '</li> ';
29 _tag.selected_obj[j] = _tag.obj[i];
30 j++;
31 }
32 }
33
34 suggest += '</ul>';
35
36 $('#suggest').html( suggest );
37 if (j > 0) {
38 $('#suggest li:nth(0)').addClass('selected');
39 _tag.current = 0;
40 }
41
42 },
43
44 clean_selected: function() {
45 for(var i = 0; i < _tag.selected_obj.length; i++) {
46 jQuery.className.remove( _tag.selected_obj[i], 'selected' );
47 }
48
49 var c = _tag.current;
50 if (c == null) return c;
51
52 $('#suggest').html('');
53 _tag.current = null;
54
55 return c;
56 },
57
58
59 take_suggested: function() {
60 var c = _tag.current;
61 if (c == null) {
62 $.log.debug('no current, return true');
63 return true;
64 }
65
66 var s = $('#suggest li:nth('+c+')').html();
67 if (s == null) {
68 $.log.debug('no suggest, return true');
69 return true;
70 }
71
72 _tag.add_tag( s );
73 _tag.clean_selected();
74 return false;
75 },
76
77 add_tag: function( t ) {
78 $.log.info('add: '+t);
79 $('#tags').val(
80 $('#tags').val().replace(
81 /[^ ]*$/, t + ' '
82 )
83 );
84 _tag.focus();
85 return false;
86 },
87
88 move_suggested: function( where ) {
89 var c = _tag.current;
90 if (c == null) {
91 $.log.error('_tag.current is null');
92 return;
93 }
94 var to = c + where;
95 $.log.info('move_suggested('+where+') '+c+' -> '+to);
96 if (to < 0 || to >= _tag.selected_obj.length) {
97 $.log.error('move to invalid element '+to);
98 return;
99 }
100 var s = '#suggest li:nth('+c+')';
101 $( s ).removeClass('selected');
102 $.log.debug('remove selected from '+s);
103 s = '#suggest li:nth('+to+')';
104 $( s ).addClass('selected');
105 $.log.debug('add selected to '+s);
106 _tag.current = to;
107 },
108
109 last_tag: function() {
110 return $('#tags').val().replace(/^([^ ][^ ]* )*/, '');
111 },
112 focus: function() {
113 // $('#tags').focus() doesn't work!
114 document.getElementById('tags').focus();
115 }
116
117 };
118
119 $(document).ready( function() {
120
121 $('.tag').each( function(i) {
122 var n = this.firstChild.nodeValue;
123 _tag.name[i] = n;
124 _tag.obj[i] = this;
125 this.onclick = function() {
126 return _tag.add_tag( n );
127 }
128 });
129 $.log.info( 'found ' + _tag.name.length + ' tags' );
130
131 $.log.info( 'hook onchange to #tags_form' );
132 $('#tags_form').keyup( function(e) {
133
134 $.log.debug('keyup: '+e.keyCode);
135
136 switch (e.keyCode) {
137 case 38: // up
138 e.preventDefault();
139 _tag.move_suggested( -1 );
140 return false;
141 case 40: // down
142 e.preventDefault();
143 _tag.move_suggested( +1 );
144 return false;
145 case 9: // tab
146 case 13: // return
147 if (_tag.current != null) _tag.focus();
148 e.preventDefault();
149 return false;
150 }
151
152
153 var t = _tag.last_tag();
154
155 $.log.debug('tag: ' + t + ' ['+t.length+']');
156
157 _tag.clean_selected();
158
159 if (t == '') return false;
160
161 _tag.select(t);
162
163 $.log.info('selected ' + _tag.selected_obj.length + ' tags');
164
165 return true;
166 }).submit( function() {
167 $.log.debug('submit');
168 return _tag.take_suggested();
169 }).blur( function() {
170 $.log.debug('blur');
171 return _tag.take_suggested();
172 });
173
174 $.log.toggle();
175
176 _tag.focus();
177 });
178

  ViewVC Help
Powered by ViewVC 1.1.26