| Index: pkg/polymer/lib/boot.js
|
| diff --git a/pkg/polymer/lib/boot.js b/pkg/polymer/lib/boot.js
|
| index a4a148e3c3a6f72d7cb8e6113ec6f8f2f1f9eb92..62d72a7cac5ea429a3d5ae9a6b4fab193d518cdb 100644
|
| --- a/pkg/polymer/lib/boot.js
|
| +++ b/pkg/polymer/lib/boot.js
|
| @@ -2,55 +2,35 @@
|
| // for details. All rights reserved. Use of this source code is governed by a
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| -/// Bootstrap to initialize polymer applications. This library is will be
|
| -/// replaced by boot.dart in the near future (see dartbug.com/18007).
|
| +/// Experimental bootstrap to initialize polymer applications. This library is
|
| +/// not used by default, and may be replaced by Dart code in the near future.
|
| ///
|
| /// This script contains logic to bootstrap polymer apps during development. It
|
| -/// internally discovers special Dart script tags through HTML imports, and
|
| -/// constructs a new entrypoint for the application that is then launched in an
|
| -/// isolate.
|
| +/// internally discovers Dart script tags through HTML imports, and constructs
|
| +/// a new entrypoint for the application that is then launched in an isolate.
|
| ///
|
| /// For each script tag found, we will load the corresponding Dart library and
|
| /// execute all methods annotated with `@initMethod` and register all classes
|
| /// labeled with `@CustomTag`. We keep track of the order of imports and execute
|
| /// initializers in the same order.
|
| ///
|
| -/// All polymer applications use this bootstrap logic. It is included
|
| -/// automatically when you include the polymer.html import:
|
| +/// You can this experimental bootstrap logic by including the
|
| +/// polymer_experimental.html import, instead of polymer.html:
|
| ///
|
| -/// <link rel="import" href="packages/polymer/polymer.html">
|
| +/// <link rel="import" href="packages/polymer/polymer_experimental.html">
|
| ///
|
| -/// There are two important changes compared to previous versions of polymer
|
| -/// (0.10.0-pre.6 and older):
|
| -///
|
| -/// * Use 'application/dart;component=1' instead of 'application/dart':
|
| -/// Dartium already limits to have a single script tag per document, but it
|
| -/// will be changing semantics soon and make them even stricter. Multiple
|
| -/// script tags are not going to be running on the same isolate after this
|
| -/// change. For polymer applications we'll use a parameter on the script tags
|
| -/// mime-type to prevent Dartium from loading them separately. Instead this
|
| -/// bootstrap script combines those special script tags and creates the
|
| -/// application Dartium needs to run.
|
| -///
|
| -// If you had:
|
| -///
|
| -/// <polymer-element name="x-foo"> ...
|
| -/// <script type="application/dart" src="x_foo.dart'></script>
|
| -///
|
| -/// Now you need to write:
|
| -///
|
| -/// <polymer-element name="x-foo"> ...
|
| -/// <script type="application/dart;component=1" src="x_foo.dart'></script>
|
| -///
|
| -/// * `initPolymer` is gone: we used to initialize applications in two
|
| -/// possible ways: using `init.dart` or invoking initPolymer in your main. Any
|
| -/// of these initialization patterns can be replaced to use an `@initMethod`
|
| -/// instead. For example, If you need to run some initialization code before
|
| -/// any other code is executed, include a "application/dart;component=1"
|
| -/// script tag that contains an initializer method with the body of your old
|
| -/// main, and make sure this tag is placed above other html-imports that load
|
| -/// the rest of the application. Initialization methods are executed in the
|
| -/// order in which they are discovered in the HTML document.
|
| +/// This bootstrap replaces `initPolymer` so Dart code might need to be changed
|
| +/// too. If you loaded init.dart directly, you can remove it. But if you invoke
|
| +/// initPolymer in your main, you should remove that call and change to use
|
| +/// `@initMethod` instead. The current bootstrap doesn't support having Dart
|
| +/// script tags in the main page, so you may need to move some code into an HTML
|
| +/// import. For example, If you need to run some initialization code before any
|
| +/// other code is executed, include an HTML import to an html file with a
|
| +/// "application/dart" script tag that contains an initializer
|
| +/// method with the body of your old main, and make sure this tag is placed
|
| +/// above other html-imports that load the rest of the application.
|
| +/// Initialization methods are executed in the order in which they are
|
| +/// discovered in the HTML document.
|
| (function() {
|
| // Only run in Dartium.
|
| if (navigator.userAgent.indexOf('(Dart)') === -1) return;
|
| @@ -91,7 +71,7 @@
|
| '}\n');
|
| }
|
|
|
| - function discoverScripts(content, state) {
|
| + function discoverScripts(content, state, importedDoc) {
|
| if (!state) {
|
| // internal state tracking documents we've visited, the resulting list of
|
| // scripts, and any tags with the incorrect mime-type.
|
| @@ -111,12 +91,12 @@
|
|
|
| if (state.seen[node.href]) continue;
|
| state.seen[node.href] = node;
|
| - discoverScripts(node.import, state);
|
| + discoverScripts(node.import, state, true);
|
| } else if (node instanceof HTMLScriptElement) {
|
| - if (node.type == 'application/dart;component=1') {
|
| + if (node.type != 'application/dart') continue;
|
| + if (importedDoc) {
|
| state.scripts.push(getScriptUrl(node));
|
| - }
|
| - if (node.type == 'application/dart') {
|
| + } else {
|
| state.badTags.push(node);
|
| }
|
| }
|
| @@ -133,11 +113,11 @@
|
|
|
| var results = discoverScripts(document);
|
| if (results.badTags.length > 0) {
|
| - console.warn('Dartium currently only allows a single Dart script tag '
|
| - + 'per application, and in the future it will run them in '
|
| - + 'separtate isolates. To prepare for this all the following '
|
| - + 'script tags need to be updated to use the mime-type '
|
| - + '"application/dart;component=1" instead of "application/dart":');
|
| + console.warn('The experimental polymer boostrap does not support '
|
| + + 'having script tags in the main document. You can move the script '
|
| + + 'tag to an HTML import instead. Also make sure your script tag '
|
| + + 'doesn\'t have a main, but a top-level method marked with '
|
| + + '@initMethod instead');
|
| for (var i = 0; i < results.badTags.length; i++) {
|
| console.warn(results.badTags[i]);
|
| }
|
|
|