Skip to content

Commit 235dec2

Browse files
PatrickJSbtford
authored andcommitted
fix(browser_adapter.ts): baseElement.getAttribute
currently throwing an error ```error Error during instantiation of LocationStrategy! (RouterLink -> Router -> Location -> LocationStrategy). ORIGINAL ERROR: TypeError: baseElement.attr is not a function ``` Closes angular#3214
1 parent 52da220 commit 235dec2

File tree

6 files changed

+52
-3
lines changed

6 files changed

+52
-3
lines changed

modules/angular2/src/dom/browser_adapter.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,11 @@ class BrowserDomAdapter extends GenericBrowserDomAdapter {
423423
return null;
424424
}
425425
var baseUri = Uri.parse(href);
426-
return baseUri.path;
426+
return baseUri.path[0] == '/' ? baseUri.path : ('/' + baseUri.path);
427+
}
428+
429+
resetBaseElement() {
430+
baseElement = null;
427431
}
428432

429433
String getUserAgent() {

modules/angular2/src/dom/browser_adapter.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
297297
}
298298
return relativePath(href);
299299
}
300+
resetBaseElement(): void { baseElement = null; }
300301
getUserAgent(): string { return window.navigator.userAgent; }
301302
setData(element, name: string, value: string) { element.dataset[name] = value; }
302303
getData(element, name: string): string { return element.dataset[name]; }
@@ -313,7 +314,7 @@ function getBaseElementHref(): string {
313314
return null;
314315
}
315316
}
316-
return baseElement.attr('href');
317+
return baseElement.getAttribute('href');
317318
}
318319

319320
// based on urlUtils.js in AngularJS 1

modules/angular2/src/dom/dom_adapter.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ export class DomAdapter {
127127
getHistory(): History { throw _abstract(); }
128128
getLocation(): Location { throw _abstract(); }
129129
getBaseHref(): string { throw _abstract(); }
130+
resetBaseElement(): void { throw _abstract(); }
130131
getUserAgent(): string { throw _abstract(); }
131132
setData(element, name: string, value: string) { throw _abstract(); }
132133
getData(element, name: string): string { throw _abstract(); }

modules/angular2/src/dom/html_adapter.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,10 @@ class Html5LibDomAdapter implements DomAdapter {
400400
throw 'not implemented';
401401
}
402402

403+
resetBaseElement() {
404+
throw 'not implemented';
405+
}
406+
403407
String getUserAgent() {
404408
throw 'not implemented';
405409
}

modules/angular2/src/dom/parse5_adapter.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,8 @@ export class Parse5DomAdapter extends DomAdapter {
532532
return this.defaultDoc().body;
533533
}
534534
}
535+
getBaseHref(): string { throw 'not implemented'; }
536+
resetBaseElement(): void { throw 'not implemented'; }
535537
getHistory(): History { throw 'not implemented'; }
536538
getLocation(): Location { throw 'not implemented'; }
537539
getUserAgent(): string { return "Fake user agent"; }

modules/angular2/test/dom/dom_adapter_spec.ts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,42 @@ export function main() {
4949
expect(DOM.isElementNode(secondChild)).toBe(true);
5050

5151
});
52+
53+
if (DOM.supportsDOMEvents()) {
54+
describe('getBaseHref', () => {
55+
beforeEach(() => DOM.resetBaseElement());
56+
57+
it('should return null if base element is absent',
58+
() => { expect(DOM.getBaseHref()).toBeNull(); });
59+
60+
it('should return the value of the base element', () => {
61+
var baseEl = DOM.createElement('base');
62+
DOM.setAttribute(baseEl, 'href', '/drop/bass/connon/');
63+
var headEl = DOM.defaultDoc().head;
64+
DOM.appendChild(headEl, baseEl);
65+
66+
var baseHref = DOM.getBaseHref();
67+
DOM.removeChild(headEl, baseEl);
68+
DOM.resetBaseElement();
69+
70+
expect(baseHref).toEqual('/drop/bass/connon/');
71+
});
72+
73+
it('should return a relative url', () => {
74+
var baseEl = DOM.createElement('base');
75+
DOM.setAttribute(baseEl, 'href', 'base');
76+
var headEl = DOM.defaultDoc().head;
77+
DOM.appendChild(headEl, baseEl);
78+
79+
var baseHref = DOM.getBaseHref();
80+
DOM.removeChild(headEl, baseEl);
81+
DOM.resetBaseElement();
82+
83+
expect(baseHref).toEqual('/base');
84+
});
85+
});
86+
}
87+
88+
5289
});
53-
}
90+
}

0 commit comments

Comments
 (0)