@@ -3,14 +3,42 @@ library angular.events;
33import 'dart:html' ;
44import './hammer_common.dart' ;
55import 'package:angular2/src/facade/exceptions.dart' show BaseException;
6- import "package:angular2/src/core/di.dart" show Injectable;
6+ import "package:angular2/src/core/di.dart" show Injectable, Inject, OpaqueToken ;
77
88import 'dart:js' as js;
99
10+ const OpaqueToken HAMMER_GESTURE_CONFIG = const OpaqueToken ("HammerGestureConfig" );
11+
12+ overrideDefault (js.JsObject mc, String eventName, Object config) {
13+ var jsObj = mc.callMethod ('get' , [eventName]);
14+ jsObj.callMethod ('set' , [
15+ new js.JsObject .jsify (config)
16+ ]);
17+ }
18+
19+ @Injectable ()
20+ class HammerGestureConfig {
21+ List <String > events = [];
22+ Map overrides = {};
23+
24+ buildHammer (Element element) {
25+ var mc = new js.JsObject (js.context['Hammer' ], [element]);
26+ overrideDefault (mc, 'pinch' , {'enable' : true });
27+ overrideDefault (mc, 'rotate' , {'enable' : true });
28+ this .overrides.forEach ((Object config, String eventName) => overrideDefault (mc, eventName, config));
29+ return mc;
30+ }
31+
32+ }
33+
1034@Injectable ()
1135class HammerGesturesPlugin extends HammerGesturesPluginCommon {
36+ HammerGestureConfig _config;
37+
38+ HammerGesturesPlugin (@Inject (HAMMER_GESTURE_CONFIG ) this ._config) {}
39+
1240 bool supports (String eventName) {
13- if (! super .supports (eventName)) return false ;
41+ if (! super .supports (eventName) && ! this . isCustomEvent (eventName) ) return false ;
1442
1543 if (! js.context.hasProperty ('Hammer' )) {
1644 throw new BaseException (
@@ -26,16 +54,7 @@ class HammerGesturesPlugin extends HammerGesturesPluginCommon {
2654
2755 zone.runOutsideAngular (() {
2856 // Creating the manager bind events, must be done outside of angular
29- var mc = new js.JsObject (js.context['Hammer' ], [element]);
30-
31- var jsObj = mc.callMethod ('get' , ['pinch' ]);
32- jsObj.callMethod ('set' , [
33- new js.JsObject .jsify ({'enable' : true })
34- ]);
35- jsObj = mc.callMethod ('get' , ['rotate' ]);
36- jsObj.callMethod ('set' , [
37- new js.JsObject .jsify ({'enable' : true })
38- ]);
57+ var mc = this ._config.buildHammer (element);
3958
4059 mc.callMethod ('on' , [
4160 eventName,
@@ -48,6 +67,9 @@ class HammerGesturesPlugin extends HammerGesturesPluginCommon {
4867 ]);
4968 });
5069 }
70+
71+ isCustomEvent (String eventName) { return this ._config.events.indexOf (eventName) > - 1 ; }
72+
5173}
5274
5375class HammerEvent {
0 commit comments