1 (function($, rf) { 2 rf.ui = rf.ui || {}; 3 var defaultOptions = { 4 showEvent : 'mouseenter', 5 direction : "AA", 6 jointPoint : "AA", 7 positionType : "DDMENUGROUP", 8 showDelay : 300 9 } 10 // constructor definition 11 rf.ui.MenuGroup = function(componentId, options) { 12 this.id = componentId; 13 this.options = {}; 14 $.extend(this.options, defaultOptions, options || {}); 15 $super.constructor.call(this, componentId, this.options); 16 this.namespace = this.namespace || "." 17 + rf.Event.createNamespace(this.name, this.id); 18 this.attachToDom(componentId); 19 20 rf.Event.bindById(this.id, this.options.showEvent, $.proxy( 21 this.__showHandler, this), this); 22 23 this.rootMenu = rf.component(this.options.rootMenuId); 24 25 this.shown = false; 26 this.jqueryElement = $(this.element); 27 28 }; 29 30 rf.ui.MenuBase.extend(rf.ui.MenuGroup); 31 32 // define super class link 33 var $super = rf.ui.MenuGroup.$super; 34 35 $.extend(rf.ui.MenuGroup.prototype, rf.ui.MenuKeyNavigation); 36 37 $.extend(rf.ui.MenuGroup.prototype, (function() { 38 return { 39 name : "MenuGroup", 40 show : function() { 41 var id = this.id; 42 if (this.rootMenu.groupList[id] && !this.shown) { 43 this.rootMenu.invokeEvent("groupshow", rf 44 .getDomElement(this.rootMenu.id), 45 null); 46 this.__showPopup(); 47 this.shown = true; 48 } 49 }, 50 hide : function() { 51 var menu = this.rootMenu; 52 if (menu.groupList[this.id] && this.shown) { 53 menu.invokeEvent("grouphide", rf 54 .getDomElement(menu.id), null); 55 this.__hidePopup(); 56 this.shown = false; 57 } 58 }, 59 60 select : function() { 61 this.jqueryElement.removeClass(this.options.cssClasses.unselectItemCss); 62 this.jqueryElement.addClass(this.options.cssClasses.selectItemCss); 63 }, 64 unselect : function() { 65 this.jqueryElement.removeClass(this.options.cssClasses.selectItemCss); 66 this.jqueryElement.addClass(this.options.cssClasses.unselectItemCss); 67 }, 68 69 __showHandler : function() { 70 this.select(); 71 $super.__showHandler.call(this); 72 }, 73 __leaveHandler : function() { 74 window.clearTimeout(this.showTimeoutId); 75 this.showTimeoutId = null; 76 this.hideTimeoutId = window.setTimeout($.proxy( 77 function() { 78 this.hide(); 79 }, this), this.options.hideDelay); 80 this.unselect(); 81 }, 82 83 destroy : function() { 84 // clean up code here 85 this.detach(this.id); 86 // call parent's destroy method 87 $super.destroy.call(this); 88 } 89 } 90 91 })()); 92 })(RichFaces.jQuery, RichFaces)