@@ -7,6 +7,10 @@ var event = require("../lib/event");
7
7
var lang = require ( "../lib/lang" ) ;
8
8
var dom = require ( "../lib/dom" ) ;
9
9
10
+ var getAriaId = function ( index ) {
11
+ return `suggest-aria-id:${ index } ` ;
12
+ } ;
13
+
10
14
var $singleLineEditor = function ( el ) {
11
15
var renderer = new Renderer ( el ) ;
12
16
@@ -45,6 +49,10 @@ var AcePopup = function(parentNode) {
45
49
popup . renderer . content . style . cursor = "default" ;
46
50
popup . renderer . setStyle ( "ace_autocomplete" ) ;
47
51
52
+ // Set aria attributes for the popup
53
+ popup . renderer . container . setAttribute ( "role" , "listbox" ) ;
54
+ popup . renderer . container . setAttribute ( "aria-label" , "Autocomplete suggestions" ) ;
55
+
48
56
popup . setOption ( "displayIndentGuides" , false ) ;
49
57
popup . setOption ( "dragDelay" , 150 ) ;
50
58
@@ -114,11 +122,21 @@ var AcePopup = function(parentNode) {
114
122
var row = popup . getRow ( ) ;
115
123
var t = popup . renderer . $textLayer ;
116
124
var selected = t . element . childNodes [ row - t . config . firstRow ] ;
117
- if ( selected !== t . selectedNode && t . selectedNode )
125
+ var el = document . activeElement ; // Active element is textarea of main editor
126
+ if ( selected !== t . selectedNode && t . selectedNode ) {
118
127
dom . removeCssClass ( t . selectedNode , "ace_selected" ) ;
128
+ el . removeAttribute ( "aria-activedescendant" ) ;
129
+ t . selectedNode . removeAttribute ( "id" ) ;
130
+ }
119
131
t . selectedNode = selected ;
120
- if ( selected )
132
+ if ( selected ) {
121
133
dom . addCssClass ( selected , "ace_selected" ) ;
134
+ var ariaId = getAriaId ( row ) ;
135
+ selected . id = ariaId ;
136
+ popup . renderer . container . setAttribute ( "aria-activedescendant" , ariaId ) ;
137
+ el . setAttribute ( "aria-activedescendant" , ariaId ) ;
138
+ selected . setAttribute ( "aria-label" , popup . getData ( row ) . value ) ;
139
+ }
122
140
} ) ;
123
141
var hideHoverMarker = function ( ) { setHoverMarker ( - 1 ) ; } ;
124
142
var setHoverMarker = function ( row , suppressRedraw ) {
@@ -350,3 +368,4 @@ dom.importCssString(`
350
368
351
369
exports . AcePopup = AcePopup ;
352
370
exports . $singleLineEditor = $singleLineEditor ;
371
+ exports . getAriaId = getAriaId ;
0 commit comments