@@ -42,9 +42,13 @@ var DEFAULT_SETTINGS = {
42
42
preventDuplicates : false ,
43
43
tokenValue : "id" ,
44
44
45
+ // Behavioral settings
46
+ allowFreeTagging : false ,
47
+
45
48
// Callbacks
46
49
onResult : null ,
47
50
onAdd : null ,
51
+ onFreeTaggingAdd : null ,
48
52
onDelete : null ,
49
53
onReady : null ,
50
54
@@ -210,7 +214,12 @@ $.TokenList = function (input, url_or_data, settings) {
210
214
} )
211
215
. blur ( function ( ) {
212
216
hide_dropdown ( ) ;
213
- $ ( this ) . val ( "" ) ;
217
+
218
+ if ( settings . allowFreeTagging ) {
219
+ add_freetagging_tokens ( ) ;
220
+ } else {
221
+ $ ( this ) . val ( "" ) ;
222
+ }
214
223
token_list . removeClass ( settings . classes . focused ) ;
215
224
} )
216
225
. bind ( "keyup keydown blur update" , resize_input )
@@ -284,9 +293,12 @@ $.TokenList = function (input, url_or_data, settings) {
284
293
if ( selected_dropdown_item ) {
285
294
add_token ( $ ( selected_dropdown_item ) . data ( "tokeninput" ) ) ;
286
295
hidden_input . change ( ) ;
287
- return false ;
296
+ } else {
297
+ add_freetagging_tokens ( ) ;
298
+ event . stopPropagation ( ) ;
299
+ event . preventDefault ( ) ;
288
300
}
289
- break ;
301
+ return false ;
290
302
291
303
case KEY . ESCAPE :
292
304
hide_dropdown ( ) ;
@@ -485,6 +497,23 @@ $.TokenList = function (input, url_or_data, settings) {
485
497
( keycode >= 219 && keycode <= 222 ) ) ; // ( \ ) '
486
498
}
487
499
500
+ function add_freetagging_tokens ( ) {
501
+ var value = $ . trim ( input_box . val ( ) ) ;
502
+ var tokens = value . split ( settings . tokenDelimiter ) ;
503
+ $ . each ( tokens , function ( i , token ) {
504
+ if ( ! token ) {
505
+ return ;
506
+ }
507
+
508
+ if ( $ . isFunction ( settings . onFreeTaggingAdd ) ) {
509
+ token = settings . onFreeTaggingAdd . call ( hidden_input , token ) ;
510
+ }
511
+ var object = { } ;
512
+ object [ settings . tokenValue ] = object [ settings . propertyToSearch ] = token ;
513
+ add_token ( object ) ;
514
+ } ) ;
515
+ }
516
+
488
517
// Inner function to a token to the list
489
518
function insert_token ( item ) {
490
519
var $this_token = $ ( settings . tokenFormatter ( item ) ) ;
0 commit comments