You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			120 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
		
		
			
		
	
	
			120 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
| 
											11 years ago
										 | /* | ||
|  |  * metismenu - v1.1.3 | ||
|  |  * Easy menu jQuery plugin for Twitter Bootstrap 3 | ||
|  |  * https://github.com/onokumus/metisMenu
 | ||
|  |  * | ||
|  |  * Made by Osman Nuri Okumus | ||
|  |  * Under MIT License | ||
|  |  */ | ||
|  | ;(function($, window, document, undefined) { | ||
|  | 
 | ||
|  |     var pluginName = "metisMenu", | ||
|  |         defaults = { | ||
|  |             toggle: true, | ||
|  |             doubleTapToGo: false | ||
|  |         }; | ||
|  | 
 | ||
|  |     function Plugin(element, options) { | ||
|  |         this.element = $(element); | ||
|  |         this.settings = $.extend({}, defaults, options); | ||
|  |         this._defaults = defaults; | ||
|  |         this._name = pluginName; | ||
|  |         this.init(); | ||
|  |     } | ||
|  | 
 | ||
|  |     Plugin.prototype = { | ||
|  |         init: function() { | ||
|  | 
 | ||
|  |             var $this = this.element, | ||
|  |                 $toggle = this.settings.toggle, | ||
|  |                 obj = this; | ||
|  | 
 | ||
|  |             if (this.isIE() <= 9) { | ||
|  |                 $this.find("li.active").has("ul").children("ul").collapse("show"); | ||
|  |                 $this.find("li").not(".active").has("ul").children("ul").collapse("hide"); | ||
|  |             } else { | ||
|  |                 $this.find("li.active").has("ul").children("ul").addClass("collapse in"); | ||
|  |                 $this.find("li").not(".active").has("ul").children("ul").addClass("collapse"); | ||
|  |             } | ||
|  | 
 | ||
|  |             //add the "doubleTapToGo" class to active items if needed
 | ||
|  |             if (obj.settings.doubleTapToGo) { | ||
|  |                 $this.find("li.active").has("ul").children("a").addClass("doubleTapToGo"); | ||
|  |             } | ||
|  | 
 | ||
|  |             $this.find("li").has("ul").children("a").on("click" + "." + pluginName, function(e) { | ||
|  |                 e.preventDefault(); | ||
|  | 
 | ||
|  |                 //Do we need to enable the double tap
 | ||
|  |                 if (obj.settings.doubleTapToGo) { | ||
|  | 
 | ||
|  |                     //if we hit a second time on the link and the href is valid, navigate to that url
 | ||
|  |                     if (obj.doubleTapToGo($(this)) && $(this).attr("href") !== "#" && $(this).attr("href") !== "") { | ||
|  |                         e.stopPropagation(); | ||
|  |                         document.location = $(this).attr("href"); | ||
|  |                         return; | ||
|  |                     } | ||
|  |                 } | ||
|  | 
 | ||
|  |                 $(this).parent("li").toggleClass("active").children("ul").collapse("toggle"); | ||
|  | 
 | ||
|  |                 if ($toggle) { | ||
|  |                     $(this).parent("li").siblings().removeClass("active").children("ul.in").collapse("hide"); | ||
|  |                 } | ||
|  | 
 | ||
|  |             }); | ||
|  |         }, | ||
|  | 
 | ||
|  |         isIE: function() { //https://gist.github.com/padolsey/527683
 | ||
|  |             var undef, | ||
|  |                 v = 3, | ||
|  |                 div = document.createElement("div"), | ||
|  |                 all = div.getElementsByTagName("i"); | ||
|  | 
 | ||
|  |             while ( | ||
|  |                 div.innerHTML = "<!--[if gt IE " + (++v) + "]><i></i><![endif]-->", | ||
|  |                 all[0] | ||
|  |             ) { | ||
|  |                 return v > 4 ? v : undef; | ||
|  |             } | ||
|  |         }, | ||
|  | 
 | ||
|  |         //Enable the link on the second click.
 | ||
|  |         doubleTapToGo: function(elem) { | ||
|  |             var $this = this.element; | ||
|  | 
 | ||
|  |             //if the class "doubleTapToGo" exists, remove it and return
 | ||
|  |             if (elem.hasClass("doubleTapToGo")) { | ||
|  |                 elem.removeClass("doubleTapToGo"); | ||
|  |                 return true; | ||
|  |             } | ||
|  | 
 | ||
|  |             //does not exists, add a new class and return false
 | ||
|  |             if (elem.parent().children("ul").length) { | ||
|  |                  //first remove all other class
 | ||
|  |                 $this.find(".doubleTapToGo").removeClass("doubleTapToGo"); | ||
|  |                 //add the class on the current element
 | ||
|  |                 elem.addClass("doubleTapToGo"); | ||
|  |                 return false; | ||
|  |             } | ||
|  |         }, | ||
|  | 
 | ||
|  |         remove: function() { | ||
|  |             this.element.off("." + pluginName); | ||
|  |             this.element.removeData(pluginName); | ||
|  |         } | ||
|  | 
 | ||
|  |     }; | ||
|  | 
 | ||
|  |     $.fn[pluginName] = function(options) { | ||
|  |         this.each(function () { | ||
|  |             var el = $(this); | ||
|  |             if (el.data(pluginName)) { | ||
|  |                 el.data(pluginName).remove(); | ||
|  |             } | ||
|  |             el.data(pluginName, new Plugin(this, options)); | ||
|  |         }); | ||
|  |         return this; | ||
|  |     }; | ||
|  | 
 | ||
|  | })(jQuery, window, document); |