dynamicmenu_wev8.js 5.87 KB
Ext.menu.Menu=Ext.extend(Ext.Container,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,hidden:true,constructor:function(a){if(Ext.isArray(a)){a={items:a}}Ext.apply(this,a);this.addEvents("beforeshow","beforehide","show","hide","click","mouseover","mouseout","itemclick");Ext.menu.MenuMgr.register(this);Ext.menu.Menu.superclass.constructor.call(this)},onRender:function(b,a){if(!b){b=Ext.getBody()}this.el=new Ext.Layer({shadow:this.shadow,dh:{id:this.getId(),cls:"x-menu x-layer "+(this.cls?(this.cls+""):"")+(this.plain?" x-menu-plain":""),cn:[{tag:"a",cls:"x-menu-focus",href:"#",onclick:"return false;",tabIndex:"-1"},{tag:"ul",cls:"x-menu-list"}]},constrain:false,parentEl:b,zindex:15000});this.setLayout(new Ext.layout.ContainerLayout({renderItem:this.renderItem}));Ext.menu.Menu.superclass.onRender.apply(this,arguments);if(!this.keyNav){this.keyNav=new Ext.menu.MenuNav(this)}this.focusEl=this.el.child("a.x-menu-focus");this.ul=this.el.child("ul.x-menu-list");this.ul.on("click",this.onClick,this);this.ul.on("mouseover",this.onMouseOver,this);this.ul.on("mouseout",this.onMouseOut,this)},getLayoutTarget:function(){return this.ul},renderItem:function(f,b,e){if(f&&!f.rendered){var a=document.createElement("li");a.className="x-menu-list-item";f.render(a,this.container);if(typeof b=="number"){b=e.dom.childNodes[b]}e.dom.insertBefore(a,b||null);if(this.extraCls){var d=f.getPositionEl?f.getPositionEl():f;d.addClass(this.extraCls)}}else{if(f&&!this.isValidParent(f,e)){if(this.extraCls){f.addClass(this.extraCls)}if(typeof b=="number"){b=e.dom.childNodes[b]}e.dom.insertBefore(f.getActionEl().dom,b||null)}}},autoWidth:function(){var d=this.el,c=this.ul;if(!d){return}var a=this.width;if(a){d.setWidth(a)}else{if(Ext.isIE){d.setWidth(this.minWidth);var b=d.dom.offsetWidth;d.setWidth(c.getWidth()+d.getFrameWidth("lr"))}}},delayAutoWidth:function(){if(this.el){if(!this.awTask){this.awTask=new Ext.util.DelayedTask(this.autoWidth,this)}this.awTask.delay(20)}},findTargetItem:function(b){var a=b.getTarget(".x-menu-list-item",this.ul,true);if(a&&a.menuItemId){return this.items.get(a.menuItemId)}},onClick:function(b){var a;if(a=this.findTargetItem(b)){a.onClick(b);this.fireEvent("click",this,a,b)}},setActiveItem:function(a,b){if(a!=this.activeItem){if(this.activeItem){this.activeItem.deactivate()}this.activeItem=a;a.activate(b)}else{if(b){a.expandMenu()}}},tryActivate:function(f,e){var b=this.items;for(var c=f,a=b.length;c>=0&&c<a;c+=e){var d=b.get(c);if(!d.disabled&&d.canActivate){this.setActiveItem(d,false);return d}}return false},onMouseOver:function(b){var a;if(a=this.findTargetItem(b)){if(a.canActivate&&!a.disabled){this.setActiveItem(a,true)}}this.fireEvent("mouseover",this,b,a)},onMouseOut:function(b){var a;if(a=this.findTargetItem(b)){if(a==this.activeItem&&a.shouldDeactivate(b)){this.activeItem.deactivate();delete this.activeItem}}this.fireEvent("mouseout",this,b,a)},show:function(b,c,a){this.parentMenu=a;if(!this.el){this.render()}this.fireEvent("beforeshow",this);this.showAt(this.el.getAlignToXY(b,c||this.defaultAlign),a,false)},showAt:function(c,b,a){this.parentMenu=b;if(!this.el){this.render()}if(a!==false){this.fireEvent("beforeshow",this);c=this.el.adjustForConstraints(c)}this.el.setXY(c);this.el.show();this.hidden=false;this.focus();this.fireEvent("show",this)},focus:function(){if(!this.hidden){this.doFocus.defer(50,this)}},doFocus:function(){if(!this.hidden){this.focusEl.focus()}},hide:function(a){if(this.el&&this.isVisible()){this.fireEvent("beforehide",this);if(this.activeItem){this.activeItem.deactivate();this.activeItem=null}this.el.hide();this.hidden=true;this.fireEvent("hide",this)}if(a===true&&this.parentMenu){this.parentMenu.hide(true)}},add:function(){var c=arguments,b=c.length,f;for(var d=0;d<b;d++){var e=c[d];if(e.render){f=this.addItem(e)}else{if(typeof e=="string"){if(e=="separator"||e=="-"){f=this.addSeparator()}else{f=this.addText(e)}}else{if(e.tagName||e.el){f=this.addElement(e)}else{if(typeof e=="object"){Ext.applyIf(e,this.defaults);f=this.addMenuItem(e)}}}}}return f},getEl:function(){if(!this.el){this.render()}return this.el},addSeparator:function(){return this.addItem(new Ext.menu.Separator())},addElement:function(a){return this.addItem(new Ext.menu.BaseItem(a))},addItem:function(a){Ext.menu.Menu.superclass.add.call(this,a);if(this.rendered){this.doLayout()}return a},addMenuItem:function(a){if(!(a instanceof Ext.menu.Item)){if(typeof a.checked=="boolean"){a=new Ext.menu.CheckItem(a)}else{a=new Ext.menu.Item(a)}}return this.addItem(a)},addText:function(a){return this.addItem(new Ext.menu.TextItem(a))},insert:function(a,b){Ext.menu.Menu.superclass.insert.apply(this,arguments);if(this.rendered){this.doLayout()}return b},remove:function(a){Ext.menu.Menu.superclass.remove.call(this,a,true);if(this.rendered){this.doLayout()}},removeAll:function(){if(this.items){var a;while(a=this.items.first()){this.remove(a)}}},onDestroy:function(){Ext.menu.Menu.superclass.onDestroy.apply(this,arguments);Ext.menu.MenuMgr.unregister(this);if(this.keyNav){this.keyNav.disable()}if(this.ul){this.ul.removeAllListeners()}}});Ext.menu.MenuNav=function(a){Ext.menu.MenuNav.superclass.constructor.call(this,a.el);this.scope=this.menu=a};Ext.extend(Ext.menu.MenuNav,Ext.KeyNav,{doRelay:function(c,b){var a=c.getKey();if(!this.menu.activeItem&&c.isNavKeyPress()&&a!=c.SPACE&&a!=c.RETURN){this.menu.tryActivate(0,1);return false}return b.call(this.scope||this,c,this.menu)},up:function(b,a){if(!a.tryActivate(a.items.indexOf(a.activeItem)-1,-1)){a.tryActivate(a.items.length-1,-1)}},down:function(b,a){if(!a.tryActivate(a.items.indexOf(a.activeItem)+1,1)){a.tryActivate(0,1)}},right:function(b,a){if(a.activeItem){a.activeItem.expandMenu(true)}},left:function(b,a){a.hide();if(a.parentMenu&&a.parentMenu.activeItem){a.parentMenu.activeItem.activate()}},enter:function(b,a){if(a.activeItem){b.stopPropagation();a.activeItem.onClick(b);a.fireEvent("click",this,a.activeItem);return true}}});