Thomas Bruederli
2013-08-15 d1c40bbd877dbc99b695ed8f97d0cc2d8dd6adfc
Distinguish mobile/tablet/touch devices
5 files modified
22 ■■■■■ changed files
program/js/app.js 2 ●●● patch | view | raw | blame | history
program/js/common.js 8 ●●●● patch | view | raw | blame | history
program/js/list.js 6 ●●●● patch | view | raw | blame | history
skins/larry/includes/links.html 2 ●●● patch | view | raw | blame | history
skins/larry/ui.js 4 ●●●● patch | view | raw | blame | history
program/js/app.js
@@ -1733,7 +1733,7 @@
    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); };
      if (bw.mobile) {
      if (bw.touch) {
        expando.addEventListener('touchend', function(e) {
          if (e.changedTouches.length == 1) {
            self.expand_message_row(e, uid);
program/js/common.js
@@ -62,7 +62,7 @@
  this.safari = (!this.chrome && (this.agent_lc.indexOf('safari') > 0 || this.agent_lc.indexOf('applewebkit') > 0));
  this.konq = (this.agent_lc.indexOf('konqueror') > 0);
  this.mz = (this.dom && !this.ie && !this.ns && !this.chrome && !this.safari && !this.konq && this.agent.indexOf('Mozilla') >= 0);
  this.iphone = (this.safari && this.agent_lc.indexOf('iphone') > 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;
@@ -83,7 +83,9 @@
  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.tablet = /ipad|android|xoom|sch-i800|playbook|tablet|kindle/i.test(this.agent_lc);
  this.mobile = /iphone|ipod|blackberry|iemobile|opera mini|opera mobi|mobile/i.test(this.agent_lc);
  this.touch = this.mobile || this.tablet;
  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) ||
@@ -127,6 +129,8 @@
    if (this.mobile)
      classname += ' mobile';
    if (this.tablet)
      classname += ' tablet';
    if (document.documentElement)
      document.documentElement.className += classname;
program/js/list.js
@@ -110,7 +110,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.mobile) {
    if (bw.touch) {
      row.addEventListener('touchstart', function(e) {
        if (e.touches.length == 1) {
          self.touchmoved = false;
@@ -320,7 +320,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.mobile) {
    if (bw.touch) {
      rcube_event.add_listener({event:'touchmove', object:this, method:'drag_mouse_move'});
      rcube_event.add_listener({event:'touchend', object:this, method:'drag_mouse_up'});
    }
@@ -1239,7 +1239,7 @@
  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.mobile) {
  if (bw.touch) {
    rcube_event.remove_listener({event:'touchmove', object:this, method:'drag_mouse_move'});
    rcube_event.remove_listener({event:'touchend', object:this, method:'drag_mouse_up'});
  }
skins/larry/includes/links.html
@@ -1,5 +1,5 @@
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<meta name="viewport" content="" id="viewport" />
<link rel="shortcut icon" href="/images/favicon.ico"/>
<link rel="stylesheet" type="text/css" href="/styles.css" />
<roundcube:if condition="in_array(env:task, array('mail','addressbook','settings'))" />
skins/larry/ui.js
@@ -49,6 +49,10 @@
    if (parseInt(minmode) || (minmode === null && $(window).height() < 850)) {
      $(document.body).addClass('minimal');
    }
    if (bw.tablet) {
      $('#viewport').attr('content', "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0");
    }
  }