| Index: lib/src/codegen/html_codegen.dart
|
| diff --git a/lib/src/codegen/html_codegen.dart b/lib/src/codegen/html_codegen.dart
|
| index f080611a96b823012e2e9793a5b1c069e4004276..44c137601e67312cf788f924ecd0fbaffe652f11 100644
|
| --- a/lib/src/codegen/html_codegen.dart
|
| +++ b/lib/src/codegen/html_codegen.dart
|
| @@ -4,14 +4,13 @@
|
|
|
| library ddc.src.codegen.html_codegen;
|
|
|
| -import 'dart:io';
|
| -
|
| import 'package:html5lib/dom.dart';
|
| import 'package:html5lib/parser.dart' show parseFragment;
|
| -import 'package:path/path.dart' as path;
|
| +import 'package:logging/logging.dart' show Logger;
|
|
|
| -import 'package:dev_compiler/src/info.dart';
|
| +import 'package:dev_compiler/src/dependency_graph.dart';
|
| import 'package:dev_compiler/src/options.dart';
|
| +import 'package:dev_compiler/src/utils.dart' show colorOf;
|
|
|
| import 'js_codegen.dart' show jsLibraryName, jsOutputPath;
|
|
|
| @@ -24,40 +23,48 @@ import 'js_codegen.dart' show jsLibraryName, jsOutputPath;
|
| /// application. When compiling to Dart, we ensure that the document contains a
|
| /// single Dart script tag, but otherwise emit the original document
|
| /// unmodified.
|
| -void generateEntryHtml(String inputFile, CompilerOptions options,
|
| - CheckerResults results, Document document) {
|
| - String outputFile = path.join(options.outputDir, path.basename(inputFile));
|
| -
|
| +String generateEntryHtml(HtmlSourceNode root, CompilerOptions options) {
|
| + var document = root.document.clone(true);
|
| var scripts = document.querySelectorAll('script[type="application/dart"]');
|
| - var mainScript = scripts[0];
|
| - // TODO(sigmund): allow more than one Dart script tags?
|
| - scripts.skip(1).forEach((s) => s.remove());
|
| -
|
| - if (options.outputDart) {
|
| - new File(outputFile).writeAsStringSync('${document.outerHtml}\n');
|
| - return;
|
| + if (scripts.isEmpty) {
|
| + _log.severe('No <script type="application/dart"> found in ${root.uri}');
|
| + return null;
|
| }
|
| + scripts.skip(1).forEach((s) {
|
| + // TODO(sigmund): allow more than one Dart script tags?
|
| + _log.warning(s.sourceSpan.message(
|
| + 'unexpected script. Only one Dart script tag allowed '
|
| + '(see https://github.com/dart-lang/dart-dev-compiler/issues/53).',
|
| + color: options.useColors ? colorOf('warning') : false));
|
| + s.remove();
|
| + });
|
| +
|
| + if (options.outputDart) return '${document.outerHtml}\n';
|
| +
|
| + var libraries = [];
|
| + visitInPostOrder(root, (n) {
|
| + if (n is LibrarySourceNode) libraries.add(n);
|
| + });
|
|
|
| String mainLibraryName;
|
| - var pathToDdc = path.dirname(path
|
| - .dirname(path.relative(Platform.script.path, from: options.outputDir)));
|
| - var fragment = _loadRuntimeScripts(path.join(pathToDdc, 'lib'));
|
| + var fragment = _loadRuntimeScripts();
|
| if (!options.checkSdk) fragment.nodes.add(_miniMockSdk);
|
| - var root = new Uri.file(path.absolute(inputFile));
|
| - for (var lib in results.libraries) {
|
| - if (lib.isEntry) mainLibraryName = jsLibraryName(lib.library);
|
| - fragment.nodes.add(_libraryInclude(jsOutputPath(lib, root)));
|
| + for (var lib in libraries) {
|
| + var info = lib.info;
|
| + if (info == null) continue;
|
| + if (info.isEntry) mainLibraryName = jsLibraryName(info.library);
|
| + fragment.nodes.add(_libraryInclude(jsOutputPath(info, root.uri)));
|
| }
|
| fragment.nodes.add(_invokeMain(mainLibraryName));
|
| - mainScript.replaceWith(fragment);
|
| - new File(outputFile).writeAsStringSync('${document.outerHtml}\n');
|
| + scripts[0].replaceWith(fragment);
|
| + return '${document.outerHtml}\n';
|
| }
|
|
|
| /// A document fragment with scripts that check for harmony features and that
|
| /// inject our runtime.
|
| -Node _loadRuntimeScripts(String ddcLibDir) => parseFragment('''
|
| -<script src="$ddcLibDir/runtime/harmony_feature_check.js"></script>
|
| -<script src="$ddcLibDir/runtime/dart_runtime.js"></script>
|
| +Node _loadRuntimeScripts() => parseFragment('''
|
| +<script src="dev_compiler/runtime/harmony_feature_check.js"></script>
|
| +<script src="dev_compiler/runtime/dart_runtime.js"></script>
|
| ''');
|
|
|
| /// A script tag that loads the .js code for a compiled library.
|
| @@ -78,3 +85,4 @@ Node get _miniMockSdk => parseFragment('''
|
| var core = { int: { parse: Number }, print: e => console.log(e) };
|
| var dom = { document: document };
|
| </script>''');
|
| +final _log = new Logger('ddc.src.codegen.html_codegen');
|
|
|