2015-05-04 18:11:22 +00:00
|
|
|
import {Injectable} from 'angular2/src/di/annotations_impl';
|
2015-02-24 15:05:45 +00:00
|
|
|
import {isPresent, isBlank, RegExpWrapper, BaseException} from 'angular2/src/facade/lang';
|
2015-02-27 22:50:06 +00:00
|
|
|
import {DOM} from 'angular2/src/dom/dom_adapter';
|
2015-02-20 17:00:09 +00:00
|
|
|
|
2015-03-16 21:44:14 +00:00
|
|
|
@Injectable()
|
2015-02-20 17:00:09 +00:00
|
|
|
export class UrlResolver {
|
2015-02-27 22:50:06 +00:00
|
|
|
static a;
|
2015-02-20 17:00:09 +00:00
|
|
|
|
|
|
|
|
constructor() {
|
|
|
|
|
if (isBlank(UrlResolver.a)) {
|
|
|
|
|
UrlResolver.a = DOM.createElement('a');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
resolve(baseUrl: string, url: string): string {
|
|
|
|
|
if (isBlank(baseUrl)) {
|
2015-03-09 10:35:46 +00:00
|
|
|
DOM.resolveAndSetHref(UrlResolver.a, url, null);
|
|
|
|
|
return DOM.getHref(UrlResolver.a);
|
2015-02-20 17:00:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isBlank(url) || url == '') return baseUrl;
|
|
|
|
|
|
|
|
|
|
if (url[0] == '/') {
|
|
|
|
|
throw new BaseException(`Could not resolve the url ${url} from ${baseUrl}`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var m = RegExpWrapper.firstMatch(_schemeRe, url);
|
|
|
|
|
|
|
|
|
|
if (isPresent(m[1])) {
|
|
|
|
|
return url;
|
|
|
|
|
}
|
|
|
|
|
|
2015-03-09 10:35:46 +00:00
|
|
|
DOM.resolveAndSetHref(UrlResolver.a, baseUrl, url);
|
|
|
|
|
return DOM.getHref(UrlResolver.a);
|
2015-02-20 17:00:09 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _schemeRe = RegExpWrapper.create('^([^:/?#]+:)?');
|