From 2287938f5a09205701d2d73263b00a8e6d323243 Mon Sep 17 00:00:00 2001 From: Marc Laval Date: Thu, 21 May 2015 11:32:29 +0200 Subject: [PATCH] fix(router): event.defaultPrevented is not reliable (IE11) --- modules/angular2/src/dom/browser_adapter.dart | 3 +++ modules/angular2/src/dom/browser_adapter.ts | 4 ++++ modules/angular2/src/dom/dom_adapter.ts | 1 + modules/angular2/src/dom/html_adapter.dart | 3 +++ modules/angular2/src/dom/parse5_adapter.cjs | 3 +++ modules/angular2/src/router/router_link.js | 2 +- modules/angular2/test/router/outlet_spec.js | 4 ++-- 7 files changed, 17 insertions(+), 3 deletions(-) diff --git a/modules/angular2/src/dom/browser_adapter.dart b/modules/angular2/src/dom/browser_adapter.dart index 48161b9f1b..7e91cebb2c 100644 --- a/modules/angular2/src/dom/browser_adapter.dart +++ b/modules/angular2/src/dom/browser_adapter.dart @@ -135,6 +135,9 @@ class BrowserDomAdapter extends GenericBrowserDomAdapter { MouseEvent createMouseEvent(String eventType) => new MouseEvent(eventType, canBubble: true); Event createEvent(String eventType) => new Event(eventType, canBubble: true); + void preventDefault(Event evt) { + evt.preventDefault(); + } String getInnerHTML(Element el) => el.innerHtml; String getOuterHTML(Element el) => el.outerHtml; void setInnerHTML(Element el, String value) { diff --git a/modules/angular2/src/dom/browser_adapter.ts b/modules/angular2/src/dom/browser_adapter.ts index 8b29a9e41c..4462bfeb05 100644 --- a/modules/angular2/src/dom/browser_adapter.ts +++ b/modules/angular2/src/dom/browser_adapter.ts @@ -77,6 +77,10 @@ createMouseEvent(eventType: string): MouseEvent { createEvent(eventType): Event { return new Event(eventType, true); } +preventDefault(evt: Event) { + evt.preventDefault(); + evt.returnValue = false; +} getInnerHTML(el) { return el.innerHTML; } diff --git a/modules/angular2/src/dom/dom_adapter.ts b/modules/angular2/src/dom/dom_adapter.ts index 2b134f7a2f..1acc45ee6a 100644 --- a/modules/angular2/src/dom/dom_adapter.ts +++ b/modules/angular2/src/dom/dom_adapter.ts @@ -33,6 +33,7 @@ export class DomAdapter { dispatchEvent(el, evt) { throw _abstract(); } createMouseEvent(eventType): any { throw _abstract(); } createEvent(eventType: string): any { throw _abstract(); } + preventDefault(evt) { throw _abstract(); } getInnerHTML(el): string { throw _abstract(); } getOuterHTML(el): string { throw _abstract(); } nodeName(node): string { throw _abstract(); } diff --git a/modules/angular2/src/dom/html_adapter.dart b/modules/angular2/src/dom/html_adapter.dart index e3e309a3fb..c7b31e727b 100644 --- a/modules/angular2/src/dom/html_adapter.dart +++ b/modules/angular2/src/dom/html_adapter.dart @@ -76,6 +76,9 @@ class Html5LibDomAdapter implements DomAdapter { createEvent(eventType) { throw 'not implemented'; } + preventDefault(evt) { + throw 'not implemented'; + } getInnerHTML(el) { return el.innerHtml; } diff --git a/modules/angular2/src/dom/parse5_adapter.cjs b/modules/angular2/src/dom/parse5_adapter.cjs index 371b144fe1..cd22d98787 100644 --- a/modules/angular2/src/dom/parse5_adapter.cjs +++ b/modules/angular2/src/dom/parse5_adapter.cjs @@ -134,6 +134,9 @@ export class Parse5DomAdapter extends DomAdapter { }; return evt; } + preventDefault(evt) { + evt.returnValue = false; + } getInnerHTML(el) { return serializer.serialize(this.templateAwareRoot(el)); } diff --git a/modules/angular2/src/router/router_link.js b/modules/angular2/src/router/router_link.js index 412c7725e6..7523579f27 100644 --- a/modules/angular2/src/router/router_link.js +++ b/modules/angular2/src/router/router_link.js @@ -54,7 +54,7 @@ export class RouterLink { this._location = location; this._params = StringMapWrapper.create(); DOM.on(this._domEl, 'click', (evt) => { - evt.preventDefault(); + DOM.preventDefault(evt); this._router.navigate(this._navigationHref); }); } diff --git a/modules/angular2/test/router/outlet_spec.js b/modules/angular2/test/router/outlet_spec.js index 42bdc68d7c..92e1deebf4 100644 --- a/modules/angular2/test/router/outlet_spec.js +++ b/modules/angular2/test/router/outlet_spec.js @@ -221,7 +221,7 @@ export function main() { view.detectChanges(); var dispatchedEvent = clickOnElement(view); - expect(dispatchedEvent.defaultPrevented).toBe(true); + expect(dispatchedEvent.defaultPrevented || !dispatchedEvent.returnValue).toBe(true); // router navigation is async. rtr.subscribe((_) => { @@ -244,7 +244,7 @@ export function main() { view.detectChanges(); var dispatchedEvent = clickOnElement(view); - expect(dispatchedEvent.defaultPrevented).toBe(true); + expect(dispatchedEvent.defaultPrevented || !dispatchedEvent.returnValue).toBe(true); // router navigation is async. rtr.subscribe((_) => {