|
1 | 1 | /*!
|
2 | 2 | * ui-select
|
3 | 3 | * http://github.com/angular-ui/ui-select
|
4 |
| - * Version: 0.8.1 - 2014-10-07T21:36:20.165Z |
| 4 | + * Version: 0.8.2 - 2014-10-09T23:29:49.713Z |
5 | 5 | * License: MIT
|
6 | 6 | */
|
7 | 7 |
|
|
27 | 27 | END: 35,
|
28 | 28 | BACKSPACE: 8,
|
29 | 29 | DELETE: 46,
|
| 30 | + COMMAND: 91, |
30 | 31 | isControl: function (e) {
|
31 | 32 | var k = e.which;
|
32 | 33 | switch (k) {
|
| 34 | + case KEY.COMMAND: |
33 | 35 | case KEY.SHIFT:
|
34 | 36 | case KEY.CTRL:
|
35 | 37 | case KEY.ALT:
|
|
190 | 192 | ctrl.activate = function(initSearchValue, avoidReset) {
|
191 | 193 | if (!ctrl.disabled && !ctrl.open) {
|
192 | 194 | if(!avoidReset) _resetSearchInput();
|
| 195 | + ctrl.focusser.prop('disabled', true); //Will reactivate it on .close() |
193 | 196 | ctrl.open = true;
|
194 | 197 | ctrl.activeMatchIndex = -1;
|
195 | 198 |
|
|
309 | 312 | };
|
310 | 313 |
|
311 | 314 | ctrl.isActive = function(itemScope) {
|
312 |
| - return ctrl.items.indexOf(itemScope[ctrl.itemProperty]) === ctrl.activeIndex; |
| 315 | + return ctrl.open && ctrl.items.indexOf(itemScope[ctrl.itemProperty]) === ctrl.activeIndex; |
313 | 316 | };
|
314 | 317 |
|
315 | 318 | ctrl.isDisabled = function(itemScope) {
|
| 319 | + |
| 320 | + if (!ctrl.open) return; |
| 321 | + |
316 | 322 | var itemIndex = ctrl.items.indexOf(itemScope[ctrl.itemProperty]);
|
317 | 323 | var isDisabled = false;
|
318 | 324 | var item;
|
|
327 | 333 | };
|
328 | 334 |
|
329 | 335 | // When the user clicks on an item inside the dropdown
|
330 |
| - ctrl.select = function(item) { |
| 336 | + ctrl.select = function(item, skipFocusser) { |
331 | 337 |
|
332 |
| - if (!item._uiSelectChoiceDisabled) { |
| 338 | + if (item === undefined || !item._uiSelectChoiceDisabled) { |
333 | 339 | var locals = {};
|
334 | 340 | locals[ctrl.parserResult.itemName] = item;
|
335 | 341 |
|
|
344 | 350 | } else {
|
345 | 351 | ctrl.selected = item;
|
346 | 352 | }
|
347 |
| - ctrl.close(); |
| 353 | + ctrl.close(skipFocusser); |
348 | 354 | }
|
349 | 355 | };
|
350 | 356 |
|
351 | 357 | // Closes the dropdown
|
352 |
| - ctrl.close = function() { |
353 |
| - if (ctrl.open) { |
354 |
| - _resetSearchInput(); |
355 |
| - ctrl.open = false; |
| 358 | + ctrl.close = function(skipFocusser) { |
| 359 | + if (!ctrl.open) return; |
| 360 | + _resetSearchInput(); |
| 361 | + ctrl.open = false; |
| 362 | + if (!ctrl.multiple){ |
356 | 363 | $timeout(function(){
|
357 |
| - ctrl.focusser[0].focus(); |
| 364 | + ctrl.focusser.prop('disabled', false); |
| 365 | + if (!skipFocusser) ctrl.focusser[0].focus(); |
358 | 366 | },0,false);
|
359 | 367 | }
|
360 | 368 | };
|
|
368 | 376 |
|
369 | 377 | // Remove item from multiple select
|
370 | 378 | ctrl.removeChoice = function(index){
|
| 379 | + var removedChoice = ctrl.selected[index]; |
| 380 | + var locals = {}; |
| 381 | + locals[ctrl.parserResult.itemName] = removedChoice; |
| 382 | + |
371 | 383 | ctrl.selected.splice(index, 1);
|
372 | 384 | ctrl.activeMatchIndex = -1;
|
373 | 385 | ctrl.sizeSearchInput();
|
| 386 | + |
| 387 | + ctrl.onRemoveCallback($scope, { |
| 388 | + $item: removedChoice, |
| 389 | + $model: ctrl.parserResult.modelMapper($scope, locals) |
| 390 | + }); |
374 | 391 | };
|
375 | 392 |
|
376 | 393 | ctrl.getPlaceholder = function(){
|
|
402 | 419 | else if (ctrl.activeIndex > 0) { ctrl.activeIndex--; }
|
403 | 420 | break;
|
404 | 421 | case KEY.TAB:
|
405 |
| - //TODO: Que hacemos en modo multiple? |
406 |
| - if (!ctrl.multiple) ctrl.select(ctrl.items[ctrl.activeIndex]); |
| 422 | + if (!ctrl.multiple || ctrl.open) ctrl.select(ctrl.items[ctrl.activeIndex], true); |
407 | 423 | break;
|
408 | 424 | case KEY.ENTER:
|
409 | 425 | if(ctrl.open){
|
|
497 | 513 | if(ctrl.multiple && KEY.isHorizontalMovement(key)){
|
498 | 514 | processed = _handleMatchSelection(key);
|
499 | 515 | }
|
500 |
| - |
| 516 | + |
501 | 517 | if (!processed && ctrl.items.length > 0) {
|
502 | 518 | processed = _handleDropDownSelection(key);
|
503 | 519 | }
|
|
519 | 535 | _searchInput.on('blur', function() {
|
520 | 536 | $timeout(function() {
|
521 | 537 | ctrl.activeMatchIndex = -1;
|
522 |
| - ctrl.activeIndex = 0; |
523 | 538 | });
|
524 | 539 | });
|
525 | 540 |
|
|
580 | 595 |
|
581 | 596 | var searchInput = element.querySelectorAll('input.ui-select-search');
|
582 | 597 |
|
583 |
| - $select.multiple = angular.isDefined(attrs.multiple); |
| 598 | + $select.multiple = (angular.isDefined(attrs.multiple)) ? (attrs.multiple === '') ? true : (attrs.multiple.toLowerCase() === 'true') : false; |
584 | 599 |
|
585 | 600 | $select.onSelectCallback = $parse(attrs.onSelect);
|
| 601 | + $select.onRemoveCallback = $parse(attrs.onRemove); |
586 | 602 |
|
587 | 603 | //From view --> model
|
588 | 604 | ngModel.$parsers.unshift(function (inputValue) {
|
|
692 | 708 | e.preventDefault();
|
693 | 709 | e.stopPropagation();
|
694 | 710 | $select.select(undefined);
|
695 |
| - scope.$digest(); |
| 711 | + scope.$apply(); |
696 | 712 | return;
|
697 | 713 | }
|
698 | 714 |
|
|
0 commit comments