hammerjs-rails 0.3.0 → 2.0.4
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61113979a344fb203996e65b0490468408a3bde1
|
4
|
+
data.tar.gz: 67c20f4d81ac518018be012dc6710d7d5699fbe8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 260e81aea505e453e3312beb4c52a374537649a3bad52b44cb954c7aef54a284efa202d91c9cae929cc9a8179487db51a3d841360ada209fae938ff56ec4bd29
|
7
|
+
data.tar.gz: 96fbe421bd7128d2c3e0e99e33d3822764265196a96f92284e8687cf5e5c9c99eba35608679ee1cc29a37b170811aa6cc504730552a33e04bbdd72c672191fdf
|
@@ -1,11 +1,15 @@
|
|
1
|
-
|
1
|
+
/*! Hammer.JS - v2.0.4 - 2014-09-28
|
2
|
+
* http://hammerjs.github.io/
|
3
|
+
*
|
4
|
+
* Copyright (c) 2014 Jorik Tangelder;
|
5
|
+
* Licensed under the MIT license */
|
6
|
+
(function(window, document, exportName, undefined) {
|
2
7
|
'use strict';
|
3
8
|
|
4
9
|
var VENDOR_PREFIXES = ['', 'webkit', 'moz', 'MS', 'ms', 'o'];
|
5
10
|
var TEST_ELEMENT = document.createElement('div');
|
6
11
|
|
7
12
|
var TYPE_FUNCTION = 'function';
|
8
|
-
var TYPE_UNDEFINED = 'undefined';
|
9
13
|
|
10
14
|
var round = Math.round;
|
11
15
|
var abs = Math.abs;
|
@@ -18,7 +22,7 @@ var now = Date.now;
|
|
18
22
|
* @param {Object} context
|
19
23
|
* @returns {number}
|
20
24
|
*/
|
21
|
-
function
|
25
|
+
function setTimeoutContext(fn, timeout, context) {
|
22
26
|
return setTimeout(bindFn(fn, context), timeout);
|
23
27
|
}
|
24
28
|
|
@@ -46,7 +50,7 @@ function invokeArrayArg(arg, fn, context) {
|
|
46
50
|
* @param {Object} context
|
47
51
|
*/
|
48
52
|
function each(obj, iterator, context) {
|
49
|
-
var i
|
53
|
+
var i;
|
50
54
|
|
51
55
|
if (!obj) {
|
52
56
|
return;
|
@@ -55,8 +59,10 @@ function each(obj, iterator, context) {
|
|
55
59
|
if (obj.forEach) {
|
56
60
|
obj.forEach(iterator, context);
|
57
61
|
} else if (obj.length !== undefined) {
|
58
|
-
|
62
|
+
i = 0;
|
63
|
+
while (i < obj.length) {
|
59
64
|
iterator.call(context, obj[i], i, obj);
|
65
|
+
i++;
|
60
66
|
}
|
61
67
|
} else {
|
62
68
|
for (i in obj) {
|
@@ -75,10 +81,12 @@ function each(obj, iterator, context) {
|
|
75
81
|
*/
|
76
82
|
function extend(dest, src, merge) {
|
77
83
|
var keys = Object.keys(src);
|
78
|
-
|
84
|
+
var i = 0;
|
85
|
+
while (i < keys.length) {
|
79
86
|
if (!merge || (merge && dest[keys[i]] === undefined)) {
|
80
87
|
dest[keys[i]] = src[keys[i]];
|
81
88
|
}
|
89
|
+
i++;
|
82
90
|
}
|
83
91
|
return dest;
|
84
92
|
}
|
@@ -120,7 +128,7 @@ function inherit(child, base, properties) {
|
|
120
128
|
* @returns {Function}
|
121
129
|
*/
|
122
130
|
function bindFn(fn, context) {
|
123
|
-
return function() {
|
131
|
+
return function boundFn() {
|
124
132
|
return fn.apply(context, arguments);
|
125
133
|
};
|
126
134
|
}
|
@@ -151,25 +159,25 @@ function ifUndefined(val1, val2) {
|
|
151
159
|
|
152
160
|
/**
|
153
161
|
* addEventListener with multiple events at once
|
154
|
-
* @param {
|
162
|
+
* @param {EventTarget} target
|
155
163
|
* @param {String} types
|
156
164
|
* @param {Function} handler
|
157
165
|
*/
|
158
|
-
function addEventListeners(
|
166
|
+
function addEventListeners(target, types, handler) {
|
159
167
|
each(splitStr(types), function(type) {
|
160
|
-
|
168
|
+
target.addEventListener(type, handler, false);
|
161
169
|
});
|
162
170
|
}
|
163
171
|
|
164
172
|
/**
|
165
173
|
* removeEventListener with multiple events at once
|
166
|
-
* @param {
|
174
|
+
* @param {EventTarget} target
|
167
175
|
* @param {String} types
|
168
176
|
* @param {Function} handler
|
169
177
|
*/
|
170
|
-
function removeEventListeners(
|
178
|
+
function removeEventListeners(target, types, handler) {
|
171
179
|
each(splitStr(types), function(type) {
|
172
|
-
|
180
|
+
target.removeEventListener(type, handler, false);
|
173
181
|
});
|
174
182
|
}
|
175
183
|
|
@@ -220,10 +228,12 @@ function inArray(src, find, findByKey) {
|
|
220
228
|
if (src.indexOf && !findByKey) {
|
221
229
|
return src.indexOf(find);
|
222
230
|
} else {
|
223
|
-
|
231
|
+
var i = 0;
|
232
|
+
while (i < src.length) {
|
224
233
|
if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {
|
225
234
|
return i;
|
226
235
|
}
|
236
|
+
i++;
|
227
237
|
}
|
228
238
|
return -1;
|
229
239
|
}
|
@@ -242,18 +252,33 @@ function toArray(obj) {
|
|
242
252
|
* unique array with objects based on a key (like 'id') or just by the array's value
|
243
253
|
* @param {Array} src [{id:1},{id:2},{id:1}]
|
244
254
|
* @param {String} [key]
|
255
|
+
* @param {Boolean} [sort=False]
|
245
256
|
* @returns {Array} [{id:1},{id:2}]
|
246
257
|
*/
|
247
|
-
function uniqueArray(src, key) {
|
258
|
+
function uniqueArray(src, key, sort) {
|
248
259
|
var results = [];
|
249
260
|
var values = [];
|
250
|
-
|
261
|
+
var i = 0;
|
262
|
+
|
263
|
+
while (i < src.length) {
|
251
264
|
var val = key ? src[i][key] : src[i];
|
252
265
|
if (inArray(values, val) < 0) {
|
253
266
|
results.push(src[i]);
|
254
267
|
}
|
255
268
|
values[i] = val;
|
269
|
+
i++;
|
256
270
|
}
|
271
|
+
|
272
|
+
if (sort) {
|
273
|
+
if (!key) {
|
274
|
+
results = results.sort();
|
275
|
+
} else {
|
276
|
+
results = results.sort(function sortUniqueArray(a, b) {
|
277
|
+
return a[key] > b[key];
|
278
|
+
});
|
279
|
+
}
|
280
|
+
}
|
281
|
+
|
257
282
|
return results;
|
258
283
|
}
|
259
284
|
|
@@ -267,13 +292,15 @@ function prefixed(obj, property) {
|
|
267
292
|
var prefix, prop;
|
268
293
|
var camelProp = property[0].toUpperCase() + property.slice(1);
|
269
294
|
|
270
|
-
|
295
|
+
var i = 0;
|
296
|
+
while (i < VENDOR_PREFIXES.length) {
|
271
297
|
prefix = VENDOR_PREFIXES[i];
|
272
298
|
prop = (prefix) ? prefix + camelProp : property;
|
273
299
|
|
274
300
|
if (prop in obj) {
|
275
301
|
return prop;
|
276
302
|
}
|
303
|
+
i++;
|
277
304
|
}
|
278
305
|
return undefined;
|
279
306
|
}
|
@@ -287,6 +314,16 @@ function uniqueId() {
|
|
287
314
|
return _uniqueId++;
|
288
315
|
}
|
289
316
|
|
317
|
+
/**
|
318
|
+
* get the window object of an element
|
319
|
+
* @param {HTMLElement} element
|
320
|
+
* @returns {DocumentView|Window}
|
321
|
+
*/
|
322
|
+
function getWindowForElement(element) {
|
323
|
+
var doc = element.ownerDocument;
|
324
|
+
return (doc.defaultView || doc.parentWindow);
|
325
|
+
}
|
326
|
+
|
290
327
|
var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;
|
291
328
|
|
292
329
|
var SUPPORT_TOUCH = ('ontouchstart' in window);
|
@@ -329,17 +366,19 @@ function Input(manager, callback) {
|
|
329
366
|
var self = this;
|
330
367
|
this.manager = manager;
|
331
368
|
this.callback = callback;
|
369
|
+
this.element = manager.element;
|
370
|
+
this.target = manager.options.inputTarget;
|
332
371
|
|
333
372
|
// smaller wrapper around the handler, for the scope and the enabled state of the manager,
|
334
373
|
// so when disabled the input events are completely bypassed.
|
335
374
|
this.domHandler = function(ev) {
|
336
|
-
if (boolOrFn(
|
375
|
+
if (boolOrFn(manager.options.enable, [manager])) {
|
337
376
|
self.handler(ev);
|
338
377
|
}
|
339
378
|
};
|
340
379
|
|
341
|
-
this.
|
342
|
-
|
380
|
+
this.init();
|
381
|
+
|
343
382
|
}
|
344
383
|
|
345
384
|
Input.prototype = {
|
@@ -349,23 +388,38 @@ Input.prototype = {
|
|
349
388
|
*/
|
350
389
|
handler: function() { },
|
351
390
|
|
391
|
+
/**
|
392
|
+
* bind the events
|
393
|
+
*/
|
394
|
+
init: function() {
|
395
|
+
this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);
|
396
|
+
this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);
|
397
|
+
this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);
|
398
|
+
},
|
399
|
+
|
352
400
|
/**
|
353
401
|
* unbind the events
|
354
402
|
*/
|
355
403
|
destroy: function() {
|
356
|
-
this.
|
357
|
-
this.
|
404
|
+
this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);
|
405
|
+
this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);
|
406
|
+
this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);
|
358
407
|
}
|
359
408
|
};
|
360
409
|
|
361
410
|
/**
|
362
411
|
* create new input type manager
|
412
|
+
* called by the Manager constructor
|
363
413
|
* @param {Hammer} manager
|
364
414
|
* @returns {Input}
|
365
415
|
*/
|
366
416
|
function createInputInstance(manager) {
|
367
417
|
var Type;
|
368
|
-
|
418
|
+
var inputClass = manager.options.inputClass;
|
419
|
+
|
420
|
+
if (inputClass) {
|
421
|
+
Type = inputClass;
|
422
|
+
} else if (SUPPORT_POINTER_EVENTS) {
|
369
423
|
Type = PointerEventInput;
|
370
424
|
} else if (SUPPORT_ONLY_TOUCH) {
|
371
425
|
Type = TouchInput;
|
@@ -389,12 +443,13 @@ function inputHandler(manager, eventType, input) {
|
|
389
443
|
var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));
|
390
444
|
var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));
|
391
445
|
|
392
|
-
input.isFirst = isFirst;
|
393
|
-
input.isFinal = isFinal;
|
446
|
+
input.isFirst = !!isFirst;
|
447
|
+
input.isFinal = !!isFinal;
|
394
448
|
|
395
449
|
if (isFirst) {
|
396
450
|
manager.session = {};
|
397
451
|
}
|
452
|
+
|
398
453
|
// source event is the normalized value of the domEvents
|
399
454
|
// like 'touchstart, mouseup, pointerdown'
|
400
455
|
input.eventType = eventType;
|
@@ -406,6 +461,7 @@ function inputHandler(manager, eventType, input) {
|
|
406
461
|
manager.emit('hammer.input', input);
|
407
462
|
|
408
463
|
manager.recognize(input);
|
464
|
+
manager.session.prevInput = input;
|
409
465
|
}
|
410
466
|
|
411
467
|
/**
|
@@ -433,29 +489,50 @@ function computeInputData(manager, input) {
|
|
433
489
|
var firstInput = session.firstInput;
|
434
490
|
var firstMultiple = session.firstMultiple;
|
435
491
|
var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;
|
436
|
-
var center = getCenter(pointers);
|
437
492
|
|
493
|
+
var center = input.center = getCenter(pointers);
|
438
494
|
input.timeStamp = now();
|
439
495
|
input.deltaTime = input.timeStamp - firstInput.timeStamp;
|
440
|
-
input.deltaX = center.x - offsetCenter.x;
|
441
|
-
input.deltaY = center.y - offsetCenter.y;
|
442
496
|
|
443
|
-
input.center = center;
|
444
497
|
input.angle = getAngle(offsetCenter, center);
|
445
498
|
input.distance = getDistance(offsetCenter, center);
|
499
|
+
|
500
|
+
computeDeltaXY(session, input);
|
446
501
|
input.offsetDirection = getDirection(input.deltaX, input.deltaY);
|
447
502
|
|
448
503
|
input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;
|
449
504
|
input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;
|
450
505
|
|
506
|
+
computeIntervalInputData(session, input);
|
507
|
+
|
451
508
|
// find the correct target
|
452
509
|
var target = manager.element;
|
453
510
|
if (hasParent(input.srcEvent.target, target)) {
|
454
511
|
target = input.srcEvent.target;
|
455
512
|
}
|
456
513
|
input.target = target;
|
514
|
+
}
|
457
515
|
|
458
|
-
|
516
|
+
function computeDeltaXY(session, input) {
|
517
|
+
var center = input.center;
|
518
|
+
var offset = session.offsetDelta || {};
|
519
|
+
var prevDelta = session.prevDelta || {};
|
520
|
+
var prevInput = session.prevInput || {};
|
521
|
+
|
522
|
+
if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {
|
523
|
+
prevDelta = session.prevDelta = {
|
524
|
+
x: prevInput.deltaX || 0,
|
525
|
+
y: prevInput.deltaY || 0
|
526
|
+
};
|
527
|
+
|
528
|
+
offset = session.offsetDelta = {
|
529
|
+
x: center.x,
|
530
|
+
y: center.y
|
531
|
+
};
|
532
|
+
}
|
533
|
+
|
534
|
+
input.deltaX = prevDelta.x + (center.x - offset.x);
|
535
|
+
input.deltaY = prevDelta.y + (center.y - offset.y);
|
459
536
|
}
|
460
537
|
|
461
538
|
/**
|
@@ -464,18 +541,11 @@ function computeInputData(manager, input) {
|
|
464
541
|
* @param {Object} input
|
465
542
|
*/
|
466
543
|
function computeIntervalInputData(session, input) {
|
467
|
-
var last = session.lastInterval
|
468
|
-
|
469
|
-
|
470
|
-
}
|
544
|
+
var last = session.lastInterval || input,
|
545
|
+
deltaTime = input.timeStamp - last.timeStamp,
|
546
|
+
velocity, velocityX, velocityY, direction;
|
471
547
|
|
472
|
-
|
473
|
-
velocity,
|
474
|
-
velocityX,
|
475
|
-
velocityY,
|
476
|
-
direction;
|
477
|
-
|
478
|
-
if (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined) {
|
548
|
+
if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {
|
479
549
|
var deltaX = last.deltaX - input.deltaX;
|
480
550
|
var deltaY = last.deltaY - input.deltaY;
|
481
551
|
|
@@ -484,6 +554,8 @@ function computeIntervalInputData(session, input) {
|
|
484
554
|
velocityY = v.y;
|
485
555
|
velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;
|
486
556
|
direction = getDirection(deltaX, deltaY);
|
557
|
+
|
558
|
+
session.lastInterval = input;
|
487
559
|
} else {
|
488
560
|
// use latest velocity info if it doesn't overtake a minimum period
|
489
561
|
velocity = last.velocity;
|
@@ -507,11 +579,13 @@ function simpleCloneInputData(input) {
|
|
507
579
|
// make a simple copy of the pointers because we will get a reference if we don't
|
508
580
|
// we only need clientXY for the calculations
|
509
581
|
var pointers = [];
|
510
|
-
|
582
|
+
var i = 0;
|
583
|
+
while (i < input.pointers.length) {
|
511
584
|
pointers[i] = {
|
512
585
|
clientX: round(input.pointers[i].clientX),
|
513
586
|
clientY: round(input.pointers[i].clientY)
|
514
587
|
};
|
588
|
+
i++;
|
515
589
|
}
|
516
590
|
|
517
591
|
return {
|
@@ -539,10 +613,11 @@ function getCenter(pointers) {
|
|
539
613
|
};
|
540
614
|
}
|
541
615
|
|
542
|
-
var x = 0, y = 0;
|
543
|
-
|
616
|
+
var x = 0, y = 0, i = 0;
|
617
|
+
while (i < pointersLength) {
|
544
618
|
x += pointers[i].clientX;
|
545
619
|
y += pointers[i].clientY;
|
620
|
+
i++;
|
546
621
|
}
|
547
622
|
|
548
623
|
return {
|
@@ -639,12 +714,11 @@ function getScale(start, end) {
|
|
639
714
|
var MOUSE_INPUT_MAP = {
|
640
715
|
mousedown: INPUT_START,
|
641
716
|
mousemove: INPUT_MOVE,
|
642
|
-
mouseup: INPUT_END
|
643
|
-
mouseout: INPUT_CANCEL
|
717
|
+
mouseup: INPUT_END
|
644
718
|
};
|
645
719
|
|
646
720
|
var MOUSE_ELEMENT_EVENTS = 'mousedown';
|
647
|
-
var MOUSE_WINDOW_EVENTS = 'mousemove
|
721
|
+
var MOUSE_WINDOW_EVENTS = 'mousemove mouseup';
|
648
722
|
|
649
723
|
/**
|
650
724
|
* Mouse events input
|
@@ -666,7 +740,7 @@ inherit(MouseInput, Input, {
|
|
666
740
|
* handle mouse events
|
667
741
|
* @param {Object} ev
|
668
742
|
*/
|
669
|
-
handler: function(ev) {
|
743
|
+
handler: function MEhandler(ev) {
|
670
744
|
var eventType = MOUSE_INPUT_MAP[ev.type];
|
671
745
|
|
672
746
|
// on start we want to have the left mouse button down
|
@@ -683,13 +757,7 @@ inherit(MouseInput, Input, {
|
|
683
757
|
return;
|
684
758
|
}
|
685
759
|
|
686
|
-
|
687
|
-
var target = ev.relatedTarget || ev.toElement || ev.target;
|
688
|
-
if (ev.type == 'mouseout' && target.nodeName != 'HTML') {
|
689
|
-
eventType = INPUT_MOVE;
|
690
|
-
}
|
691
|
-
|
692
|
-
if (eventType & (INPUT_END | INPUT_CANCEL)) {
|
760
|
+
if (eventType & INPUT_END) {
|
693
761
|
this.pressed = false;
|
694
762
|
}
|
695
763
|
|
@@ -699,7 +767,7 @@ inherit(MouseInput, Input, {
|
|
699
767
|
pointerType: INPUT_TYPE_MOUSE,
|
700
768
|
srcEvent: ev
|
701
769
|
});
|
702
|
-
}
|
770
|
+
}
|
703
771
|
});
|
704
772
|
|
705
773
|
var POINTER_INPUT_MAP = {
|
@@ -719,12 +787,12 @@ var IE10_POINTER_TYPE_ENUM = {
|
|
719
787
|
};
|
720
788
|
|
721
789
|
var POINTER_ELEMENT_EVENTS = 'pointerdown';
|
722
|
-
var POINTER_WINDOW_EVENTS = 'pointermove
|
790
|
+
var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';
|
723
791
|
|
724
792
|
// IE10 has prefixed support, and case-sensitive
|
725
793
|
if (window.MSPointerEvent) {
|
726
794
|
POINTER_ELEMENT_EVENTS = 'MSPointerDown';
|
727
|
-
POINTER_WINDOW_EVENTS = 'MSPointerMove
|
795
|
+
POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';
|
728
796
|
}
|
729
797
|
|
730
798
|
/**
|
@@ -746,7 +814,7 @@ inherit(PointerEventInput, Input, {
|
|
746
814
|
* handle mouse events
|
747
815
|
* @param {Object} ev
|
748
816
|
*/
|
749
|
-
handler: function(ev) {
|
817
|
+
handler: function PEhandler(ev) {
|
750
818
|
var store = this.store;
|
751
819
|
var removePointer = false;
|
752
820
|
|
@@ -754,22 +822,22 @@ inherit(PointerEventInput, Input, {
|
|
754
822
|
var eventType = POINTER_INPUT_MAP[eventTypeNormalized];
|
755
823
|
var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;
|
756
824
|
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
}
|
825
|
+
var isTouch = (pointerType == INPUT_TYPE_TOUCH);
|
826
|
+
|
827
|
+
// get index of the event in the store
|
828
|
+
var storeIndex = inArray(store, ev.pointerId, 'pointerId');
|
762
829
|
|
763
830
|
// start and mouse must be down
|
764
|
-
if (eventType & INPUT_START && (ev.button === 0 ||
|
765
|
-
|
831
|
+
if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {
|
832
|
+
if (storeIndex < 0) {
|
833
|
+
store.push(ev);
|
834
|
+
storeIndex = store.length - 1;
|
835
|
+
}
|
766
836
|
} else if (eventType & (INPUT_END | INPUT_CANCEL)) {
|
767
837
|
removePointer = true;
|
768
838
|
}
|
769
839
|
|
770
|
-
// get index of the event in the store
|
771
840
|
// it not found, so the pointer hasn't been down (so it's probably a hover)
|
772
|
-
var storeIndex = inArray(store, ev.pointerId, 'pointerId');
|
773
841
|
if (storeIndex < 0) {
|
774
842
|
return;
|
775
843
|
}
|
@@ -791,35 +859,105 @@ inherit(PointerEventInput, Input, {
|
|
791
859
|
}
|
792
860
|
});
|
793
861
|
|
794
|
-
var
|
862
|
+
var SINGLE_TOUCH_INPUT_MAP = {
|
795
863
|
touchstart: INPUT_START,
|
796
864
|
touchmove: INPUT_MOVE,
|
797
865
|
touchend: INPUT_END,
|
798
866
|
touchcancel: INPUT_CANCEL
|
799
867
|
};
|
800
868
|
|
801
|
-
var
|
869
|
+
var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';
|
870
|
+
var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';
|
802
871
|
|
803
872
|
/**
|
804
873
|
* Touch events input
|
805
874
|
* @constructor
|
806
875
|
* @extends Input
|
807
876
|
*/
|
877
|
+
function SingleTouchInput() {
|
878
|
+
this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;
|
879
|
+
this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;
|
880
|
+
this.started = false;
|
881
|
+
|
882
|
+
Input.apply(this, arguments);
|
883
|
+
}
|
884
|
+
|
885
|
+
inherit(SingleTouchInput, Input, {
|
886
|
+
handler: function TEhandler(ev) {
|
887
|
+
var type = SINGLE_TOUCH_INPUT_MAP[ev.type];
|
888
|
+
|
889
|
+
// should we handle the touch events?
|
890
|
+
if (type === INPUT_START) {
|
891
|
+
this.started = true;
|
892
|
+
}
|
893
|
+
|
894
|
+
if (!this.started) {
|
895
|
+
return;
|
896
|
+
}
|
897
|
+
|
898
|
+
var touches = normalizeSingleTouches.call(this, ev, type);
|
899
|
+
|
900
|
+
// when done, reset the started state
|
901
|
+
if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {
|
902
|
+
this.started = false;
|
903
|
+
}
|
904
|
+
|
905
|
+
this.callback(this.manager, type, {
|
906
|
+
pointers: touches[0],
|
907
|
+
changedPointers: touches[1],
|
908
|
+
pointerType: INPUT_TYPE_TOUCH,
|
909
|
+
srcEvent: ev
|
910
|
+
});
|
911
|
+
}
|
912
|
+
});
|
913
|
+
|
914
|
+
/**
|
915
|
+
* @this {TouchInput}
|
916
|
+
* @param {Object} ev
|
917
|
+
* @param {Number} type flag
|
918
|
+
* @returns {undefined|Array} [all, changed]
|
919
|
+
*/
|
920
|
+
function normalizeSingleTouches(ev, type) {
|
921
|
+
var all = toArray(ev.touches);
|
922
|
+
var changed = toArray(ev.changedTouches);
|
923
|
+
|
924
|
+
if (type & (INPUT_END | INPUT_CANCEL)) {
|
925
|
+
all = uniqueArray(all.concat(changed), 'identifier', true);
|
926
|
+
}
|
927
|
+
|
928
|
+
return [all, changed];
|
929
|
+
}
|
930
|
+
|
931
|
+
var TOUCH_INPUT_MAP = {
|
932
|
+
touchstart: INPUT_START,
|
933
|
+
touchmove: INPUT_MOVE,
|
934
|
+
touchend: INPUT_END,
|
935
|
+
touchcancel: INPUT_CANCEL
|
936
|
+
};
|
937
|
+
|
938
|
+
var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';
|
939
|
+
|
940
|
+
/**
|
941
|
+
* Multi-user touch events input
|
942
|
+
* @constructor
|
943
|
+
* @extends Input
|
944
|
+
*/
|
808
945
|
function TouchInput() {
|
809
|
-
this.
|
946
|
+
this.evTarget = TOUCH_TARGET_EVENTS;
|
810
947
|
this.targetIds = {};
|
811
948
|
|
812
949
|
Input.apply(this, arguments);
|
813
950
|
}
|
814
951
|
|
815
952
|
inherit(TouchInput, Input, {
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
953
|
+
handler: function MTEhandler(ev) {
|
954
|
+
var type = TOUCH_INPUT_MAP[ev.type];
|
955
|
+
var touches = getTouches.call(this, ev, type);
|
956
|
+
if (!touches) {
|
957
|
+
return;
|
958
|
+
}
|
959
|
+
|
960
|
+
this.callback(this.manager, type, {
|
823
961
|
pointers: touches[0],
|
824
962
|
changedPointers: touches[1],
|
825
963
|
pointerType: INPUT_TYPE_TOUCH,
|
@@ -829,44 +967,62 @@ inherit(TouchInput, Input, {
|
|
829
967
|
});
|
830
968
|
|
831
969
|
/**
|
832
|
-
*
|
970
|
+
* @this {TouchInput}
|
833
971
|
* @param {Object} ev
|
834
|
-
* @param {
|
835
|
-
* @returns {Array} [all, changed]
|
972
|
+
* @param {Number} type flag
|
973
|
+
* @returns {undefined|Array} [all, changed]
|
836
974
|
*/
|
837
|
-
function
|
838
|
-
var
|
975
|
+
function getTouches(ev, type) {
|
976
|
+
var allTouches = toArray(ev.touches);
|
977
|
+
var targetIds = this.targetIds;
|
978
|
+
|
979
|
+
// when there is only one touch, the process can be simplified
|
980
|
+
if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {
|
981
|
+
targetIds[allTouches[0].identifier] = true;
|
982
|
+
return [allTouches, allTouches];
|
983
|
+
}
|
839
984
|
|
840
|
-
var
|
841
|
-
|
842
|
-
|
843
|
-
|
985
|
+
var i,
|
986
|
+
targetTouches,
|
987
|
+
changedTouches = toArray(ev.changedTouches),
|
988
|
+
changedTargetTouches = [],
|
989
|
+
target = this.target;
|
990
|
+
|
991
|
+
// get target touches from touches
|
992
|
+
targetTouches = allTouches.filter(function(touch) {
|
993
|
+
return hasParent(touch.target, target);
|
994
|
+
});
|
844
995
|
|
845
996
|
// collect touches
|
846
|
-
if (
|
847
|
-
|
997
|
+
if (type === INPUT_START) {
|
998
|
+
i = 0;
|
999
|
+
while (i < targetTouches.length) {
|
848
1000
|
targetIds[targetTouches[i].identifier] = true;
|
1001
|
+
i++;
|
849
1002
|
}
|
850
1003
|
}
|
851
1004
|
|
852
1005
|
// filter changed touches to only contain touches that exist in the collected target ids
|
853
|
-
|
1006
|
+
i = 0;
|
1007
|
+
while (i < changedTouches.length) {
|
854
1008
|
if (targetIds[changedTouches[i].identifier]) {
|
855
1009
|
changedTargetTouches.push(changedTouches[i]);
|
856
1010
|
}
|
857
1011
|
|
858
1012
|
// cleanup removed touches
|
859
|
-
if (
|
1013
|
+
if (type & (INPUT_END | INPUT_CANCEL)) {
|
860
1014
|
delete targetIds[changedTouches[i].identifier];
|
861
1015
|
}
|
1016
|
+
i++;
|
1017
|
+
}
|
1018
|
+
|
1019
|
+
if (!changedTargetTouches.length) {
|
1020
|
+
return;
|
862
1021
|
}
|
863
1022
|
|
864
1023
|
return [
|
865
1024
|
// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'
|
866
|
-
|
867
|
-
uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier'),
|
868
|
-
|
869
|
-
// only the changed :-)
|
1025
|
+
uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),
|
870
1026
|
changedTargetTouches
|
871
1027
|
];
|
872
1028
|
}
|
@@ -895,7 +1051,7 @@ inherit(TouchMouseInput, Input, {
|
|
895
1051
|
* @param {String} inputEvent
|
896
1052
|
* @param {Object} inputData
|
897
1053
|
*/
|
898
|
-
handler: function(manager, inputEvent, inputData) {
|
1054
|
+
handler: function TMEhandler(manager, inputEvent, inputData) {
|
899
1055
|
var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),
|
900
1056
|
isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);
|
901
1057
|
|
@@ -918,7 +1074,7 @@ inherit(TouchMouseInput, Input, {
|
|
918
1074
|
/**
|
919
1075
|
* remove the event listeners
|
920
1076
|
*/
|
921
|
-
destroy: function() {
|
1077
|
+
destroy: function destroy() {
|
922
1078
|
this.touch.destroy();
|
923
1079
|
this.mouse.destroy();
|
924
1080
|
}
|
@@ -930,7 +1086,7 @@ var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;
|
|
930
1086
|
// magical touchAction value
|
931
1087
|
var TOUCH_ACTION_COMPUTE = 'compute';
|
932
1088
|
var TOUCH_ACTION_AUTO = 'auto';
|
933
|
-
var TOUCH_ACTION_MANIPULATION = 'manipulation';
|
1089
|
+
var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented
|
934
1090
|
var TOUCH_ACTION_NONE = 'none';
|
935
1091
|
var TOUCH_ACTION_PAN_X = 'pan-x';
|
936
1092
|
var TOUCH_ACTION_PAN_Y = 'pan-y';
|
@@ -1009,7 +1165,7 @@ TouchAction.prototype = {
|
|
1009
1165
|
var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);
|
1010
1166
|
var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);
|
1011
1167
|
|
1012
|
-
if (hasNone ||
|
1168
|
+
if (hasNone ||
|
1013
1169
|
(hasPanY && direction & DIRECTION_HORIZONTAL) ||
|
1014
1170
|
(hasPanX && direction & DIRECTION_VERTICAL)) {
|
1015
1171
|
return this.preventSrc(srcEvent);
|
@@ -1228,8 +1384,24 @@ Recognizer.prototype = {
|
|
1228
1384
|
* @param {Object} input
|
1229
1385
|
*/
|
1230
1386
|
emit: function(input) {
|
1231
|
-
|
1232
|
-
|
1387
|
+
var self = this;
|
1388
|
+
var state = this.state;
|
1389
|
+
|
1390
|
+
function emit(withState) {
|
1391
|
+
self.manager.emit(self.options.event + (withState ? stateStr(state) : ''), input);
|
1392
|
+
}
|
1393
|
+
|
1394
|
+
// 'panstart' and 'panmove'
|
1395
|
+
if (state < STATE_ENDED) {
|
1396
|
+
emit(true);
|
1397
|
+
}
|
1398
|
+
|
1399
|
+
emit(); // simple 'eventName' events
|
1400
|
+
|
1401
|
+
// panend and pancancel
|
1402
|
+
if (state >= STATE_ENDED) {
|
1403
|
+
emit(true);
|
1404
|
+
}
|
1233
1405
|
},
|
1234
1406
|
|
1235
1407
|
/**
|
@@ -1251,10 +1423,12 @@ Recognizer.prototype = {
|
|
1251
1423
|
* @returns {boolean}
|
1252
1424
|
*/
|
1253
1425
|
canEmit: function() {
|
1254
|
-
|
1426
|
+
var i = 0;
|
1427
|
+
while (i < this.requireFail.length) {
|
1255
1428
|
if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {
|
1256
1429
|
return false;
|
1257
1430
|
}
|
1431
|
+
i++;
|
1258
1432
|
}
|
1259
1433
|
return true;
|
1260
1434
|
},
|
@@ -1451,11 +1625,6 @@ inherit(PanRecognizer, AttrRecognizer, {
|
|
1451
1625
|
|
1452
1626
|
getTouchAction: function() {
|
1453
1627
|
var direction = this.options.direction;
|
1454
|
-
|
1455
|
-
if (direction === DIRECTION_ALL) {
|
1456
|
-
return [TOUCH_ACTION_NONE];
|
1457
|
-
}
|
1458
|
-
|
1459
1628
|
var actions = [];
|
1460
1629
|
if (direction & DIRECTION_HORIZONTAL) {
|
1461
1630
|
actions.push(TOUCH_ACTION_PAN_Y);
|
@@ -1499,12 +1668,12 @@ inherit(PanRecognizer, AttrRecognizer, {
|
|
1499
1668
|
this.pX = input.deltaX;
|
1500
1669
|
this.pY = input.deltaY;
|
1501
1670
|
|
1502
|
-
this._super.emit.call(this, input);
|
1503
|
-
|
1504
1671
|
var direction = directionStr(input.direction);
|
1505
1672
|
if (direction) {
|
1506
1673
|
this.manager.emit(this.options.event + direction, input);
|
1507
1674
|
}
|
1675
|
+
|
1676
|
+
this._super.emit.call(this, input);
|
1508
1677
|
}
|
1509
1678
|
});
|
1510
1679
|
|
@@ -1578,7 +1747,6 @@ inherit(PressRecognizer, Recognizer, {
|
|
1578
1747
|
|
1579
1748
|
process: function(input) {
|
1580
1749
|
var options = this.options;
|
1581
|
-
|
1582
1750
|
var validPointers = input.pointers.length === options.pointers;
|
1583
1751
|
var validMovement = input.distance < options.threshold;
|
1584
1752
|
var validTime = input.deltaTime > options.time;
|
@@ -1591,7 +1759,7 @@ inherit(PressRecognizer, Recognizer, {
|
|
1591
1759
|
this.reset();
|
1592
1760
|
} else if (input.eventType & INPUT_START) {
|
1593
1761
|
this.reset();
|
1594
|
-
this._timer =
|
1762
|
+
this._timer = setTimeoutContext(function() {
|
1595
1763
|
this.state = STATE_RECOGNIZED;
|
1596
1764
|
this.tryEmit();
|
1597
1765
|
}, options.time, this);
|
@@ -1691,16 +1859,17 @@ inherit(SwipeRecognizer, AttrRecognizer, {
|
|
1691
1859
|
|
1692
1860
|
return this._super.attrTest.call(this, input) &&
|
1693
1861
|
direction & input.direction &&
|
1862
|
+
input.distance > this.options.threshold &&
|
1694
1863
|
abs(velocity) > this.options.velocity && input.eventType & INPUT_END;
|
1695
1864
|
},
|
1696
1865
|
|
1697
1866
|
emit: function(input) {
|
1698
|
-
this.manager.emit(this.options.event, input);
|
1699
|
-
|
1700
1867
|
var direction = directionStr(input.direction);
|
1701
1868
|
if (direction) {
|
1702
1869
|
this.manager.emit(this.options.event + direction, input);
|
1703
1870
|
}
|
1871
|
+
|
1872
|
+
this.manager.emit(this.options.event, input);
|
1704
1873
|
}
|
1705
1874
|
});
|
1706
1875
|
|
@@ -1756,14 +1925,14 @@ inherit(TapRecognizer, Recognizer, {
|
|
1756
1925
|
this.reset();
|
1757
1926
|
|
1758
1927
|
if ((input.eventType & INPUT_START) && (this.count === 0)) {
|
1759
|
-
return this.
|
1928
|
+
return this.failTimeout();
|
1760
1929
|
}
|
1761
1930
|
|
1762
1931
|
// we only allow little movement
|
1763
1932
|
// and we've reached an end event, so a tap is possible
|
1764
1933
|
if (validMovement && validTouchTime && validPointers) {
|
1765
1934
|
if (input.eventType != INPUT_END) {
|
1766
|
-
return this.
|
1935
|
+
return this.failTimeout();
|
1767
1936
|
}
|
1768
1937
|
|
1769
1938
|
var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;
|
@@ -1789,7 +1958,7 @@ inherit(TapRecognizer, Recognizer, {
|
|
1789
1958
|
if (!this.hasRequireFailures()) {
|
1790
1959
|
return STATE_RECOGNIZED;
|
1791
1960
|
} else {
|
1792
|
-
this._timer =
|
1961
|
+
this._timer = setTimeoutContext(function() {
|
1793
1962
|
this.state = STATE_RECOGNIZED;
|
1794
1963
|
this.tryEmit();
|
1795
1964
|
}, options.interval, this);
|
@@ -1800,8 +1969,8 @@ inherit(TapRecognizer, Recognizer, {
|
|
1800
1969
|
return STATE_FAILED;
|
1801
1970
|
},
|
1802
1971
|
|
1803
|
-
|
1804
|
-
this._timer =
|
1972
|
+
failTimeout: function() {
|
1973
|
+
this._timer = setTimeoutContext(function() {
|
1805
1974
|
this.state = STATE_FAILED;
|
1806
1975
|
}, this.options.interval, this);
|
1807
1976
|
return STATE_FAILED;
|
@@ -1834,7 +2003,7 @@ function Hammer(element, options) {
|
|
1834
2003
|
/**
|
1835
2004
|
* @const {string}
|
1836
2005
|
*/
|
1837
|
-
Hammer.VERSION = '2.0.
|
2006
|
+
Hammer.VERSION = '2.0.4';
|
1838
2007
|
|
1839
2008
|
/**
|
1840
2009
|
* default settings
|
@@ -1863,6 +2032,22 @@ Hammer.defaults = {
|
|
1863
2032
|
*/
|
1864
2033
|
enable: true,
|
1865
2034
|
|
2035
|
+
/**
|
2036
|
+
* EXPERIMENTAL FEATURE -- can be removed/changed
|
2037
|
+
* Change the parent input target element.
|
2038
|
+
* If Null, then it is being set the to main element.
|
2039
|
+
* @type {Null|EventTarget}
|
2040
|
+
* @default null
|
2041
|
+
*/
|
2042
|
+
inputTarget: null,
|
2043
|
+
|
2044
|
+
/**
|
2045
|
+
* force an input class
|
2046
|
+
* @type {Null|Function}
|
2047
|
+
* @default null
|
2048
|
+
*/
|
2049
|
+
inputClass: null,
|
2050
|
+
|
1866
2051
|
/**
|
1867
2052
|
* Default recognizer setup when calling `Hammer()`
|
1868
2053
|
* When creating a new Manager these will be skipped.
|
@@ -1886,8 +2071,7 @@ Hammer.defaults = {
|
|
1886
2071
|
*/
|
1887
2072
|
cssProps: {
|
1888
2073
|
/**
|
1889
|
-
* Disables text selection to improve the dragging gesture.
|
1890
|
-
* `onselectstart=false` for IE9 on the element. Mainly for desktop browsers.
|
2074
|
+
* Disables text selection to improve the dragging gesture. Mainly for desktop browsers.
|
1891
2075
|
* @type {String}
|
1892
2076
|
* @default 'none'
|
1893
2077
|
*/
|
@@ -1946,6 +2130,7 @@ function Manager(element, options) {
|
|
1946
2130
|
options = options || {};
|
1947
2131
|
|
1948
2132
|
this.options = merge(options, Hammer.defaults);
|
2133
|
+
this.options.inputTarget = this.options.inputTarget || element;
|
1949
2134
|
|
1950
2135
|
this.handlers = {};
|
1951
2136
|
this.session = {};
|
@@ -1960,7 +2145,7 @@ function Manager(element, options) {
|
|
1960
2145
|
each(options.recognizers, function(item) {
|
1961
2146
|
var recognizer = this.add(new (item[0])(item[1]));
|
1962
2147
|
item[2] && recognizer.recognizeWith(item[2]);
|
1963
|
-
item[3] && recognizer.requireFailure(item[
|
2148
|
+
item[3] && recognizer.requireFailure(item[3]);
|
1964
2149
|
}, this);
|
1965
2150
|
}
|
1966
2151
|
|
@@ -1972,6 +2157,17 @@ Manager.prototype = {
|
|
1972
2157
|
*/
|
1973
2158
|
set: function(options) {
|
1974
2159
|
extend(this.options, options);
|
2160
|
+
|
2161
|
+
// Options that need a little more setup
|
2162
|
+
if (options.touchAction) {
|
2163
|
+
this.touchAction.update();
|
2164
|
+
}
|
2165
|
+
if (options.inputTarget) {
|
2166
|
+
// Clean up existing event listeners and reinitialize
|
2167
|
+
this.input.destroy();
|
2168
|
+
this.input.target = options.inputTarget;
|
2169
|
+
this.input.init();
|
2170
|
+
}
|
1975
2171
|
return this;
|
1976
2172
|
},
|
1977
2173
|
|
@@ -1992,7 +2188,8 @@ Manager.prototype = {
|
|
1992
2188
|
* @param {Object} inputData
|
1993
2189
|
*/
|
1994
2190
|
recognize: function(inputData) {
|
1995
|
-
|
2191
|
+
var session = this.session;
|
2192
|
+
if (session.stopped) {
|
1996
2193
|
return;
|
1997
2194
|
}
|
1998
2195
|
|
@@ -2000,7 +2197,7 @@ Manager.prototype = {
|
|
2000
2197
|
this.touchAction.preventDefaults(inputData);
|
2001
2198
|
|
2002
2199
|
var recognizer;
|
2003
|
-
var
|
2200
|
+
var recognizers = this.recognizers;
|
2004
2201
|
|
2005
2202
|
// this holds the recognizer that is being recognized.
|
2006
2203
|
// so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED
|
@@ -2013,8 +2210,9 @@ Manager.prototype = {
|
|
2013
2210
|
curRecognizer = session.curRecognizer = null;
|
2014
2211
|
}
|
2015
2212
|
|
2016
|
-
|
2017
|
-
|
2213
|
+
var i = 0;
|
2214
|
+
while (i < recognizers.length) {
|
2215
|
+
recognizer = recognizers[i];
|
2018
2216
|
|
2019
2217
|
// find out if we are allowed try to recognize the input for this one.
|
2020
2218
|
// 1. allow if the session is NOT forced stopped (see the .stop() method)
|
@@ -2022,7 +2220,7 @@ Manager.prototype = {
|
|
2022
2220
|
// that is being recognized.
|
2023
2221
|
// 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.
|
2024
2222
|
// this can be setup with the `recognizeWith()` method on the recognizer.
|
2025
|
-
if (
|
2223
|
+
if (session.stopped !== FORCED_STOP && ( // 1
|
2026
2224
|
!curRecognizer || recognizer == curRecognizer || // 2
|
2027
2225
|
recognizer.canRecognizeWith(curRecognizer))) { // 3
|
2028
2226
|
recognizer.recognize(inputData);
|
@@ -2035,6 +2233,7 @@ Manager.prototype = {
|
|
2035
2233
|
if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {
|
2036
2234
|
curRecognizer = session.curRecognizer = recognizer;
|
2037
2235
|
}
|
2236
|
+
i++;
|
2038
2237
|
}
|
2039
2238
|
},
|
2040
2239
|
|
@@ -2144,7 +2343,7 @@ Manager.prototype = {
|
|
2144
2343
|
}
|
2145
2344
|
|
2146
2345
|
// no handlers, so skip it all
|
2147
|
-
var handlers = this.handlers[event];
|
2346
|
+
var handlers = this.handlers[event] && this.handlers[event].slice();
|
2148
2347
|
if (!handlers || !handlers.length) {
|
2149
2348
|
return;
|
2150
2349
|
}
|
@@ -2154,8 +2353,10 @@ Manager.prototype = {
|
|
2154
2353
|
data.srcEvent.preventDefault();
|
2155
2354
|
};
|
2156
2355
|
|
2157
|
-
|
2356
|
+
var i = 0;
|
2357
|
+
while (i < handlers.length) {
|
2158
2358
|
handlers[i](data);
|
2359
|
+
i++;
|
2159
2360
|
}
|
2160
2361
|
},
|
2161
2362
|
|
@@ -2180,15 +2381,9 @@ Manager.prototype = {
|
|
2180
2381
|
*/
|
2181
2382
|
function toggleCssProps(manager, add) {
|
2182
2383
|
var element = manager.element;
|
2183
|
-
|
2184
|
-
|
2185
|
-
each(cssProps, function(value, name) {
|
2384
|
+
each(manager.options.cssProps, function(value, name) {
|
2186
2385
|
element.style[prefixed(element.style, name)] = add ? value : '';
|
2187
2386
|
});
|
2188
|
-
|
2189
|
-
var falseFn = add && function() { return false; };
|
2190
|
-
if (cssProps.userSelect == 'none') { element.onselectstart = falseFn; }
|
2191
|
-
if (cssProps.userDrag == 'none') { element.ondragstart = falseFn; }
|
2192
2387
|
}
|
2193
2388
|
|
2194
2389
|
/**
|
@@ -2230,6 +2425,12 @@ extend(Hammer, {
|
|
2230
2425
|
Input: Input,
|
2231
2426
|
TouchAction: TouchAction,
|
2232
2427
|
|
2428
|
+
TouchInput: TouchInput,
|
2429
|
+
MouseInput: MouseInput,
|
2430
|
+
PointerEventInput: PointerEventInput,
|
2431
|
+
TouchMouseInput: TouchMouseInput,
|
2432
|
+
SingleTouchInput: SingleTouchInput,
|
2433
|
+
|
2233
2434
|
Recognizer: Recognizer,
|
2234
2435
|
AttrRecognizer: AttrRecognizer,
|
2235
2436
|
Tap: TapRecognizer,
|
@@ -2253,10 +2454,10 @@ if (typeof define == TYPE_FUNCTION && define.amd) {
|
|
2253
2454
|
define(function() {
|
2254
2455
|
return Hammer;
|
2255
2456
|
});
|
2256
|
-
} else if (typeof module !=
|
2457
|
+
} else if (typeof module != 'undefined' && module.exports) {
|
2257
2458
|
module.exports = Hammer;
|
2258
2459
|
} else {
|
2259
|
-
window
|
2460
|
+
window[exportName] = Hammer;
|
2260
2461
|
}
|
2261
2462
|
|
2262
|
-
})(window);
|
2463
|
+
})(window, document, 'Hammer');
|
@@ -1,9 +1,7 @@
|
|
1
|
-
/*! Hammer.JS - v2.0.
|
1
|
+
/*! Hammer.JS - v2.0.4 - 2014-09-28
|
2
2
|
* http://hammerjs.github.io/
|
3
3
|
*
|
4
|
-
* Copyright (c) 2014 Jorik Tangelder
|
4
|
+
* Copyright (c) 2014 Jorik Tangelder;
|
5
5
|
* Licensed under the MIT license */
|
6
|
-
|
7
|
-
|
8
|
-
!function(a,b){"use strict";function c(a,b,c){return setTimeout(i(a,c),b)}function d(a,b,c){return Array.isArray(a)?(e(a,c[b],c),!0):!1}function e(a,c,d){var e,f;if(a)if(a.forEach)a.forEach(c,d);else if(a.length!==b)for(e=0,f=a.length;f>e;e++)c.call(d,a[e],e,a);else for(e in a)a.hasOwnProperty(e)&&c.call(d,a[e],e,a)}function f(a,c,d){for(var e=Object.keys(c),f=0,g=e.length;g>f;f++)(!d||d&&a[e[f]]===b)&&(a[e[f]]=c[e[f]]);return a}function g(a,b){return f(a,b,!0)}function h(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&f(d,c)}function i(a,b){return function(){return a.apply(b,arguments)}}function j(a,c){return typeof a==eb?a.apply(c?c[0]||b:b,c):a}function k(a,c){return a===b?c:a}function l(a,b,c){e(p(b),function(b){a.addEventListener(b,c,!1)})}function m(a,b,c){e(p(b),function(b){a.removeEventListener(b,c,!1)})}function n(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function o(a,b){return a.indexOf(b)>-1}function p(a){return a.trim().split(/\s+/g)}function q(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0,e=a.length;e>d;d++)if(c&&a[d][c]==b||!c&&a[d]===b)return d;return-1}function r(a){return Array.prototype.slice.call(a,0)}function s(a,b){for(var c=[],d=[],e=0,f=a.length;f>e;e++){var g=b?a[e][b]:a[e];q(d,g)<0&&c.push(a[e]),d[e]=g}return c}function t(a,c){for(var d,e,f=c[0].toUpperCase()+c.slice(1),g=0,h=cb.length;h>g;g++)if(d=cb[g],e=d?d+f:c,e in a)return e;return b}function u(){return jb++}function v(b,c){var d=this;this.manager=b,this.callback=c,this.domHandler=function(a){j(d.manager.options.enable,[d.manager])&&d.handler(a)},this.evEl&&l(this.manager.element,this.evEl,this.domHandler),this.evWin&&l(a,this.evWin,this.domHandler)}function w(a){var b;return new(b=mb?J:nb?K:lb?M:I)(a,x)}function x(a,b,c){var d=c.pointers.length,e=c.changedPointers.length,f=b&tb&&d-e===0,g=b&(vb|wb)&&d-e===0;c.isFirst=f,c.isFinal=g,f&&(a.session={}),c.eventType=b,y(a,c),a.emit("hammer.input",c),a.recognize(c)}function y(a,b){var c=a.session,d=b.pointers,e=d.length;c.firstInput||(c.firstInput=A(b)),e>1&&!c.firstMultiple?c.firstMultiple=A(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=B(d);b.timeStamp=ib(),b.deltaTime=b.timeStamp-f.timeStamp,b.deltaX=i.x-h.x,b.deltaY=i.y-h.y,b.center=i,b.angle=F(h,i),b.distance=E(h,i),b.offsetDirection=D(b.deltaX,b.deltaY),b.scale=g?H(g.pointers,d):1,b.rotation=g?G(g.pointers,d):0;var j=a.element;n(b.srcEvent.target,j)&&(j=b.srcEvent.target),b.target=j,z(c,b)}function z(a,c){var d=a.lastInterval;d||(d=a.lastInterval=A(c));var e,f,g,h,i=c.timeStamp-d.timeStamp;if(i>sb||d.velocity===b){var j=d.deltaX-c.deltaX,k=d.deltaY-c.deltaY,l=C(i,j,k);f=l.x,g=l.y,e=hb(l.x)>hb(l.y)?l.x:l.y,h=D(j,k)}else e=d.velocity,f=d.velocityX,g=d.velocityY,h=d.direction;c.velocity=e,c.velocityX=f,c.velocityY=g,c.direction=h}function A(a){for(var b=[],c=0;c<a.pointers.length;c++)b[c]={clientX:gb(a.pointers[c].clientX),clientY:gb(a.pointers[c].clientY)};return{timeStamp:ib(),pointers:b,center:B(b),deltaX:a.deltaX,deltaY:a.deltaY}}function B(a){var b=a.length;if(1===b)return{x:gb(a[0].clientX),y:gb(a[0].clientY)};for(var c=0,d=0,e=0;b>e;e++)c+=a[e].clientX,d+=a[e].clientY;return{x:gb(c/b),y:gb(d/b)}}function C(a,b,c){return{x:b/a||0,y:c/a||0}}function D(a,b){return a===b?xb:hb(a)>=hb(b)?a>0?yb:zb:b>0?Ab:Bb}function E(a,b,c){c||(c=Fb);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function F(a,b,c){c||(c=Fb);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function G(a,b){return F(b[1],b[0],Gb)-F(a[1],a[0],Gb)}function H(a,b){return E(b[0],b[1],Gb)/E(a[0],a[1],Gb)}function I(){this.evEl=Ib,this.evWin=Jb,this.allow=!0,this.pressed=!1,v.apply(this,arguments)}function J(){this.evEl=Mb,this.evWin=Nb,v.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function K(){this.evEl=Pb,this.targetIds={},v.apply(this,arguments)}function L(a,b){var c,d,e=b.targetIds,f=r(a.targetTouches),g=r(a.changedTouches),h=[];if("touchstart"==a.type)for(c=0,d=f.length;d>c;c++)e[f[c].identifier]=!0;for(c=0,d=g.length;d>c;c++)e[g[c].identifier]&&h.push(g[c]),("touchend"==a.type||"touchcancel"==a.type)&&delete e[g[c].identifier];return[s(f.concat(h),"identifier"),h]}function M(){v.apply(this,arguments);var a=i(this.handler,this);this.touch=new K(this.manager,a),this.mouse=new I(this.manager,a)}function N(a,b){this.manager=a,this.set(b)}function O(a){if(o(a,Vb))return Vb;var b=o(a,Wb),c=o(a,Xb);return b&&c?Wb+" "+Xb:b||c?b?Wb:Xb:o(a,Ub)?Ub:Tb}function P(a){this.id=u(),this.manager=null,this.options=g(a||{},this.defaults),this.options.enable=k(this.options.enable,!0),this.state=Yb,this.simultaneous={},this.requireFail=[]}function Q(a){return a&bc?"cancel":a&_b?"end":a&$b?"move":a&Zb?"start":""}function R(a){return a==Bb?"down":a==Ab?"up":a==yb?"left":a==zb?"right":""}function S(a,b){var c=b.manager;return c?c.get(a):a}function T(){P.apply(this,arguments)}function U(){T.apply(this,arguments),this.pX=null,this.pY=null}function V(){T.apply(this,arguments)}function W(){P.apply(this,arguments),this._timer=null,this._input=null}function X(){T.apply(this,arguments)}function Y(){T.apply(this,arguments)}function Z(){P.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function $(a,b){return b=b||{},b.recognizers=k(b.recognizers,$.defaults.preset),new _(a,b)}function _(a,b){b=b||{},this.options=g(b,$.defaults),this.handlers={},this.session={},this.recognizers=[],this.element=a,this.input=w(this),this.touchAction=new N(this,this.options.touchAction),ab(this,!0),e(b.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[2])},this)}function ab(a,b){var c=a.element,d=a.options.cssProps;e(d,function(a,d){c.style[t(c.style,d)]=b?a:""});var f=b&&function(){return!1};"none"==d.userSelect&&(c.onselectstart=f),"none"==d.userDrag&&(c.ondragstart=f)}function bb(a,b){var c=document.createEvent("Event");c.initEvent(a,!0,!0),c.gesture=b,b.target.dispatchEvent(c)}var cb=["","webkit","moz","MS","ms","o"],db=document.createElement("div"),eb="function",fb="undefined",gb=Math.round,hb=Math.abs,ib=Date.now,jb=1,kb=/mobile|tablet|ip(ad|hone|od)|android/i,lb="ontouchstart"in a,mb=t(a,"PointerEvent")!==b,nb=lb&&kb.test(navigator.userAgent),ob="touch",pb="pen",qb="mouse",rb="kinect",sb=25,tb=1,ub=2,vb=4,wb=8,xb=1,yb=2,zb=4,Ab=8,Bb=16,Cb=yb|zb,Db=Ab|Bb,Eb=Cb|Db,Fb=["x","y"],Gb=["clientX","clientY"];v.prototype={handler:function(){},destroy:function(){this.elEvents&&m(this.manager.element,this.elEvents,this.domHandler),this.winEvents&&m(a,this.winEvents,this.domHandler)}};var Hb={mousedown:tb,mousemove:ub,mouseup:vb,mouseout:wb},Ib="mousedown",Jb="mousemove mouseout mouseup";h(I,v,{handler:function(a){var b=Hb[a.type];if(b&tb&&0===a.button&&(this.pressed=!0),b&ub&&1!==a.which&&(b=vb),this.pressed&&this.allow){var c=a.relatedTarget||a.toElement||a.target;"mouseout"==a.type&&"HTML"!=c.nodeName&&(b=ub),b&(vb|wb)&&(this.pressed=!1),this.callback(this.manager,b,{pointers:[a],changedPointers:[a],pointerType:qb,srcEvent:a})}}});var Kb={pointerdown:tb,pointermove:ub,pointerup:vb,pointercancel:wb,pointerout:wb},Lb={2:ob,3:pb,4:qb,5:rb},Mb="pointerdown",Nb="pointermove pointerout pointerup pointercancel";a.MSPointerEvent&&(Mb="MSPointerDown",Nb="MSPointerMove MSPointerOut MSPointerUp MSPointerCancel"),h(J,v,{handler:function(a){var b=this.store,c=!1,d=a.type.toLowerCase().replace("ms",""),e=Kb[d],f=Lb[a.pointerType]||a.pointerType,g=a.relatedTarget||a.toElement||a.target;"pointerout"==d&&"HTML"!=g.nodeName&&(e=ub),e&tb&&(0===a.button||f==ob)?b.push(a):e&(vb|wb)&&(c=!0);var h=q(b,a.pointerId,"pointerId");0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Ob={touchstart:tb,touchmove:ub,touchend:vb,touchcancel:wb},Pb="touchstart touchmove touchend touchcancel";h(K,v,{handler:function(a){var b=L(a,this);this.callback(this.manager,Ob[a.type],{pointers:b[0],changedPointers:b[1],pointerType:ob,srcEvent:a})}}),h(M,v,{handler:function(a,b,c){var d=c.pointerType==ob,e=c.pointerType==qb;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(vb|wb)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Qb=t(db.style,"touchAction"),Rb=Qb!==b,Sb="compute",Tb="auto",Ub="manipulation",Vb="none",Wb="pan-x",Xb="pan-y";N.prototype={set:function(a){a==Sb&&(a=this.compute()),Rb&&(this.manager.element.style[Qb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return e(this.manager.recognizers,function(b){j(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),O(a.join(" "))},preventDefaults:function(a){if(!Rb){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=o(d,Vb),f=o(d,Xb),g=o(d,Wb);return e||f&&g||f&&c&Cb||g&&c&Db?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var Yb=1,Zb=2,$b=4,_b=8,ac=_b,bc=16,cc=32;P.prototype={defaults:{},set:function(a){return f(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(d(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=S(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return d(a,"dropRecognizeWith",this)?this:(a=S(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(d(a,"requireFailure",this))return this;var b=this.requireFail;return a=S(a,this),-1===q(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(d(a,"dropRequireFailure",this))return this;a=S(a,this);var b=q(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){this.manager.emit(this.options.event,a),this.manager.emit(this.options.event+Q(this.state),a)},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=cc)},canEmit:function(){for(var a=0;a<this.requireFail.length;a++)if(!(this.requireFail[a].state&(cc|Yb)))return!1;return!0},recognize:function(a){var b=f({},a);return j(this.options.enable,[this,b])?(this.state&(ac|bc|cc)&&(this.state=Yb),this.state=this.process(b),void(this.state&(Zb|$b|_b|bc)&&this.tryEmit(b))):(this.reset(),void(this.state=cc))},process:function(){},getTouchAction:function(){},reset:function(){}},h(T,P,{defaults:{pointers:1},attrTest:function(a){var b=this.options.pointers;return 0===b||a.pointers.length===b},process:function(a){var b=this.state,c=a.eventType,d=b&(Zb|$b),e=this.attrTest(a);return d&&(c&wb||!e)?b|bc:d||e?c&vb?b|_b:b&Zb?b|$b:Zb:cc}}),h(U,T,{defaults:{event:"pan",threshold:10,pointers:1,direction:Eb},getTouchAction:function(){var a=this.options.direction;if(a===Eb)return[Vb];var b=[];return a&Cb&&b.push(Xb),a&Db&&b.push(Wb),b},directionTest:function(a){var b=this.options,c=!0,d=a.distance,e=a.direction,f=a.deltaX,g=a.deltaY;return e&b.direction||(b.direction&Cb?(e=0===f?xb:0>f?yb:zb,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?xb:0>g?Ab:Bb,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return T.prototype.attrTest.call(this,a)&&(this.state&Zb||!(this.state&Zb)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY,this._super.emit.call(this,a);var b=R(a.direction);b&&this.manager.emit(this.options.event+b,a)}}),h(V,T,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[Vb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&Zb)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),h(W,P,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[Tb]},process:function(a){var b=this.options,d=a.pointers.length===b.pointers,e=a.distance<b.threshold,f=a.deltaTime>b.time;if(this._input=a,!e||!d||a.eventType&(vb|wb)&&!f)this.reset();else if(a.eventType&tb)this.reset(),this._timer=c(function(){this.state=ac,this.tryEmit()},b.time,this);else if(a.eventType&vb)return ac;return cc},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===ac&&(a&&a.eventType&vb?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=ib(),this.manager.emit(this.options.event,this._input)))}}),h(X,T,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[Vb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&Zb)}}),h(Y,T,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Cb|Db,pointers:1},getTouchAction:function(){return U.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Cb|Db)?b=a.velocity:c&Cb?b=a.velocityX:c&Db&&(b=a.velocityY),this._super.attrTest.call(this,a)&&c&a.direction&&hb(b)>this.options.velocity&&a.eventType&vb},emit:function(a){this.manager.emit(this.options.event,a);var b=R(a.direction);b&&this.manager.emit(this.options.event+b,a)}}),h(Z,P,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[Ub]},process:function(a){var b=this.options,d=a.pointers.length===b.pointers,e=a.distance<b.threshold,f=a.deltaTime<b.time;if(this.reset(),a.eventType&tb&&0===this.count)return this._failTimeout();if(e&&f&&d){if(a.eventType!=vb)return this._failTimeout();var g=this.pTime?a.timeStamp-this.pTime<b.interval:!0,h=!this.pCenter||E(this.pCenter,a.center)<b.posThreshold;this.pTime=a.timeStamp,this.pCenter=a.center,h&&g?this.count+=1:this.count=1,this._input=a;var i=this.count%b.taps;if(0===i)return this.hasRequireFailures()?(this._timer=c(function(){this.state=ac,this.tryEmit()},b.interval,this),Zb):ac}return cc},_failTimeout:function(){return this._timer=c(function(){this.state=cc},this.options.interval,this),cc},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==ac&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),$.VERSION="2.0.1",$.defaults={domEvents:!1,touchAction:Sb,enable:!0,preset:[[X,{enable:!1}],[V,{enable:!1},["rotate"]],[Y,{direction:Cb}],[U,{direction:Cb},["swipe"]],[Z],[Z,{event:"doubletap",taps:2},["tap"]],[W]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};var dc=1,ec=2;_.prototype={set:function(a){return f(this.options,a),this},stop:function(a){this.session.stopped=a?ec:dc},recognize:function(a){if(!this.session.stopped){this.touchAction.preventDefaults(a);var b,c=this.session,d=c.curRecognizer;(!d||d&&d.state&ac)&&(d=c.curRecognizer=null);for(var e=0,f=this.recognizers.length;f>e;e++)b=this.recognizers[e],this.session.stopped===ec||d&&b!=d&&!b.canRecognizeWith(d)?b.reset():b.recognize(a),!d&&b.state&(Zb|$b|_b)&&(d=c.curRecognizer=b)}},get:function(a){if(a instanceof P)return a;for(var b=this.recognizers,c=0;c<b.length;c++)if(b[c].options.event==a)return b[c];return null},add:function(a){if(d(a,"add",this))return this;var b=this.get(a.options.event);return b&&this.remove(b),this.recognizers.push(a),a.manager=this,this.touchAction.update(),a},remove:function(a){if(d(a,"remove",this))return this;var b=this.recognizers;return a=this.get(a),b.splice(q(b,a),1),this.touchAction.update(),this},on:function(a,b){var c=this.handlers;return e(p(a),function(a){c[a]=c[a]||[],c[a].push(b)}),this},off:function(a,b){var c=this.handlers;return e(p(a),function(a){b?c[a].splice(q(c[a],b),1):delete c[a]}),this},emit:function(a,b){this.options.domEvents&&bb(a,b);var c=this.handlers[a];if(c&&c.length){b.type=a,b.preventDefault=function(){b.srcEvent.preventDefault()};for(var d=0,e=c.length;e>d;d++)c[d](b)}},destroy:function(){this.element&&ab(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},f($,{INPUT_START:tb,INPUT_MOVE:ub,INPUT_END:vb,INPUT_CANCEL:wb,STATE_POSSIBLE:Yb,STATE_BEGAN:Zb,STATE_CHANGED:$b,STATE_ENDED:_b,STATE_RECOGNIZED:ac,STATE_CANCELLED:bc,STATE_FAILED:cc,DIRECTION_NONE:xb,DIRECTION_LEFT:yb,DIRECTION_RIGHT:zb,DIRECTION_UP:Ab,DIRECTION_DOWN:Bb,DIRECTION_HORIZONTAL:Cb,DIRECTION_VERTICAL:Db,DIRECTION_ALL:Eb,Manager:_,Input:v,TouchAction:N,Recognizer:P,AttrRecognizer:T,Tap:Z,Pan:U,Swipe:Y,Pinch:V,Rotate:X,Press:W,on:l,off:m,each:e,merge:g,extend:f,inherit:h,bindFn:i,prefixed:t}),typeof define==eb&&define.amd?define(function(){return $}):typeof module!=fb&&module.exports?module.exports=$:a.Hammer=$}(window);
|
6
|
+
!function(a,b,c,d){"use strict";function e(a,b,c){return setTimeout(k(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e<a.length;)b.call(c,a[e],e,a),e++;else for(e in a)a.hasOwnProperty(e)&&b.call(c,a[e],e,a)}function h(a,b,c){for(var e=Object.keys(b),f=0;f<e.length;)(!c||c&&a[e[f]]===d)&&(a[e[f]]=b[e[f]]),f++;return a}function i(a,b){return h(a,b,!0)}function j(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&h(d,c)}function k(a,b){return function(){return a.apply(b,arguments)}}function l(a,b){return typeof a==kb?a.apply(b?b[0]||d:d,b):a}function m(a,b){return a===d?b:a}function n(a,b,c){g(r(b),function(b){a.addEventListener(b,c,!1)})}function o(a,b,c){g(r(b),function(b){a.removeEventListener(b,c,!1)})}function p(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function q(a,b){return a.indexOf(b)>-1}function r(a){return a.trim().split(/\s+/g)}function s(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;d<a.length;){if(c&&a[d][c]==b||!c&&a[d]===b)return d;d++}return-1}function t(a){return Array.prototype.slice.call(a,0)}function u(a,b,c){for(var d=[],e=[],f=0;f<a.length;){var g=b?a[f][b]:a[f];s(e,g)<0&&d.push(a[f]),e[f]=g,f++}return c&&(d=b?d.sort(function(a,c){return a[b]>c[b]}):d.sort()),d}function v(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g<ib.length;){if(c=ib[g],e=c?c+f:b,e in a)return e;g++}return d}function w(){return ob++}function x(a){var b=a.ownerDocument;return b.defaultView||b.parentWindow}function y(a,b){var c=this;this.manager=a,this.callback=b,this.element=a.element,this.target=a.options.inputTarget,this.domHandler=function(b){l(a.options.enable,[a])&&c.handler(b)},this.init()}function z(a){var b,c=a.options.inputClass;return new(b=c?c:rb?N:sb?Q:qb?S:M)(a,A)}function A(a,b,c){var d=c.pointers.length,e=c.changedPointers.length,f=b&yb&&d-e===0,g=b&(Ab|Bb)&&d-e===0;c.isFirst=!!f,c.isFinal=!!g,f&&(a.session={}),c.eventType=b,B(a,c),a.emit("hammer.input",c),a.recognize(c),a.session.prevInput=c}function B(a,b){var c=a.session,d=b.pointers,e=d.length;c.firstInput||(c.firstInput=E(b)),e>1&&!c.firstMultiple?c.firstMultiple=E(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=F(d);b.timeStamp=nb(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=J(h,i),b.distance=I(h,i),C(c,b),b.offsetDirection=H(b.deltaX,b.deltaY),b.scale=g?L(g.pointers,d):1,b.rotation=g?K(g.pointers,d):0,D(c,b);var j=a.element;p(b.srcEvent.target,j)&&(j=b.srcEvent.target),b.target=j}function C(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===yb||f.eventType===Ab)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function D(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Bb&&(i>xb||h.velocity===d)){var j=h.deltaX-b.deltaX,k=h.deltaY-b.deltaY,l=G(i,j,k);e=l.x,f=l.y,c=mb(l.x)>mb(l.y)?l.x:l.y,g=H(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function E(a){for(var b=[],c=0;c<a.pointers.length;)b[c]={clientX:lb(a.pointers[c].clientX),clientY:lb(a.pointers[c].clientY)},c++;return{timeStamp:nb(),pointers:b,center:F(b),deltaX:a.deltaX,deltaY:a.deltaY}}function F(a){var b=a.length;if(1===b)return{x:lb(a[0].clientX),y:lb(a[0].clientY)};for(var c=0,d=0,e=0;b>e;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:lb(c/b),y:lb(d/b)}}function G(a,b,c){return{x:b/a||0,y:c/a||0}}function H(a,b){return a===b?Cb:mb(a)>=mb(b)?a>0?Db:Eb:b>0?Fb:Gb}function I(a,b,c){c||(c=Kb);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function J(a,b,c){c||(c=Kb);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function K(a,b){return J(b[1],b[0],Lb)-J(a[1],a[0],Lb)}function L(a,b){return I(b[0],b[1],Lb)/I(a[0],a[1],Lb)}function M(){this.evEl=Nb,this.evWin=Ob,this.allow=!0,this.pressed=!1,y.apply(this,arguments)}function N(){this.evEl=Rb,this.evWin=Sb,y.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function O(){this.evTarget=Ub,this.evWin=Vb,this.started=!1,y.apply(this,arguments)}function P(a,b){var c=t(a.touches),d=t(a.changedTouches);return b&(Ab|Bb)&&(c=u(c.concat(d),"identifier",!0)),[c,d]}function Q(){this.evTarget=Xb,this.targetIds={},y.apply(this,arguments)}function R(a,b){var c=t(a.touches),d=this.targetIds;if(b&(yb|zb)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=t(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return p(a.target,i)}),b===yb)for(e=0;e<f.length;)d[f[e].identifier]=!0,e++;for(e=0;e<g.length;)d[g[e].identifier]&&h.push(g[e]),b&(Ab|Bb)&&delete d[g[e].identifier],e++;return h.length?[u(f.concat(h),"identifier",!0),h]:void 0}function S(){y.apply(this,arguments);var a=k(this.handler,this);this.touch=new Q(this.manager,a),this.mouse=new M(this.manager,a)}function T(a,b){this.manager=a,this.set(b)}function U(a){if(q(a,bc))return bc;var b=q(a,cc),c=q(a,dc);return b&&c?cc+" "+dc:b||c?b?cc:dc:q(a,ac)?ac:_b}function V(a){this.id=w(),this.manager=null,this.options=i(a||{},this.defaults),this.options.enable=m(this.options.enable,!0),this.state=ec,this.simultaneous={},this.requireFail=[]}function W(a){return a&jc?"cancel":a&hc?"end":a&gc?"move":a&fc?"start":""}function X(a){return a==Gb?"down":a==Fb?"up":a==Db?"left":a==Eb?"right":""}function Y(a,b){var c=b.manager;return c?c.get(a):a}function Z(){V.apply(this,arguments)}function $(){Z.apply(this,arguments),this.pX=null,this.pY=null}function _(){Z.apply(this,arguments)}function ab(){V.apply(this,arguments),this._timer=null,this._input=null}function bb(){Z.apply(this,arguments)}function cb(){Z.apply(this,arguments)}function db(){V.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function eb(a,b){return b=b||{},b.recognizers=m(b.recognizers,eb.defaults.preset),new fb(a,b)}function fb(a,b){b=b||{},this.options=i(b,eb.defaults),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.element=a,this.input=z(this),this.touchAction=new T(this,this.options.touchAction),gb(this,!0),g(b.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function gb(a,b){var c=a.element;g(a.options.cssProps,function(a,d){c.style[v(c.style,d)]=b?a:""})}function hb(a,c){var d=b.createEvent("Event");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var ib=["","webkit","moz","MS","ms","o"],jb=b.createElement("div"),kb="function",lb=Math.round,mb=Math.abs,nb=Date.now,ob=1,pb=/mobile|tablet|ip(ad|hone|od)|android/i,qb="ontouchstart"in a,rb=v(a,"PointerEvent")!==d,sb=qb&&pb.test(navigator.userAgent),tb="touch",ub="pen",vb="mouse",wb="kinect",xb=25,yb=1,zb=2,Ab=4,Bb=8,Cb=1,Db=2,Eb=4,Fb=8,Gb=16,Hb=Db|Eb,Ib=Fb|Gb,Jb=Hb|Ib,Kb=["x","y"],Lb=["clientX","clientY"];y.prototype={handler:function(){},init:function(){this.evEl&&n(this.element,this.evEl,this.domHandler),this.evTarget&&n(this.target,this.evTarget,this.domHandler),this.evWin&&n(x(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&o(this.element,this.evEl,this.domHandler),this.evTarget&&o(this.target,this.evTarget,this.domHandler),this.evWin&&o(x(this.element),this.evWin,this.domHandler)}};var Mb={mousedown:yb,mousemove:zb,mouseup:Ab},Nb="mousedown",Ob="mousemove mouseup";j(M,y,{handler:function(a){var b=Mb[a.type];b&yb&&0===a.button&&(this.pressed=!0),b&zb&&1!==a.which&&(b=Ab),this.pressed&&this.allow&&(b&Ab&&(this.pressed=!1),this.callback(this.manager,b,{pointers:[a],changedPointers:[a],pointerType:vb,srcEvent:a}))}});var Pb={pointerdown:yb,pointermove:zb,pointerup:Ab,pointercancel:Bb,pointerout:Bb},Qb={2:tb,3:ub,4:vb,5:wb},Rb="pointerdown",Sb="pointermove pointerup pointercancel";a.MSPointerEvent&&(Rb="MSPointerDown",Sb="MSPointerMove MSPointerUp MSPointerCancel"),j(N,y,{handler:function(a){var b=this.store,c=!1,d=a.type.toLowerCase().replace("ms",""),e=Pb[d],f=Qb[a.pointerType]||a.pointerType,g=f==tb,h=s(b,a.pointerId,"pointerId");e&yb&&(0===a.button||g)?0>h&&(b.push(a),h=b.length-1):e&(Ab|Bb)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Tb={touchstart:yb,touchmove:zb,touchend:Ab,touchcancel:Bb},Ub="touchstart",Vb="touchstart touchmove touchend touchcancel";j(O,y,{handler:function(a){var b=Tb[a.type];if(b===yb&&(this.started=!0),this.started){var c=P.call(this,a,b);b&(Ab|Bb)&&c[0].length-c[1].length===0&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:tb,srcEvent:a})}}});var Wb={touchstart:yb,touchmove:zb,touchend:Ab,touchcancel:Bb},Xb="touchstart touchmove touchend touchcancel";j(Q,y,{handler:function(a){var b=Wb[a.type],c=R.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:tb,srcEvent:a})}}),j(S,y,{handler:function(a,b,c){var d=c.pointerType==tb,e=c.pointerType==vb;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Ab|Bb)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Yb=v(jb.style,"touchAction"),Zb=Yb!==d,$b="compute",_b="auto",ac="manipulation",bc="none",cc="pan-x",dc="pan-y";T.prototype={set:function(a){a==$b&&(a=this.compute()),Zb&&(this.manager.element.style[Yb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){l(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),U(a.join(" "))},preventDefaults:function(a){if(!Zb){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=q(d,bc),f=q(d,dc),g=q(d,cc);return e||f&&c&Hb||g&&c&Ib?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var ec=1,fc=2,gc=4,hc=8,ic=hc,jc=16,kc=32;V.prototype={defaults:{},set:function(a){return h(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=Y(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,"dropRecognizeWith",this)?this:(a=Y(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))return this;var b=this.requireFail;return a=Y(a,this),-1===s(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))return this;a=Y(a,this);var b=s(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(c.options.event+(b?W(d):""),a)}var c=this,d=this.state;hc>d&&b(!0),b(),d>=hc&&b(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=kc)},canEmit:function(){for(var a=0;a<this.requireFail.length;){if(!(this.requireFail[a].state&(kc|ec)))return!1;a++}return!0},recognize:function(a){var b=h({},a);return l(this.options.enable,[this,b])?(this.state&(ic|jc|kc)&&(this.state=ec),this.state=this.process(b),void(this.state&(fc|gc|hc|jc)&&this.tryEmit(b))):(this.reset(),void(this.state=kc))},process:function(){},getTouchAction:function(){},reset:function(){}},j(Z,V,{defaults:{pointers:1},attrTest:function(a){var b=this.options.pointers;return 0===b||a.pointers.length===b},process:function(a){var b=this.state,c=a.eventType,d=b&(fc|gc),e=this.attrTest(a);return d&&(c&Bb||!e)?b|jc:d||e?c&Ab?b|hc:b&fc?b|gc:fc:kc}}),j($,Z,{defaults:{event:"pan",threshold:10,pointers:1,direction:Jb},getTouchAction:function(){var a=this.options.direction,b=[];return a&Hb&&b.push(dc),a&Ib&&b.push(cc),b},directionTest:function(a){var b=this.options,c=!0,d=a.distance,e=a.direction,f=a.deltaX,g=a.deltaY;return e&b.direction||(b.direction&Hb?(e=0===f?Cb:0>f?Db:Eb,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Cb:0>g?Fb:Gb,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return Z.prototype.attrTest.call(this,a)&&(this.state&fc||!(this.state&fc)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),j(_,Z,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[bc]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&fc)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),j(ab,V,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[_b]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime>b.time;if(this._input=a,!d||!c||a.eventType&(Ab|Bb)&&!f)this.reset();else if(a.eventType&yb)this.reset(),this._timer=e(function(){this.state=ic,this.tryEmit()},b.time,this);else if(a.eventType&Ab)return ic;return kc},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===ic&&(a&&a.eventType&Ab?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=nb(),this.manager.emit(this.options.event,this._input)))}}),j(bb,Z,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[bc]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&fc)}}),j(cb,Z,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Hb|Ib,pointers:1},getTouchAction:function(){return $.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Hb|Ib)?b=a.velocity:c&Hb?b=a.velocityX:c&Ib&&(b=a.velocityY),this._super.attrTest.call(this,a)&&c&a.direction&&a.distance>this.options.threshold&&mb(b)>this.options.velocity&&a.eventType&Ab},emit:function(a){var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),j(db,V,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[ac]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime<b.time;if(this.reset(),a.eventType&yb&&0===this.count)return this.failTimeout();if(d&&f&&c){if(a.eventType!=Ab)return this.failTimeout();var g=this.pTime?a.timeStamp-this.pTime<b.interval:!0,h=!this.pCenter||I(this.pCenter,a.center)<b.posThreshold;this.pTime=a.timeStamp,this.pCenter=a.center,h&&g?this.count+=1:this.count=1,this._input=a;var i=this.count%b.taps;if(0===i)return this.hasRequireFailures()?(this._timer=e(function(){this.state=ic,this.tryEmit()},b.interval,this),fc):ic}return kc},failTimeout:function(){return this._timer=e(function(){this.state=kc},this.options.interval,this),kc},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==ic&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),eb.VERSION="2.0.4",eb.defaults={domEvents:!1,touchAction:$b,enable:!0,inputTarget:null,inputClass:null,preset:[[bb,{enable:!1}],[_,{enable:!1},["rotate"]],[cb,{direction:Hb}],[$,{direction:Hb},["swipe"]],[db],[db,{event:"doubletap",taps:2},["tap"]],[ab]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};var lc=1,mc=2;fb.prototype={set:function(a){return h(this.options,a),a.touchAction&&this.touchAction.update(),a.inputTarget&&(this.input.destroy(),this.input.target=a.inputTarget,this.input.init()),this},stop:function(a){this.session.stopped=a?mc:lc},recognize:function(a){var b=this.session;if(!b.stopped){this.touchAction.preventDefaults(a);var c,d=this.recognizers,e=b.curRecognizer;(!e||e&&e.state&ic)&&(e=b.curRecognizer=null);for(var f=0;f<d.length;)c=d[f],b.stopped===mc||e&&c!=e&&!c.canRecognizeWith(e)?c.reset():c.recognize(a),!e&&c.state&(fc|gc|hc)&&(e=b.curRecognizer=c),f++}},get:function(a){if(a instanceof V)return a;for(var b=this.recognizers,c=0;c<b.length;c++)if(b[c].options.event==a)return b[c];return null},add:function(a){if(f(a,"add",this))return this;var b=this.get(a.options.event);return b&&this.remove(b),this.recognizers.push(a),a.manager=this,this.touchAction.update(),a},remove:function(a){if(f(a,"remove",this))return this;var b=this.recognizers;return a=this.get(a),b.splice(s(b,a),1),this.touchAction.update(),this},on:function(a,b){var c=this.handlers;return g(r(a),function(a){c[a]=c[a]||[],c[a].push(b)}),this},off:function(a,b){var c=this.handlers;return g(r(a),function(a){b?c[a].splice(s(c[a],b),1):delete c[a]}),this},emit:function(a,b){this.options.domEvents&&hb(a,b);var c=this.handlers[a]&&this.handlers[a].slice();if(c&&c.length){b.type=a,b.preventDefault=function(){b.srcEvent.preventDefault()};for(var d=0;d<c.length;)c[d](b),d++}},destroy:function(){this.element&&gb(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},h(eb,{INPUT_START:yb,INPUT_MOVE:zb,INPUT_END:Ab,INPUT_CANCEL:Bb,STATE_POSSIBLE:ec,STATE_BEGAN:fc,STATE_CHANGED:gc,STATE_ENDED:hc,STATE_RECOGNIZED:ic,STATE_CANCELLED:jc,STATE_FAILED:kc,DIRECTION_NONE:Cb,DIRECTION_LEFT:Db,DIRECTION_RIGHT:Eb,DIRECTION_UP:Fb,DIRECTION_DOWN:Gb,DIRECTION_HORIZONTAL:Hb,DIRECTION_VERTICAL:Ib,DIRECTION_ALL:Jb,Manager:fb,Input:y,TouchAction:T,TouchInput:Q,MouseInput:M,PointerEventInput:N,TouchMouseInput:S,SingleTouchInput:O,Recognizer:V,AttrRecognizer:Z,Tap:db,Pan:$,Swipe:cb,Pinch:_,Rotate:bb,Press:ab,on:n,off:o,each:g,merge:i,extend:h,inherit:j,bindFn:k,prefixed:v}),typeof define==kb&&define.amd?define(function(){return eb}):"undefined"!=typeof module&&module.exports?module.exports=eb:a[c]=eb}(window,document,"Hammer");
|
9
7
|
//# sourceMappingURL=hammer.min.map
|
@@ -1,8 +1,16 @@
|
|
1
|
-
(function(
|
1
|
+
(function(factory) {
|
2
|
+
if (typeof define === 'function' && define.amd) {
|
3
|
+
define(['jquery', 'hammerjs'], factory);
|
4
|
+
} else if (typeof exports === 'object') {
|
5
|
+
factory(require('jquery'), require('hammerjs'));
|
6
|
+
} else {
|
7
|
+
factory(jQuery, Hammer);
|
8
|
+
}
|
9
|
+
}(function($, Hammer) {
|
2
10
|
function hammerify(el, options) {
|
3
11
|
var $el = $(el);
|
4
|
-
if(!$el.data(
|
5
|
-
$el.data(
|
12
|
+
if(!$el.data("hammer")) {
|
13
|
+
$el.data("hammer", new Hammer($el[0], options));
|
6
14
|
}
|
7
15
|
}
|
8
16
|
|
@@ -16,10 +24,10 @@
|
|
16
24
|
Hammer.Manager.prototype.emit = (function(originalEmit) {
|
17
25
|
return function(type, data) {
|
18
26
|
originalEmit.call(this, type, data);
|
19
|
-
|
27
|
+
$(this.element).trigger({
|
20
28
|
type: type,
|
21
29
|
gesture: data
|
22
30
|
});
|
23
31
|
};
|
24
32
|
})(Hammer.Manager.prototype.emit);
|
25
|
-
})
|
33
|
+
}));
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hammerjs-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 2.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vincent Pochet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-09-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -77,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
77
|
version: '0'
|
78
78
|
requirements: []
|
79
79
|
rubyforge_project:
|
80
|
-
rubygems_version: 2.
|
80
|
+
rubygems_version: 2.4.3
|
81
81
|
signing_key:
|
82
82
|
specification_version: 4
|
83
83
|
summary: hammerjs packaged for Rails assets pipeline
|