Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(175)

Unified Diff: pkg/polymer/lib/src/build/import_inliner.dart

Issue 293023008: Bring back initPolymer, allow boot.js only if using "polymer_experimental.html". (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/polymer/lib/src/build/common.dart ('k') | pkg/polymer/lib/src/build/linter.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/polymer/lib/src/build/import_inliner.dart
diff --git a/pkg/polymer/lib/src/build/import_inliner.dart b/pkg/polymer/lib/src/build/import_inliner.dart
index e785315bd126d9805b88e4919f5752a6f4931d1c..c5624d1184926c96febfea70c6debdc0e06795b1 100644
--- a/pkg/polymer/lib/src/build/import_inliner.dart
+++ b/pkg/polymer/lib/src/build/import_inliner.dart
@@ -29,6 +29,7 @@ class _HtmlInliner extends PolymerTransformer {
final seen = new Set<AssetId>();
final scriptIds = <AssetId>[];
final extractedFiles = new Set<AssetId>();
+ bool experimentalBootstrap = false;
/// The number of extracted inline Dart scripts. Used as a counter to give
/// unique-ish filenames.
@@ -47,8 +48,9 @@ class _HtmlInliner extends PolymerTransformer {
return readPrimaryAsHtml(transform).then((doc) {
document = doc;
- // Add the main script's ID, or null if none is present.
- // This will be used by ScriptCompactor.
+ experimentalBootstrap = document.querySelectorAll('link').any((link) =>
+ link.attributes['rel'] == 'import' &&
+ link.attributes['href'] == POLYMER_EXPERIMENTAL_HTML);
changed = _extractScripts(document, docId);
return _visitImports(document);
}).then((importsFound) {
@@ -63,8 +65,11 @@ class _HtmlInliner extends PolymerTransformer {
// We produce a secondary asset with extra information for later phases.
transform.addOutput(new Asset.fromString(
- docId.addExtension('.scriptUrls'),
- JSON.encode(scriptIds, toEncodable: (id) => id.serialize())));
+ docId.addExtension('._data'),
+ JSON.encode({
+ 'experimental_bootstrap': experimentalBootstrap,
+ 'script_ids': scriptIds,
+ }, toEncodable: (id) => id.serialize())));
});
}
@@ -125,8 +130,7 @@ class _HtmlInliner extends PolymerTransformer {
var type = node.attributes['type'];
var rel = node.attributes['rel'];
if (tag == 'style' || tag == 'script' &&
- (type == null || type == TYPE_JS || type == TYPE_DART_APP ||
- type == TYPE_DART_COMPONENT) ||
+ (type == null || type == TYPE_JS || type == TYPE_DART) ||
tag == 'link' && (rel == 'stylesheet' || rel == 'import')) {
// Move the node into the body, where its contents will be placed.
doc.body.insertBefore(node, insertionPoint);
@@ -158,15 +162,14 @@ class _HtmlInliner extends PolymerTransformer {
});
}
- /// Remove "application/dart;component=1" scripts and remember their
- /// [AssetId]s for later use.
+ /// Remove all Dart scripts and remember their [AssetId]s for later use.
///
/// Dartium only allows a single script tag per page, so we can't inline
/// the script tags. Instead we remove them entirely.
Future<bool> _removeScripts(Document doc) {
bool changed = false;
return Future.forEach(doc.querySelectorAll('script'), (script) {
- if (script.attributes['type'] == TYPE_DART_COMPONENT) {
+ if (script.attributes['type'] == TYPE_DART) {
changed = true;
script.remove();
var src = script.attributes['src'];
@@ -197,16 +200,8 @@ class _HtmlInliner extends PolymerTransformer {
/// This also validates that there weren't any duplicate scripts.
bool _extractScripts(Document doc, AssetId sourceId) {
bool changed = false;
- bool first = true;
for (var script in doc.querySelectorAll('script')) {
- var type = script.attributes['type'];
- if (type != TYPE_DART_COMPONENT && type != TYPE_DART_APP) continue;
-
- // only one Dart script per document is supported in Dartium.
- if (type == TYPE_DART_APP) {
- if (!first) logger.warning(COMPONENT_WARNING, span: script.sourceSpan);
- first = false;
- }
+ if (script.attributes['type'] != TYPE_DART) continue;
var src = script.attributes['src'];
if (src != null) continue;
@@ -274,8 +269,7 @@ class ImportInliner extends Transformer {
new _HtmlInliner(options, transform).apply();
}
-const TYPE_DART_APP = 'application/dart';
-const TYPE_DART_COMPONENT = 'application/dart;component=1';
+const TYPE_DART = 'application/dart';
const TYPE_JS = 'text/javascript';
/// Internally adjusts urls in the html that we are about to inline.
@@ -297,13 +291,11 @@ class _UrlNormalizer extends TreeVisitor {
});
if (node.localName == 'style') {
node.text = visitCss(node.text);
- } else if (node.localName == 'script') {
- var type = node.attributes['type'];
+ } else if (node.localName == 'script' &&
+ node.attributes['type'] == TYPE_DART) {
// TODO(jmesserly): we might need to visit JS too to handle ES Harmony
// modules.
- if (type == TYPE_DART_APP || type == TYPE_DART_COMPONENT) {
- node.text = visitInlineDart(node.text);
- }
+ node.text = visitInlineDart(node.text);
}
super.visitElement(node);
}
@@ -410,10 +402,3 @@ const _urlAttributes = const [
];
_getSpan(SourceFile file, AstNode node) => file.span(node.offset, node.end);
-
-const COMPONENT_WARNING =
- 'More than one Dart script per HTML document is not supported, but in the '
- 'near future Dartium will execute each tag as a separate isolate. If this '
- 'code is meant to load definitions that are part of the same application '
- 'you should switch it to use the "application/dart;component=1" mime-type '
- 'instead.';
« no previous file with comments | « pkg/polymer/lib/src/build/common.dart ('k') | pkg/polymer/lib/src/build/linter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698