Skip to content

Commit a30904c

Browse files
committed
make ngTouch ngClickOverride optional
1 parent adcfa74 commit a30904c

File tree

3 files changed

+58
-8
lines changed

3 files changed

+58
-8
lines changed

src/ngTouch/directive/ngClick.js

-8
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,6 @@
4040
</example>
4141
*/
4242

43-
ngTouch.config(['$provide', function($provide) {
44-
$provide.decorator('ngClickDirective', ['$delegate', function($delegate) {
45-
// drop the default ngClick directive
46-
$delegate.shift();
47-
return $delegate;
48-
}]);
49-
}]);
50-
5143
ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
5244
function($parse, $timeout, $rootElement) {
5345
var TAP_DURATION = 750; // Shorter than 750ms is a tap, longer is a taphold or drag.

src/ngTouch/touch.js

+30
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,36 @@
2222
/* global -ngTouch */
2323
var ngTouch = angular.module('ngTouch', []);
2424

25+
ngTouch.provider('$touch', $TouchProvider);
26+
2527
function nodeName_(element) {
2628
return angular.lowercase(element.nodeName || (element[0] && element[0].nodeName));
2729
}
30+
31+
$TouchProvider.$inject = ['$provide'];
32+
function $TouchProvider($provide) {
33+
var useNgClickOverride = true;
34+
35+
this.useNgClickOverride = function(enabled) {
36+
if (angular.isDefined(enabled)) {
37+
useNgClickOverride = enabled;
38+
return this;
39+
}
40+
return useNgClickOverride;
41+
};
42+
43+
$provide.decorator('ngClickDirective', ['$delegate', function($delegate) {
44+
if (useNgClickOverride) {
45+
// drop the default ngClick directive
46+
$delegate.shift();
47+
} else {
48+
// drop the ngClickOverride. Assume it is the second ngClick directive added.
49+
$delegate.splice(1,1);
50+
}
51+
52+
return $delegate;
53+
}]);
54+
55+
this.$get = angular.noop;
56+
57+
}

test/ngTouch/directive/ngClickSpec.js

+28
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,34 @@ describe('ngClick (touch)', function() {
2727
Date.now = orig_now;
2828
});
2929

30+
it('should be configurable in the $touchProvider', function() {
31+
var _$touchProvider;
32+
33+
module(function($touchProvider) {
34+
_$touchProvider = $touchProvider;
35+
});
36+
37+
inject(function() {
38+
expect(_$touchProvider.useNgClickOverride).toEqual(jasmine.any(Function));
39+
});
40+
});
41+
42+
it('should not apply the ngClick override directive if useNgClickOverride = false', function() {
43+
module(function($touchProvider) {
44+
$touchProvider.useNgClickOverride(false);
45+
});
46+
47+
inject(function($rootScope, $compile) {
48+
element = $compile('<div ng-click="tapped = true"></div>')($rootScope);
49+
$rootScope.$digest();
50+
expect($rootScope.tapped).toBeUndefined();
51+
52+
browserTrigger(element, 'touchstart');
53+
browserTrigger(element, 'touchend');
54+
expect($rootScope.tapped).toBeUndefined();
55+
});
56+
});
57+
3058

3159
it('should get called on a tap', inject(function($rootScope, $compile) {
3260
element = $compile('<div ng-click="tapped = true"></div>')($rootScope);

0 commit comments

Comments
 (0)