file_manager.js 63 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287
  1. var FM = {};
  2. FM.Env = {};
  3. GLOBAL.ajax_url = '/file_manager/fm_api.php';
  4. FM.DIR_MARKER = '  /';
  5. FM.errorMessageTimeout = 3500;
  6. FM.CURRENT_TAB = '';
  7. FM.CURRENT_A_LINE = -1;
  8. FM.CURRENT_B_LINE = -1;
  9. FM.BG_TAB = '';
  10. FM.BG_LINE = 0;
  11. FM.ROOT_DIR = '';
  12. FM.TAB_A = '.listing-left';
  13. FM.TAB_B = '.listing-right';
  14. FM.TAB_A_MENU = '.menu-left';
  15. FM.TAB_B_MENU = '.menu-right';
  16. FM.ORDER_BOX_A = $('.context-menu.sort-order.tab-a');
  17. FM.ORDER_BOX_B = $('.context-menu.sort-order.tab-b');
  18. FM.ORDER_TAB_A = 'type_asc';
  19. FM.ORDER_TAB_B = 'type_asc';
  20. FM.Env.RELOAD_IN_TIME = false;
  21. FM.TAB_A_CURRENT_PATH = GLOBAL.TAB_A__PATH;
  22. FM.TAB_B_CURRENT_PATH = GLOBAL.TAB_B_PATH;
  23. FM.IMAGES = {'A':[], 'B': []};
  24. FM.RELOAD_IN_TIME_SECONDS = 3;
  25. FM.IMG_FILETYPES = 'png, jpg, jpeg, gif';
  26. FM.SUPPORTED_ARCHIEVES = [
  27. 'zip', 'tgz', 'tar.gz',
  28. 'gzip', 'tbz', 'tar.bz',
  29. 'gz', 'zip', 'tar', 'rar'
  30. ];
  31. FM.EDITABLE_FILETYPES = [
  32. 'txt', 'php', 'js', 'html'
  33. ];
  34. FM.EDITABLE_MIMETYPES = [
  35. 'application/emma+xml',
  36. 'application/epp+xml',
  37. 'application/javascript',
  38. 'application/json',
  39. 'application/jsonml+json ',
  40. 'application/lost+xml',
  41. 'application/marc',
  42. 'application/msword',
  43. 'application/sru+xml',
  44. 'application/vnd.android.package-archive',
  45. 'text/csv',
  46. 'text/css',
  47. 'text/javascript',
  48. 'text/html',
  49. 'text/x-java-source'
  50. ];
  51. FM.EDITABLE_MIMETYPES_MASKS = [
  52. /(.)*text(.)*/,
  53. /(.)*inode(.)*/
  54. ];
  55. FM.preselectedItems = {'A': [], 'B': []};
  56. FM.directoryNotAvailable = function(reply) {
  57. var tpl = Tpl.get('popup_alert', 'FM');
  58. tpl.set(':TEXT', App.Constants.FM_DIRECTORY_NOT_AVAILABLE);
  59. FM.popupOpen(tpl.finalize());
  60. }
  61. FM.showError = function(type, message) {
  62. if (FM.isPopupOpened()) {
  63. var ref = FM.getPopupReference();
  64. if (ref.find('.warning-message').length > 0) {
  65. ref.find('.warning-message').html('<p class="msg-item">' + message + '</p>');
  66. ref.find('.warning-message').show();
  67. clearInterval(FM.Env.errorMessageHideTimeout);
  68. FM.Env.errorMessageHideTimeout =
  69. setTimeout(function() {
  70. ref.find('.warning-message').fadeOut();
  71. }, FM.errorMessageTimeout);
  72. return;
  73. }
  74. }
  75. else {
  76. FM.popupClose();
  77. var tpl = Tpl.get('popup_alert', 'FM');
  78. tpl.set(':TEXT', message);
  79. FM.popupOpen(tpl.finalize());
  80. }
  81. }
  82. FM.formatPath = function(dir) {
  83. var correct_path = '';
  84. if (dir.substr(0, GLOBAL.ROOT_DIR.length) == GLOBAL.ROOT_DIR) {
  85. correct_path = dir;
  86. }
  87. else {
  88. correct_path = GLOBAL.ROOT_DIR + '/' + dir;
  89. }
  90. correct_path = correct_path.replace(/\/(\/+)/g, '/');
  91. return correct_path;
  92. }
  93. FM.init = function() {
  94. FM.setTabActive(FM.TAB_A);
  95. FM.ROOT_DIR = 'undefined' == typeof GLOBAL.ROOT_DIR ? '' : GLOBAL.ROOT_DIR;
  96. var dir_A = 'undefined' == typeof GLOBAL.START_DIR_A ? '' : GLOBAL.START_DIR_A;
  97. var dir_B = 'undefined' == typeof GLOBAL.START_DIR_B ? '' : GLOBAL.START_DIR_B;
  98. FM.TAB_A_CURRENT_PATH = FM.formatPath(GLOBAL.START_DIR_A);
  99. FM.TAB_B_CURRENT_PATH = FM.formatPath(GLOBAL.START_DIR_B);
  100. FM.open(dir_A, FM.TAB_A, function() {
  101. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  102. if (FM['CURRENT_' + tab + '_LINE'] == -1) {
  103. FM.setActive(0, FM.CURRENT_TAB);
  104. }
  105. });
  106. FM.open(dir_B, FM.TAB_B, function() {
  107. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  108. if (FM['CURRENT_' + tab + '_LINE'] == -1) {
  109. FM.setActive(0, FM.CURRENT_TAB);
  110. }
  111. });
  112. }
  113. FM.setActive = function(index, box) {
  114. var tab = FM.getTabLetter(box);
  115. $(box + ' .selected').removeClass('selected');
  116. $(box).find('li.dir:eq('+index+')').addClass('selected');
  117. $(box + ' .active').removeClass('active');
  118. $(box).find('li.dir:eq('+index+')').addClass('active');
  119. //$(box).find('li:eq('+index+')').addClass('selected');
  120. //var w_h = $(window).height() - 100;
  121. var w_offset = $(box).scrollTop();
  122. var w_height = $(box).height()
  123. var pos = $(box).find('li.selected').position();
  124. //console.log(w_height);
  125. //console.log(w_offset);
  126. //console.log(pos);
  127. var wwh = w_height - w_offset + pos.top;
  128. //console.info(wwh);
  129. //console.info((pos.top + w_offset) + ' > ' + w_height);
  130. //console.log((pos.top + w_offset) > w_height);
  131. /* if (pos.top > w_height) {
  132. var cur_elm = $(box).find('li.selected').position();
  133. var cur_elm_height = $(box).find('li.selected').height();
  134. //$(box).scrollTo(wwh - 350);
  135. $(box).scrollTo(w_offset + cur_elm.top - w_height/2 + cur_elm_height/2);
  136. }
  137. else {*/
  138. var cur_elm = $(box).find('li.selected').position();
  139. var cur_elm_height = $(box).find('li.selected').height();
  140. $(box).scrollTo(w_offset + cur_elm.top - w_height/2 + cur_elm_height/2);
  141. //}
  142. FM['CURRENT_' + tab + '_LINE'] = index;
  143. FM.CURRENT_TAB = box;
  144. $(FM.preselectedItems[tab]).each(function(i, index) {
  145. $(box).find('.dir:eq(' + index + ')').addClass('selected');
  146. });
  147. var src = $(box).find('.dir:eq('+index+')').find('.source').val();
  148. src = $.parseJSON(src);
  149. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  150. if (FM.itemIsArchieve(src)) {
  151. if($('.menu-'+tab+' .archive.button').first().is(':visible'))
  152. $('.menu-'+tab+' .extract-btn').first().show();
  153. else
  154. $('.menu-'+tab+' .extract-btn.small').show();
  155. }
  156. else {
  157. $('.menu-'+tab+' .extract-btn').hide();
  158. }
  159. }
  160. FM.setSecondInactive = function(index, box) {
  161. //$(box + ' .active').removeClass('selected-inactive');
  162. $(box).find('li:eq('+index+')').addClass('selected-inactive');
  163. FM.BG_LINE = index;
  164. FM.BG_TAB = box;
  165. }
  166. FM.goBackwards = function() {
  167. if (FM.isPopupOpened()) {
  168. return;
  169. }
  170. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  171. var box = FM['TAB_' + tab];
  172. $(box).find('.dir:eq(0)').find('.source').val();
  173. var src = $.parseJSON($(box).find('.dir:eq(0)').find('.source').val());
  174. var dir = src.full_path;
  175. FM.open(dir, box);
  176. }
  177. FM.goToTop = function() {
  178. if (FM.isPopupOpened()) {
  179. return;
  180. }
  181. if (FM.isPopupOpened()) {
  182. return;
  183. }
  184. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  185. var index = 0;
  186. FM.setActive(index, FM.CURRENT_TAB);
  187. }
  188. FM.goToBottom = function() {
  189. if (FM.isPopupOpened()) {
  190. return;
  191. }
  192. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  193. var index = $(FM.CURRENT_TAB).find('.dir').length - 1;
  194. FM.setActive(index, FM.CURRENT_TAB);
  195. }
  196. FM.goUp = function() {
  197. if (FM.isPopupOpened()) {
  198. return;
  199. }
  200. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  201. var index = FM['CURRENT_' + tab + '_LINE'];
  202. index -= 1;
  203. /*if (index < 0) {
  204. index = $(FM.CURRENT_TAB).find('li.dir').length - 1;
  205. }*/
  206. if (index < 0) {
  207. index = 0;
  208. }
  209. FM.setActive(index, FM.CURRENT_TAB);
  210. }
  211. FM.goDown = function() {
  212. if (FM.isPopupOpened()) {
  213. return;
  214. }
  215. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  216. var index = FM['CURRENT_' + tab + '_LINE'];
  217. index += 1;
  218. /*if (index > ($(FM.CURRENT_TAB).find('li.dir').length - 1)) {
  219. index = 0;
  220. }*/
  221. if (index > ($(FM.CURRENT_TAB).find('li.dir').length - 1)) {
  222. index = $(FM.CURRENT_TAB).find('li.dir').length - 1;
  223. }
  224. FM.setActive(index, FM.CURRENT_TAB);
  225. }
  226. // reloads provided tab
  227. // reloads opposite tab if its needed
  228. FM.openAndSync = function(dir, box, callback) {
  229. var tab = FM.getTabLetter(box);
  230. var opposite_tab = 'A';
  231. if (tab == 'A') {
  232. opposite_tab = 'B';
  233. }
  234. var oppositeSyncNeeded = false;
  235. if (FM.TAB_A_CURRENT_PATH == FM.TAB_B_CURRENT_PATH) {
  236. oppositeSyncNeeded = true;
  237. }
  238. if (oppositeSyncNeeded) {
  239. FM.open(dir, FM['TAB_' + opposite_tab], callback);
  240. return FM.open(dir, box, callback);
  241. }
  242. else {
  243. return FM.open(dir, box, callback);
  244. }
  245. }
  246. FM.open = function(dir, box, callback) {
  247. var tab = FM.getTabLetter(box);
  248. FM['TAB_'+tab+'_CURRENT_PATH'] = dir;
  249. var params = {
  250. 'dir': dir
  251. };
  252. App.Ajax.request('cd', params, function(reply) {
  253. //var tab = FM.getTabLetter(FM.CURRENT_TAB);
  254. FM.preselectedItems[tab] = [];
  255. if (reply.result == true) {
  256. var html = FM.generate_listing(reply.listing, box);
  257. }
  258. else {
  259. FM.directoryNotAvailable(reply);
  260. }
  261. callback && callback(reply);
  262. var current_pwd = dir.trim() == '' ? FM.ROOT_DIR : dir;
  263. FM.updateTopLevelPathBar(box, tab, current_pwd);
  264. var path_a = FM['TAB_A_CURRENT_PATH'] == '' ? FM.ROOT_DIR : FM['TAB_A_CURRENT_PATH'];
  265. var path_b = FM['TAB_B_CURRENT_PATH'] == '' ? FM.ROOT_DIR : FM['TAB_B_CURRENT_PATH'];
  266. var url = '/list/directory/?dir_a='+path_a+'&dir_b='+path_b;
  267. history.pushState({}, null, url);
  268. if (FM['CURRENT_' + tab + '_LINE'] == -1) {
  269. FM.setActive(0, FM.CURRENT_TAB);
  270. }
  271. });
  272. }
  273. FM.updateTopLevelPathBar = function(box, tab, path) {
  274. var formattedPath = [];
  275. path = path.replace(FM.ROOT_DIR, '');
  276. formattedPath.push('<a href="javascript:void(0)" onClick="FM.open(\''+FM.ROOT_DIR+'\', \''+box+'\')">'+FM.ROOT_DIR+'</span>');
  277. $.each(path.split('/'), function(i, part) {
  278. if (part.trim() == '') {
  279. return;
  280. }
  281. formattedPath.push('<a href="javascript:void(0)" onClick="FM.open(\''+part+'\', \''+box+'\')">'+part+'</span>');
  282. });
  283. $('.pwd-tab-' + tab).html(formattedPath.join(' / '));
  284. }
  285. FM.isItemFile = function(item) {
  286. return item.type == 'f';
  287. }
  288. FM.isItemDir = function(item) {
  289. return item.type == 'd';
  290. }
  291. FM.isItemLink = function(item) {
  292. return item.type == 'l';
  293. }
  294. FM.getFileType = function(name) {
  295. var filetype = name.split('.').pop().toLowerCase();
  296. return filetype.length > 6 || name.indexOf('.') <= 0 ? '' : filetype;
  297. }
  298. FM.sortItems = function(items, box) {
  299. var sorted = [];
  300. var files = [];
  301. var dirs = [];
  302. var combined = []
  303. $.each(items, function(i, o) {
  304. if (i > 0) { // i == 0 means first .. element in list
  305. if (FM.isItemFile(o) || FM.isItemLink(o)) {
  306. files.push(o);
  307. }
  308. else {
  309. dirs.push(o);
  310. }
  311. }
  312. });
  313. // var sort_type = $(box).parents('.window').find('.menu').find('.sort-by-v').val();
  314. var sort_type = FM.ORDER_TAB_A;
  315. if($(box).closest('.window').find('.menu').hasClass('menu-right')){
  316. sort_type = FM.ORDER_TAB_B;
  317. }
  318. switch (sort_type) {
  319. case 'type_asc':
  320. files.sort(function (a, b) {
  321. return a.name.localeCompare( b.name );
  322. });
  323. dirs.sort(function (a, b) {
  324. return a.name.localeCompare( b.name );
  325. });
  326. sorted = $.merge(dirs, files);
  327. break;
  328. case 'type_desc':
  329. files.sort(function (a, b) {
  330. return a.name.localeCompare( b.name );
  331. });
  332. dirs.sort(function (a, b) {
  333. return a.name.localeCompare( b.name );
  334. });
  335. sorted = $.merge(files, dirs);
  336. break;
  337. case 'size_asc':
  338. files.sort(function (a, b) {
  339. var size_a = parseInt(a.size, 10);
  340. var size_b = parseInt(b.size, 10);
  341. return ((size_a < size_b) ? -1 : ((size_a > size_b) ? 1 : 0));
  342. });
  343. sorted = $.merge(dirs, files);
  344. break;
  345. case 'size_desc':
  346. files.sort(function (a, b) {
  347. var size_a = parseInt(a.size, 10);
  348. var size_b = parseInt(b.size, 10);
  349. return ((size_a > size_b) ? -1 : ((size_a < size_b) ? 1 : 0));
  350. });
  351. sorted = $.merge(dirs, files);
  352. break;
  353. case 'date_asc':
  354. sorted = $.merge(dirs, files);
  355. sorted.sort(function (a, b) {
  356. var time_a = a.time.split('.')[0];
  357. var time_b = b.time.split('.')[0];
  358. var date_a = Date.parseDate(a.date + ' ' + time_a, 'yy-m-d h:i:s');
  359. var date_b = Date.parseDate(b.date + ' ' + time_b, 'yy-m-d h:i:s');
  360. return ((date_a < date_b) ? -1 : ((date_a > date_b) ? 1 : 0));
  361. });
  362. break;
  363. case 'date_desc':
  364. sorted = $.merge(dirs, files);
  365. sorted.sort(function (a, b) {
  366. var time_a = a.time.split('.')[0];
  367. var time_b = b.time.split('.')[0];
  368. var date_a = Date.parseDate(a.date + ' ' + time_a, 'yy-m-d h:i:s');
  369. var date_b = Date.parseDate(b.date + ' ' + time_b, 'yy-m-d h:i:s');
  370. return ((date_a > date_b) ? -1 : ((date_a < date_b) ? 1 : 0));
  371. });
  372. break;
  373. case 'name_asc':
  374. sorted = $.merge(dirs, files);
  375. sorted.sort(function (a, b) {
  376. return a.name.localeCompare(b.name);
  377. });
  378. break;
  379. case 'name_desc':
  380. sorted = $.merge(dirs, files);
  381. sorted.sort(function (a, b) {
  382. return a.name.localeCompare(b.name);
  383. });
  384. sorted = sorted.reverse();
  385. break;
  386. default:
  387. files.sort(function (a, b) {
  388. return a.name.localeCompare( b.name );
  389. });
  390. dirs.sort(function (a, b) {
  391. return a.name.localeCompare( b.name );
  392. });
  393. sorted = $.merge(dirs, files);
  394. break;
  395. }
  396. sorted = $.merge([items[0]], sorted);
  397. return sorted;
  398. }
  399. FM.isFileEditable = function(src, mime) {
  400. if ('undefined' == typeof src.filetype) {
  401. return false;
  402. }
  403. if ($.inArray(src.filetype, FM.EDITABLE_FILETYPES) != -1) {
  404. return true;
  405. }
  406. var mime_type = mime.split(';');
  407. mime_type = mime_type[0];
  408. if ($.inArray(mime_type, FM.EDITABLE_MIMETYPES) != -1) {
  409. return true;
  410. }
  411. var editable = false;
  412. $.each(FM.EDITABLE_MIMETYPES_MASKS, function(i, mask) {
  413. if (mime_type.search(mask) != -1) {
  414. editable = true;
  415. }
  416. });
  417. return editable;
  418. }
  419. FM.editFileFromSubcontext = function(elm) {
  420. var elm = $(elm).hasClass('dir') ? $(elm) : $(elm).closest('.dir');
  421. var src = $.parseJSON($(elm).find('.source').val());
  422. var myWindow = window.open('/edit/file/?path=' + src.full_path, '_blank');//, src.full_path, "width=900, height=700");
  423. }
  424. FM.downloadFileFromSubcontext = function(elm) {
  425. var elm = $(elm).hasClass('dir') ? $(elm) : $(elm).closest('.dir');
  426. var src = $.parseJSON($(elm).find('.source').val());
  427. var path = src.full_path;
  428. var win = window.open('/download/file/?path=' + path, '_blank');
  429. win.focus();
  430. }
  431. FM.openFile = function(dir, box, elm) {
  432. var tab = FM.getTabLetter(box);
  433. //FM['TAB_'+tab+'_CURRENT_PATH'] = dir;
  434. var elm = $(elm).hasClass('dir') ? $(elm) : $(elm).closest('.dir');
  435. var src = $.parseJSON($(elm).find('.source').val());
  436. if (FM.isItemPseudo(src)) {
  437. return FM.open(FM['TAB_' + tab + '_CURRENT_PATH'], FM['TAB_' + tab]);
  438. }
  439. var params = {
  440. dir: src.full_path
  441. };
  442. App.Ajax.request('check_file_type', params, function(reply) {
  443. if (reply.result) {
  444. if (FM.isFileEditable(src, reply.data)) {
  445. var myWindow = window.open('/edit/file/?path=' + src.full_path, '_blank');//, src.full_path, "width=900, height=700");
  446. }
  447. else {
  448. var path = src.full_path;
  449. var win = window.open('/download/file/?path=' + path, '_blank');
  450. //win.focus();
  451. }
  452. }
  453. else {
  454. // force download file
  455. var path = src.full_path;
  456. var win = window.open('/download/file/?path=' + path, '_blank');
  457. //win.focus();
  458. }
  459. });
  460. }
  461. FM.getTabLetter = function(box) {
  462. var tab = 'A';
  463. if (box == FM.TAB_B) {
  464. tab = 'B';
  465. }
  466. return tab;
  467. }
  468. FM.toggleSubContextMenu = function(ref) {
  469. $(ref).find('.subcontext-menu').toggleClass('subcontext-menu-hidden');
  470. }
  471. FM.generate_listing = function(reply, box) {
  472. var tab = FM.getTabLetter(box);
  473. FM.IMAGES[tab] = [];
  474. var acc = [];
  475. if (reply.length == 0) {
  476. reply = [{
  477. type: 'd',
  478. name: '',
  479. permissions: '',
  480. owner: '',
  481. size: '',
  482. time: '',
  483. date: ''
  484. }];
  485. }
  486. var path_arr = FM['TAB_'+tab+'_CURRENT_PATH'].split('/');
  487. path_arr = path_arr.filter(function(v){return v!==''});
  488. path_arr.pop();
  489. var back_path = '/' + path_arr.join('/');
  490. if (back_path == FM.ROOT_DIR || path_arr.length < FM.ROOT_DIR.split('/').length) {
  491. back_path = '';//FM.ROOT_DIR;
  492. }
  493. reply = FM.sortItems(reply, box);
  494. $(reply).each(function(i, o) {
  495. var path = FM.formatPath(FM['TAB_'+tab+'_CURRENT_PATH']+'/'+o.name);
  496. var cl_act = o.type == 'd' ? 'onClick="FM.open(\'' + path + '\', \'' + box + '\')"' : 'onClick="FM.openFile(\''+path+'\', \'' + box + '\', this)"';
  497. //var cl_act = o.type == 'd' ? 'onDblClick="FM.open(\'' + path + '\', \'' + box + '\')"' : 'onDblClick="FM.openFile(\''+path+'\', \'' + box + '\', this)"';
  498. //var cl_act = '';
  499. if (o.name == '') {
  500. path = FM.formatPath(back_path);
  501. cl_act = o.type == 'd' ? 'onClick="FM.open(\'' + path + '\', \'' + box + '\')"' : 'onClick="FM.openFile(\''+path+'\', \'' + box + '\', this)"';
  502. o = {
  503. type: 'd',
  504. name: '..',
  505. permissions: '',
  506. owner: '',
  507. size: '',
  508. time: '',
  509. date: ''
  510. }
  511. }
  512. var time = o.time.split('.');
  513. time = time[0];
  514. var psDate = new Date(o.date);
  515. o.full_path = path;
  516. o.filetype = FM.getFileType(o.name);
  517. if(FM.IMG_FILETYPES.indexOf(o.filetype) >= 0 && o.filetype.length > 0) {
  518. FM.IMAGES[tab][FM.IMAGES[tab].length++] =
  519. {
  520. 'img': "/view/file/?path="+o.full_path+"&raw=true",
  521. 'thumb': "/view/file/?path="+o.full_path+"&raw=true",
  522. 'id': 'img-'+i
  523. };
  524. cl_act = 'onClick="FM.fotoramaOpen(\'' + tab + '\', \'img-' + i +'\')"';
  525. }
  526. var t_index = tab + '_' + i;
  527. var tpl = Tpl.get('entry_line', 'FM');
  528. tpl.set(':CL_ACTION_1', cl_act);
  529. tpl.set(':SOURCE', $.toJSON(o));
  530. tpl.set(':NAME', o.name);
  531. tpl.set(':PERMISSIONS', o.permissions);
  532. tpl.set(':OWNER', o.owner);
  533. tpl.set(':SIZE_VALUE', o.type == 'f' ? FM.humanFileSizeValue(o.size) : '&nbsp;');
  534. tpl.set(':SIZE_UNIT', o.type == 'f' ? FM.humanFileSizeUnit(o.size) : '&nbsp;');
  535. tpl.set(':TIME', (psDate.getFullYear() != new Date().getFullYear()) ? psDate.getFullYear() || "" : time);
  536. tpl.set(':DATE', o.date.trim() != '' ? App.Constants.FM_TRANSLATED_DATES[psDate.format('mmm')] + psDate.format(' d'): '&nbsp;'/*o.date*/);
  537. if (o.name == '..' || o.type == 'd') {
  538. tpl.set(':SUBMENU_CLASS', 'hidden');
  539. }
  540. else {
  541. tpl.set(':SUBMENU_CLASS', '');
  542. }
  543. /*tpl.set(':index', t_index);
  544. tpl.set(':index1', t_index);
  545. tpl.set(':index2', t_index);*/
  546. if (FM.isItemDir(o)) {
  547. tpl.set(':ITEM_TYPE', 'filetype-dir');
  548. }
  549. else if (FM.isItemLink(o)) {
  550. tpl.set(':ITEM_TYPE', 'filetype-link');
  551. }
  552. else {
  553. tpl.set(':ITEM_TYPE', 'filetype-' + o.filetype);
  554. }
  555. acc.push(tpl.finalize());
  556. });
  557. $(box).html(acc.done());
  558. ////////
  559. /*if (FM['CURRENT_'+tab+'_LINE'] > -1 && $(box).find('.dir:eq(' + FM['CURRENT_'+tab+'_LINE'] + ')').lrngth > 0) {
  560. }
  561. else {
  562. FM['CURRENT_'+tab+'_LINE'] = -1;
  563. }*/
  564. FM['CURRENT_'+tab+'_LINE'] = -1;
  565. }
  566. FM.toggleCheck = function(uid) {
  567. var ref = $('#check' + uid);
  568. if (ref.length > 0) {
  569. $(ref).hasClass('checkbox-selected') ? $(ref).addClass('checkbox-selected') : $(ref).removeClass('checkbox-selected');
  570. }
  571. }
  572. FM.fotoramaOpen = function(tab, img_index) {
  573. $('.fotorama').fotorama({
  574. nav: 'thumbs',
  575. arrows: true,
  576. click: true,
  577. allowfullscreen: true,
  578. fit: 'scaledown',
  579. thumbfit: 'scaledown',
  580. data: FM.IMAGES[tab]
  581. });
  582. $('.fotorama').on('fotorama:fullscreenexit', function (e, fotorama) {
  583. $('.fotorama').data('fotorama').destroy();
  584. });
  585. $('.fotorama').fotorama().data('fotorama').requestFullScreen();
  586. $('.fotorama').fotorama().data('fotorama').show(img_index);
  587. }
  588. FM.bulkOperation = function(ref) {
  589. //console.log(ref);
  590. var box = $(ref).parents('.menu').hasClass('menu-left') ? FM.setTabActive(FM.TAB_A, 'skip_highlights') : FM.setTabActive(FM.TAB_B, 'skip_highlights');
  591. var operation = $(ref).val();
  592. if ('function' == typeof FM[operation]) {
  593. FM[operation] && FM[operation](ref);
  594. }
  595. $(ref).find('option[value=-1]').attr('selected', true);
  596. }
  597. FM.checkBulkStatus = function(bulkStatuses, acc) {
  598. var status = false;
  599. var msg = '';
  600. if (bulkStatuses.length == acc.length) {
  601. $.each(bulkStatuses, function(i, o) {
  602. if (o != true) {
  603. msg += '<p>'+o+'</p>';
  604. }
  605. });
  606. if (msg == '') {
  607. status = true;
  608. }
  609. }
  610. if (status == true) {
  611. $('#popup .results').html(App.Constants.FM_DONE);
  612. $('.controls').html('<p class="ok" onClick="FM.bulkPopupClose();">'+App.Constants.FM_DONE+'</p>');
  613. }
  614. else {
  615. $('#popup .results').html(msg);
  616. $('.controls').html('<p class="ok" onClick="FM.bulkPopupClose();">'+App.Constants.FM_DONE+'</p>');
  617. }
  618. }
  619. FM.bulkPopupClose = function() {
  620. FM.popupClose();
  621. FM.open(FM['TAB_A_CURRENT_PATH'], FM['TAB_A']);
  622. FM.open(FM['TAB_B_CURRENT_PATH'], FM['TAB_B']);
  623. }
  624. FM.humanFileSize = function(size) {
  625. var sizes = [' Bytes', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB'];
  626. for (var i = 1; i < sizes.length; i++) {
  627. if (size < Math.pow(1024, i)) return (Math.round((size/Math.pow(1024, i-1))*100)/100) + sizes[i-1];
  628. }
  629. return size;
  630. }
  631. FM.humanFileSizeValue = function(size) {
  632. var sizes = ['b', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
  633. for (var i = 1; i < sizes.length; i++) {
  634. if (size < Math.pow(1024, i)) return (Math.round((size/Math.pow(1024, i-1))*100)/100);
  635. }
  636. return size;
  637. }
  638. FM.humanFileSizeUnit = function(size) {
  639. if (!parseInt(size)) return "&nbsp;";
  640. var sizes = ['b', ' kb', ' Mb', ' Gb', ' Tb', ' Pb', ' Eb', ' Zb', ' Yb'];
  641. for (var i = 1; i < sizes.length; i++) {
  642. if (size < Math.pow(1024, i)) return sizes[i-1];
  643. }
  644. return sizes[i];
  645. }
  646. FM.bulkCopyDo = function() {
  647. var acc = $(FM.CURRENT_TAB).find('.dir.selected');
  648. if (acc.length > 0) {
  649. //FM.popupClose();
  650. var cfr_html = '';
  651. var numberOfItems = 0;
  652. $.each(acc, function(i, o) {
  653. var ref = $(o);
  654. var src = $(ref).find('.source').val();
  655. src = $.parseJSON(src);
  656. if (!FM.isItemPseudo(o)) {
  657. cfr_html += '<div>'+src.name+'</div>';
  658. numberOfItems++;
  659. }
  660. });
  661. var bulkStatuses = [];
  662. $.each(acc, function(i, o) {
  663. var ref = $(o);
  664. var src = $(ref).find('.source').val();
  665. src = $.parseJSON(src);
  666. if (FM.isItemPseudo(src)) {
  667. //cfr_html += '<div>'+src.name+'</div>';
  668. return;
  669. }
  670. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  671. var opposite_tab = 'A';
  672. if (tab == 'A') {
  673. opposite_tab = 'B';
  674. }
  675. if (FM.isItemPseudo(src)) {
  676. /*return FM.displayError(
  677. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  678. );*/
  679. return;
  680. }
  681. var dest = FM['TAB_' + opposite_tab + '_CURRENT_PATH' ];
  682. if (dest == '') {
  683. dest = GLOBAL.ROOT_DIR;
  684. }
  685. var action = FM.isItemFile(src) ? 'copy_file' : 'copy_directory';
  686. var params = {
  687. item: src.full_path,
  688. filename: src.name,
  689. dir: FM['TAB_' + tab + '_CURRENT_PATH'],
  690. dir_target: dest
  691. };
  692. App.Ajax.request(action, params, function(reply) {
  693. if (reply.result == true) {
  694. bulkStatuses.push(true);
  695. }
  696. else {
  697. //FM.showError('copy-items', reply.message);
  698. bulkStatuses.push(reply.message);
  699. }
  700. FM.checkBulkStatus(bulkStatuses, acc);
  701. });
  702. });
  703. }
  704. }
  705. FM.bulkCopy = function() {
  706. var acc = $(FM.CURRENT_TAB).find('.dir.selected');
  707. if (acc.length > 0) {
  708. FM.popupClose();
  709. var cfr_html = '';
  710. var numberOfItems = 0;
  711. $.each(acc, function(i, o) {
  712. var ref = $(o);
  713. var src = $(ref).find('.source').val();
  714. src = $.parseJSON(src);
  715. if (!FM.isItemPseudo(o)) {
  716. cfr_html += '<div>'+src.name+'</div>';
  717. numberOfItems++;
  718. }
  719. });
  720. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  721. var opposite_tab = 'A';
  722. if (tab == 'A') {
  723. opposite_tab = 'B';
  724. }
  725. var dest = FM['TAB_' + opposite_tab + '_CURRENT_PATH' ];
  726. if (dest == '') {
  727. dest = GLOBAL.ROOT_DIR;
  728. }
  729. var tpl = Tpl.get('popup_bulk_copy', 'FM');
  730. tpl.set(':NUMBER_OF_ITEMS', numberOfItems);
  731. tpl.set(':DST_FILENAME', dest);
  732. //popup_bulk_copy
  733. FM.popupOpen(tpl.finalize());
  734. }
  735. }
  736. FM.bulkRemoveDo = function() {
  737. var acc = $(FM.CURRENT_TAB).find('.dir.selected');
  738. if (acc.length > 0) {
  739. //FM.popupClose();
  740. var cfr_html = '';
  741. $.each(acc, function(i, o) {
  742. var ref = $(o);
  743. var src = $(ref).find('.source').val();
  744. src = $.parseJSON(src);
  745. if (!FM.isItemPseudo(o)) {
  746. cfr_html += '<div>'+src.name+'</div>';
  747. }
  748. });
  749. var bulkStatuses = [];
  750. $.each(acc, function(i, o) {
  751. var ref = $(o);
  752. var src = $(ref).find('.source').val();
  753. src = $.parseJSON(src);
  754. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  755. var opposite_tab = 'A';
  756. if (tab == 'A') {
  757. opposite_tab = 'B';
  758. }
  759. if (FM.isItemPseudo(src)) {
  760. return;
  761. /*return FM.displayError(
  762. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  763. );*/
  764. }
  765. var dest = FM['TAB_' + opposite_tab + '_CURRENT_PATH' ];
  766. if (dest == '') {
  767. dest = GLOBAL.ROOT_DIR;
  768. }
  769. var params = {
  770. item: src.full_path,
  771. dir: FM['TAB_' + tab + '_CURRENT_PATH']
  772. };
  773. App.Ajax.request('delete_files', params, function(reply) {
  774. if (reply.result == true) {
  775. bulkStatuses.push(true);
  776. }
  777. else {
  778. //FM.showError('copy-items', reply.message);
  779. bulkStatuses.push(reply.message);
  780. }
  781. FM.checkBulkStatus(bulkStatuses, acc);
  782. });
  783. });
  784. }
  785. }
  786. FM.bulkRemove = function() {
  787. var acc = $(FM.CURRENT_TAB).find('.dir.selected');
  788. if (acc.length > 0) {
  789. FM.popupClose();
  790. var cfr_html = '';
  791. var numberOfItems = 0;
  792. $.each(acc, function(i, o) {
  793. var ref = $(o);
  794. var src = $(ref).find('.source').val();
  795. src = $.parseJSON(src);
  796. if (!FM.isItemPseudo(o)) {
  797. cfr_html += '<div>'+src.name+'</div>';
  798. numberOfItems++;
  799. }
  800. });
  801. var tpl = Tpl.get('popup_bulk_remove', 'FM');
  802. tpl.set(':NUMBER_OF_ITEMS', numberOfItems);
  803. //tpl.set(':DST_FILENAME', dest);
  804. FM.popupOpen(tpl.finalize());
  805. }
  806. }
  807. FM.bulkRemove11111 = function() {
  808. var acc = $(FM.CURRENT_TAB).find('.dir.selected');
  809. if (acc.length > 0) {
  810. //FM.popupClose();
  811. var cfr_html = '';
  812. $.each(acc, function(i, o) {
  813. var ref = $(o);
  814. var src = $(ref).find('.source').val();
  815. src = $.parseJSON(src);
  816. if (!FM.isItemPseudo(o)) {
  817. cfr_html += '<div>'+src.name+'</div>';
  818. }
  819. });
  820. var tpl = Tpl.get('popup_bulk', 'FM');
  821. tpl.set(':ACTION', App.Constants.FM_YOU_ARE_REMOVING);
  822. tpl.set(':TEXT', cfr_html);
  823. FM.popupOpen(tpl.finalize());
  824. var bulkStatuses = [];
  825. $.each(acc, function(i, o) {
  826. var ref = $(o);
  827. var src = $(ref).find('.source').val();
  828. src = $.parseJSON(src);
  829. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  830. var opposite_tab = 'A';
  831. if (tab == 'A') {
  832. opposite_tab = 'B';
  833. }
  834. if (FM.isItemPseudo(src)) {
  835. return;
  836. /*return FM.displayError(
  837. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  838. );*/
  839. }
  840. var dest = FM['TAB_' + opposite_tab + '_CURRENT_PATH' ];
  841. if (dest == '') {
  842. dest = GLOBAL.ROOT_DIR;
  843. }
  844. var params = {
  845. item: src.full_path,
  846. dir: FM['TAB_' + tab + '_CURRENT_PATH']
  847. };
  848. App.Ajax.request('delete_files', params, function(reply) {
  849. if (reply.result == true) {
  850. bulkStatuses.push(true);
  851. }
  852. else {
  853. //FM.showError('copy-items', reply.message);
  854. bulkStatuses.push(reply.message);
  855. }
  856. FM.checkBulkStatus(bulkStatuses, acc);
  857. });
  858. });
  859. }
  860. }
  861. FM.toggleAllItemsSelected = function() {
  862. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  863. var box = FM['TAB_' + tab];
  864. var selected = $(FM['TAB_' + tab] ).find('.dir.selected');
  865. var dir_items = $(FM['TAB_' + tab] ).find('.dir');
  866. if (selected.length == dir_items.length) {
  867. $(box).find('.dir').removeClass('selected');
  868. var index = FM['CURRENT_' + tab + '_LINE'];
  869. $(box).find('.dir:eq(' + index + ')').addClass('selected');
  870. $(FM.preselectedItems[tab]).each(function(i, index) {
  871. $(box).find('.dir:eq(' + index + ')').addClass('selected');
  872. });
  873. }
  874. else {
  875. $(box).find('.dir').addClass('selected');
  876. }
  877. }
  878. FM.selectCurrentElementAndGoToNext = function () {
  879. if (FM.isPopupOpened()) {
  880. return;
  881. }
  882. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  883. var box = FM['TAB_' + tab];
  884. var index = FM['CURRENT_' + tab + '_LINE'];
  885. if ($.inArray(index, FM.preselectedItems[tab]) != -1) {
  886. FM.preselectedItems[tab] = $.grep(FM.preselectedItems[tab], function(i) {
  887. return i != index;
  888. });
  889. $(box).find('.dir:eq(' + index + ')').removeClass('selected');
  890. //FM.preselectedItems[tab].push(index);
  891. }
  892. else {
  893. $(box).find('.dir:eq(' + index + ')').addClass('selected');
  894. FM.preselectedItems[tab].push(index);
  895. }
  896. FM.goDown();
  897. }
  898. FM.selectItem = function(item, box) {
  899. //console.log(item);
  900. /*if ($(item).hasClass('ch-toggle')) {
  901. if ($(item).parents('.dir').prev('.dir').length == 0) {
  902. var checked = $(item).parents('.dir').find('.ch-toggle').is(':checked');
  903. $(item).parents('.listing').find('.ch-toggle').prop('checked', checked);
  904. }
  905. return;
  906. }*/
  907. if (FM.CURRENT_TAB == FM.TAB_A) {
  908. FM.setTabActive(FM.TAB_B, 'skip_highlights');
  909. $(FM.TAB_B).find('.selected-inactive').removeClass('selected-inactive');
  910. // tmp
  911. //$(FM.TAB_A).find('.selected-inactive').removeClass('selected-inactive');
  912. $(FM.TAB_B).find('.selected').removeClass('selected');
  913. //$(FM.TAB_A).find('.selected').addClass('selected-inactive');
  914. $(FM.TAB_B).find('.selected').addClass('selected-inactive').removeClass('selected');
  915. }
  916. else {
  917. FM.setTabActive(FM.TAB_A, 'skip_highlights');
  918. $(FM.TAB_A).find('.selected-inactive').removeClass('selected-inactive');
  919. //$(FM.TAB_B).find('.selected-inactive').removeClass('selected-inactive');
  920. //$(FM.TAB_B).find('.selected').addClass('selected-inactive');
  921. $(FM.TAB_A).find('.selected').removeClass('selected');
  922. $(FM.TAB_A).find('.selected').addClass('selected-inactive').removeClass('selected');
  923. }
  924. $(box).find('.active').removeClass('active');
  925. $(box).find('.selected').removeClass('selected');
  926. //
  927. // tmp
  928. //$(FM.TAB_A).find('.selected-inactive').removeClass('selected-inactive');
  929. //$(FM.TAB_B).find('.selected-inactive').removeClass('selected-inactive');
  930. /*if ($(item).hasClass('active')) {
  931. $(item).removeClass('active');
  932. }
  933. else {
  934. $(item).addClass('active');
  935. }*/
  936. if ($(item).hasClass('selected')) {
  937. $(item).removeClass('selected');
  938. }
  939. else {
  940. $(item).addClass('selected');
  941. }
  942. FM.setTabActive(box);
  943. var item = $(item).hasClass('dir') ? item : $(item).parents('.dir');
  944. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  945. var src = $(item).find('.source').val();
  946. src = $.parseJSON(src);
  947. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  948. if (FM.itemIsArchieve(src)) {
  949. if($('.menu-'+tab+' .archive.button').first().is(':visible'))
  950. $('.menu-'+tab+' .extract-btn').first().show();
  951. else
  952. $('.menu-'+tab+' .extract-btn.small').show();
  953. }
  954. else {
  955. $('.menu-'+tab+' .extract-btn').hide();
  956. }
  957. }
  958. FM.isItemPseudo = function(item) {
  959. if (item.name == '.' || item.name == '..') {
  960. return true;
  961. }
  962. return false;
  963. }
  964. FM.itemIsArchieve = function(item) {
  965. if ($.inArray(item.filetype, FM.SUPPORTED_ARCHIEVES) != -1) {
  966. return true;
  967. }
  968. return false;
  969. }
  970. FM.unpackItem = function() {
  971. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  972. var box = FM['TAB_' + tab];
  973. var selected = $(FM['TAB_' + tab] ).find('.dir.active');
  974. if (selected.length == 0) {
  975. //return alert('No file selected');
  976. return FM.displayError(
  977. App.Constants.FM_NO_FILE_SELECTED
  978. );
  979. }
  980. var src = selected.find('.source').val();
  981. src = $.parseJSON(src);
  982. if (FM.isItemPseudo(src)) {
  983. return FM.displayError(
  984. App.Constants.FM_NO_FILE_SELECTED
  985. );
  986. }
  987. if (!FM.itemIsArchieve(src)) {
  988. return FM.displayError(
  989. App.Constants.FM_FILE_TYPE_NOT_SUPPORTED
  990. );
  991. }
  992. var dst = FM['TAB_' + tab + '_CURRENT_PATH'];
  993. if (dst == '') {
  994. dst = GLOBAL.ROOT_DIR;
  995. }
  996. var tpl = Tpl.get('popup_unpack', 'FM');
  997. tpl.set(':FILENAME', src.name);
  998. tpl.set(':DST_DIRNAME', (dst + '/' + src.name).replace('//', '/'));
  999. FM.popupOpen(tpl.finalize());
  1000. }
  1001. FM.packItem = function() {
  1002. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1003. var box = FM['TAB_' + tab];
  1004. var selected = $(FM['TAB_' + tab] ).find('.dir.active');
  1005. if (selected.length == 0) {
  1006. return FM.displayError(
  1007. App.Constants.FM_NO_FILE_SELECTED
  1008. );
  1009. }
  1010. var src = selected.find('.source').val();
  1011. src = $.parseJSON(src);
  1012. if (FM.isItemPseudo(src)) {
  1013. return FM.displayError(
  1014. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1015. );
  1016. }
  1017. if (FM.isItemPseudo(src)) {
  1018. return FM.displayError(
  1019. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1020. );
  1021. }
  1022. var dst = FM['TAB_' + tab + '_CURRENT_PATH'];
  1023. if (dst == '') {
  1024. dst = GLOBAL.ROOT_DIR;
  1025. }
  1026. var tpl = Tpl.get('popup_pack', 'FM');
  1027. tpl.set(':FILENAME', src.name);
  1028. tpl.set(':DST_DIRNAME', (dst + '/' + src.name + '.tar.gz').replace('//', '/'));
  1029. FM.popupOpen(tpl.finalize());
  1030. }
  1031. FM.switchTab = function() {
  1032. if (FM.isPopupOpened()) {
  1033. return;
  1034. }
  1035. if (FM.CURRENT_TAB == FM.TAB_A) {
  1036. FM.setTabActive(FM.TAB_B);
  1037. $(FM.TAB_B).find('.selected-inactive').removeClass('selected-inactive');
  1038. $(FM.TAB_A).find('.selected').addClass('selected-inactive');
  1039. }
  1040. else {
  1041. FM.setTabActive(FM.TAB_A);
  1042. $(FM.TAB_A).find('.selected-inactive').removeClass('selected-inactive');
  1043. $(FM.TAB_B).find('.selected').addClass('selected-inactive');
  1044. }
  1045. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1046. if (FM['CURRENT_' + tab + '_LINE'] == -1) {
  1047. FM.setActive(0, FM.CURRENT_TAB);
  1048. }
  1049. }
  1050. FM.setTabActive = function(box, action) {
  1051. FM.CURRENT_TAB = box;
  1052. $('.window.active').removeClass('active');
  1053. $('.listing-left.active').removeClass('active');
  1054. $('.listing-right.active').removeClass('active');
  1055. $(FM.CURRENT_TAB).addClass('active');
  1056. $(FM.CURRENT_TAB).closest('.window').addClass('active');
  1057. if (action == 'skip_highlights') {
  1058. return true;
  1059. }
  1060. if (FM.CURRENT_TAB == FM.TAB_A) {
  1061. $(FM.TAB_B).find('.selected').addClass('selected-inactive').removeClass('selected');
  1062. $(FM.TAB_A).find('.selected-inactive').addClass('selected').removeClass('selected-inactive');
  1063. if ($(FM.TAB_A).find('.selected-inactive').length == 0 && $(FM.TAB_A).find('.selected').length == 0) {
  1064. }
  1065. }
  1066. else {
  1067. $(FM.TAB_A).find('.selected').addClass('selected-inactive').removeClass('selected');
  1068. $(FM.TAB_B).find('.selected-inactive').addClass('selected').removeClass('selected-inactive');
  1069. }
  1070. }
  1071. FM.confirmRename = function() {
  1072. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1073. var box = FM['TAB_' + tab];
  1074. var selected = $(FM['TAB_' + tab] ).find('.dir.selected');
  1075. if (!selected) {
  1076. return FM.displayError(
  1077. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1078. );
  1079. }
  1080. var src = selected.find('.source').val();
  1081. src = $.parseJSON(src);
  1082. var target_name = $('#rename-title').val();
  1083. if (target_name.trim().length == 0) {
  1084. return FM.displayError(
  1085. App.Constants.FM_FILE_NAME_CANNOT_BE_EMPTY
  1086. );
  1087. }
  1088. var action = FM.isItemFile(src) ? 'rename_file' : 'rename_directory';
  1089. var params = {
  1090. item: src.name,
  1091. target_name: target_name,
  1092. dir: FM['TAB_' + tab + '_CURRENT_PATH'] + '/'
  1093. };
  1094. App.Ajax.request(action, params, function(reply) {
  1095. if (reply.result == true) {
  1096. FM.popupClose();
  1097. FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box);
  1098. }
  1099. else {
  1100. FM.showError('rename-items', reply.message);
  1101. }
  1102. });
  1103. }
  1104. FM.renameItems = function() {
  1105. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1106. var selected = $(FM['TAB_' + tab] ).find('.dir.active');
  1107. if (selected.length == 0) {
  1108. return FM.displayError(
  1109. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1110. );
  1111. }
  1112. var src = selected.find('.source').val();
  1113. src = $.parseJSON(src);
  1114. if (FM.isItemPseudo(src)) {
  1115. return FM.displayError(
  1116. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1117. );
  1118. }
  1119. var tpl = Tpl.get('popup_rename', 'FM');
  1120. tpl.set(':FILENAME', src.name);
  1121. tpl.set(':NEW_NAME', src.name);
  1122. FM.popupOpen(tpl.finalize());
  1123. }
  1124. FM.isPopupOpened = function() {
  1125. return $('#popup').length > 0 ? true : false;
  1126. }
  1127. FM.popupOpen = function(html) {
  1128. FM.popupClose();
  1129. //$('#popup').flayer_close();
  1130. $('<div>').attr('id', 'popup').html(html).flayer({
  1131. afterStart: function(elm) {
  1132. elm.find('input[type="text"]:first').focus();
  1133. }
  1134. });
  1135. }
  1136. FM.popupClose = function() {
  1137. clearTimeout(FM.Env.errorMessageHideTimeout);
  1138. return $('#popup').flayer_close();
  1139. }
  1140. FM.copyItems = function() {
  1141. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1142. var selected = $(FM['TAB_' + tab] ).find('.dir.selected');
  1143. if (selected.length == 0) {
  1144. return FM.displayError(
  1145. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1146. );
  1147. }
  1148. if (selected.length > 1) { // multi operation
  1149. return FM.bulkCopy();
  1150. }
  1151. var src = selected.find('.source').val();
  1152. src = $.parseJSON(src);
  1153. if (FM.isItemPseudo(src)) {
  1154. return FM.displayError(
  1155. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1156. );
  1157. }
  1158. var opposite_tab = 'A';
  1159. if (tab == 'A') {
  1160. opposite_tab = 'B';
  1161. }
  1162. var dst = FM['TAB_' + opposite_tab + '_CURRENT_PATH'];
  1163. if (dst == '') {
  1164. dst = GLOBAL.ROOT_DIR;
  1165. }
  1166. var tpl = Tpl.get('popup_copy', 'FM');
  1167. tpl.set(':SRC_FILENAME', src.full_path);
  1168. tpl.set(':DST_FILENAME', (dst + '/' + src.name).replace('//', '/'));
  1169. FM.popupOpen(tpl.finalize());
  1170. }
  1171. FM.confirmUnpackItem = function () {
  1172. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1173. var box = FM['TAB_' + tab];
  1174. var selected = $(FM['TAB_' + tab] ).find('.dir.selected');
  1175. if (selected.length == 0) {
  1176. return FM.displayError(
  1177. App.Constants.FM_NO_FILE_SELECTED
  1178. );
  1179. }
  1180. var opposite_tab = 'A';
  1181. if (tab == 'A') {
  1182. opposite_tab = 'B';
  1183. }
  1184. var src = selected.find('.source').val();
  1185. src = $.parseJSON(src);
  1186. if (FM.isItemPseudo(src)) {
  1187. return FM.displayError(
  1188. App.Constants.FM_NO_FILE_SELECTED
  1189. );
  1190. }
  1191. if (!FM.itemIsArchieve(src)) {
  1192. return FM.displayError(
  1193. App.Constants.FM_FILE_TYPE_NOT_SUPPORTED
  1194. );
  1195. }
  1196. var dst = FM['TAB_' + tab + '_CURRENT_PATH'];
  1197. if (dst == '') {
  1198. dst = GLOBAL.ROOT_DIR;
  1199. }
  1200. var params = {
  1201. item: src.full_path,
  1202. filename: src.name,
  1203. dir: FM['TAB_' + tab + '_CURRENT_PATH'],
  1204. dir_target: $('#unpack-destination').val()
  1205. };
  1206. App.Ajax.request('unpack_item', params, function(reply) {
  1207. if (reply.result == true) {
  1208. FM.popupClose();
  1209. FM.open(FM['TAB_' + tab + '_CURRENT_PATH'], FM['TAB_' + tab]);
  1210. FM.open(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], FM['TAB_' + opposite_tab]);
  1211. }
  1212. else {
  1213. FM.showError('unpack_item', reply.message);
  1214. }
  1215. });
  1216. }
  1217. FM.confirmPackItem = function () {
  1218. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1219. var box = FM['TAB_' + tab];
  1220. var selected = $(FM['TAB_' + tab] ).find('.dir.selected');
  1221. if (selected.length == 0) {
  1222. return FM.displayError(
  1223. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1224. );
  1225. }
  1226. var opposite_tab = 'A';
  1227. if (tab == 'A') {
  1228. opposite_tab = 'B';
  1229. }
  1230. var src = selected.find('.source').val();
  1231. src = $.parseJSON(src);
  1232. if (FM.isItemPseudo(src)) {
  1233. return FM.displayError(
  1234. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1235. );
  1236. }
  1237. var dst = FM['TAB_' + tab + '_CURRENT_PATH'];
  1238. if (dst == '') {
  1239. dst = GLOBAL.ROOT_DIR;
  1240. }
  1241. var params = {
  1242. item: src.full_path,
  1243. filename: src.name,
  1244. dir: FM['TAB_' + tab + '_CURRENT_PATH'],
  1245. dir_target: $('#pack-destination').val()
  1246. };
  1247. App.Ajax.request('pack_item', params, function(reply) {
  1248. if (reply.result == true) {
  1249. FM.popupClose();
  1250. FM.open(FM['TAB_' + tab + '_CURRENT_PATH'], FM['TAB_' + tab]);
  1251. FM.open(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], FM['TAB_' + opposite_tab]);
  1252. }
  1253. else {
  1254. FM.showError('unpack_item', reply.message);
  1255. }
  1256. });
  1257. }
  1258. FM.confirmCopyItems = function () {
  1259. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1260. var selected = $(FM['TAB_' + tab] ).find('.dir.selected');
  1261. if (!selected) {
  1262. return FM.displayError(
  1263. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1264. );
  1265. }
  1266. var opposite_tab = 'A';
  1267. if (tab == 'A') {
  1268. opposite_tab = 'B';
  1269. }
  1270. var src = selected.find('.source').val();
  1271. src = $.parseJSON(src);
  1272. if (FM.isItemPseudo(src)) {
  1273. return FM.displayError(
  1274. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1275. );
  1276. }
  1277. var dest = $('#copy_dest').val();
  1278. if (dest == '') {
  1279. dest = GLOBAL.ROOT_DIR;
  1280. }
  1281. var action = FM.isItemFile(src) ? 'copy_file' : 'copy_directory';
  1282. var params = {
  1283. item: src.full_path,
  1284. filename: src.name,
  1285. dir: FM['TAB_' + tab + '_CURRENT_PATH'],
  1286. dir_target: dest
  1287. };
  1288. App.Ajax.request(action, params, function(reply) {
  1289. if (reply.result == true) {
  1290. FM.popupClose();
  1291. // FM.open(FM['TAB_' + tab + '_CURRENT_PATH'], FM['TAB_' + tab]);
  1292. FM.openAndSync(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], FM['TAB_' + opposite_tab]);
  1293. }
  1294. else {
  1295. FM.showError('copy-items', reply.message);
  1296. }
  1297. });
  1298. }
  1299. FM.downloadFiles = function() {
  1300. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1301. var selected = $(FM['TAB_' + tab] ).find('.dir.active');
  1302. if (!selected) {
  1303. return FM.displayError(
  1304. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1305. );
  1306. }
  1307. var src = selected.find('.source').val();
  1308. src = $.parseJSON(src);
  1309. if (FM.isItemPseudo(src) || FM.isItemDir(src)) {
  1310. //alert('Folder downloads are in progress atm');
  1311. return FM.displayError(
  1312. App.Constants.FM_DIRECTORY_DOWNLOAD_NOT_READY
  1313. );
  1314. }
  1315. if (FM.isItemPseudo(src)) {
  1316. if (FM.isItemPseudo(src)) {
  1317. return FM.displayError(
  1318. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1319. );
  1320. }
  1321. }
  1322. var path = src.full_path;
  1323. var win = window.open('/download/file/?path=' + path, '_blank');
  1324. win.focus();
  1325. }
  1326. FM.uploadFile = function() {
  1327. //return alert('Not available atm..');
  1328. //$('<div>123</div>').flayer();
  1329. }
  1330. FM.confirmDelete = function() {
  1331. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1332. var box = FM['TAB_' + tab];
  1333. var selected = $(FM['TAB_' + tab] ).find('.dir.selected');
  1334. if (!selected) {
  1335. return FM.displayError(
  1336. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1337. );
  1338. }
  1339. var src = selected.find('.source').val();
  1340. src = $.parseJSON(src);
  1341. if (FM.isItemPseudo(src)) {
  1342. return FM.displayError(
  1343. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1344. );
  1345. }
  1346. var params = {
  1347. item: src.full_path,
  1348. dir: FM['TAB_' + tab + '_CURRENT_PATH']
  1349. };
  1350. App.Ajax.request('delete_files', params, function(reply) {
  1351. if (reply.result == true) {
  1352. FM.popupClose();
  1353. FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box);
  1354. }
  1355. else {
  1356. FM.showError('delete-items', reply.message);
  1357. }
  1358. });
  1359. }
  1360. FM.deleteItems = function() {
  1361. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1362. var selected = $(FM['TAB_' + tab] ).find('.dir.selected');
  1363. if (selected.length == 0) {
  1364. return FM.displayError(
  1365. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1366. );
  1367. }
  1368. if (selected.length > 1) { // multi operation
  1369. return FM.bulkRemove();
  1370. }
  1371. var src = selected.find('.source').val();
  1372. src = $.parseJSON(src);
  1373. if (FM.isItemPseudo(src)) {
  1374. return FM.displayError(
  1375. App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
  1376. );
  1377. }
  1378. var tpl = Tpl.get('popup_delete', 'FM');
  1379. tpl.set(':FILENAME', src.name);
  1380. FM.popupOpen(tpl.finalize());
  1381. }
  1382. FM.displayError = function(msg) {
  1383. if (FM.isPopupOpened()) {
  1384. var ref = FM.getPopupReference();
  1385. if (ref.find('.warning-message').length > 0) {
  1386. ref.find('.warning-message').html('<p class="msg-item">' + msg + '</p>');
  1387. ref.find('.warning-message').show();
  1388. clearInterval(FM.Env.errorMessageHideTimeout);
  1389. FM.Env.errorMessageHideTimeout =
  1390. setTimeout(function() {
  1391. ref.find('.warning-message').fadeOut();
  1392. }, FM.errorMessageTimeout);
  1393. return;
  1394. }
  1395. }
  1396. FM.popupClose();
  1397. var tpl = Tpl.get('popup_alert', 'FM');
  1398. tpl.set(':TEXT', msg);
  1399. FM.popupOpen(tpl.finalize());
  1400. //return alert(msg);
  1401. }
  1402. FM.triggerRefreshActionTrick = function() {
  1403. // reload-in-time
  1404. $('#reload-in-time').remove();
  1405. FM.Env.RELOAD_IN_TIME = true;
  1406. var tpl = Tpl.get('reload_in_time', 'FM');
  1407. //tpl.set(':TIME_LEFT', FM.RELOAD_IN_TIME_SECONDS + 1);
  1408. $('body').append(tpl.finalize());
  1409. var ref = $('#reload-in-time').find('.reload-in-time-counter');
  1410. var timeleft = FM.RELOAD_IN_TIME_SECONDS;
  1411. FM.Env.reload_in_time_interval =
  1412. setInterval(function() {
  1413. if (timeleft <= 0) {
  1414. clearInterval(FM.Env.reload_in_time_interval);
  1415. $('#reload-in-time').remove();
  1416. FM.Env.RELOAD_IN_TIME = false;
  1417. }
  1418. //ref.text(timeleft);
  1419. timeleft -= 1;
  1420. }, 1000);
  1421. }
  1422. FM.confirmCreateDir = function() {
  1423. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1424. var box = FM['TAB_' + tab];
  1425. var dirname = $('#rename-title').val();
  1426. if (dirname.trim().length == 0) {
  1427. return FM.displayError(
  1428. App.Constants.FM_DIRECTORY_NAME_CANNOT_BE_EMPTY
  1429. );
  1430. }
  1431. var params = {
  1432. dirname: dirname,
  1433. dir: FM['TAB_' + tab + '_CURRENT_PATH']
  1434. };
  1435. App.Ajax.request('create_dir', params, function(reply) {
  1436. if (reply.result == true) {
  1437. FM.popupClose();
  1438. FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box);
  1439. }
  1440. else {
  1441. FM.showError('create-dir', reply.message);
  1442. }
  1443. });
  1444. }
  1445. FM.createDir = function() {
  1446. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1447. var tpl = Tpl.get('popup_create_dir', 'FM');
  1448. FM.popupOpen(tpl.finalize());
  1449. }
  1450. FM.confirmCreateFile = function() {
  1451. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1452. var box = FM['TAB_' + tab];
  1453. var filename = $('#rename-title').val();
  1454. if (filename.trim().length == 0) {
  1455. return FM.displayError(
  1456. App.Constants.FM_FILE_NAME_CANNOT_BE_EMPTY
  1457. );
  1458. }
  1459. var params = {
  1460. filename: filename,
  1461. dir: FM['TAB_' + tab + '_CURRENT_PATH']
  1462. };
  1463. App.Ajax.request('create_file', params, function(reply) {
  1464. if (reply.result == true) {
  1465. FM.popupClose();
  1466. FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box);
  1467. }
  1468. else {
  1469. FM.showError('create-file', reply.message);
  1470. }
  1471. });
  1472. }
  1473. FM.createFile = function() {
  1474. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1475. var tpl = Tpl.get('popup_create_file', 'FM');
  1476. FM.popupOpen(tpl.finalize());
  1477. }
  1478. FM.showOrderBox = function(elm, tab) {
  1479. var primary_box = FM.ORDER_BOX_A;
  1480. var secondary_box = FM.ORDER_BOX_B;
  1481. if(tab == FM.TAB_B){
  1482. primary_box = FM.ORDER_BOX_B;
  1483. secondary_box = FM.ORDER_BOX_A;
  1484. }
  1485. secondary_box.hide();
  1486. if(primary_box.is(':visible')){
  1487. primary_box.hide();
  1488. return;
  1489. }
  1490. var offset = elm.offset();
  1491. offset.top += elm.outerHeight() + 10;
  1492. offset.left += elm.outerWidth() - primary_box.outerWidth();
  1493. primary_box.css({top: offset.top, left: offset.left});
  1494. primary_box.show();
  1495. }
  1496. FM.reOrderList = function(elm){
  1497. var tab = FM.TAB_A;
  1498. var menu = $(FM.TAB_A_MENU);
  1499. var path = FM.TAB_A_CURRENT_PATH;
  1500. var primary_box = FM.ORDER_BOX_A;
  1501. var tab_order_type = FM.ORDER_TAB_A;
  1502. if(elm.closest('.context-menu').hasClass('tab-b')){
  1503. tab = FM.TAB_B;
  1504. path = FM.TAB_B_CURRENT_PATH;
  1505. primary_box = FM.ORDER_BOX_B;
  1506. menu = FM.TAB_B_MENU;
  1507. tab_order_type = FM.ORDER_TAB_B;
  1508. }
  1509. var entity = elm.closest('li').attr('entity');
  1510. var direction = 'asc';
  1511. if(elm.hasClass('up')){
  1512. direction = 'desc';
  1513. }
  1514. if(tab == FM.TAB_A){
  1515. FM.ORDER_TAB_A = entity+'_'+direction;
  1516. }else{
  1517. FM.ORDER_TAB_B = entity+'_'+direction;
  1518. }
  1519. primary_box.find('span').removeClass('active');
  1520. $(menu).find('.sort-by .entity').html(elm.closest('li').find('span').html());
  1521. $(menu).find('.sort-by').removeClass('desc asc').addClass(direction).addClass('sort-by');
  1522. elm.addClass('active');
  1523. primary_box.hide();
  1524. FM.open(path, tab);
  1525. }
  1526. FM.isPopupOpened = function() {
  1527. var ref = $('#popup');
  1528. if (ref.length > 0) {
  1529. return true;
  1530. }
  1531. return false;
  1532. }
  1533. FM.getPopupReference = function() {
  1534. var ref = $('#popup');
  1535. return ref;
  1536. }
  1537. FM.handlePopupSubmit = function() {
  1538. try {
  1539. var method = $('#popup').find('.ok').attr('onClick');
  1540. if (method) {
  1541. method = method.replace('\(\);', '').replace('FM.', '');
  1542. if ('function' == typeof FM[method]) {
  1543. FM[method]();
  1544. }
  1545. }
  1546. }
  1547. catch(e) {
  1548. }
  1549. }
  1550. FM.handlePopupCancel = function() {
  1551. FM.popupClose();
  1552. }
  1553. FM.init();
  1554. $(document).ready(function() {
  1555. $('.progress-container').hide();
  1556. var ph = $('.window .pwd').outerHeight();
  1557. var mh = $('.window .menu').outerHeight();
  1558. var wh = $(window).outerHeight();
  1559. var hgt = wh - (ph + mh) - 8;
  1560. $('.window ul').outerHeight(hgt);
  1561. shortcut.add("Esc",function() {
  1562. FM.Env.RELOAD_IN_TIME = false;
  1563. $('#reload-in-time').remove();
  1564. $('.shortcuts').hide();
  1565. if (FM.isPopupOpened()) {
  1566. return FM.handlePopupCancel();
  1567. }
  1568. },{
  1569. 'type': 'keydown',
  1570. 'propagate': false,
  1571. 'disable_in_input': false,
  1572. 'target': document
  1573. });
  1574. shortcut.add("h", function(){
  1575. $('.shortcuts').toggle();
  1576. }, {
  1577. 'type': 'keydown',
  1578. 'propagate': false,
  1579. 'disable_in_input': true,
  1580. 'target': document
  1581. });
  1582. shortcut.add("Down",function() {
  1583. FM.goDown();
  1584. },{
  1585. 'type': 'keydown',
  1586. 'propagate': false,
  1587. 'disable_in_input': true,
  1588. 'target': document
  1589. });
  1590. shortcut.add("Up",function() {
  1591. FM.goUp();
  1592. },{
  1593. 'type': 'keydown',
  1594. 'propagate': false,
  1595. 'disable_in_input': true,
  1596. 'target': document
  1597. });
  1598. shortcut.add("Left",function() {
  1599. if (!FM.isPopupOpened()) {
  1600. FM.setTabActive(FM.TAB_A);
  1601. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1602. if (FM['CURRENT_' + tab + '_LINE'] == -1) {
  1603. FM.setActive(0, FM.CURRENT_TAB);
  1604. }
  1605. }
  1606. },{
  1607. 'type': 'keydown',
  1608. 'propagate': false,
  1609. 'disable_in_input': true,
  1610. 'target': document
  1611. });
  1612. shortcut.add("Right",function() {
  1613. if (!FM.isPopupOpened()) {
  1614. FM.setTabActive(FM.TAB_B);
  1615. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1616. if (FM['CURRENT_' + tab + '_LINE'] == -1) {
  1617. FM.setActive(0, FM.CURRENT_TAB);
  1618. }
  1619. }
  1620. },{
  1621. 'type': 'keydown',
  1622. 'propagate': false,
  1623. 'disable_in_input': true,
  1624. 'target': document
  1625. });
  1626. shortcut.add("Home",function() {
  1627. FM.goToTop();
  1628. },{
  1629. 'type': 'keydown',
  1630. 'propagate': false,
  1631. 'disable_in_input': true,
  1632. 'target': document
  1633. });
  1634. shortcut.add("End",function() {
  1635. FM.goToBottom();
  1636. },{
  1637. 'type': 'keydown',
  1638. 'propagate': false,
  1639. 'disable_in_input': true,
  1640. 'target': document
  1641. });
  1642. shortcut.add("Tab",function() {
  1643. FM.switchTab();
  1644. },{
  1645. 'type': 'keydown',
  1646. 'propagate': false,
  1647. 'disable_in_input': true,
  1648. 'target': document
  1649. });
  1650. shortcut.add("Space",function() {
  1651. FM.selectCurrentElementAndGoToNext();
  1652. },{
  1653. 'type': 'keydown',
  1654. 'propagate': false,
  1655. 'disable_in_input': true,
  1656. 'target': document
  1657. });
  1658. shortcut.add("Insert",function() {
  1659. FM.selectCurrentElementAndGoToNext();
  1660. },{
  1661. 'type': 'keydown',
  1662. 'propagate': false,
  1663. 'disable_in_input': true,
  1664. 'target': document
  1665. });
  1666. shortcut.add("ctrl+a",function() {
  1667. FM.toggleAllItemsSelected();
  1668. },{
  1669. 'type': 'keydown',
  1670. 'propagate': false,
  1671. 'disable_in_input': true,
  1672. 'target': document
  1673. });
  1674. shortcut.add("Enter",function() {
  1675. if (FM.isPopupOpened()) {
  1676. return FM.handlePopupSubmit();
  1677. }
  1678. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  1679. var elm = $(FM.CURRENT_TAB).find('.dir:eq('+FM['CURRENT_'+tab+'_LINE']+')');
  1680. if (elm.length == 1) {
  1681. var src = $.parseJSON($(elm).find('.source').val());
  1682. if (src.type == 'd') {
  1683. FM.open(src.full_path, FM.CURRENT_TAB);
  1684. }
  1685. else {
  1686. if(FM.IMG_FILETYPES.indexOf(src.filetype) >= 0 && src.filetype.length > 0) {
  1687. //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};
  1688. //cl_act = 'onClick="FM.fotoramaOpen(\'' + tab + '\', \'img-' + i +'\')"';
  1689. FM.fotoramaOpen(tab, 'img-' + elm.index());
  1690. }
  1691. else {
  1692. FM.openFile(src.full_path, FM.CURRENT_TAB, elm);
  1693. }
  1694. }
  1695. }
  1696. },{
  1697. 'type': 'keydown',
  1698. 'propagate': false,
  1699. 'disable_in_input': false,
  1700. 'target': document
  1701. });
  1702. shortcut.add("n",function() {
  1703. FM.createFile();
  1704. },{
  1705. 'type': 'keydown',
  1706. 'propagate': false,
  1707. 'disable_in_input': true,
  1708. 'target': document
  1709. });
  1710. shortcut.add("F7",function() {
  1711. FM.createDir();
  1712. },{
  1713. 'type': 'keydown',
  1714. 'propagate': false,
  1715. 'disable_in_input': false,
  1716. 'target': document
  1717. });
  1718. shortcut.add("F8",function() {
  1719. FM.deleteItems();
  1720. },{
  1721. 'type': 'keydown',
  1722. 'propagate': false,
  1723. 'disable_in_input': false,
  1724. 'target': document
  1725. });
  1726. shortcut.add("Delete",function() {
  1727. FM.deleteItems();
  1728. },{
  1729. 'type': 'keydown',
  1730. 'propagate': false,
  1731. 'disable_in_input': true,
  1732. 'target': document
  1733. });
  1734. shortcut.add("shift+F6",function() {
  1735. FM.renameItems();
  1736. },{
  1737. 'type': 'keydown',
  1738. 'propagate': false,
  1739. 'disable_in_input': false,
  1740. 'target': document
  1741. });
  1742. shortcut.add("F2",function() {
  1743. FM.renameItems();
  1744. },{
  1745. 'type': 'keydown',
  1746. 'propagate': false,
  1747. 'disable_in_input': false,
  1748. 'target': document
  1749. });
  1750. shortcut.add("F5",function() {
  1751. if (FM.Env.RELOAD_IN_TIME == true) {
  1752. location.reload();
  1753. return;
  1754. }
  1755. else {
  1756. FM.copyItems();
  1757. FM.triggerRefreshActionTrick();
  1758. }
  1759. },{
  1760. 'type': 'keydown',
  1761. 'propagate': false,
  1762. 'disable_in_input': false,
  1763. 'target': document
  1764. });
  1765. shortcut.add("a",function() {
  1766. FM.packItem();
  1767. },{
  1768. 'type': 'keydown',
  1769. 'propagate': false,
  1770. 'disable_in_input': true,
  1771. 'target': document
  1772. });
  1773. shortcut.add("d",function() {
  1774. FM.downloadFiles();
  1775. },{
  1776. 'type': 'keydown',
  1777. 'propagate': false,
  1778. 'disable_in_input': true,
  1779. 'target': document
  1780. });
  1781. shortcut.add("Backspace",function() {
  1782. FM.goBackwards();
  1783. },{
  1784. 'type': 'keydown',
  1785. 'propagate': false,
  1786. 'disable_in_input': true,
  1787. 'target': document
  1788. });
  1789. /*shortcut.add("Y",function() {
  1790. if (FM.Env.RELOAD_IN_TIME == true) {
  1791. location.reload();
  1792. }
  1793. },{
  1794. 'type': 'keydown',
  1795. 'propagate': false,
  1796. 'disable_in_input': true,
  1797. 'target': document
  1798. });*/
  1799. shortcut.add("u",function() {
  1800. var tab_letter = FM.getTabLetter(FM.CURRENT_TAB);
  1801. $('#file_upload_'+tab_letter).trigger('click');
  1802. },{
  1803. 'type': 'keydown',
  1804. 'propagate': false,
  1805. 'disable_in_input': true,
  1806. 'target': document
  1807. });
  1808. /* is jQuery .live() has been removed in version 1.9 onwards
  1809. $(FM.TAB_A + ' .dir').live('click', function(evt) {
  1810. FM.selectItem(evt.target, FM.TAB_A);
  1811. });
  1812. $(FM.TAB_B + ' .dir').live('click', function(evt) {
  1813. FM.selectItem(evt.target, FM.TAB_B);
  1814. });
  1815. */
  1816. /*$(FM.TAB_A).on('click', '.dir', function(evt) {
  1817. //console.log(evt);
  1818. if (evt.ctrlKey || evt.metaKey || evt.altKey) {
  1819. return;
  1820. }
  1821. FM.selectItem(evt.target, FM.TAB_A);
  1822. });
  1823. $(FM.TAB_B).on('click', '.dir', function(evt) {
  1824. if (evt.ctrlKey || evt.metaKey || evt.altKey) {
  1825. return;
  1826. }
  1827. FM.selectItem(evt.target, FM.TAB_B);
  1828. });*/
  1829. $(FM.TAB_A_MENU).on('click', '.sort-by', function(evt){
  1830. FM.showOrderBox($(evt.target), FM.TAB_A);
  1831. });
  1832. $(FM.TAB_B_MENU).on('click', '.sort-by', function(evt){
  1833. FM.showOrderBox($(evt.target), FM.TAB_B);
  1834. });
  1835. $('.context-menu.sort-order').on('click', 'span', function(evt){
  1836. FM.reOrderList($(evt.target));
  1837. });
  1838. $('.warning-box .close').on('click', function(evt){
  1839. $(evt.target).closest('.warning-box').hide();
  1840. });
  1841. $('.menu-A .extract-btn').hide();
  1842. $('.menu-B .extract-btn').hide();
  1843. $('.to-shortcuts').click(function(){
  1844. $('.shortcuts').toggle();
  1845. });
  1846. $('.shortcuts .close').click(function(){
  1847. $('.shortcuts').hide();
  1848. });
  1849. });
  1850. /*$(document).bind('keydown.tab', function() {
  1851. FM.switchTab();
  1852. });*/
  1853. $(window).bind('statechange', function(evt){
  1854. $(evt).stopPropagation();
  1855. // History.getState()
  1856. //alert('No way back yet');
  1857. })