feat(events): add support for global events

Fixes #1098
Closes #1255
This commit is contained in:
Marc Laval
2015-04-02 15:56:58 +02:00
parent 7c95cea3a8
commit b96e560c8d
27 changed files with 414 additions and 103 deletions
@@ -119,6 +119,12 @@ class BrowserDomAdapter extends GenericBrowserDomAdapter {
// addEventListener misses zones so we use element.on.
element.on[event].listen(callback);
}
Function onAndCancel(EventTarget element, String event, callback(arg)) {
// due to https://code.google.com/p/dart/issues/detail?id=17406
// addEventListener misses zones so we use element.on.
var subscription = element.on[event].listen(callback);
return subscription.cancel;
}
void dispatchEvent(EventTarget el, Event evt) {
el.dispatchEvent(evt);
}
@@ -288,4 +294,13 @@ class BrowserDomAdapter extends GenericBrowserDomAdapter {
int keyCode = event.keyCode;
return _keyCodeToKeyMap.containsKey(keyCode) ? _keyCodeToKeyMap[keyCode] : 'Unidentified';
}
getGlobalEventTarget(String target) {
if (target == "window") {
return window;
} else if (target == "document") {
return document;
} else if (target == "body") {
return document.body;
}
}
}
@@ -73,6 +73,12 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
on(el, evt, listener) {
el.addEventListener(evt, listener, false);
}
onAndCancel(el, evt, listener): Function {
el.addEventListener(evt, listener, false);
//Needed to follow Dart's subscription semantic, until fix of
//https://code.google.com/p/dart/issues/detail?id=17406
return () => {el.removeEventListener(evt, listener, false);};
}
dispatchEvent(el, evt) {
el.dispatchEvent(evt);
}
@@ -353,4 +359,13 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
}
return key;
}
getGlobalEventTarget(target:string) {
if (target == "window") {
return window;
} else if (target == "document") {
return document;
} else if (target == "body") {
return document.body;
}
}
}
+6
View File
@@ -39,6 +39,9 @@ export class DomAdapter {
on(el, evt, listener) {
throw _abstract();
}
onAndCancel(el, evt, listener): Function {
throw _abstract();
}
dispatchEvent(el, evt) {
throw _abstract();
}
@@ -273,4 +276,7 @@ export class DomAdapter {
supportsNativeShadowDOM(): boolean {
throw _abstract();
}
getGlobalEventTarget(target:string) {
throw _abstract();
}
}
@@ -29,6 +29,9 @@ class Html5LibDomAdapter implements DomAdapter {
on(el, evt, listener) {
throw 'not implemented';
}
Function onAndCancel(el, evt, listener) {
throw 'not implemented';
}
dispatchEvent(el, evt) {
throw 'not implemented';
}
@@ -86,6 +86,9 @@ export class Parse5DomAdapter extends DomAdapter {
on(el, evt, listener) {
//Do nothing, in order to not break forms integration tests
}
onAndCancel(el, evt, listener): Function {
//Do nothing, in order to not break forms integration tests
}
dispatchEvent(el, evt) {
throw _notImplemented('dispatchEvent');
}