summaryrefslogtreecommitdiffstats
path: root/theme-compiler
diff options
context:
space:
mode:
authorMarc Englund <marc@vaadin.com>2012-11-20 13:52:46 +0000
committerVaadin Code Review <review@vaadin.com>2012-11-20 13:52:46 +0000
commit6d2f957ef989ab36d80c7e4a6fbb13380d9f1265 (patch)
tree19d58d8fd9f5c4a2152735f9b1cb59d988597dbb /theme-compiler
parent98555d0eac757e738b9218cd0d8b719dd37ccc05 (diff)
parent7e458a4acf1276ae00872954e9082cc412bfa10a (diff)
downloadvaadin-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')
-rw-r--r--theme-compiler/src/com/vaadin/sass/ScssStylesheet.java9
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java4
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorHandler.java15
-rw-r--r--theme-compiler/tests/resources/css/parent-selector.css4
-rw-r--r--theme-compiler/tests/resources/scss/parent-selector.scss3
-rw-r--r--theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java6
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));
}