|  |  | 
 |  |  |  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 |  |  |  *  See the License for the specific language governing permissions and | 
 |  |  |  *  limitations under the License. | 
 |  |  |  *  | 
 |  |  |  * | 
 |  |  |  *  @author Guido Marucci Blas - guido@zaubersoftware.com | 
 |  |  |  *  @description Adds a handler for a custom event 'taphold' that handles a | 
 |  |  |  *  tap and hold on touch interfaces. | 
 |  |  | 
 |  |  |             startTapAndHoldDetector.call(this, event) | 
 |  |  |             var element = $(this); | 
 |  |  |             element.bind(TOUCHMOVE, onTouchMove); | 
 |  |  |             element.bind(TOUCHEND, onTouchEnd);  | 
 |  |  |             element.bind(TOUCHEND, onTouchEnd); | 
 |  |  |         } else { | 
 |  |  |             stopTapAndHoldDetector.call(this); | 
 |  |  |         }    | 
 |  |  |         } | 
 |  |  |     }; | 
 |  |  |  | 
 |  |  |     function onTouchMove(event) { | 
 |  |  | 
 |  |  |         var e = event.originalEvent; | 
 |  |  |         var x = (e.changedTouches) ? e.changedTouches[0].pageX: e.pageX; | 
 |  |  |         var y = (e.changedTouches) ? e.changedTouches[0].pageY: e.pageY; | 
 |  |  |          | 
 |  |  |  | 
 |  |  |         var tapAndHoldPoint = $(this).data("taphold.point"); | 
 |  |  |         var euclideanDistance = calculateEuclideanDistance(tapAndHoldPoint.x, tapAndHoldPoint.y, x, y); | 
 |  |  |                  | 
 |  |  |  | 
 |  |  |         if (euclideanDistance > MAX_DISTANCE_ALLOWED_IN_TAP_AND_HOLD_EVENT) { | 
 |  |  |             stopTapAndHoldDetector.call(this); | 
 |  |  |         } | 
 |  |  | 
 |  |  |     function clear() { | 
 |  |  |         tapAndHoldTimer = null; | 
 |  |  |         $(this).unbind(TOUCHMOVE, onTouchMove); | 
 |  |  |         $(this).unbind(TOUCHEND, onTouchEnd);    | 
 |  |  |         $(this).unbind(TOUCHEND, onTouchEnd); | 
 |  |  |     }; | 
 |  |  |  | 
 |  |  |     function startTapAndHoldDetector(event) { | 
 |  |  | 
 |  |  |  | 
 |  |  |     function stopTapAndHoldDetector() { | 
 |  |  |         clearTimeout(tapAndHoldTimer); | 
 |  |  |         clear.call(this);    | 
 |  |  |         clear.call(this); | 
 |  |  |     }; | 
 |  |  |  | 
 |  |  |     $.event.special["taphold"] = { | 
 |  |  |         setup: function() { | 
 |  |  |              | 
 |  |  |  | 
 |  |  |         }, | 
 |  |  |  | 
 |  |  |         add: function(handleObj) { | 
 |  |  | 
 |  |  |         }, | 
 |  |  |  | 
 |  |  |         teardown: function() { | 
 |  |  |              | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     }; | 
 |  |  |  | 
 |  |  | })(jQuery); | 
 |  |  | })(jQuery); |