FileManager move function + small bugfixes

This commit is contained in:
Serghey Rodin 2016-08-09 19:22:45 +03:00
parent 7b924c0227
commit 4adbef4517
38 changed files with 563 additions and 566 deletions

View file

@ -797,9 +797,9 @@ App.Ajax.request = function(method, data, callback, onError){
}*/
//App.Helpers.setAjaxBusy(method, data);
data = data || {};
var prgs = $('.progress-container');
switch (method) {
case 'cd':
prgs.find('title').text('Opening dir');
@ -825,8 +825,12 @@ App.Ajax.request = function(method, data, callback, onError){
prgs.find('title').text('Renaming file');
prgs.show();
break;
case 'copy_file':
case 'copy_directory':
prgs.find('title').text('Copying files');
prgs.show();
break;
default:
break;
}

View file

@ -314,7 +314,6 @@ FM.open = function(dir, box, callback) {
'dir': dir
};
App.Ajax.request('cd', params, function(reply) {
//var tab = FM.getTabLetter(FM.CURRENT_TAB);
FM.preselectedItems[tab] = [];
if (reply.result == true) {
var html = FM.generate_listing(reply.listing, box);
@ -324,17 +323,16 @@ FM.open = function(dir, box, callback) {
}
callback && callback(reply);
var current_pwd = dir.trim() == '' ? FM.ROOT_DIR : dir;
FM.updateTopLevelPathBar(box, tab, current_pwd);
var path_a = FM['TAB_A_CURRENT_PATH'] == '' ? FM.ROOT_DIR : FM['TAB_A_CURRENT_PATH'];
var path_b = FM['TAB_B_CURRENT_PATH'] == '' ? FM.ROOT_DIR : FM['TAB_B_CURRENT_PATH'];
var url = '/list/directory/?dir_a='+path_a+'&dir_b='+path_b;
history.pushState({}, null, url);
if (FM['CURRENT_' + tab + '_LINE'] == -1) {
FM.setActive(0, FM.CURRENT_TAB);
}
@ -738,7 +736,7 @@ FM.bulkOperation = function(ref) {
$(ref).find('option[value=-1]').attr('selected', true);
}
FM.checkBulkStatus = function(bulkStatuses, acc) {
FM.checkBulkStatus = function(bulkStatuses, acc, dont_reload) {
var status = true;
var msg = '';
if (bulkStatuses.length == acc.length) {
@ -760,10 +758,11 @@ FM.checkBulkStatus = function(bulkStatuses, acc) {
$('#popup .ok').hide();
}
var box = FM['TAB_' + tab];
var tab = FM.getTabLetter(FM.CURRENT_TAB);
// FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box, function(){}, true);
FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box, function(){}, false);
var box = FM['TAB_' + tab];
if(!dont_reload){
FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box);
}
}
}
@ -803,8 +802,6 @@ FM.humanFileSizeUnit = function(size) {
FM.bulkCopyDo = function() {
var acc = $(FM.CURRENT_TAB).find('.dir.selected');
if (acc.length > 0) {
//FM.popupClose();
var cfr_html = '';
var numberOfItems = 0;
$.each(acc, function(i, o) {
@ -825,7 +822,6 @@ FM.bulkCopyDo = function() {
src = $.parseJSON(src);
if (FM.isItemPseudo(src)) {
//cfr_html += '<div>'+src.name+'</div>';
return;
}
@ -836,9 +832,6 @@ FM.bulkCopyDo = function() {
}
if (FM.isItemPseudo(src)) {
/*return FM.displayError(
App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
);*/
return;
}
@ -856,16 +849,18 @@ FM.bulkCopyDo = function() {
dir_target: dest
};
App.Ajax.request(action, params, function(reply) {
if (reply.result == true) {
bulkStatuses.push(true);
}
else {
//FM.showError('copy-items', reply.message);
bulkStatuses.push(reply.message);
}
FM.checkBulkStatus(bulkStatuses, acc);
FM.checkBulkStatus(bulkStatuses, acc, true);
if(bulkStatuses.length == acc.length){
FM.open(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], FM['TAB_' + opposite_tab]);
}
});
});
}
@ -960,7 +955,6 @@ FM.bulkRemoveDo = function() {
bulkStatuses.push(true);
}
else {
//FM.showError('copy-items', reply.message);
bulkStatuses.push(reply.message);
}
@ -997,76 +991,6 @@ FM.bulkRemove = function() {
}
}
FM.bulkRemove11111 = function() {
var acc = $(FM.CURRENT_TAB).find('.dir.selected');
if (acc.length > 0) {
//FM.popupClose();
var cfr_html = '';
$.each(acc, function(i, o) {
var ref = $(o);
var src = $(ref).find('.source').val();
src = $.parseJSON(src);
if (!FM.isItemPseudo(o)) {
cfr_html += '<div>'+src.name+'</div>';
}
});
var tpl = Tpl.get('popup_bulk', 'FM');
tpl.set(':ACTION', App.Constants.FM_YOU_ARE_REMOVING);
tpl.set(':TEXT', cfr_html);
FM.popupOpen(tpl.finalize());
var bulkStatuses = [];
$.each(acc, function(i, o) {
var ref = $(o);
var src = $(ref).find('.source').val();
src = $.parseJSON(src);
var tab = FM.getTabLetter(FM.CURRENT_TAB);
var opposite_tab = 'A';
if (tab == 'A') {
opposite_tab = 'B';
}
if (FM.isItemPseudo(src)) {
return;
/*return FM.displayError(
App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
);*/
}
var dest = FM['TAB_' + opposite_tab + '_CURRENT_PATH' ];
if (dest == '') {
dest = GLOBAL.ROOT_DIR;
}
var params = {
item: src.full_path,
dir: FM['TAB_' + tab + '_CURRENT_PATH']
};
App.Ajax.request('delete_files', params, function(reply) {
if (reply.result == true) {
bulkStatuses.push(true);
}
else {
//FM.showError('copy-items', reply.message);
bulkStatuses.push(reply.message);
}
FM.checkBulkStatus(bulkStatuses, acc);
});
});
}
}
FM.toggleAllItemsSelected = function() {
var tab = FM.getTabLetter(FM.CURRENT_TAB);
var box = FM['TAB_' + tab];
@ -1398,6 +1322,198 @@ FM.renameItems = function() {
FM.popupOpen(tpl.finalize());
}
FM.confirmMove = function() {
var tab = FM.getTabLetter(FM.CURRENT_TAB);
var box = FM['TAB_' + tab];
var selected = $(FM['TAB_' + tab] ).find('.dir.active');
if (!selected) {
return FM.displayError(
App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
);
}
var src = selected.find('.source').val();
src = $.parseJSON(src);
var target_name = $('#dst-name').val();
if (target_name.trim().length == 0) {
return FM.displayError(
App.Constants.FM_FILE_NAME_CANNOT_BE_EMPTY
);
}
var opposite_tab = 'A';
if (tab == 'A') {
opposite_tab = 'B';
}
var opposite_box = FM['TAB_' + opposite_tab];
var action = FM.isItemFile(src) ? 'move_file' : 'move_directory';
var params = {
item: FM['TAB_' + tab + '_CURRENT_PATH'] + '/' + src.name,
target_name: target_name
};
App.Ajax.request(action, params, function(reply) {
if (reply.result == true) {
FM.popupClose();
FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box);
FM.openAndSync(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], opposite_box);
}
else {
FM.showError('rename-items', reply.message);
}
});
}
FM.moveItems = function() {
var tab = FM.getTabLetter(FM.CURRENT_TAB);
var selected = $(FM['TAB_' + tab] ).find('.dir.selected');
if (selected.length == 0) {
return FM.displayError(
App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
);
}
if (selected.length > 1) { // multi operation
return FM.bulkMove();
}
var src = selected.find('.source').val();
src = $.parseJSON(src);
if (FM.isItemPseudo(src)) {
return FM.displayError(
App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
);
}
var opposite_tab = 'A';
if (tab == 'A') {
opposite_tab = 'B';
}
var dst = FM['TAB_' + opposite_tab + '_CURRENT_PATH'];
if (dst == '') {
dst = GLOBAL.ROOT_DIR;
}
var tpl = Tpl.get('popup_move', 'FM');
tpl.set(':FILENAME', src.full_path);
tpl.set(':DST_NAME', (dst + '/' + src.name).replace('//', '/'));
FM.popupOpen(tpl.finalize());
}
FM.bulkMove = function() {
var acc = $(FM.CURRENT_TAB).find('.dir.selected');
if (acc.length > 0) {
FM.popupClose();
var cfr_html = '';
var numberOfItems = 0;
$.each(acc, function(i, o) {
var ref = $(o);
var src = $(ref).find('.source').val();
src = $.parseJSON(src);
if (!FM.isItemPseudo(src)) {
cfr_html += '<div>'+src.name+'</div>';
numberOfItems++;
}
});
var tab = FM.getTabLetter(FM.CURRENT_TAB);
var opposite_tab = 'A';
if (tab == 'A') {
opposite_tab = 'B';
}
var dest = FM['TAB_' + opposite_tab + '_CURRENT_PATH' ];
if (dest == '') {
dest = GLOBAL.ROOT_DIR;
}
var tpl = Tpl.get('popup_bulk_move', 'FM');
tpl.set(':NUMBER_OF_ITEMS', numberOfItems);
tpl.set(':DST_NAME', dest);
//popup_bulk_copy
FM.popupOpen(tpl.finalize());
}
}
FM.bulkMoveDo = function() {
var acc = $(FM.CURRENT_TAB).find('.dir.selected');
if (acc.length > 0) {
//FM.popupClose();
var cfr_html = '';
var numberOfItems = 0;
$.each(acc, function(i, o) {
var ref = $(o);
var src = $(ref).find('.source').val();
src = $.parseJSON(src);
if (!FM.isItemPseudo(o)) {
cfr_html += '<div>'+src.name+'</div>';
numberOfItems++;
}
});
var bulkStatuses = [];
$.each(acc, function(i, o) {
var ref = $(o);
var src = $(ref).find('.source').val();
src = $.parseJSON(src);
var target_name = $('#dst-name').val();
if (target_name.trim().length == 0) {
return FM.displayError(
App.Constants.FM_FILE_NAME_CANNOT_BE_EMPTY
);
}
var tab = FM.getTabLetter(FM.CURRENT_TAB);
var opposite_tab = 'A';
if (tab == 'A') {
opposite_tab = 'B';
}
if (FM.isItemPseudo(src)) {
return;
}
var dest = FM['TAB_' + opposite_tab + '_CURRENT_PATH' ];
if (dest == '') {
dest = GLOBAL.ROOT_DIR;
}
var action = FM.isItemFile(src) ? 'move_file' : 'move_directory';
var params = {
item: FM['TAB_' + tab + '_CURRENT_PATH'] + '/' + src.name,
target_name: target_name
};
App.Ajax.request(action, params, function(reply) {
if (reply.result == true) {
bulkStatuses.push(true);
}
else {
//FM.showError('copy-items', reply.message);
bulkStatuses.push(reply.message);
}
FM.checkBulkStatus(bulkStatuses, acc);
if(bulkStatuses.length == acc.length){
FM.open(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], FM['TAB_' + opposite_tab]);
}
});
});
}
}
FM.confirmChmod = function() {
var tab = FM.getTabLetter(FM.CURRENT_TAB);
var box = FM['TAB_' + tab];
@ -1540,9 +1656,6 @@ FM.confirmBulkChmod = function() {
$('#popup .message').show().html(msg);
$('#popup .ok').hide();
}
// FM.popupClose();
// FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box);
}
}
@ -1635,6 +1748,7 @@ FM.popupOpen = function(html) {
}
FM.popupClose = function() {
$('#reload-in-time').remove();
clearTimeout(FM.Env.errorMessageHideTimeout);
return $('#popup').flayer_close();
}
@ -1651,22 +1765,22 @@ FM.copyItems = function() {
if (selected.length > 1) { // multi operation
return FM.bulkCopy();
}
var src = selected.find('.source').val();
src = $.parseJSON(src);
if (FM.isItemPseudo(src)) {
return FM.displayError(
App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
);
}
var opposite_tab = 'A';
if (tab == 'A') {
opposite_tab = 'B';
}
var dst = FM['TAB_' + opposite_tab + '_CURRENT_PATH'];
if (dst == '') {
dst = GLOBAL.ROOT_DIR;
@ -1687,7 +1801,7 @@ FM.confirmUnpackItem = function () {
App.Constants.FM_NO_FILE_SELECTED
);
}
var opposite_tab = 'A';
if (tab == 'A') {
opposite_tab = 'B';
@ -1695,7 +1809,7 @@ FM.confirmUnpackItem = function () {
var src = selected.find('.source').val();
src = $.parseJSON(src);
if (FM.isItemPseudo(src)) {
return FM.displayError(
App.Constants.FM_NO_FILE_SELECTED
@ -1707,12 +1821,12 @@ FM.confirmUnpackItem = function () {
App.Constants.FM_FILE_TYPE_NOT_SUPPORTED
);
}
var dst = FM['TAB_' + tab + '_CURRENT_PATH'];
if (dst == '') {
dst = GLOBAL.ROOT_DIR;
}
var params = {
item: src.full_path,
filename: src.name,
@ -1733,47 +1847,63 @@ FM.confirmUnpackItem = function () {
}
FM.confirmPackItem = function () {
var tab = FM.getTabLetter(FM.CURRENT_TAB);
var box = FM['TAB_' + tab];
var selected = $(FM['TAB_' + tab] ).find('.dir.active');
var selected = $(FM['TAB_' + tab] ).find('.dir.active, .dir.selected');
if (selected.length == 0) {
return FM.displayError(
App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
);
}
if (selected.length == 1) {
var ref = $(selected[0]);
var src = $(ref).find('.source').val();
src = $.parseJSON(src);
if (FM.isItemPseudo(src)) {
return FM.displayError(
App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
);
}
}
if (selected.length > 0) {
var files_arr = [];
$.each(selected, function(i, o) {
var ref = $(o);
var src = $(ref).find('.source').val();
src = $.parseJSON(src);
if (!FM.isItemPseudo(o)) {
files_arr.push(src.full_path);
}
});
}
var opposite_tab = 'A';
if (tab == 'A') {
opposite_tab = 'B';
}
var src = selected.find('.source').val();
src = $.parseJSON(src);
if (FM.isItemPseudo(src)) {
return FM.displayError(
App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
);
}
var dst = FM['TAB_' + tab + '_CURRENT_PATH'];
if (dst == '') {
dst = GLOBAL.ROOT_DIR;
}
var params = {
item: src.full_path,
filename: src.name,
dir: FM['TAB_' + tab + '_CURRENT_PATH'],
dir_target: $('#pack-destination').val()
items: files_arr.join(','),
dst_item: $('#pack-destination').val()
};
App.Ajax.request('pack_item', params, function(reply) {
if (reply.result == true) {
FM.popupClose();
FM.open(FM['TAB_' + tab + '_CURRENT_PATH'], FM['TAB_' + tab]);
FM.open(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], FM['TAB_' + opposite_tab]);
/// FM.open(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], FM['TAB_' + opposite_tab]);
}
else {
FM.showError('unpack_item', reply.message);
@ -1784,7 +1914,7 @@ FM.confirmPackItem = function () {
FM.confirmCopyItems = function () {
var tab = FM.getTabLetter(FM.CURRENT_TAB);
var selected = $(FM['TAB_' + tab] ).find('.dir.selected');
if (!selected) {
return FM.displayError(
App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
@ -1822,7 +1952,6 @@ FM.confirmCopyItems = function () {
App.Ajax.request(action, params, function(reply) {
if (reply.result == true) {
FM.popupClose();
// FM.open(FM['TAB_' + tab + '_CURRENT_PATH'], FM['TAB_' + tab]);
FM.openAndSync(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], FM['TAB_' + opposite_tab]);
}
else {
@ -1962,12 +2091,11 @@ FM.triggerRefreshActionTrick = function() {
$('#reload-in-time').remove();
FM.Env.RELOAD_IN_TIME = true;
var tpl = Tpl.get('reload_in_time', 'FM');
//tpl.set(':TIME_LEFT', FM.RELOAD_IN_TIME_SECONDS + 1);
$('body').append(tpl.finalize());
var ref = $('#reload-in-time').find('.reload-in-time-counter');
var timeleft = FM.RELOAD_IN_TIME_SECONDS;
FM.Env.reload_in_time_interval =
setInterval(function() {
@ -2293,6 +2421,32 @@ $(document).ready(function() {
'target': document
});
shortcut.add("F4",function() {
var tab = FM.getTabLetter(FM.CURRENT_TAB);
var elm = $(FM.CURRENT_TAB).find('.dir:eq('+FM['CURRENT_'+tab+'_LINE']+')');
if (elm.length == 1) {
var src = $.parseJSON($(elm).find('.source').val());
if (src.type == 'd') {
}
else {
if(FM.IMG_FILETYPES.indexOf(src.filetype) >= 0 && src.filetype.length > 0) {
FM.fotoramaOpen(tab, 'img-' + elm.index());
}
else {
FM.openFile(src.full_path, FM.CURRENT_TAB, elm);
}
}
}
},{
'type': 'keydown',
'propagate': false,
'disable_in_input': false,
'target': document
});
shortcut.add("Enter",function() {
if (FM.isPopupOpened()) {
return FM.handlePopupSubmit();
@ -2357,6 +2511,16 @@ $(document).ready(function() {
'target': document
});
shortcut.add("m",function() {
FM.moveItems();
},{
'type': 'keydown',
'propagate': false,
'disable_in_input': true,
'target': document
});
shortcut.add("shift+F6",function() {
FM.renameItems();
},{

View file

@ -24,6 +24,7 @@ App.Constants.FM_DIRECTORY_NOT_AVAILABLE = '<?=__('Directory not availabl
App.Constants.FM_DONE = '<?=__('Done')?>';
App.Constants.FM_CLOSE = '<?=__('Close')?>';
App.Constants.FM_COPY = '<?=__('Copy') ?>';
App.Constants.FM_MOVE = '<?=__('Move') ?>';
App.Constants.FM_CANCEL = '<?=__('Cancel')?>';
App.Constants.FM_RENAME = '<?=__('Rename')?>';
App.Constants.FM_CHMOD = '<?=__('Change Rights')?>';
@ -38,8 +39,10 @@ App.Constants.FM_YOU_ARE_COPYING = '<?=__('YOU ARE COPYING')?>';
App.Constants.FM_YOU_ARE_REMOVING = '<?=__('YOU ARE REMOVING')?>';
App.Constants.FM_COPY_BULK = '<?=__('Copy files')?>';
App.Constants.FM_MOVE_BULK = '<?=__('Move files')?>';
App.Constants.FM_CONFIRM_COPY = '<?=__('Are you sure you want to copy')?>';
App.Constants.FM_CONFIRM_MOVE = '<?=__('Are you sure you want to move')?>';
App.Constants.FM_CONFIRM_DELETE = '<?=__('Are you sure you want to delete')?>';
App.Constants.FM_INTO_KEYWORD = '<?=__('into')?>';
App.Constants.FM_EXISTING_FILES_WILL_BE_REPLACED= '<?=__('existing files will be replaced')?>';

View file

@ -64,14 +64,18 @@ App.Templates.html = {
<p class="ok" onClick="FM.bulkCopyDo();">'+App.Constants.FM_COPY+'</p>\
</div>\
</div>'],
/*popup_bulk: ['<div class="confirm-box alarm popup-box">\
<div class="message">~!:ACTION~!: <br />~!:TEXT~!</div>\
<div class="results"></div>\
<div class="controls">\
<!-- p class="ok" onClick="FM.popupClose();">'+App.Constants.FM_CLOSE+'</p -->\
<p><img src="/images/in_progress.gif"></p>\
popup_bulk_move: ['<div class="confirm-box copy popup-box">\
<div class="message">'+App.Constants.FM_MOVE_BULK+' (~!:NUMBER_OF_ITEMS~!) '+ App.Constants.FM_INTO_KEYWORD +':</div>\
<div class="actions">\
<input type="text" id="dst-name" value="~!:DST_NAME~!" class="new-title">\
</div>\
</div>'],*/
<div class="results"></div>\
<div class="warning">'+App.Constants.FM_EXISTING_FILES_WILL_BE_REPLACED+'</div>\
<div class="controls">\
<p class="cancel" onClick="FM.popupClose();">'+App.Constants.FM_CANCEL+'</p>\
<p class="ok" onClick="FM.bulkMoveDo();">'+App.Constants.FM_MOVE+'</p>\
</div>\
</div>'],
popup_delete: ['<div class="confirm-box delete popup-box">\
<div class="message">'+App.Constants.FM_CONFIRM_DELETE+' <span class="title">"~!:FILENAME~!"</span>?</div>\
<div class="warning warning-message"></div>\
@ -85,13 +89,27 @@ App.Templates.html = {
<div class="actions">\
<input type="text" id="copy_dest" value="~!:DST_FILENAME~!" class="new-title">\
</div>\
<div class="message">'+App.Constants.FM_EXISTING_FILES_WILL_BE_REPLACED+'</div>\
<div class="warning warning-message"></div>\
<div class="message"></div>\
<div class="warning warning-message">'+App.Constants.FM_EXISTING_FILES_WILL_BE_REPLACED+'</div>\
<div class="controls">\
<p class="cancel" onClick="FM.popupClose();">'+App.Constants.FM_CANCEL+'</p>\
<p class="ok" onClick="FM.confirmCopyItems();">'+App.Constants.FM_COPY+'</p>\
</div>\
</div>'],
popup_move: ['<div class="confirm-box copy popup-box">\
<div class="message">'+App.Constants.FM_MOVE+' <span class="title">"~!:FILENAME~!"</span> '+App.Constants.FM_INTO_KEYWORD+':</div>\
<div class="actions">\
<input type="text" id="dst-name" value="~!:DST_NAME~!" class="new-title">\
</div>\
<div class="message"></div>\
<div class="warning warning-message">'+App.Constants.FM_EXISTING_FILES_WILL_BE_REPLACED+'</div>\
<div class="controls">\
<p class="cancel" onClick="FM.popupClose();">'+App.Constants.FM_CANCEL+'</p>\
<p class="ok" onClick="FM.confirmMove();">'+App.Constants.FM_MOVE+'</p>\
</div>\
</div>'],
popup_rename: ['<div class="confirm-box rename warning">\
<div class="message">'+App.Constants.FM_RENAME+': <span class="title">"~!:FILENAME~!"</span></div>\
<div class="warning warning-message"></div>\