File "extract.js"
Full Path: /home/flipjqml/onlinebetsolution.com/wp-content/plugins/wp-file-manager/lib/js/commands/extract.js
File size: 5.18 KB
MIME-type: text/plain
Charset: utf-8
/**
* @class elFinder command "extract"
* Extract files from archive
*
* @author Dmitry (dio) Levashov
**/
elFinder.prototype.commands.extract = function() {
"use strict";
var self = this,
fm = self.fm,
mimes = [],
filter = function(files) {
var fres = true;
return jQuery.grep(files, function(file) {
fres = fres && file.read && jQuery.inArray(file.mime, mimes) !== -1 ? true : false;
return fres;
});
};
this.variants = [];
this.disableOnSearch = true;
// Update mimes list on open/reload
fm.bind('open reload', function() {
mimes = fm.option('archivers')['extract'] || [];
if (fm.api > 2) {
self.variants = [[{makedir: true}, fm.i18n('cmdmkdir')], [{}, fm.i18n('btnCwd')]];
} else {
self.variants = [[{}, fm.i18n('btnCwd')]];
}
self.change();
});
this.getstate = function(select) {
var sel = this.files(select),
cnt = sel.length,
cwdHash, cwdChk;
if (!cnt || filter(sel).length != cnt) {
return -1;
} else if (fm.searchStatus.state > 0) {
cwdHash = this.fm.cwd().hash;
jQuery.each(sel, function(i, file) {
cwdChk = (file.phash === cwdHash);
return cwdChk;
});
return cwdChk? 0 : -1;
} else {
return this.fm.cwd().write? 0 : -1;
}
};
this.exec = function(hashes, opts) {
var files = this.files(hashes),
dfrd = jQuery.Deferred(),
cnt = files.length,
makedir = opts && opts.makedir ? 1 : 0,
i, error,
decision,
overwriteAll = false,
omitAll = false,
mkdirAll = 0,
siblings = fm.files(files[0].phash),
names = [],
map = {};
jQuery.each(siblings, function(id, file) {
map[file.name] = file;
names.push(file.name);
});
var decide = function(decision) {
switch (decision) {
case 'overwrite_all' :
overwriteAll = true;
break;
case 'omit_all':
omitAll = true;
break;
}
};
var unpack = function(file) {
if (!(file.read && fm.file(file.phash).write)) {
error = ['errExtract', file.name, 'errPerm'];
fm.error(error);
dfrd.reject(error);
} else if (jQuery.inArray(file.mime, mimes) === -1) {
error = ['errExtract', file.name, 'errNoArchive'];
fm.error(error);
dfrd.reject(error);
} else {
fm.request({
data:{cmd:'extract', target:file.hash, makedir:makedir},
notify:{type:'extract', cnt:1},
syncOnFail:true,
navigate:{
toast : makedir? {
incwd : {msg: fm.i18n(['complete', fm.i18n('cmdextract')]), action: {cmd: 'open', msg: 'cmdopen'}},
inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmdextract')]), action: {cmd: 'open', msg: 'cmdopen'}}
} : {
inbuffer : {msg: fm.i18n(['complete', fm.i18n('cmdextract')])}
}
}
})
.fail(function (error) {
if (dfrd.state() != 'rejected') {
dfrd.reject(error);
}
})
.done(function () {
});
}
};
var confirm = function(files, index) {
var file = files[index],
name = fm.splitFileExtention(file.name)[0],
existed = (jQuery.inArray(name, names) >= 0),
next = function(){
if((index+1) < cnt) {
confirm(files, index+1);
} else {
dfrd.resolve();
}
};
if (!makedir && existed && map[name].mime != 'directory') {
fm.confirm(
{
title : fm.i18n('ntfextract'),
text : ['errExists', name, 'confirmRepl'],
accept:{
label : 'btnYes',
callback:function (all) {
decision = all ? 'overwrite_all' : 'overwrite';
decide(decision);
if(!overwriteAll && !omitAll) {
if('overwrite' == decision) {
unpack(file);
}
if((index+1) < cnt) {
confirm(files, index+1);
} else {
dfrd.resolve();
}
} else if(overwriteAll) {
for (i = index; i < cnt; i++) {
unpack(files[i]);
}
dfrd.resolve();
}
}
},
reject : {
label : 'btnNo',
callback:function (all) {
decision = all ? 'omit_all' : 'omit';
decide(decision);
if(!overwriteAll && !omitAll && (index+1) < cnt) {
confirm(files, index+1);
} else if (omitAll) {
dfrd.resolve();
}
}
},
cancel : {
label : 'btnCancel',
callback:function () {
dfrd.resolve();
}
},
all : ((index+1) < cnt)
}
);
} else if (!makedir) {
if (mkdirAll == 0) {
fm.confirm({
title : fm.i18n('cmdextract'),
text : [fm.i18n('cmdextract')+' "'+file.name+'"', 'confirmRepl'],
accept:{
label : 'btnYes',
callback:function (all) {
all && (mkdirAll = 1);
unpack(file);
next();
}
},
reject : {
label : 'btnNo',
callback:function (all) {
all && (mkdirAll = -1);
next();
}
},
cancel : {
label : 'btnCancel',
callback:function () {
dfrd.resolve();
}
},
all : ((index+1) < cnt)
});
} else {
(mkdirAll > 0) && unpack(file);
next();
}
} else {
unpack(file);
next();
}
};
if (!(this.enabled() && cnt && mimes.length)) {
return dfrd.reject();
}
if(cnt > 0) {
confirm(files, 0);
}
return dfrd;
};
};