| 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 inlines polymer-element definitions from html imports. */ | 5 /** Transfomer that inlines polymer-element definitions from html imports. */ |
| 6 library polymer.src.transform.import_inliner; | 6 library polymer.src.transform.import_inliner; |
| 7 | 7 |
| 8 import 'dart:async'; | 8 import 'dart:async'; |
| 9 | 9 |
| 10 import 'package:barback/barback.dart'; | 10 import 'package:barback/barback.dart'; |
| 11 import 'package:path/path.dart' as path; | 11 import 'package:path/path.dart' as path; |
| 12 import 'package:html5lib/dom.dart' show Document, Node, DocumentFragment; | 12 import 'package:html5lib/dom.dart' show Document, Node, DocumentFragment; |
| 13 import 'package:html5lib/dom_parsing.dart' show TreeVisitor; | 13 import 'package:html5lib/dom_parsing.dart' show TreeVisitor; |
| 14 import 'common.dart'; | 14 import 'common.dart'; |
| 15 | 15 |
| 16 /** Recursively inlines polymer-element definitions from html imports. */ | 16 /** Recursively inlines polymer-element definitions from html imports. */ |
| 17 // TODO(sigmund): make sure we match semantics of html-imports for tags other | 17 // TODO(sigmund): make sure we match semantics of html-imports for tags other |
| 18 // than polymer-element (see dartbug.com/12613). | 18 // than polymer-element (see dartbug.com/12613). |
| 19 class ImportedElementInliner extends Transformer { | 19 class ImportedElementInliner extends Transformer { |
| 20 /** Only run on entry point .html files. */ | 20 /** Only run on entry point .html files. */ |
| 21 Future<bool> isPrimary(Asset input) => isPrimaryHtml(input.id); | 21 Future<bool> isPrimary(Asset input) => |
| 22 new Future.value(isPrimaryHtml(input.id)); |
| 22 | 23 |
| 23 Future apply(Transform transform) { | 24 Future apply(Transform transform) { |
| 24 var seen = new Set<AssetId>(); | 25 var seen = new Set<AssetId>(); |
| 25 var elements = []; | 26 var elements = []; |
| 26 var id = transform.primaryInput.id; | 27 var id = transform.primaryInput.id; |
| 27 seen.add(id); | 28 seen.add(id); |
| 28 return transform.primaryInput.readAsString().then((content) { | 29 return readPrimaryAsHtml(transform).then((document) { |
| 29 var document = parseHtml(content, id.path, transform.logger); | |
| 30 var future = _visitImports(document, id, transform, seen, elements); | 30 var future = _visitImports(document, id, transform, seen, elements); |
| 31 return future.then((importsFound) { | 31 return future.then((importsFound) { |
| 32 if (!importsFound) { | 32 if (!importsFound) { |
| 33 transform.addOutput(new Asset.fromString(id, content)); | 33 transform.addOutput(transform.primaryInput); |
| 34 return; | 34 return; |
| 35 } | 35 } |
| 36 | 36 |
| 37 for (var tag in document.queryAll('link')) { | 37 for (var tag in document.queryAll('link')) { |
| 38 if (tag.attributes['rel'] == 'import') { | 38 if (tag.attributes['rel'] == 'import') { |
| 39 tag.remove(); | 39 tag.remove(); |
| 40 } | 40 } |
| 41 } | 41 } |
| 42 var fragment = new DocumentFragment()..nodes.addAll(elements); | 42 var fragment = new DocumentFragment()..nodes.addAll(elements); |
| 43 document.body.insertBefore(fragment, | 43 document.body.insertBefore(fragment, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 return _collectPolymerElements(id, transform, seen, elements); | 75 return _collectPolymerElements(id, transform, seen, elements); |
| 76 }).then((_) => true); | 76 }).then((_) => true); |
| 77 } | 77 } |
| 78 | 78 |
| 79 /** | 79 /** |
| 80 * Loads an asset identified by [id], visits its imports and collects it's | 80 * Loads an asset identified by [id], visits its imports and collects it's |
| 81 * polymer-element definitions. | 81 * polymer-element definitions. |
| 82 */ | 82 */ |
| 83 Future _collectPolymerElements(AssetId id, Transform transform, | 83 Future _collectPolymerElements(AssetId id, Transform transform, |
| 84 Set<AssetId> seen, List elements) { | 84 Set<AssetId> seen, List elements) { |
| 85 return transform.readInputAsString(id).then((content) { | 85 return readAsHtml(id, transform).then((document) { |
| 86 var document = parseHtml(content, id.path, transform.logger, | |
| 87 checkDocType: false); | |
| 88 return _visitImports(document, id, transform, seen, elements).then((_) { | 86 return _visitImports(document, id, transform, seen, elements).then((_) { |
| 89 var normalizer = new _UrlNormalizer(transform, id); | 87 var normalizer = new _UrlNormalizer(transform, id); |
| 90 for (var element in document.queryAll('polymer-element')) { | 88 for (var element in document.queryAll('polymer-element')) { |
| 91 normalizer.visit(document); | 89 normalizer.visit(document); |
| 92 elements.add(element); | 90 elements.add(element); |
| 93 } | 91 } |
| 94 }); | 92 }); |
| 95 }); | 93 }); |
| 96 } | 94 } |
| 97 } | 95 } |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 'cite', // in blockquote, del, ins, q | 159 'cite', // in blockquote, del, ins, q |
| 162 'data', // in object | 160 'data', // in object |
| 163 'formaction', // in button, input | 161 'formaction', // in button, input |
| 164 'href', // in a, area, link, base, command | 162 'href', // in a, area, link, base, command |
| 165 'icon', // in command | 163 'icon', // in command |
| 166 'manifest', // in html | 164 'manifest', // in html |
| 167 'poster', // in video | 165 'poster', // in video |
| 168 'src', // in audio, embed, iframe, img, input, script, source, track, | 166 'src', // in audio, embed, iframe, img, input, script, source, track, |
| 169 // video | 167 // video |
| 170 ]; | 168 ]; |
| OLD | NEW |