description and source-codefunction initializeReactFastclick() {
var originalCreateElement = React.createElement;
// Moved if Math.abs(downX - upX) > MOVE_THRESHOLD;
var MOVE_THRESHOLD = 8;
var TOUCH_DELAY = 1000;
var touchKeysToStore = [
'clientX',
'clientY',
'pageX',
'pageY',
'screenX',
'screenY',
'radiusX',
'radiusY'
];
var touchEvents = {
downPos: {},
lastPos: {}
};
var isDisabled = function (element) {
if (!element) {
return false;
}
var disabled = element.getAttribute('disabled');
return disabled !== false && disabled !== null;
};
var focus = function (event, target) {
var myTarget = target || event.currentTarget;
if (!myTarget || isDisabled(myTarget)) {
return;
}
myTarget.focus();
};
var handleType = {
input: function (event) {
focus(event);
event.stopPropagation();
},
textarea: function (event) {
focus(event);
event.stopPropagation();
},
select: function (event) {
focus(event);
event.stopPropagation();
},
label: function (event) {
var input;
var forTarget = event.currentTarget.getAttribute('for');
if (forTarget) {
input = document.getElementById(forTarget);
} else {
input = event.currentTarget.querySelectorAll('input, textarea, select')[0];
}
if (input) {
focus(event, input);
}
}
};
var fakeClickEvent = function (event) {
if (typeof event.persist === 'function') {
event.persist();
}
event.fastclick = true;
event.type = 'click';
event.button = 0;
};
var copyTouchKeys = function (touch, target) {
if (typeof target.persist === 'function') {
target.persist();
}
if (touch) {
for (var i = 0; i < touchKeysToStore.length; i += 1) {
var key = touchKeysToStore[i];
target[key] = touch[key];
}
}
};
var noTouchHappened = function () {
return !touchEvents.touched && (
!touchEvents.lastTouchDate || new Date().getTime() > touchEvents.lastTouchDate + TOUCH_DELAY
);
};
var invalidateIfMoreThanOneTouch = function (event) {
touchEvents.invalid = event.touches && event.touches.length > 1 || touchEvents.invalid;
};
var onMouseEvent = function (callback, event) {
// Prevent any mouse events if we touched recently
if (typeof callback === 'function' && noTouchHappened()) {
callback(event);
}
if (event.type === 'click') {
touchEvents.invalid = false;
touchEvents.touched = false;
touchEvents.moved = false;
}
};
var onTouchStart = function (callback, event) {
touchEvents.invalid = false;
touchEvents.moved = false;
touchEvents.touched = true;
touchEvents.lastTouchDate = new Date().getTime();
copyTouchKeys(event.touches[0], touchEvents.downPos);
copyTouchKeys(event.touches[0], touchEvents.lastPos);
invalidateIfMoreThanOneTouch(event);
if (typeof callback === 'function') {
callback(event);
}
};
var onTouchMove = function (callback, event) {
touchEvents.touched = true;
touchEvents.lastTouchDate = new Date().getTime();
copyTouchKeys(event.touches[0], touchEvents.lastPos);
invalidateIfMoreThanOneTouch(event);
if (Math.abs(touchEvents.downPos.clientX - touchEvents.lastPos.clientX) > MOVE_THRESHOLD ||
Math.abs(touchEvents.downPos.clientY - touchEvents.lastPos.clientY) > MOVE_THRESHOLD) {
touchEvents.moved = true;
}
if (typeof callback === 'function') {
callback(event);
}
};
var onTouchEnd = function (callback, onClick, type, event) {
touchEvents.touched = true;
touchEvents.lastTouchDate = new Date().getTime();
invalidateIfMoreThanOneTouch(event);
if (typeof callback === 'function') {
callback(event);
}
if (!touchEvents.invalid && !touchEvents.moved) {
var box = event.currentTarget.getBoundingClientRect();
if (touchEvents.lastPos.clientX - (touchEvents.lastPos.radiusX || 0) <= box.right &&
touchEve ...