mirror of
https://github.com/Studio-42/elFinder
synced 2026-06-08 12:37:09 +00:00
77 lines
2.3 KiB
JavaScript
77 lines
2.3 KiB
JavaScript
"use strict"
|
|
/**
|
|
* @class elFinder toolbar button widget.
|
|
* If command has variants - create menu
|
|
*
|
|
* @author Dmitry (dio) Levashov
|
|
**/
|
|
$.fn.elfinderbutton = function(cmd) {
|
|
return this.each(function() {
|
|
|
|
var c = 'class',
|
|
fm = cmd.fm,
|
|
disabled = fm.res(c, 'disabled'),
|
|
active = fm.res(c, 'active'),
|
|
hover = fm.res(c, 'hover'),
|
|
item = 'elfinder-button-menu-item',
|
|
selected = 'elfinder-button-menu-item-selected',
|
|
menu,
|
|
button = $(this).addClass('ui-state-default elfinder-button')
|
|
.attr('title', cmd.title)
|
|
.append('<span class="elfinder-button-icon elfinder-button-icon-'+cmd.name+'"/>')
|
|
.hover(function(e) { !button.is('.'+disabled) && button[e.type == 'mouseleave' ? 'removeClass' : 'addClass'](hover) /**button.toggleClass(hover);*/ })
|
|
.click(function(e) {
|
|
if (!button.is('.'+disabled)) {
|
|
if (menu && cmd.variants.length > 1) {
|
|
// close other menus
|
|
menu.is(':hidden') && cmd.fm.getUI().click();
|
|
e.stopPropagation();
|
|
menu.slideToggle(100);
|
|
} else {
|
|
cmd.exec();
|
|
}
|
|
|
|
}
|
|
}),
|
|
hideMenu = function() {
|
|
menu.hide();
|
|
};
|
|
|
|
// if command has variants create menu
|
|
if ($.isArray(cmd.variants)) {
|
|
button.addClass('elfinder-menubutton');
|
|
|
|
menu = $('<div class="ui-widget ui-widget-content elfinder-button-menu ui-corner-all"/>')
|
|
.hide()
|
|
.appendTo(button)
|
|
.zIndex(12+button.zIndex())
|
|
.delegate('.'+item, 'hover', function() { $(this).toggleClass(hover) })
|
|
.delegate('.'+item, 'click', function(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
button.removeClass(hover);
|
|
cmd.exec(cmd.fm.selected(), $(this).data('value'));
|
|
});
|
|
|
|
cmd.fm.bind('disable select', hideMenu).getUI().click(hideMenu);
|
|
|
|
cmd.change(function() {
|
|
menu.html('');
|
|
$.each(cmd.variants, function(i, variant) {
|
|
menu.append($('<div class="'+item+'">'+variant[1]+'</div>').data('value', variant[0]).addClass(variant[0] == cmd.value ? selected : ''));
|
|
});
|
|
});
|
|
}
|
|
|
|
cmd.change(function() {
|
|
if (cmd.disabled()) {
|
|
button.removeClass(active+' '+hover).addClass(disabled);
|
|
} else {
|
|
button.removeClass(disabled);
|
|
button[cmd.active() ? 'addClass' : 'removeClass'](active);
|
|
}
|
|
})
|
|
.change();
|
|
});
|
|
}
|