Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /// Transfomer that combines multiple dart script tags into a single one. | 5 /// Transfomer that combines multiple dart script tags into a single one. |
| 6 library polymer.src.build.script_compactor; | 6 library polymer.src.build.script_compactor; |
| 7 | 7 |
| 8 import 'dart:async'; | 8 import 'dart:async'; |
| 9 import 'dart:convert'; | 9 import 'dart:convert'; |
| 10 | 10 |
| 11 import 'package:html5lib/dom.dart' show Document, Element, Text; | 11 import 'package:html5lib/dom.dart' show Document, Element, Text; |
| 12 import 'package:html5lib/dom_parsing.dart'; | 12 import 'package:html5lib/dom_parsing.dart'; |
| 13 import 'package:html5lib/parser.dart' show parseFragment; | 13 import 'package:html5lib/parser.dart' show parseFragment; |
| 14 import 'package:analyzer/src/generated/ast.dart'; | 14 import 'package:analyzer/src/generated/ast.dart'; |
| 15 import 'package:analyzer/src/generated/element.dart' hide Element; | 15 import 'package:analyzer/src/generated/element.dart' hide Element; |
| 16 import 'package:analyzer/src/generated/element.dart' as analyzer show Element; | 16 import 'package:analyzer/src/generated/element.dart' as analyzer show Element; |
| 17 import 'package:barback/barback.dart'; | 17 import 'package:barback/barback.dart'; |
| 18 import 'package:path/path.dart' as path; | 18 import 'package:path/path.dart' as path; |
| 19 import 'package:source_maps/span.dart' show SourceFile, Span; | 19 import 'package:source_span/source_span.dart'; |
| 20 import 'package:smoke/codegen/generator.dart'; | 20 import 'package:smoke/codegen/generator.dart'; |
| 21 import 'package:smoke/codegen/recorder.dart'; | 21 import 'package:smoke/codegen/recorder.dart'; |
| 22 import 'package:code_transformers/resolver.dart'; | 22 import 'package:code_transformers/resolver.dart'; |
| 23 import 'package:code_transformers/src/dart_sdk.dart'; | 23 import 'package:code_transformers/src/dart_sdk.dart'; |
| 24 import 'package:template_binding/src/mustache_tokens.dart' show MustacheTokens; | 24 import 'package:template_binding/src/mustache_tokens.dart' show MustacheTokens; |
| 25 | 25 |
| 26 import 'package:polymer_expressions/expression.dart' as pe; | 26 import 'package:polymer_expressions/expression.dart' as pe; |
| 27 import 'package:polymer_expressions/parser.dart' as pe; | 27 import 'package:polymer_expressions/parser.dart' as pe; |
| 28 import 'package:polymer_expressions/visitor.dart' as pe; | 28 import 'package:polymer_expressions/visitor.dart' as pe; |
| 29 | 29 |
| (...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 495 final AssetId assetId; | 495 final AssetId assetId; |
| 496 final String tagName; | 496 final String tagName; |
| 497 final String typeName; | 497 final String typeName; |
| 498 String get symbolName => typeName; | 498 String get symbolName => typeName; |
| 499 _CustomTagInitializer(this.assetId, this.tagName, this.typeName); | 499 _CustomTagInitializer(this.assetId, this.tagName, this.typeName); |
| 500 | 500 |
| 501 String asCode(String prefix) => | 501 String asCode(String prefix) => |
| 502 "() => Polymer.register('$tagName', $prefix.$typeName)"; | 502 "() => Polymer.register('$tagName', $prefix.$typeName)"; |
| 503 } | 503 } |
| 504 | 504 |
| 505 _getSpan(SourceFile file, AstNode node) => file.span(node.offset, node.end); | 505 _getSpan(SourceFile file, AstNode node) => file.span(node.offset, node.end); |
|
Siggi Cherem (dart-lang)
2014/07/29 23:41:37
let's delete this line
nweiz
2014/07/29 23:48:39
Done.
| |
| 506 | 506 |
| 507 const MAIN_HEADER = """ | 507 const MAIN_HEADER = """ |
| 508 library app_bootstrap; | 508 library app_bootstrap; |
| 509 | 509 |
| 510 import 'package:polymer/polymer.dart'; | 510 import 'package:polymer/polymer.dart'; |
| 511 """; | 511 """; |
| 512 | 512 |
| 513 const NO_INITIALIZERS_ERROR = | 513 const NO_INITIALIZERS_ERROR = |
| 514 'No polymer initializers were found. Make sure to either ' | 514 'No polymer initializers were found. Make sure to either ' |
| 515 'annotate your polymer elements with @CustomTag or include a ' | 515 'annotate your polymer elements with @CustomTag or include a ' |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 588 tag == 'select' && (name == 'selectedindex' || name == 'value') || | 588 tag == 'select' && (name == 'selectedindex' || name == 'value') || |
| 589 tag == 'textarea' && name == 'value'); | 589 tag == 'textarea' && name == 'value'); |
| 590 } | 590 } |
| 591 for (var exp in bindings.expressions) { | 591 for (var exp in bindings.expressions) { |
| 592 _addExpression(exp, isEvent, isTwoWay, node.sourceSpan); | 592 _addExpression(exp, isEvent, isTwoWay, node.sourceSpan); |
| 593 } | 593 } |
| 594 }); | 594 }); |
| 595 } | 595 } |
| 596 | 596 |
| 597 void _addExpression(String stringExpression, bool inEvent, bool isTwoWay, | 597 void _addExpression(String stringExpression, bool inEvent, bool isTwoWay, |
| 598 Span span) { | 598 SourceSpan span) { |
| 599 | 599 |
| 600 if (inEvent) { | 600 if (inEvent) { |
| 601 if (stringExpression.startsWith('@')) { | 601 if (stringExpression.startsWith('@')) { |
| 602 logger.warning('event bindings with @ are no longer supported', | 602 logger.warning('event bindings with @ are no longer supported', |
| 603 span: span); | 603 span: span); |
| 604 return; | 604 return; |
| 605 } | 605 } |
| 606 | 606 |
| 607 if (stringExpression == '') return; | 607 if (stringExpression == '') return; |
| 608 if (stringExpression.startsWith('_')) { | 608 if (stringExpression.startsWith('_')) { |
| 609 logger.warning('private symbols cannot be used in event handlers', | 609 logger.warning('private symbols cannot be used in event handlers', |
| 610 span: span); | 610 span: span); |
| 611 return; | 611 return; |
| 612 } | 612 } |
| 613 generator.addGetter(stringExpression); | 613 generator.addGetter(stringExpression); |
| 614 generator.addSymbol(stringExpression); | 614 generator.addSymbol(stringExpression); |
| 615 } | 615 } |
| 616 expressionVisitor.run(pe.parse(stringExpression), isTwoWay, span); | 616 expressionVisitor.run(pe.parse(stringExpression), isTwoWay, span); |
| 617 } | 617 } |
| 618 } | 618 } |
| 619 | 619 |
| 620 /// A polymer-expression visitor that records every getter and setter that will | 620 /// A polymer-expression visitor that records every getter and setter that will |
| 621 /// be needed to evaluate a single expression at runtime. | 621 /// be needed to evaluate a single expression at runtime. |
| 622 class _SubExpressionVisitor extends pe.RecursiveVisitor { | 622 class _SubExpressionVisitor extends pe.RecursiveVisitor { |
| 623 final SmokeCodeGenerator generator; | 623 final SmokeCodeGenerator generator; |
| 624 final TransformLogger logger; | 624 final TransformLogger logger; |
| 625 bool _includeSetter; | 625 bool _includeSetter; |
| 626 Span _currentSpan; | 626 SourceSpan _currentSpan; |
| 627 | 627 |
| 628 _SubExpressionVisitor(this.generator, this.logger); | 628 _SubExpressionVisitor(this.generator, this.logger); |
| 629 | 629 |
| 630 /// Visit [exp], and record getters and setters that are needed in order to | 630 /// Visit [exp], and record getters and setters that are needed in order to |
| 631 /// evaluate it at runtime. [includeSetter] is only true if this expression | 631 /// evaluate it at runtime. [includeSetter] is only true if this expression |
| 632 /// occured in a context where it could be updated, for example in two-way | 632 /// occured in a context where it could be updated, for example in two-way |
| 633 /// bindings such as `<input value={{exp}}>`. | 633 /// bindings such as `<input value={{exp}}>`. |
| 634 void run(pe.Expression exp, bool includeSetter, span) { | 634 void run(pe.Expression exp, bool includeSetter, span) { |
| 635 _currentSpan = span; | 635 _currentSpan = span; |
| 636 _includeSetter = includeSetter; | 636 _includeSetter = includeSetter; |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 825 for (var c in combinators) { | 825 for (var c in combinators) { |
| 826 if (c is ShowElementCombinator) { | 826 if (c is ShowElementCombinator) { |
| 827 var show = c.shownNames.toSet(); | 827 var show = c.shownNames.toSet(); |
| 828 elements.retainWhere((e) => show.contains(e.displayName)); | 828 elements.retainWhere((e) => show.contains(e.displayName)); |
| 829 } else if (c is HideElementCombinator) { | 829 } else if (c is HideElementCombinator) { |
| 830 var hide = c.hiddenNames.toSet(); | 830 var hide = c.hiddenNames.toSet(); |
| 831 elements.removeWhere((e) => hide.contains(e.displayName)); | 831 elements.removeWhere((e) => hide.contains(e.displayName)); |
| 832 } | 832 } |
| 833 } | 833 } |
| 834 } | 834 } |
| OLD | NEW |