From d06e57fdf21879a4e93d6c00b939ca42094d3e86 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Wed, 21 Sep 2011 16:43:47 -0400
Subject: [PATCH] Skip confirmation dialog when deleting a contact from a source that supports undelete operations

---
 program/js/common.js |   66 +++++++++++++++++---------------
 1 files changed, 35 insertions(+), 31 deletions(-)

diff --git a/program/js/common.js b/program/js/common.js
index 4d3cbfa..0011fea 100644
--- a/program/js/common.js
+++ b/program/js/common.js
@@ -55,16 +55,13 @@
   this.ie7 = (this.dom && this.appver.indexOf('MSIE 7')>0);
   this.ie6 = (this.dom && !this.ie8 && !this.ie7 && this.appver.indexOf('MSIE 6')>0);
 
-  this.mz = (this.dom && this.ver >= 5);  // (this.dom && this.product=='Gecko')
   this.ns = ((this.ver < 5 && this.name == 'Netscape') || (this.ver >= 5 && this.vendor.indexOf('Netscape') >= 0));
-  this.ns6 = (this.ns && parseInt(this.vendver) == 6);  // (this.mz && this.ns) ? true : false;
-  this.ns7 = (this.ns && parseInt(this.vendver) == 7);  // this.agent.indexOf('Netscape/7')>0);
   this.chrome = (this.agent_lc.indexOf('chrome') > 0);
   this.safari = (!this.chrome && (this.agent_lc.indexOf('safari') > 0 || this.agent_lc.indexOf('applewebkit') > 0));
+  this.mz = (this.dom && !this.ie && !this.ns && !this.chrome && !this.safari && this.agent.indexOf('Mozilla') >= 0);
   this.konq   = (this.agent_lc.indexOf('konqueror') > 0);
   this.iphone = (this.safari && this.agent_lc.indexOf('iphone') > 0);
   this.ipad = (this.safari && this.agent_lc.indexOf('ipad') > 0);
-
   this.opera = window.opera ? true : false;
 
   if (this.opera && window.RegExp)
@@ -129,10 +126,6 @@
       classname += ' iphone';
     else if (this.ipad)
       classname += ' ipad';
-    else if (this.ns6)
-      classname += ' netscape6';
-    else if (this.ns7)
-      classname += ' netscape7';
 
     if (document.documentElement)
       document.documentElement.className += classname;
@@ -178,14 +171,12 @@
   var opcode = 0;
   e = e || window.event;
 
-  if (bw.mac && e) {
+  if (bw.mac && e)
     opcode += (e.metaKey && CONTROL_KEY) + (e.shiftKey && SHIFT_KEY);
-    return opcode;
-  }
-  if (e) {
+  else if (e)
     opcode += (e.ctrlKey && CONTROL_KEY) + (e.shiftKey && SHIFT_KEY);
-    return opcode;
-  }
+
+  return opcode;
 },
 
 /**
@@ -354,9 +345,26 @@
           break;
       }
     }
+    if (ret && ret.event) {
+      try {
+        delete ret.event;
+      } catch (err) {
+        // IE6-7 doesn't support deleting HTMLFormElement attributes (#1488017)
+        $(ret).removeAttr('event');
+      }
+    }
   }
 
   this._event_exec = false;
+  if (e.event) {
+    try {
+      delete e.event;
+    } catch (err) {
+      // IE6-7 doesn't support deleting HTMLFormElement attributes (#1488017)
+      $(e).removeAttr('event');
+    }
+  }
+
   return ret;
 }
 
@@ -385,21 +393,17 @@
       parent = arg.parent,
       obj = document.createElement('DIV');
 
-    with (obj) {
-      id = this.name;
-      with (style) {
-	    position = 'absolute';
-        visibility = (vis) ? (vis==2) ? 'inherit' : 'visible' : 'hidden';
-        left = l+'px';
-        top = t+'px';
-        if (w)
-	      width = w.toString().match(/\%$/) ? w : w+'px';
-        if (h)
-	      height = h.toString().match(/\%$/) ? h : h+'px';
-        if (z)
-          zIndex = z;
-	  }
-    }
+    obj.id = this.name;
+    obj.style.position = 'absolute';
+    obj.style.visibility = (vis) ? (vis==2) ? 'inherit' : 'visible' : 'hidden';
+    obj.style.left = l+'px';
+    obj.style.top = t+'px';
+    if (w)
+	  obj.style.width = w.toString().match(/\%$/) ? w : w+'px';
+    if (h)
+	  obj.style.height = h.toString().match(/\%$/) ? h : h+'px';
+    if (z)
+      obj.style.zIndex = z;
 
     if (parent)
       parent.appendChild(obj);
@@ -493,8 +497,8 @@
       // So, e-mail address should be validated also on server side after idn_to_ascii() use
       //domain_literal = '\\x5b('+dtext+'|'+quoted_pair+')*\\x5d',
       //sub_domain = '('+atom+'|'+domain_literal+')',
-      // allow punycode in last domain part for ICANN test domains
-      domain = '([^@\\x2e]+\\x2e)+([a-z]{2,}|xn--[a-z0-9]{2,})',
+      // allow punycode/unicode top-level domain
+      domain = '([^@\\x2e]+\\x2e)+([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,})',
       // ICANN e-mail test (http://idn.icann.org/E-mail_test)
       icann_domains = [
         '\\u0645\\u062b\\u0627\\u0644\\x2e\\u0625\\u062e\\u062a\\u0628\\u0627\\u0631',

--
Gitblit v1.9.1