From 143ceff0d83c53000dd29c2047d204c08dba9de7 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Thu, 06 Mar 2014 07:17:31 -0500
Subject: [PATCH] Implement ArrayAccess interface for conveniently accessing rcube_result_set as array

---
 program/js/common.js |   15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/program/js/common.js b/program/js/common.js
index 1409146..722eb3f 100644
--- a/program/js/common.js
+++ b/program/js/common.js
@@ -49,6 +49,7 @@
   this.dom = document.getElementById ? true : false;
   this.dom2 = document.addEventListener && document.removeEventListener;
 
+  this.webkit = this.agent_lc.indexOf('applewebkit') > 0;
   this.ie = (document.all && !window.opera) || (this.win && this.agent_lc.indexOf('trident/') > 0);
 
   if (this.ie) {
@@ -57,19 +58,22 @@
     this.ie8 = this.appver.indexOf('MSIE 8') > 0;
     this.ie9 = this.appver.indexOf('MSIE 9') > 0;
   }
+  else if (window.opera) {
+    this.opera = true;
+    this.vendver = opera.version();
+  }
   else {
     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.safari = !this.chrome && (this.webkit || this.agent_lc.indexOf('safari') > 0);
     this.konq = this.agent_lc.indexOf('konqueror') > 0;
     this.mz = this.dom && !this.chrome && !this.safari && !this.konq && this.agent.indexOf('Mozilla') >= 0;
     this.iphone = this.safari && (this.agent_lc.indexOf('iphone') > 0 || this.agent_lc.indexOf('ipod') > 0);
     this.ipad = this.safari && this.agent_lc.indexOf('ipad') > 0;
-    this.opera = window.opera ? true : false;
   }
 
   if (!this.vendver) {
     // common version strings
-    this.vendver = /(khtml|chrome|safari|applewebkit|opera|msie)(\s|\/)([0-9\.]+)/.test(this.agent_lc) ? parseFloat(RegExp.$3) : 0;
+    this.vendver = /(opera|opr|khtml|chrome|safari|applewebkit|msie)(\s|\/)([0-9\.]+)/.test(this.agent_lc) ? parseFloat(RegExp.$3) : 0;
 
     // any other (Mozilla, Camino, IE>=11)
     if (!this.vendver)
@@ -116,7 +120,7 @@
       classname += ' iphone';
     else if (this.ipad)
       classname += ' ipad';
-    else if (this.safari || this.chrome)
+    else if (this.webkit)
       classname += ' webkit';
 
     if (this.mobile)
@@ -285,7 +289,6 @@
  *
  * @param {String}   Event name
  * @param {Function} Handler function
- * @return Listener ID (used to remove this handler later on)
  */
 addEventListener: function(evt, func, obj)
 {
@@ -295,6 +298,8 @@
     this._events[evt] = [];
 
   this._events[evt].push({func:func, obj:obj ? obj : window});
+
+  return this; // chainable
 },
 
 /**

--
Gitblit v1.9.1