forked from matthew-andrews/selective-fastclick
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
83 lines (64 loc) · 2.17 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*jshint laxbreak:true*/
/**
* External dependencies
*/
var FastClick = require('fastclick').FastClick;
var FtDomDelegate = require('dom-delegate').Delegate;
/**
* Selective FastClick
*/
function SelectiveFastClick(layer, selectors) {
// Support:-
// - new SelectiveFastClick(selector); (default FastClick behaviour on document.body)
// - new SelectiveFastClick(document.body, selector); (as above)
// - new SelectiveFastClick([selector, selector...]);
// - new SelectiveFastClick(document.body, [selector, selector, ...]);
if (!selectors) {
selectors = layer;
layer = document.body;
}
if (typeof selectors === 'string') selectors = [selectors];
var delegate = this.delegate = new FtDomDelegate(layer);
// HACK: Pass in MSTouchAction value
delegate.style = { msTouchAction: layer.style.msTouchAction };
// Quick hacky forEach helper
function forEach(array, fn) {
for (var i = 0, l = array.length; i < l; i++) fn(array[i]);
}
delegate.addEventListener = function(eventType, handler, useCapture) {
forEach(selectors, function(selector) {
FtDomDelegate.prototype.on.call(delegate, eventType, selector, handler, useCapture);
});
};
delegate.removeEventListener = function(eventType, handler, useCapture) {
forEach(selectors, function(selector) {
FtDomDelegate.prototype.off.call(delegate, eventType, selector, handler, useCapture);
});
};
this.fastclick = new FastClick(delegate);
// Copy the Android 2.3 hack
if (typeof layer.onclick === 'function') {
// Android browser on at least 3.2 requires a new reference to the function in layer.onclick
// - the old one won't work if passed to addEventListener directly.
oldOnClick = layer.onclick;
layer.addEventListener('click', function(event) {
oldOnClick(event);
}, false);
layer.onclick = null;
}
}
/**
* Instance methods
*/
var proto = SelectiveFastClick.prototype;
proto.destroy = function() {
this.delegate.destroy();
this.fastclick.destroy();
};
/**
* FastClick-style attach method
*/
SelectiveFastClick.attach = function(layer, selector) {
return new SelectiveFastClick(layer, selector);
};
module.exports = SelectiveFastClick;