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