diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 356579d04..ee6261a5b 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -134,6 +134,7 @@ All definitions files include a header with the author and editors, so at some p
* [jQuery.dataTables](http://www.datatables.net) (by [Armin Sander](https://github.com/pragmatrix))
* [jQuery.datetimepicker](http://trentrichardson.com/examples/timepicker/) (by [Doug McDonald](https://github.com/dougajmcdonald))
* [jQuery.dynatree](http://code.google.com/p/dynatree/) (by [François de Campredon](https://github.com/fdecampredon))
+* [jQuery.Finger](http://ngryman.sh/jquery.finger/) (by [Max Ackley](https://github.com/maxackley))
* [jQuery.Flot](http://www.flotcharts.org/) (by [Matt Burland](https://github.com/burlandm))
* [jQuery.form](http://malsup.com/jquery/form/) (by [François Guillot](http://fguillot.developpez.com/))
* [jQuery.Globalize](https://github.com/jquery/globalize) (by [Boris Yankov](https://github.com/borisyankov))
diff --git a/jquery.finger/jquery.finger-tests.ts b/jquery.finger/jquery.finger-tests.ts
new file mode 100644
index 000000000..e50fe1d5f
--- /dev/null
+++ b/jquery.finger/jquery.finger-tests.ts
@@ -0,0 +1,37 @@
+///
+///
+
+$.Finger.doubleTapInterval = 400;
+$.Finger.flickDuration = 250;
+$.Finger.pressDuration = 100;
+$.Finger.motionThreshhold = 10;
+$.Finger.preventDefault = true;
+var fingerEventObject: JQueryFingerEventObject;
+fingerEventObject.x = 1;
+fingerEventObject.y = 2;
+fingerEventObject.dx = 3;
+fingerEventObject.dy = 4;
+fingerEventObject.adx = 3;
+fingerEventObject.ady = 4;
+fingerEventObject.orientation = 'horizontal';
+fingerEventObject.direction = 1;
+$('body').on('drag', e => {
+ if ('vertical' == e.orientation) return;
+ e.preventDefault();
+});
+
+$('body').on('drag', '.drag', e => {
+ if ('vertical' == e.orientation) return;
+ e.preventDefault();
+});
+
+$('#menu').on('flick', function (e) {
+ if ('horizontal' == e.orientation) {
+ if (1 == e.direction) {
+ $(this).addClass('is-opened');
+ }
+ else {
+ $(this).removeClass('is-opened');
+ }
+ }
+});
diff --git a/jquery.finger/jquery.finger.d.ts b/jquery.finger/jquery.finger.d.ts
new file mode 100644
index 000000000..0b0cb7ebf
--- /dev/null
+++ b/jquery.finger/jquery.finger.d.ts
@@ -0,0 +1,109 @@
+// Type definitions for jquery.finger.js
+// Project: http://ngryman.sh/jquery.finger/
+// Definitions by: Max Ackley
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module JQueryFinger {
+ export interface JQueryFingerOptions {
+ /**
+ * The time the user must hold in order to fire a press event. If this
+ * time is not reached, a tap event will be fired instead.
+ * Default: 300(ms).
+ */
+ pressDuration: number;
+
+ /**
+ * The maximum time between two tap events to fire a doubletap event.
+ * If this time is reached, two distinct tap events will be fired instead.
+ * Default: 300(ms).
+ */
+ doubleTapInterval: number;
+
+ /**
+ * The maximum time the user will have to swipe in order to fire a flick
+ * event. If this time is reached, only drag events will continue to be
+ * fired.
+ * Default: 150(ms).
+ */
+ flickDuration: number;
+
+ /**
+ * The number of pixels the user will have to move in order to fire motion
+ * events (drag or flick). If this time is not reached, no motion will
+ * be handled and tap, doubletap or press event will be fired.
+ * Default: 5(px).
+ */
+ motionThreshhold: number;
+
+ /**
+ * Globally prevents every native default behavior.
+ * Default: undefined.
+ */
+ preventDefault: boolean;
+ }
+}
+
+interface JQueryFingerEventObject extends JQueryEventObject {
+ /**
+ * The x page coordinate.
+ */
+ x: number;
+
+ /**
+ * The y page coordinate.
+ */
+ y: number;
+
+ /**
+ * The x delta since the last event.
+ */
+ dx: number;
+
+ /**
+ * The y delta since the last event.
+ */
+ dy: number;
+
+ /**
+ * The absolute x delta since the last event.
+ */
+ adx: number;
+
+ /**
+ * The absolute y delta since the last event.
+ */
+ ady: number;
+
+ /**
+ * The orientation of the motion. Adjusted by $.Finger.motionThreshhold.
+ * Value is 'horizontal' or 'vertical'.
+ */
+ orientation: string;
+
+ /**
+ * The direction of the motion. Value is 1 if the motion is 'positive'
+ * (left-to-right or top-to-bottom) or -1 if 'negative'(right-to-left or
+ * bottom-to-top).
+ */
+ direction: number;
+}
+
+interface JQuery {
+ on(events: 'tap', handler: (eventObject: JQueryFingerEventObject, ...args: any[]) => any): JQuery;
+ on(events: 'doubletap', handler: (eventObject: JQueryFingerEventObject, ...args: any[]) => any): JQuery;
+ on(events: 'press', handler: (eventObject: JQueryFingerEventObject, ...args: any[]) => any): JQuery;
+ on(events: 'drag', handler: (eventObject: JQueryFingerEventObject, ...args: any[]) => any): JQuery;
+ on(events: 'flick', handler: (eventObject: JQueryFingerEventObject, ...args: any[]) => any): JQuery;
+
+ on(events: 'tap', data: any, handler: (eventObject: JQueryFingerEventObject, ...args: any[]) => any): JQuery;
+ on(events: 'doubletap', data: any, handler: (eventObject: JQueryFingerEventObject, ...args: any[]) => any): JQuery;
+ on(events: 'press', data: any, handler: (eventObject: JQueryFingerEventObject, ...args: any[]) => any): JQuery;
+ on(events: 'drag', data: any, handler: (eventObject: JQueryFingerEventObject, ...args: any[]) => any): JQuery;
+ on(events: 'flick', data: any, handler: (eventObject: JQueryFingerEventObject, ...args: any[]) => any): JQuery;
+}
+
+interface JQueryStatic {
+ Finger: JQueryFinger.JQueryFingerOptions;
+}