From a2f8fa236143b44f90e53c19806cfd0efa014857 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Mon, 12 May 2014 10:32:45 +0200 Subject: Set aria-selected and aria-expanded state attributes --- program/js/app.js | 8 +++++--- program/js/list.js | 12 ++++++------ program/js/treelist.js | 13 ++++++++----- skins/larry/includes/mailtoolbar.html | 8 ++++---- skins/larry/templates/compose.html | 6 +++--- skins/larry/templates/mail.html | 9 ++++----- 6 files changed, 30 insertions(+), 26 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index dd172cd99..06008b2da 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -6967,7 +6967,7 @@ function rcube_webmail() this.hide_menu(this.menu_stack[0], event); } - obj.show().attr('aria-hidden', 'false').data('opener', ref.get(0)); + obj.show().attr('aria-hidden', 'false').data('opener', ref.attr('aria-expanded', 'true').get(0)); this.triggerEvent('menu-open', { name:name, obj:obj, props:prop, originalEvent:event }); this.menu_stack.push(name); @@ -6999,8 +6999,10 @@ function rcube_webmail() this.triggerEvent('menu-close', { name:this.menu_stack[j], obj:obj, props:{ menu:this.menu_stack[j] }, originalEvent:event }); if (this.menu_stack[j] == name) { j = -1; // stop loop - if (keyboard && obj.data('opener')) { - obj.data('opener').focus(); + if (obj.data('opener')) { + $(obj.data('opener')).attr('aria-expanded', 'false'); + if (keyboard) + obj.data('opener').focus(); } } this.menu_stack.pop(); diff --git a/program/js/list.js b/program/js/list.js index fa37353e8..f64d38bc3 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -116,7 +116,7 @@ init: function() this.focus_elem = $('') .attr('tabindex', '0') .attr('style', 'display:block; width:1px; height:1px; line-height:1px; overflow:hidden; position:fixed; top:-1000px') - .html('Select List') + .html($(this.list).attr('summary') || 'Select List') .insertAfter(this.list) .on('focus', function(e){ me.focus(e); }) .on('blur', function(e){ me.blur(e); }); @@ -1086,7 +1086,7 @@ select_all: function(filter) this.highlight_row(n, true, true); } else { - $(this.rows[n].obj).removeClass('selected').removeClass('unfocused'); + $(this.rows[n].obj).removeClass('selected').removeClass('unfocused').removeAttr('aria-selected'); } } @@ -1143,7 +1143,7 @@ clear_selection: function(id, no_event) else { for (n in this.selection) if (this.rows[this.selection[n]]) { - $(this.rows[this.selection[n]].obj).removeClass('selected').removeClass('unfocused'); + $(this.rows[this.selection[n]].obj).removeClass('selected').removeClass('unfocused').removeAttr('aria-selected'); } this.selection = []; @@ -1206,13 +1206,13 @@ highlight_row: function(id, multiple, norecur) if (this.selection.length > 1 || !this.in_selection(id)) { this.clear_selection(null, true); this.selection[0] = id; - $(this.rows[id].obj).addClass('selected'); + $(this.rows[id].obj).addClass('selected').attr('aria-selected', 'true'); } } else { if (!this.in_selection(id)) { // select row this.selection.push(id); - $(this.rows[id].obj).addClass('selected'); + $(this.rows[id].obj).addClass('selected').attr('aria-selected', 'true'); if (!norecur && !this.rows[id].expanded) this.highlight_children(id, true); } @@ -1222,7 +1222,7 @@ highlight_row: function(id, multiple, norecur) a_post = this.selection.slice(p+1, this.selection.length); this.selection = a_pre.concat(a_post); - $(this.rows[id].obj).removeClass('selected').removeClass('unfocused'); + $(this.rows[id].obj).removeClass('selected').removeClass('unfocused').removeAttr('aria-selected'); if (!norecur && !this.rows[id].expanded) this.highlight_children(id, false); } diff --git a/program/js/treelist.js b/program/js/treelist.js index fa3907894..8b55b32b1 100644 --- a/program/js/treelist.js +++ b/program/js/treelist.js @@ -323,7 +323,7 @@ function rcube_treelist_widget(node, p) */ function update_data() { - data = walk_list(container); + data = walk_list(container, 0); } /** @@ -332,6 +332,7 @@ function rcube_treelist_widget(node, p) function update_dom(node) { var li = id2dom(node.id); + li.attr('aria-expanded', node.collapsed ? 'false' : 'true'); li.children('ul').first()[(node.collapsed ? 'hide' : 'show')](); li.children('div.treetoggle').removeClass('collapsed expanded').addClass(node.collapsed ? 'collapsed' : 'expanded'); me.triggerEvent('toggle', node); @@ -400,8 +401,9 @@ function rcube_treelist_widget(node, p) // add child list and toggle icon if (node.children && node.children.length) { + li.attr('aria-expanded', node.collapsed ? 'false' : 'true'); $('
 
').appendTo(li); - var ul = $('