: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
* @class elFinder toolbar button widget.
* If command has variants - create menu
* @author Dmitry (dio) Levashov
jQuery.fn.elfinderbutton = function(cmd) {
return this.each(function() {
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',
text = jQuery('<span class="elfinder-button-text">'+cmd.title+'</span>'),
prvCname = cmd.className? cmd.className : cmd.name,
button = jQuery(this).addClass('ui-state-default elfinder-button tool-op-'+prvCname)
.attr('title', cmd.title)
.append('<span class="elfinder-button-icon elfinder-button-icon-' + prvCname + '"></span>', text)
.on('mouseenter mouseleave', function(e) { !button.hasClass(disabled) && button[e.type == 'mouseleave' ? 'removeClass' : 'addClass'](hover);})
.on('click', function(e) {
if (!button.hasClass(disabled)) {
if (menu && cmd.variants.length >= 1) {
menu.is(':hidden') && fm.getUI().click();
menu.css(getMenuOffset()).slideToggle({
fm[menu.is(':visible')? 'toFront' : 'toHide'](menu);
fm.exec(cmd.name, getSelected(), {_userAction: true, _currentType: 'toolbar', _currentNode: button });
getMenuOffset = function() {
baseOffset = fmNode.offset(),
buttonOffset = button.offset();
top : buttonOffset.top - baseOffset.top,
left : buttonOffset.left - baseOffset.left,
maxHeight : fmNode.height() - 40
getSelected = function() {
// set self button object to cmd object
// if command has variants create menu
if (Array.isArray(cmd.variants)) {
button.addClass('elfinder-menubutton');
menu = jQuery('<div class="ui-front ui-widget ui-widget-content elfinder-button-menu elfinder-button-' + prvCname + '-menu ui-corner-all"></div>')
.on('mouseenter mouseleave', '.'+item, function() { jQuery(this).toggleClass(hover); })
.on('click', '.'+item, function(e) {
var opts = jQuery(this).data('value');
button.removeClass(hover);
if (typeof opts === 'undefined') {
if (typeof opts === 'object') {
fm.exec(cmd.name, getSelected(), opts);
fm.bind('disable select', hideMenu).getUI().on('click', hideMenu);
jQuery.each(cmd.variants, function(i, variant) {
menu.append(jQuery('<div class="'+item+'">'+variant[1]+'</div>').data('value', variant[0]).addClass(variant[0] == cmd.value ? selected : ''));
tm && cancelAnimationFrame(tm);
tm = requestAnimationFrame(function() {
button.removeClass(active+' '+hover).addClass(disabled);
button.removeClass(disabled);
button[cmd.active() ? 'addClass' : 'removeClass'](active);
if (cmd.syncTitleOnChange) {
cName = cmd.className? cmd.className : cmd.name;
if (prvCname !== cName) {
button.children('.elfinder-button-icon').removeClass('elfinder-button-icon-' + prvCname).addClass('elfinder-button-icon-' + cName);
menu.removeClass('elfinder-button-' + prvCname + '-menu').addClass('elfinder-button-' + cName + '-menu');
button.attr('title', cmd.title);