From 2c200021fdf9b5d1c73e39e7c46e7db1e4152e91 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Mon, 15 Nov 2010 04:26:24 -0500
Subject: [PATCH] - Fix focused elements aren't unfocused when clicking on the list (#1487123)

---
 program/js/app.js |   78 ++++++++++++++++++++++++--------------
 1 files changed, 49 insertions(+), 29 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index 620126c..7c38b14 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -37,7 +37,7 @@
 
   // webmail client settings
   this.dblclick_time = 500;
-  this.message_time = 3000;
+  this.message_time = 1500;
 
   this.identifier_expr = new RegExp('[^0-9a-z\-_]', 'gi');
 
@@ -1802,28 +1802,28 @@
     if (!id)
       return;
 
-    var add_url = '',
-      target = window,
-      action = preview ? 'preview': 'show';
+    var target = window,
+      action = preview ? 'preview': 'show',
+      url = '&_action='+action+'&_uid='+id+'&_mbox='+urlencode(this.env.mailbox);
 
     if (preview && this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
       target = window.frames[this.env.contentframe];
-      add_url = '&_framed=1';
+      url += '&_framed=1';
     }
 
     if (safe)
-      add_url = '&_safe=1';
+      url += '&_safe=1';
 
     // also send search request to get the right messages
     if (this.env.search_request)
-      add_url += '&_search='+this.env.search_request;
+      url += '&_search='+this.env.search_request;
 
