/** * Modified for Radium Megamenu * by Franklin M Gitonga * http://radiumthemes.com * * jquery.dlmenu.js v1.0.1 * http://www.codrops.com * * Licensed under the MIT license. * http://www.opensource.org/licenses/mit-license.php * * Copyright 2013, Codrops * http://www.codrops.com */ ( function( $, window, undefined ) { 'use strict'; // global var Modernizr = window.Modernizr, $body = $( 'body' ); $.DLMenu = function( options, element ) { //initialize once if ( ! this.init ) { this.$el = $( element ); this._init( options ); } }; // the options $.DLMenu.defaults = { overlay: false, // classes for the animation effects animationClasses: { classin: 'dl-animate-in-1', // 1-5 classout: 'dl-animate-out-1' // 1-5 }, // callback: click a link that has a sub menu // el is the link element (li); name is the level name onLevelClick: function( el, name ) { return false; }, // callback: click a link that does not have a sub menu // el is the link element (li); ev is the event obj onLinkClick: function( el, ev ) { return false; } }; $.DLMenu.prototype = { _init: function( options ) { // options this.options = $.extend( true, {}, $.DLMenu.defaults, options ); var animEndEventNames = { 'WebkitAnimation': 'webkitAnimationEnd', 'OAnimation': 'oAnimationEnd', 'msAnimation': 'MSAnimationEnd', 'animation': 'animationend' }, transEndEventNames = { 'WebkitTransition': 'webkitTransitionEnd', 'MozTransition': 'transitionend', 'OTransition': 'oTransitionEnd', 'msTransition': 'MSTransitionEnd', 'transition': 'transitionend' }; // animation end event name this.animEndEventName = 'animationend.dlmenu'; // transition end event name this.transEndEventName = 'transitionend.dlmenu'; // cache some elements and initialize some variables this._config(); this._initEvents(); }, _config: function() { this.$trigger = this.$el.children( '.menu-trigger' ); this.$menu = this.$el.find( '.radium_mega' ); this.$menuitems = this.$menu.find( 'li:not(.dl-back)' ); // add elements if ( typeof this.$back === 'undefined' ) { this.$el.find( 'a' ).siblings( 'ul.sub-menu' ).prepend( '
  • back
  • ' ); this.$el.find( 'a' ).siblings( 'div.radium-mega-div' ).find( 'ul.sub-menu:first' ).prepend( '
  • back
  • ' ); } this.$back = this.$menu.find( '.dl-back' ); }, _initEvents: function() { var self = this; this.$trigger.toggle( function() { self.open = false; self._openMenu(); }, function() { self._closeMenu(); }); this.$menuitems.on( 'click.dlmenu', function( event ) { event.stopPropagation(); var $item = $( this ), $submenu = $item.find( 'ul.sub-menu' ); $item.find( 'div>ul>li>ul' ).removeClass( 'sub-menu' ); $item.find( 'div>ul>li>ul>li ul' ).addClass( 'radium-mega-sub-menu' ); if ( $submenu.length > 0 ) { var $flyin = $submenu.clone().css( 'opacity', 0 ).insertAfter( self.$menu ), onAnimationEndFn = function() { self.$menu.off( self.animEndEventName ).removeClass( self.options.animationClasses.classout ).addClass( 'dl-subview' ); $item.addClass( 'dl-subviewopen' ).parents( '.dl-subviewopen:first' ).removeClass( 'dl-subviewopen' ).addClass( 'dl-subview' ); if ( $item.parent().parent().hasClass( 'radium_mega_menu_columns' ) ) { $item.parent().parent().addClass( 'dl-subview' ); } $flyin.remove(); }; setTimeout( function() { $flyin.addClass( self.options.animationClasses.classin ); self.$menu.addClass( self.options.animationClasses.classout ); self.$menu.on( self.animEndEventName, onAnimationEndFn ); self.options.onLevelClick( $item, $item.children( 'a:first' ).text() ); }); if ( self.$el.find( 'ul.sub-menu' ).siblings( 'a' ).find( '.sub-indicator' ).length !== 0 ) { self.$el.find( 'ul.sub-menu' ).siblings( 'a' ).append( '' ); } event.preventDefault(); } else { self.options.onLinkClick( $item, event ); } }); this.$back.on( 'click.dlmenu', function( event ) { var $this = $( this ), $submenu = $this.parents( 'ul.sub-menu:first' ), $item = $submenu.parent(); if ( $item.hasClass( 'radium-mega-div' ) ) { $item = $submenu.parent().parent(); } var $flyin = $submenu.clone().insertAfter( self.$menu ); var onAnimationEndFn = function() { self.$menu.off( self.animEndEventName ).removeClass( self.options.animationClasses.classin ); $flyin.remove(); }; setTimeout( function() { $flyin.addClass( self.options.animationClasses.classout ); self.$menu.addClass( self.options.animationClasses.classin ); self.$menu.on( self.animEndEventName, onAnimationEndFn ); $item.removeClass( 'dl-subviewopen' ); var $subview = $this.parents( '.dl-subview:first' ); if ( $subview.is( 'li' ) ) { $subview.addClass( 'dl-subviewopen' ); } $subview.removeClass( 'dl-subview' ); if ( $item.parent().parent().hasClass( 'radium_mega_menu_columns' ) ) { $item.parent().parent().removeClass( 'dl-subviewopen' ).parent().parent().parent().removeClass( 'dl-subview' ).addClass( 'dl-subviewopen' ); } }); return false; }); // listen for destroyed, call teardown this.$el.on( 'destroyed.dlmenu', $.proxy( this.teardown, this ) ); this.init = true; }, closeMenu: function() { if ( this.open = true ) { this._closeMenu(); } }, _closeMenu: function() { var self = this, onTransitionEndFn = function() { self.$menu.off( self.transEndEventName ); self._resetMenu(); }; self.$menu.removeClass( 'dl-menuopen' ); self.$menu.addClass( 'dl-menu-toggle' ); self.$trigger.removeClass( 'dl-active' ); if ( self.supportTransitions ) { self.$menu.on( self.transEndEventName, onTransitionEndFn ); } else { onTransitionEndFn.call(); } //remove overlay $( '#menu-overlay' ).remove(); self.open = false; }, openMenu: function() { if ( ! this.open ) { this._openMenu(); } }, _openMenu: function() { var self = this; // clicking somewhere else makes the menu close $body.off( 'click' ).on( 'click.dlmenu', function() { self._closeMenu() ; }); self.$menu.addClass( 'dl-menuopen dl-menu-toggle' ).on( self.transEndEventName, function() { $( this ).removeClass( 'dl-menu-toggle' ); }); self.$trigger.addClass( 'dl-active' ); //create overlay if ( self.options.overlay ) { $( 'body' ).append( '