From ada51d1d0eac8a1c4448a664c42e8712bce9e650 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Sat, 19 Oct 2013 09:51:30 -0400
Subject: [PATCH] Merge branch 'master' of github.com:roundcube/roundcubemail

---
 program/js/app.js |   62 ++++++++++++++++---------------
 1 files changed, 32 insertions(+), 30 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index 24aaca0..ac49b4e 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -1713,7 +1713,7 @@
     // set eventhandler to status icon
     if (row.icon = document.getElementById(status_icon)) {
       row.icon._row = row.obj;
-      row.icon.onmousedown = function(e) { self.command('toggle_status', this); rcube_event.cancel(e); };
+      row.icon.onclick = function(e) { self.command('toggle_status', this); return rcube_event.cancel(e); };
     }
 
     // save message icon position too
@@ -1725,12 +1725,12 @@
     // set eventhandler to flag icon, if icon found
     if (this.env.flagged_col != null && (row.flagicon = document.getElementById('flagicn'+row.uid))) {
       row.flagicon._row = row.obj;
-      row.flagicon.onmousedown = function(e) { self.command('toggle_flag', this); rcube_event.cancel(e); };
+      row.flagicon.onclick = function(e) { self.command('toggle_flag', this); return rcube_event.cancel(e); };
     }
 
     if (!row.depth && row.has_children && (expando = document.getElementById('rcmexpando'+row.uid))) {
       row.expando = expando;
-      expando.onmousedown = function(e) { return self.expand_message_row(e, uid); };
+      expando.onclick = function(e) { return self.expand_message_row(e, uid); };
       if (bw.touch) {
         expando.addEventListener('touchend', function(e) {
           if (e.changedTouches.length == 1) {
@@ -2832,10 +2832,10 @@
   {
     var len = a_uids.length,
       i, uid, all_deleted = true,
-      rows = this.message_list ? this.message_list.rows : [];
+      rows = this.message_list ? this.message_list.rows : {};
 
     if (len == 1) {
-      if (!rows.length || (rows[a_uids[0]] && !rows[a_uids[0]].deleted))
+      if (!this.message_list || (rows[a_uids[0]] && !rows[a_uids[0]].deleted))
         this.flag_as_deleted(a_uids);
       else
         this.flag_as_undeleted(a_uids);
@@ -2876,7 +2876,7 @@
     var r_uids = [],
       post_data = this.selection_post_data({_uid: this.uids_to_list(a_uids), _flag: 'delete'}),
       lock = this.display_message(this.get_label('markingmessage'), 'loading'),
-      rows = this.message_list ? this.message_list.rows : [],
+      rows = this.message_list ? this.message_list.rows : {},
       count = 0;
 
     for (var i=0, len=a_uids.length; i<len; i++) {
@@ -2896,7 +2896,7 @@
 
     // make sure there are no selected rows
     if (this.env.skip_deleted && this.message_list) {
-      if(!this.env.display_next)
+      if (!this.env.display_next)
         this.message_list.clear_selection();
       if (count < 0)
         post_data._count = (count*-1);
@@ -2920,7 +2920,7 @@
   this.flag_deleted_as_read = function(uids)
   {
     var icn_src, uid, i, len,
-      rows = this.message_list ? this.message_list.rows : [];
+      rows = this.message_list ? this.message_list.rows : {};
 
     uids = String(uids).split(',');
 
@@ -3427,7 +3427,8 @@
       message = input_message.val(),
       is_html = ($("input[name='_is_html']").val() == '1'),
       sig = this.env.identity,
-      delim = this.env.recipients_delimiter,
+      delim = this.env.recipients_separator,
+      rx_delim = RegExp.escape(delim),
       headers = ['replyto', 'bcc'];
 
     // update reply-to/bcc fields with addresses defined in identities
@@ -3444,16 +3445,18 @@
       }
 
       // cleanup
-      rx = new RegExp(RegExp.escape(delim) + '\\s*' + RegExp(delim), 'g');
-      input_val = input_val.replace(rx, delim)
-      rx = new RegExp('^\\s*' + RegExp.escape(delim) + '\\s*$');
-      input_val = input_val.replace(rx, '')
+      rx = new RegExp(rx_delim + '\\s*' + rx_delim, 'g');
+      input_val = input_val.replace(rx, delim);
+      rx = new RegExp('^[\\s' + rx_delim + ']+');
+      input_val = input_val.replace(rx, '');
 
       // add new address(es)
-      if (new_val) {
-        rx = new RegExp(RegExp.escape(delim) + '\\s*$');
-        if (input_val && !rx.test(input_val))
-          input_val += delim + ' ';
+      if (new_val && input_val.indexOf(new_val) == -1 && input_val.indexOf(new_val.replace(/"/g, '')) == -1) {
+        if (input_val) {
+          rx = new RegExp('[' + rx_delim + '\\s]+$')
+          input_val = input_val.replace(rx, '') + delim + ' ';
+        }
+
         input_val += new_val + delim + ' ';
       }
 
@@ -3556,6 +3559,7 @@
     }
 
     this.env.identity = id;
+    this.triggerEvent('change_identity');
     return true;
   };
 
@@ -3802,7 +3806,7 @@
         // refresh the folder where sent message was saved or replied message comes from
         if (folders && rc.env.task == 'mail' && rc.env.action == '' && $.inArray(rc.env.mailbox, folders) >= 0) {
           // @TODO: try with 'checkmail' here when #1485186 is fixed. See also #1489249.
-          rc.command('list', rc.env.mailbox);
+          rc.command('list');
         }
       }
       setTimeout(function(){ window.close() }, 1000);
@@ -6531,7 +6535,7 @@
   // post the given form to a hidden iframe
   this.async_upload_form = function(form, action, onload)
   {
-    var ts = new Date().getTime(),
+    var frame, ts = new Date().getTime(),
       frame_name = 'rcmupload'+ts;
 
     // upload progress support
@@ -6550,21 +6554,19 @@
     // have to do it this way for IE
     // otherwise the form will be posted to a new window
     if (document.all) {
-      var html = '<iframe name="'+frame_name+'" src="program/resources/blank.gif" style="width:0;height:0;visibility:hidden;"></iframe>';
-      document.body.insertAdjacentHTML('BeforeEnd', html);
+      document.body.insertAdjacentHTML('BeforeEnd', '<iframe name="'+frame_name+'"'
+        + ' src="program/resources/blank.gif" style="width:0;height:0;visibility:hidden;"></iframe>');
+      frame = $('iframe[name="'+frame_name+'"]');
     }
-    else { // for standards-compilant browsers
-      var frame = document.createElement('iframe');
-      frame.name = frame_name;
-      frame.style.border = 'none';
-      frame.style.width = 0;
-      frame.style.height = 0;
-      frame.style.visibility = 'hidden';
-      document.body.appendChild(frame);
+    // for standards-compliant browsers
+    else {
+      frame = $('<iframe>').attr('name', frame_name)
+        .css({border: 'none', width: 0, height: 0, visibility: 'hidden'})
+        .appendTo(document.body);
     }
 
     // handle upload errors, parsing iframe content in onload
-    $(frame_name).bind('load', {ts:ts}, onload);
+    frame.bind('load', {ts:ts}, onload);
 
     $(form).attr({
         target: frame_name,

--
Gitblit v1.9.1