diff options
author | Marc Englund <marc@vaadin.com> | 2012-11-22 16:02:27 +0200 |
---|---|---|
committer | Marc Englund <marc@vaadin.com> | 2012-11-22 16:18:13 +0200 |
commit | b913ab2907b9976e9844d77bb15ff14ac612d870 (patch) | |
tree | ec028314e00689671efb8f2b41959a9f6d0c9a2e /theme-compiler/src | |
parent | a071e06d1e9d4db6e73390f2e2de897744632d61 (diff) | |
download | vaadin-framework-b913ab2907b9976e9844d77bb15ff14ac612d870.tar.gz vaadin-framework-b913ab2907b9976e9844d77bb15ff14ac612d870.zip |
Warns and removes if parent reference '&' is used w/o parent, fixes #10327
Change-Id: I58eaf3f2acd27a7627c8df31e411a75fc4a48016
Diffstat (limited to 'theme-compiler/src')
-rw-r--r-- | theme-compiler/src/com/vaadin/sass/ScssStylesheet.java | 4 | ||||
-rw-r--r-- | theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java | 25 |
2 files changed, 29 insertions, 0 deletions
diff --git a/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java b/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java index 5f46844641..216b03edbe 100644 --- a/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java +++ b/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java @@ -23,6 +23,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.logging.Logger; import org.w3c.css.sac.CSSException; import org.w3c.css.sac.InputSource; @@ -250,4 +251,7 @@ public class ScssStylesheet extends Node { return lastNodeAdded; } + public static final void warning(String msg) { + Logger.getLogger(ScssStylesheet.class.getName()).warning(msg); + } } diff --git a/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java b/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java index d128da0b4b..f8f893b8fd 100644 --- a/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java +++ b/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java @@ -61,9 +61,34 @@ public class BlockNodeHandler { if (parent instanceof BlockNode) { combineParentSelectorListToChild(node); + + } else if (node.getSelectors().contains("&")) { + ScssStylesheet.warning("Base-level rule contains" + + " the parent-selector-referencing character '&';" + + " the character will be removed:\n" + node); + removeParentReference(node); } } + /** + * Goes through the selector list of the given BlockNode and removes the '&' + * character from the selectors. + * + * @param node + */ + private static void removeParentReference(BlockNode node) { + ArrayList<String> newList = new ArrayList<String>(); + for (String childSelector : node.getSelectorList()) { + // remove parent selector + if (childSelector.contains("&")) { + newList.add(childSelector.replace("&", "")); + } else { + newList.add(childSelector); + } + } + node.setSelectorList(newList); + } + private static void combineParentSelectorListToChild(BlockNode node) { ArrayList<String> newList = new ArrayList<String>(); BlockNode parentBlock = (BlockNode) node.getParentNode(); |