| 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);
|
|
|