| 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 /** | 5 /** |
| 6 * Part of the template compilation that concerns with extracting information | 6 * Part of the template compilation that concerns with extracting information |
| 7 * from the HTML parse tree. | 7 * from the HTML parse tree. |
| 8 */ | 8 */ |
| 9 library analyzer; | 9 library analyzer; |
| 10 | 10 |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 if (node.tagName == 'style') { | 103 if (node.tagName == 'style') { |
| 104 // We've already parsed the CSS. | 104 // We've already parsed the CSS. |
| 105 // If this is a component remove the style node. | 105 // If this is a component remove the style node. |
| 106 if (_currentInfo is ComponentInfo) node.remove(); | 106 if (_currentInfo is ComponentInfo) node.remove(); |
| 107 return; | 107 return; |
| 108 } | 108 } |
| 109 | 109 |
| 110 node = _bindAndReplaceElement(node); | 110 node = _bindAndReplaceElement(node); |
| 111 | 111 |
| 112 var lastInfo = _currentInfo; | 112 var lastInfo = _currentInfo; |
| 113 if (node.tagName == 'element') { | 113 if (node.tagName == 'polymer-element') { |
| 114 // If element is invalid _ElementLoader already reported an error, but | 114 // If element is invalid _ElementLoader already reported an error, but |
| 115 // we skip the body of the element here. | 115 // we skip the body of the element here. |
| 116 var name = node.attributes['name']; | 116 var name = node.attributes['name']; |
| 117 if (name == null) return; | 117 if (name == null) return; |
| 118 | 118 |
| 119 ComponentInfo component = _fileInfo.components[name]; | 119 ComponentInfo component = _fileInfo.components[name]; |
| 120 if (component == null) return; | 120 if (component == null) return; |
| 121 | 121 |
| 122 // Associate <element> tag with its component. | |
| 123 component.elementNode = node; | |
| 124 | |
| 125 _analyzeComponent(component); | 122 _analyzeComponent(component); |
| 126 | 123 |
| 127 _currentInfo = component; | 124 _currentInfo = component; |
| 128 | 125 |
| 129 // Remove the <element> tag from the tree | 126 // Remove the <element> tag from the tree |
| 130 node.remove(); | 127 node.remove(); |
| 131 } | 128 } |
| 132 | 129 |
| 133 node.attributes.forEach((name, value) { | 130 node.attributes.forEach((name, value) { |
| 134 if (name.startsWith('on')) { | 131 if (name.startsWith('on')) { |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 if (component == null) { | 200 if (component == null) { |
| 204 // TODO(jmesserly): warn for unknown element tags? | 201 // TODO(jmesserly): warn for unknown element tags? |
| 205 | 202 |
| 206 // <button is="fancy-button"> | 203 // <button is="fancy-button"> |
| 207 var componentName = node.attributes['is']; | 204 var componentName = node.attributes['is']; |
| 208 if (componentName != null) { | 205 if (componentName != null) { |
| 209 component = _fileInfo.components[componentName]; | 206 component = _fileInfo.components[componentName]; |
| 210 } else if (isCustomTag(node.tagName)) { | 207 } else if (isCustomTag(node.tagName)) { |
| 211 componentName = node.tagName; | 208 componentName = node.tagName; |
| 212 } | 209 } |
| 213 if (component == null && componentName != null) { | 210 if (component == null && componentName != null && |
| 211 componentName != 'polymer-element') { |
| 214 _messages.warning( | 212 _messages.warning( |
| 215 'custom element with tag name $componentName not found.', | 213 'custom element with tag name $componentName not found.', |
| 216 node.sourceSpan); | 214 node.sourceSpan); |
| 217 } | 215 } |
| 218 } | 216 } |
| 219 if (component != null && !component.hasConflict) { | 217 if (component != null && !component.hasConflict) { |
| 220 _currentInfo.usedComponents[component] = true; | 218 _currentInfo.usedComponents[component] = true; |
| 221 return component; | 219 return component; |
| 222 } | 220 } |
| 223 return null; | 221 return null; |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 * must not be null. | 363 * must not be null. |
| 366 */ | 364 */ |
| 367 _ElementLoader(this._global, this._fileInfo, this._packageRoot, | 365 _ElementLoader(this._global, this._fileInfo, this._packageRoot, |
| 368 this._messages) { | 366 this._messages) { |
| 369 _currentInfo = _fileInfo; | 367 _currentInfo = _fileInfo; |
| 370 } | 368 } |
| 371 | 369 |
| 372 void visitElement(Element node) { | 370 void visitElement(Element node) { |
| 373 switch (node.tagName) { | 371 switch (node.tagName) { |
| 374 case 'link': visitLinkElement(node); break; | 372 case 'link': visitLinkElement(node); break; |
| 375 case 'element': visitElementElement(node); break; | 373 case 'element': |
| 374 _messages.warning('<element> elements are not supported, use' |
| 375 ' <polymer-element> instead', node.sourceSpan); |
| 376 break; |
| 377 case 'polymer-element': |
| 378 visitElementElement(node); |
| 379 break; |
| 376 case 'script': visitScriptElement(node); break; | 380 case 'script': visitScriptElement(node); break; |
| 377 case 'head': | 381 case 'head': |
| 378 var savedInHead = _inHead; | 382 var savedInHead = _inHead; |
| 379 _inHead = true; | 383 _inHead = true; |
| 380 super.visitElement(node); | 384 super.visitElement(node); |
| 381 _inHead = savedInHead; | 385 _inHead = savedInHead; |
| 382 break; | 386 break; |
| 383 default: super.visitElement(node); break; | 387 default: super.visitElement(node); break; |
| 384 } | 388 } |
| 385 } | 389 } |
| (...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 719 } | 723 } |
| 720 } | 724 } |
| 721 } | 725 } |
| 722 } | 726 } |
| 723 } | 727 } |
| 724 } | 728 } |
| 725 | 729 |
| 726 return seen; | 730 return seen; |
| 727 } | 731 } |
| 728 } | 732 } |
| OLD | NEW |