wrapFunc = function(e) {
    var captureIdentifier = !opt_noCaptureIdentifier;
    // Handle each touch point separately.  If the event was a mouse event, this
    // will hand back an array with one element, which we're fine handling.
    var events = Blockly.Touch.splitEventByTouches(e);
    for (var i = 0, event; event = events[i]; i++) {
      if (captureIdentifier && !Blockly.Touch.shouldHandleEvent(event)) {
        continue;
      }
      Blockly.Touch.setClientFromTouch(event);
      if (thisObject) {
        func.call(thisObject, event);
      } else {
        func(event);
      }
      handled = true;
    }
  }
Bind an event to a function call.  When calling the function, verifies that
it belongs to the touch stream that is currently being processed, and splits
multitouch events into multiple events as needed.
@param {!EventTarget} node Node upon which to listen.
@param {string} name Event name to listen to (e.g. 'mousedown').
@param {Object} thisObject The value of 'this' in the function.
@param {!Function} func Function to call when event is triggered.
@param {boolean=} opt_noCaptureIdentifier True if triggering on this event
    should not block execution of other event handlers on this touch or other
    simultaneous touches.
@param {boolean=} opt_noPreventDefault True if triggering on this event
    should prevent the default handler.  False by default.  If
    opt_noPreventDefault is provided, opt_noCaptureIdentifier must also be
    provided.
@return {!Array.<!Array>} Opaque data that can be passed to unbindEvent_.