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

Unified Diff: lib/src/html_css_fixup.dart

Issue 19497002: Reducing the amount of code we generate in the compiler: We still continue (Closed) Base URL: git@github.com:dart-lang/web-ui.git@master
Patch Set: Created 7 years, 5 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: lib/src/html_css_fixup.dart
diff --git a/lib/src/html_css_fixup.dart b/lib/src/html_css_fixup.dart
index 342a1bbba9810f1450c98f571dc5c5a565931a06..e421b67a8cc056e354e23625e87b9fb4f77afc78 100644
--- a/lib/src/html_css_fixup.dart
+++ b/lib/src/html_css_fixup.dart
@@ -19,19 +19,34 @@ import 'options.dart';
import 'paths.dart';
import 'utils.dart';
-/**
- * Helper function returns [true] if CSS polyfill is on and component has a
- * scoped style tag.
- */
-bool useCssPolyfill(CompilerOptions opts, ComponentInfo component) =>
- opts.processCss && component.scoped;
+/** Enum for type of polyfills supported. */
+class CssPolyfillKind {
+ final index;
+ const CssPolyfillKind(this.index);
+
+ /** Emit CSS selectors as seen (no polyfill). */
+ static const NO_POLYFILL = const CssPolyfillKind(0);
+
+ /** Emit CSS selectors scoped to the "is" attribute of the component. */
+ static const SCOPED_POLYFILL = const CssPolyfillKind(1);
+
+ /** Emit CSS selectors mangled. */
+ static const MANGLED_POLYFILL = const CssPolyfillKind(2);
+
+ static CssPolyfillKind of(CompilerOptions options, ComponentInfo component) {
+ if (!options.processCss || !component.scoped) return NO_POLYFILL;
+ if (options.mangleCss) return MANGLED_POLYFILL;
+ if (!component.hasAuthorStyles && !hasCssReset) return MANGLED_POLYFILL;
+ return SCOPED_POLYFILL;
+ }
+}
+
/**
* If processCss is enabled, prefix any component's HTML attributes for id or
* class to reference the mangled CSS class name or id.
*/
-void fixupHtmlCss(FileInfo fileInfo, CompilerOptions options,
- CssPolyfillKind polyfillKind(ComponentInfo component)) {
+void fixupHtmlCss(FileInfo fileInfo, CompilerOptions options) {
// Walk the HTML tree looking for class names or id that are in our parsed
// stylesheet selectors and making those CSS classes and ids unique to that
// component.
@@ -44,14 +59,14 @@ void fixupHtmlCss(FileInfo fileInfo, CompilerOptions options,
if (component.styleSheets.length == 1) {
// For components only 1 stylesheet allowed.
var styleSheet = component.styleSheets[0];
- var prefix = polyfillKind(component) == CssPolyfillKind.MANGLED_POLYFILL ?
- component.tagName : null;
+ var prefix = CssPolyfillKind.of(options, component) ==
+ CssPolyfillKind.MANGLED_POLYFILL ? component.tagName : null;
// List of referenced #id and .class in CSS.
var knownCss = new IdClassVisitor()..visitTree(styleSheet);
// Prefix all id and class refs in CSS selectors and HTML attributes.
new _ScopedStyleRenamer(knownCss, prefix, options.debugCss)
- .visit(component.elementNode);
+ .visit(component.element);
}
}
}
@@ -72,7 +87,8 @@ class IdClassVisitor extends Visitor {
/** Build the Dart map of managled class/id names and component tag name. */
Map _createCssSimpleSelectors(IdClassVisitor visitedCss, ComponentInfo info,
- bool mangleNames) {
+ CssPolyfillKind kind) {
+ bool mangleNames = kind == CssPolyfillKind.MANGLED_POLYFILL;
Map selectors = {};
if (visitedCss != null) {
for (var cssClass in visitedCss.classes) {
@@ -95,7 +111,7 @@ Map _createCssSimpleSelectors(IdClassVisitor visitedCss, ComponentInfo info,
* Return a map of simple CSS selectors (class and id selectors) as a Dart map
* definition.
*/
-String createCssSelectorsExpression(ComponentInfo info, bool mangled) {
+String createCssSelectorsExpression(ComponentInfo info, CssPolyfillKind kind) {
var cssVisited = new IdClassVisitor();
// For components only 1 stylesheet allowed.
@@ -104,7 +120,7 @@ String createCssSelectorsExpression(ComponentInfo info, bool mangled) {
cssVisited..visitTree(styleSheet);
}
- return json.stringify(_createCssSimpleSelectors(cssVisited, info, mangled));
+ return json.stringify(_createCssSimpleSelectors(cssVisited, info, kind));
}
// TODO(terry): Need to handle other selectors than IDs/classes like tag name
@@ -545,7 +561,7 @@ class CssStyleTag extends TreeVisitor {
// Don't process any style tags inside of element if we're processing a
// FileInfo. The style tags inside of a component defintion will be
// processed when _info is a ComponentInfo.
- if (node.tagName == 'element' && _info is FileInfo) return;
+ if (node.tagName == 'polymer-element' && _info is FileInfo) return;
if (node.tagName == 'style') {
// Parse the contents of the scoped style tag.
var styleSheet = parseCss(node.nodes.single.value, _messages, _options);
« lib/polymer_element.dart ('K') | « lib/src/emitters.dart ('k') | lib/src/info.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698