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

Commit d311644

Browse files
committed
Fixed focus issues and removed the "ugly" 50 milli timeout
1 parent a259a3c commit d311644

File tree

7 files changed

+41
-10
lines changed

7 files changed

+41
-10
lines changed

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: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@
211211
$timeout(function() {
212212
ctrl.search = initSearchValue || ctrl.search;
213213
_searchInput[0].focus();
214-
}, 50);
214+
});
215215
}
216216
};
217217

@@ -1079,6 +1079,24 @@
10791079
$select.selected = ngModel.$viewValue;
10801080
};
10811081

1082+
/**
1083+
* Checks if the current target is a ui-select-match element
1084+
*
1085+
* @param target
1086+
* @returns {boolean}
1087+
*/
1088+
function isClosedUiSelect(target) {
1089+
var node = target.parentNode;
1090+
while (node !== null) {
1091+
if (angular.element(node).hasClass('ui-select-container') &&
1092+
angular.element(node).hasClass('open')) {
1093+
return true;
1094+
}
1095+
node = node.parentNode;
1096+
}
1097+
return false;
1098+
}
1099+
10821100
function onDocumentClick(e) {
10831101
var contains = false;
10841102

@@ -1091,7 +1109,7 @@
10911109
}
10921110

10931111
if (!contains && !$select.clickTriggeredSelect) {
1094-
$select.close();
1112+
$select.close(isClosedUiSelect(e.target)); // Skip focusser if the target is another select
10951113
scope.$digest();
10961114
}
10971115
$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: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,20 @@ 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+
322+
expect(isDropdownOpened(el1)).toEqual(false);
323+
expect(isDropdownOpened(el2)).toEqual(false);
324+
clickMatch(el1);
325+
expect(isDropdownOpened(el1)).toEqual(true);
326+
expect(isDropdownOpened(el2)).toEqual(false);
327+
clickMatch(el2);
328+
expect(isDropdownOpened(el1)).toEqual(false);
329+
expect(isDropdownOpened(el2)).toEqual(true);
330+
});
331+
318332
describe('disabled options', function() {
319333
function createUiSelect(attrs) {
320334
var attrsDisabled = '';
@@ -1629,7 +1643,6 @@ describe('ui-select tests', function() {
16291643
var el = setupWithAttr(false);
16301644
expect(el.scope().$select.searchEnabled).not.toBe(true);
16311645
});
1632-
16331646
});
16341647

16351648
});

0 commit comments

Comments
 (0)