Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/wp-conte.../plugins/wp-file-.../lib/js/ui
File: tree.js
/**
[0] Fix | Delete
* @class elFinder folders tree
[1] Fix | Delete
*
[2] Fix | Delete
* @author Dmitry (dio) Levashov
[3] Fix | Delete
**/
[4] Fix | Delete
jQuery.fn.elfindertree = function(fm, opts) {
[5] Fix | Delete
"use strict";
[6] Fix | Delete
var treeclass = fm.res('class', 'tree');
[7] Fix | Delete
[8] Fix | Delete
this.not('.'+treeclass).each(function() {
[9] Fix | Delete
[10] Fix | Delete
var c = 'class', mobile = fm.UA.Mobile,
[11] Fix | Delete
[12] Fix | Delete
/**
[13] Fix | Delete
* Root directory class name
[14] Fix | Delete
*
[15] Fix | Delete
* @type String
[16] Fix | Delete
*/
[17] Fix | Delete
root = fm.res(c, 'treeroot'),
[18] Fix | Delete
[19] Fix | Delete
/**
[20] Fix | Delete
* Open root dir if not opened yet
[21] Fix | Delete
*
[22] Fix | Delete
* @type Boolean
[23] Fix | Delete
*/
[24] Fix | Delete
openRoot = opts.openRootOnLoad,
[25] Fix | Delete
[26] Fix | Delete
/**
[27] Fix | Delete
* Open current work dir if not opened yet
[28] Fix | Delete
*
[29] Fix | Delete
* @type Boolean
[30] Fix | Delete
*/
[31] Fix | Delete
openCwd = opts.openCwdOnOpen,
[32] Fix | Delete
[33] Fix | Delete
[34] Fix | Delete
/**
[35] Fix | Delete
* Auto loading current directory parents and do expand their node
[36] Fix | Delete
*
[37] Fix | Delete
* @type Boolean
[38] Fix | Delete
*/
[39] Fix | Delete
syncTree = openCwd || opts.syncTree,
[40] Fix | Delete
[41] Fix | Delete
/**
[42] Fix | Delete
* Subtree class name
[43] Fix | Delete
*
[44] Fix | Delete
* @type String
[45] Fix | Delete
*/
[46] Fix | Delete
subtree = fm.res(c, 'navsubtree'),
[47] Fix | Delete
[48] Fix | Delete
/**
[49] Fix | Delete
* Directory class name
[50] Fix | Delete
*
[51] Fix | Delete
* @type String
[52] Fix | Delete
*/
[53] Fix | Delete
navdir = fm.res(c, 'treedir'),
[54] Fix | Delete
[55] Fix | Delete
/**
[56] Fix | Delete
* Directory CSS selector
[57] Fix | Delete
*
[58] Fix | Delete
* @type String
[59] Fix | Delete
*/
[60] Fix | Delete
selNavdir = 'span.' + navdir,
[61] Fix | Delete
[62] Fix | Delete
/**
[63] Fix | Delete
* Collapsed arrow class name
[64] Fix | Delete
*
[65] Fix | Delete
* @type String
[66] Fix | Delete
*/
[67] Fix | Delete
collapsed = fm.res(c, 'navcollapse'),
[68] Fix | Delete
[69] Fix | Delete
/**
[70] Fix | Delete
* Expanded arrow class name
[71] Fix | Delete
*
[72] Fix | Delete
* @type String
[73] Fix | Delete
*/
[74] Fix | Delete
expanded = fm.res(c, 'navexpand'),
[75] Fix | Delete
[76] Fix | Delete
/**
[77] Fix | Delete
* Class name to mark arrow for directory with already loaded children
[78] Fix | Delete
*
[79] Fix | Delete
* @type String
[80] Fix | Delete
*/
[81] Fix | Delete
loaded = 'elfinder-subtree-loaded',
[82] Fix | Delete
[83] Fix | Delete
/**
[84] Fix | Delete
* Class name to mark need subdirs request
[85] Fix | Delete
*
[86] Fix | Delete
* @type String
[87] Fix | Delete
*/
[88] Fix | Delete
chksubdir = 'elfinder-subtree-chksubdir',
[89] Fix | Delete
[90] Fix | Delete
/**
[91] Fix | Delete
* Arraw class name
[92] Fix | Delete
*
[93] Fix | Delete
* @type String
[94] Fix | Delete
*/
[95] Fix | Delete
arrow = fm.res(c, 'navarrow'),
[96] Fix | Delete
[97] Fix | Delete
/**
[98] Fix | Delete
* Current directory class name
[99] Fix | Delete
*
[100] Fix | Delete
* @type String
[101] Fix | Delete
*/
[102] Fix | Delete
active = fm.res(c, 'active'),
[103] Fix | Delete
[104] Fix | Delete
/**
[105] Fix | Delete
* Droppable dirs dropover class
[106] Fix | Delete
*
[107] Fix | Delete
* @type String
[108] Fix | Delete
*/
[109] Fix | Delete
dropover = fm.res(c, 'adroppable'),
[110] Fix | Delete
[111] Fix | Delete
/**
[112] Fix | Delete
* Hover class name
[113] Fix | Delete
*
[114] Fix | Delete
* @type String
[115] Fix | Delete
*/
[116] Fix | Delete
hover = fm.res(c, 'hover'),
[117] Fix | Delete
[118] Fix | Delete
/**
[119] Fix | Delete
* Disabled dir class name
[120] Fix | Delete
*
[121] Fix | Delete
* @type String
[122] Fix | Delete
*/
[123] Fix | Delete
disabled = fm.res(c, 'disabled'),
[124] Fix | Delete
[125] Fix | Delete
/**
[126] Fix | Delete
* Draggable dir class name
[127] Fix | Delete
*
[128] Fix | Delete
* @type String
[129] Fix | Delete
*/
[130] Fix | Delete
draggable = fm.res(c, 'draggable'),
[131] Fix | Delete
[132] Fix | Delete
/**
[133] Fix | Delete
* Droppable dir class name
[134] Fix | Delete
*
[135] Fix | Delete
* @type String
[136] Fix | Delete
*/
[137] Fix | Delete
droppable = fm.res(c, 'droppable'),
[138] Fix | Delete
[139] Fix | Delete
/**
[140] Fix | Delete
* root wrapper class
[141] Fix | Delete
*
[142] Fix | Delete
* @type String
[143] Fix | Delete
*/
[144] Fix | Delete
wrapperRoot = 'elfinder-navbar-wrapper-root',
[145] Fix | Delete
[146] Fix | Delete
/**
[147] Fix | Delete
* Un-disabled cmd `paste` volume's root wrapper class
[148] Fix | Delete
*
[149] Fix | Delete
* @type String
[150] Fix | Delete
*/
[151] Fix | Delete
pastable = 'elfinder-navbar-wrapper-pastable',
[152] Fix | Delete
[153] Fix | Delete
/**
[154] Fix | Delete
* Un-disabled cmd `upload` volume's root wrapper class
[155] Fix | Delete
*
[156] Fix | Delete
* @type String
[157] Fix | Delete
*/
[158] Fix | Delete
uploadable = 'elfinder-navbar-wrapper-uploadable',
[159] Fix | Delete
[160] Fix | Delete
/**
[161] Fix | Delete
* Is position x inside Navbar
[162] Fix | Delete
*
[163] Fix | Delete
* @param x Numbar
[164] Fix | Delete
*
[165] Fix | Delete
* @return
[166] Fix | Delete
*/
[167] Fix | Delete
insideNavbar = function(x) {
[168] Fix | Delete
var left = navbar.offset().left;
[169] Fix | Delete
[170] Fix | Delete
return left <= x && x <= left + navbar.width();
[171] Fix | Delete
},
[172] Fix | Delete
[173] Fix | Delete
/**
[174] Fix | Delete
* To call subdirs elements queue
[175] Fix | Delete
*
[176] Fix | Delete
* @type Object
[177] Fix | Delete
*/
[178] Fix | Delete
subdirsQue = {},
[179] Fix | Delete
[180] Fix | Delete
/**
[181] Fix | Delete
* To exec subdirs elements ids
[182] Fix | Delete
*
[183] Fix | Delete
*/
[184] Fix | Delete
subdirsExecQue = [],
[185] Fix | Delete
[186] Fix | Delete
/**
[187] Fix | Delete
* Request subdirs to backend
[188] Fix | Delete
*
[189] Fix | Delete
* @param id String
[190] Fix | Delete
*
[191] Fix | Delete
* @return Deferred
[192] Fix | Delete
*/
[193] Fix | Delete
subdirs = function(ids) {
[194] Fix | Delete
var targets = [];
[195] Fix | Delete
jQuery.each(ids, function(i, id) {
[196] Fix | Delete
subdirsQue[id] && targets.push(fm.navId2Hash(id));
[197] Fix | Delete
delete subdirsQue[id];
[198] Fix | Delete
});
[199] Fix | Delete
if (targets.length) {
[200] Fix | Delete
return fm.request({
[201] Fix | Delete
data: {
[202] Fix | Delete
cmd: 'subdirs',
[203] Fix | Delete
targets: targets,
[204] Fix | Delete
preventDefault : true
[205] Fix | Delete
}
[206] Fix | Delete
}).done(function(res) {
[207] Fix | Delete
if (res && res.subdirs) {
[208] Fix | Delete
jQuery.each(res.subdirs, function(hash, subdirs) {
[209] Fix | Delete
var elm = fm.navHash2Elm(hash);
[210] Fix | Delete
elm.removeClass(chksubdir);
[211] Fix | Delete
elm[subdirs? 'addClass' : 'removeClass'](collapsed);
[212] Fix | Delete
});
[213] Fix | Delete
}
[214] Fix | Delete
});
[215] Fix | Delete
}
[216] Fix | Delete
},
[217] Fix | Delete
[218] Fix | Delete
subdirsJobRes = null,
[219] Fix | Delete
[220] Fix | Delete
/**
[221] Fix | Delete
* To check target element is in window of subdirs
[222] Fix | Delete
*
[223] Fix | Delete
* @return void
[224] Fix | Delete
*/
[225] Fix | Delete
checkSubdirs = function() {
[226] Fix | Delete
var ids = Object.keys(subdirsQue);
[227] Fix | Delete
if (ids.length) {
[228] Fix | Delete
subdirsJobRes && subdirsJobRes._abort();
[229] Fix | Delete
execSubdirsTm && clearTimeout(execSubdirsTm);
[230] Fix | Delete
subdirsExecQue = [];
[231] Fix | Delete
subdirsJobRes = fm.asyncJob(function(id) {
[232] Fix | Delete
return fm.isInWindow(jQuery('#'+id))? id : null;
[233] Fix | Delete
}, ids, { numPerOnce: 200 })
[234] Fix | Delete
.done(function(arr) {
[235] Fix | Delete
if (arr.length) {
[236] Fix | Delete
subdirsExecQue = arr;
[237] Fix | Delete
execSubdirs();
[238] Fix | Delete
}
[239] Fix | Delete
});
[240] Fix | Delete
}
[241] Fix | Delete
},
[242] Fix | Delete
[243] Fix | Delete
subdirsPending = 0,
[244] Fix | Delete
execSubdirsTm,
[245] Fix | Delete
[246] Fix | Delete
/**
[247] Fix | Delete
* Exec subdirs as batch request
[248] Fix | Delete
*
[249] Fix | Delete
* @return void
[250] Fix | Delete
*/
[251] Fix | Delete
execSubdirs = function() {
[252] Fix | Delete
var cnt = opts.subdirsMaxConn - subdirsPending,
[253] Fix | Delete
atOnce = fm.maxTargets? Math.min(fm.maxTargets, opts.subdirsAtOnce) : opts.subdirsAtOnce,
[254] Fix | Delete
i, ids;
[255] Fix | Delete
execSubdirsTm && cancelAnimationFrame(execSubdirsTm);
[256] Fix | Delete
if (subdirsExecQue.length) {
[257] Fix | Delete
if (cnt > 0) {
[258] Fix | Delete
for (i = 0; i < cnt; i++) {
[259] Fix | Delete
if (subdirsExecQue.length) {
[260] Fix | Delete
subdirsPending++;
[261] Fix | Delete
subdirs(subdirsExecQue.splice(0, atOnce)).always(function() {
[262] Fix | Delete
subdirsPending--;
[263] Fix | Delete
execSubdirs();
[264] Fix | Delete
});
[265] Fix | Delete
}
[266] Fix | Delete
}
[267] Fix | Delete
} else {
[268] Fix | Delete
execSubdirsTm = requestAnimationFrame(function() {
[269] Fix | Delete
subdirsExecQue.length && execSubdirs();
[270] Fix | Delete
});
[271] Fix | Delete
}
[272] Fix | Delete
}
[273] Fix | Delete
},
[274] Fix | Delete
[275] Fix | Delete
drop = fm.droppable.drop,
[276] Fix | Delete
[277] Fix | Delete
/**
[278] Fix | Delete
* Droppable options
[279] Fix | Delete
*
[280] Fix | Delete
* @type Object
[281] Fix | Delete
*/
[282] Fix | Delete
droppableopts = jQuery.extend(true, {}, fm.droppable, {
[283] Fix | Delete
// show subfolders on dropover
[284] Fix | Delete
over : function(e, ui) {
[285] Fix | Delete
var dst = jQuery(this),
[286] Fix | Delete
helper = ui.helper,
[287] Fix | Delete
cl = hover+' '+dropover,
[288] Fix | Delete
hash, status;
[289] Fix | Delete
e.stopPropagation();
[290] Fix | Delete
helper.data('dropover', helper.data('dropover') + 1);
[291] Fix | Delete
dst.data('dropover', true);
[292] Fix | Delete
if (ui.helper.data('namespace') !== fm.namespace || ! fm.insideWorkzone(e.pageX, e.pageY)) {
[293] Fix | Delete
dst.removeClass(cl);
[294] Fix | Delete
helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus');
[295] Fix | Delete
return;
[296] Fix | Delete
}
[297] Fix | Delete
if (! insideNavbar(e.clientX)) {
[298] Fix | Delete
dst.removeClass(cl);
[299] Fix | Delete
return;
[300] Fix | Delete
}
[301] Fix | Delete
helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus');
[302] Fix | Delete
dst.addClass(hover);
[303] Fix | Delete
if (dst.is('.'+collapsed+':not(.'+expanded+')')) {
[304] Fix | Delete
dst.data('expandTimer', setTimeout(function() {
[305] Fix | Delete
dst.is('.'+collapsed+'.'+hover) && dst.children('.'+arrow).trigger('click');
[306] Fix | Delete
}, 500));
[307] Fix | Delete
}
[308] Fix | Delete
if (dst.is('.elfinder-ro,.elfinder-na')) {
[309] Fix | Delete
dst.removeClass(dropover);
[310] Fix | Delete
//helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus');
[311] Fix | Delete
return;
[312] Fix | Delete
}
[313] Fix | Delete
hash = fm.navId2Hash(dst.attr('id'));
[314] Fix | Delete
dst.data('dropover', hash);
[315] Fix | Delete
jQuery.each(ui.helper.data('files'), function(i, h) {
[316] Fix | Delete
if (h === hash || (fm.file(h).phash === hash && !ui.helper.hasClass('elfinder-drag-helper-plus'))) {
[317] Fix | Delete
dst.removeClass(cl);
[318] Fix | Delete
return false; // break jQuery.each
[319] Fix | Delete
}
[320] Fix | Delete
});
[321] Fix | Delete
if (helper.data('locked')) {
[322] Fix | Delete
status = 'elfinder-drag-helper-plus';
[323] Fix | Delete
} else {
[324] Fix | Delete
status = 'elfinder-drag-helper-move';
[325] Fix | Delete
if (fm._commands.copy && (e.shiftKey || e.ctrlKey || e.metaKey)) {
[326] Fix | Delete
status += ' elfinder-drag-helper-plus';
[327] Fix | Delete
}
[328] Fix | Delete
}
[329] Fix | Delete
dst.hasClass(dropover) && helper.addClass(status);
[330] Fix | Delete
requestAnimationFrame(function(){ dst.hasClass(dropover) && helper.addClass(status); });
[331] Fix | Delete
},
[332] Fix | Delete
out : function(e, ui) {
[333] Fix | Delete
var dst = jQuery(this),
[334] Fix | Delete
helper = ui.helper;
[335] Fix | Delete
e.stopPropagation();
[336] Fix | Delete
if (insideNavbar(e.clientX)) {
[337] Fix | Delete
helper.removeClass('elfinder-drag-helper-move elfinder-drag-helper-plus');
[338] Fix | Delete
}
[339] Fix | Delete
helper.data('dropover', Math.max(helper.data('dropover') - 1, 0));
[340] Fix | Delete
dst.data('expandTimer') && clearTimeout(dst.data('expandTimer'));
[341] Fix | Delete
dst.removeData('dropover')
[342] Fix | Delete
.removeClass(hover+' '+dropover);
[343] Fix | Delete
},
[344] Fix | Delete
deactivate : function() {
[345] Fix | Delete
jQuery(this).removeData('dropover')
[346] Fix | Delete
.removeClass(hover+' '+dropover);
[347] Fix | Delete
},
[348] Fix | Delete
drop : function(e, ui) {
[349] Fix | Delete
insideNavbar(e.clientX) && drop.call(this, e, ui);
[350] Fix | Delete
}
[351] Fix | Delete
}),
[352] Fix | Delete
[353] Fix | Delete
spinner = jQuery(fm.res('tpl', 'navspinner')),
[354] Fix | Delete
[355] Fix | Delete
/**
[356] Fix | Delete
* Directory html template
[357] Fix | Delete
*
[358] Fix | Delete
* @type String
[359] Fix | Delete
*/
[360] Fix | Delete
tpl = fm.res('tpl', 'navdir'),
[361] Fix | Delete
[362] Fix | Delete
/**
[363] Fix | Delete
* Permissions marker html template
[364] Fix | Delete
*
[365] Fix | Delete
* @type String
[366] Fix | Delete
*/
[367] Fix | Delete
ptpl = fm.res('tpl', 'perms'),
[368] Fix | Delete
[369] Fix | Delete
/**
[370] Fix | Delete
* Lock marker html template
[371] Fix | Delete
*
[372] Fix | Delete
* @type String
[373] Fix | Delete
*/
[374] Fix | Delete
ltpl = fm.res('tpl', 'lock'),
[375] Fix | Delete
[376] Fix | Delete
/**
[377] Fix | Delete
* Symlink marker html template
[378] Fix | Delete
*
[379] Fix | Delete
* @type String
[380] Fix | Delete
*/
[381] Fix | Delete
stpl = fm.res('tpl', 'symlink'),
[382] Fix | Delete
[383] Fix | Delete
/**
[384] Fix | Delete
* Directory hashes that has more pages
[385] Fix | Delete
*
[386] Fix | Delete
* @type Object
[387] Fix | Delete
*/
[388] Fix | Delete
hasMoreDirs = {},
[389] Fix | Delete
[390] Fix | Delete
/**
[391] Fix | Delete
* Html template replacement methods
[392] Fix | Delete
*
[393] Fix | Delete
* @type Object
[394] Fix | Delete
*/
[395] Fix | Delete
replace = {
[396] Fix | Delete
id : function(dir) { return fm.navHash2Id(dir.hash); },
[397] Fix | Delete
name : function(dir) { return fm.escape(dir.i18 || dir.name); },
[398] Fix | Delete
cssclass : function(dir) {
[399] Fix | Delete
var cname = (dir.phash && ! dir.isroot ? '' : root)+' '+navdir+' '+fm.perms2class(dir);
[400] Fix | Delete
dir.dirs && !dir.link && (cname += ' ' + collapsed) && dir.dirs == -1 && (cname += ' ' + chksubdir);
[401] Fix | Delete
opts.getClass && (cname += ' ' + opts.getClass(dir));
[402] Fix | Delete
dir.csscls && (cname += ' ' + fm.escape(dir.csscls));
[403] Fix | Delete
return cname;
[404] Fix | Delete
},
[405] Fix | Delete
title : function(dir) { return opts.attrTitle? (' title="' + fm.escape(fm.path(dir.hash, true) || dir.i18 || dir.name) + '"') : ''; },
[406] Fix | Delete
root : function(dir) {
[407] Fix | Delete
var cls = '';
[408] Fix | Delete
if (!dir.phash || dir.isroot) {
[409] Fix | Delete
cls += ' '+wrapperRoot;
[410] Fix | Delete
if (!dir.disabled || dir.disabled.length < 1) {
[411] Fix | Delete
cls += ' '+pastable+' '+uploadable;
[412] Fix | Delete
} else {
[413] Fix | Delete
if (jQuery.inArray('paste', dir.disabled) === -1) {
[414] Fix | Delete
cls += ' '+pastable;
[415] Fix | Delete
}
[416] Fix | Delete
if (jQuery.inArray('upload', dir.disabled) === -1) {
[417] Fix | Delete
cls += ' '+uploadable;
[418] Fix | Delete
}
[419] Fix | Delete
}
[420] Fix | Delete
return cls;
[421] Fix | Delete
} else {
[422] Fix | Delete
return '';
[423] Fix | Delete
}
[424] Fix | Delete
},
[425] Fix | Delete
permissions : function(dir) { return !dir.read || !dir.write ? ptpl : ''; },
[426] Fix | Delete
symlink : function(dir) { return dir.alias ? stpl : ''; },
[427] Fix | Delete
style : function(dir) { return dir.icon ? fm.getIconStyle(dir) : ''; }
[428] Fix | Delete
},
[429] Fix | Delete
[430] Fix | Delete
/**
[431] Fix | Delete
* Return html for given dir
[432] Fix | Delete
*
[433] Fix | Delete
* @param Object directory
[434] Fix | Delete
* @return String
[435] Fix | Delete
*/
[436] Fix | Delete
itemhtml = function(dir) {
[437] Fix | Delete
return tpl.replace(/(?:\{([a-z]+)\})/ig, function(m, key) {
[438] Fix | Delete
var res = replace[key] ? replace[key](dir) : (dir[key] || '');
[439] Fix | Delete
if (key === 'id' && dir.dirs == -1) {
[440] Fix | Delete
subdirsQue[res] = res;
[441] Fix | Delete
}
[442] Fix | Delete
return res;
[443] Fix | Delete
});
[444] Fix | Delete
},
[445] Fix | Delete
[446] Fix | Delete
/**
[447] Fix | Delete
* Return only dirs from files list
[448] Fix | Delete
*
[449] Fix | Delete
* @param Array files list
[450] Fix | Delete
* @param Boolean do check exists
[451] Fix | Delete
* @return Array
[452] Fix | Delete
*/
[453] Fix | Delete
filter = function(files, checkExists) {
[454] Fix | Delete
return jQuery.map(files || [], function(f) {
[455] Fix | Delete
return (f.mime === 'directory' && (!checkExists || fm.navHash2Elm(f.hash).length)) ? f : null;
[456] Fix | Delete
});
[457] Fix | Delete
},
[458] Fix | Delete
[459] Fix | Delete
/**
[460] Fix | Delete
* Find parent subtree for required directory
[461] Fix | Delete
*
[462] Fix | Delete
* @param String dir hash
[463] Fix | Delete
* @return jQuery
[464] Fix | Delete
*/
[465] Fix | Delete
findSubtree = function(hash) {
[466] Fix | Delete
return hash ? fm.navHash2Elm(hash).next('.'+subtree) : tree;
[467] Fix | Delete
},
[468] Fix | Delete
[469] Fix | Delete
/**
[470] Fix | Delete
* Find directory (wrapper) in required node
[471] Fix | Delete
* before which we can insert new directory
[472] Fix | Delete
*
[473] Fix | Delete
* @param jQuery parent directory
[474] Fix | Delete
* @param Object new directory
[475] Fix | Delete
* @return jQuery
[476] Fix | Delete
*/
[477] Fix | Delete
findSibling = function(subtree, dir) {
[478] Fix | Delete
var node = subtree.children(':first'),
[479] Fix | Delete
info;
[480] Fix | Delete
[481] Fix | Delete
while (node.length) {
[482] Fix | Delete
info = fm.file(fm.navId2Hash(node.children('[id]').attr('id')));
[483] Fix | Delete
[484] Fix | Delete
if ((info = fm.file(fm.navId2Hash(node.children('[id]').attr('id'))))
[485] Fix | Delete
&& compare(dir, info) < 0) {
[486] Fix | Delete
return node;
[487] Fix | Delete
}
[488] Fix | Delete
node = node.next();
[489] Fix | Delete
}
[490] Fix | Delete
return subtree.children('button.elfinder-navbar-pager-next');
[491] Fix | Delete
},
[492] Fix | Delete
[493] Fix | Delete
/**
[494] Fix | Delete
* Add new dirs in tree
[495] Fix | Delete
*
[496] Fix | Delete
* @param Array dirs list
[497] Fix | Delete
* @return void
[498] Fix | Delete
*/
[499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function