|
3 | 3 | * Copyright (c) Krzysztof Rusnarczyk |
4 | 4 | * Licensed under the MIT license */ |
5 | 5 |
|
6 | | -/* |
7 | | - * TODO: delimiter fixes |
8 | | - */ |
9 | | - |
10 | 6 | (function($) { |
11 | 7 | var delimiter = []; |
12 | 8 | var callbacks = []; |
|
232 | 228 | }); |
233 | 229 | } |
234 | 230 |
|
235 | | - // If a user types a delimiter or enter create a new tag |
| 231 | + // TODO: keypress and input cannot interfere with each other (validation perspective also) |
| 232 | + |
| 233 | + // If a user types a delimiter create a new tag |
236 | 234 | $(data.fake_input).on('keypress', data, function(event) { |
237 | 235 | if (_checkDelimiter(event)) { |
238 | 236 | event.preventDefault(); |
|
250 | 248 | } |
251 | 249 | }); |
252 | 250 |
|
| 251 | + // If a user pastes the text check if it shouldn't be splitted into tags |
| 252 | + $(data.fake_input).bind('input', data, function(event) { |
| 253 | + var value = $(event.data.fake_input).val(); |
| 254 | + |
| 255 | + value = value.replace(/\n/g, ''); |
| 256 | + value = value.replace(/\s/g, ''); |
| 257 | + |
| 258 | + var tags = _splitIntoTags(event, value); |
| 259 | + |
| 260 | + if (tags.length > 0) { |
| 261 | + for (var i = 0; i < tags.length; ++i) { |
| 262 | + $(event.data.real_input).addTag(tags[i], { |
| 263 | + focus: true, |
| 264 | + unique: settings.unique, |
| 265 | + minChars: settings.minChars, |
| 266 | + maxChars: settings.maxChars, |
| 267 | + limit: settings.limit, |
| 268 | + validationPattern: settings.validationPattern |
| 269 | + }); |
| 270 | + } |
| 271 | + |
| 272 | + return false; |
| 273 | + } |
| 274 | + }); |
| 275 | + |
253 | 276 | // Deletes last tag on backspace |
254 | 277 | data.removeWithBackspace && $(data.fake_input).on('keydown', function(event) { |
255 | 278 | if (event.keyCode == 8 && $(this).val() === '') { |
|
322 | 345 | } |
323 | 346 |
|
324 | 347 | if (typeof event.data.delimiter === 'string') { |
325 | | - if (event.which == event.data.delimiter.charCodeAt(0)) { |
| 348 | + if (event.which === event.data.delimiter.charCodeAt(0)) { |
326 | 349 | found = true; |
327 | 350 | } |
328 | 351 | } else { |
|
335 | 358 |
|
336 | 359 | return found; |
337 | 360 | }; |
| 361 | + |
| 362 | + var _splitIntoTags = function(event, value) { |
| 363 | + if (value === '') return []; |
| 364 | + |
| 365 | + var tags; |
| 366 | + if (typeof event.data.delimiter === 'string') { |
| 367 | + tags = value.split(event.data.delimiter); |
| 368 | + |
| 369 | + if (tags.length > 1) { |
| 370 | + return tags; |
| 371 | + } else { |
| 372 | + return []; |
| 373 | + } |
| 374 | + } else { |
| 375 | + $.each(event.data.delimiter, function(index, delimiter) { |
| 376 | + tags = value.split(delimiter); |
| 377 | + if (tags.length > 1) { |
| 378 | + return false; |
| 379 | + } else { |
| 380 | + tags = []; |
| 381 | + } |
| 382 | + }); |
| 383 | + |
| 384 | + return tags; |
| 385 | + } |
| 386 | + |
| 387 | + return []; |
| 388 | + }; |
338 | 389 | })(jQuery); |
0 commit comments