var silkMenu = xb.core.object.extend( silkNodeList, { factory: function( menuDOMNode ) { var domNode = $( menuDOMNode ).find( "> [data-simply-list]" )[ 0 ]; if ( typeof( domNode ) !== "undefined" ) { return new silkMenu( menuDOMNode, domNode ); } return null; }, ctor: function( menuDOMNode, domNode ) { var self = this; this.menuDOMNode = menuDOMNode; silkNodeList.prototype.ctor.call( this, domNode, "menu" ); this.childNodes = this.parseDOM().childNodes; silkMenu.list( this ).init(); $( this.domNode ).on( "click", function( evt ) { self.onClick( evt ); } ); this.mObserver = silkMutationObserver( this ); this.mObserver.start(); }, onClick: function( evt ) { if ( $( evt.target ).hasClass( "menu-item-pulldown" ) ) { $( evt.target ).parents( "[data-simply-list-item]" ).toggleClass( "open" ); } else { var href = evt.target.getAttribute( "href" ); if ( href !== null ) { if ( href == "" ) { $( evt.target ).parents( "[data-simply-list-item]" ).toggleClass( "open" ); evt.preventDefault(); } } } }, onDOMChange: function() { this.childNodes = this.parseDOM().childNodes; silkMenu.list( this ).init(); } } ); silkMenu.behaviour = xb.core.object.extend( { ctor: function( silkNode, domNode ) { this.silkNode = silkNode; this.domNode = ( typeof( domNode ) !== "undefined" ) ? domNode : silkNode.domNode; } } ); silkMenu.list = xb.core.object.extend( silkMenu.behaviour, { init: function( level ) { var self = this; var level = ( typeof( level ) !== "undefined" ) ? level : 1; this.silkNode.each( function() { silkMenu.listItem( this ).init( level ); } ); } } ); silkMenu.listItem = xb.core.object.extend( silkMenu.behaviour, { init: function( level ) { var self = this; var level = ( typeof( level ) !== "undefined" ) ? level : 1; var menuItem = $( this.domNode ); var menuList = this.silkNode.get( "menu-list" ); if ( menuList !== null ) { silkMenu.list( menuList ).init( level + 1 ); if ( menuList.childNodes.length ) { menuItem.addClass( "withChildren" ); } else { menuItem.removeClass( "withChildren" ); menuItem.removeClass( "open" ); } } } } ); var $silkMenu = []; $( document ).on( "ready", function() { $( ".silk-object.menu" ).each( function() { var menu = silkMenu( this ); if ( menu !== null ) { $silkMenu.push( menu ); } } ); } );