2015-02-09 15:11:31 +01:00
|
|
|
library angular.events;
|
|
|
|
|
|
|
|
|
|
import 'dart:html';
|
|
|
|
|
import './hammer_common.dart';
|
2015-11-06 17:34:07 -08:00
|
|
|
import 'package:angular2/src/facade/exceptions.dart' show BaseException;
|
2015-09-03 22:01:36 -07:00
|
|
|
import "package:angular2/src/core/di.dart" show Injectable;
|
2015-02-09 15:11:31 +01:00
|
|
|
|
|
|
|
|
import 'dart:js' as js;
|
|
|
|
|
|
2015-09-04 14:23:13 -07:00
|
|
|
@Injectable()
|
2015-02-09 15:11:31 +01:00
|
|
|
class HammerGesturesPlugin extends HammerGesturesPluginCommon {
|
|
|
|
|
bool supports(String eventName) {
|
|
|
|
|
if (!super.supports(eventName)) return false;
|
|
|
|
|
|
|
|
|
|
if (!js.context.hasProperty('Hammer')) {
|
2015-05-08 19:51:19 -07:00
|
|
|
throw new BaseException(
|
|
|
|
|
'Hammer.js is not loaded, can not bind ${eventName} event');
|
2015-02-09 15:11:31 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2015-09-01 08:52:54 -07:00
|
|
|
addEventListener(Element element, String eventName, Function handler) {
|
2015-02-09 15:11:31 +01:00
|
|
|
var zone = this.manager.getZone();
|
|
|
|
|
eventName = eventName.toLowerCase();
|
|
|
|
|
|
|
|
|
|
zone.runOutsideAngular(() {
|
|
|
|
|
// Creating the manager bind events, must be done outside of angular
|
|
|
|
|
var mc = new js.JsObject(js.context['Hammer'], [element]);
|
|
|
|
|
|
|
|
|
|
var jsObj = mc.callMethod('get', ['pinch']);
|
2015-08-04 12:05:30 -07:00
|
|
|
jsObj.callMethod('set', [
|
|
|
|
|
new js.JsObject.jsify({'enable': true})
|
|
|
|
|
]);
|
2015-02-09 15:11:31 +01:00
|
|
|
jsObj = mc.callMethod('get', ['rotate']);
|
2015-08-04 12:05:30 -07:00
|
|
|
jsObj.callMethod('set', [
|
|
|
|
|
new js.JsObject.jsify({'enable': true})
|
|
|
|
|
]);
|
2015-02-09 15:11:31 +01:00
|
|
|
|
|
|
|
|
mc.callMethod('on', [
|
|
|
|
|
eventName,
|
|
|
|
|
(eventObj) {
|
|
|
|
|
zone.run(() {
|
|
|
|
|
var dartEvent = new HammerEvent._fromJsEvent(eventObj);
|
|
|
|
|
handler(dartEvent);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class HammerEvent {
|
|
|
|
|
num angle;
|
|
|
|
|
num centerX;
|
|
|
|
|
num centerY;
|
|
|
|
|
int deltaTime;
|
|
|
|
|
int deltaX;
|
|
|
|
|
int deltaY;
|
|
|
|
|
int direction;
|
|
|
|
|
int distance;
|
|
|
|
|
num rotation;
|
|
|
|
|
num scale;
|
|
|
|
|
Node target;
|
|
|
|
|
int timeStamp;
|
|
|
|
|
String type;
|
|
|
|
|
num velocity;
|
|
|
|
|
num velocityX;
|
|
|
|
|
num velocityY;
|
|
|
|
|
js.JsObject jsEvent;
|
|
|
|
|
|
|
|
|
|
HammerEvent._fromJsEvent(js.JsObject event) {
|
|
|
|
|
angle = event['angle'];
|
|
|
|
|
var center = event['center'];
|
|
|
|
|
centerX = center['x'];
|
|
|
|
|
centerY = center['y'];
|
|
|
|
|
deltaTime = event['deltaTime'];
|
|
|
|
|
deltaX = event['deltaX'];
|
|
|
|
|
deltaY = event['deltaY'];
|
|
|
|
|
direction = event['direction'];
|
|
|
|
|
distance = event['distance'];
|
|
|
|
|
rotation = event['rotation'];
|
|
|
|
|
scale = event['scale'];
|
|
|
|
|
target = event['target'];
|
|
|
|
|
timeStamp = event['timeStamp'];
|
|
|
|
|
type = event['type'];
|
|
|
|
|
velocity = event['velocity'];
|
|
|
|
|
velocityX = event['velocityX'];
|
|
|
|
|
velocityY = event['velocityY'];
|
|
|
|
|
jsEvent = event;
|
|
|
|
|
}
|
|
|
|
|
}
|