Index: lib/src/codegen/html_codegen.dart |
diff --git a/lib/src/codegen/html_codegen.dart b/lib/src/codegen/html_codegen.dart |
index cd594d43afb69964971539cc7d12974753707dd4..fd5e4966226c641d847deecb0cbfc88ba5399218 100644 |
--- a/lib/src/codegen/html_codegen.dart |
+++ b/lib/src/codegen/html_codegen.dart |
@@ -5,110 +5,6 @@ |
import 'package:html/dom.dart'; |
import 'package:html/parser.dart' show parseFragment; |
import 'package:logging/logging.dart' show Logger; |
-import 'package:path/path.dart' as path; |
- |
-import '../compiler.dart' show AbstractCompiler; |
-import '../server/dependency_graph.dart'; |
-import '../utils.dart' show colorOf, resourceOutputPath; |
- |
-/// Emits an entry point HTML file corresponding to [inputFile] that can load |
-/// the code generated by the dev compiler. |
-/// |
-/// This internally transforms the given HTML [document]. When compiling to |
-/// JavaScript, we remove any Dart script tags, add new script tags to load our |
-/// runtime and the compiled code, and to execute the main method of the |
-/// application. When compiling to Dart, we ensure that the document contains a |
-/// single Dart script tag, but otherwise emit the original document |
-/// unmodified. |
-String generateEntryHtml(HtmlSourceNode root, AbstractCompiler compiler) { |
- var options = compiler.options; |
- var document = root.document.clone(true); |
- var scripts = document.querySelectorAll('script[type="application/dart"]'); |
- if (scripts.isEmpty) { |
- _log.warning('No <script type="application/dart"> found in ${root.uri}'); |
- // TODO(jacobr): we would rather return document.outerHtml to avoid future |
- // bugs that would only show up with html files include references to Dart |
- // scripts. Passing through the input content is needed to avoid breaking |
- // Angular ecause the spec-compliant HTML parser used modifies the HTML |
- // in a way that breaks Angular templates. An alternate fix would be to |
- // write an HTML emitter that preserves the structure of the input HTML as |
- // much as possible. |
- return root.contents; |
- } |
- 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(); |
- }); |
- |
- var libraries = []; |
- var resources = new Set(); |
- visitInPostOrder(root, (n) { |
- if (n is DartSourceNode) libraries.add(n); |
- if (n is ResourceSourceNode) resources.add(n); |
- }, includeParts: false); |
- |
- root.htmlResourceNodes.forEach((element, resource) { |
- // Make sure we don't try and add this node again. |
- resources.remove(resource); |
- |
- var resourcePath = |
- resourceOutputPath(resource.uri, root.uri, options.runtimeDir); |
- if (resource.cachingHash != null) { |
- resourcePath = _addHash(resourcePath, resource.cachingHash); |
- } |
- var attrs = element.attributes; |
- if (attrs.containsKey('href')) { |
- attrs['href'] = resourcePath; |
- } else if (attrs.containsKey('src')) { |
- attrs['src'] = resourcePath; |
- } |
- }); |
- |
- var rootDir = path.dirname(root.uri.path); |
- String rootRelative(String fullPath) { |
- return path.relative(path.join(compiler.inputBaseDir, fullPath), |
- from: rootDir); |
- } |
- |
- var fragment = new DocumentFragment(); |
- for (var resource in resources) { |
- var resourcePath = rootRelative( |
- resourceOutputPath(resource.uri, root.uri, options.runtimeDir)); |
- var ext = path.extension(resourcePath); |
- if (resource.cachingHash != null) { |
- resourcePath = _addHash(resourcePath, resource.cachingHash); |
- } |
- if (ext == '.js') { |
- fragment.nodes.add(libraryInclude(resourcePath)); |
- } else if (ext == '.css') { |
- var stylesheetLink = '<link rel="stylesheet" href="$resourcePath">\n'; |
- fragment.nodes.add(parseFragment(stylesheetLink)); |
- } |
- } |
- |
- String mainLibraryName; |
- var src = scripts[0].attributes["src"]; |
- var scriptUri = root.source.resolveRelativeUri(Uri.parse(src)); |
- |
- for (var lib in libraries) { |
- var info = lib.info; |
- if (info == null) continue; |
- var uri = info.library.source.uri; |
- var jsPath = rootRelative(compiler.getModulePath(uri)); |
- if (uri == scriptUri) mainLibraryName = compiler.getModuleName(uri); |
- if (lib.cachingHash != null) { |
- jsPath = _addHash(jsPath, lib.cachingHash); |
- } |
- fragment.nodes.add(libraryInclude(jsPath)); |
- } |
- fragment.nodes.add(invokeMain(mainLibraryName)); |
- scripts[0].replaceWith(fragment); |
- return '${document.outerHtml}\n'; |
-} |
// TODO(jmesserly): the string interpolation in these could lead to injection |
// bugs. Not really a security issue since input is trusted, but the resulting |
@@ -128,12 +24,4 @@ Node invokeMain(String mainLibraryName) { |
return parseFragment('<script>$code</script>\n'); |
} |
-/// Convert the outputPath to include the hash in it. This function is the |
-/// reverse of what the server does to determine whether a request needs to have |
-/// cache headers added to it. |
-_addHash(String outPath, String hash) { |
- // (the ____ prefix makes it look better in the web inspector) |
- return '$outPath?____cached=$hash'; |
-} |
- |
final _log = new Logger('dev_compiler.src.codegen.html_codegen'); |