/** * 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){var Modernizr=window.Modernizr,$body=$("body");$.DLMenu=function(options,element){this.$el=$(element);this._init(options)};$.DLMenu.defaults={animationClasses:{classin:"dl-animate-in-1",classout:"dl-animate-out-1"},onLevelClick:function(el,name){return false},onLinkClick:function(el,ev){return false}};$.DLMenu.prototype={_init:function(options){this.options=$.extend(true,{},$.DLMenu.defaults,options);this._config();var animEndEventNames={"WebkitAnimation":"webkitAnimationEnd", "OAnimation":"oAnimationEnd","msAnimation":"MSAnimationEnd","animation":"animationend"},transEndEventNames={"WebkitTransition":"webkitTransitionEnd","MozTransition":"transitionend","OTransition":"oTransitionEnd","msTransition":"MSTransitionEnd","transition":"transitionend"};this.animEndEventName=animEndEventNames[Modernizr.prefixed("animation")]+".dlmenu";this.transEndEventName=transEndEventNames[Modernizr.prefixed("transition")]+".dlmenu",this.supportAnimations=Modernizr.cssanimations,this.supportTransitions= Modernizr.csstransitions;this._initEvents()},_config:function(){this.open=false;this.$trigger=this.$el.children(".dl-trigger");this.$menu=this.$el.children("ul.dl-menu");this.$menuitems=this.$menu.find("li:not(.dl-back)");this.$el.find("ul.dl-submenu").prepend('
  • back
  • ');this.$back=this.$menu.find("li.dl-back")},_initEvents:function(){var self=this;this.$trigger.on("click.dlmenu",function(){if(self.open)self._closeMenu();else self._openMenu();return false});this.$menuitems.on("click.dlmenu", function(event){event.stopPropagation();var $item=$(this),$submenu=$item.children("ul.dl-submenu");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");$flyin.remove()};setTimeout(function(){$flyin.addClass(self.options.animationClasses.classin); self.$menu.addClass(self.options.animationClasses.classout);if(self.supportAnimations)self.$menu.on(self.animEndEventName,onAnimationEndFn);else onAnimationEndFn.call();self.options.onLevelClick($item,$item.children("a:first").text())});return false}else self.options.onLinkClick($item,event)});this.$back.on("click.dlmenu",function(event){var $this=$(this),$submenu=$this.parents("ul.dl-submenu:first"),$item=$submenu.parent(),$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);if(self.supportAnimations)self.$menu.on(self.animEndEventName,onAnimationEndFn);else onAnimationEndFn.call();$item.removeClass("dl-subviewopen");var $subview=$this.parents(".dl-subview:first");if($subview.is("li"))$subview.addClass("dl-subviewopen");$subview.removeClass("dl-subview")});return false})},closeMenu:function(){if(this.open)this._closeMenu()}, _closeMenu:function(){var self=this,onTransitionEndFn=function(){self.$menu.off(self.transEndEventName);self._resetMenu()};this.$menu.removeClass("dl-menuopen");this.$menu.addClass("dl-menu-toggle");this.$trigger.removeClass("dl-active");if(this.supportTransitions)this.$menu.on(this.transEndEventName,onTransitionEndFn);else onTransitionEndFn.call();this.open=false},openMenu:function(){if(!this.open)this._openMenu()},_openMenu:function(){var self=this;$body.off("click").on("click.dlmenu",function(){self._closeMenu()}); this.$menu.addClass("dl-menuopen dl-menu-toggle").on(this.transEndEventName,function(){$(this).removeClass("dl-menu-toggle")});this.$trigger.addClass("dl-active");this.open=true},_resetMenu:function(){this.$menu.removeClass("dl-subview");this.$menuitems.removeClass("dl-subview dl-subviewopen")}};var logError=function(message){if(window.console)window.console.error(message)};$.fn.dlmenu=function(options){if(typeof options==="string"){var args=Array.prototype.slice.call(arguments,1);this.each(function(){var instance= $.data(this,"dlmenu");if(!instance){logError("cannot call methods on dlmenu prior to initialization; "+"attempted to call method '"+options+"'");return}if(!$.isFunction(instance[options])||options.charAt(0)==="_"){logError("no such method '"+options+"' for dlmenu instance");return}instance[options].apply(instance,args)})}else this.each(function(){var instance=$.data(this,"dlmenu");if(instance)instance._init();else instance=$.data(this,"dlmenu",new $.DLMenu(options,this))});return this}})(jQuery,window);