diff --git a/lib/thumbs.0.5.2.js b/lib/thumbs.0.5.2.js new file mode 100644 index 0000000..3228f84 --- /dev/null +++ b/lib/thumbs.0.5.2.js @@ -0,0 +1,80 @@ +(function(window) { + + /** + * Do not use thumbs.js on touch-enabled devices + * + * Thanks to Jesse MacFadyen (purplecabbage): + * https://gist.github.com/850593#gistcomment-22484 + */ + try { + document.createEvent('TouchEvent'); + return; + } + catch(e) { + } + + /** + * Map touch events to mouse events + */ + var eventMap = { + 'mousedown': 'touchstart', + 'mouseup': 'touchend', + 'mousemove': 'touchmove' + }; + + /** + * Fire touch events + * + * Monitor mouse events and fire a touch event on the + * object broadcasting the mouse event. This approach + * likely has poorer performance than hijacking addEventListener + * but it is a little more browser friendly. + */ + window.addEventListener('load', function() { + for (var key in eventMap) { + document.body.addEventListener(key, function(e) { + // Supports: + // - addEventListener + // - setAttribute + var event = createTouchEvent(eventMap[e.type], e); + e.target.dispatchEvent(event); + + // Supports: + // - element.ontouchstart + var fn = e.target['on' + eventMap[e.type]]; + if (typeof fn === 'function') fn(e); + }, false); + } + }, false); + + /** + * Utility function to create a touch event. + * + * @param name {String} of the event + * @return event {Object} + */ + var createTouchEvent = function(name, e) { + var event = document.createEvent('MouseEvents'); + + event.initMouseEvent( + name, + e.bubbles, + e.cancelable, + e.view, + e.detail, + e.screenX, + e.screenY, + e.clientX, + e.clientY, + e.ctrlKey, + e.altKey, + e.shiftKey, + e.metaKey, + e.button, + e.relatedTarget + ); + + return event; + }; + +})(window);