/*! jQuery plugin for Hammer.JS - v1.0.1 - 2014-02-03 * http://eightmedia.github.com/hammer.js * * Copyright (c) 2014 Jorik Tangelder ; * Licensed under the MIT license */(function(window, undefined) { 'use strict'; function setup(Hammer, $) { /** * bind dom events * this overwrites addEventListener * @param {HTMLElement} element * @param {String} eventTypes * @param {Function} handler */ Hammer.event.bindDom = function(element, eventTypes, handler) { $(element).on(eventTypes, function(ev) { var data = ev.originalEvent || ev; if(data.pageX === undefined) { data.pageX = ev.pageX; data.pageY = ev.pageY; } if(!data.target) { data.target = ev.target; } if(data.which === undefined) { data.which = data.button; } if(!data.preventDefault) { data.preventDefault = ev.preventDefault; } if(!data.stopPropagation) { data.stopPropagation = ev.stopPropagation; } handler.call(this, data); }); }; /** * the methods are called by the instance, but with the jquery plugin * we use the jquery event methods instead. * @this {Hammer.Instance} * @return {jQuery} */ Hammer.Instance.prototype.on = function(types, handler) { return $(this.element).on(types, handler); }; Hammer.Instance.prototype.off = function(types, handler) { return $(this.element).off(types, handler); }; /** * trigger events * this is called by the gestures to trigger an event like 'tap' * @this {Hammer.Instance} * @param {String} gesture * @param {Object} eventData * @return {jQuery} */ Hammer.Instance.prototype.trigger = function(gesture, eventData) { var el = $(this.element); if(el.has(eventData.target).length) { el = $(eventData.target); } return el.trigger({ type : gesture, gesture: eventData }); }; /** * jQuery plugin * create instance of Hammer and watch for gestures, * and when called again you can change the options * @param {Object} [options={}] * @return {jQuery} */ $.fn.hammer = function(options) { return this.each(function() { var el = $(this); var inst = el.data('hammer'); // start new hammer instance if(!inst) { el.data('hammer', new Hammer(this, options || {})); } // change the options else if(inst && options) { Hammer.utils.extend(inst.options, options); } }); }; } // Based off Lo-Dash's excellent UMD wrapper (slightly modified) - https://github.com/bestiejs/lodash/blob/master/lodash.js#L5515-L5543 // some AMD build optimizers, like r.js, check for specific condition patterns like the following: if(typeof define == 'function' && typeof define.amd == 'object' && define.amd) { // define as an anonymous module define(['hammerjs', 'jquery'], setup); } else { setup(window.Hammer, window.jQuery || window.Zepto); } })(this);