plugins/kolab_files

Aleksander Machniak machniak at kolabsys.com
Thu Apr 4 14:35:29 CEST 2013


 plugins/kolab_files/kolab_files.js                   |   62 ++++++++++++++++++-
 plugins/kolab_files/lib/kolab_files_engine.php       |   11 ++-
 plugins/kolab_files/localization/en_US.inc           |    2 
 plugins/kolab_files/skins/larry/templates/files.html |    7 ++
 plugins/kolab_files/skins/larry/ui.js                |    6 +
 5 files changed, 81 insertions(+), 7 deletions(-)

New commits:
commit b8f4b4332a6c6c46067e14d347232918e1d63680
Author: Aleksander Machniak <machniak at kolabsys.com>
Date:   Thu Apr 4 14:32:43 2013 +0200

    Implemented files copying (with drag-n-drop and SHIFT key)

diff --git a/plugins/kolab_files/kolab_files.js b/plugins/kolab_files/kolab_files.js
index 2263992..9679651 100644
--- a/plugins/kolab_files/kolab_files.js
+++ b/plugins/kolab_files/kolab_files.js
@@ -86,7 +86,7 @@ window.rcmail && rcmail.addEventListener('init', function() {
     // "one file only" commands
     rcmail.env.file_commands = ['files-get'];
     // "one or more file" commands
-    rcmail.env.file_commands_all = ['files-delete'];
+    rcmail.env.file_commands_all = ['files-delete', 'files-move', 'files-copy'];
 
     kolab_files_init();
     file_api.folder_list();
@@ -448,17 +448,37 @@ kolab_files_list_select = function(list)
 //    rcmail.select_all_mode = false;
 };
 
-kolab_files_drag_end = function()
+kolab_files_drag_end = function(e)
 {
   var folder = $('#files-folder-list li.droptarget').removeClass('droptarget');
 
   if (folder.length) {
     folder = folder.data('folder');
 
-    file_api.file_move(kolab_files_selected(), folder);
+    var modkey = rcube_event.get_modifier(e),
+      menu = rcmail.gui_objects.file_dragmenu;
+
+    if (menu && modkey == SHIFT_KEY && rcmail.commands['files-copy']) {
+      var pos = rcube_event.get_mouse_pos(e);
+      rcmail.env.drag_target = folder;
+      $(menu).css({top: (pos.y-10)+'px', left: (pos.x-10)+'px'}).show();
+      return;
+    }
+
+    rcmail.command('files-move', folder);
   }
 };
 
+kolab_files_drag_menu_action = function(command)
+{
+  var menu = rcmail.gui_objects.file_dragmenu;
+
+  if (menu)
+    $(menu).hide();
+
+  rcmail.command(command, rcmail.env.drag_target);
+};
+
 kolab_files_selected = function()
 {
   var files = [];
@@ -529,6 +549,18 @@ rcube_webmail.prototype.files_delete = function()
   file_api.file_delete(files);
 };
 
+rcube_webmail.prototype.files_move = function(folder)
+{
+  var files = kolab_files_selected();
+  file_api.file_move(files, folder);
+};
+
+rcube_webmail.prototype.files_copy = function(folder)
+{
+  var files = kolab_files_selected();
+  file_api.file_copy(files, folder);
+};
+
 rcube_webmail.prototype.files_upload = function(form)
 {
   if (form)
@@ -850,6 +882,30 @@ function kolab_files_ui()
     this.file_list();
   };
 
+  // file(s) copy request
+  this.file_copy = function(files, folder)
+  {
+    if (!files || !files.length || !folder)
+      return;
+
+    var list = {};
+    $.each(files, function(i, v) {
+      list[v] = folder + file_api.env.directory_separator + file_api.file_name(v);
+    });
+
+    this.req = this.set_busy(true, 'kolab_files.filecopying');
+    this.get('file_copy', {file: list}, 'file_copy_response');
+  };
+
+  // file(s) copy response handler
+  this.file_copy_response = function(response)
+  {
+    if (!this.response(response))
+      return;
+
+    this.display_message('kolab_files.filecopynotice', 'confirmation');
+  };
+
   // file upload request
   this.file_upload = function(form)
   {
diff --git a/plugins/kolab_files/lib/kolab_files_engine.php b/plugins/kolab_files/lib/kolab_files_engine.php
index 6b3993e..3600efb 100644
--- a/plugins/kolab_files/lib/kolab_files_engine.php
+++ b/plugins/kolab_files/lib/kolab_files_engine.php
@@ -456,10 +456,13 @@ class kolab_files_engine
 
     protected function action_index()
     {
-        $this->rc->output->add_label('deletefolderconfirm', 'kolab_files.folderdeleting',
-          'kolab_files.foldercreating', 'kolab_files.uploading', 'kolab_files.filedeleteconfirm',
-          'kolab_files.folderdeleteconfirm', 'kolab_files.filedeleting', 'kolab_files.filedeletenotice',
-          'kolab_files.filemoving', 'kolab_files.filemovenotice');
+        $this->rc->output->add_label(
+            'kolab_files.folderdeleting', 'kolab_files.folderdeleteconfirm',
+            'kolab_files.foldercreating', 'kolab_files.uploading',
+            'kolab_files.filedeleting', 'kolab_files.filedeletenotice', 'kolab_files.filedeleteconfirm',
+            'kolab_files.filemoving', 'kolab_files.filemovenotice',
+            'kolab_files.filecopying', 'kolab_files.filecopynotice'
+        );
 
         $this->rc->output->set_pagetitle($this->plugin->gettext('files'));
         $this->rc->output->send('kolab_files.files');
diff --git a/plugins/kolab_files/localization/en_US.inc b/plugins/kolab_files/localization/en_US.inc
index c0b2528..a038ff3 100644
--- a/plugins/kolab_files/localization/en_US.inc
+++ b/plugins/kolab_files/localization/en_US.inc
@@ -37,9 +37,11 @@ $labels['saveallnotice'] = 'Successfully saved $n file(s).';
 $labels['saveallerror'] = 'Saving $n file(s) failed.';
 $labels['attacherror'] = 'Failed to attach file(s) from the cloud';
 $labels['filemoving'] = 'Moving file(s)...';
+$labels['filecopying'] = 'Copying file(s)...';
 $labels['filedeleting'] = 'Deleting file(s)...';
 $labels['filedeleteconfirm'] = 'Are you sure you want to delete selected files?';
 $labels['filedeletenotice'] = 'File(s) deleted successfully.';
 $labels['filemovenotice'] = 'File(s) moved successfully.';
+$labels['filecopynotice'] = 'File(s) copied successfully.';
 
 ?>
diff --git a/plugins/kolab_files/skins/larry/templates/files.html b/plugins/kolab_files/skins/larry/templates/files.html
index d6e094c..ac8779f 100644
--- a/plugins/kolab_files/skins/larry/templates/files.html
+++ b/plugins/kolab_files/skins/larry/templates/files.html
@@ -99,6 +99,13 @@
 	</div>
 </div>
 
+<div id="dragfilemenu" class="popupmenu">
+	<ul class="toolbarmenu">
+		<li><roundcube:button command="files-move" onclick="return kolab_files_drag_menu_action('files-move')" label="move" classAct="active" /></li>
+		<li><roundcube:button command="files-copy" onclick="return kolab_files_drag_menu_action('files-copy')" label="copy" classAct="active" /></li>
+	</ul>
+</div>
+
 <roundcube:include file="/includes/footer.html" />
 <script type="text/javascript">
 kolab_files_ui_init();
diff --git a/plugins/kolab_files/skins/larry/ui.js b/plugins/kolab_files/skins/larry/ui.js
index cd267e0..20ac934 100644
--- a/plugins/kolab_files/skins/larry/ui.js
+++ b/plugins/kolab_files/skins/larry/ui.js
@@ -6,6 +6,12 @@ function kolab_files_ui_init()
   $(document).ready(function() {
     rcmail.addEventListener('menu-open', kolab_files_show_listoptions);
     rcmail.addEventListener('menu-save', kolab_files_save_listoptions);
+
+    var dragmenu = $('#dragfilemenu');
+    if (dragmenu.length) {
+      rcmail.gui_object('file_dragmenu', 'dragfilemenu');
+      UI.add_popup('dragfilemenu', {sticky: 1});
+    }
   });
 
   kolab_files_upload_input('#filestoolbar a.upload');





More information about the commits mailing list