| | |
| | | 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); |
| | | } |
| | |
| | | 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; |
| | | |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | 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 }); |
| | |
| | | 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); |
| | |
| | | // 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(); |
| | | } |