: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
opts._currentType = type;
opts._currentNode = $this;
!cmd.keepContextmenu && close();
fm.exec(cmd.name, targets, opts);
.on('touchend', function(e) {
if (! menu.data('drag')) {
menu.data('submenuKeep', true);
.on('mouseenter mouseleave', function(e){
if (! menu.data('touching')) {
if (node.data('timer')) {
clearTimeout(node.data('timer'));
node.removeData('timer');
if (!jQuery(e.target).closest('.elfinder-contextmenu-sub', menu).length) {
if (e.type === 'mouseleave') {
if (! menu.data('submenuKeep')) {
node.data('timer', setTimeout(function() {
node.removeData('timer');
node.data('timer', setTimeout(function() {
node.removeData('timer');
}, nodes.find('div.elfinder-contextmenu-sub:visible').length? 250 : 0));
jQuery.each(cmd.variants, function(i, variant) {
var item = variant === '|' ? '<div class="elfinder-contextmenu-separator"></div>' :
jQuery('<div class="'+cmItem+' '+smItem+'"><span>'+variant[1]+'</span></div>').data('exec', variant[0]),
if (typeof variant[2] !== 'undefined') {
icon = jQuery('<span></span>').addClass('elfinder-button-icon elfinder-contextmenu-icon');
if (! /\//.test(variant[2])) {
icon.addClass('elfinder-button-icon-'+variant[2]);
icon.css(urlIcon(variant[2]));
item.prepend(icon).addClass(smItem+'-icon');
node = item(cmd.title, cmd.className? cmd.className : cmd.name, function() {
if (! menu.data('draged')) {
!cmd.keepContextmenu && close();
fm.exec(cmd.name, targets, {_userAction: true, _currentType: type, _currentNode: node});
if (cmd.extra && cmd.extra.node) {
jQuery('<span class="elfinder-button-icon elfinder-button-icon-'+(cmd.extra.icon || '')+' '+exIcon+'"></span>')
.append(cmd.extra.node).appendTo(node);
jQuery(cmd.extra.node).trigger('ready', {targets: targets});
node.children('span.elfinder-button-icon').addClass('elfinder-button-icon-' + cmd.extendsCmd);
menu.append('<div class="elfinder-contextmenu-separator"></div>');
if (cmd && typeof cmd.__disabled !== 'undefined') {
cmd._disabled = cmd.__disabled;
jQuery.each(cmd.linkedCmds, function(i, n) {
if (c = fm.getCommand(n)) {
c._disabled = c.__disabled;
nodes = menu.children('div.'+cmItem);
createFromRaw = function(raw) {
jQuery.each(raw, function(i, data) {
menu.append('<div class="elfinder-contextmenu-separator"></div>');
} else if (data.label && typeof data.callback == 'function') {
node = item(data.label, data.icon, function() {
if (! menu.data('draged')) {
}, data.options || null);
nodes = menu.children('div.'+cmItem);
fm.one('load', function() {
fm.bind('contextmenu', function(e) {
if (data.type && data.type !== 'files') {
cwd.trigger('unselectall');
if (data.type && data.targets) {
fm.trigger('contextmenucreate', data);
create(data.type, data.targets);
fm.trigger('contextmenucreatedone', data);
if (menu.children().length) {
prevNode = data.prevNode || null;
menu.data('prevNode', menu.prev());
css = {maxHeight: Math.min(fm.getUI().height(), jQuery(window).height()), overflowY: 'auto'};
menu.draggable('destroy').removeClass('ui-draggable');
open(data.x, data.y, css);
// call opened callback function
if (data.opened && typeof data.opened === 'function') {
.one('destroy', function() { menu.remove(); })
.bind('select', function(e){
(currentType === 'files' && (!e.data || e.data.selected.toString() !== currentTargets.toString())) && close();
pattern : fm.OS === 'mac' ? 'ctrl+m' : 'contextmenu shift+f10',
description : 'contextmenu',
jQuery(document).one('contextmenu.' + fm.namespace, function(e) {
elm = fm.cwdHash2Elm(sel[0]);
targets = [ fm.cwd().hash ];
pos = fm.getUI('workzone').offset();
if (! elm || ! elm.length) {
elm = fm.getUI('workzone');
pos.top += (elm.height() / 2);
pos.left += (elm.width() / 2);
fm.trigger('contextmenu', {