Skip to content
This repository was archived by the owner on Oct 2, 2019. It is now read-only.

Commit 0eb69f0

Browse files
committed
Merge pull request #481 from asafdav/master
Closes a dropdown when another one is opened
2 parents 9e635c1 + df713e3 commit 0eb69f0

File tree

8 files changed

+54
-12
lines changed

8 files changed

+54
-12
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
/node_modules
33
/.idea
44
/.tmp
5+
.DS_Store

src/bootstrap/select-multiple.tpl.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div class="ui-select-multiple ui-select-bootstrap dropdown form-control" ng-class="{open: $select.open}">
1+
<div class="ui-select-container ui-select-multiple ui-select-bootstrap dropdown form-control" ng-class="{open: $select.open}">
22
<div>
33
<div class="ui-select-match"></div>
44
<input type="text"

src/bootstrap/select.tpl.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div class="ui-select-bootstrap dropdown" ng-class="{open: $select.open}">
1+
<div class="ui-select-container ui-select-bootstrap dropdown" ng-class="{open: $select.open}">
22
<div class="ui-select-match"></div>
33
<input type="text" autocomplete="off" tabindex="-1"
44
class="form-control ui-select-search"

src/select.js

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,25 @@
6565
};
6666
}
6767

68+
/**
69+
* Add closest() to jqLite.
70+
*/
71+
if (angular.element.prototype.closest === undefined) {
72+
angular.element.prototype.closest = function( selector) {
73+
var elem = this[0];
74+
var matchesSelector = elem.matches || elem.webkitMatchesSelector || elem.mozMatchesSelector || elem.msMatchesSelector;
75+
76+
while (elem) {
77+
if (matchesSelector.bind(elem)(selector)) {
78+
return elem;
79+
} else {
80+
elem = elem.parentElement;
81+
}
82+
}
83+
return false;
84+
};
85+
}
86+
6887
angular.module('ui.select', [])
6988

7089
.constant('uiSelectConfig', {
@@ -435,9 +454,13 @@
435454

436455
// Toggle dropdown
437456
ctrl.toggle = function(e) {
438-
if (ctrl.open) ctrl.close(); else ctrl.activate();
439-
e.preventDefault();
440-
e.stopPropagation();
457+
if (ctrl.open) {
458+
ctrl.close();
459+
e.preventDefault();
460+
e.stopPropagation();
461+
} else {
462+
ctrl.activate();
463+
}
441464
};
442465

443466
ctrl.isLocked = function(itemScope, itemIndex) {
@@ -1112,7 +1135,7 @@
11121135
}
11131136

11141137
if (!contains && !$select.clickTriggeredSelect) {
1115-
$select.close();
1138+
$select.close(angular.element(e.target).closest('.ui-select-container.open').length > 0); // Skip focusser if the target is another select
11161139
scope.$digest();
11171140
}
11181141
$select.clickTriggeredSelect = false;

src/select2/select-multiple.tpl.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
<div class="ui-select-multiple select2 select2-container select2-container-multi"
2-
ng-class="{'select2-container-active select2-dropdown-open': $select.open,
1+
<div class="ui-select-container ui-select-multiple select2 select2-container select2-container-multi"
2+
ng-class="{'select2-container-active select2-dropdown-open open': $select.open,
33
'select2-container-disabled': $select.disabled}">
44
<ul class="select2-choices">
55
<span class="ui-select-match"></span>

src/select2/select.tpl.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
<div class="select2 select2-container"
2-
ng-class="{'select2-container-active select2-dropdown-open': $select.open,
1+
<div class="ui-select-container select2 select2-container"
2+
ng-class="{'select2-container-active select2-dropdown-open open': $select.open,
33
'select2-container-disabled': $select.disabled,
44
'select2-container-active': $select.focus,
55
'select2-allowclear': $select.allowClear && !$select.isEmpty()}">

src/selectize/select.tpl.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div class="selectize-control single">
1+
<div class="ui-select-container selectize-control single" ng-class="{'open': $select.open}">
22
<div class="selectize-input"
33
ng-class="{'focus': $select.open, 'disabled': $select.disabled, 'selectize-focus' : $select.focus}"
44
ng-click="$select.activate()">

test/select.spec.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,25 @@ describe('ui-select tests', function() {
315315
expect(getMatchLabel(el)).toEqual('false');
316316
});
317317

318+
it('should close an opened select when another one is opened', function() {
319+
var el1 = createUiSelect();
320+
var el2 = createUiSelect();
321+
el1.appendTo(document.body);
322+
el2.appendTo(document.body);
323+
324+
expect(isDropdownOpened(el1)).toEqual(false);
325+
expect(isDropdownOpened(el2)).toEqual(false);
326+
clickMatch(el1);
327+
expect(isDropdownOpened(el1)).toEqual(true);
328+
expect(isDropdownOpened(el2)).toEqual(false);
329+
clickMatch(el2);
330+
expect(isDropdownOpened(el1)).toEqual(false);
331+
expect(isDropdownOpened(el2)).toEqual(true);
332+
333+
el1.remove();
334+
el2.remove();
335+
});
336+
318337
describe('disabled options', function() {
319338
function createUiSelect(attrs) {
320339
var attrsDisabled = '';
@@ -1629,7 +1648,6 @@ describe('ui-select tests', function() {
16291648
var el = setupWithAttr(false);
16301649
expect(el.scope().$select.searchEnabled).not.toBe(true);
16311650
});
1632-
16331651
});
16341652

16351653
});

0 commit comments

Comments
 (0)