2015-05-04 11:11:22 -07:00
|
|
|
import {Injectable} from 'angular2/src/di/annotations_impl';
|
2015-02-24 16:05:45 +01:00
|
|
|
import {isPresent, isBlank, RegExpWrapper, BaseException} from 'angular2/src/facade/lang';
|
2015-02-27 14:50:06 -08:00
|
|
|
import {DOM} from 'angular2/src/dom/dom_adapter';
|
2015-02-20 18:00:09 +01:00
|
|
|
|
2015-03-16 14:44:14 -07:00
|
|
|
@Injectable()
|
2015-02-20 18:00:09 +01:00
|
|
|
export class UrlResolver {
|
2015-02-27 14:50:06 -08:00
|
|
|
static a;
|
2015-02-20 18:00:09 +01:00
|
|
|
|
|
|
|
constructor() {
|
|
|
|
if (isBlank(UrlResolver.a)) {
|
|
|
|
UrlResolver.a = DOM.createElement('a');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
resolve(baseUrl: string, url: string): string {
|
|
|
|
if (isBlank(baseUrl)) {
|
2015-03-09 11:35:46 +01:00
|
|
|
DOM.resolveAndSetHref(UrlResolver.a, url, null);
|
|
|
|
return DOM.getHref(UrlResolver.a);
|
2015-02-20 18:00:09 +01: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 11:35:46 +01:00
|
|
|
DOM.resolveAndSetHref(UrlResolver.a, baseUrl, url);
|
|
|
|
return DOM.getHref(UrlResolver.a);
|
2015-02-20 18:00:09 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var _schemeRe = RegExpWrapper.create('^([^:/?#]+:)?');
|