From 1257dd6796b0655545bb7e4e4dd6d776bebd8544 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Fri, 03 Aug 2012 03:51:41 -0400
Subject: [PATCH] Add generic mobile browser detection, enable touch events for all mobile browsers

---
 program/js/list.js   |   10 +++++-----
 program/js/common.js |    4 ++++
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/program/js/common.js b/program/js/common.js
index 70e435e..fdef345 100644
--- a/program/js/common.js
+++ b/program/js/common.js
@@ -83,6 +83,7 @@
   if (this.safari && (/;\s+([a-z]{2})-[a-z]{2}\)/.test(this.agent_lc)))
     this.lang = RegExp.$1;
 
+  this.mobile = this.agent_lc.match(/iphone|ipad|ipod|android|blackberry|iemobile|opera mini|opera mobi/);
   this.dhtml = ((this.ie4 && this.win) || this.ie5 || this.ie6 || this.ns4 || this.mz);
   this.vml = (this.win && this.ie && this.dom && !this.opera);
   this.pngalpha = (this.mz || (this.opera && this.vendver >= 6) || (this.ie && this.mac && this.vendver >= 5) ||
@@ -124,6 +125,9 @@
     else if (this.safari || this.chrome)
       classname += ' webkit';
 
+    if (this.mobile)
+      classname += ' mobile';
+
     if (document.documentElement)
       document.documentElement.className += classname;
   };
diff --git a/program/js/list.js b/program/js/list.js
index e3be9a0..b194721 100644
--- a/program/js/list.js
+++ b/program/js/list.js
@@ -112,7 +112,7 @@
     row.onmousedown = function(e){ return self.drag_row(e, this.uid); };
     row.onmouseup = function(e){ return self.click_row(e, this.uid); };
 
-    if (bw.iphone || bw.ipad) {
+    if (bw.mobile) {
       row.addEventListener('touchstart', function(e) {
         if (e.touches.length == 1) {
           if (!self.drag_row(rcube_event.touchevent(e.touches[0]), this.uid))
@@ -313,7 +313,7 @@
     this.drag_mouse_start = rcube_event.get_mouse_pos(e);
     rcube_event.add_listener({event:'mousemove', object:this, method:'drag_mouse_move'});
     rcube_event.add_listener({event:'mouseup', object:this, method:'drag_mouse_up'});
-    if (bw.iphone || bw.ipad) {
+    if (bw.mobile) {
       rcube_event.add_listener({event:'touchmove', object:this, method:'drag_mouse_move'});
       rcube_event.add_listener({event:'touchend', object:this, method:'drag_mouse_up'});
     }
@@ -1220,7 +1220,7 @@
 drag_mouse_up: function(e)
 {
   document.onmousemove = null;
-  
+
   if (e.type == 'touchend') {
     if (e.changedTouches.length != 1)
       return rcube_event.cancel(e);
@@ -1239,8 +1239,8 @@
 
   rcube_event.remove_listener({event:'mousemove', object:this, method:'drag_mouse_move'});
   rcube_event.remove_listener({event:'mouseup', object:this, method:'drag_mouse_up'});
-  
-  if (bw.iphone || bw.ipad) {
+
+  if (bw.mobile) {
     rcube_event.remove_listener({event:'touchmove', object:this, method:'drag_mouse_move'});
     rcube_event.remove_listener({event:'touchend', object:this, method:'drag_mouse_up'});
   }

--
Gitblit v1.9.1