{"version":3,"sources":["jquery.mobile-events.js"],"names":["$","attrFn","touchCapable","window","settings","tap_pixel_range","swipe_h_threshold","swipe_v_threshold","taphold_threshold","doubletap_int","shake_threshold","touch_capable","orientation_support","startevent","endevent","moveevent","tapevent","scrollevent","hold_timer","tap_timer","touch","isTouchCapable","getStartEvent","getEndEvent","getMoveEvent","getTapEvent","getScrollEvent","setSwipeThresholdX","threshold","Error","setSwipeThresholdY","setDoubleTapInt","interval","setTapHoldThreshold","setTapRange","range","each","i","name","fn","this","on","trigger","event","special","tapstart","setup","thisObject","$this","tapStartFunc","e","data","which","offset","get","document","left","top","origEvent","originalEvent","touchData","position","x","touches","pageX","y","pageY","Math","round","changedTouches","time","Date","now","target","triggerCustomEvent","remove","off","callee","tapmove","tapMoveFunc","tapend","tapEndFunc","taphold","origTarget","start_pos","end_x","end_y","tapHoldFunc1","start_time","offsetLeft","offsetX","offsetTop","offsetY","targetTouches","ele_threshold","parent","parseInt","setTimeout","diff_x","diff_y","duration","length","push","evt_name","tapHoldFunc2","clearTimeout","tapHoldFunc3","callee1","callee2","callee3","doubletap","action","firstTap","cooling","doubleTapFunc1","element","srcElement","index","doubleTapFunc2","delta","lastTap","secondTap","singletap","startTime","singleTapFunc1","singleTapFunc2","end_pos_x","end_pos_y","tap","started","tapFunc1","tapFunc2","swipe","startEvnt","hasSwiped","originalCoord","finalCoord","touchStart","currentTarget","touchMove","swipedir","ele_x_threshold","ele_y_threshold","h_threshold","v_threshold","abs","undefined","endEvnt","xAmount","yAmount","direction","replace","touchEnd","scrollstart","scrolling","timer","state","scrollFunc","get_orientation","last_orientation","initial_orientation_is_landscape","initial_orientation_is_default","win","portrait_map","0","180","ww","innerWidth","width","wh","innerHeight","height","orientation","-90","90","handler","orientationchange","teardown","add","handleObj","old_handler","apply","arguments","elem","documentElement","clientWidth","clientHeight","throttledresize","throttle_handler","heldCall","curr","diff","lastCall","obj","eventType","originalType","type","dispatch","call","scrollend","swipeup","swiperight","swipedown","swipeleft","swipeend","tap2","taphold2","srcE","noop","jQuery"],"mappings":"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","file":"jquery.mobile-events.js","sourcesContent":["/*!\n * jQuery Mobile Events\n * by Ben Major\n *\n * Copyright 2011-2019, Ben Major\n * Licensed under the MIT License:\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\n\"use strict\";\n\n(function ($) {\n    $.attrFn = $.attrFn || {};\n\n    var touchCapable  = ('ontouchstart' in window),\n    \n        settings = {\n            tap_pixel_range: 5,\n            swipe_h_threshold: 50,\n            swipe_v_threshold: 50,\n            taphold_threshold: 750,\n            doubletap_int: 500,\n            shake_threshold: 15,\n\n            touch_capable: touchCapable,\n            orientation_support: ('orientation' in window && 'onorientationchange' in window),\n\n            startevent:  (touchCapable) ? 'touchstart' : 'mousedown',\n            endevent:    (touchCapable) ? 'touchend' : 'mouseup',\n            moveevent:   (touchCapable) ? 'touchmove' : 'mousemove',\n            tapevent:    (touchCapable) ? 'tap' : 'click',\n            scrollevent: (touchCapable) ? 'touchmove' : 'scroll',\n\n            hold_timer: null,\n            tap_timer: null\n        };\n    \n    // Declare touch namespace:\n    $.touch = { };\n    \n    // Convenience functions:\n    $.isTouchCapable = function() { return settings.touch_capable; };\n    $.getStartEvent  = function() { return settings.startevent;    };\n    $.getEndEvent    = function() { return settings.endevent;      };\n    $.getMoveEvent   = function() { return settings.moveevent;     };\n    $.getTapEvent    = function() { return settings.tapevent;      };\n    $.getScrollEvent = function() { return settings.scrollevent;   };\n    \n    // SETTERS:\n    // Set the X threshold of swipe events:\n    $.touch.setSwipeThresholdX = function( threshold ) {\n        if( typeof threshold !== 'number' ) { throw new Error('Threshold parameter must be a type of number'); }\n        settings.swipe_h_threshold = threshold;\n    };\n    \n    // Set the Y threshold of swipe events:\n    $.touch.setSwipeThresholdY = function( threshold ) {\n        if( typeof threshold !== 'number' ) { throw new Error('Threshold parameter must be a type of number'); }\n        settings.swipe_v_threshold = threshold;\n    };\n    \n    // Set the double tap interval:\n    $.touch.setDoubleTapInt    = function( interval ) {\n        if( typeof interval !== 'number' ) { throw new Error('Interval parameter must be a type of number'); }\n        settings.doubletap_int = interval;\n    };\n    \n    // Set the taphold threshold:\n    $.touch.setTapHoldThreshold = function( threshold ) {\n        if( typeof threshold !== 'number' ) { throw new Error('Threshold parameter must be a type of number'); }\n        settings.taphold_threshold = threshold;\n    };\n    \n    // Set the pixel range for tapas:\n    $.touch.setTapRange = function( range ) {\n        if( typeof range !== 'number' ) { throw new Error('Ranger parameter must be a type of number'); }\n        settings.tap_pixel_range = threshold;\n    };\n    \n    // Add Event shortcuts:\n    $.each(['tapstart', 'tapend', 'tapmove', 'tap', 'singletap', 'doubletap', 'taphold', 'swipe', 'swipeup', 'swiperight', 'swipedown', 'swipeleft', 'swipeend', 'scrollstart', 'scrollend', 'orientationchange', 'tap2', 'taphold2'], function (i, name) {\n        $.fn[name] = function (fn) {\n            return fn ? this.on(name, fn) : this.trigger(name);\n        };\n\n        $.attrFn[name] = true;\n    });\n\n    // tapstart Event:\n    $.event.special.tapstart = {\n        setup: function () {\n            \n            var thisObject = this,\n                $this = $(thisObject);\n            \n            $this.on(settings.startevent, function tapStartFunc(e) {\n                \n                $this.data('callee', tapStartFunc);\n                if (e.which && e.which !== 1) {\n                    return false;\n                }\n\n                var offset = ($this.get(0) !== window && $this.get(0) !== document) ? $this.offset() : { left: 0, top: 0 };\n                var origEvent = e.originalEvent,\n                    touchData = {\n                        'position': {\n                            'x': ((settings.touch_capable) ? origEvent.touches[0].pageX : e.pageX),\n                            'y': (settings.touch_capable) ? origEvent.touches[0].pageY : e.pageY\n                        },\n                        'offset': {\n                            'x': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageX - offset.left) : Math.round(e.pageX - offset.left),\n                            'y': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageY - offset.top) : Math.round(e.pageY - offset.top)\n                        },\n                        'time': Date.now(),\n                        'target': e.target\n                    };\n                \n                triggerCustomEvent(thisObject, 'tapstart', e, touchData);\n                return true;\n            });\n        },\n\n        remove: function () {\n            $(this).off(settings.startevent, $(this).data.callee);\n        }\n    };\n    \n    // tapmove Event:\n    $.event.special.tapmove = {\n        setup: function() {\n            var thisObject = this,\n            $this = $(thisObject);\n                \n            $this.on(settings.moveevent, function tapMoveFunc(e) {\n                $this.data('callee', tapMoveFunc);\n                \n                var offset = ($this.get(0) !== window && $this.get(0) !== document) ? $this.offset() : { left: 0, top: 0 };\n                var origEvent = e.originalEvent,\n                    touchData = {\n                        'position': {\n                            'x': ((settings.touch_capable) ? origEvent.touches[0].pageX : e.pageX),\n                            'y': (settings.touch_capable) ? origEvent.touches[0].pageY : e.pageY\n                        },\n                        'offset': {\n                            'x': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageX - offset.left) : Math.round(e.pageX - offset.left),\n                            'y': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageY - offset.top) : Math.round(e.pageY - offset.top)\n                        },\n                        'time': Date.now(),\n                        'target': e.target\n                    };\n                    \n                triggerCustomEvent(thisObject, 'tapmove', e, touchData);\n                return true;\n            });\n        },\n        remove: function() {\n            $(this).off(settings.moveevent, $(this).data.callee);\n        }\n    };\n\n    // tapend Event:\n    $.event.special.tapend = {\n        setup: function () {\n            var thisObject = this,\n                $this = $(thisObject);\n\n            $this.on(settings.endevent, function tapEndFunc(e) {\n                // Touch event data:\n                $this.data('callee', tapEndFunc);\n\n                var offset = ($this.get(0) !== window && $this.get(0) !== document) ? $this.offset() : { left: 0, top: 0 };\n                var origEvent = e.originalEvent;\n                var touchData = {\n                    'position': {\n                        'x': (settings.touch_capable) ? origEvent.changedTouches[0].pageX : e.pageX,\n                        'y': (settings.touch_capable) ? origEvent.changedTouches[0].pageY : e.pageY\n                    },\n                    'offset': {\n                        'x': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageX - offset.left) : Math.round(e.pageX - offset.left),\n                        'y': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageY - offset.top) : Math.round(e.pageY - offset.top)\n                    },\n                    'time': Date.now(),\n                    'target': e.target\n                };\n                triggerCustomEvent(thisObject, 'tapend', e, touchData);\n                return true;\n            });\n        },\n        remove: function () {\n            $(this).off(settings.endevent, $(this).data.callee);\n        }\n    };\n\n    // taphold Event:\n    $.event.special.taphold = {\n        setup: function () {\n            var thisObject = this,\n                $this = $(thisObject),\n                origTarget,\n                start_pos = {\n                    x: 0,\n                    y: 0\n                },\n                end_x = 0,\n                end_y = 0;\n\n            $this.on(settings.startevent, function tapHoldFunc1(e) {\n                if (e.which && e.which !== 1) {\n                    return false;\n                } else {\n                    $this.data('tapheld', false);\n                    origTarget = e.target;\n\n                    var origEvent = e.originalEvent;\n                    var start_time = Date.now(),\n                        startPosition = {\n                            'x': (settings.touch_capable) ? origEvent.touches[0].pageX : e.pageX,\n                            'y': (settings.touch_capable) ? origEvent.touches[0].pageY : e.pageY\n                        },\n                        startOffset = {\n                            'x': (settings.touch_capable) ? origEvent.touches[0].pageX - origEvent.touches[0].target.offsetLeft : e.offsetX,\n                            'y': (settings.touch_capable) ? origEvent.touches[0].pageY - origEvent.touches[0].target.offsetTop : e.offsetY\n                        };\n\n                    start_pos.x = (e.originalEvent.targetTouches) ? e.originalEvent.targetTouches[0].pageX : e.pageX;\n                    start_pos.y = (e.originalEvent.targetTouches) ? e.originalEvent.targetTouches[0].pageY : e.pageY;\n\n                    end_x = start_pos.x;\n                    end_y = start_pos.y;\n                    \n                    // Get the element's threshold:\n                    var ele_threshold = ($this.parent().data('threshold')) ? $this.parent().data('threshold') : $this.data('threshold'),\n                        threshold = (typeof ele_threshold !== 'undefined' && ele_threshold !== false && parseInt(ele_threshold)) ? parseInt(ele_threshold) : settings.taphold_threshold; \n\n                    $this.data('hold_timer', window.setTimeout(function () {\n\n                        var diff_x = (start_pos.x - end_x),\n                            diff_y = (start_pos.y - end_y);\n\n                        if (e.target == origTarget && ((start_pos.x == end_x && start_pos.y == end_y) || (diff_x >= -(settings.tap_pixel_range) && diff_x <= settings.tap_pixel_range && diff_y >= -(settings.tap_pixel_range) && diff_y <= settings.tap_pixel_range))) {\n                            $this.data('tapheld', true);\n\n                            var end_time = Date.now();\n                                \n                            var duration  = end_time - start_time,\n                                touches   = (e.originalEvent.targetTouches) ? e.originalEvent.targetTouches : [ e ],\n                                touchData = [ ];\n                            \n                            var offset = ($this.get(0) !== window && $this.get(0) !== document) ? $this.offset() : { left: 0, top: 0 };\n                            for( var i = 0; i < touches.length; i++)\n                            {\n                                var touch = {\n                                    'position': {\n                                        'x': (settings.touch_capable) ? origEvent.changedTouches[i].pageX : e.pageX,\n                                        'y': (settings.touch_capable) ? origEvent.changedTouches[i].pageY : e.pageY\n                                    },\n                                    'offset': {\n                                        'x': (settings.touch_capable) ? Math.round(origEvent.changedTouches[i].pageX - offset.left) : Math.round(e.pageX - offset.left),\n                                        'y': (settings.touch_capable) ? Math.round(origEvent.changedTouches[i].pageY - offset.top) : Math.round(e.pageY - offset.top)\n                                    },\n                                    'time': Date.now(),\n                                    'target': e.target,\n                                    'duration': duration\n                                };\n                                \n                                touchData.push( touch );\n                            }\n                            \n                            var evt_name = ( touches.length == 2 ) ? 'taphold2' : 'taphold';\n                            \n                            $this.data('callee1', tapHoldFunc1);\n                            \n                            triggerCustomEvent(thisObject, evt_name, e, touchData);\n                        }\n                    }, threshold) );\n\n                    return true;\n                }\n            }).on(settings.endevent, function tapHoldFunc2() {\n                $this.data('callee2', tapHoldFunc2);\n                $this.data('tapheld', false);\n                window.clearTimeout( $this.data('hold_timer') );\n            })\n            .on(settings.moveevent, function tapHoldFunc3(e) {\n                $this.data('callee3', tapHoldFunc3);\n                \n                end_x = (e.originalEvent.targetTouches) ? e.originalEvent.targetTouches[0].pageX : e.pageX;\n                end_y = (e.originalEvent.targetTouches) ? e.originalEvent.targetTouches[0].pageY : e.pageY;\n            });\n        },\n\n        remove: function () {\n            $(this).off(settings.startevent, $(this).data.callee1).off(settings.endevent, $(this).data.callee2).off(settings.moveevent, $(this).data.callee3);\n        }\n    };\n\n    // doubletap Event:\n    $.event.special.doubletap = {\n        setup: function () {\n            var thisObject = this,\n                $this = $(thisObject),\n                origTarget,\n                action,\n                firstTap = null,\n                origEvent,\n                cooloff,\n                cooling = false;\n\n            $this.on(settings.startevent, function doubleTapFunc1(e) {\n                if (e.which && e.which !== 1) {\n                    return false;\n                }\n                \n                $this.data('doubletapped', false);\n                origTarget = e.target;\n                $this.data('callee1', doubleTapFunc1);\n\n                origEvent = e.originalEvent;\n                if (!firstTap) {\n                    var offset = ($this.get(0) !== window && $this.get(0) !== document) ? $this.offset() : { left: 0, top: 0 };\n                    firstTap = {\n                        'position': {\n                            'x': (settings.touch_capable) ? origEvent.touches[0].pageX : e.pageX,\n                            'y': (settings.touch_capable) ? origEvent.touches[0].pageY : e.pageY\n                        },\n                        'offset': {\n                            'x': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageX - offset.left) : Math.round(e.pageX - offset.left),\n                            'y': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageY - offset.top) : Math.round(e.pageY - offset.top)\n                        },\n                        'time': Date.now(),\n                        'target': e.target,\n                        'element': e.originalEvent.srcElement,\n                        'index':   $(e.target).index()\n                    };\n                }\n\n                return true;\n            }).on(settings.endevent, function doubleTapFunc2(e) {\n                \n                var now = Date.now();\n                var lastTouch = $this.data('lastTouch') || now + 1;\n                var delta = now - lastTouch;\n                window.clearTimeout(action);\n                $this.data('callee2', doubleTapFunc2);\n\n                if (delta < settings.doubletap_int && ($(e.target).index() == firstTap.index) && delta > 100) {\n                    $this.data('doubletapped', true);\n                    window.clearTimeout(settings.tap_timer);\n\n                    // Now get the current event:\n                    var offset = ($this.get(0) !== window && $this.get(0) !== document) ? $this.offset() : { left: 0, top: 0 };\n                    var lastTap = {\n                        'position': {\n                            'x': (settings.touch_capable) ? e.originalEvent.changedTouches[0].pageX : e.pageX,\n                            'y': (settings.touch_capable) ? e.originalEvent.changedTouches[0].pageY : e.pageY\n                        },\n                        'offset': {\n                            'x': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageX - offset.left) : Math.round(e.pageX - offset.left),\n                            'y': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageY - offset.top) : Math.round(e.pageY - offset.top)\n                        },\n                        'time': Date.now(),\n                        'target': e.target,\n                        'element': e.originalEvent.srcElement,\n                        'index': $(e.target).index()\n                    };\n\n                    var touchData = {\n                        'firstTap': firstTap,\n                        'secondTap': lastTap,\n                        'interval': lastTap.time - firstTap.time\n                    };\n\n                    if (!cooling) {\n                        triggerCustomEvent(thisObject, 'doubletap', e, touchData);\n                        firstTap = null;\n                    }\n                    \n                    cooling = true;\n                    \n                    cooloff = window.setTimeout(function () {\n                        cooling = false;\n                    }, settings.doubletap_int);\n                    \n                } else {\n                    $this.data('lastTouch', now);\n                    action = window.setTimeout(function () {\n                        firstTap = null;\n                        window.clearTimeout(action);\n                    }, settings.doubletap_int, [e]);\n                }\n                $this.data('lastTouch', now);\n            });\n        },\n        remove: function () {\n            $(this).off(settings.startevent, $(this).data.callee1).off(settings.endevent, $(this).data.callee2);\n        }\n    };\n\n    // singletap Event:\n    // This is used in conjuction with doubletap when both events are needed on the same element\n    $.event.special.singletap = {\n        setup: function () {\n            var thisObject = this,\n                $this = $(thisObject),\n                origTarget = null,\n                startTime = null,\n                start_pos = {\n                    x: 0,\n                    y: 0\n                };\n\n            $this.on(settings.startevent, function singleTapFunc1(e) {\n                if (e.which && e.which !== 1) {\n                    return false;\n                } else {\n                    startTime = Date.now();\n                    origTarget = e.target;\n                    $this.data('callee1', singleTapFunc1);\n\n                    // Get the start x and y position:\n                    start_pos.x = (e.originalEvent.targetTouches) ? e.originalEvent.targetTouches[0].pageX : e.pageX;\n                    start_pos.y = (e.originalEvent.targetTouches) ? e.originalEvent.targetTouches[0].pageY : e.pageY;\n                    \n                    return true;\n                }\n            }).on(settings.endevent, function singleTapFunc2(e) {\n                $this.data('callee2', singleTapFunc2);\n                if (e.target == origTarget) {\n                    \n                    // Get the end point:\n                    var end_pos_x = (e.originalEvent.changedTouches) ? e.originalEvent.changedTouches[0].pageX : e.pageX,\n                        end_pos_y = (e.originalEvent.changedTouches) ? e.originalEvent.changedTouches[0].pageY : e.pageY;\n                    \n                    // We need to check if it was a taphold:\n\n                    settings.tap_timer = window.setTimeout(function () {\n                        \n                        var diff_x = (start_pos.x - end_pos_x), diff_y = (start_pos.y - end_pos_y);\n                        \n                        if(!$this.data('doubletapped') && !$this.data('tapheld') && (((start_pos.x == end_pos_x) && (start_pos.y == end_pos_y)) || (diff_x >= -(settings.tap_pixel_range) && diff_x <= settings.tap_pixel_range && diff_y >= -(settings.tap_pixel_range) && diff_y <= settings.tap_pixel_range))) {\n\n                            var offset = ($this.get(0) !== window && $this.get(0) !== document) ? $this.offset() : { left: 0, top: 0 };\n                            var origEvent = e.originalEvent;\n                            var touchData = {\n                                'position': {\n                                    'x': (settings.touch_capable) ? origEvent.changedTouches[0].pageX : e.pageX,\n                                    'y': (settings.touch_capable) ? origEvent.changedTouches[0].pageY : e.pageY\n                                },\n                                'offset': {\n                                    'x': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageX - offset.left) : Math.round(e.pageX - offset.left),\n                                    'y': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageY - offset.top) : Math.round(e.pageY - offset.top)\n                                },\n                                'time': Date.now(),\n                                'target': e.target\n                            };\n                            \n                            // Was it a taphold?\n                            if((touchData.time - startTime) < settings.taphold_threshold)\n                            {\n                                triggerCustomEvent(thisObject, 'singletap', e, touchData);\n                            }\n                        }\n                    }, settings.doubletap_int);\n                }\n            });\n        },\n\n        remove: function () {\n            $(this).off(settings.startevent, $(this).data.callee1).off(settings.endevent, $(this).data.callee2);\n        }\n    };\n\n    // tap Event:\n    $.event.special.tap = {\n        setup: function () {\n            var thisObject = this,\n                $this = $(thisObject),\n                started = false,\n                origTarget = null,\n                start_time,\n                start_pos = {\n                    x: 0,\n                    y: 0\n                },\n                touches;\n\n            $this.on(settings.startevent, function tapFunc1(e) {\n                $this.data('callee1', tapFunc1);\n\n                if( e.which && e.which !== 1 )\n                {\n                    return false;\n                }\n                else\n                {\n                    started = true;\n                    start_pos.x = (e.originalEvent.targetTouches) ? e.originalEvent.targetTouches[0].pageX : e.pageX;\n                    start_pos.y = (e.originalEvent.targetTouches) ? e.originalEvent.targetTouches[0].pageY : e.pageY;\n                    start_time = Date.now();\n                    origTarget = e.target;\n                    \n                    touches = (e.originalEvent.targetTouches) ? e.originalEvent.targetTouches : [ e ];\n                    return true;\n                }\n            }).on(settings.endevent, function tapFunc2(e) {\n                $this.data('callee2', tapFunc2);\n\n                // Only trigger if they've started, and the target matches:\n                var end_x = (e.originalEvent.targetTouches) ? e.originalEvent.changedTouches[0].pageX : e.pageX,\n                    end_y = (e.originalEvent.targetTouches) ? e.originalEvent.changedTouches[0].pageY : e.pageY,\n                    diff_x = (start_pos.x - end_x),\n                    diff_y = (start_pos.y - end_y),\n                    eventName;\n                    \n                if (origTarget == e.target && started && ((Date.now() - start_time) < settings.taphold_threshold) && ((start_pos.x == end_x && start_pos.y == end_y) || (diff_x >= -(settings.tap_pixel_range) && diff_x <= settings.tap_pixel_range && diff_y >= -(settings.tap_pixel_range) && diff_y <= settings.tap_pixel_range))) {\n                    var offset = ($this.get(0) !== window && $this.get(0) !== document) ? $this.offset() : { left: 0, top: 0 };\n                    var origEvent = e.originalEvent;\n                    var touchData = [ ];\n                    \n                    for( var i = 0; i < touches.length; i++)\n                    {\n                        var touch = {\n                            'position': {\n                                'x': (settings.touch_capable) ? origEvent.changedTouches[i].pageX : e.pageX,\n                                'y': (settings.touch_capable) ? origEvent.changedTouches[i].pageY : e.pageY\n                            },\n                            'offset': {\n                                'x': (settings.touch_capable) ? Math.round(origEvent.changedTouches[i].pageX - offset.left) : Math.round(e.pageX - offset.left),\n                                'y': (settings.touch_capable) ? Math.round(origEvent.changedTouches[i].pageY - offset.top) : Math.round(e.pageY - offset.top)\n                            },\n                            'time': Date.now(),\n                            'target': e.target\n                        };\n                        \n                        touchData.push( touch );\n                    }\n                    \n                    var evt_name = ( touches.length == 2 ) ? 'tap2' : 'tap';\n                    \n                    triggerCustomEvent(thisObject, evt_name, e, touchData);\n                }\n            });\n        },\n\n        remove: function () {\n            $(this).off(settings.startevent, $(this).data.callee1).off(settings.endevent, $(this).data.callee2);\n        }\n    };\n\n    // swipe Event (also handles swipeup, swiperight, swipedown and swipeleft):\n    $.event.special.swipe = {\n        setup: function () {\n            var thisObject = this,\n                $this = $(thisObject),\n                started = false,\n                hasSwiped = false,\n                originalCoord = {\n                    x: 0,\n                    y: 0\n                },\n                finalCoord = {\n                    x: 0,\n                    y: 0\n                },\n                startEvnt;\n\n            // Screen touched, store the original coordinate\n\n            function touchStart(e) {\n                $this = $(e.currentTarget);\n                $this.data('callee1', touchStart);\n                originalCoord.x = (e.originalEvent.targetTouches) ? e.originalEvent.targetTouches[0].pageX : e.pageX;\n                originalCoord.y = (e.originalEvent.targetTouches) ? e.originalEvent.targetTouches[0].pageY : e.pageY;\n                finalCoord.x = originalCoord.x;\n                finalCoord.y = originalCoord.y;\n                started = true;\n                var offset = ($this.get(0) !== window && $this.get(0) !== document) ? $this.offset() : { left: 0, top: 0 };\n                var origEvent = e.originalEvent;\n                // Read event data into our startEvt:\n                startEvnt = {\n                    'position': {\n                        'x': (settings.touch_capable) ? origEvent.touches[0].pageX : e.pageX,\n                        'y': (settings.touch_capable) ? origEvent.touches[0].pageY : e.pageY\n                    },\n                    'offset': {\n                        'x': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageX - offset.left) : Math.round(e.pageX - offset.left),\n                        'y': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageY - offset.top) : Math.round(e.pageY - offset.top)\n                    },\n                    'time': Date.now(),\n                    'target': e.target\n                };\n            }\n\n            // Store coordinates as finger is swiping\n\n            function touchMove(e) {\n                $this = $(e.currentTarget);\n                $this.data('callee2', touchMove);\n                finalCoord.x = (e.originalEvent.targetTouches) ? e.originalEvent.targetTouches[0].pageX : e.pageX;\n                finalCoord.y = (e.originalEvent.targetTouches) ? e.originalEvent.targetTouches[0].pageY : e.pageY;\n\n                var swipedir;\n\n                // We need to check if the element to which the event was bound contains a data-xthreshold | data-vthreshold:\n                var ele_x_threshold = ($this.parent().data('xthreshold')) ? $this.parent().data('xthreshold') : $this.data('xthreshold'),\n                    ele_y_threshold = ($this.parent().data('ythreshold')) ? $this.parent().data('ythreshold') : $this.data('ythreshold'),\n                    h_threshold = (typeof ele_x_threshold !== 'undefined' && ele_x_threshold !== false && parseInt(ele_x_threshold)) ? parseInt(ele_x_threshold) : settings.swipe_h_threshold,\n                    v_threshold = (typeof ele_y_threshold !== 'undefined' && ele_y_threshold !== false && parseInt(ele_y_threshold)) ? parseInt(ele_y_threshold) : settings.swipe_v_threshold; \n\n                if (Math.abs(finalCoord.x - originalCoord.x) > Math.abs(finalCoord.y - originalCoord.y)) {\n                  if (originalCoord.x < finalCoord.x && (finalCoord.x - originalCoord.x > h_threshold)) {\n                      swipedir = 'swiperight';\n                  }\n                  if (originalCoord.x > finalCoord.x && (originalCoord.x - finalCoord.x > h_threshold)) {\n                      swipedir = 'swipeleft';\n                  }\n                }\n                else {\n                  if (originalCoord.y > finalCoord.y && (originalCoord.y - finalCoord.y > v_threshold)) {\n                      swipedir = 'swipeup';\n                  }\n                  if (originalCoord.y < finalCoord.y && (finalCoord.y - originalCoord.y > v_threshold)) {\n                      swipedir = 'swipedown';\n                  }\n                }\n\n                if (swipedir != undefined && started) {\n                    originalCoord.x = 0;\n                    originalCoord.y = 0;\n                    finalCoord.x = 0;\n                    finalCoord.y = 0;\n                    started = false;\n\n                    // Read event data into our endEvnt:\n                    var offset = ($this.get(0) !== window && $this.get(0) !== document) ? $this.offset() : { left: 0, top: 0 };\n                    var origEvent = e.originalEvent;\n                    var endEvnt = {\n                        'position': {\n                            'x': (settings.touch_capable) ? origEvent.touches[0].pageX : e.pageX,\n                            'y': (settings.touch_capable) ? origEvent.touches[0].pageY : e.pageY\n                        },\n                        'offset': {\n                            'x': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageX - offset.left) : Math.round(e.pageX - offset.left),\n                            'y': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageY - offset.top) : Math.round(e.pageY - offset.top)\n                        },\n                        'time': Date.now(),\n                        'target': e.target\n                    };\n\n                    // Calculate the swipe amount (normalized):\n                    var xAmount = Math.abs(startEvnt.position.x - endEvnt.position.x),\n                        yAmount = Math.abs(startEvnt.position.y - endEvnt.position.y);\n\n                    var touchData = {\n                        'startEvnt': startEvnt,\n                        'endEvnt': endEvnt,\n                        'direction': swipedir.replace('swipe', ''),\n                        'xAmount': xAmount,\n                        'yAmount': yAmount,\n                        'duration': endEvnt.time - startEvnt.time\n                    };\n                    hasSwiped = true;\n                    $this.trigger('swipe', touchData).trigger(swipedir, touchData);\n                }\n            }\n\n            function touchEnd(e) {\n                $this = $(e.currentTarget);\n                var swipedir = \"\";\n                $this.data('callee3', touchEnd);\n                if (hasSwiped) {\n                    // We need to check if the element to which the event was bound contains a data-xthreshold | data-vthreshold:\n                    var ele_x_threshold = $this.data('xthreshold'),\n                        ele_y_threshold = $this.data('ythreshold'),\n                        h_threshold = (typeof ele_x_threshold !== 'undefined' && ele_x_threshold !== false && parseInt(ele_x_threshold)) ? parseInt(ele_x_threshold) : settings.swipe_h_threshold,\n                        v_threshold = (typeof ele_y_threshold !== 'undefined' && ele_y_threshold !== false && parseInt(ele_y_threshold)) ? parseInt(ele_y_threshold) : settings.swipe_v_threshold;\n\n                    var offset = ($this.get(0) !== window && $this.get(0) !== document) ? $this.offset() : { left: 0, top: 0 };\n                    var origEvent = e.originalEvent;\n                    var endEvnt = {\n                        'position': {\n                            'x': (settings.touch_capable) ? origEvent.changedTouches[0].pageX : e.pageX,\n                            'y': (settings.touch_capable) ? origEvent.changedTouches[0].pageY : e.pageY\n                        },\n                        'offset': {\n                            'x': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageX - offset.left) : Math.round(e.pageX - offset.left),\n                            'y': (settings.touch_capable) ? Math.round(origEvent.changedTouches[0].pageY - offset.top) : Math.round(e.pageY - offset.top)\n                        },\n                        'time': Date.now(),\n                        'target': e.target\n                    };\n\n                    // Calculate the swipe amount (normalized):\n                    var xAmount = Math.abs(startEvnt.position.x - endEvnt.position.x),\n                        yAmount = Math.abs(startEvnt.position.y - endEvnt.position.y);\n\n                    // Read event data into our endEvnt:\n                    if (xAmount > yAmount) {\n                      if (startEvnt.position.x < endEvnt.position.x && (endEvnt.position.x - startEvnt.position.x > h_threshold)) {\n                          swipedir = 'swiperight';\n                      }\n                      if (startEvnt.position.x > endEvnt.position.x && (startEvnt.position.x - endEvnt.position.x > h_threshold)) {\n                          swipedir = 'swipeleft';\n                      }\n                    }\n                    else {\n                      if (startEvnt.position.y > endEvnt.position.y && (startEvnt.position.y - endEvnt.position.y > v_threshold)) {\n                          swipedir = 'swipeup';\n                      }\n                      if (startEvnt.position.y < endEvnt.position.y && (endEvnt.position.y - startEvnt.position.y > v_threshold)) {\n                          swipedir = 'swipedown';\n                      }\n                    }\n\n                    var touchData = {\n                        'startEvnt': startEvnt,\n                        'endEvnt': endEvnt,\n                        'direction': swipedir.replace('swipe', ''),\n                        'xAmount': xAmount,\n                        'yAmount': yAmount,\n                        'duration': endEvnt.time - startEvnt.time\n                    };\n                    $this.trigger('swipeend', touchData);\n                }\n\n                started = false;\n                hasSwiped = false;\n            }\n\n            $this.on(settings.startevent, touchStart);\n            $this.on(settings.moveevent, touchMove);\n            $this.on(settings.endevent, touchEnd);\n        },\n\n        remove: function () {\n            $(this).off(settings.startevent, $(this).data.callee1).off(settings.moveevent, $(this).data.callee2).off(settings.endevent, $(this).data.callee3);\n        }\n    };\n\n    // scrollstart Event (also handles scrollend):\n    $.event.special.scrollstart = {\n        setup: function () {\n            var thisObject = this,\n                $this = $(thisObject),\n                scrolling,\n                timer;\n\n            function trigger(event, state) {\n                scrolling = state;\n                triggerCustomEvent(thisObject, scrolling ? 'scrollstart' : 'scrollend', event);\n            }\n\n            // iPhone triggers scroll after a small delay; use touchmove instead\n            $this.on(settings.scrollevent, function scrollFunc(event) {\n                $this.data('callee', scrollFunc);\n\n                if (!scrolling) {\n                    trigger(event, true);\n                }\n\n                clearTimeout(timer);\n                timer = setTimeout(function () {\n                    trigger(event, false);\n                }, 50);\n            });\n        },\n\n        remove: function () {\n            $(this).off(settings.scrollevent, $(this).data.callee);\n        }\n    };\n\n    // This is the orientation change (largely borrowed from jQuery Mobile):\n    var win = $(window),\n        special_event,\n        get_orientation,\n        last_orientation,\n        initial_orientation_is_landscape,\n        initial_orientation_is_default,\n        portrait_map = {\n            '0': true,\n            '180': true\n        };\n\n    if (settings.orientation_support) {\n        var ww = window.innerWidth || win.width(),\n            wh = window.innerHeight || win.height(),\n            landscape_threshold = 50;\n\n        initial_orientation_is_landscape = ww > wh && (ww - wh) > landscape_threshold;\n        initial_orientation_is_default = portrait_map[window.orientation];\n\n        if ((initial_orientation_is_landscape && initial_orientation_is_default) || (!initial_orientation_is_landscape && !initial_orientation_is_default)) {\n            portrait_map = {\n                '-90': true,\n                '90': true\n            };\n        }\n    }\n\n    $.event.special.orientationchange = special_event = {\n        setup: function () {\n            // If the event is supported natively, return false so that jQuery\n            // will on to the event using DOM methods.\n            if (settings.orientation_support) {\n                return false;\n            }\n\n            // Get the current orientation to avoid initial double-triggering.\n            last_orientation = get_orientation();\n\n            win.on('throttledresize', handler);\n            return true;\n        },\n        teardown: function () {\n            if (settings.orientation_support) {\n                return false;\n            }\n\n            win.off('throttledresize', handler);\n            return true;\n        },\n        add: function (handleObj) {\n            // Save a reference to the bound event handler.\n            var old_handler = handleObj.handler;\n\n            handleObj.handler = function (event) {\n                event.orientation = get_orientation();\n                return old_handler.apply(this, arguments);\n            };\n        }\n    };\n\n    // If the event is not supported natively, this handler will be bound to\n    // the window resize event to simulate the orientationchange event.\n\n    function handler() {\n        // Get the current orientation.\n        var orientation = get_orientation();\n\n        if (orientation !== last_orientation) {\n            // The orientation has changed, so trigger the orientationchange event.\n            last_orientation = orientation;\n            win.trigger(\"orientationchange\");\n        }\n    }\n\n    $.event.special.orientationchange.orientation = get_orientation = function () {\n        var isPortrait = true,\n            elem = document.documentElement;\n\n        if (settings.orientation_support) {\n            isPortrait = portrait_map[window.orientation];\n        } else {\n            isPortrait = elem && elem.clientWidth / elem.clientHeight < 1.1;\n        }\n\n        return isPortrait ? 'portrait' : 'landscape';\n    };\n\n    // throttle Handler:\n    $.event.special.throttledresize = {\n        setup: function () {\n            $(this).on('resize', throttle_handler);\n        },\n        teardown: function () {\n            $(this).off('resize', throttle_handler);\n        }\n    };\n\n    var throttle = 250,\n        throttle_handler = function () {\n            curr = Date.now();\n            diff = curr - lastCall;\n\n            if (diff >= throttle) {\n                lastCall = curr;\n                $(this).trigger('throttledresize');\n\n            } else {\n                if (heldCall) {\n                    window.clearTimeout(heldCall);\n                }\n\n                // Promise a held call will still execute\n                heldCall = window.setTimeout(handler, throttle - diff);\n            }\n        },\n        lastCall = 0,\n        heldCall,\n        curr,\n        diff;\n\n    // Trigger a custom event:\n\n    function triggerCustomEvent(obj, eventType, event, touchData) {\n        var originalType = event.type;\n        event.type = eventType;\n\n        $.event.dispatch.call(obj, event, touchData);\n        event.type = originalType;\n    }\n\n    // Correctly on anything we've overloaded:\n    $.each({\n        scrollend: 'scrollstart',\n        swipeup: 'swipe',\n        swiperight: 'swipe',\n        swipedown: 'swipe',\n        swipeleft: 'swipe',\n        swipeend: 'swipe',\n        tap2:     'tap',\n        taphold2: 'taphold'\n    }, function (e, srcE) {\n        $.event.special[e] = {\n            setup: function () {\n                $(this).on(srcE, $.noop);\n            }\n        };\n    });\n\n}(jQuery));"]}