File: /home/retile.ru/public_html/admin/view/javascript/d_elfinder/commands/getfile.js
"use strict";
/**
* @class elFinder command "getfile".
* Return selected files info into outer callback.
* For use elFinder with wysiwyg editors etc.
*
* @author Dmitry (dio) Levashov, dio@std42.ru
**/
elFinder.prototype.commands.getfile = function() {
var self = this,
fm = this.fm,
filter = function(files) {
var o = self.options;
files = $.map(files, function(file) {
return file.mime != 'directory' || o.folders ? file : null;
});
return o.multiple || files.length == 1 ? files : [];
};
this.alwaysEnabled = true;
this.callback = fm.options.getFileCallback;
this._disabled = typeof(this.callback) == 'function';
this.getstate = function(sel) {
var sel = this.files(sel),
cnt = sel.length;
return this.callback && cnt && filter(sel).length == cnt ? 0 : -1;
}
this.exec = function(hashes) {
var fm = this.fm,
opts = this.options,
files = this.files(hashes),
cnt = files.length,
url = fm.option('url'),
tmb = fm.option('tmbUrl'),
dfrd = $.Deferred()
.done(function(data) {
fm.trigger('getfile', {files : data});
self.callback(data, fm);
if (opts.oncomplete == 'close') {
fm.hide();
} else if (opts.oncomplete == 'destroy') {
fm.destroy();
}
}),
result = function(file) {
return opts.onlyURL
? opts.multiple ? $.map(files, function(f) { return f.url; }) : files[0].url
: opts.multiple ? files : files[0];
},
req = [],
i, file, dim;
if (this.getstate() == -1) {
return dfrd.reject();
}
for (i = 0; i < cnt; i++) {
file = files[i];
if (file.mime == 'directory' && !opts.folders) {
return dfrd.reject();
}
file.baseUrl = url;
file.url = fm.url(file.hash);
file.path = fm.path(file.hash);
if (file.tmb && file.tmb != 1) {
file.tmb = tmb + file.tmb;
}
if (!file.width && !file.height) {
if (file.dim) {
dim = file.dim.split('x');
file.width = dim[0];
file.height = dim[1];
} else if (file.mime.indexOf('image') !== -1) {
req.push(fm.request({
data : {cmd : 'dim', target : file.hash},
preventDefault : true
})
.done($.proxy(function(data) {
if (data.dim) {
dim = data.dim.split('x');
this.width = dim[0];
this.height = dim[1];
}
this.dim = data.dim
}, files[i])));
}
}
}
if (req.length) {
$.when.apply(null, req).always(function() {
dfrd.resolve(result(files));
})
return dfrd;
}
return dfrd.resolve(result(files));
}
}