jquery-mobile-menu-plugin
Version:
The best jQuery plugin for app look-alike on- and off-canvas menus with sliding submenus for your website and webapp.
7 lines • 2.06 kB
JavaScript
/*
* jQuery mmenu columns addon
* mmenu.frebsite.nl
*
* Copyright (c) Fred Heusschen
*/
!function(s){var i="mmenu",e="columns";s[i].addons[e]={setup:function(){var a=this.opts[e];this.conf[e];if(l=s[i].glbl,"boolean"==typeof a&&(a={add:a}),"number"==typeof a&&(a={add:!0,visible:a}),"object"!=typeof a&&(a={}),"number"==typeof a.visible&&(a.visible={min:a.visible,max:a.visible}),a=this.opts[e]=s.extend(!0,{},s[i].defaults[e],a),a.add){a.visible.min=Math.max(1,Math.min(6,a.visible.min)),a.visible.max=Math.max(a.visible.min,Math.min(6,a.visible.max)),this.$menu.addClass(n.columns);for(var t=this.opts.offCanvas?this.$menu.add(l.$html):this.$menu,o=[],d=0;d<=a.visible.max;d++)o.push(n.columns+"-"+d);o=o.join(" ");var h=function(s){v.call(this,this.$pnls.children("."+n.current)),a.hideNavbars&&s.removeClass(n.hasnavbar)},m=function(){var s=this.$pnls.children("."+n.panel).filter("."+n.opened).length;s=Math.min(a.visible.max,Math.max(a.visible.min,s)),t.removeClass(o).addClass(n.columns+"-"+s)},r=function(){this.opts.offCanvas&&l.$html.removeClass(o)},v=function(i){this.$pnls.children("."+n.panel).removeClass(o).filter("."+n.subopened).removeClass(n.hidden).add(i).slice(-a.visible.max).each(function(i){s(this).addClass(n.columns+"-"+i)})};this.bind("open",m),this.bind("close",r),this.bind("init",h),this.bind("openPanel",v),this.bind("openingPanel",m),this.bind("openedPanel",m),this.opts.offCanvas||m.call(this)}},add:function(){n=s[i]._c,a=s[i]._d,t=s[i]._e,n.add("columns")},clickAnchor:function(i,a){if(!this.opts[e].add)return!1;if(a){var t=i.attr("href");if(t.length>1&&"#"==t.slice(0,1))try{var l=s(t,this.$menu);if(l.is("."+n.panel))for(var o=parseInt(i.closest("."+n.panel).attr("class").split(n.columns+"-")[1].split(" ")[0],10)+1;o!==!1;){var d=this.$pnls.children("."+n.columns+"-"+o);if(!d.length){o=!1;break}o++,d.removeClass(n.subopened).removeClass(n.opened).removeClass(n.current).removeClass(n.highest).addClass(n.hidden)}}catch(h){}}}},s[i].defaults[e]={add:!1,visible:{min:1,max:3},hideNavbars:!1};var n,a,t,l}(jQuery);