Index: pkg/polymer/lib/src/transform/script_compactor.dart |
diff --git a/pkg/polymer/lib/src/transform/script_compactor.dart b/pkg/polymer/lib/src/transform/script_compactor.dart |
index aa147289861c3a26a5b1a2c0124bddf45aff0554..9c2550aed4cbecb75cbb565d08f3e6457bd1d28a 100644 |
--- a/pkg/polymer/lib/src/transform/script_compactor.dart |
+++ b/pkg/polymer/lib/src/transform/script_compactor.dart |
@@ -38,11 +38,22 @@ class ScriptCompactor extends Transformer { |
var document = parseHtml(content, id.path, logger); |
var libraries = []; |
bool changed = false; |
+ var dartLoaderTag = null; |
for (var tag in document.queryAll('script')) { |
+ var src = tag.attributes['src']; |
+ if (src != null) { |
+ if (src == 'packages/polymer/boot.js') { |
+ tag.remove(); |
+ continue; |
+ } |
+ var last = src.split('/').last; |
+ if (last == 'dart.js' || last == 'testing.js') { |
+ dartLoaderTag = tag; |
+ } |
+ } |
if (tag.attributes['type'] != 'application/dart') continue; |
tag.remove(); |
changed = true; |
- var src = tag.attributes['src']; |
if (src == null) { |
logger.warning('unexpected script without a src url. The ' |
'ScriptCompactor transformer should run after running the ' |
@@ -63,8 +74,18 @@ class ScriptCompactor extends Transformer { |
var bootstrapId = id.addExtension('_bootstrap.dart'); |
var filename = path.url.basename(bootstrapId.path); |
- document.body.nodes.add(parseFragment( |
- '<script type="application/dart" src="$filename"></script>')); |
+ |
+ var bootstrapScript = parseFragment( |
+ '<script type="application/dart" src="$filename"></script>'); |
+ if (dartLoaderTag == null) { |
+ document.body.nodes.add(bootstrapScript); |
+ document.body.nodes.add(parseFragment('<script type="text/javascript" ' |
+ 'src="packages/browser/dart.js"></script>')); |
+ } else if (dartLoaderTag.parent != document.body) { |
+ document.body.nodes.add(bootstrapScript); |
+ } else { |
+ document.body.insertBefore(bootstrapScript, dartLoaderTag); |
+ } |
var urls = libraries.map((id) => importUrlFor(id, bootstrapId, logger)) |
.where((url) => url != null).toList(); |
@@ -97,11 +118,9 @@ class ScriptCompactor extends Transformer { |
return null; |
} |
- var urlBuilder = path.url; |
- var upPath = urlBuilder.joinAll( |
- urlBuilder.split(sourceId.path).map((_) => '..')); |
- return urlBuilder.normalize( |
- urlBuilder.join(sourceId.path, upPath, id.path)); |
+ var builder = path.url; |
+ return builder.relative(builder.join('/', id.path), |
+ from: builder.join('/', builder.dirname(sourceId.path))); |
} |
} |