120 lines
3.9 KiB
JavaScript
120 lines
3.9 KiB
JavaScript
|
/*
|
||
|
* metismenu - v1.1.1
|
||
|
* 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);
|