| Index: lib/build/import_inliner.dart
|
| diff --git a/lib/build/import_inliner.dart b/lib/build/import_inliner.dart
|
| index 4336587badf2db5631ec58b98a9f4068deafdad2..0339ca62e1e9f9eb145951fdea555451528b5888 100644
|
| --- a/lib/build/import_inliner.dart
|
| +++ b/lib/build/import_inliner.dart
|
| @@ -22,8 +22,10 @@ import 'messages.dart';
|
| /// in html imports.
|
| class ImportInlinerTransformer extends Transformer {
|
| final List<String> entryPoints;
|
| + final List<String> bindingStartDelimiters;
|
|
|
| - ImportInlinerTransformer([this.entryPoints]);
|
| + ImportInlinerTransformer(
|
| + [this.entryPoints, this.bindingStartDelimiters = const []]);
|
|
|
| bool isPrimary(AssetId id) {
|
| if (entryPoints != null) return entryPoints.contains(id.path);
|
| @@ -35,8 +37,8 @@ class ImportInlinerTransformer extends Transformer {
|
|
|
| apply(Transform transform) {
|
| var logger = new BuildLogger(transform, convertErrorsToWarnings: true);
|
| - return new ImportInliner(transform, transform.primaryInput.id, logger)
|
| - .run();
|
| + return new ImportInliner(transform, transform.primaryInput.id, logger,
|
| + bindingStartDelimiters: bindingStartDelimiters).run();
|
| }
|
| }
|
|
|
| @@ -49,8 +51,11 @@ class ImportInliner {
|
| final AssetId primaryInput;
|
| // The logger to use.
|
| final BuildLogger logger;
|
| + // The start delimiters for template bindings, such as '{{' or '[['.
|
| + final List<String> bindingStartDelimiters;
|
|
|
| - ImportInliner(this.transform, this.primaryInput, this.logger);
|
| + ImportInliner(this.transform, this.primaryInput, this.logger,
|
| + {this.bindingStartDelimiters: const []});
|
|
|
| Future run() {
|
| var crawler = new ImportCrawler(transform, primaryInput, logger);
|
| @@ -58,7 +63,8 @@ class ImportInliner {
|
| var primaryDocument = imports[primaryInput].document;
|
|
|
| // Normalize urls in the entry point.
|
| - var changed = new _UrlNormalizer(primaryInput, primaryInput, logger)
|
| + var changed = new _UrlNormalizer(
|
| + primaryInput, primaryInput, logger, bindingStartDelimiters)
|
| .visit(primaryDocument);
|
|
|
| // Inline things if needed, always have at least one (the entry point).
|
| @@ -104,7 +110,8 @@ class ImportInliner {
|
| .querySelectorAll('script[type="$dartType"]')
|
| .forEach((script) => script.remove());
|
| // Normalize urls in attributes and inline css.
|
| - new _UrlNormalizer(data.fromId, asset, logger).visit(document);
|
| + new _UrlNormalizer(data.fromId, asset, logger, bindingStartDelimiters)
|
| + .visit(document);
|
| // Replace the import with its contents by appending the nodes
|
| // immediately before the import one at a time, and then removing the
|
| // import from the document.
|
| @@ -173,9 +180,15 @@ class _UrlNormalizer extends TreeVisitor {
|
| /// Whether or not the normalizer has changed something in the tree.
|
| bool changed = false;
|
|
|
| + // The start delimiters for template bindings, such as '{{' or '[['. If these
|
| + // are found before the first `/` in a url, then the url will not be
|
| + // normalized.
|
| + final List<String> bindingStartDelimiters;
|
| +
|
| final BuildLogger logger;
|
|
|
| - _UrlNormalizer(AssetId primaryInput, this.sourceId, this.logger)
|
| + _UrlNormalizer(AssetId primaryInput, this.sourceId, this.logger,
|
| + this.bindingStartDelimiters)
|
| : primaryInput = primaryInput,
|
| topLevelPath = '../' * (path.url.split(primaryInput.path).length - 2);
|
|
|
| @@ -249,6 +262,10 @@ class _UrlNormalizer extends TreeVisitor {
|
| hrefToParse = '${href.substring(0, firstFolder + 1)}';
|
| }
|
|
|
| + // If we found a binding before the first `/`, then just return the original
|
| + // href, we can't determine anything about it.
|
| + if (bindingStartDelimiters.any((d) => hrefToParse.contains(d))) return href;
|
| +
|
| Uri uri;
|
| // Various template systems introduce invalid characters to uris which would
|
| // be typically replaced at runtime. Parse errors are assumed to be caused
|
|
|