File: //home/retile.ru/public_html/admin/view/javascript/d_elfinder/commands/rename.js
"use strict";
/**
* @class elFinder command "rename".
* Rename selected file.
*
* @author Dmitry (dio) Levashov, dio@std42.ru
**/
elFinder.prototype.commands.rename = function() {
this.shortcuts = [{
pattern : 'f2'+(this.fm.OS == 'mac' ? ' enter' : '')
}];
this.getstate = function() {
var sel = this.fm.selectedFiles();
return !this._disabled && sel.length == 1 && sel[0].phash && !sel[0].locked ? 0 : -1;
}
this.exec = function() {
var fm = this.fm,
cwd = fm.getUI('cwd'),
sel = fm.selected(),
cnt = sel.length,
file = fm.file(sel.shift()),
filename = '.elfinder-cwd-filename',
dfrd = $.Deferred()
.fail(function(error) {
var parent = input.parent(),
name = fm.escape(file.name);
if (parent.length) {
input.remove();
parent.html(name);
} else {
cwd.find('#'+file.hash).find(filename).html(name);
setTimeout(function() {
cwd.find('#'+file.hash).click();
}, 50);
}
error && fm.error(error);
})
.always(function() {
fm.enable();
}),
input = $('<input type="text"/>')
.keydown(function(e) {
e.stopPropagation();
e.stopImmediatePropagation();
if (e.keyCode == $.ui.keyCode.ESCAPE) {
dfrd.reject();
} else if (e.keyCode == $.ui.keyCode.ENTER) {
input.blur();
}
})
.mousedown(function(e) {
e.stopPropagation();
})
.dblclick(function(e) {
e.stopPropagation();
e.preventDefault();
})
.blur(function() {
var name = $.trim(input.val()),
parent = input.parent();
if (parent.length) {
if (input[0].setSelectionRange) {
input[0].setSelectionRange(0, 0)
}
if (name == file.name) {
return dfrd.reject();
}
if (!name) {
return dfrd.reject('errInvName');
}
if (fm.fileByName(name, file.phash)) {
return dfrd.reject(['errExists', name]);
}
parent.html(fm.escape(name));
fm.lockfiles({files : [file.hash]});
fm.request({
data : {cmd : 'rename', target : file.hash, name : name},
notify : {type : 'rename', cnt : 1}
})
.fail(function(error) {
dfrd.reject();
fm.sync();
})
.done(function(data) {
dfrd.resolve(data);
})
.always(function() {
fm.unlockfiles({files : [file.hash]})
});
}
}),
node = cwd.find('#'+file.hash).find(filename).empty().append(input.val(file.name)),
name = input.val().replace(/\.((tar\.(gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(gz|bz2)|[a-z0-9]{1,4})$/ig, '')
;
if (this.disabled()) {
return dfrd.reject();
}
if (!file || cnt > 1 || !node.length) {
return dfrd.reject('errCmdParams', this.title);
}
if (file.locked) {
return dfrd.reject(['errLocked', file.name]);
}
fm.one('select', function() {
input.parent().length && file && $.inArray(file.hash, fm.selected()) === -1 && input.blur();
})
input.select().focus();
input[0].setSelectionRange && input[0].setSelectionRange(0, name.length);
return dfrd;
}
}