main.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  3. <head>
  4. <title><?=__('File Manager')?></title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <link rel="shortcut icon" href="/images/filemanager.ico?" type="image/x-icon">
  7. <link rel="icon" href="/images/filemanager.ico?" type="image/x-icon">
  8. <link rel="stylesheet" href="/css/file_manager.css" type="text/css" />
  9. <link rel="stylesheet" type="text/css" href="/css/uploadify.css" />
  10. <link href="//cdnjs.cloudflare.com/ajax/libs/fotorama/4.6.2/fotorama.css" rel="stylesheet">
  11. <style type="text/css" media="print, screen and (min-width: 481px)"></style>
  12. <!-- link rel="shortcut icon" href="/2008/site/images/favicon.ico" type="image/x-icon" / -->
  13. <link rel="stylesheet" href="/css/jquery.arcticmodal.css">
  14. <link rel="stylesheet" href="/css/jquery.fileupload.css">
  15. <script> GLOBAL = {}; </script>
  16. </head>
  17. <body>
  18. <a href="#" class="to-shortcuts">
  19. <i class="l-icon-shortcuts"></i>
  20. </a>
  21. <div id="main">
  22. <div class="window active">
  23. <a href="/" class="l-logo"></a>
  24. <div class="pwd pwd-tab-A"></div>
  25. <div class="menu menu-left menu-A">
  26. <?php $pre_tab = 'A';include($_SERVER['DOCUMENT_ROOT'].'/templates/file_manager/tab_menu.php'); ?>
  27. </div>
  28. <ul class="listing listing-left" onClick="FM.setTabActive('.listing-left');"></ul>
  29. </div>
  30. <div class="window">
  31. <div class="pwd pwd-tab-B"></div>
  32. <div class="menu menu-right menu-B">
  33. <?php $pre_tab = 'B';include($_SERVER['DOCUMENT_ROOT'].'/templates/file_manager/tab_menu.php'); ?>
  34. </div>
  35. <ul class="listing listing-right" onClick="FM.setTabActive('.listing-right');"></ul>
  36. </div>
  37. </div>
  38. <div class="warning-box inform hidden">
  39. <div class="close ripple"></div>
  40. <div class="message">Please Read the reading text at the reading write!</div>
  41. <div class="message-small">writing the reading text at the reading write writing the reading text at the reading write!</div>
  42. </div>
  43. <div class="warning-box reload hidden">
  44. <div class="message-small">Hit F5 to reload the page</div>
  45. </div>
  46. <div class="warning-box hidden">
  47. <div class="close ripple"></div>
  48. <div class="message">Please Read the reading text at the reading write!</div>
  49. <div class="message-small">writing the reading text at the reading write writing the reading text at the reading write!</div>
  50. </div>
  51. <ul class="context-menu tab-a sort-order hidden">
  52. <li entity="type"><span class="type active"><?=__('type')?></span><span class="up">&nbsp;</span></li>
  53. <li entity="size"><span class="size"><?=__('size')?></span><span class="up">&nbsp;</span></li>
  54. <li entity="date"><span class="date"><?=__('date')?></span><span class="up">&nbsp;</span></li>
  55. <li entity="name" class="last"><span class="name"><?=__('name')?></span><span class="up">&nbsp;</span></li>
  56. </ul>
  57. <ul class="context-menu tab-b sort-order hidden">
  58. <li entity="type"><span class="type active"><?=__('type')?></span><span class="up">&nbsp;</span></li>
  59. <li entity="size"><span class="size"><?=__('size')?></span><span class="up">&nbsp;</span></li>
  60. <li entity="date"><span class="date"><?=__('date')?></span><span class="up">&nbsp;</span></li>
  61. <li entity="name" class="last"><span class="name"><?=__('name')?></span><span class="up">&nbsp;</span></li>
  62. </ul>
  63. <div class="fotorama" data-auto="false"></div>
  64. <div class="progress-container hidden">
  65. <div class="progress-elm"><span class="title"><?=__('Initializing')?></span><span class="progress" style="backround-position: -96px; backround-position:-10px"></span><span class="close hidden"></span></div>
  66. </div>
  67. <div class="shortcuts" style="display:none">
  68. <div class="header">
  69. <div class="title">Shortcuts</div>
  70. <div class="close"></div>
  71. </div>
  72. <ul>
  73. <li><span class="key">u</span><?=__('Upload')?></li>
  74. <li><span class="key">n</span><?=__('New File')?></li>
  75. <li><span class="key">F7</span><?=__('New Folder')?></li>
  76. <li><span class="key">d</span><?=__('Download')?></li>
  77. <li><span class="key">F2 / Shift+F6</span><?=__('Rename')?></li>
  78. <li><span class="key">F5</span><?=__('Copy')?></li>
  79. <li><span class="key">a</span><?=__('Archive')?></li>
  80. <li><span class="key">F8 / Del</span><?=__('Delete')?></li>
  81. <li class="step-top"><span class="key">Ctrl + s</span><?=__('Save File (in text editor)')?></li>
  82. <li class="step-top"><span class="key">h</span><?=__('Display/Close shortcuts')?></li>
  83. <li class="step-top"><span class="key">Esc</span><?=__('Close Popup / Cancel')?></li>
  84. </ul>
  85. <ul>
  86. <li><span class="key bigger">&uarr;</span><?=__('Move Cursor Up')?></li>
  87. <li><span class="key bigger">&darr;</span><?=__('Move Cursor Down')?></li>
  88. <li><span class="key bigger">&larr;</span><?=__('Switch to Left Tab')?></li>
  89. <li><span class="key bigger">&rarr;</span><?=__('Switch to Right Tab')?></li>
  90. <li><span class="key">Tab</span><?=__('Switch Tab')?></li>
  91. <li><span class="key">Home</span><?=__('Go to the Top of the File List')?></li>
  92. <li><span class="key">End</span><?=__('Go to the Last File')?></li>
  93. <li class="step-top"><span class="key">Enter</span><?=__('Open File / Enter Directory')?></li>
  94. <li><span class="key">Backspace</span><?=__('Go to Parent Directory')?></li>
  95. <li class="step-top"><span class="key">Insert / Space</span><?=__('Select Current File')?></li>
  96. <li><span class="key">Shift + click</span><?=__('Select Bunch of Files')?></li>
  97. <li><span class="key">Ctrl + click</span><?=__('Add File to the Current Selection')?></li>
  98. <li><span class="key">Ctrl + a</span><?=__('Select All Files')?></li>
  99. </ul>
  100. <ul class="note"><?=__('shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager')?></ul>
  101. </div>
  102. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
  103. <script src="//cdnjs.cloudflare.com/ajax/libs/fotorama/4.6.2/fotorama.js"></script>
  104. <script type="text/javascript" src="/js/jquery-ui.min.js"></script>
  105. <script src="/js/jquery.finder.js"></script>
  106. <script type="text/javascript" src="/js/hotkeys.js"></script>
  107. <script type="text/javascript" src="/js/app.js"></script>
  108. <script type="text/javascript"><?php echo include($_SERVER['DOCUMENT_ROOT'].'/js/i18n.js.php'); ?></script>
  109. <script type="text/javascript" src="/js/templates.js"></script>
  110. <script type="text/javascript" src="/js/floating_layer.js"></script>
  111. <script src="/js/ripple.js"></script>
  112. <script src="/js/jquery.iframe-transport.js"></script>
  113. <script src="/js/jquery.fileupload.js"></script>
  114. <script src="/js/jquery.arcticmodal.js"></script>
  115. <?php if (!empty($GLOBAL_JS)): ?>
  116. <?php echo $GLOBAL_JS; ?>
  117. <?php endif; ?>
  118. <script type="text/javascript" src="/js/file_manager.js"></script>
  119. <script type="text/javascript">
  120. $(function () {
  121. 'use strict';
  122. // Change this to the location of your server-side upload handler:
  123. var show_msg = false;
  124. var acc = $('<div>');
  125. $(['A', 'B']).each(function(k, letter) {
  126. var url = '/upload/';
  127. $('#file_upload_' + letter).fileupload({
  128. singleFileUploads: false,
  129. add: function (e, data) {
  130. FM.setTabActive(FM['TAB_'+letter]);
  131. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  132. var file_relocation = FM['TAB_'+tab+'_CURRENT_PATH'];
  133. $('#file_upload_' + letter).fileupload("option", "url", url + '?dir=' + file_relocation);
  134. acc = $('<div>');
  135. show_msg = false;
  136. data.submit();
  137. $('.file-upload-button-' + tab).addClass('progress');
  138. },
  139. url: url,
  140. dataType: 'json',
  141. done: function (e, data) {
  142. var msg = '';
  143. $.each(data.result.files, function (index, file) {
  144. if ('undefined' != typeof file.error) {
  145. msg += '<p class="msg-item">' + file.name + ': ' + file.error + '</p>';
  146. }
  147. });
  148. if (msg != '') {
  149. var tpl = Tpl.get('popup_alert', 'FM');
  150. tpl.set(':TEXT', msg);
  151. FM.popupOpen(tpl.finalize());
  152. }
  153. //console.log(e);
  154. //console.log(data);
  155. },
  156. fail: function(e, data) {
  157. var msg = '';
  158. $.each(data.result.files, function (index, file) {
  159. if ('undefined' != typeof file.error) {
  160. msg += '<p class="msg-item">' + file.name + ': ' + file.error + '</p>';
  161. }
  162. });
  163. if (msg != '') {
  164. var tpl = Tpl.get('popup_alert', 'FM');
  165. tpl.set(':TEXT', msg);
  166. FM.popupOpen(tpl.finalize());
  167. }
  168. //console.log(e);
  169. //console.log(data);
  170. },
  171. always: function(e, data) {
  172. /*if (show_msg) {
  173. clearTimeout(window.ht_fd);
  174. var info = $('.warning-box.inform').clone(true);
  175. $(info).attr('id', 'file-upload-msg');
  176. $(info).find('.message').text('Bla bla bla');
  177. $(info).find('.message-small').html(acc);
  178. $(info).find('.close').bind('click', function() {
  179. $('#file-upload-msg').remove();
  180. });
  181. $('body').append($(info).removeClass('hidden'));
  182. window.ht_fd = setTimeout(function() {
  183. $('#file-upload-msg').fadeOut();
  184. }, 3000);
  185. }*/
  186. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  187. var box = FM['TAB_' + tab];
  188. FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box);
  189. //$('.file-upload-button-' + tab).removeClass('progress');
  190. $('.file-upload-button-' + tab).addClass('done');
  191. setTimeout(function() {
  192. $('.file-upload-button-' + tab).removeClass('progress');
  193. $('.file-upload-button-' + tab).removeClass('done');
  194. }, 2000);
  195. $('.file-upload-button-' + tab).css('background-position', '-96px 0');
  196. },
  197. progressall: function (e, data) {
  198. var progress = parseInt(data.loaded / data.total * 100, 10);
  199. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  200. $('.file-upload-button-' + tab).css('background-position', '-' + (100 - progress) + 'px 0');
  201. }
  202. })
  203. .prop('disabled', !$.support.fileInput)
  204. .parent().addClass($.support.fileInput ? undefined : 'disabled');
  205. });
  206. $.widget("shift.selectable", $.ui.selectable, {
  207. options: {}, // required
  208. previousIndex: -1, // additional attribute to store previous selection index
  209. currentIndex: -1, // additional attribute to store current selection index
  210. _create: function() { // required
  211. var self = this;
  212. $.ui.selectable.prototype._create.call(this); // default implementation
  213. // here is our addition, we are catching "selecting" event with shift key
  214. $(this.element).on('selectableselecting', function(event, ui){
  215. self.currentIndex = $(ui.selecting.tagName, event.target).index(ui.selecting);
  216. if(event.shiftKey && self.previousIndex > -1) {
  217. $(ui.selecting.tagName, event.target).slice(Math.min(self.previousIndex, self.currentIndex), 1 + Math.max(self.previousIndex, self.currentIndex)).addClass('ui-selected');
  218. self.previousIndex = -1;
  219. } else {
  220. self.previousIndex = self.currentIndex;
  221. }
  222. });
  223. },
  224. destroy: function() { // required, default implementation
  225. $.ui.selectable.prototype.destroy.call(this);
  226. },
  227. _setOption: function() { // required, default implementation
  228. $.ui.selectable.prototype._setOption.apply(this, arguments);
  229. }
  230. });
  231. var checkIfArchive = function(item) {console.log(item);
  232. var item = $(item).hasClass('dir') ? item : $(item).parents('.dir');
  233. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  234. var src = $(item).find('.source').val();
  235. src = $.parseJSON(src);
  236. var tab = FM.getTabLetter(FM.CURRENT_TAB);
  237. if (FM.itemIsArchieve(src)) {
  238. if($('.menu-'+tab+' .archive.button').first().is(':visible'))
  239. $('.menu-'+tab+' .extract-btn').first().show();
  240. else
  241. $('.menu-'+tab+' .extract-btn.small').show();
  242. } else {
  243. $('.menu-'+tab+' .extract-btn').hide();
  244. }
  245. }
  246. $(".listing-left").selectable({
  247. selected: function (event, ui) {
  248. //console.log(ui);
  249. //console.log($(".listing-left .selected"));
  250. FM.setTabActive(FM.TAB_A, 'skip_highlights');
  251. $(".listing-left .active").removeClass('active');
  252. $(".listing-left .selected").each(function(i, o) {
  253. if (!$(o).hasClass('ui-selected')) {
  254. $(o).removeClass('selected');
  255. $(o).removeClass('active');
  256. }
  257. });
  258. $(ui.selected).addClass('selected');
  259. $(ui.selected).addClass('active');
  260. //$(ui.selected).addClass('active');
  261. checkIfArchive(ui.selected);
  262. $(".listing-left .ui-selected").addClass('selected');
  263. if ($(".listing-left .active").length > 0) {
  264. FM['CURRENT_A_LINE'] = $(".listing-left .active").index();
  265. }
  266. else {
  267. FM['CURRENT_A_LINE'] = 0;
  268. }
  269. FM.preselectedItems.A = [];
  270. /*FM.setTabActive(FM.TAB_A, 'skip_highlights');
  271. $(".listing-left .selected, .listing-left .ui-selectee").each(function(i, o) {
  272. if (!$(o).hasClass('ui-selected')) {
  273. $(o).removeClass('selected');
  274. $(o).removeClass('active');
  275. }
  276. });
  277. $(ui.selected).addClass('selected');
  278. $(ui.selected).addClass('active');
  279. checkIfArchive(ui.selected);
  280. $(".listing-left .ui-selected").addClass('selected');*/
  281. },
  282. unselected: function (event, ui) {
  283. FM.setTabActive(FM.TAB_A, 'skip_highlights');
  284. $(ui.unselected).removeClass('selected');
  285. $(ui.unselected).removeClass('active');
  286. if ($(".listing-left .active").length > 0) {
  287. FM['CURRENT_A_LINE'] = $(".listing-left .active").index();
  288. }
  289. else {
  290. FM['CURRENT_A_LINE'] = 0;
  291. }
  292. /*$(".listing-left .selected, .listing-left .ui-selectee").each(function(i, o) {
  293. if (!$(o).hasClass('ui-selected')) {
  294. $(o).removeClass('selected');
  295. $(o).removeClass('active');
  296. }
  297. });
  298. FM.setTabActive(FM.TAB_A, 'skip_highlights');
  299. $(ui.unselected).removeClass('selected');
  300. $(ui.selected).addClass('active');*/
  301. }
  302. });
  303. $(".listing-right").selectable({
  304. selected: function (event, ui) {
  305. FM.setTabActive(FM.TAB_B, 'skip_highlights');
  306. $(".listing-right .active").removeClass('active');
  307. $(".listing-right .selected").each(function(i, o) {
  308. if (!$(o).hasClass('ui-selected')) {
  309. $(o).removeClass('selected');
  310. $(o).removeClass('active');
  311. }
  312. });
  313. $(ui.selected).addClass('selected');
  314. $(ui.selected).addClass('active');
  315. //$(ui.selected).addClass('active');
  316. checkIfArchive(ui.selected);
  317. $(".listing-right .ui-selected").addClass('selected');
  318. if ($(".listing-right .active").length > 0) {
  319. FM['CURRENT_B_LINE'] = $(".listing-right .active").index();
  320. }
  321. else {
  322. FM['CURRENT_B_LINE'] = 0;
  323. }
  324. FM.preselectedItems.B = [];
  325. },
  326. unselected: function (event, ui) {
  327. FM.setTabActive(FM.TAB_B, 'skip_highlights');
  328. $(ui.unselected).removeClass('selected');
  329. $(ui.unselected).removeClass('active');
  330. if ($(".listing-right .active").length > 0) {
  331. FM['CURRENT_B_LINE'] = $(".listing-right .active").index();
  332. }
  333. else {
  334. FM['CURRENT_B_LINE'] = 0;
  335. }
  336. }
  337. });
  338. /*$(".listing-right").selectable({
  339. selected: function (event, ui) {
  340. $(".listing-left .selected").each(function(i, o) {
  341. if (!$(o).hasClass('ui-selected')) {
  342. $(o).removeClass('selected');
  343. }
  344. });
  345. FM.setTabActive(FM.TAB_B, 'skip_highlights');
  346. $(ui.selected).addClass('selected');
  347. checkIfArchive(ui.selected);
  348. $(".listing-left .ui-selected").addClass('selected');
  349. },
  350. unselected: function (event, ui) {
  351. $(".listing-left .selected").each(function(i, o) {
  352. if (!$(o).hasClass('ui-selected')) {
  353. $(o).removeClass('selected');
  354. }
  355. });
  356. FM.setTabActive(FM.TAB_B, 'skip_highlights');
  357. $(ui.unselected).removeClass('selected');
  358. }
  359. });*/
  360. });
  361. </script>
  362. </body>
  363. </html>