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.
134 lines (111 loc) • 2.55 kB
JavaScript
/*
* jQuery mmenu iconPanels addon
* mmenu.frebsite.nl
*
* Copyright (c) Fred Heusschen
*/
(function( $ ) {
var _PLUGIN_ = 'mmenu',
_ADDON_ = 'iconPanels';
$[ _PLUGIN_ ].addons[ _ADDON_ ] = {
// setup: fired once per menu
setup: function()
{
var that = this,
opts = this.opts[ _ADDON_ ],
conf = this.conf[ _ADDON_ ];
glbl = $[ _PLUGIN_ ].glbl;
// Extend shortcut options
if ( typeof opts == 'boolean' )
{
opts = {
add : opts
};
}
if ( typeof opts == 'number' )
{
opts = {
add : true,
visible : opts
};
}
if ( typeof opts != 'object' )
{
opts = {};
}
opts = this.opts[ _ADDON_ ] = $.extend( true, {}, $[ _PLUGIN_ ].defaults[ _ADDON_ ], opts );
opts.visible++;
// Add the iconbars
if ( opts.add )
{
this.$menu.addClass( _c.iconpanel );
var clsn = [];
for ( var i = 0; i <= opts.visible; i++ )
{
clsn.push( _c.iconpanel + '-' + i );
}
clsn = clsn.join( ' ' );
var update = function( $panel )
{
if ( $panel.hasClass( _c.vertical ) )
{
return;
}
that.$pnls
.children( '.' + _c.panel )
.removeClass( clsn )
.filter( '.' + _c.subopened )
.removeClass( _c.hidden )
.add( $panel )
.not( '.' + _c.vertical )
.slice( -opts.visible )
.each(
function( x )
{
$(this).addClass( _c.iconpanel + '-' + x );
}
);
};
this.bind( 'openPanel', update );
this.bind( 'init',
function( $panels )
{
update.call( that, that.$pnls.children( '.' + _c.current ) );
if ( opts.hideNavbars )
{
$panels.removeClass( _c.hasnavbar );
}
$panels
.not( '.' + _c.vertical )
.each(
function()
{
if ( !$(this).children( '.' + _c.subblocker ).length )
{
$(this).prepend( '<a href="#' + $(this).closest( '.' + _c.panel ).attr( 'id' ) + '" class="' + _c.subblocker + '" />' );
}
}
);
}
);
}
},
// add: fired once per page load
add: function()
{
_c = $[ _PLUGIN_ ]._c;
_d = $[ _PLUGIN_ ]._d;
_e = $[ _PLUGIN_ ]._e;
_c.add( 'iconpanel subblocker' );
},
// clickAnchor: prevents default behavior when clicking an anchor
clickAnchor: function( $a, inMenu ) {}
};
// Default options and configuration
$[ _PLUGIN_ ].defaults[ _ADDON_ ] = {
add : false,
visible : 3,
hideNavbars : false
};
var _c, _d, _e, glbl;
})( jQuery );