@@ -42,6 +42,9 @@ 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 ,
@@ -210,7 +213,12 @@ $.TokenList = function (input, url_or_data, settings) {
210
213
} )
211
214
. blur ( function ( ) {
212
215
hide_dropdown ( ) ;
213
- $ ( this ) . val ( "" ) ;
216
+
217
+ if ( settings . allowFreeTagging ) {
218
+ add_freetagging_tokens ( ) ;
219
+ } else {
220
+ $ ( this ) . val ( "" ) ;
221
+ }
214
222
token_list . removeClass ( settings . classes . focused ) ;
215
223
} )
216
224
. bind ( "keyup keydown blur update" , resize_input )
@@ -284,9 +292,12 @@ $.TokenList = function (input, url_or_data, settings) {
284
292
if ( selected_dropdown_item ) {
285
293
add_token ( $ ( selected_dropdown_item ) . data ( "tokeninput" ) ) ;
286
294
hidden_input . change ( ) ;
287
- return false ;
295
+ } else {
296
+ add_freetagging_tokens ( ) ;
297
+ event . stopPropagation ( ) ;
298
+ event . preventDefault ( ) ;
288
299
}
289
- break ;
300
+ return false ;
290
301
291
302
case KEY . ESCAPE :
292
303
hide_dropdown ( ) ;
@@ -485,6 +496,20 @@ $.TokenList = function (input, url_or_data, settings) {
485
496
( keycode >= 219 && keycode <= 222 ) ) ; // ( \ ) '
486
497
}
487
498
499
+ function add_freetagging_tokens ( ) {
500
+ var value = $ . trim ( input_box . val ( ) ) ;
501
+ var tokens = value . split ( settings . tokenDelimiter ) ;
502
+ $ . each ( tokens , function ( i , token ) {
503
+ if ( ! token ) {
504
+ return ;
505
+ }
506
+
507
+ var object = { } ;
508
+ object [ settings . tokenValue ] = object [ settings . propertyToSearch ] = token ;
509
+ add_token ( object ) ;
510
+ } ) ;
511
+ }
512
+
488
513
// Inner function to a token to the list
489
514
function insert_token ( item ) {
490
515
var $this_token = $ ( settings . tokenFormatter ( item ) ) ;
0 commit comments