var FM = {}; GLOBAL.ajax_url = '/file_manager/fm_api.php'; FM.DIR_MARKER = ' /'; FM.CURRENT_TAB = ''; FM.CURRENT_A_LINE = -1; FM.CURRENT_B_LINE = -1; FM.BG_TAB = ''; FM.BG_LINE = 0; FM.ROOT_DIR = ''; FM.TAB_A = '.listing-left'; FM.TAB_B = '.listing-right'; FM.TAB_A_MENU = '.menu-left'; FM.TAB_B_MENU = '.menu-right'; FM.ORDER_BOX_A = $('.context-menu.sort-order.tab-a'); FM.ORDER_BOX_B = $('.context-menu.sort-order.tab-b'); FM.ORDER_TAB_A = 'type_asc'; FM.ORDER_TAB_B = 'type_asc'; FM.TAB_A_CURRENT_PATH = GLOBAL.TAB_A__PATH; FM.TAB_B_CURRENT_PATH = GLOBAL.TAB_B_PATH; FM.IMAGES = {'A':[], 'B': []}; FM.IMG_FILETYPES = 'png, jpg, jpeg, gif'; FM.directoryNotAvailable = function(reply) { alert('Directory not available'); // todo: translate } FM.showError = function(type, message) { alert(message); } FM.formatPath = function(dir) { var correct_path = ''; if (dir.substr(0, GLOBAL.ROOT_DIR.length) == GLOBAL.ROOT_DIR) { correct_path = dir; } else { correct_path = GLOBAL.ROOT_DIR + '/' + dir; } correct_path = correct_path.replace(/\/(\/+)/g, '/'); return correct_path; } FM.init = function() { FM.setTabActive(FM.TAB_A); FM.ROOT_DIR = 'undefined' == typeof GLOBAL.ROOT_DIR ? '' : GLOBAL.ROOT_DIR; var dir_A = 'undefined' == typeof GLOBAL.START_DIR_A ? '' : GLOBAL.START_DIR_A; var dir_B = 'undefined' == typeof GLOBAL.START_DIR_B ? '' : GLOBAL.START_DIR_B; FM.TAB_A_CURRENT_PATH = FM.formatPath(GLOBAL.START_DIR_A); FM.TAB_B_CURRENT_PATH = FM.formatPath(GLOBAL.START_DIR_B); FM.open(dir_A, FM.TAB_A, function() { var tab = FM.getTabLetter(FM.CURRENT_TAB); if (FM['CURRENT_' + tab + '_LINE'] == -1) { FM.setActive(0, FM.CURRENT_TAB); } }); FM.open(dir_B, FM.TAB_B, function() { var tab = FM.getTabLetter(FM.CURRENT_TAB); if (FM['CURRENT_' + tab + '_LINE'] == -1) { FM.setActive(0, FM.CURRENT_TAB); } }); } FM.setActive = function(index, box) { var tab = FM.getTabLetter(box); $(box + ' .selected').removeClass('selected'); $(box).find('li:eq('+index+')').addClass('selected'); //$(box).find('li:eq('+index+')').addClass('selected'); //var w_h = $(window).height() - 100; var w_offset = $(box).scrollTop(); var w_height = $(box).height() var pos = $(box).find('li.selected').position(); //console.log(w_height); //console.log(w_offset); //console.log(pos); var wwh = w_height - w_offset + pos.top; //console.info(wwh); console.info((pos.top + w_offset) + ' > ' + w_height); console.log((pos.top + w_offset) > w_height); /* if (pos.top > w_height) { var cur_elm = $(box).find('li.selected').position(); var cur_elm_height = $(box).find('li.selected').height(); //$(box).scrollTo(wwh - 350); $(box).scrollTo(w_offset + cur_elm.top - w_height/2 + cur_elm_height/2); } else {*/ var cur_elm = $(box).find('li.selected').position(); var cur_elm_height = $(box).find('li.selected').height(); $(box).scrollTo(w_offset + cur_elm.top - w_height/2 + cur_elm_height/2); //} FM['CURRENT_' + tab + '_LINE'] = index; FM.CURRENT_TAB = box; } FM.setSecondInactive = function(index, box) { //$(box + ' .active').removeClass('selected-inactive'); $(box).find('li:eq('+index+')').addClass('selected-inactive'); FM.BG_LINE = index; FM.BG_TAB = box; } FM.goUp = function() { var tab = FM.getTabLetter(FM.CURRENT_TAB); var index = FM['CURRENT_' + tab + '_LINE']; index -= 1; if (index < 0) { index = $(FM.CURRENT_TAB).find('li').length - 1; } FM.setActive(index, FM.CURRENT_TAB); } FM.goDown = function() { var tab = FM.getTabLetter(FM.CURRENT_TAB); var index = FM['CURRENT_' + tab + '_LINE']; index += 1; if (index > ($(FM.CURRENT_TAB).find('li').length - 1)) { index = 0; } FM.setActive(index, FM.CURRENT_TAB); } FM.open = function(dir, box, callback) { var tab = FM.getTabLetter(box); FM['TAB_'+tab+'_CURRENT_PATH'] = dir; var params = { 'dir': dir }; App.Ajax.request('cd', params, function(reply) { if (reply.result) { var html = FM.generate_listing(reply.listing, box); } else { FM.directoryNotAvailable(reply); } callback && callback(reply); var current_pwd = dir.trim() == '' ? FM.ROOT_DIR : dir; $('.pwd-tab-' + tab).html(current_pwd); }); } FM.isItemFile = function(item) { return item.type == 'f'; } FM.isItemDir = function(item) { return item.type == 'd'; } FM.getFileType = function(name) { var filetype = name.split('.').pop().toLowerCase(); return filetype.length > 6 || name.indexOf('.') <= 0 ? '' : filetype; } FM.sortItems = function(items, box) { var sorted = []; var files = []; var dirs = []; var combined = [] $.each(items, function(i, o) { if (i > 0) { // i == 0 means first .. element in list if (FM.isItemFile(o)) { files.push(o); } else { dirs.push(o); } } }); // var sort_type = $(box).parents('.window').find('.menu').find('.sort-by-v').val(); var sort_type = FM.ORDER_TAB_A; if($(box).closest('.window').find('.menu').hasClass('menu-right')){ sort_type = FM.ORDER_TAB_B; } switch (sort_type) { case 'type_asc': files.sort(function (a, b) { return a.name.localeCompare( b.name ); }); dirs.sort(function (a, b) { return a.name.localeCompare( b.name ); }); sorted = $.merge(dirs, files); break; case 'type_desc': files.sort(function (a, b) { return a.name.localeCompare( b.name ); }); dirs.sort(function (a, b) { return a.name.localeCompare( b.name ); }); sorted = $.merge(files, dirs); break; case 'size_asc': files.sort(function (a, b) { var size_a = parseInt(a.size, 10); var size_b = parseInt(b.size, 10); return ((size_a < size_b) ? -1 : ((size_a > size_b) ? 1 : 0)); }); sorted = $.merge(dirs, files); break; case 'size_desc': files.sort(function (a, b) { var size_a = parseInt(a.size, 10); var size_b = parseInt(b.size, 10); return ((size_a > size_b) ? -1 : ((size_a < size_b) ? 1 : 0)); }); sorted = $.merge(dirs, files); break; case 'date_asc': sorted = $.merge(dirs, files); sorted.sort(function (a, b) { var time_a = a.time.split('.')[0]; var time_b = b.time.split('.')[0]; var date_a = Date.parseDate(a.date + ' ' + time_a, 'yy-m-d h:i:s'); var date_b = Date.parseDate(b.date + ' ' + time_b, 'yy-m-d h:i:s'); return ((date_a < date_b) ? -1 : ((date_a > date_b) ? 1 : 0)); }); break; case 'date_desc': sorted = $.merge(dirs, files); sorted.sort(function (a, b) { var time_a = a.time.split('.')[0]; var time_b = b.time.split('.')[0]; var date_a = Date.parseDate(a.date + ' ' + time_a, 'yy-m-d h:i:s'); var date_b = Date.parseDate(b.date + ' ' + time_b, 'yy-m-d h:i:s'); return ((date_a > date_b) ? -1 : ((date_a < date_b) ? 1 : 0)); }); break; case 'name_asc': sorted = $.merge(dirs, files); sorted.sort(function (a, b) { return a.name.localeCompare(b.name); }); break; case 'name_desc': sorted = $.merge(dirs, files); sorted.sort(function (a, b) { return a.name.localeCompare(b.name); }); sorted = sorted.reverse(); break; default: files.sort(function (a, b) { return a.name.localeCompare( b.name ); }); dirs.sort(function (a, b) { return a.name.localeCompare( b.name ); }); sorted = $.merge(dirs, files); break; } sorted = $.merge([items[0]], sorted); return sorted; } FM.openFile = function(dir, box, elm) { var tab = FM.getTabLetter(box); FM['TAB_'+tab+'_CURRENT_PATH'] = dir; var elm = $(elm).hasClass('dir') ? $(elm) : $(elm).closest('.dir'); var src = $.parseJSON($(elm).find('.source').val()); var myWindow = window.open('/edit/file/?path=' + src.full_path, '_blank');//, src.full_path, "width=900, height=700"); /*var params = { 'dir': dir }; App.Ajax.request('open_file', params, function(reply) { if (reply.result) { //var html = FM.generate_listing(reply.listing, box); } else { //FM.directoryNotAvailable(reply); alert('Cannot open file'); } });*/ } FM.getTabLetter = function(box) { var tab = 'A'; if (box == FM.TAB_B) { tab = 'B'; } return tab; } FM.generate_listing = function(reply, box) { var tab = FM.getTabLetter(box); FM.IMAGES[tab] = []; var acc = []; if (reply.length == 0) { reply = [{ type: 'd', name: '', permissions: '', owner: '', size: '', time: '', date: '' }]; } var path_arr = FM['TAB_'+tab+'_CURRENT_PATH'].split('/'); path_arr = path_arr.filter(function(v){return v!==''}); path_arr.pop(); var back_path = '/' + path_arr.join('/'); if (back_path == FM.ROOT_DIR || path_arr.length < FM.ROOT_DIR.split('/').length) { back_path = '';//FM.ROOT_DIR; } reply = FM.sortItems(reply, box); $(reply).each(function(i, o) { var path = FM.formatPath(FM['TAB_'+tab+'_CURRENT_PATH']+'/'+o.name); var cl_act = o.type == 'd' ? 'onClick="FM.open(\'' + path + '\', \'' + box + '\')"' : 'onClick="FM.openFile(\''+path+'\', \'' + box + '\', this)"'; if (o.name == '') { path = FM.formatPath(back_path); cl_act = o.type == 'd' ? 'onClick="FM.open(\'' + path + '\', \'' + box + '\')"' : 'onClick="FM.openFile(\''+path+'\', \'' + box + '\', this)"'; o = { type: 'd', name: '..', permissions: '', owner: '', size: '', time: '', date: '' } } var time = o.time.split('.'); time = time[0]; o.full_path = path; o.filetype = FM.getFileType(o.name); if(FM.IMG_FILETYPES.indexOf(o.filetype) >= 0 && o.filetype.length > 0) { FM.IMAGES[tab][FM.IMAGES[tab].length] = {'img': "/view/file/?path=/home/admin/"+o.name+"&raw=true", 'thumb': "/view/file/?path=/home/admin/"+o.name+"&raw=true", 'id': 'img-'+i}; cl_act = 'onClick="FM.fotoramaOpen(\'' + tab + '\', \'img-' + i +'\')"'; } var tpl = Tpl.get('entry_line', 'FM'); tpl.set(':CL_ACTION_1', cl_act); tpl.set(':SOURCE', $.toJSON(o)); tpl.set(':NAME', o.name); tpl.set(':PERMISSIONS', o.permissions); tpl.set(':OWNER', o.owner); tpl.set(':SIZE', o.size); tpl.set(':TIME', time); tpl.set(':DATE', o.date); if (FM.isItemDir(o)) { tpl.set(':ITEM_TYPE', 'filetype-dir'); } else { tpl.set(':ITEM_TYPE', 'filetype-' + o.filetype); } acc.push(tpl.finalize()); }); $(box).html(acc.done()); FM['CURRENT_'+tab+'_LINE'] = -1; } FM.fotoramaOpen = function(tab, img_index) { console.log('index: ' + img_index); $('.fotorama').fotorama({ nav: 'thumbs', arrows: true, click: true, allowfullscreen: true, fit: 'scaledown', thumbfit: 'scaledown', data: FM.IMAGES[tab] }); $('.fotorama').on('fotorama:fullscreenexit', function (e, fotorama) { $('.fotorama').data('fotorama').destroy(); }); $('.fotorama').fotorama().data('fotorama').requestFullScreen(); $('.fotorama').fotorama().data('fotorama').show(img_index); } FM.selectItem = function(item, box) { if (FM.CURRENT_TAB == FM.TAB_A) { FM.setTabActive(FM.TAB_B); $(FM.TAB_B).find('.selected-inactive').removeClass('selected-inactive'); $(FM.TAB_A).find('.selected').addClass('selected-inactive'); } else { FM.setTabActive(FM.TAB_A); $(FM.TAB_A).find('.selected-inactive').removeClass('selected-inactive'); $(FM.TAB_B).find('.selected').addClass('selected-inactive'); } $(box).find('.active').removeClass('active'); $(box).find('.selected').removeClass('selected'); /*if ($(item).hasClass('active')) { $(item).removeClass('active'); } else { $(item).addClass('active'); }*/ if ($(item).hasClass('selected')) { $(item).removeClass('selected'); } else { $(item).addClass('selected'); } FM.setTabActive(box); } FM.switchTab = function() { if (FM.CURRENT_TAB == FM.TAB_A) { FM.setTabActive(FM.TAB_B); $(FM.TAB_B).find('.selected-inactive').removeClass('selected-inactive'); $(FM.TAB_A).find('.selected').addClass('selected-inactive'); } else { FM.setTabActive(FM.TAB_A); $(FM.TAB_A).find('.selected-inactive').removeClass('selected-inactive'); $(FM.TAB_B).find('.selected').addClass('selected-inactive'); } var tab = FM.getTabLetter(FM.CURRENT_TAB); if (FM['CURRENT_' + tab + '_LINE'] == -1) { FM.setActive(0, FM.CURRENT_TAB); } } FM.setTabActive = function(box) { FM.CURRENT_TAB = box; $('.window.active').removeClass('active'); $('.listing-left.active').removeClass('active'); $('.listing-right.active').removeClass('active'); $(FM.CURRENT_TAB).addClass('active'); $(FM.CURRENT_TAB).closest('.window').addClass('active'); } FM.confirmRename = function() { var tab = FM.getTabLetter(FM.CURRENT_TAB); var box = FM['TAB_' + tab]; var selected = $(FM['TAB_' + tab] ).find('.dir.selected'); if (!selected) { return alert('No file selected'); } var src = selected.find('.source').val(); src = $.parseJSON(src); var target_name = $('#rename-title').val(); if (target_name.trim().length == 0) { return alert('Cannot be renamed.'); } var params = { item: src.name, target_name: target_name, dir: FM['TAB_' + tab + '_CURRENT_PATH'] }; App.Ajax.request('rename_file', params, function(reply) { if (reply.result) { FM.open(FM['TAB_' + tab + '_CURRENT_PATH'], box); } else { FM.showError('rename-items', reply.message); } FM.popupClose(); }); } FM.renameItems = function() { var tab = FM.getTabLetter(FM.CURRENT_TAB); var selected = $(FM['TAB_' + tab] ).find('.dir.selected'); if (selected.length == 0) { return alert('No file selected'); } var src = selected.find('.source').val(); src = $.parseJSON(src); var tpl = Tpl.get('popup_rename', 'FM'); tpl.set(':FILENAME', src.name); FM.popupOpen(tpl.finalize()); /*var tab = FM.getTabLetter(FM.CURRENT_TAB); var box = FM.CURRENT_TAB; var delete_list = $(box).find('.active'); if (delete_list.length == 0) { return FM.showError('hint', 'No selected items'); } $(delete_list).each(function(i, o) { var opt = $(o).find('.source').val(); opt = $.parseJSON(opt); prompt('Rename "' + opt.name + '" to:'); });*/ } FM.popupOpen = function(html) { $('