|
67 | 67 | theme: 'bootstrap',
|
68 | 68 | searchEnabled: true,
|
69 | 69 | placeholder: '', // Empty by default, like HTML tag <select>
|
70 |
| - refreshDelay: 1000 // In milliseconds |
| 70 | + refreshDelay: 1000, // In milliseconds |
| 71 | + closeOnSelect: true |
71 | 72 | })
|
72 | 73 |
|
73 | 74 | // See Rename minErr and make it accessible from outside https://github.com/angular/angular.js/issues/6913
|
|
160 | 161 | ctrl.multiple = false; // Initialized inside uiSelect directive link function
|
161 | 162 | ctrl.disableChoiceExpression = undefined; // Initialized inside uiSelect directive link function
|
162 | 163 | ctrl.lockChoiceExpression = undefined; // Initialized inside uiSelect directive link function
|
| 164 | + ctrl.closeOnSelect = true; // Initialized inside uiSelect directive link function |
| 165 | + ctrl.clickTriggeredSelect = false; |
163 | 166 |
|
164 | 167 | ctrl.isEmpty = function() {
|
165 | 168 | return angular.isUndefined(ctrl.selected) || ctrl.selected === null || ctrl.selected === '';
|
|
332 | 335 | };
|
333 | 336 |
|
334 | 337 | // When the user clicks on an item inside the dropdown
|
335 |
| - ctrl.select = function(item, skipFocusser) { |
336 |
| - |
| 338 | + ctrl.select = function(item, skipFocusser, $event) { |
337 | 339 | if (item === undefined || !item._uiSelectChoiceDisabled) {
|
338 | 340 | var locals = {};
|
339 | 341 | locals[ctrl.parserResult.itemName] = item;
|
|
343 | 345 | $model: ctrl.parserResult.modelMapper($scope, locals)
|
344 | 346 | });
|
345 | 347 |
|
346 |
| - if(ctrl.multiple){ |
| 348 | + if(ctrl.multiple) { |
347 | 349 | ctrl.selected.push(item);
|
348 | 350 | ctrl.sizeSearchInput();
|
349 | 351 | } else {
|
350 | 352 | ctrl.selected = item;
|
351 | 353 | }
|
352 |
| - ctrl.close(skipFocusser); |
| 354 | + if (!ctrl.multiple || ctrl.closeOnSelect) { |
| 355 | + ctrl.close(skipFocusser); |
| 356 | + } |
| 357 | + if ($event && $event.type === 'click') { |
| 358 | + ctrl.clickTriggeredSelect = true; |
| 359 | + } |
353 | 360 | }
|
354 | 361 | };
|
355 | 362 |
|
|
624 | 631 | var searchInput = element.querySelectorAll('input.ui-select-search');
|
625 | 632 |
|
626 | 633 | $select.multiple = (angular.isDefined(attrs.multiple)) ? (attrs.multiple === '') ? true : (attrs.multiple.toLowerCase() === 'true') : false;
|
627 |
| - |
| 634 | + $select.closeOnSelect = (angular.isDefined(attrs.closeOnSelect) && attrs.closeOnSelect.toLowerCase() === 'false') ? false : uiSelectConfig.closeOnSelect; |
628 | 635 | $select.onSelectCallback = $parse(attrs.onSelect);
|
629 | 636 | $select.onRemoveCallback = $parse(attrs.onRemove);
|
630 | 637 |
|
|
827 | 834 | contains = element[0].contains(e.target);
|
828 | 835 | }
|
829 | 836 |
|
830 |
| - if (!contains) { |
| 837 | + if (!contains && !$select.clickTriggeredSelect) { |
831 | 838 | $select.close();
|
832 | 839 | scope.$digest();
|
833 | 840 | }
|
| 841 | + $select.clickTriggeredSelect = false; |
834 | 842 | }
|
835 | 843 |
|
836 | 844 | // See Click everywhere but here event http://stackoverflow.com/questions/12931369
|
|
910 | 918 | choices.attr('ng-repeat', RepeatParser.getNgRepeatExpression($select.parserResult.itemName, '$select.items', $select.parserResult.trackByExp, groupByExp))
|
911 | 919 | .attr('ng-if', '$select.open') //Prevent unnecessary watches when dropdown is closed
|
912 | 920 | .attr('ng-mouseenter', '$select.setActiveItem('+$select.parserResult.itemName +')')
|
913 |
| - .attr('ng-click', '$select.select(' + $select.parserResult.itemName + ')'); |
| 921 | + .attr('ng-click', '$select.select(' + $select.parserResult.itemName + ',false,$event)'); |
914 | 922 |
|
915 | 923 | var rowsInner = element.querySelectorAll('.ui-select-choices-row-inner');
|
916 | 924 | if (rowsInner.length !== 1) throw uiSelectMinErr('rows', "Expected 1 .ui-select-choices-row-inner but got '{0}'.", rowsInner.length);
|
|
0 commit comments