1 (function($, rf) { 2 3 rf.ui = rf.ui || {}; 4 5 rf.ui.MenuKeyNavigation = { 6 7 __updateItemsList : function() { 8 var items = $('.' + this.options.cssClasses.listContainerCss + ':first', 9 this.popup.popup).find('>.' + this.options.cssClasses.itemCss).not( 10 '.' + this.options.cssClasses.disabledItemCss); 11 return (this.items = items); 12 }, 13 14 __selectPrev : function() { 15 if (-1 == this.currentSelectedItemIndex) { 16 this.currentSelectedItemIndex = this.items.length - 1; 17 } else { 18 this.__deselectCurrentItem(); 19 } 20 21 if (this.currentSelectedItemIndex > 0) { 22 this.currentSelectedItemIndex--; 23 } else { 24 this.currentSelectedItemIndex = this.items.length - 1; 25 } 26 27 this.__selectCurrentItem(); 28 }, 29 30 __selectNext : function() { 31 if (-1 != this.currentSelectedItemIndex) { 32 this.__deselectCurrentItem(); 33 } 34 if (this.currentSelectedItemIndex < this.items.length - 1) { 35 this.currentSelectedItemIndex++; 36 } else { 37 this.currentSelectedItemIndex = 0; 38 } 39 40 this.__selectCurrentItem(); 41 }, 42 43 __deselectCurrentItem : function() { 44 this.__deselectByIndex(this.currentSelectedItemIndex); 45 }, 46 47 __selectCurrentItem : function() { 48 this.__selectByIndex(this.currentSelectedItemIndex); 49 }, 50 51 __selectFirstItem : function() { 52 this.currentSelectedItemIndex = 0; 53 this.__selectCurrentItem(); 54 }, 55 56 __selectByIndex : function(index) { 57 if (-1 != index) { 58 rf.component(this.items.eq(index)).select(); 59 } 60 }, 61 62 __deselectByIndex : function(index) { 63 if (index > -1) { 64 rf.component(this.items.eq(index)).unselect(); 65 } 66 67 }, 68 69 __openGroup : function() { 70 var item = this.__getItemByIndex(this.currentSelectedItemIndex); 71 if (this.__isGroup(item)) { 72 rf.component(item).show(); 73 rf.component(item).__selectFirstItem(); 74 this.active = false; 75 } 76 }, 77 78 __closeGroup : function() { 79 var item = this.__getItemByIndex(this.currentSelectedItemIndex); 80 if (this.__isGroup(item)) { 81 rf.component(item).__deselectCurrentItem(); 82 rf.component(item).hide(); 83 this.active = true; 84 } 85 }, 86 87 __returnToParentMenu : function() { 88 var item = this.__getItemByIndex(this.currentSelectedItemIndex); 89 var menu; 90 menu = this.__getParentMenu() || this.__getParentMenuFromItem(item); 91 if (menu != null && this.id != rf.component(menu).id) { 92 this.hide(); 93 rf.component(menu).popupElement.focus(); 94 } else { 95 this.hide(); 96 } 97 }, 98 99 __activateMenuItem : function() { 100 var item = this.__getCurrentItem(); 101 if (item) { 102 menuItemId = item.attr('id'); 103 this.activateItem(menuItemId); 104 } 105 }, 106 107 __getItemByIndex : function(index) { 108 if (index > -1) { 109 return this.items.eq(index); 110 } else { 111 return null; 112 } 113 }, 114 115 __getCurrentItem : function() { 116 return this.__getItemByIndex(this.currentSelectedItemIndex); 117 }, 118 119 __keydownHandler : function(e) { 120 var code; 121 122 if (e.keyCode) { 123 code = e.keyCode; 124 } else if (e.which) { 125 code = e.which; 126 } 127 128 activeMenu = rf.ui.MenuManager.getActiveSubMenu(); 129 130 if (this.popup.isVisible()) { 131 switch (code) { 132 case rf.KEYS.DOWN: 133 e.preventDefault(); 134 activeMenu.__selectNext(); 135 //this.__setInputFocus(); 136 break; 137 138 case rf.KEYS.UP: 139 e.preventDefault(); 140 activeMenu.__selectPrev(); 141 //this.__setInputFocus(); 142 break; 143 case rf.KEYS.LEFT: 144 e.preventDefault(); 145 activeMenu.__returnToParentMenu(); 146 break; 147 148 case rf.KEYS.RIGHT: 149 e.preventDefault(); 150 activeMenu.__openGroup(); 151 break; 152 153 case rf.KEYS.ESC: 154 e.preventDefault(); 155 activeMenu.__returnToParentMenu(); 156 break; 157 158 case rf.KEYS.RETURN: 159 e.preventDefault(); 160 activeMenu.__activateMenuItem(); 161 //this.__setInputFocus(); 162 //return false; 163 break; 164 } 165 e.stopPropagation(); 166 } 167 } 168 } 169 })(RichFaces.jQuery, RichFaces);