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

Side by Side Diff: lib/src/analyzer.dart

Issue 12474002: Support for parsing all CSS and producing one CSS file (Closed) Base URL: https://github.com/dart-lang/web-ui.git@master
Patch Set: merged Created 7 years, 9 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 unified diff | Download patch
« no previous file with comments | « no previous file | lib/src/compiler.dart » ('j') | lib/src/compiler.dart » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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
11 import 'dart:uri';
11 import 'package:html5lib/dom.dart'; 12 import 'package:html5lib/dom.dart';
12 import 'package:html5lib/dom_parsing.dart'; 13 import 'package:html5lib/dom_parsing.dart';
13 import 'package:source_maps/span.dart'; 14 import 'package:source_maps/span.dart';
14 15
15 import 'dart_parser.dart'; 16 import 'dart_parser.dart';
16 import 'file_system/path.dart'; 17 import 'file_system/path.dart';
17 import 'files.dart'; 18 import 'files.dart';
18 import 'html5_utils.dart'; 19 import 'html5_utils.dart';
19 import 'info.dart'; 20 import 'info.dart';
20 import 'messages.dart'; 21 import 'messages.dart';
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 // child nodes and get their infos, and if any of them need data binding, 113 // child nodes and get their infos, and if any of them need data binding,
113 // we create an ElementInfo for ourselves and return it, otherwise we just 114 // we create an ElementInfo for ourselves and return it, otherwise we just
114 // return null. 115 // return null.
115 if (info == null) { 116 if (info == null) {
116 // <element> tags are tracked in the file's declared components, so they 117 // <element> tags are tracked in the file's declared components, so they
117 // don't need a parent. 118 // don't need a parent.
118 var parent = node.tagName == 'element' ? null : _parent; 119 var parent = node.tagName == 'element' ? null : _parent;
119 info = new ElementInfo(node, parent); 120 info = new ElementInfo(node, parent);
120 } 121 }
121 122
122 // TODO(terry): How to handle <link rel="stylesheet" href="...">
123 // - What if multiple stylesheet links for a component?
124 // - What if a stylesheet link for all component and particular
125 // stylesheet links for each component?
126 // - What if multiple <style> tags for the same component?
127 if (node.tagName == 'style' && node.attributes.containsKey("scoped")) {
128 // TODO(terry): Faster to parse the CSS tags separately instead of
129 // concatenating all styles.
130 // Get contents of style tag.
131 _currentInfo.cssSource.write(node.nodes.single.value);
132 }
133
134 visitElementInfo(info); 123 visitElementInfo(info);
135 124
136 if (_parent == null) { 125 if (_parent == null) {
137 _fileInfo.bodyInfo = info; 126 _fileInfo.bodyInfo = info;
138 } 127 }
139 } 128 }
140 129
141 void visitElementInfo(ElementInfo info) { 130 void visitElementInfo(ElementInfo info) {
142 var node = info.node; 131 var node = info.node;
143 132
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 } 720 }
732 } 721 }
733 722
734 /** 723 /**
735 * Process `link rel="component"` as specified in: 724 * Process `link rel="component"` as specified in:
736 * <https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/components/index.ht ml#link-type-component> 725 * <https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/components/index.ht ml#link-type-component>
737 */ 726 */
738 void visitLinkElement(Element node) { 727 void visitLinkElement(Element node) {
739 // TODO(jmesserly): deprecate the plural form, it is singular in the spec. 728 // TODO(jmesserly): deprecate the plural form, it is singular in the spec.
740 var rel = node.attributes['rel']; 729 var rel = node.attributes['rel'];
741 if (rel != 'component' && rel != 'components') return; 730 if (rel != 'components' && rel != 'stylesheet') return;
Siggi Cherem (dart-lang) 2013/03/07 22:14:20 there seems to be a bad merge here. this should al
terry 2013/03/08 20:11:24 Nice catch yeah it was a bad merge. On 2013/03/07
742 731
743 if (!_inHead) { 732 if (!_inHead) {
744 _messages.warning('link rel="$rel" only valid in ' 733 _messages.warning('link rel="$rel" only valid in '
745 'head.', node.sourceSpan, file: _fileInfo.path); 734 'head.', node.sourceSpan, file: _fileInfo.path);
746 return; 735 return;
747 } 736 }
748 737
749 var href = node.attributes['href']; 738 var href = node.attributes['href'];
750 if (href == null || href == '') { 739 if (href == null || href == '') {
751 _messages.warning('link rel="$rel" missing href.', 740 _messages.warning('link rel="$rel" missing href.',
752 node.sourceSpan, file: _fileInfo.path); 741 node.sourceSpan, file: _fileInfo.path);
753 return; 742 return;
754 } 743 }
755 744
756 var path; 745 var path;
757 if (href.startsWith('package:')) { 746 if (href.startsWith('package:')) {
758 path = _packageRoot.join(new Path(href.substring(8))); 747 path = _packageRoot.join(new Path(href.substring(8)));
759 } else { 748 } else {
760 path = _fileInfo.path.directoryPath.join(new Path(href)); 749 path = _fileInfo.path.directoryPath.join(new Path(href));
761 } 750 }
762 751
763 _fileInfo.componentLinks.add(path); 752 switch (rel) {
753 case 'components':
Siggi Cherem (dart-lang) 2013/03/07 22:14:20 given that there are only two options (since you r
terry 2013/03/08 20:11:24 Done.
754 _fileInfo.componentLinks.add(path);
755 break;
756 case 'stylesheet':
757 // Local stylesheets only are handled.
758 var scheme = Uri.parse(href).scheme;
759 if (scheme != 'http' && scheme != 'https') {
760 _fileInfo.styleSheetHref.add(path);
761 }
762 break;
763 }
764 } 764 }
765 765
766 void visitElementElement(Element node) { 766 void visitElementElement(Element node) {
767 // TODO(jmesserly): what do we do in this case? It seems like an <element> 767 // TODO(jmesserly): what do we do in this case? It seems like an <element>
768 // inside a Shadow DOM should be scoped to that <template> tag, and not 768 // inside a Shadow DOM should be scoped to that <template> tag, and not
769 // visible from the outside. 769 // visible from the outside.
770 if (_currentInfo is ComponentInfo) { 770 if (_currentInfo is ComponentInfo) {
771 _messages.error('Nested component definitions are not yet supported.', 771 _messages.error('Nested component definitions are not yet supported.',
772 node.sourceSpan, file: _fileInfo.path); 772 node.sourceSpan, file: _fileInfo.path);
773 return; 773 return;
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
981 if (start == null) moveNext(); 981 if (start == null) moveNext();
982 if (start < length) { 982 if (start < length) {
983 do { 983 do {
984 bindings.add(binding); 984 bindings.add(binding);
985 content.add(textContent); 985 content.add(textContent);
986 } while (moveNext()); 986 } while (moveNext());
987 } 987 }
988 content.add(textContent); 988 content.add(textContent);
989 } 989 }
990 } 990 }
OLDNEW
« no previous file with comments | « no previous file | lib/src/compiler.dart » ('j') | lib/src/compiler.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698