: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
* @class elFinder command "sort"
* @author Dmitry (dio) Levashov
elFinder.prototype.commands.sort = function() {
jQuery.each(fm.sortRules, function(name, value) {
var arr = (name === fm.sortType)? (fm.sortOrder === 'asc'? 'n' : 's') : '';
self.variants.push([name, (arr? '<span class="ui-icon ui-icon-arrowthick-1-'+arr+'"></span>' : '') + ' ' + fm.i18n('sort'+name)]);
(fm.sortStickFolders? '<span class="ui-icon ui-icon-check"></span>' : '') + ' ' + fm.i18n('sortFoldersFirst')
if (fm.ui.tree && fm.options.sortAlsoTreeview !== null) {
(fm.sortAlsoTreeview? '<span class="ui-icon ui-icon-check"></span>' : '') + ' ' + fm.i18n('sortAlsoTreeview')
updateContextmenu = function() {
var cm = fm.getUI('contextmenu'),
icon = cm.find('span.elfinder-button-icon-sort');
sub = icon.siblings('div.elfinder-contextmenu-sub');
sub.find('span.ui-icon').remove();
sub.children('div.elfinder-contextsubmenu-item').each(function() {
var tgt = jQuery(this).children('span'),
name = tgt.text().trim(),
if (name === (i18Name.stick || (i18Name.stick = fm.i18n('sortFoldersFirst')))) {
if (fm.sortStickFolders) {
tgt.prepend('<span class="ui-icon ui-icon-check"></span>');
} else if (name === (i18Name.tree || (i18Name.tree = fm.i18n('sortAlsoTreeview')))) {
if (fm.sortAlsoTreeview) {
tgt.prepend('<span class="ui-icon ui-icon-check"></span>');
} else if (name === (i18Name[fm.sortType] || (i18Name[fm.sortType] = fm.i18n('sort' + fm.sortType)))) {
arr = fm.sortOrder === 'asc'? 'n' : 's';
tgt.prepend('<span class="ui-icon ui-icon-arrowthick-1-'+arr+'"></span>');
this.options = {ui : 'sortbutton'};
this.keepContextmenu = true;
fm.bind('sortchange', setVar)
.bind('sorterupdate', function() {
fm.getUI().children('.elfinder-button-sort-menu').children('.elfinder-button-menu-item').each(function() {
tgt.toggle(!!(! rel || fm.sorters[rel]));
.bind('cwdrender', function() {
var cols = jQuery(fm.cwd).find('div.elfinder-cwd-wrapper-list table');
jQuery.each(fm.sortRules, function(name, value) {
var td = cols.find('thead tr td.elfinder-cwd-view-th-'+name);
var current = ( name == fm.sortType),
order : current ? fm.sortOrder == 'asc' ? 'desc' : 'asc' : fm.sortOrder
td.addClass('ui-state-active');
arr = fm.sortOrder == 'asc' ? 'n' : 's';
jQuery('<span class="ui-icon ui-icon-triangle-1-'+arr+'"></span>').appendTo(td);
jQuery(td).on('click', function(e){
if (! jQuery(this).data('dragging')) {
if (! fm.getUI('cwd').data('longtap')) {
fm.exec('sort', [], sort);
.on('mouseenter mouseleave', function(e) {
jQuery(this).toggleClass('ui-state-hover', e.type === 'mouseenter');
this.getstate = function() {
this.exec = function(hashes, cOpt) {
sortopt = jQuery.isPlainObject(cOpt)? cOpt : (function() {
sOpts.stick = !fm.sortStickFolders;
} else if (cOpt === 'tree') {
sOpts.tree = !fm.sortAlsoTreeview;
} else if (fm.sorters[cOpt]) {
if (fm.sortType === cOpt) {
sOpts.order = fm.sortOrder === 'asc'? 'desc' : 'asc';
stick : fm.sortStickFolders,
tree : fm.sortAlsoTreeview
return fm.lazy(function() {
fm.setSort(sort.type, sort.order, sort.stick, sort.tree);