From d87fc29fee9e629fad49d956a449ae647c0bc142 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Wed, 11 Jun 2008 15:26:08 -0400
Subject: [PATCH] - don't call expunge and don't remove message row after message move   if flag_for_deletion is set to true (#1485002)

---
 program/js/app.js |  149 ++++++++++++++++++++++++++-----------------------
 1 files changed, 80 insertions(+), 69 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index aabe96b..96c9ec3 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -1397,13 +1397,13 @@
       lock = true;
       this.set_busy(true, 'movingmessage');
       }
-    else
+    else if (!this.env.flag_for_deletion)
       this.show_contentframe(false);
 
     // Hide message command buttons until a message is selected
     this.enable_command('reply', 'reply-all', 'forward', 'delete', 'mark', 'print', false);
 
-    this._with_selected_messages('moveto', lock, add_url);
+    this._with_selected_messages('moveto', lock, add_url, (this.env.flag_for_deletion ? false : true));
     };
 
   // delete selected messages from the current mailbox
@@ -1453,12 +1453,12 @@
       return;
       
     this.show_contentframe(false);
-    this._with_selected_messages('delete', false, '&_from='+(this.env.action ? this.env.action : ''));
+    this._with_selected_messages('delete', false, '&_from='+(this.env.action ? this.env.action : ''), true);
     };
 
   // Send a specifc request with UIDs of all selected messages
   // @private
