You can not 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
120 lines
3.9 KiB
/* |
|
* 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); |