hammerjs-rails 0.3.0 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
|