code: function extendEventData(ev) {
        var startEv = this.current.startEvent;
  
        // if the touches change, set the new touches over the startEvent touches
        // this because touchevents don't have all the touches on touchstart, or the
        // user must place his fingers at the EXACT same time on the screen, which is not realistic
        // but, sometimes it happens that both fingers are touching at the EXACT same time
        if(startEv && (ev.touches.length != startEv.touches.length || ev.touches === startEv.touches)) {
          // extend 1 level deep to get the touchlist with the touch objects
          startEv.touches = [];
          for(var i=0,len=ev.touches.length; i<len; i++) {
            startEv.touches.push(ionic.Gestures.utils.extend({}, ev.touches[i]));
          }
        }
  
        var delta_time = ev.timeStamp - startEv.timeStamp,
            delta_x = ev.center.pageX - startEv.center.pageX,
            delta_y = ev.center.pageY - startEv.center.pageY,
            velocity = ionic.Gestures.utils.getVelocity(delta_time, delta_x, delta_y);
  
        ionic.Gestures.utils.extend(ev, {
          deltaTime   : delta_time,
  
          deltaX      : delta_x,
          deltaY      : delta_y,
  
          velocityX   : velocity.x,
          velocityY   : velocity.y,
  
          distance    : ionic.Gestures.utils.getDistance(startEv.center, ev.center),
          angle       : ionic.Gestures.utils.getAngle(startEv.center, ev.center),
          direction   : ionic.Gestures.utils.getDirection(startEv.center, ev.center),
  
          scale       : ionic.Gestures.utils.getScale(startEv.touches, ev.touches),
          rotation    : ionic.Gestures.utils.getRotation(startEv.touches, ev.touches),
  
          startEvent  : startEv
        });
  
        return ev;
      }
docs: extend eventData for ionic.Gestures.gestures
  @param   {Object}   ev
  @returns {Object}   ev