123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /*
- * 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");
- }
- $(document.body).on("click" + "." + pluginName,"#"+$this[0].id+' li a', function(e) {
- if(!$(this).parent().has('ul')) {
- return false;
- }
- 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);
|