append html imports before the dart script tag
R=sigmund@google.com
Review URL: https://codereview.chromium.org//993673002
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f1be1f8..4f998f4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+#### 0.10.5+2
+ * Append html imports in front of the dart script tag, if one exists in
+ `document.head`.
+
#### 0.10.5+1
* Fix @HtmlImport with relative paths from within folders in deployment mode.
diff --git a/lib/build/web_components.dart b/lib/build/web_components.dart
index d1028b2..a5bf002 100644
--- a/lib/build/web_components.dart
+++ b/lib/build/web_components.dart
@@ -32,10 +32,14 @@
resolver, transform, scriptId, newScriptId,
errorIfNotFound: false, plugins: plugins);
- // Add all seen imports to the document.
+ // Add all seen imports to the document, before the first dart script tag if
+ // it exists.
+ var dartScript =
+ document.head.querySelector('script[type="application/dart"]');
for (var importPath in htmlImportRecorder.importPaths) {
- document.head.append(new dom.Element.tag('link')
- ..attributes = {'rel': 'import', 'href': importPath,});
+ var import = new dom.Element.tag('link')
+ ..attributes = {'rel': 'import', 'href': importPath,};
+ document.head.insertBefore(import, dartScript);
}
return initializeBootstrap;
diff --git a/pubspec.yaml b/pubspec.yaml
index ebc2995..d26edac 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
name: web_components
-version: 0.10.5+1
+version: 0.10.5+2
author: Polymer.dart Authors <web-ui-dev@dartlang.org>
homepage: https://www.dartlang.org/polymer-dart/
description: >
diff --git a/test/build/transformer_test.dart b/test/build/transformer_test.dart
index bafdbcb..369dc58 100644
--- a/test/build/transformer_test.dart
+++ b/test/build/transformer_test.dart
@@ -118,4 +118,58 @@
bar() {}
''',
}, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+ testPhases('imports go above the dart script', phases, {
+ 'b|web/index.html': '''
+ <!DOCTYPE html>
+ <html>
+ <head>
+ <script>var x;</script>
+ <script type="application/dart" src="index.dart"></script>
+ <script>var y;</script>
+ </head>
+ <body>
+ </body>
+ </html>
+ ''',
+ 'b|web/index.dart': '''
+ @HtmlImport('package:b/b.html')
+ library b;
+
+ import 'package:web_components/html_import_annotation.dart';
+ import 'package:c/c.dart';
+ ''',
+ 'b|lib/b.html': '''
+ <div>b</div>
+ ''',
+ 'c|lib/c.dart': '''
+ @HtmlImport('c.html')
+ library c;
+
+ import 'package:web_components/html_import_annotation.dart';
+ ''',
+ 'c|lib/c.html': '''
+ <div>c</div>
+ ''',
+ 'initialize|lib/initialize.dart': mockInitialize,
+ 'web_components|lib/html_import_annotation.dart': mockHtmlImportAnnotation,
+ }, {
+ 'b|web/index.html': '''
+ <!DOCTYPE html>
+ <html>
+ <head>
+ <script>var x;</script>
+ </head>
+ <body>
+ <div hidden="">
+ <div>c</div>
+ <div>b</div>
+ <script type="application/dart" src="index.bootstrap.initialize.dart">
+ </script>
+ <script>var y;</script>
+ </div>
+ </body>
+ </html>
+ ''',
+ }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
}