LDAPAccountManager/lam/templates/lib/130_jquery-dropmenu-1.1.3.js

186 lines
3.7 KiB
JavaScript
Raw Normal View History

2010-12-03 21:06:08 +00:00
/*
* jQuery dropmenu 1.1.3
* www.frebsite.nl
* Copyright (c) 2010 Fred Heusschen
* Licensed under the MIT license.
* http://www.opensource.org/licenses/mit-license.php
*/
(function($) {
$.fn.dropmenu = function(options) {
return this.each(function() {
var opts = $.extend({}, $.fn.dropmenu.defaults, options),
$menu = $(this),
$topl = $menu.find('> li'),
menuX = $menu.offset().left;
if (opts.maxWidth == 0) {
opts.maxWidth = $('body').width() - menuX;
}
// UL itself and all LI's
$menu
.css({
display : 'block',
listStyle : 'none'
})
.find("li")
.css({
display : 'block',
listStyle : 'none',
position : 'relative',
margin : 0,
padding : 0
});
var css = {
display : 'block',
outline : 'none'
};
if (opts.nbsp) css['whiteSpace'] = 'nowrap';
// all A's and SPANs
$menu
.find('li > a, li > span')
.css(css);
// top-level LI's and top level A's and SPANs
$topl
.css({
float : 'right'
})
.find('> a, > span')
.addClass('toplevel')
.css({
float : 'right'
});
// all sub-ULs
$menu
.find('ul')
.css({
display : 'none',
position : 'absolute',
margin : 0,
padding : 0
});
// first sub-UL and second, third, etc. sub-ULs
$topl
.find('> ul')
.css({
left : 0,
top : $topl.outerHeight()
})
.find('li > a, li > span')
.addClass('sublevel')
.parent()
.find('ul')
.css({
top : 0
}).data('subsub', true);
$topl
$menu.find('a').click(function() {
$('ul', $menu).hide();
$('a, span', $menu).removeClass('hover');
});
$menu.find('li').hover(
// showing submenu
function() {
var listit = this,
subnav = $.fn.dropmenu.getSubnav(listit),
subcss = { zIndex: $.fn.dropmenu.zIndex++ };
$(listit).find('> a, > span').addClass('hover');
if (!subnav) return;
if ($(subnav).is(":animated")) return;
if ($.data(subnav, 'subsub')) {
var distance = $(listit).outerWidth(),
itemWidth = $(listit).offset().left + distance - menuX,
2010-12-03 21:15:52 +00:00
position = "right";
2010-12-03 21:06:08 +00:00
subcss[position] = distance;
}
$(subnav).css(subcss);
$.data(subnav, 'stayOpen', true);
switch (opts.effect) {
case 'slide':
$(subnav).slideDown(opts.speed);
break;
case 'fade':
$(subnav).fadeIn(opts.speed);
break;
default:
$(subnav).show();
break;
}
// hiding submenu
}, function() {
var listit = this,
subnav = $.fn.dropmenu.getSubnav(listit);
if (!subnav) {
$(listit).find('> a, > span').removeClass('hover');
return;
}
$.data(subnav, 'stayOpen', false);
setTimeout(function() {
if ($.data(subnav, 'stayOpen')) return;
$(listit).find('> a, > span').removeClass('hover');
$('ul', subnav).hide();
switch (opts.effect) {
case 'slide':
$(subnav).slideUp(opts.speed);
break;
case 'fade':
$(subnav).fadeOut(opts.speed);
break;
default:
$(subnav).hide();
break;
}
}, opts.timeout);
}
);
});
};
$.fn.dropmenu.getSubnav = function(ele) {
if (ele.nodeName.toLowerCase() == 'li') {
var subnav = $('> ul', ele);
return subnav.length ? subnav[0] : null;
} else {
return ele;
}
}
$.fn.dropmenu.zIndex = 1000;
$.fn.dropmenu.defaults = {
effect : 'none', // 'slide', 'fade', or 'none'
speed : 'normal', // 'normal', 'fast', 'slow', 100, 1000, etc
timeout : 250,
nbsp : false,
maxWidth : 0
};
})(jQuery);