diff options
author | Marc Englund <marc@vaadin.com> | 2012-11-20 13:52:46 +0000 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2012-11-20 13:52:46 +0000 |
commit | 6d2f957ef989ab36d80c7e4a6fbb13380d9f1265 (patch) | |
tree | 19d58d8fd9f5c4a2152735f9b1cb59d988597dbb /theme-compiler | |
parent | 98555d0eac757e738b9218cd0d8b719dd37ccc05 (diff) | |
parent | 7e458a4acf1276ae00872954e9082cc412bfa10a (diff) | |
download | vaadin-framework-6d2f957ef989ab36d80c7e4a6fbb13380d9f1265.tar.gz vaadin-framework-6d2f957ef989ab36d80c7e4a6fbb13380d9f1265.zip |
Merge "(#10182) Rule order not preserved when using parent reference in sass"
Diffstat (limited to 'theme-compiler')
6 files changed, 25 insertions, 16 deletions
diff --git a/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java b/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java index 45578deb19..5f46844641 100644 --- a/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java +++ b/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java @@ -38,7 +38,6 @@ import com.vaadin.sass.tree.Node; import com.vaadin.sass.tree.VariableNode; import com.vaadin.sass.tree.controldirective.IfElseDefNode; import com.vaadin.sass.visitor.ImportNodeHandler; -import com.vaadin.sass.visitor.ParentSelectorHandler; public class ScssStylesheet extends Node { @@ -52,6 +51,8 @@ public class ScssStylesheet extends Node { private static final HashSet<IfElseDefNode> ifElseDefNodes = new HashSet<IfElseDefNode>(); + private static HashMap<Node, Node> lastNodeAdded = new HashMap<Node, Node>(); + private String fileName; /** @@ -130,7 +131,7 @@ public class ScssStylesheet extends Node { mixinDefs.clear(); variables.clear(); ifElseDefNodes.clear(); - ParentSelectorHandler.clear(); + lastNodeAdded.clear(); importOtherFiles(this); populateDefinitions(this); traverse(this); @@ -245,4 +246,8 @@ public class ScssStylesheet extends Node { return fileName; } + public static HashMap<Node, Node> getLastNodeAdded() { + return lastNodeAdded; + } + } diff --git a/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java b/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java index d338cb0843..0d00fd2d0c 100644 --- a/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java +++ b/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java @@ -19,13 +19,12 @@ package com.vaadin.sass.visitor; import java.util.ArrayList; import java.util.HashMap; +import com.vaadin.sass.ScssStylesheet; import com.vaadin.sass.tree.BlockNode; import com.vaadin.sass.tree.Node; public class BlockNodeHandler { - private static HashMap<Node, Node> lastNodeAdded = new HashMap<Node, Node>(); - public static void traverse(BlockNode node) { Node parent = node.getParentNode(); @@ -61,6 +60,7 @@ public class BlockNodeHandler { } node.setSelectorList(newList); Node oldParent = node.getParentNode(); + HashMap<Node, Node> lastNodeAdded = ScssStylesheet.getLastNodeAdded(); if (lastNodeAdded.get(oldParent) != null) { node.getParentNode().getParentNode() .appendChild(node, lastNodeAdded.get(oldParent)); diff --git a/theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorHandler.java b/theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorHandler.java index 4098cc7cad..cb7b0ac8a8 100644 --- a/theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorHandler.java +++ b/theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorHandler.java @@ -19,13 +19,12 @@ package com.vaadin.sass.visitor; import java.util.ArrayList; import java.util.HashMap; +import com.vaadin.sass.ScssStylesheet; import com.vaadin.sass.tree.BlockNode; import com.vaadin.sass.tree.Node; public class ParentSelectorHandler { - private static HashMap<Node, Node> parentSelectors = new HashMap<Node, Node>(); - public static void traverse(BlockNode block) throws Exception { Node parentNode = block.getParentNode(); if (parentNode instanceof BlockNode) { @@ -48,22 +47,20 @@ public class ParentSelectorHandler { if (isParentSelector) { block.setSelectorList(newList); Node oldparent = block.getParentNode(); - if (parentSelectors.containsKey(block.getParentNode())) { + HashMap<Node, Node> lastNodeAdded = ScssStylesheet + .getLastNodeAdded(); + if (lastNodeAdded.containsKey(block.getParentNode())) { block.getParentNode() .getParentNode() .appendChild(block, - parentSelectors.get(block.getParentNode())); + lastNodeAdded.get(block.getParentNode())); } else { block.getParentNode().getParentNode() .appendChild(block, block.getParentNode()); } - parentSelectors.put(oldparent, block); + lastNodeAdded.put(oldparent, block); } } } - - public static void clear() { - parentSelectors.clear(); - } } diff --git a/theme-compiler/tests/resources/css/parent-selector.css b/theme-compiler/tests/resources/css/parent-selector.css index 0330782fbf..e7e37e92ab 100644 --- a/theme-compiler/tests/resources/css/parent-selector.css +++ b/theme-compiler/tests/resources/css/parent-selector.css @@ -3,6 +3,10 @@ a { text-decoration: none; } +a .sub { + color: blue; +} + a:hover { text-decoration: underline; } diff --git a/theme-compiler/tests/resources/scss/parent-selector.scss b/theme-compiler/tests/resources/scss/parent-selector.scss index ee02f8bf76..68f66a4a27 100644 --- a/theme-compiler/tests/resources/scss/parent-selector.scss +++ b/theme-compiler/tests/resources/scss/parent-selector.scss @@ -1,6 +1,9 @@ a { font-weight: bold; text-decoration: none; + .sub { + color: blue; + } &:hover { text-decoration: underline; } body.firefox & { font-weight: normal; } } diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java index e1e1fee3b4..ebe62fd678 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java @@ -41,10 +41,10 @@ public class ParentSelector extends AbstractTestBase { parser.parseStyleSheet(getClass().getResource(scss).getPath()); ScssStylesheet root = handler.getStyleSheet(); BlockNode blockNode = (BlockNode) root.getChildren().get(0); - Assert.assertEquals(4, blockNode.getChildren().size()); - BlockNode nestedBlock1 = (BlockNode) blockNode.getChildren().get(2); + Assert.assertEquals(5, blockNode.getChildren().size()); + BlockNode nestedBlock1 = (BlockNode) blockNode.getChildren().get(3); Assert.assertEquals("&:hover", nestedBlock1.getSelectorList().get(0)); - BlockNode nestedBlock2 = (BlockNode) blockNode.getChildren().get(3); + BlockNode nestedBlock2 = (BlockNode) blockNode.getChildren().get(4); Assert.assertEquals("body.firefox &", nestedBlock2.getSelectorList() .get(0)); } |