X Tutup
Skip to content

Commit 469afda

Browse files
committed
fix(url_resolver): in Dart make package urls relative to AppRootUrl
1 parent c2bbda0 commit 469afda

File tree

18 files changed

+58
-33
lines changed

18 files changed

+58
-33
lines changed

modules/angular2/src/services/url_resolver.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
library angular2.src.services.url_resolver;
22

33
import 'package:angular2/di.dart' show Injectable;
4+
import 'package:angular2/src/services/app_root_url.dart' show AppRootUrl;
45

56
@Injectable()
67
class UrlResolver {
8+
9+
final AppRootUrl _appRootUrl;
10+
11+
UrlResolver(this._appRootUrl);
12+
713
/**
814
* Resolves the `url` given the `baseUrl`:
915
* - when the `url` is null, the `baseUrl` is returned,
@@ -20,7 +26,8 @@ class UrlResolver {
2026
Uri uri = Uri.parse(url);
2127

2228
if (uri.scheme == 'package') {
23-
return '/packages/${uri.path}';
29+
var maybeSlash = _appRootUrl.value.endsWith('/') ? '' : '/';
30+
return '${_appRootUrl.value}${maybeSlash}packages/${uri.path}';
2431
}
2532

2633
if (uri.isAbsolute) return uri.toString();

modules/angular2/src/services/url_resolver.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
normalizeBlank
88
} from 'angular2/src/facade/lang';
99
import {ListWrapper} from 'angular2/src/facade/collection';
10+
import {AppRootUrl} from 'angular2/src/services/app_root_url';
1011

1112
/**
1213
* Used by the {@link Compiler} when resolving HTML and CSS template URLs.
@@ -17,6 +18,8 @@ import {ListWrapper} from 'angular2/src/facade/collection';
1718
*/
1819
@Injectable()
1920
export class UrlResolver {
21+
constructor(_: AppRootUrl) {}
22+
2023
/**
2124
* Resolves the `url` given the `baseUrl`:
2225
* - when the `url` is null, the `baseUrl` is returned,

modules/angular2/src/transform/template_compiler/generator.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import 'package:angular2/src/render/dom/compiler/style_url_resolver.dart';
1212
import 'package:angular2/src/render/dom/compiler/view_loader.dart';
1313
import 'package:angular2/src/render/xhr.dart' show XHR;
1414
import 'package:angular2/src/reflection/reflection.dart';
15+
import 'package:angular2/src/services/app_root_url.dart';
1516
import 'package:angular2/src/services/url_resolver.dart';
1617
import 'package:angular2/src/transform/common/asset_reader.dart';
1718
import 'package:angular2/src/transform/common/xhr_impl.dart';
@@ -85,7 +86,7 @@ class _TemplateExtractor {
8586

8687
_TemplateExtractor(XHR xhr)
8788
: _factory = new CompileStepFactory(new ng.Parser(new ng.Lexer())) {
88-
var urlResolver = new UrlResolver();
89+
var urlResolver = new UrlResolver(new AppRootUrl(''));
8990
var styleUrlResolver = new StyleUrlResolver(urlResolver);
9091
var styleInliner = new StyleInliner(xhr, styleUrlResolver, urlResolver);
9192

modules/angular2/test/core/compiler/compiler_spec.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export function main() {
4848
function createCompiler(renderCompileResults:
4949
List<renderApi.ProtoViewDto | Promise<renderApi.ProtoViewDto>>,
5050
protoViewFactoryResults: List<AppProtoView>) {
51-
var urlResolver = new UrlResolver();
51+
var urlResolver = new UrlResolver(new AppRootUrl(""));
5252
renderCompileRequests = [];
5353
renderCompileResults = ListWrapper.clone(renderCompileResults);
5454
renderCompiler.spy('compile').andCallFake((view) => {
@@ -399,9 +399,9 @@ export function main() {
399399
var reader: any = new SpyDirectiveResolver();
400400

401401
// create the compiler
402-
var compiler =
403-
new Compiler(reader, cache, tplResolver, cmpUrlMapper, new UrlResolver(),
404-
renderCompiler, protoViewFactory, new AppRootUrl("http://www.app.com"));
402+
var compiler = new Compiler(reader, cache, tplResolver, cmpUrlMapper,
403+
new UrlResolver(new AppRootUrl("")), renderCompiler,
404+
protoViewFactory, new AppRootUrl("http://www.app.com"));
405405
compiler.compileInHost(MainComponent)
406406
.then((protoViewRef) => {
407407
// the test should have failed if the resolver was called, so we're good
@@ -718,4 +718,4 @@ function collectEmbeddedPvs(pv: AppProtoView, target: AppProtoView[] = null): Ap
718718
}
719719
});
720720
return target;
721-
}
721+
}

modules/angular2/test/render/dom/compiler/style_url_resolver_spec.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ import {describe, it, expect, beforeEach, ddescribe, iit, xit, el} from 'angular
22
import {StyleUrlResolver} from 'angular2/src/render/dom/compiler/style_url_resolver';
33

44
import {UrlResolver} from 'angular2/src/services/url_resolver';
5+
import {AppRootUrl} from 'angular2/src/services/app_root_url';
56

67
export function main() {
78
describe('StyleUrlResolver', () => {
89
let styleUrlResolver;
910

10-
beforeEach(() => { styleUrlResolver = new StyleUrlResolver(new UrlResolver()); });
11+
beforeEach(
12+
() => { styleUrlResolver = new StyleUrlResolver(new UrlResolver(new AppRootUrl(""))); });
1113

1214
it('should resolve "url()" urls', () => {
1315
var css = `

modules/angular2/test/render/dom/compiler/view_loader_spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {ViewLoader} from 'angular2/src/render/dom/compiler/view_loader';
1515
import {StyleInliner} from 'angular2/src/render/dom/compiler/style_inliner';
1616
import {StyleUrlResolver} from 'angular2/src/render/dom/compiler/style_url_resolver';
1717
import {UrlResolver} from 'angular2/src/services/url_resolver';
18+
import {AppRootUrl} from 'angular2/src/services/app_root_url';
1819

1920
import {ViewDefinition} from 'angular2/src/render/api';
2021
import {PromiseWrapper, Promise} from 'angular2/src/facade/async';
@@ -28,7 +29,7 @@ export function main() {
2829

2930
beforeEach(() => {
3031
xhr = new MockXHR();
31-
urlResolver = new UrlResolver();
32+
urlResolver = new UrlResolver(new AppRootUrl(''));
3233
styleUrlResolver = new StyleUrlResolver(urlResolver);
3334
let styleInliner = new StyleInliner(xhr, styleUrlResolver, urlResolver);
3435
loader = new ViewLoader(xhr, styleInliner, styleUrlResolver);

modules/angular2/test/services/url_resolver_spec.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,21 @@
1-
import {describe, it, expect, beforeEach, ddescribe, iit, xit, el} from 'angular2/test_lib';
1+
import {
2+
describe,
3+
it,
4+
expect,
5+
beforeEach,
6+
ddescribe,
7+
iit,
8+
xit,
9+
el,
10+
IS_DARTIUM
11+
} from 'angular2/test_lib';
212
import {UrlResolver} from 'angular2/src/services/url_resolver';
13+
import {AppRootUrl} from 'angular2/src/services/app_root_url';
314

415
export function main() {
516
describe('UrlResolver', () => {
6-
var resolver = new UrlResolver();
17+
var appRootUrl = new AppRootUrl('http://localhost/example/');
18+
var resolver = new UrlResolver(appRootUrl);
719

820
describe('absolute base url', () => {
921
it('should add a relative path to the base url', () => {
@@ -70,5 +82,14 @@ export function main() {
7082
expect(resolver.resolve('foo/baz/', '/bar')).toEqual('/bar');
7183
});
7284
});
85+
86+
if (IS_DARTIUM) {
87+
describe('package url', () => {
88+
it('should be served relative to AppRootUrl', () => {
89+
expect(resolver.resolve('foo', 'package:bar/baz.dart'))
90+
.toEqual('http://localhost/example/packages/bar/baz.dart');
91+
});
92+
});
93+
}
7394
});
7495
}

modules/benchmarks/src/compiler/compiler_benchmark.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export function main() {
3535
var cache = new CompilerCache();
3636
var viewResolver = new MultipleViewResolver(
3737
count, [BenchmarkComponentNoBindings, BenchmarkComponentWithBindings]);
38-
var urlResolver = new UrlResolver();
38+
var urlResolver = new UrlResolver(new AppRootUrl(""));
3939
var shadowDomStrategy = new NativeShadowDomStrategy();
4040
var renderCompiler = new rc.DefaultDomCompiler(new Parser(new Lexer()), shadowDomStrategy,
4141
new ViewLoader(null, null, null));

modules/examples/src/material/button/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,5 @@ class DemoApp {
3737

3838
export function main() {
3939
commonDemoSetup();
40-
bootstrap(DemoApp, [bind(UrlResolver).toValue(new DemoUrlResolver())]);
40+
bootstrap(DemoApp, [bind(UrlResolver).toClass(DemoUrlResolver)]);
4141
}

modules/examples/src/material/checkbox/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@ class DemoApp {
2020

2121
export function main() {
2222
commonDemoSetup();
23-
bootstrap(DemoApp, [bind(UrlResolver).toValue(new DemoUrlResolver())]);
23+
bootstrap(DemoApp, [bind(UrlResolver).toClass(DemoUrlResolver)]);
2424
}

0 commit comments

Comments
 (0)
X Tutup