Chromium Code Reviews| Index: pkg/polymer/lib/src/transform/common.dart |
| diff --git a/pkg/polymer/lib/src/transform/common.dart b/pkg/polymer/lib/src/transform/common.dart |
| index cad687099e3e36f7a1f5ff16db72146ab1c15637..b0ade96fb2aa33c9b9cca25c9af6605ab6836e7e 100644 |
| --- a/pkg/polymer/lib/src/transform/common.dart |
| +++ b/pkg/polymer/lib/src/transform/common.dart |
| @@ -17,7 +17,7 @@ import 'package:source_maps/span.dart' show Span; |
| * Parses an HTML file [contents] and returns a DOM-like tree. Adds emitted |
| * error/warning to [logger]. |
| */ |
| -Document parseHtml(String contents, String sourcePath, TransformLogger logger, |
| +Document _parseHtml(String contents, String sourcePath, TransformLogger logger, |
| {bool checkDocType: false}) { |
| // TODO(jmesserly): make HTTP encoding configurable |
| var parser = new HtmlParser(contents, encoding: 'utf8', generateSpans: true, |
| @@ -34,6 +34,25 @@ Document parseHtml(String contents, String sourcePath, TransformLogger logger, |
| return document; |
| } |
| +Future<Document> readPrimaryAsHtml(Transform transform) { |
| + var asset = transform.primaryInput; |
| + var id = asset.id; |
| + return asset.readAsString().then((content) { |
| + return _parseHtml(content, id.path, transform.logger, |
| + checkDocType: isHtmlInWebOrTest(id)); |
| + }); |
| +} |
| + |
| +Future<Document> readAsHtml(AssetId id, Transform transform) { |
| + var primaryId = transform.primaryInput.id; |
| + var url = (id.package == primaryId.package) ? id.path |
| + : assetUrlFor(id, primaryId, transform.logger); |
| + return transform.readInputAsString(id).then((content) { |
| + return _parseHtml(content, url, transform.logger, |
| + checkDocType: isHtmlInWebOrTest(id)); |
| + }); |
| +} |
| + |
| /** Create an [AssetId] for a [url] seen in the [source] asset. */ |
| // TODO(sigmund): delete once this is part of barback (dartbug.com/12610) |
| AssetId resolve(AssetId source, String url, TransformLogger logger, Span span) { |
| @@ -73,6 +92,30 @@ AssetId resolve(AssetId source, String url, TransformLogger logger, Span span) { |
| return new AssetId(package, targetPath); |
| } |
| -Future<bool> isHtmlInWebOrTest(AssetId id) => |
| - new Future.value(id.extension == '.html' && |
| - (id.path.startsWith('web/') || id.path.startsWith('test/'))); |
| +bool isHtmlInWebOrTest(AssetId id) => id.extension == '.html' && |
| + (id.path.startsWith('web/') || id.path.startsWith('test/')); |
| + |
| +/** |
| + * Generate the import url for a file described by [id], referenced by a file |
| + * with [sourceId]. |
| + */ |
| +String assetUrlFor(AssetId id, AssetId sourceId, TransformLogger logger) { |
|
Jennifer Messerly
2013/09/04 03:13:27
TODO: this should be in barback, e.g. AssetId.uri
Siggi Cherem (dart-lang)
2013/09/04 17:57:27
Done. Added TODO and more comments in bug/12610
|
| + // use package: and asset: urls if possible |
| + if (id.path.startsWith('lib/')) { |
| + return 'package:${id.package}/${id.path.substring(4)}'; |
| + } |
| + |
| + if (id.path.startsWith('asset/')) { |
| + return 'asset:${id.package}/${id.path.substring(6)}'; |
|
Jennifer Messerly
2013/09/04 03:13:27
Hmm, this won't work if we're in a Dart file?
Doe
Siggi Cherem (dart-lang)
2013/09/04 17:57:27
Correct. I added more details about this in the bu
|
| + } |
| + |
| + // Use relative urls only if it's possible. |
| + if (id.package != sourceId.package) { |
| + logger.error("don't know how to import $id from $sourceId"); |
| + return null; |
| + } |
| + |
| + var builder = path.url; |
| + return builder.relative(builder.join('/', id.path), |
| + from: builder.join('/', builder.dirname(sourceId.path))); |
| +} |