plugins/kolab_files

Aleksander Machniak machniak at kolabsys.com
Fri Mar 15 15:13:07 CET 2013


 plugins/kolab_files/kolab_files.js             |  134 +++++++++++++++++--------
 plugins/kolab_files/lib/kolab_files_engine.php |    3 
 plugins/kolab_files/localization/en_US.inc     |    2 
 3 files changed, 96 insertions(+), 43 deletions(-)

New commits:
commit 2358a0d80728e68784ab118bcbbde52dad11a34e
Author: Aleksander Machniak <machniak at kolabsys.com>
Date:   Fri Mar 15 15:12:45 2013 +0100

    Implemented files moving (drag'n'drop)

diff --git a/plugins/kolab_files/kolab_files.js b/plugins/kolab_files/kolab_files.js
index 1b2fc6c..e7bd066 100644
--- a/plugins/kolab_files/kolab_files.js
+++ b/plugins/kolab_files/kolab_files.js
@@ -69,8 +69,8 @@ window.rcmail && rcmail.addEventListener('init', function() {
 /*
       rcmail.file_list.addEventListener('dragstart', function(o){ p.drag_start(o); });
       rcmail.file_list.addEventListener('dragmove', function(e){ p.drag_move(e); });
-      rcmail.file_list.addEventListener('dragend', function(e){ p.drag_end(e); });
 */
+      rcmail.file_list.addEventListener('dragend', function(e){ kolab_files_drag_end(e); });
       rcmail.file_list.addEventListener('column_replace', function(e){ kolab_files_set_coltypes(e); });
       rcmail.file_list.addEventListener('listupdate', function(e){ rcmail.triggerEvent('listupdate', e); });
 
@@ -356,6 +356,17 @@ kolab_files_list_select = function(list)
 //    rcmail.select_all_mode = false;
 };
 
+kolab_files_drag_end = function()
+{
+  var folder = $('#files-folder-list li.droptarget').removeClass('droptarget');
+
+  if (folder.length) {
+    folder = folder.data('folder');
+
+    file_api.file_move(kolab_files_selected(), folder);
+  }
+};
+
 kolab_files_selected = function()
 {
   var files = [];
@@ -369,6 +380,11 @@ kolab_files_selected = function()
   return files;
 };
 
+
+/***********************************************************/
+/**********              Commands                 **********/
+/***********************************************************/
+
 rcube_webmail.prototype.files_sort = function(props)
 {
   var params = {},
@@ -507,7 +523,7 @@ function kolab_files_ui()
     $.each(this.env.folders, function(i, f) {
       var row = $('<li class="mailbox"><span class="branch"></span></li>');
 
-      row.attr('id', f.id)
+      row.attr('id', f.id).data('folder', i)
         .append($('<span class="name">').text(f.name))
         .click(function() { file_api.folder_select(i); });
 
@@ -516,6 +532,15 @@ function kolab_files_ui()
 
       if (f.virtual)
         row.addClass('virtual');
+      else
+        row.mouseenter(function() {
+          if (rcmail.file_list.drag_active)
+            $(this).addClass('droptarget');
+          })
+          .mouseleave(function() {
+          if (rcmail.file_list.drag_active)
+            $(this).removeClass('droptarget');
+          });
 
       list.append(row);
 
@@ -545,6 +570,46 @@ function kolab_files_ui()
     this.file_list();
   };
 
+  // folder create request
+  this.folder_create = function(folder)
+  {
+    this.req = this.set_busy(true, 'kolab_files.foldercreating');
+    this.get('folder_create', {folder: folder}, 'folder_create_response');
+  };
+
+  // folder create response handler
+  this.folder_create_response = function(response)
+  {
+    if (!this.response(response))
+      return;
+
+    this.display_message('kolab_files.foldercreatenotice', 'confirmation');
+
+    // refresh folders list
+    this.folder_list();
+  };
+
+  // folder delete request
+  this.folder_delete = function(folder)
+  {
+    this.req = this.set_busy(true, 'kolab_files.folderdeleting');
+    this.get('folder_delete', {folder: folder}, 'folder_delete_response');
+  };
+
+  // folder delete response handler
+  this.folder_delete_response = function(response)
+  {
+    if (!this.response(response))
+      return;
+
+    this.env.folder = null;
+    rcmail.enable_command('files-folder-delete', 'files-folder-rename', false);
+    this.display_message('kolab_files.folderdeletenotice', 'confirmation');
+
+    // refresh folders list
+    this.folder_list();
+  };
+
   this.file_list = function(params)
   {
     if (!this.env.folder || !rcmail.gui_objects.filelist)
@@ -622,46 +687,6 @@ function kolab_files_ui()
     $(row).addClass('selected');
   };
 
-  // folder create request
-  this.folder_create = function(folder)
-  {
-    this.req = this.set_busy(true, 'kolab_files.foldercreating');
-    this.get('folder_create', {folder: folder}, 'folder_create_response');
-  };
-
-  // folder create response handler
-  this.folder_create_response = function(response)
-  {
-    if (!this.response(response))
-      return;
-
-    this.display_message('kolab_files.foldercreatenotice', 'confirmation');
-
-    // refresh folders list
-    this.folder_list();
-  };
-
-  // folder delete request
-  this.folder_delete = function(folder)
-  {
-    this.req = this.set_busy(true, 'kolab_files.folderdeleting');
-    this.get('folder_delete', {folder: folder}, 'folder_delete_response');
-  };
-
-  // folder delete response handler
-  this.folder_delete_response = function(response)
-  {
-    if (!this.response(response))
-      return;
-
-    this.env.folder = null;
-    rcmail.enable_command('files-folder-delete', 'files-folder-rename', false);
-    this.display_message('kolab_files.folderdeletenotice', 'confirmation');
-
-    // refresh folders list
-    this.folder_list();
-  };
-
   this.file_search = function(value)
   {
     if (value) {
@@ -708,6 +733,31 @@ function kolab_files_ui()
     this.file_list();
   };
 
+  // file(s) move request
+  this.file_move = 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.filemoving');
+    this.get('file_move', {file: list}, 'file_move_response');
+  };
+
+  // file(s) move response handler
+  this.file_move_response = function(response)
+  {
+    if (!this.response(response))
+      return;
+
+    this.display_message('kolab_files.filemovenotice', 'confirmation');
+    this.file_list();
+  };
+
   // 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 2e109ab..4a87080 100644
--- a/plugins/kolab_files/lib/kolab_files_engine.php
+++ b/plugins/kolab_files/lib/kolab_files_engine.php
@@ -462,7 +462,8 @@ class kolab_files_engine
 
         $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.folderdeleteconfirm', 'kolab_files.filedeleting', 'kolab_files.filedeletenotice',
+          'kolab_files.filemoving', 'kolab_files.filemovenotice');
 
         $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 e453f5e..f657cb5 100644
--- a/plugins/kolab_files/localization/en_US.inc
+++ b/plugins/kolab_files/localization/en_US.inc
@@ -33,8 +33,10 @@ $labels['foldercreatenotice'] = 'Folder created successfully.';
 $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['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.';
 
 ?>





More information about the commits mailing list