File: //home/retile.ru/public_html/admin/view/javascript/d_elfinder/commands/open.js
"use strict"
/**
* @class elFinder command "open"
* Enter folder or open files in new windows
*
* @author Dmitry (dio) Levashov
**/
elFinder.prototype.commands.open = function() {
this.alwaysEnabled = true;
this._handlers = {
dblclick : function(e) { e.preventDefault(); this.exec() },
'select enable disable reload' : function(e) { this.update(e.type == 'disable' ? -1 : void(0)); }
}
this.shortcuts = [{
pattern : 'ctrl+down numpad_enter'+(this.fm.OS != 'mac' && ' enter')
}];
this.getstate = function(sel) {
var sel = this.files(sel),
cnt = sel.length;
return cnt == 1
? 0
: cnt ? ($.map(sel, function(file) { return file.mime == 'directory' ? null : file}).length == cnt ? 0 : -1) : -1
}
this.exec = function(hashes) {
var fm = this.fm,
dfrd = $.Deferred().fail(function(error) { error && fm.error(error); }),
files = this.files(hashes),
cnt = files.length,
file, url, s, w;
if (!cnt) {
return dfrd.reject();
}
// open folder
if (cnt == 1 && (file = files[0]) && file.mime == 'directory') {
return file && !file.read
? dfrd.reject(['errOpen', file.name, 'errPerm'])
: fm.request({
data : {cmd : 'open', target : file.thash || file.hash},
notify : {type : 'open', cnt : 1, hideCnt : true},
syncOnFail : true
});
}
files = $.map(files, function(file) { return file.mime != 'directory' ? file : null });
// nothing to open or files and folders selected - do nothing
if (cnt != files.length) {
return dfrd.reject();
}
// open files
cnt = files.length;
while (cnt--) {
file = files[cnt];
if (!file.read) {
return dfrd.reject(['errOpen', file.name, 'errPerm']);
}
if (!(url = fm.url(/*file.thash || */file.hash))) {
url = fm.options.url;
url = url + (url.indexOf('?') === -1 ? '?' : '&')
+ (fm.oldAPI ? 'cmd=open¤t='+file.phash : 'cmd=file')
+ '&target=' + file.hash;
}
w = '';
// set window size for image
if (file.dim) {
s = file.dim.split('x');
w = 'width='+(parseInt(s[0])+20) + ',height='+(parseInt(s[1])+20);
}
if (!window.open(url, '_blank', w + ',top=50,left=50,scrollbars=yes,resizable=yes')) {
return dfrd.reject('errPopup');
}
}
return dfrd.resolve(hashes);
}
}