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

Commit c00b657

Browse files
author
Andrew Eisenberg
committed
Add further accessibility support
* Ensure input elements have ids * Add role attributes to appropriate elements * Ensure input and button elements have aria-label
1 parent 9ef6492 commit c00b657

File tree

10 files changed

+25
-15
lines changed

10 files changed

+25
-15
lines changed

src/bootstrap/choices.tpl.html

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
<ul class="ui-select-choices ui-select-choices-content dropdown-menu"
2-
role="menu" aria-labelledby="dLabel"
2+
role="listbox"
33
ng-show="$select.items.length > 0">
4-
<li class="ui-select-choices-group">
4+
<li class="ui-select-choices-group" id="ui-select-choices-{{ $select.generatedId }}" >
55
<div class="divider" ng-show="$select.isGrouped && $index > 0"></div>
66
<div ng-show="$select.isGrouped" class="ui-select-choices-group-label dropdown-header" ng-bind-html="$group.name"></div>
7-
<div class="ui-select-choices-row" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}">
7+
<div id="ui-select-choices-row-{{ $select.generatedId }}-{{$index}}" class="ui-select-choices-row"
8+
ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}" role="option">
89
<a href="javascript:void(0)" class="ui-select-choices-row-inner"></a>
910
</div>
1011
</li>

src/bootstrap/match.tpl.html

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
<div class="ui-select-match" ng-hide="$select.open" ng-disabled="$select.disabled" ng-class="{'btn-default-focus':$select.focus}">
2-
<button type="button" class="btn btn-default btn-block ui-select-toggle" tabindex="-1" ;="" ng-disabled="$select.disabled" ng-click="$select.activate()">
2+
<button aria-label="{{ $select.baseTitle }} activate" type="button" class="btn btn-default btn-block ui-select-toggle" tabindex="-1" ;="" ng-disabled="$select.disabled" ng-click="$select.activate()">
33
<span ng-show="$select.isEmpty()" class="ui-select-placeholder text-muted">{{$select.placeholder}}</span>
44
<span ng-hide="$select.isEmpty()" class="ui-select-match-text" ng-class="{'ui-select-allow-clear': $select.allowClear && !$select.isEmpty()}" ng-transclude=""></span>
55
<i class="caret pull-right" ng-click="$select.toggle($event)"></i>
6-
</button>
7-
<button type="button" class="ui-select-clear" ng-if="$select.allowClear && !$select.isEmpty()" ng-click="$select.select(undefined)">
6+
<button aria-label="{{ $select.baseTitle }} clear" type="button" class="ui-select-clear" ng-if="$select.allowClear && !$select.isEmpty()" ng-click="$select.select(undefined)">
87
<i class="glyphicon glyphicon-remove"></i>
98
</button>
109
</div>

src/bootstrap/select-multiple.tpl.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
ng-disabled="$select.disabled"
1212
ng-hide="$select.disabled"
1313
ng-click="$select.activate()"
14-
ng-model="$select.search">
14+
ng-model="$select.search"
15+
role="combobox"
16+
aria-label="{{ $select.baseTitle }}">
1517
</div>
1618
<div class="ui-select-choices"></div>
1719
</div>

src/bootstrap/select.tpl.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
<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"
4+
aria-expanded="true"
5+
aria-label="{{ $select.baseTitle }}"
6+
aria-owns="ui-select-choices-{{ $select.generatedId }}"
7+
aria-activedescendant="ui-select-choices-row-{{ $select.generatedId }}-{{ $select.activeIndex }}"
48
class="form-control ui-select-search"
59
placeholder="{{$select.placeholder}}"
610
ng-model="$select.search"

src/select.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -897,7 +897,10 @@
897897
var searchInput = element.querySelectorAll('input.ui-select-search');
898898

