annis.visualizers.iframe.partitur.jquery.jbar.js Maven / Gradle / Ivy
/*
* jbar (for jQuery)
* version: 0.2.0 (07/02/2011)
* @requires jQuery v1.4 or later
* http://javan.github.com/jbar/
* http://github.com/javan/jbar
*
* Licensed under the MIT:
* http://www.opensource.org/licenses/mit-license.php
*
* Copyright 2010+ Javan Makhmali :: [email protected]
*
* Usage:
*
* jQuery(function(){
* jQuery('.jbar').jbar();
* });
* // Where .jbar is the class belonging to your menus.
*
*/
(function($) {
$.fn.jbar = function(settings) {
var config = {
cssClass: 'jbar',
downArrow: '▼',
upArrow: '▲',
showSubmenuEvent: 'click',
fixIEzindex: true
};
if (settings) {
$.extend(config, settings);
}
this.each(function(){
var menu = $(this);
menu.addClass(config.cssClass);
// To allow IE specific css
if ($.browser.msie) {
menu.addClass('jbar_browser_IE').addClass('jbar_browser_IE'+parseInt($.browser.version));
}
menu.find('> li').each(function(){
var li = $(this);
var submenu = li.find('ul');
var link = li.find('> a');
var hasSubmenu = (submenu.length != 0);
var hasLink = (link.length != 0);
var hasAnchorLink = (hasLink && link.attr('href').charAt(0) == '#');
if (hasLink) {
link.wrapInner('');
if (!hasSubmenu) {
link.addClass('has_no_down_arrow');
}
}
if (!hasSubmenu) {
return true;
}
submenu.wrap('');
li.find('div.submenu_container').prepend(''+config.upArrow+'');
submenu.show();
if (!hasLink) {
link = $('');
hasAnchorLink = true;
li.prepend(link);
}
link.addClass('has_down_arrow').append(' '+config.downArrow+'');
// If the the link is an anchor (#) then the whole thing becomes
// the trigger to open the sub menu.
if (hasAnchorLink) {
link.addClass('trigger');
// Otherwise the down arrow is the trigger and the link remains active.
} else {
link.addClass('has_trigger_down_arrow').find('.link_text').mouseover(function(){
$(this).addClass('hovered');
}).mouseleave(function(){
$(this).removeClass('hovered');
});
link.find('.down_arrow').addClass('trigger').mouseover(function(){
$(this).addClass('hovered');
}).mouseleave(function(){
$(this).removeClass('hovered');
});
}
li.find('.trigger').live(config.showSubmenuEvent, function(event){
event.preventDefault();
var submenuWidth = li.find('.submenu_container').outerWidth();
var downArrowPosition = li.find('.down_arrow').position().left + 2;
// The up arrow is positioned directly under the down arrow by default.
var upArrowPosition = downArrowPosition;
// If the down arrow is more to the right than the submenu,
// put the up arrow on the right side of the submenu.
if (downArrowPosition > submenuWidth) {
upArrowPosition = submenuWidth - 20;
}
// Position the up arrow.
li.find('span.up_arrow').css({ paddingLeft: upArrowPosition + 'px' });
// Position the submenu directly under the menu.
li.find('.submenu_container').css({ top: li.outerHeight() + 'px' }).show();
$(this).addClass('triggered').addClass('hovered');
li.mouseleave(function(){
li.find('.trigger').removeClass('triggered').removeClass('hovered');
li.find('.submenu_container').hide();
});
});
});
$(this).find('> li:first a:first').addClass('first');
$(this).find('> li:last a:first').addClass('last');
});
// IE 7 and down doesn't do z-index correctly.
if (config.fixIEzindex && $.browser.msie && $.browser.version < 8) {
var zIndex = 99999;
$('ul.jbar').each(function(){
$(this).wrap('');
zIndex--;
});
}
return this;
}
})(jQuery);