Skip to content
This repository was archived by the owner on Sep 5, 2024. It is now read-only.

Commit 2a884c6

Browse files
devversionThomasBurleson
authored andcommitted
feat(autocomplete): support readonly attribute
Fixes #5507 Closes #7107
1 parent 210e8b0 commit 2a884c6

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

src/components/autocomplete/autocomplete.spec.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,56 @@ describe('<md-autocomplete>', function() {
119119
element.remove();
120120
}));
121121

122+
it('should allow allow using ng-readonly', inject(function() {
123+
var scope = createScope(null, {inputId: 'custom-input-id'});
124+
var template = '\
125+
<md-autocomplete\
126+
md-input-id="{{inputId}}"\
127+
md-selected-item="selectedItem"\
128+
md-search-text="searchText"\
129+
md-items="item in match(searchText)"\
130+
md-item-text="item.display"\
131+
placeholder="placeholder"\
132+
ng-readonly="readonly">\
133+
<span md-highlight-text="searchText">{{item.display}}</span>\
134+
</md-autocomplete>';
135+
var element = compile(template, scope);
136+
var input = element.find('input');
137+
138+
scope.readonly = true;
139+
scope.$digest();
140+
141+
expect(input.attr('readonly')).toBe('readonly');
142+
143+
scope.readonly = false;
144+
scope.$digest();
145+
146+
expect(input.attr('readonly')).toBeUndefined();
147+
148+
element.remove();
149+
}));
150+
151+
it('should allow allow using an empty readonly attribute', inject(function() {
152+
var scope = createScope(null, {inputId: 'custom-input-id'});
153+
var template = '\
154+
<md-autocomplete\
155+
md-input-id="{{inputId}}"\
156+
md-selected-item="selectedItem"\
157+
md-search-text="searchText"\
158+
md-items="item in match(searchText)"\
159+
md-item-text="item.display"\
160+
placeholder="placeholder"\
161+
readonly>\
162+
<span md-highlight-text="searchText">{{item.display}}</span>\
163+
</md-autocomplete>';
164+
var element = compile(template, scope);
165+
var input = element.find('input');
166+
167+
expect(input.attr('readonly')).toBe('readonly');
168+
169+
element.remove();
170+
}));
171+
122172
it('should allow you to set an input id with floating label', inject(function() {
123173
var scope = createScope(null, {inputId: 'custom-input-id'});
124174
var template = '\

src/components/autocomplete/js/autocompleteController.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ function MdAutocompleteCtrl ($scope, $element, $mdUtil, $mdConstant, $mdTheming,
3636
ctrl.id = $mdUtil.nextUid();
3737
ctrl.isDisabled = null;
3838
ctrl.isRequired = null;
39+
ctrl.isReadonly = null;
3940
ctrl.hasNotFound = false;
4041

4142
//-- public methods
@@ -166,6 +167,7 @@ function MdAutocompleteCtrl ($scope, $element, $mdUtil, $mdConstant, $mdTheming,
166167
var wait = parseInt($scope.delay, 10) || 0;
167168
$attrs.$observe('disabled', function (value) { ctrl.isDisabled = $mdUtil.parseAttributeBoolean(value, false); });
168169
$attrs.$observe('required', function (value) { ctrl.isRequired = $mdUtil.parseAttributeBoolean(value, false); });
170+
$attrs.$observe('readonly', function (value) { ctrl.isReadonly = $mdUtil.parseAttributeBoolean(value, false); });
169171
$scope.$watch('searchText', wait ? $mdUtil.debounce(handleSearchText, wait) : handleSearchText);
170172
$scope.$watch('selectedItem', selectedItemChange);
171173
angular.element($window).on('resize', positionDropdown);

src/components/autocomplete/js/autocompleteDirective.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ function MdAutocomplete () {
237237
name="{{inputName}}"\
238238
autocomplete="off"\
239239
ng-required="$mdAutocompleteCtrl.isRequired"\
240+
ng-readonly="$mdAutocompleteCtrl.isReadonly"\
240241
ng-minlength="inputMinlength"\
241242
ng-maxlength="inputMaxlength"\
242243
ng-disabled="$mdAutocompleteCtrl.isDisabled"\
@@ -263,6 +264,7 @@ function MdAutocomplete () {
263264
autocomplete="off"\
264265
ng-required="$mdAutocompleteCtrl.isRequired"\
265266
ng-disabled="$mdAutocompleteCtrl.isDisabled"\
267+
ng-readonly="$mdAutocompleteCtrl.isReadonly"\
266268
ng-model="$mdAutocompleteCtrl.scope.searchText"\
267269
ng-keydown="$mdAutocompleteCtrl.keydown($event)"\
268270
ng-blur="$mdAutocompleteCtrl.blur()"\

0 commit comments

Comments
 (0)