From d0d7f43ef53d71322a8793ec10f7179f30615127 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli <thomas@roundcube.net> Date: Tue, 27 May 2014 13:22:11 -0400 Subject: [PATCH] More aria-* improvements to toggle buttons and autocompletion lists --- program/js/app.js | 31 +++++++++++++++---------------- 1 files changed, 15 insertions(+), 16 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index 4bd6442..41f9a38 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -4522,11 +4522,11 @@ this.ksearch_select = function(node) { if (this.ksearch_pane && node) { - this.ksearch_pane.find('li.selected').removeClass('selected'); + this.ksearch_pane.find('li.selected').removeClass('selected').removeAttr('aria-selected'); } if (node) { - $(node).addClass('selected'); + $(node).addClass('selected').removeAttr('aria-selected', 'true'); this.ksearch_selected = node._rcm_id; $(this.ksearch_input).attr('aria-activedecendant', 'rcmkSearchItem' + this.ksearch_selected); } @@ -4659,7 +4659,7 @@ return; // display search results - var i, len, ul, li, text, type, init, + var i, id, len, ul, text, type, init, value = this.ksearch_value, maxlen = this.env.autocomplete_max ? this.env.autocomplete_max : 15; @@ -4697,12 +4697,13 @@ for (i=0; i < len && maxlen > 0; i++) { text = typeof results[i] === 'object' ? results[i].name : results[i]; type = typeof results[i] === 'object' ? results[i].type : ''; - li = document.createElement('LI'); - li._rcm_id = i + this.env.contacts.length; - li.id = 'rcmkSearchItem' + li._rcm_id; - li.innerHTML = this.quote_html(text.replace(new RegExp('('+RegExp.escape(value)+')', 'ig'), '##$1%%')).replace(/##([^%]+)%%/g, '<b>$1</b>'); - if (type) li.className = type; - ul.appendChild(li); + id = i + this.env.contacts.length; + $('<li>').attr('id', 'rcmkSearchItem' + id) + .attr('role', 'option') + .html(this.quote_html(text.replace(new RegExp('('+RegExp.escape(value)+')', 'ig'), '##$1%%')).replace(/##([^%]+)%%/g, '<b>$1</b>')) + .addClass(type || '') + .appendTo(ul) + .get(0)._rcm_id = id; maxlen -= 1; } } @@ -6597,10 +6598,8 @@ this.treelist.select(name); } else if (this.gui_objects.folderlist) { - $('li.selected', this.gui_objects.folderlist) - .removeClass('selected').addClass('unfocused'); - $(this.get_folder_li(name, prefix, encode)) - .removeClass('unfocused').addClass('selected'); + $('li.selected', this.gui_objects.folderlist).removeClass('selected'); + $(this.get_folder_li(name, prefix, encode)).addClass('selected'); // trigger event hook this.triggerEvent('selectfolder', { folder:name, prefix:prefix }); @@ -6976,8 +6975,8 @@ this.hide_menu(this.menu_stack[i]); } if (stack && this.menu_stack.length) { - obj.data('parent', this.menu_stack.last()); - obj.css('z-index', ($('#'+this.menu_stack.last()).css('z-index') || 0) + 1); + obj.data('parent', $.last(this.menu_stack)); + obj.css('z-index', ($('#'+$.last(this.menu_stack)).css('z-index') || 0) + 1); } else if (!stack && this.menu_stack.length) { this.hide_menu(this.menu_stack[0], event); @@ -7027,7 +7026,7 @@ // focus previous menu in stack if (this.menu_stack.length && keyboard) { this.menu_keyboard_active = true; - this.focused_menu = this.menu_stack.last(); + this.focused_menu = $.last(this.menu_stack); if (!obj || !obj.data('opener')) $('#'+this.focused_menu).find('a,input:not(:disabled)').not('[aria-disabled=true]').first().focus(); } -- Gitblit v1.9.1