Files
iTop/js/jquery.popupmenu.js

70 lines
1.9 KiB
JavaScript

/*
* Simple popup menu 1.0 (2010-05-15)
*
* Copyright (c) 2010 Combodo SARL (www.combodo.com)
* Licenced under the GPL licence.
*
* http://www.combodo.com/
*
* Built upon jQuery jQuery 1.2.3a (http://jquery.com)
* Requires the (modified) jQuery positionBy plugin by Jonathan Sharp (http://jdsharp.us)
*/
jQuery.fn.popupmenu = function ()
{
var popupmenu = null;
return this.each(function()
{
$(this).bind('click.popup_menu', function (evt)
{
var previous_popup = popupmenu;
var bMenuClosed = false;
popupmenu = $(this).find('ul');
if ( previous_popup != null)
{
// The user clicked while a menu is open, close the currently opened menu
previous_popup.css('display', 'none');
}
if ( (previous_popup == null) || (previous_popup.get(0) != popupmenu.get(0))) // Comparing the DOM objects
{
// The user clicked in a different menu, let's open it
popupmenu.positionBy({ target: $(this),
targetPos: 4,
elementPos: 0,
hideAfterPosition: true
});
// In links containing a hash, replace what's after the hash by the current hash
// In order to navigate to the same tab as the current one when editing an object
currentHash = '';
aMatches = /#(.*)$/.exec(window.location.href);
if (aMatches != null)
{
currentHash = aMatches[1];
popupmenu.find('a').each( function() {
if ( /#(.*)$/.test(this.href))
{
this.href = this.href.replace(/#(.*)$/, '#'+currentHash);
}
});
}
popupmenu.css('display', 'block');
}
else
{
// The user clicked in the opened menu, it is closed now
popupmenu = null;
}
evt.stopPropagation();
});
$(document).bind('click.popup_menu', function(evt)
{
if (popupmenu)
{
// The user clicked in the document's body, let's close the menu
popupmenu.css('display', 'none');
popupmenu = null;
}
});
});
};