Procházet zdrojové kódy

FileManager move function + small bugfixes

Serghey Rodin před 9 roky
rodič
revize
4adbef4517

+ 48 - 338
web/css/file_manager.css

@@ -1,25 +1,12 @@
 body { margin: 0; padding: 0; }
 .hidden { display: none; }
 
-.l-logo {
-    background-color: #7B7B7B;
-    background-image: url("/images/sprite.png?1446554103");
-    background-position: -117px -57px;
-    background-repeat: no-repeat;
-    border: 9px solid #7B7B7B;
-    display: inline-block;
-    float: left;
-    height: 22px;
-    margin-left: 0;
-    margin-top: 0;
-    width: 59px;
-}
+.l-logo { background-color: #7B7B7B; background-image: url("/images/sprite.png?1446554103"); background-position: -117px -57px; background-repeat: no-repeat; border: 9px solid #7B7B7B; display: inline-block; float: left; height: 22px; margin-left: 0; margin-top: 0; width: 59px; }
 
 #main{ display: inline-block; font-family: Arial; font-size: 15px; color: #777; width: 100%; }
 
-.window { display: inline-block; float: left; /*border: 1px solid #eee;*/ width: 50%; height: 100%; background-color: #ececec; /*background: url(/images/background-dots.png) #ececec;*/ }
+.window { display: inline-block; float: left; width: 50%; height: 100%; background-color: #ececec; }
 .window.active { background: #fff; }
-
 .window.active .l-logo { background-color: #333; border-color: #333; }
 
 
@@ -31,7 +18,7 @@ body { margin: 0; padding: 0; }
 
 
 .active .menu { box-shadow: 0 1px 11px -5px rgba(0, 0, 0, 0.5); }
-.menu { /*background-color: #EEE;*/ display: inline-block; color: #999999; width: 100%; padding: 8px 0 7px 0; border-bottom: 1px solid #CFCFCD; border-left: 1px solid #CFCFCD; margin-left: -1px; }
+.menu { display: inline-block; color: #999999; width: 100%; padding: 8px 0 7px 0; border-bottom: 1px solid #CFCFCD; border-left: 1px solid #CFCFCD; margin-left: -1px; }
 
 
 .menu div { display: inline-block; float: left; padding: 6px 5px 5px; font-size: 11px; margin: 0 3px; line-height: 14px; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; }
@@ -44,6 +31,7 @@ body { margin: 0; padding: 0; }
 .menu div.button.small.rename { background: url("/images/flat_icons.png") no-repeat scroll -180px -180px; width: 12px; }
 .menu div.button.small.rights { background: url("/images/flat_icons.png") no-repeat scroll -237px -97px; }
 .menu div.button.small.copy { background: url("/images/flat_icons.png") no-repeat scroll -177px -210px; }
+.menu div.button.small.move { background: url("/images/flat_icons.png") no-repeat scroll -231px -210px; }
 .menu div.button.small.download { background: url("/images/flat_icons.png") no-repeat scroll -176px -243px; }
 .menu div.button.small.extract { background: url("/images/flat_icons.png") no-repeat scroll -232px -35px; }
 .menu div.button.small.archive { background: url("/images/flat_icons.png") no-repeat scroll -175px -58px; }
@@ -55,6 +43,7 @@ body { margin: 0; padding: 0; }
 .menu div.button.small.rename:hover { background-position: -207px -180px; }
 .menu div.button.small.rights:hover { background-position: -237px -122px; }
 .menu div.button.small.copy:hover { background-position: -204px -210px; }
+.menu div.button.small.move:hover { background-position: -231px -243px; }
 .menu div.button.small.download:hover { background-position: -204px -243px; }
 .menu div.button.small.extract:hover { background: url("/images/flat_icons.png") no-repeat scroll -255px -35px; }
 .menu div.button.small.archive:hover { background: url("/images/flat_icons.png") no-repeat scroll -201px -35px; }
@@ -69,21 +58,15 @@ body { margin: 0; padding: 0; }
 .menu div.button.del:hover { color: #FF5A5A; }
 
 
-
 .menu div.button.disabled:hover, 
 .menu div.button.disabled { opacity: 0.5; cursor: default; text-decoration: none; }
 
 
-
 .menu .upload.button { color: #777; border: 1px solid #B7B7B7; background-color: #EAEAE8; text-transform: uppercase; font-size: 12px; text-decoration: none; margin-left: 8px; padding: 5px 12px; margin-right: 10px; border-radius: 3px; float: left; transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; -webkit-transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; font-size: 11px; line-height: 14px; }
 .window.active .menu .upload { border: 1px solid #AACC0D; background-color: #AACC0D; color: #FFF; }
 
-.menu .upload.button.progress { background: url(/images/progress.gif) no-repeat /*-98px*/ -60px 0px #EBEBEB; border-color: #8A9079; color: transparent; padding: 3px 12px; height: 0; margin-top: 9px;     transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s;
-    -webkit-transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s;
-}
-
+.menu .upload.button.progress { background: url(/images/progress.gif) no-repeat /*-98px*/ -60px 0px #EBEBEB; border-color: #8A9079; color: transparent; padding: 3px 12px; height: 0; margin-top: 9px; transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; -webkit-transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; }
 .menu .upload.button.progress.done { background-color: #d1ff66; border-color: #8a9079; box-shadow: 0 0 9px 0 #d1ff38; color: transparent; height: 0; margin-top: 9px; padding: 3px 12px; transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; -webkit-transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; transition: height 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; -webkit-transition: height 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; }
-
 .menu .upload.button:hover, .window.active .menu .upload:hover { border: 1px solid #C0E60F; background-color: #C0E60F; color: #fff; }
 .menu .upload.button:active, .window.active .menu .upload:active { border: 1px solid #FFCC00; background-color: #FFCC00; color: #FFF; }
 
@@ -107,7 +90,6 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px;  b
 .listing li.file {  }
 
 
-/* .listing li .icon { background: url("/images/document.png") no-repeat scroll -2px 6px; float: left; margin-left: -17px; width: 13px; height: 24px; }*/
 .listing li .icon { background: url("/images/flat_icons.png") no-repeat scroll  -97px -100px; float: left; margin-left: -17px; width: 31px; height: 31px; margin-top: 1px; }
 .listing li .icon.filetype-dir { background: url("/images/flat_icons.png") no-repeat scroll -24px -98px; }
 .listing li .icon.filetype-link { background: url("/images/flat_icons.png") no-repeat scroll -97px -121px; }
@@ -203,15 +185,7 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px;  b
 .listing li .filename-holder { max-width: 40%; overflow: hidden; float: left; height: 35px; }
 .listing li .filename { color: #555; cursor: pointer; height: 32px; float: left; padding: 2px 7px 0 7px; border-radius: 3px; transition: all 0.18s cubic-bezier(0.4, 0, 0.2, 1) 0s; -webkit-transition: all 0.18s cubic-bezier(0.4, 0, 0.2, 1) 0s; }
 
-/* .listing li .filename { background: url("/images/folder_.png") no-repeat scroll -2px 6px; color: #555; cursor: pointer; float: left; margin-left: -27px; padding-left: 19px; }*/
-
 .listing li .filename:hover { color: #333; background-color: #D1D0CF; }
-/*
-.listing li .filename:hover { color: #FFF; background-color: #6CB6B9; }
-.listing li.selected .filename:hover { color: #FFF; }
-.listing li.active .filename:hover { color: #FFF; background-color: #CAA335; }
-.listing li.active.selected .filename:hover { color: #FFF; background-color: #60A885; }
-*/
 .listing li .filename a { color: #7D7D7D; text-decoration: none; }
 .listing li .mode { width: 51px; font-size: 11px; padding-top: 2px; }
 .listing li .owner { width: 11%; font-style: italic; color: #81A64F; font-size: 12px; padding-top: 2px; }
@@ -221,58 +195,30 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px;  b
 .listing li .time { width: 50px; font-size: 11px; padding-top: 2px; }
 
 .window.active .listing li.selected .mode { color: #7F7550; }
-.window.active .listing li.selected .owner { /* color: #7F7550; */ }
+.window.active .listing li.selected .owner {  }
 .window.active .listing li.selected .size-value { color: #7F7550; }
 .window.active .listing li.selected .size-unit { color: #7F7550; }
 .window.active .listing li.selected .date { color: #7F7550; }
 .window.active .listing li.selected .time { color: #7F7550; }
 
-
-/*
-.listing li.selected-inactive.selected { background-color: #e9e9e9; border-top: 1px solid #ccc; border-bottom: 1px solid #ccc; }
-.listing li.selected-inactive .mode,
-.listing li.selected-inactive .time,
-.listing li.selected-inactive .date { color: #999 !important; }
-*/
-
 .listing li.selected { background-color: #DEDEDE; }
-.listing.active li.selected { background-color: #ffd437 /*#7FD5D9*/; }
+.listing.active li.selected { background-color: #ffd437; }
 .listing li.selected .filename:hover { color: #333; background-color: #F0B607; }
 
-
-
-
-/* ///.listing li.selected-inactive.selected.active { background-color: #dfc891;  border-top: 1px solid #cdb885; border-bottom: 1px solid #cdb885; }*/
-
-/*
-.listing li.selected .filename { color: #333; }
-.listing li.selected .date,
-.listing li.selected .mode,
-.listing li.selected .time { color: #777; }
-.listing li.selected .owner { color: #31775A; }
-.listing li.selected .size { color: #31775A; }
-*/
 .window.active .listing li.active { background-color: #FFDC5A; }
 .window.active .listing li.active .marker { background-color: #C2A84B; }
 .listing li.active { background-color: #DEDEDE; }
 .listing li.active .marker { background-color: #C2C2C2; }
 
-/* ///.listing li.selected.active .filename { color: #fff29c; } */
 .listing li.selected.active .marker { background-color: #3a8a96; }
 .listing li.selected-inactive { background-color: #DEDEDE; }
-/*///.listing li.selected-inactive .marker { background-color: #7FD5D9; }
-.listing li.selected-inactive .filename { color: #54A9A9; } */
-
 
 .listing li .filename a:hover { color: #3399FF; }
 .listing li:hover { background-color: #E5E5E5; cursor: pointer; }
 .window.active .listing li.active:hover { background-color: #FFE570; }
-.listing li.selected:hover { background-color: /*#89E6EA*/#FFE570; }
+.listing li.selected:hover { background-color: #FFE570; }
 .listing li.selected.active:hover { background-color: #FFE570; }
 
-
-
-
 .context-menu { background-color: #333333; width: 200px; list-style-type: none; font-family: arial; padding-left: 0; }
 .context-menu li { border-bottom: 1px solid #555; padding: 12px 12px 12px 12px; color: #D6CEC1; font-size: 14px; cursor: pointer; }
 
@@ -294,22 +240,16 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px;  b
 .context-menu.sort-order span.name,
 .context-menu.sort-order span.date,
 .context-menu.sort-order span.size,
-.context-menu.sort-order span.type
- { background: url("/images/flat_icons.png") repeat scroll -308px -105px; display: inline-block; padding: 12px 28px 12px 12px; width: 64px; }
-
-
-
+.context-menu.sort-order span.type { background: url("/images/flat_icons.png") repeat scroll -308px -105px; display: inline-block; padding: 12px 28px 12px 12px; width: 64px; }
 .context-menu.sort-order span.active { background-color: #FFCC00; color: #FFF; }
-
 .context-menu.sort-order span:hover { background-color: #4B4B4B; color: #FFF; }
 .context-menu.sort-order span:active { background-color: #FFCC00; color: #FFF; }
 
 
 .confirm-box { background-color: #333; width: 480px; font-family: arial; margin-left: 50px; border-radius: 3px; box-shadow: 0 2px 11px 0 rgba(0, 0, 0, 0.5); }
-/*.confirm-box.replace { height: 230px; }*/
 .confirm-box .message { color: #EBE697; font-size: 16px; padding: 25px; margin-bottom: 60px; display: inline-block; }
 .confirm-box .results,
-.confirm-box .warning { color: #FF9500; font-size: 16px; padding: 25px; }
+.confirm-box .warning { color: #ffc800; font-size: 16px; padding: 25px; }
 .confirm-box .warning .title, 
 .confirm-box .message .title { color: #48B1B7; }
 .confirm-box .action-name { color: #B9CAD4; display: inline-block; float: left; margin-bottom: 28px; margin-left: 25px; }
@@ -317,27 +257,22 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px;  b
 .confirm-box .action-nam .checkbox { border: 1px solid #777; height: 10px; margin-right: 10px; margin-top: 3px; padding-top: 0; width: 10px; }
 
 .confirm-box .controls { border-top: 1px solid #555; display: inline-block; width: 100%; margin-bottom :9px; }
-.confirm-box .controls .cancel { /*background-color: #e8e8e6;*/ border: 1px solid transparent; border-radius: 3px; color: #CCC; display: inline-block; float: left; font-size: 12px; margin: 12px 0 0 12px; padding: 7px 18px; text-transform: uppercase; cursor: pointer; }
+.confirm-box .controls .cancel { border: 1px solid transparent; border-radius: 3px; color: #CCC; display: inline-block; float: left; font-size: 12px; margin: 12px 0 0 12px; padding: 7px 18px; text-transform: uppercase; cursor: pointer; }
 .confirm-box .controls .keep-original { color: #ccc; cursor: pointer; display: inline-block; float: left; margin: 11px 0 0 15px; padding: 7px; text-decoration: underline; }
 .confirm-box .controls .ok { margin: 12px 12px 0 0; border-radius: 3px; cursor: pointer; border: 1px solid #CACE33; background-color: #CACE33; color: #FFF; float: right; display: inline-block; font-size: 12px; padding: 7px 18px; text-transform: uppercase; width: 100px; text-align: center; height: 14px; }
 .confirm-box .controls .cancel:hover,
-.confirm-box .controls .ok:hover { border: 1px solid #54BDAA; background-color: #54BDAA; /*border: 1px solid #6DB8D3; background-color: #6DB8D3;*/ color: #FFF; box-shadow: 0 2px 11px 0 rgba(0, 0, 0, 0.5); }
+.confirm-box .controls .ok:hover { border: 1px solid #54BDAA; background-color: #54BDAA; color: #FFF; box-shadow: 0 2px 11px 0 rgba(0, 0, 0, 0.5); }
 .confirm-box .controls .cancel:active,
 .confirm-box .controls .ok:active { border: 1px solid #ccc; background-color: #ccc; }
 .confirm-box.delete .controls .ok { background-color: #ff9f89; border-color: #ff9f89; }
 .confirm-box.delete .controls .ok:hover { background-color: #FF6C6E; border-color: #FF6C6E; }
 
-
-
 .confirm-box .controls .keep-original:hover { color: #FFCC00; }
 .confirm-box .controls .keep-original:active { color: #6DB8D3; }
 
-/*.confirm-box.delete { height: 183px; }*/
-
 .confirm-box .new-title { background-color: #292929; border: 1px solid #111; color: #eee; font-family: Arial; font-size: 16px; margin-bottom: 73px; margin-left: 27px; padding: 10px 14px; width: 396px; }
 .confirm-box .new-title:focus { border: 1px solid #FFCC00; box-shadow: 0 0 5px 0 rgba(255, 204, 0 , 0.3); }
 
-/*.confirm-box.rename { height: 209px; } */
 .confirm-box.rename .message { margin-bottom: 36px; }
 .confirm-box.rename .controls.replace { display: none; }
 .confirm-box.rename.warning .controls { display: none; }
@@ -352,8 +287,6 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px;  b
 .confirm-box.chmod ul:last-of-type { margin-bottom: 38px; }
 .confirm-box.chmod li { list-style-type: none; }
 
-
-/*.confirm-box.archive { height: 468px; }*/
 .confirm-box.archive .message { margin-bottom: 38px; }
 .confirm-box.archive.warning .controls,
 .confirm-box.archive .controls.replace,
@@ -367,15 +300,12 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px;  b
 .confirm-box.unpack .message { margin-bottom: 0; }
 .confirm-box.pack .message { margin-bottom: 0; }
 
-
 .confirm-box .actions select { background-color: #333333; border: 1px solid #ccc; color: #fff; font-family: Arial; font-size: 16px; margin-bottom: 27px; margin-left: 27px; padding: 10px 14px; }
 .confirm-box .actions .title { color: #ccc; font-family: Arial; line-height: 33px; padding-left: 27px; text-transform: capitalize; }
 .confirm-box .actions label { cursor: pointer; padding-left: 27px; color: #ebe697; }
 .confirm-box.unpack .actions { padding-bottom: 30px; }
 .confirm-box.unpack .actions input { margin-right: 5px; }
 
-
-/*.confirm-box.owner-mode { height: 484px; }*/
 .confirm-box.owner-mode .warning { display: none; }
 .confirm-box.owner-mode.warning .warning { display: inline-block; }
 .confirm-box.owner-mode.warning .message { margin-bottom: -39px; }
@@ -387,8 +317,6 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px;  b
 .confirm-box.owner-mode .recursive { margin-top: 30px; margin-bottom: 25px; }
 
 
-
-
 .warning-box { width: 60%; background-color: #ff9f89; border-bottom: 5px solid #ff6c6e; color: #FFF; font-family: arial; margin-left: auto; margin-right: auto; padding-bottom: 30px; margin-bottom: 50px; left: 20%; position: absolute; top: 0; box-shadow: 0 2px 11px 0 rgba(0, 0, 0, 0.5); }
 .warning-box.inform { background-color: #72c5b2; border-color: #019174; }
 .warning-box.reload { width: 100px; background-color: #333; border-color: #222; z-index: 5000; left: 45%; opacity: 0.9; padding: 17px 27px; border-radius: 0 0 6px 6px; border: none; opacity: 0.9; }
@@ -402,150 +330,53 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px;  b
 .warning-box.inform .close:hover { background-color: #019174; } 
 
 
-
 .fotorama--fullscreen .fotorama__fullscreen-icon { background-position: -64px 0 !important; }
 
+.fileinput-button input { font-size: 14px !important; width: 90px; }
 
-/*
-    transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s;
-    -webkit-transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s;
-
-    box-shadow: 0 6px 15px rgba( 0, 0, 0, 0.23), 0 10px 18px rgba( 0, 0, 0, 0.16);
-    box-shadow: 0 3px 10px rgba(0, 0, 0, 0.23), 0 3px 10px rgba(0, 0, 0, 0.16);
-    box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.64);
-
-
-*/
-
-
-/*
-
- Прочёл. Похоже проблема уже решена, не понял, что нужно сделать, проверить правильность решения?
- Вроде всё в порядке, инпут уже максимльно близко вкладывается в спан.
-
-
- -- Для Дмитрия (удалить после прочтения):
-
- -- Аплоад прячет инпут, делая его прозрачным, и помещая поверх кнопку html (сделано для кроссбраузерности)
- -- При стилизации кнопки для аплоада, важно задать такие же размеры для инпута с типом файла, 
- -- иначе он может быть больше или меньше стилизованной кнопки, что приведёт к вызову аплоад диалогового окна 
- -- при клике на неправильную область
-
-
- -- вот файл инпут ----> .fileinput-button input
-*/
-.fileinput-button input {
-    font-size: 14px !important;
-    width: 90px;
-}
-
-.progress-container {
-  width: 100%;
-  position: fixed;
-  bottom: 1px;
-}
-.progress-container .progress-elm {
-    background-color: rgba(0, 0, 0, 0.5);
-    border-radius: 3px;
-    display: block;
-    height: 12px;
-    margin-left: auto;
-    margin-right: auto;
-    padding: 7px;
-    width: 212px;
-}
-
-.progress-container .progress-elm .title {
-    color: #fff;
-    display: inline-block;
-    float: left;
-    font-family: arial;
-    font-size: 11px;
-    margin-left: 4px;
-    padding-right: 14px;
-    padding-top: 0;
-    text-transform: uppercase;
-}
+.progress-container { width: 100%; position: fixed; bottom: 1px; }
+.progress-container .progress-elm { background-color: rgba(0, 0, 0, 0.5); border-radius: 3px; display: block; height: 12px; margin-left: auto; margin-right: auto; padding: 7px; width: 212px; }
+.progress-container .progress-elm .title { color: #fff; display: inline-block; float: left; font-family: arial; font-size: 11px; margin-left: 4px; padding-right: 14px; padding-top: 0; text-transform: uppercase; }
+.progress-container .progress-elm .progress {  background: #ebebeb url("/images/progress.gif") no-repeat scroll 0px 0; border-color: #8a9079; border-radius: 3px; color: transparent; display: inline-block; height: 0; margin-top: 3px; padding: 3px 12px; transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; width: 60px; float: left; }
+.progress-container .progress-elm .close { background: rgba(0, 0, 0, 0) url("/images/sprite.png?1446554103") repeat scroll -428px -487px; cursor: pointer; display: inline-block; float: right; height: 7px; margin-right: 3px; margin-top: 3px; width: 7px; }
+.progress-container .progress-elm .close:hover { border: 7px solid #333; margin-top: -4px; margin-right: -4px; background-color: #333; }
+.progress-container .progress-elm .close:active { border: 7px solid #FFCC00; margin-top: -4px;  margin-right: -4px; background-color: #FFCC00; }
 
-.progress-container .progress-elm .progress {
-    background: #ebebeb url("/images/progress.gif") no-repeat scroll 0px 0;
-    border-color: #8a9079;
-    border-radius: 3px;
-    color: transparent;
-    display: inline-block;
-    height: 0;
-    margin-top: 3px;
-    padding: 3px 12px;
-    transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s;
-    width: 60px;
-    float: left;
-}
+.checkbox-toolbar { float: left !important; }
 
-.progress-container .progress-elm .close {
-    background: rgba(0, 0, 0, 0) url("/images/sprite.png?1446554103") repeat scroll -428px -487px;
-    cursor: pointer;
-    display: inline-block;
-    float: right;
-    height: 7px;
-    margin-right: 3px;
-    margin-top: 3px;
-    width: 7px;
-}
-.progress-container .progress-elm .close:hover {
-    border: 7px solid #333;
-    margin-top: -4px;
-    margin-right: -4px;
-    background-color: #333;
-}
-.progress-container .progress-elm .close:active {
-    border: 7px solid #FFCC00;
-    margin-top: -4px;
-    margin-right: -4px;
-    background-color: #FFCC00;
-}
 
+.subcontext-control.hidden { display: none !important; }
+.subcontext-control { color: red; }
+.subcontext-menu-hidden { display: none; }
+.subcontext-menu { position: absolute; background-color: yellow; padding: 10px; border: 1px solid red; }
 
 
+.shortcuts { background: rgba(50, 50, 50, 0.9); display: inline-block; position: fixed; right: 20%; bottom: 0; color: #eee; width: 810px; border: 1px solid #333; font-family: arial; font-size: 13px; }
+.shortcuts .header { border-bottom: 1px solid #333; height: 43px; }
+.shortcuts .title { text-transform: uppercase; color: #ffcc00; padding: 7px 0 7px 14px; display: inline-block; float: left; font-size: 11px; letter-spacing: 3px; font-weight: bold; line-height: 30px; }
+.shortcuts .close { background: url("/images/sprite.png?1446554103") repeat scroll -408px -469px; cursor: pointer; display: inline-block; float: right; height: 32px; padding-top: 11px; width: 46px; }
+.shortcuts .close:hover { background-color: #000; }
+.shortcuts .close:active { background-color: #55c9c0; }
+.shortcuts ul { list-style-type: none; padding: 30px 20px; display: inline-block; float: left; width: 360px; }
+.shortcuts ul li { padding: 5px 20px; }
+.shortcuts ul li.step-top { padding-top: 30px; }
+.shortcuts ul li span { color: #48F4EF; display: inline-block; font-weight: bold; padding: 0 20px 0 0; text-align: right; }
+.shortcuts ul li span.bigger { font-size: 18px; }
+.shortcuts ul.note { font-style: italic; color: #9CA484; width: 700px; padding-left: 50px; }
+.shortcuts ul.note a { color: #9CA484; }
 
+.to-shortcuts { display: inline-block; position: fixed; top: 95%; right: 1%; }
+.l-icon-shortcuts { display: inline-block; vertical-align: middle; background-image: url("/images/sprite.png?1446554103"); width: 35px; height: 35px; background-position: -122px -283px; border-radius: 18px; }
+.l-icon-shortcuts:hover { background-position: -160px -283px; }
+.l-icon-shortcuts:active { background-position: -198px -283px; }
 
-.checkbox-toolbar {
-    float: left !important;
-}
-/*W
-.check-label::before {
-    background-image: url("/images/sprite.png?1446554103");
-    background-position: -232px -9px;
-    background-repeat: no-repeat;
-    background-size: 450px auto;
-    content: "";
-    display: inline-block;
-    height: 16px;
-    width: 16px;
-    margin-top: -25px;
-
-    border: 1px solid red;
-}
-input[type="checkbox"] {
-    display: none;
-}
 
-.clicked-on.check-label::before, .checkbox-selected .check-label {
-    background-position: -225px -42px;
-    content: "";
-    display: inline-block;
-    height: 27px;
-    left: -6px;
-    top: -6px;
-    width: 27px;
-}
-*/
 
 @media (max-width: 1400px) {
   .listing li .filename-holder { width: 35%; }
 }
 
-
-@media (max-width: 1450px) {
+@media (max-width: 1550px) {
   .menu div.button.mkfile,
   .menu div.button.mkdir { display: none; }
   .menu div.button.mkfile.small,
@@ -553,14 +384,13 @@ input[type="checkbox"] {
   .listing li .filename-holder { max-width: 30%; }
 }
 
-@media (max-width: 1320px) {
+@media (max-width: 1500px) {
   .menu div.button.del { display: none; }
   .menu div.button.del.small { display: inline-block; }
   .listing li .filename-holder { max-width: 25%; }
 }
 
-
-@media (max-width: 1290px) {
+@media (max-width: 1450px) {
   .menu div.button { display: none; }
   .menu div.button.medium,
   .menu div.button.small { display: inline-block; }
@@ -572,7 +402,7 @@ input[type="checkbox"] {
   .listing li .mode { display: none; }
 }
 
-@media (max-width: 890px) {
+@media (max-width: 990px) {
   .window { width: 100%; }
   .window:nth-of-type(2){ display: none; }
   .listing li .owner { display: inline-block; }
@@ -587,7 +417,7 @@ input[type="checkbox"] {
   .listing li .filename-holder { max-width: 30%; }
 }
 
-@media (max-width: 600px) {
+@media (max-width: 670px) {
   .menu div.button { display: none; }
   .menu div.button.medium,
   .menu div.button.small { display: inline-block; }
@@ -615,123 +445,3 @@ input[type="checkbox"] {
 }
 
 
-.subcontext-control.hidden {
-    display: none !important;
-}
-
-.subcontext-control {
-    color: red;
-}
-.subcontext-menu-hidden {
-    display: none;
-}
-
-.subcontext-menu {
-    position: absolute;
-    background-color: yellow;
-    padding: 10px;
-    border: 1px solid red;
-}
-
-.subcontext-menu li {
-    /*float: left;*/
-}
-
-
-.shortcuts {
-  background: rgba(50, 50, 50, 0.9);
-  display: inline-block;
-  position: fixed;
-  right: 20%;
-  bottom: 0;
-  color: #eee;
-  width: 810px;
-  border: 1px solid #333;
-  font-family: arial;
-  font-size: 13px;
-}
-.shortcuts .header {
-  border-bottom: 1px solid #333;
-  height: 43px;
-}
-.shortcuts .title {
-  text-transform: uppercase;
-  color: #ffcc00;
-  padding: 7px 0 7px 14px;
-  display: inline-block;
-  float: left;
-  font-size: 11px;
-  letter-spacing: 3px;
-  font-weight: bold;
-  line-height: 30px;
-}
-.shortcuts .close {
-  background: url("/images/sprite.png?1446554103") repeat scroll -408px -469px;
-  cursor: pointer;
-  display: inline-block;
-  float: right;
-  height: 32px;
-  padding-top: 11px;
-  width: 46px;
-}
-.shortcuts .close:hover {
-  background-color: #000;
-..
-}
-.shortcuts .close:active {
-  background-color: #55c9c0;
-}
-.shortcuts ul {
-  list-style-type: none;
-  padding: 30px 20px;
-  display: inline-block;
-  float: left;
-  width: 360px;
-}
-.shortcuts ul li {
-  padding: 5px 20px;
-}
-.shortcuts ul li.step-top {
-  padding-top: 30px;
-}
-.shortcuts ul li span {
-  color: #48F4EF;
-  display: inline-block;
-  font-weight: bold;
-  padding: 0 20px 0 0;
-  text-align: right;
-}
-.shortcuts ul li span.bigger {
-  font-size: 18px;
-}
-.shortcuts ul.note {
-  font-style: italic;
-  color: #9CA484;
-  width: 700px;
-  padding-left: 50px;
-}
-.shortcuts ul.note a { 
-  color: #9CA484;
-}
-
-.to-shortcuts {
-  display: inline-block;
-  position: fixed;
-  top: 95%;
-  right: 1%;
-}
-.l-icon-shortcuts {
-  display: inline-block;
-  vertical-align: middle;
-  background-image: url("/images/sprite.png?1446554103");
-  width: 35px;
-  height: 35px;
-  background-position: -122px -283px;
-  border-radius: 18px;
-}
-.l-icon-shortcuts:hover {
-  background-position: -160px -283px;
-}
-.l-icon-shortcuts:active {
-  background-position: -198px -283px;
-}

+ 19 - 9
web/file_manager/fm_api.php

@@ -37,17 +37,29 @@ switch ($_REQUEST['action']) {
 
     case 'rename_file':
         $dir = $_REQUEST['dir'];
-        $item = $_REQUEST['item'];
-        $target_name = $_REQUEST['target_name'];
-        print json_encode($fm->renameFile($dir, $item, $target_name));
+        $item = $dir . '/' . $_REQUEST['item'];
+        $target_name = $dir . '/' . $_REQUEST['target_name'];
+        print json_encode($fm->renameFile($item, $target_name));
         break;
 
     case 'rename_directory':
         $dir = $_REQUEST['dir'];
+        $item = $dir.$_REQUEST['item'];
+        $target_name = $dir.$_REQUEST['target_name'];
+
+        print json_encode($fm->renameDirectory($item, $target_name));
+        break;
+
+    case 'move_file':
         $item = $_REQUEST['item'];
         $target_name = $_REQUEST['target_name'];
+        print json_encode($fm->renameFile($item, $target_name));
+        break;
 
-        print json_encode($fm->renameDirectory($dir, $item, $target_name));
+    case 'move_directory':
+        $item = $_REQUEST['item'];
+        $target_name = $_REQUEST['target_name'];
+        print json_encode($fm->renameDirectory($item, $target_name));
         break;
 
     case 'delete_files':
@@ -98,11 +110,9 @@ switch ($_REQUEST['action']) {
         break;
 
     case 'pack_item':
-        $dir = $_REQUEST['dir'];
-        $target_dir = $_REQUEST['dir_target'];
-        $filename   = $_REQUEST['filename'];
-        $item       = $_REQUEST['item'];
-        print json_encode($fm->packItem($item, $dir, $target_dir, $filename));
+        $items       = $_REQUEST['items'];
+        $dst_item   = $_REQUEST['dst_item'];
+        print json_encode($fm->packItem($items, $dst_item));
         break;
 
     case 'backup':

+ 19 - 11
web/file_manager/fm_core.php

@@ -150,13 +150,18 @@ class FileManager {
         }
     }
 
-    function packItem($item, $dir, $target_dir, $filename) {
-        $item     = $this->formatFullPath($item);
-        $dst_item = $this->formatFullPath($target_dir);
-
+    function packItem($items, $dst_item) {
+	$items_arr = explode(',', $items);
+	foreach($items_arr as $key => $item){
+	    $items_arr[$key] = $this->formatFullPath($item);
+	}
+	$items = implode(' ', $items_arr);
+
+        $dst_item = $this->formatFullPath($dst_item);
         $dst_item = str_replace('.tar.gz', '', $dst_item);
 
-        exec (VESTA_CMD . "v-add-fs-archive {$this->user} {$dst_item} {$item}", $output, $return_var);
+//	echo VESTA_CMD . "v-add-fs-archive {$this->user} {$dst_item} {$items}";
+        exec (VESTA_CMD . "v-add-fs-archive {$this->user} {$dst_item} {$items}", $output, $return_var);
 
         $error = self::check_return_code($return_var, $output);
 
@@ -233,9 +238,12 @@ class FileManager {
         }
     }
 
-    function renameFile($dir, $item, $target_name) {
-        $item     = $this->formatFullPath($dir . '/' . $item);
-        $dst_item = $this->formatFullPath($dir . '/' . $target_name);
+    function renameFile($item, $target_name) {
+//        $item     = $this->formatFullPath($dir . '/' . $item);
+//        $dst_item = $this->formatFullPath($dir . '/' . $target_name);
+
+        $item     = $this->formatFullPath($item);
+        $dst_item = $this->formatFullPath($target_name);
 
         exec (VESTA_CMD . "v-move-fs-file {$this->user} {$item} {$dst_item}", $output, $return_var);
 
@@ -254,9 +262,9 @@ class FileManager {
         }
     }
 
-    function renameDirectory($dir, $item, $target_name) {
-        $item     = $this->formatFullPath($dir . $item);
-        $dst_item = $this->formatFullPath($dir . $target_name);
+    function renameDirectory($item, $target_name) {
+        $item     = $this->formatFullPath($item);
+        $dst_item = $this->formatFullPath($target_name);
 
         if ($item == $dst_item) {
             return array(

binární
web/images/flat_icons.png


+ 5 - 0
web/inc/i18n/ar.php

@@ -591,6 +591,7 @@ $LANG['ar'] = array(
     'NEW DIR' => 'مجلد جديد',
     'DELETE' => 'حذف',
     'RENAME' => 'إعادة تسمية',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'الحقوق',
     'COPY' => 'نسخ',
     'ARCHIVE' => 'ضغط',
@@ -611,6 +612,7 @@ $LANG['ar'] = array(
     'Copy' => 'نسخ',
     'Cancel' => 'إلغاء',
     'Rename' => 'إعادة تسمية',
+    'Move' => 'Move',
     'Change Rights' => 'تغيير الحقوق',
     'Delete' => 'حذف',
     'Extract' => 'فك ضغط',
@@ -621,7 +623,9 @@ $LANG['ar'] = array(
     'YOU ARE REMOVING' => 'تقوم بالحذف',
     'Delete items' => 'حذف العناصر',
     'Copy files' => 'نسخ الملفات',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'هل أنت متأكد أنك تريد نسخ',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'هل انت متأكد أنك تريد حذف',
     'into' => 'إلى',
     'existing files will be replaced' => 'الملفات الموجودة مسبقاً سوف تستبدل',
@@ -674,6 +678,7 @@ $LANG['ar'] = array(
     'Go to the Top of the File List' => 'إذهب إلى أعلى قائمة الملفات',
     'Go to the Last File' => 'إذهب إلى آخر ملف',
     'Open File / Enter Directory' => 'فتح ملف / مجلد',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'الذهاب للمجلد الأب',
     'Select Current File' => 'حدد الملف الحالي',
     'Select Bunch of Files' => 'حدد مجموعة ملفات',

+ 5 - 0
web/inc/i18n/bs.php

@@ -591,6 +591,7 @@ $LANG['bs'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -611,6 +612,7 @@ $LANG['bs'] = array(
     'Copy' => 'Kopirati',
     'Cancel' => 'Odustati',
     'Rename' => 'Izmijeniti',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Izbrisati',
     'Extract' => 'Ekstraktovati',
@@ -621,7 +623,9 @@ $LANG['bs'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -674,6 +678,7 @@ $LANG['bs'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/cn.php

@@ -591,6 +591,7 @@ $LANG['cn'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -611,6 +612,7 @@ $LANG['cn'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -621,7 +623,9 @@ $LANG['cn'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -674,6 +678,7 @@ $LANG['cn'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/cz.php

@@ -592,6 +592,7 @@ $LANG['cz'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -612,6 +613,7 @@ $LANG['cz'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -622,7 +624,9 @@ $LANG['cz'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -675,6 +679,7 @@ $LANG['cz'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/da.php

@@ -593,6 +593,7 @@ $LANG['da'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -613,6 +614,7 @@ $LANG['da'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -623,7 +625,9 @@ $LANG['da'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -676,6 +680,7 @@ $LANG['da'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/de.php

@@ -591,6 +591,7 @@ $LANG['de'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -611,6 +612,7 @@ $LANG['de'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -621,7 +623,9 @@ $LANG['de'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -674,6 +678,7 @@ $LANG['de'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/el.php

@@ -592,6 +592,7 @@ $LANG['el'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -612,6 +613,7 @@ $LANG['el'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -622,7 +624,9 @@ $LANG['el'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -675,6 +679,7 @@ $LANG['el'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/en.php

@@ -591,6 +591,7 @@ $LANG['en'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -611,6 +612,7 @@ $LANG['en'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -621,7 +623,9 @@ $LANG['en'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -674,6 +678,7 @@ $LANG['en'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/es.php

@@ -591,6 +591,7 @@ $LANG['es'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -611,6 +612,7 @@ $LANG['es'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -621,7 +623,9 @@ $LANG['es'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -674,6 +678,7 @@ $LANG['es'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/fa.php

@@ -593,6 +593,7 @@ $LANG['fa'] = array(
     'NEW DIR' => 'پوشه تازه',
     'DELETE' => 'حذف',
     'RENAME' => 'تغییر نام',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'رونوشت',
     'ARCHIVE' => 'بايگاني',
@@ -613,6 +614,7 @@ $LANG['fa'] = array(
     'Copy' => 'كپي',
     'Cancel' => 'لغو',
     'Rename' => 'تغيير نام',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'حذف',
     'Extract' => 'بیرون کشیدن',
@@ -623,7 +625,9 @@ $LANG['fa'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'آيا از كپي كردن اطمينان داريد؟',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'آيا از حذف اطمينان داريد؟',
     'into' => 'به',
     'existing files will be replaced' => 'پرونده های موجود جایگزین خواهد شد',
@@ -676,6 +680,7 @@ $LANG['fa'] = array(
     'Go to the Top of the File List' => 'رفتن به ابتداي فهرست پرونده ها',
     'Go to the Last File' => 'رفتن به آخرين پرونده',
     'Open File / Enter Directory' => 'بازگردن پرونده/ورود به پوشه',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'رفتن به پوشه بالايي',
     'Select Current File' => 'انتخاب فايل جاري',
     'Select Bunch of Files' => 'انتخاب دسته اي پرونده ها',

+ 5 - 0
web/inc/i18n/fi.php

@@ -592,6 +592,7 @@ $LANG['fi'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -612,6 +613,7 @@ $LANG['fi'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -622,7 +624,9 @@ $LANG['fi'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -675,6 +679,7 @@ $LANG['fi'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/fr.php

@@ -591,6 +591,7 @@ $LANG['fr'] = array(
     'NEW DIR' => 'RÉP.',
     'DELETE' => 'SUPPR',
     'RENAME' => 'RENOMMER',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPIER',
     'ARCHIVE' => 'ARCHIVER',
@@ -611,6 +612,7 @@ $LANG['fr'] = array(
     'Copy' => 'Copier',
     'Cancel' => 'Annuler',
     'Rename' => 'Renommer',
+    'MOVE' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Supprimer',
     'Extract' => 'Extraire',
@@ -621,7 +623,9 @@ $LANG['fr'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -674,6 +678,7 @@ $LANG['fr'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/hu.php

@@ -595,6 +595,7 @@ $LANG['hu'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -615,6 +616,7 @@ $LANG['hu'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -625,7 +627,9 @@ $LANG['hu'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -678,6 +682,7 @@ $LANG['hu'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/id.php

@@ -594,6 +594,7 @@ $LANG['id'] = array(
     'NEW DIR' => 'DIREKTORI BARU',
     'DELETE' => 'HAPUS',
     'RENAME' => 'GANTI',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'SALIN',
     'ARCHIVE' => 'ARSIP',
@@ -614,6 +615,7 @@ $LANG['id'] = array(
     'Copy' => 'Salin',
     'Cancel' => 'Batal',
     'Rename' => 'Ganti nama',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Hapus',
     'Extract' => 'Ekstrak',
@@ -624,7 +626,9 @@ $LANG['id'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Yakin mau disalin',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Yakin mau dihapus',
     'into' => 'ke',
     'existing files will be replaced' => 'file yg sudah ada akan diganti',
@@ -677,6 +681,7 @@ $LANG['id'] = array(
     'Go to the Top of the File List' => 'Pindah Ke atas dari Daftar File',
     'Go to the Last File' => 'Pindah File terakhir',
     'Open File / Enter Directory' => 'Buka File/Masuk ke Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Ke Parent Directory',
     'Select Current File' => 'Pilih File ini',
     'Select Bunch of Files' => 'Pilih Bunch of Files',

+ 5 - 0
web/inc/i18n/it.php

@@ -592,6 +592,7 @@ $LANG['it'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -612,6 +613,7 @@ $LANG['it'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -622,7 +624,9 @@ $LANG['it'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -675,6 +679,7 @@ $LANG['it'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/ja.php

@@ -591,6 +591,7 @@ $LANG['ja'] = array(
     'NEW DIR' => 'ディレクトリの作成',
     'DELETE' => '削除',
     'RENAME' => '名前の変更',
+    'MOVE' => 'MOVE',
     'RIGHTS' => '権限',
     'COPY' => 'コピー',
     'ARCHIVE' => 'アーカイブ',
@@ -611,6 +612,7 @@ $LANG['ja'] = array(
     'Copy' => 'コピー',
     'Cancel' => 'キャンセル',
     'Rename' => '名前の変更',
+    'Move' => 'Move',
     'Change Rights' => '権限の変更',
     'Delete' => '削除',
     'Extract' => '展開',
@@ -621,7 +623,9 @@ $LANG['ja'] = array(
     'YOU ARE REMOVING' => '削除中',
     'Delete items' => '項目の削除',
     'Copy files' => 'ファイルのコピー',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => '次のファイルをコピーしてもよろしいですか',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => '次のファイルを削除してもよろしいですか',
     'into' => 'から',
     'existing files will be replaced' => '既存のファイルは置き換えられます',
@@ -674,6 +678,7 @@ $LANG['ja'] = array(
     'Go to the Top of the File List' => 'ファイルリストの先頭に移動する',
     'Go to the Last File' => '最後のファイルに移動する',
     'Open File / Enter Directory' => 'ファイルを開く / ディレクトリに入る',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => '親ディレクトリに移動する',
     'Select Current File' => 'ファイルを選択する',
     'Select Bunch of Files' => 'ファイルを範囲選択する',

+ 5 - 0
web/inc/i18n/nl.php

@@ -592,6 +592,7 @@ $LANG['nl'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -612,6 +613,7 @@ $LANG['nl'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -622,7 +624,9 @@ $LANG['nl'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -675,6 +679,7 @@ $LANG['nl'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/no.php

@@ -592,6 +592,7 @@ $LANG['no'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -612,6 +613,7 @@ $LANG['no'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -622,7 +624,9 @@ $LANG['no'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -675,6 +679,7 @@ $LANG['no'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/pl.php

@@ -591,6 +591,7 @@ $LANG['pl'] = array(
     'NEW DIR' => 'NOWY FOLDER',
     'DELETE' => 'USUŃ',
     'RENAME' => 'ZMIEŃ NAZWĘ',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'KOPIUJ',
     'ARCHIVE' => 'ARCHIWIZUJ',
@@ -611,6 +612,7 @@ $LANG['pl'] = array(
     'Copy' => 'Kopiuj',
     'Cancel' => 'Anuluj',
     'Rename' => 'Zmień nazwę',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Usuń',
     'Extract' => 'Rozpakuj',
@@ -621,7 +623,9 @@ $LANG['pl'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Czy jesteś pewny, że chcesz skopiować?',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Czy jesteś pewny, że chcesz usunąć?',
     'into' => 'do',
     'existing files will be replaced' => 'istniejące pliki zostaną zastąpione',
@@ -674,6 +678,7 @@ $LANG['pl'] = array(
     'Go to the Top of the File List' => 'Przejdź na górę listy plików',
     'Go to the Last File' => 'Przejdź do ostatniego pliku',
     'Open File / Enter Directory' => 'Otwórz plik/folder',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Przejdź do katalogu nadrzędnego',
     'Select Current File' => 'Wybierz aktywny plik',
     'Select Bunch of Files' => 'Wybierz kilka plików',

+ 5 - 0
web/inc/i18n/pt-BR.php

@@ -591,6 +591,7 @@ $LANG['pt-BR'] = array(
     'NEW DIR' => 'NOVO DIR',
     'DELETE' => 'DELETAR',
     'RENAME' => 'RENOMEAR',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPIAR',
     'ARCHIVE' => 'ARQUIVAR',
@@ -611,6 +612,7 @@ $LANG['pt-BR'] = array(
     'Copy' => 'Copiar',
     'Cancel' => 'Cancelar',
     'Rename' => 'Renomear',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Deletar',
     'Extract' => 'Extrair',
@@ -621,7 +623,9 @@ $LANG['pt-BR'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Tem certeza que deseja copiar',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Tem certeza que deseja deletar',
     'into' => 'dentro',
     'existing files will be replaced' => 'arquivos existentes serão substituídos',
@@ -674,6 +678,7 @@ $LANG['pt-BR'] = array(
     'Go to the Top of the File List' => 'Ir para o Início da Lista de Arquivo',
     'Go to the Last File' => 'Ir para o último Arquivo',
     'Open File / Enter Directory' => 'Abrir Arquivo/Digitar Diretório',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Ir para o diretório principal',
     'Select Current File' => 'Selecionar o Arquivo Atual',
     'Select Bunch of Files' => 'Selecionar Vários Arquivos',

+ 5 - 0
web/inc/i18n/pt.php

@@ -591,6 +591,7 @@ $LANG['pt'] = array(
     'NEW DIR' => 'NOVO DIR',
     'DELETE' => 'DELETAR',
     'RENAME' => 'RENOMEAR',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPIAR',
     'ARCHIVE' => 'ARQUIVAR',
@@ -611,6 +612,7 @@ $LANG['pt'] = array(
     'Copy' => 'Copiar',
     'Cancel' => 'Cancelar',
     'Rename' => 'Renomear',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Deletar',
     'Extract' => 'Extrair',
@@ -621,7 +623,9 @@ $LANG['pt'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Tem certeza que deseja copiar',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Tem certeza que deseja deletar',
     'into' => 'dentro',
     'existing files will be replaced' => 'arquivos existentes serão substituídos',
@@ -674,6 +678,7 @@ $LANG['pt'] = array(
     'Go to the Top of the File List' => 'Ir para o Início da Lista de Arquivo',
     'Go to the Last File' => 'Ir para o último Arquivo',
     'Open File / Enter Directory' => 'Abrir Arquivo/Digitar Diretório',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Ir para o diretório principal',
     'Select Current File' => 'Selecionar o Arquivo Atual',
     'Select Bunch of Files' => 'Selecionar Vários Arquivos',

+ 5 - 0
web/inc/i18n/ro.php

@@ -592,6 +592,7 @@ $LANG['ro'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -612,6 +613,7 @@ $LANG['ro'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -622,7 +624,9 @@ $LANG['ro'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -675,6 +679,7 @@ $LANG['ro'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/ru.php

@@ -592,6 +592,7 @@ $LANG['ru'] = array(
     'NEW DIR' => 'ПАПКА',
     'DELETE' => 'УДАЛИТЬ',
     'RENAME' => 'ПЕРЕИМЕНОВАТЬ',
+    'MOVE' => 'ПЕРЕМЕСТИТЬ',
     'RIGHTS' => 'ПРАВА',
     'COPY' => 'КОПИЯ',
     'ARCHIVE' => 'АРХИВ',
@@ -612,6 +613,7 @@ $LANG['ru'] = array(
     'Copy' => 'Скопировать',
     'Cancel' => 'Отмена',
     'Rename' => 'Переименовать',
+    'Move' => 'Пемеместить',
     'Change Rights' => 'Сменить права',
     'Delete' => 'Удалить',
     'Extract' => 'Распаковать',
@@ -622,7 +624,9 @@ $LANG['ru'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Переместить файлы',
     'Are you sure you want to copy' => 'Вы уверены, что хотите скопировать',
+    'Are you sure you want to move' => 'Вы уверены, что хотите переместить',
     'Are you sure you want to delete' => 'Вы уверены, что хотите удалить',
     'into' => 'в',
     'existing files will be replaced' => 'существующие файлы будут перезаписаны',
@@ -675,6 +679,7 @@ $LANG['ru'] = array(
     'Go to the Top of the File List' => 'Перейти к первому файлу',
     'Go to the Last File' => 'Перейти к последнему файлу',
     'Open File / Enter Directory' => 'Открыть Файл/Папку',
+    'Edit File' => 'Редактировать Файл',
     'Go to Parent Directory' => 'Перейти в родительскую директорию',
     'Select Current File' => 'Выбрать активный файл',
     'Select Bunch of Files' => 'Выбрать блок файлов',

+ 5 - 0
web/inc/i18n/se.php

@@ -591,6 +591,7 @@ $LANG['se'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -611,6 +612,7 @@ $LANG['se'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -621,7 +623,9 @@ $LANG['se'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -674,6 +678,7 @@ $LANG['se'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/tr.php

@@ -592,6 +592,7 @@ $LANG['tr'] = array(
     'NEW DIR' => 'YENİ KLASÖR',
     'DELETE' => 'SİL',
     'RENAME' => 'YENİDEN ADLANDIR',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'KOPYALA',
     'ARCHIVE' => 'ARŞİVLE',
@@ -612,6 +613,7 @@ $LANG['tr'] = array(
     'Copy' => 'Kopyala',
     'Cancel' => 'Vazgeç',
     'Rename' => 'Yeniden Adlandır',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Sil',
     'Extract' => 'Çıkart',
@@ -622,7 +624,9 @@ $LANG['tr'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Kopyalamak istediğinizden emin misiniz',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Silmek istediğinizden emin misiniz',
     'into' => 'into',
     'existing files will be replaced' => 'varolan dosyalar değiştirilir',
@@ -675,6 +679,7 @@ $LANG['tr'] = array(
     'Go to the Top of the File List' => 'Dosya Listesinin Tepesine git',
     'Go to the Last File' => 'Son Dosyaya git',
     'Open File / Enter Directory' => 'Dosya Aç/Dizin Gir',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Üst Dizine Git',
     'Select Current File' => 'Şuanki Dosyayı Seç',
     'Select Bunch of Files' => 'Dosya Demetini Seç',

+ 5 - 0
web/inc/i18n/tw.php

@@ -594,6 +594,7 @@ $LANG['tw'] = array(
     'NEW DIR' => '新增資料夾',
     'DELETE' => '刪除',
     'RENAME' => '重新命名',
+    'MOVE' => 'MOVE',
     'RIGHTS' => '權限',
     'COPY' => '複製',
     'ARCHIVE' => '壓縮',
@@ -614,6 +615,7 @@ $LANG['tw'] = array(
     'Copy' => '複製',
     'Cancel' => '取消',
     'Rename' => '重新命名',
+    'Move' => 'Move',
     'Change Rights' => '修改權限',
     'Delete' => '刪除',
     'Extract' => '解壓縮',
@@ -624,7 +626,9 @@ $LANG['tw'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => '確定要複製',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => '確定要刪除',
     'into' => '資訊',
     'existing files will be replaced' => '原本的檔案會被覆蓋',
@@ -677,6 +681,7 @@ $LANG['tw'] = array(
     'Go to the Top of the File List' => '回到檔案列表頂端',
     'Go to the Last File' => '回到上個檔案',
     'Open File / Enter Directory' => '開啟檔案 或 進入資料夾',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => '回到上一頁',
     'Select Current File' => '選取目前的檔案',
     'Select Bunch of Files' => '選取多個檔案',

+ 5 - 0
web/inc/i18n/ua.php

@@ -592,6 +592,7 @@ $LANG['ua'] = array(
     'NEW DIR' => 'NEW DIR',
     'DELETE' => 'DELETE',
     'RENAME' => 'RENAME',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'COPY',
     'ARCHIVE' => 'ARCHIVE',
@@ -612,6 +613,7 @@ $LANG['ua'] = array(
     'Copy' => 'Copy',
     'Cancel' => 'Cancel',
     'Rename' => 'Rename',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Delete',
     'Extract' => 'Extract',
@@ -622,7 +624,9 @@ $LANG['ua'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Are you sure you want to copy',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Are you sure you want to delete',
     'into' => 'into',
     'existing files will be replaced' => 'existing files will be replaced',
@@ -675,6 +679,7 @@ $LANG['ua'] = array(
     'Go to the Top of the File List' => 'Go to the Top of the File List',
     'Go to the Last File' => 'Go to the Last File',
     'Open File / Enter Directory' => 'Open File / Enter Directory',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Go to Parent Directory',
     'Select Current File' => 'Select Current File',
     'Select Bunch of Files' => 'Select Bunch of Files',

+ 5 - 0
web/inc/i18n/vi.php

@@ -591,6 +591,7 @@ $LANG['vi'] = array(
     'NEW DIR' => 'Thêm thư mục mới',
     'DELETE' => 'Xóa',
     'RENAME' => 'Đổi tên',
+    'MOVE' => 'MOVE',
     'RIGHTS' => 'RIGHTS',
     'COPY' => 'Sao chép',
     'ARCHIVE' => 'Nén',
@@ -611,6 +612,7 @@ $LANG['vi'] = array(
     'Copy' => 'Sao chép',
     'Cancel' => 'Hủy',
     'Rename' => 'Đổi tên',
+    'Move' => 'Move',
     'Change Rights' => 'Change Rights',
     'Delete' => 'Xóa',
     'Extract' => 'Giải nén',
@@ -621,7 +623,9 @@ $LANG['vi'] = array(
     'YOU ARE REMOVING' => 'YOU ARE REMOVING',
     'Delete items' => 'Delete items',
     'Copy files' => 'Copy files',
+    'Move files' => 'Move files',
     'Are you sure you want to copy' => 'Bạn có chắc chắn muốn sao chép',
+    'Are you sure you want to move' => 'Are you sure you want to move',
     'Are you sure you want to delete' => 'Bạn có chắc chắn muốn xóa',
     'into' => 'into',
     'existing files will be replaced' => 'tệp tồn tại sẽ được ghi đè',
@@ -674,6 +678,7 @@ $LANG['vi'] = array(
     'Go to the Top of the File List' => 'Lên đầu danh sách tệp',
     'Go to the Last File' => 'Di chuyển đến tệp cuối cùng',
     'Open File / Enter Directory' => 'Mở tệp/Truy cập thư mục',
+    'Edit File' => 'Edit File',
     'Go to Parent Directory' => 'Về thư mục cha',
     'Select Current File' => 'Chọn tệp hiện tại',
     'Select Bunch of Files' => 'Chọn nhiều tệp',

+ 7 - 3
web/js/app.js

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

+ 289 - 125
web/js/file_manager.js

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

+ 3 - 0
web/js/i18n.js.php

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

+ 25 - 7
web/js/templates.js

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

+ 10 - 72
web/templates/file_manager/main.php

@@ -88,6 +88,7 @@
         <li><span class="key">F7</span><?=__('New Folder')?></li>
         <li><span class="key">d</span><?=__('Download')?></li>
         <li><span class="key">F2 / Shift+F6</span><?=__('Rename')?></li>
+        <li><span class="key">m</span><?=__('Move')?></li>
         <li><span class="key">F5</span><?=__('Copy')?></li>
         <li><span class="key">a</span><?=__('Archive')?></li>
         <li><span class="key">F8 / Del</span><?=__('Delete')?></li>
@@ -104,6 +105,7 @@
         <li><span class="key">Home</span><?=__('Go to the Top of the File List')?></li>
         <li><span class="key">End</span><?=__('Go to the Last File')?></li>
         <li class="step-top"><span class="key">Enter</span><?=__('Open File / Enter Directory')?></li>
+        <li><span class="key">F4</span><?=__('Edit File')?></li>
         <li><span class="key">Backspace</span><?=__('Go to Parent Directory')?></li>
         <li class="step-top"><span class="key">Insert / Space</span><?=__('Select Current File')?></li>
         <li><span class="key">Shift + click</span><?=__('Select Bunch of Files')?></li>
@@ -124,15 +126,17 @@
         <script type="text/javascript" src="/js/templates.js"></script>
         <script type="text/javascript" src="/js/floating_layer.js"></script>
         <script src="/js/ripple.js"></script>
-        <script src="/js/jquery.iframe-transport.js"></script>
-        <script src="/js/jquery.fileupload.js"></script>
-        <script src="/js/jquery.arcticmodal.js"></script>
-        
+
         <?php if (!empty($GLOBAL_JS)): ?>
             <?php echo $GLOBAL_JS; ?>
         <?php endif; ?>
 
         <script type="text/javascript" src="/js/file_manager.js"></script>
+
+        <script src="/js/jquery.iframe-transport.js"></script>
+        <script src="/js/jquery.fileupload.js"></script>
+        <script src="/js/jquery.arcticmodal.js"></script>
+
         <script type="text/javascript">
         $(function () {
             'use strict';
@@ -145,11 +149,10 @@
                     singleFileUploads: false,
                     add: function (e, data) {
                         FM.setTabActive(FM['TAB_'+letter]);
-                        
+
                         var tab = FM.getTabLetter(FM.CURRENT_TAB);
                         var file_relocation = FM['TAB_'+tab+'_CURRENT_PATH'];
-                        
-                        
+
 
                         $('#file_upload_' + letter).fileupload("option", "url", url + '?dir=' + file_relocation);
                         acc = $('<div>');
@@ -192,28 +195,10 @@
                         //console.log(data);
                     },
                     always: function(e, data) {
-                        /*if (show_msg) {
-                            clearTimeout(window.ht_fd);
-                            var info = $('.warning-box.inform').clone(true);
-                            $(info).attr('id', 'file-upload-msg');
-                            $(info).find('.message').text('Bla bla bla');
-                            $(info).find('.message-small').html(acc);
-                            $(info).find('.close').bind('click', function() {
-                                $('#file-upload-msg').remove();
-                            });
-                            
-                            $('body').append($(info).removeClass('hidden'));
-                        
-                            window.ht_fd = setTimeout(function() {
-                                $('#file-upload-msg').fadeOut();
-                            }, 3000);
-                        }*/
-                        
                         var tab = FM.getTabLetter(FM.CURRENT_TAB);
                         var box = FM['TAB_' + tab];
                         FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box);
 
-                        //$('.file-upload-button-' + tab).removeClass('progress');
                         $('.file-upload-button-' + tab).addClass('done');
 
                         setTimeout(function() {
@@ -282,8 +267,6 @@
             
             $(".listing-left").selectable({
                 selected: function (event, ui) {
-					//console.log(ui);
-					//console.log($(".listing-left .selected"));
 					FM.setTabActive(FM.TAB_A, 'skip_highlights');
 					
 					$(".listing-left .active").removeClass('active');
@@ -298,7 +281,6 @@
                     $(ui.selected).addClass('active');
                     
                     
-                    //$(ui.selected).addClass('active');
                     checkIfArchive(ui.selected);
                     $(".listing-left .ui-selected").addClass('selected');
                     
@@ -311,17 +293,6 @@
 					
 					FM.preselectedItems.A = [];
 
-                    /*FM.setTabActive(FM.TAB_A, 'skip_highlights');
-                    $(".listing-left .selected, .listing-left .ui-selectee").each(function(i, o) {
-                        if (!$(o).hasClass('ui-selected')) {
-                            $(o).removeClass('selected');
-                            $(o).removeClass('active');
-                        }
-                    });
-                    $(ui.selected).addClass('selected');
-                    $(ui.selected).addClass('active');
-                    checkIfArchive(ui.selected);
-                    $(".listing-left .ui-selected").addClass('selected');*/
                 },
                 unselected: function (event, ui) {
 					FM.setTabActive(FM.TAB_A, 'skip_highlights');
@@ -336,15 +307,6 @@
 						FM['CURRENT_A_LINE'] = 0;
 					}
 					
-                    /*$(".listing-left .selected, .listing-left .ui-selectee").each(function(i, o) {
-                        if (!$(o).hasClass('ui-selected')) {
-                            $(o).removeClass('selected');
-                            $(o).removeClass('active');
-                        }
-                    });
-                    FM.setTabActive(FM.TAB_A, 'skip_highlights');
-                    $(ui.unselected).removeClass('selected');
-                    $(ui.selected).addClass('active');*/
                 }
             });
             $(".listing-right").selectable({
@@ -394,30 +356,6 @@
 
 
             });
-            /*$(".listing-right").selectable({
-                selected: function (event, ui) {
-                    $(".listing-left .selected").each(function(i, o) {
-                        if (!$(o).hasClass('ui-selected')) {
-                            $(o).removeClass('selected');
-                        }
-                    });
-                    FM.setTabActive(FM.TAB_B, 'skip_highlights');
-                    $(ui.selected).addClass('selected');
-                    checkIfArchive(ui.selected);
-                    $(".listing-left .ui-selected").addClass('selected');
-                },
-                unselected: function (event, ui) {
-                    $(".listing-left .selected").each(function(i, o) {
-                        if (!$(o).hasClass('ui-selected')) {
-                            $(o).removeClass('selected');
-                        }
-                    });
-                    FM.setTabActive(FM.TAB_B, 'skip_highlights');
-                    $(ui.unselected).removeClass('selected');
-                }
-            });*/
-           
-            
         });
         </script>
 </body>

+ 2 - 0
web/templates/file_manager/tab_menu.php

@@ -16,6 +16,8 @@
 <div class="rights button small" onClick="FM.setTabActive(FM['TAB_<?php echo $pre_tab ?>']);FM.chmodItems()"title="<?=__('RIGHTS')?>"></div>
 <div class="copy button" onClick="FM.setTabActive(FM['TAB_<?php echo $pre_tab ?>']);FM.copyItems()"><?=__('COPY')?></div>
 <div class="copy button small" onClick="FM.setTabActive(FM['TAB_<?php echo $pre_tab ?>']);FM.copyItems()" title="<?=__('COPY')?>"></div>
+<div class="move button" onClick="FM.setTabActive(FM['TAB_<?php echo $pre_tab ?>']);FM.moveItems()"><?=__('MOVE')?></div>
+<div class="move button small" onClick="FM.setTabActive(FM['TAB_<?php echo $pre_tab ?>']);FM.moveItems()" title="<?=__('MOVE')?>"></div>
 <div class="archive button" onClick="FM.setTabActive(FM['TAB_<?php echo $pre_tab ?>']);FM.packItem()"><?=__('ARCHIVE')?></div>
 <div class="archive button small" onClick="FM.setTabActive(FM['TAB_<?php echo $pre_tab ?>']);FM.packItem()" title="<?=__('ARCHIVE')?>"></div>
 <div class="extract button extract-btn" onClick="FM.setTabActive(FM['TAB_<?php echo $pre_tab ?>']);FM.unpackItem()"><?=__('EXTRACT')?></div>