|
41 | 41 |
|
42 | 42 | function MdAutocomplete () {
|
43 | 43 | return {
|
44 |
| - transclude: true, |
45 | 44 | controller: 'MdAutocompleteCtrl',
|
46 | 45 | controllerAs: '$mdAutocompleteCtrl',
|
47 | 46 | link: link,
|
|
62 | 61 | floatingLabel: '@?mdFloatingLabel',
|
63 | 62 | autoselect: '=?mdAutoselect'
|
64 | 63 | },
|
65 |
| - template: '\ |
66 |
| - <md-autocomplete-wrap role="listbox">\ |
67 |
| - <md-input-container ng-if="floatingLabel">\ |
68 |
| - <label>{{floatingLabel}}</label>\ |
| 64 | + template: function (element, attr) { |
| 65 | + attr.$mdAutocompleteTemplate = element.html(); |
| 66 | + return '\ |
| 67 | + <md-autocomplete-wrap role="listbox">\ |
| 68 | + <md-input-container ng-if="floatingLabel">\ |
| 69 | + <label>{{floatingLabel}}</label>\ |
| 70 | + <input type="text"\ |
| 71 | + id="fl-input-{{$mdAutocompleteCtrl.id}}"\ |
| 72 | + name="{{name}}"\ |
| 73 | + autocomplete="off"\ |
| 74 | + ng-disabled="isDisabled"\ |
| 75 | + ng-model="$mdAutocompleteCtrl.scope.searchText"\ |
| 76 | + ng-keydown="$mdAutocompleteCtrl.keydown($event)"\ |
| 77 | + ng-blur="$mdAutocompleteCtrl.blur()"\ |
| 78 | + aria-owns="ul-{{$mdAutocompleteCtrl.id}}"\ |
| 79 | + aria-label="{{floatingLabel}}"\ |
| 80 | + aria-autocomplete="list"\ |
| 81 | + aria-haspopup="true"\ |
| 82 | + aria-activedescendant=""\ |
| 83 | + aria-expanded="{{!$mdAutocompleteCtrl.hidden}}"/>\ |
| 84 | + \ |
| 85 | + </md-input-container>\ |
69 | 86 | <input type="text"\
|
70 |
| - id="fl-input-{{$mdAutocompleteCtrl.id}}"\ |
| 87 | + id="input-{{$mdAutocompleteCtrl.id}}"\ |
71 | 88 | name="{{name}}"\
|
| 89 | + ng-if="!floatingLabel"\ |
72 | 90 | autocomplete="off"\
|
73 | 91 | ng-disabled="isDisabled"\
|
74 | 92 | ng-model="$mdAutocompleteCtrl.scope.searchText"\
|
75 | 93 | ng-keydown="$mdAutocompleteCtrl.keydown($event)"\
|
76 | 94 | ng-blur="$mdAutocompleteCtrl.blur()"\
|
| 95 | + placeholder="{{placeholder}}"\ |
77 | 96 | aria-owns="ul-{{$mdAutocompleteCtrl.id}}"\
|
78 |
| - aria-label="{{floatingLabel}}"\ |
| 97 | + aria-label="{{placeholder}}"\ |
79 | 98 | aria-autocomplete="list"\
|
80 | 99 | aria-haspopup="true"\
|
81 | 100 | aria-activedescendant=""\
|
82 | 101 | aria-expanded="{{!$mdAutocompleteCtrl.hidden}}"/>\
|
83 |
| - \ |
84 |
| - </md-input-container>\ |
85 |
| - <input type="text"\ |
86 |
| - id="input-{{$mdAutocompleteCtrl.id}}"\ |
87 |
| - name="{{name}}"\ |
88 |
| - ng-if="!floatingLabel"\ |
89 |
| - autocomplete="off"\ |
90 |
| - ng-disabled="isDisabled"\ |
91 |
| - ng-model="$mdAutocompleteCtrl.scope.searchText"\ |
92 |
| - ng-keydown="$mdAutocompleteCtrl.keydown($event)"\ |
93 |
| - ng-blur="$mdAutocompleteCtrl.blur()"\ |
94 |
| - placeholder="{{placeholder}}"\ |
95 |
| - aria-owns="ul-{{$mdAutocompleteCtrl.id}}"\ |
96 |
| - aria-label="{{placeholder}}"\ |
97 |
| - aria-autocomplete="list"\ |
98 |
| - aria-haspopup="true"\ |
99 |
| - aria-activedescendant=""\ |
100 |
| - aria-expanded="{{!$mdAutocompleteCtrl.hidden}}"/>\ |
101 |
| - <button\ |
102 |
| - type="button"\ |
103 |
| - ng-if="$mdAutocompleteCtrl.scope.searchText && !isDisabled"\ |
104 |
| - ng-click="$mdAutocompleteCtrl.clear()">\ |
105 |
| - <md-icon md-svg-icon="cancel"></md-icon>\ |
106 |
| - <span class="visually-hidden">Clear</span>\ |
107 |
| - </button>\ |
108 |
| - <md-progress-linear\ |
109 |
| - ng-if="$mdAutocompleteCtrl.loading"\ |
110 |
| - md-mode="indeterminate"></md-progress-linear>\ |
111 |
| - <ul role="presentation"\ |
112 |
| - id="ul-{{$mdAutocompleteCtrl.id}}"\ |
113 |
| - ng-mouseenter="$mdAutocompleteCtrl.listEnter()"\ |
114 |
| - ng-mouseleave="$mdAutocompleteCtrl.listLeave()"\ |
115 |
| - ng-mouseup="$mdAutocompleteCtrl.mouseUp()">\ |
116 |
| - <li ng-repeat="(index, item) in $mdAutocompleteCtrl.matches"\ |
117 |
| - ng-class="{ selected: index === $mdAutocompleteCtrl.index }"\ |
118 |
| - ng-show="$mdAutocompleteCtrl.scope.searchText && !$mdAutocompleteCtrl.hidden"\ |
119 |
| - ng-click="$mdAutocompleteCtrl.select(index)"\ |
120 |
| - ng-transclude\ |
121 |
| - md-autocomplete-list-item="$mdAutocompleteCtrl.itemName">\ |
122 |
| - </li>\ |
123 |
| - </ul>\ |
124 |
| - </md-autocomplete-wrap>\ |
125 |
| - <aria-status\ |
126 |
| - class="visually-hidden"\ |
127 |
| - role="status"\ |
128 |
| - aria-live="assertive">\ |
129 |
| - <p ng-repeat="message in $mdAutocompleteCtrl.messages">{{message.display}}</p>\ |
130 |
| - </aria-status>' |
| 102 | + <button\ |
| 103 | + type="button"\ |
| 104 | + ng-if="$mdAutocompleteCtrl.scope.searchText && !isDisabled"\ |
| 105 | + ng-click="$mdAutocompleteCtrl.clear()">\ |
| 106 | + <md-icon md-svg-icon="cancel"></md-icon>\ |
| 107 | + <span class="visually-hidden">Clear</span>\ |
| 108 | + </button>\ |
| 109 | + <md-progress-linear\ |
| 110 | + ng-if="$mdAutocompleteCtrl.loading"\ |
| 111 | + md-mode="indeterminate"></md-progress-linear>\ |
| 112 | + <ul role="presentation"\ |
| 113 | + id="ul-{{$mdAutocompleteCtrl.id}}"\ |
| 114 | + ng-mouseenter="$mdAutocompleteCtrl.listEnter()"\ |
| 115 | + ng-mouseleave="$mdAutocompleteCtrl.listLeave()"\ |
| 116 | + ng-mouseup="$mdAutocompleteCtrl.mouseUp()">\ |
| 117 | + <li ng-repeat="(index, item) in $mdAutocompleteCtrl.matches"\ |
| 118 | + ng-class="{ selected: index === $mdAutocompleteCtrl.index }"\ |
| 119 | + ng-show="$mdAutocompleteCtrl.scope.searchText && !$mdAutocompleteCtrl.hidden"\ |
| 120 | + ng-click="$mdAutocompleteCtrl.select(index)"\ |
| 121 | + md-autocomplete-list-item-template="contents"\ |
| 122 | + md-autocomplete-list-item="$mdAutocompleteCtrl.itemName">\ |
| 123 | + </li>\ |
| 124 | + </ul>\ |
| 125 | + </md-autocomplete-wrap>\ |
| 126 | + <aria-status\ |
| 127 | + class="visually-hidden"\ |
| 128 | + role="status"\ |
| 129 | + aria-live="assertive">\ |
| 130 | + <p ng-repeat="message in $mdAutocompleteCtrl.messages">{{message.display}}</p>\ |
| 131 | + </aria-status>'; |
| 132 | + } |
131 | 133 | };
|
132 | 134 |
|
133 | 135 | function link (scope, element, attr) {
|
| 136 | + scope.contents = attr.$mdAutocompleteTemplate; |
134 | 137 | angular.forEach(scope.$$isolateBindings, function (binding, key) {
|
135 | 138 | if (binding.optional && angular.isUndefined(scope[key])) {
|
136 | 139 | scope[key] = attr.hasOwnProperty(attr.$normalize(binding.attrName));
|
|
0 commit comments