Skip to content

Commit b5cc902

Browse files
cbryeruser378230
authored andcommitted
fix(searchEnabled): maintain keyboard nagivation
Fix issue where keyboard navigation was disabled when searchEnabled was set to false. Caused by hiding the input box which prevent key events from propagating to the directive. Resolved hiding the input offscreen when searchEnabled is false. Fixes angular-ui#1059, fixes angular-ui#917, fixes angular-ui#589, fixes angular-ui#375 Closes angular-ui#1543, closes angular-ui#1114, closes angular-ui#1109 (supersedes all)
1 parent d1994fb commit b5cc902

File tree

6 files changed

+43
-10
lines changed

6 files changed

+43
-10
lines changed

src/bootstrap/select.tpl.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@
66
aria-owns="ui-select-choices-{{ $select.generatedId }}"
77
aria-activedescendant="ui-select-choices-row-{{ $select.generatedId }}-{{ $select.activeIndex }}"
88
class="form-control ui-select-search"
9+
ng-class="{ 'ui-select-search-hidden' : !$select.searchEnabled }"
910
placeholder="{{$select.placeholder}}"
1011
ng-model="$select.search"
11-
ng-show="$select.searchEnabled && $select.open">
12+
ng-show="$select.open">
1213
<div class="ui-select-choices"></div>
1314
<div class="ui-select-no-choice"></div>
1415
</div>

src/common.css

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,16 @@ body > .select2-container.open {
7474
border-bottom-color: #5897fb;
7575
}
7676

77+
.ui-select-container[theme="select2"] .ui-select-dropdown .ui-select-search-hidden,
78+
.ui-select-container[theme="select2"] .ui-select-dropdown .ui-select-search-hidden input{
79+
opacity: 0;
80+
height: 0;
81+
min-height: 0;
82+
padding: 0;
83+
margin: 0;
84+
border:0;
85+
}
86+
7787
/* Selectize theme */
7888

7989
/* Helper class to show styles when focus */
@@ -99,10 +109,18 @@ body > .select2-container.open {
99109
/* Handle up direction Selectize */
100110
.ui-select-container[theme="selectize"].direction-up .ui-select-dropdown {
101111
box-shadow: 0 -4px 8px rgba(0, 0, 0, 0.25);
102-
103112
margin-top: -2px; /* FIXME hardcoded value :-/ */
104113
}
105114

115+
.ui-select-container[theme="selectize"] .ui-select-search-hidden{
116+
opacity: 0;
117+
height: 0;
118+
min-height: 0;
119+
padding: 0;
120+
margin: 0;
121+
border:0;
122+
}
123+
106124
/* Bootstrap theme */
107125

108126
/* Helper class to show styles when focus */
@@ -145,6 +163,15 @@ body > .select2-container.open {
145163
border-bottom-right-radius: 0 !important;
146164
}
147165

166+
.ui-select-bootstrap .ui-select-search-hidden{
167+
opacity: 0;
168+
height: 0;
169+
min-height: 0;
170+
padding: 0;
171+
margin: 0;
172+
border:0;
173+
}
174+
148175
.ui-select-bootstrap > .ui-select-match > .btn{
149176
/* Instead of center because of .btn */
150177
text-align: left !important;

src/select2/select.tpl.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<div class="ui-select-match"></div>
77
<div class="ui-select-dropdown select2-drop select2-with-searchbox select2-drop-active"
88
ng-class="{'select2-display-none': !$select.open}">
9-
<div class="select2-search" ng-show="$select.searchEnabled">
9+
<div class="search-container" ng-class="{'ui-select-search-hidden':!$select.searchEnabled, 'select2-search':$select.searchEnabled}">
1010
<input type="search" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
1111
role="combobox"
1212
aria-expanded="true"

src/selectize/select.tpl.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
<div class="ui-select-match"></div>
66
<input type="search" autocomplete="off" tabindex="-1"
77
class="ui-select-search ui-select-toggle"
8+
ng-class="{'ui-select-search-hidden':!$select.searchEnabled}"
89
ng-click="$select.toggle($event)"
910
placeholder="{{$select.placeholder}}"
1011
ng-model="$select.search"
11-
ng-hide="!$select.searchEnabled || (!$select.isEmpty() && !$select.open)"
12+
ng-hide="!$select.isEmpty() && !$select.open"
1213
ng-disabled="$select.disabled"
1314
aria-label="{{ $select.baseTitle }}">
1415
</div>

src/uiSelectController.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,10 @@ uis.controller('uiSelectCtrl',
156156
});
157157
}
158158
}
159+
else if (ctrl.open && !ctrl.searchEnabled) {
160+
// Close the selection if we don't have search enabled, and we click on the select again
161+
ctrl.close();
162+
}
159163
};
160164

161165
ctrl.focusSearchInput = function (initSearchValue) {

test/select.spec.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1698,12 +1698,12 @@ describe('ui-select tests', function() {
16981698

16991699
it('should show search input when true', function() {
17001700
setupSelectComponent(true, 'selectize');
1701-
expect($(el).find('.ui-select-search')).not.toHaveClass('ng-hide');
1701+
expect($(el).find('.ui-select-search')).not.toHaveClass('ui-select-search-hidden');
17021702
});
17031703

17041704
it('should hide search input when false', function() {
17051705
setupSelectComponent(false, 'selectize');
1706-
expect($(el).find('.ui-select-search')).toHaveClass('ng-hide');
1706+
expect($(el).find('.ui-select-search')).toHaveClass('ui-select-search-hidden');
17071707
});
17081708

17091709
});
@@ -1712,12 +1712,12 @@ describe('ui-select tests', function() {
17121712

17131713
it('should show search input when true', function() {
17141714
setupSelectComponent('true', 'select2');
1715-
expect($(el).find('.select2-search')).not.toHaveClass('ng-hide');
1715+
expect($(el).find('.search-container')).not.toHaveClass('ui-select-search-hidden');
17161716
});
17171717

17181718
it('should hide search input when false', function() {
17191719
setupSelectComponent('false', 'select2');
1720-
expect($(el).find('.select2-search')).toHaveClass('ng-hide');
1720+
expect($(el).find('.search-container')).toHaveClass('ui-select-search-hidden');
17211721
});
17221722

17231723
});
@@ -1727,13 +1727,13 @@ describe('ui-select tests', function() {
17271727
it('should show search input when true', function() {
17281728
setupSelectComponent('true', 'bootstrap');
17291729
clickMatch(el);
1730-
expect($(el).find('.ui-select-search')).not.toHaveClass('ng-hide');
1730+
expect($(el).find('.ui-select-search')).not.toHaveClass('ui-select-search-hidden');
17311731
});
17321732

17331733
it('should hide search input when false', function() {
17341734
setupSelectComponent('false', 'bootstrap');
17351735
clickMatch(el);
1736-
expect($(el).find('.ui-select-search')).toHaveClass('ng-hide');
1736+
expect($(el).find('.ui-select-search')).toHaveClass('ui-select-search-hidden');
17371737
});
17381738

17391739
});

0 commit comments

Comments
 (0)