-  this._with_selected_messages = function(action, lock, add_url)
+  this._with_selected_messages = function(action, lock, add_url, remove)
     {
     var a_uids = new Array();
 
@@ -1467,13 +1467,28 @@
     else
       {
       var selection = this.message_list.get_selection();
+      var rows = this.message_list.rows;
       var id;
       for (var n=0; n<selection.length; n++)
         {
         id = selection[n];
         a_uids[a_uids.length] = id;
 
-        this.message_list.remove_row(id, (n == selection.length-1));
+	if (remove)
+          this.message_list.remove_row(id, (n == selection.length-1));
+        else
+	  {
+	  rows[id].deleted = true;
+        
+          if (rows[id].classname.indexOf('deleted')<0)
+	    {
+            rows[id].classname += ' deleted';
+            this.set_classname(rows[id].obj, 'deleted', true);
+            }
+        
+	  if (rows[id].icon && this.env.deletedicon)
+            rows[id].icon.src = this.env.deletedicon;
+	  }
         }
       }
     
@@ -1838,9 +1853,9 @@
     var input_cc = rcube_find_object('_cc');
     var input_bcc = rcube_find_object('_bcc');
     var input_subject = rcube_find_object('_subject');
-    var input_message = rcube_find_object('_message');
-    
+    var editor, input_message;
     var str = '';
+    
     if (input_to && input_to.value)
       str += input_to.value+':';
     if (input_cc && input_cc.value)
@@ -1849,8 +1864,14 @@
       str += input_bcc.value+':';
     if (input_subject && input_subject.value)
       str += input_subject.value+':';
-    if (input_message && input_message.value)
+    
+    if (editor = tinyMCE.get('compose-body'))
+      str += editor.getContent();
+    else
+      {
+      input_message = rcube_find_object('_message');
       str += input_message.value;
+      }
     
     if (save)
       this.cmp_hash = str;
@@ -2575,12 +2596,13 @@
     var row, folder;
     var reg = RegExp('['+RegExp.escape(this.env.delimiter)+']?[^'+RegExp.escape(this.env.delimiter)+']+$');
 
-    if (this.drag_active && (row = document.getElementById(id)))
+    if (this.drag_active && this.env.folder && (row = document.getElementById(id)))
       if (this.env.subscriptionrows[id] &&
           (folder = this.env.subscriptionrows[id][0]))
         {
         if (this.check_droptarget(folder) &&
-            (folder != this.env.folder.replace(reg, '')) &&
+    	    !this.env.subscriptionrows[this.get_folder_row_id(this.env.folder)][2] &&    
+	    (folder != this.env.folder.replace(reg, '')) &&
             (!folder.match(new RegExp('^'+RegExp.escape(this.env.folder+this.env.delimiter)))))
           {
           this.set_env('dstfolder', folder);
@@ -2612,8 +2634,7 @@
     var id, folder;
     if ((id = list.get_single_selection()) &&
         this.env.subscriptionrows['rcmrow'+id] &&
-        (folder = this.env.subscriptionrows['rcmrow'+id][0]) &&
-        (find_in_array(this.env.defaultfolders, folder)!=0))
+        (folder = this.env.subscriptionrows['rcmrow'+id][0]))
       this.set_env('folder', folder);
     else
       this.set_env('folder', null);
@@ -2647,12 +2668,20 @@
 
     var form;
     if ((form = this.gui_objects.editform) && form.elements['_folder_name'])
+      {
       name = form.elements['_folder_name'].value;
-    if (this.env.folder && name != '')
-      name = this.env.folder+this.env.delimiter+name;
 
-    if (name)
+      if (name.indexOf(this.env.delimiter)>=0)
+        {
+        alert(this.get_label('forbiddencharacter')+' ('+this.env.delimiter+')');
+        return false;
+        }
+
+      if (this.env.folder && name != '')
+        name = this.env.folder+this.env.delimiter+name;
+
       this.http_post('create-folder', '_name='+urlencode(name), true);
+      }
     else if (form.elements['_folder_name'])
       form.elements['_folder_name'].focus();
     };
@@ -2665,20 +2694,20 @@
     var temp, row, form;
 
     // reset current renaming
-  if (temp = this.edit_folder)
-    {
-    this.reset_folder_rename();
-    if (temp == id)
-      return;
-    }
+    if (temp = this.edit_folder)
+      {
+      this.reset_folder_rename();
+      if (temp == id)
+        return;
+      }
 
     if (id && this.env.subscriptionrows[id] && (row = document.getElementById(id)))
       {
       var reg = new RegExp('.*['+RegExp.escape(this.env.delimiter)+']');
       this.name_input = document.createElement('INPUT');
-      this.name_input.value = this.env.subscriptionrows[id][1].replace(reg, '');
+      this.name_input.value = this.env.subscriptionrows[id][0].replace(reg, '');
       this.name_input.style.width = '100%';
-      
+
       reg = new RegExp('['+RegExp.escape(this.env.delimiter)+']?[^'+RegExp.escape(this.env.delimiter)+']+$');
       this.name_input.__parent = this.env.subscriptionrows[id][0].replace(reg, '');
       this.name_input.onkeypress = function(e){ rcmail.name_input_keypress(e); };
@@ -2697,11 +2726,9 @@
   this.reset_folder_rename = function()
     {
     var cell = this.name_input ? this.name_input.parentNode : null;
+
     if (cell && this.edit_folder && this.env.subscriptionrows[this.edit_folder])
-      {
-      var reg = new RegExp('[^'+RegExp.escape(this.env.delimiter)+']*['+RegExp.escape(this.env.delimiter)+']', 'g');
-      cell.innerHTML = this.env.subscriptionrows[this.edit_folder][1].replace(reg, '&nbsp;&nbsp;&nbsp;&nbsp;');
-      }
+      cell.innerHTML = this.env.subscriptionrows[this.edit_folder][1];
       
     this.edit_folder = null;
     };
@@ -2718,8 +2745,15 @@
       var newname = this.name_input ? this.name_input.value : null;
       if (this.edit_folder && newname)
         {
+        if (newname.indexOf(this.env.delimiter)>=0)
+          {
+          alert(this.get_label('forbiddencharacter')+' ('+this.env.delimiter+')');
+          return false;
+          }
+
         if (this.name_input.__parent)
           newname = this.name_input.__parent + this.env.delimiter + newname;
+
         this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.subscriptionrows[this.edit_folder][0])+'&_folder_newname='+urlencode(newname));
         }
       }
@@ -2744,20 +2778,19 @@
 
       if (this.gui_objects.createfolderhint)
         this.gui_objects.createfolderhint.innerHTML = '';
-
       }
     };
 
 
   // add a new folder to the subscription list by cloning a folder row
