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

Unified Diff: modules/angular2/src/transform/html_transform.dart

Issue 927373004: Initial commit of Dart transformer to generate constructor stubs, see https://github.com/angular/an… (Closed) Base URL: https://github.com/kegluneq/angular.git@master
Patch Set: Created 5 years, 10 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
Index: modules/angular2/src/transform/html_transform.dart
diff --git a/modules/angular2/src/transform/html_transform.dart b/modules/angular2/src/transform/html_transform.dart
new file mode 100644
index 0000000000000000000000000000000000000000..dcfbf7ee1132e0973980df89607ee2868dcc6880
--- /dev/null
+++ b/modules/angular2/src/transform/html_transform.dart
@@ -0,0 +1,52 @@
+library angular2.transformer;
+
+import 'dart:async';
+import 'package:barback/barback.dart';
+import 'package:html5lib/dom.dart' as dom;
+import 'package:html5lib/parser.dart' show parse;
+import 'package:path/path.dart' as path;
+
+import 'options.dart';
+
+Future transformHtmlEntryPoint(
+ TransformerOptions options, Transform transform) {
+ // For now at least, [options.htmlEntryPoint], [options.entryPoint], and
+ // [options.newEntryPoint] need to be in the same folder.
+ // TODO(jakemac): support package urls with [options.entryPoint] or
jakemac 2015/02/18 16:18:50 The initialize package now handles this, up to you
tjblasi 2015/02/18 21:18:25 Acknowledged.
+ // [options.newEntryPoint] in `lib`, and [options.htmlEntryPoint] in another
+ // directory.
+ var _expectedDir = path.split(options.htmlEntryPoint)[0];
+ if (!options.inSameTopLevelDir()) {
+ transform.logger.error(
+ '${options.htmlEntryPointParam}, ${options.entryPointParam}, and '
+ '${options.newEntryPointParam} (if supplied) all must be in the '
+ 'same top level directory.');
+ }
+
+ // The relative path from [options.htmlEntryPoint] to [dartEntry]. You must
+ // ensure that neither of these is null before calling this function.
+ String _relativeDartEntryPath(String dartEntry) =>
+ path.relative(dartEntry, from: path.dirname(options.htmlEntryPoint));
+
+ // Checks if the src of this script tag is pointing at `options.entryPoint`.
+ bool _isEntryPointScript(dom.Element script) =>
+ path.normalize(script.attributes['src']) ==
+ _relativeDartEntryPath(options.entryPoint);
+
+ return transform.primaryInput.readAsString().then((String html) {
+ var found = false;
+ var doc = parse(html);
+ var scripts = doc.querySelectorAll('script[type="application/dart"]');
+ for (dom.Element script in scripts) {
+ if (!_isEntryPointScript(script)) continue;
+ script.attributes['src'] = _relativeDartEntryPath(options.newEntryPoint);
+ found = true;
+ }
+ if (!found) {
+ transform.logger.error('Unable to find script for ${options.entryPoint} '
+ 'in ${options.htmlEntryPoint}.');
+ }
+ return transform.addOutput(
+ new Asset.fromString(transform.primaryInput.id, doc.outerHtml));
+ });
+}

Powered by Google App Engine
This is Rietveld 408576698