899899
$select.generatedId = uiSelectConfig.generateId();
900-
$select.ariaLabel = attrs.title;
900+
$select.baseTitle = attrs.title || 'Select box';
901+
$select.focusserTitle = $select.baseTitle + ' focus';
902+
$select.focusserId = 'focusser-' + $select.generatedId;
903+
901904
$select.multiple = angular.isDefined(attrs.multiple) && (
902905
attrs.multiple === '' ||
903906
attrs.multiple.toLowerCase() === 'multiple' ||
@@ -989,7 +992,7 @@
989992
};
990993

991994
//Idea from: https://github.com/ivaynberg/select2/blob/79b5bf6db918d7560bdd959109b7bcfb47edaf43/select2.js#L1954
992-
var focusser = angular.element("<input ng-disabled='$select.disabled' class='ui-select-focusser ui-select-offscreen' type='text' aria-haspopup='true' role='button' />");
995+
var focusser = angular.element("<input ng-disabled='$select.disabled' class='ui-select-focusser ui-select-offscreen' type='text' id='{{ $select.focusserId }}' aria-label='{{ $select.focusserTitle }}' aria-haspopup='true' role='button' />");
993996

994997
if(attrs.tabindex){
995998
//tabindex might be an expression, wait until it contains the actual value before we set the focusser tabindex

src/select2/match.tpl.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
-->
66
<a class="select2-choice ui-select-match"
77
ng-class="{'select2-default': $select.isEmpty()}"
8-
ng-click="$select.activate()">
8+
ng-click="$select.activate()" aria-label="{{ $select.baseTitle }} select">
99
<span ng-show="$select.isEmpty()" class="select2-chosen">{{$select.placeholder}}</span>
1010
<span ng-hide="$select.isEmpty()" class="select2-chosen" ng-transclude></span>
1111
<abbr ng-if="$select.allowClear && !$select.isEmpty()" class="select2-search-choice-close" ng-click="$select.select(undefined)"></abbr>

src/select2/select-multiple.tpl.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
role="combobox"
1414
aria-expanded="true"
1515
aria-owns="ui-select-choices-{{ $select.generatedId }}"
16-
aria-label="{{ $select.ariaLabel }}"
16+
aria-label="{{ $select.baseTitle }}"
1717
aria-activedescendant="ui-select-choices-row-{{ $select.generatedId }}-{{ $select.activeIndex }}"
1818
class="select2-input ui-select-search"
1919
placeholder="{{$select.getPlaceholder()}}"

src/select2/select.tpl.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
role="combobox"
1212
aria-expanded="true"
1313
aria-owns="ui-select-choices-{{ $select.generatedId }}"
14-
aria-label="{{ $select.ariaLabel }}"
14+
aria-label="{{ $select.baseTitle }}"
1515
aria-activedescendant="ui-select-choices-row-{{ $select.generatedId }}-{{ $select.activeIndex }}"
1616
class="ui-select-search select2-input"
1717
ng-model="$select.search">

src/selectize/choices.tpl.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<div ng-show="$select.open" class="ui-select-choices selectize-dropdown single">
22
<div class="ui-select-choices-content selectize-dropdown-content">
3-
<div class="ui-select-choices-group optgroup">
3+
<div class="ui-select-choices-group optgroup" role="listbox">
44
<div ng-show="$select.isGrouped" class="ui-select-choices-group-label optgroup-header" ng-bind-html="$group.name"></div>
5-
<div class="ui-select-choices-row" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}">
5+
<div role="option" class="ui-select-choices-row" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}">
66
<div class="option ui-select-choices-row-inner" data-selectable></div>
77
</div>
88
</div>

src/selectize/select.tpl.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
placeholder="{{$select.placeholder}}"
1010
ng-model="$select.search"
1111
ng-hide="!$select.searchEnabled || ($select.selected && !$select.open)"
12-
ng-disabled="$select.disabled">
12+
ng-disabled="$select.disabled"
13+
aria-label="{{ $select.baseTitle }}">
1314
</div>
1415
<div class="ui-select-choices"></div>
1516
</div>

0 commit comments

Comments
 (0)