-  this.add_folder_row = function(name, display_name, replace)
+  this.add_folder_row = function(name, display_name, replace, before)
     {
-    name = name.replace('\\',"");
     if (!this.gui_objects.subscriptionlist)
       return false;
 
+    // find not protected folder    
     for (var refid in this.env.subscriptionrows)
-      if (this.env.subscriptionrows[refid]!=null)
+      if (this.env.subscriptionrows[refid]!=null && !this.env.subscriptionrows[refid][2])
         break;
 
     var refrow, form;
@@ -2781,14 +2814,18 @@
       // clone a table row if there are existing rows
       var row = this.clone_table_row(refrow);
       row.id = id;
-      if (replace)
-        tbody.replaceChild(row, replace);
+
+      if (before && (before = this.get_folder_row_id(before)))
+	tbody.insertBefore(row, document.getElementById(before));
       else
-        tbody.appendChild(row);
+        tbody.appendChild(row);	  
+      
+      if (replace)
+	tbody.removeChild(replace);
       }
-    
+
     // add to folder/row-ID map
-    this.env.subscriptionrows[row.id] = [name, display_name];
+    this.env.subscriptionrows[row.id] = [name, display_name, 0];
 
     // set folder name
     row.cells[0].innerHTML = display_name;
@@ -2812,7 +2849,6 @@
         form.elements['_folder_name'].value = ''; 
       }
 
-    this.sort_subscription_list();
     this.init_subscription_list();
     if (selection && document.getElementById('rcmrow'+selection))
       this.subscription_list.select_row(selection);
@@ -2823,13 +2859,13 @@
 
 
   // replace an existing table row with a new folder line
-  this.replace_folder_row = function(oldfolder, newfolder, display_name)
+  this.replace_folder_row = function(oldfolder, newfolder, display_name, before)
     {
     var id = this.get_folder_row_id(oldfolder);
     var row = document.getElementById(id);
     
     // replace an existing table row (if found)
-    this.add_folder_row(newfolder, display_name, row);
+    this.add_folder_row(newfolder, display_name, row, before);
     
     // rename folder in rename-folder dropdown
     var form, elm;
@@ -2848,7 +2884,7 @@
       form.elements['_folder_newname'].value = '';
       }
     };
-    
+
 
   // remove the table row of a specific mailbox from the table
   // (the row will not be removed, just hidden)
@@ -2857,7 +2893,7 @@
     var row;
     var id = this.get_folder_row_id(folder);
     if (id && (row = document.getElementById(id)))
-      row.style.display = 'none';    
+      row.style.display = 'none';
 
     // remove folder from rename-folder list
     var form;
@@ -2924,32 +2960,6 @@
     return new_row;
     };
 
-  // sort subscription folder list
-  this.sort_subscription_list = function()
-    {
-    var index = new Array();
-    var tbody = this.gui_objects.subscriptionlist.tBodies[0];
-    var swapped = false;
-    for (var i = 0; i<tbody.childNodes.length; i++)
-      if (this.env.subscriptionrows[tbody.childNodes[i].id]!=null)
-        index.push(i);
-    for (i = 0; i<(index.length-1); i++)
-      {
-      var one = tbody.childNodes[index[i]];
-      var two = tbody.childNodes[index[i+1]];
-      if (this.env.subscriptionrows[one.id][0].toLowerCase()>
-          this.env.subscriptionrows[two.id][0].toLowerCase())
-        {
-        var swap = one.cloneNode(true);
-        tbody.replaceChild(swap, two);
-        tbody.replaceChild(two, one);
-        swapped = true;
-        }
-      }
-    if (swapped)
-      this.sort_subscription_list();
-    };
-
 
   /*********************************************************/
   /*********           GUI functionality           *********/
@@ -2973,7 +2983,7 @@
     var button, obj;
 
     if(!a_buttons || !a_buttons.length)
-      return;
+      return false;
 
     for(var n=0; n<a_buttons.length; n++)
       {
@@ -3041,7 +3051,7 @@
     var button, img;
 
     if(!a_buttons || !a_buttons.length)
-      return;
+      return false;
 
     for(var n=0; n<a_buttons.length; n++)
       {
@@ -3053,6 +3063,7 @@
           img.src = button.over;
         }
       }
+      
     };
 
   // mouse down on button

--
Gitblit v1.9.1