-    var url = '&_action='+action+'&_uid='+id+'&_mbox='+urlencode(this.env.mailbox)+add_url;
     if (action == 'preview' && String(target.location.href).indexOf(url) >= 0)
       this.show_contentframe(true);
     else {
-      if (!this.env.frame_lock)
-        this.env.frame_lock = this.set_busy(true, 'loading');
+      if (!this.env.frame_lock) {
+        (parent.rcmail ? parent.rcmail : this).env.frame_lock = this.set_busy(true, 'loading');
+      }
       target.location.href = this.env.comm_path+url;
 
       // mark as read and change mbox unread counter
@@ -3426,14 +3426,14 @@
       return;
 
     // get cursor pos
-    var inp_value = this.ksearch_input.value;
-    var cpos = this.get_caret_pos(this.ksearch_input);
-    var p = inp_value.lastIndexOf(this.ksearch_value, cpos);
+    var inp_value = this.ksearch_input.value,
+      cpos = this.get_caret_pos(this.ksearch_input),
+      p = inp_value.lastIndexOf(this.ksearch_value, cpos),
+      insert = '',
 
-    // replace search string with full address
-    var pre = this.ksearch_input.value.substring(0, p);
-    var end = this.ksearch_input.value.substring(p+this.ksearch_value.length, this.ksearch_input.value.length);
-    var insert = '';
+      // replace search string with full address
+      pre = inp_value.substring(0, p),
+      end = inp_value.substring(p+this.ksearch_value.length, inp_value.length);
 
     // insert all members of a group
     if (typeof this.env.contacts[id] == 'object' && this.env.contacts[id].id) {
@@ -3465,6 +3465,7 @@
   this.ksearch_get_results = function()
   {
     var inp_value = this.ksearch_input ? this.ksearch_input.value : null;
+
     if (inp_value === null)
       return;
 
@@ -3472,16 +3473,29 @@
       this.ksearch_pane.hide();
 
     // get string from current cursor pos to last comma
-    var cpos = this.get_caret_pos(this.ksearch_input);
-    var p = inp_value.lastIndexOf(',', cpos-1);
-    var q = inp_value.substring(p+1, cpos);
+    var cpos = this.get_caret_pos(this.ksearch_input),
+      p = inp_value.lastIndexOf(',', cpos-1),
+      q = inp_value.substring(p+1, cpos),
+      min = this.env.autocomplete_min_length;
 
     // trim query string
-    q = q.replace(/(^\s+|\s+$)/g, '');
+    q = $.trim(q);
 
     // Don't (re-)search if the last results are still active
     if (q == this.ksearch_value)
       return;
+
+    if (q.length < min) {
+      if (!this.env.acinfo) {
+        var label = this.get_label('autocompletechars');
+        label = label.replace('$min', min);
+        this.env.acinfo = this.display_message(label);
+      }
+      return;
+    }
+    else if (this.env.acinfo && q.length == min) {
+      this.hide_message(this.env.acinfo);
+    }
 
     var old_value = this.ksearch_value;
     this.ksearch_value = q;
@@ -4042,7 +4056,8 @@
   this.focus_subscription = function(id)
   {
     var row, folder,
-      reg = RegExp('['+RegExp.escape(this.env.delimiter)+']?[^'+RegExp.escape(this.env.delimiter)+']+$');
+      delim = RegExp.escape(this.env.delimiter),
+      reg = RegExp('['+delim+']?[^'+delim+']+$');
 
     if (this.drag_active && this.env.folder && (row = document.getElementById(id)))
       if (this.env.subscriptionrows[id] &&
@@ -4055,7 +4070,7 @@
           $(row).addClass('droptarget');
         }
       }
-      else if (this.env.folder.match(new RegExp(RegExp.escape(this.env.delimiter)))) {
+      else if (this.env.folder.match(new RegExp(delim))) {
         this.set_env('dstfolder', this.env.delimiter);
         $(this.subscription_list.frame).addClass('droptarget');
       }
@@ -4088,10 +4103,12 @@
 
   this.subscription_move_folder = function(list)
   {
-    var reg = RegExp('['+RegExp.escape(this.env.delimiter)+']?[^'+RegExp.escape(this.env.delimiter)+']+$');
+    var delim = RegExp.escape(this.env.delimiter),
+      reg = RegExp('['+delim+']?[^'+delim+']+$');
+
     if (this.env.folder && this.env.dstfolder && (this.env.dstfolder != this.env.folder) &&
         (this.env.dstfolder != this.env.folder.replace(reg, ''))) {
-      var reg = new RegExp('[^'+RegExp.escape(this.env.delimiter)+']*['+RegExp.escape(this.env.delimiter)+']', 'g');
+      var reg = new RegExp('[^'+delim+']*['+delim+']', 'g');
       var basename = this.env.folder.replace(reg, '');
       var newname = this.env.dstfolder==this.env.delimiter ? basename : this.env.dstfolder+this.env.delimiter+basename;
 
@@ -4141,12 +4158,14 @@
     }
 
     if (id && this.env.subscriptionrows[id] && (row = document.getElementById(id))) {
-      var reg = new RegExp('.*['+RegExp.escape(this.env.delimiter)+']');
+      var delim = RegExp.escape(this.env.delimiter),
+        reg = new RegExp('.*['+delim+']');
+
       this.name_input = document.createElement('input');
       this.name_input.type = 'text';
       this.name_input.value = this.env.subscriptionrows[id][0].replace(reg, '');
 
-      reg = new RegExp('['+RegExp.escape(this.env.delimiter)+']?[^'+RegExp.escape(this.env.delimiter)+']+$');
+      reg = new RegExp('['+delim+']?[^'+delim+']+$');
       this.name_input.__parent = this.env.subscriptionrows[id][0].replace(reg, '');
       this.name_input.onkeydown = function(e){ rcmail.name_input_keydown(e); };
 
@@ -4616,8 +4635,9 @@
       return id;
     }
     else {
-      obj.appendTo(cont).bind('mousedown', function(){ return ref.hide_message(obj); });
-      window.setTimeout(function(){ ref.hide_message(obj, true); }, this.message_time);
+      obj.appendTo(cont).bind('mousedown', function() { return ref.hide_message(obj); });
+      window.setTimeout(function() { ref.hide_message(obj, true); },
+        this.message_time * (type == 'error' ? 2 : 1));
       return obj;
     }
   };

--
Gitblit v1.9.1