You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.2 KiB
82 lines
2.2 KiB
/*
|
|
* jQuery dropdown: A simple dropdown plugin
|
|
*
|
|
* Inspired by Bootstrap: http://twitter.github.com/bootstrap/javascript.html#dropdowns
|
|
*
|
|
* Copyright 2011 Cory LaViska for A Beautiful Site, LLC. (http://abeautifulsite.net/)
|
|
*
|
|
* Dual licensed under the MIT or GPL Version 2 licenses
|
|
*
|
|
*/
|
|
if(jQuery) (function($) {
|
|
|
|
$.extend($.fn, {
|
|
dropdown: function(method, data) {
|
|
|
|
switch( method ) {
|
|
case 'hide':
|
|
hideDropdowns();
|
|
return $(this);
|
|
case 'attach':
|
|
return $(this).attr('data-dropdown', data);
|
|
case 'detach':
|
|
hideDropdowns();
|
|
return $(this).removeAttr('data-dropdown');
|
|
case 'disable':
|
|
return $(this).addClass('dropdown-disabled');
|
|
case 'enable':
|
|
hideDropdowns();
|
|
return $(this).removeClass('dropdown-disabled');
|
|
}
|
|
|
|
}
|
|
});
|
|
|
|
function showMenu(event) {
|
|
|
|
var trigger = $(this),
|
|
dropdown = $( $(this).attr('data-dropdown') ),
|
|
isOpen = trigger.hasClass('dropdown-open'),
|
|
rtl = $('html').hasClass('rtl'),
|
|
relative = trigger.offsetParent(),
|
|
offset = relative.offset();
|
|
if (relative.get(0) !== document.body)
|
|
offset.top -= relative.scrollTop();
|
|
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
|
|
hideDropdowns();
|
|
|
|
if( isOpen || trigger.hasClass('dropdown-disabled') ) return;
|
|
|
|
if (rtl && dropdown.hasClass('anchor-right'))
|
|
dropdown.removeClass('anchor-right');
|
|
|
|
dropdown.css({
|
|
left: -offset.left + (dropdown.hasClass('anchor-right') ?
|
|
trigger.offset().left - (dropdown.outerWidth() - trigger.outerWidth() - 4) : trigger.offset().left),
|
|
top: -offset.top + trigger.offset().top + trigger.outerHeight()
|
|
}).show();
|
|
trigger.addClass('dropdown-open');
|
|
}
|
|
|
|
function hideDropdowns(event) {
|
|
|
|
var targetGroup = event ? $(event.target).parents().addBack() : null;
|
|
if( targetGroup && targetGroup.is('.action-dropdown') && !targetGroup.is('a') ) return;
|
|
|
|
$('body')
|
|
.find('.action-dropdown').hide().end()
|
|
.find('[data-dropdown]').removeClass('dropdown-open');
|
|
}
|
|
|
|
$(function () {
|
|
$('body').on('click.dropdown', '[data-dropdown]', showMenu);
|
|
$('html').on('click.dropdown', hideDropdowns);
|
|
if(document.addEventListener) {
|
|
$(window).on('resize.dropdown', hideDropdowns);
|
|
}
|
|
});
|
|
|
|
})(jQuery);
|