summaryrefslogtreecommitdiffstats
path: root/theme-compiler/src/com/vaadin
diff options
context:
space:
mode:
authorHenri Sara <hesara@vaadin.com>2012-11-22 14:47:20 +0200
committerHenri Sara <hesara@vaadin.com>2012-11-22 14:47:20 +0200
commite731b814d92ac8861b8a2bc5026e279a2437e5cf (patch)
tree758aae5db7c392ab31f870d04373461ed3e382a5 /theme-compiler/src/com/vaadin
parent7fb247173e34e445e13fcec76b30246be8799791 (diff)
downloadvaadin-framework-e731b814d92ac8861b8a2bc5026e279a2437e5cf.tar.gz
vaadin-framework-e731b814d92ac8861b8a2bc5026e279a2437e5cf.zip
Combine Sass Block node handlers (parent selector), comments
This eliminates potential order problems between blocks with and without parent selectors and reduces duplication of code. Change-Id: If422f7d603bf4b9938b9c0bd83989e337e1f92ce
Diffstat (limited to 'theme-compiler/src/com/vaadin')
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/BlockNode.java2
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java9
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java44
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/NestedNodeHandler.java19
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorHandler.java64
5 files changed, 57 insertions, 81 deletions
diff --git a/theme-compiler/src/com/vaadin/sass/tree/BlockNode.java b/theme-compiler/src/com/vaadin/sass/tree/BlockNode.java
index 07e4c69ed7..292a948320 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/BlockNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/BlockNode.java
@@ -20,7 +20,6 @@ import java.util.ArrayList;
import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.visitor.BlockNodeHandler;
-import com.vaadin.sass.visitor.ParentSelectorHandler;
public class BlockNode extends Node implements IVariableNode {
@@ -106,7 +105,6 @@ public class BlockNode extends Node implements IVariableNode {
@Override
public void traverse() {
try {
- ParentSelectorHandler.traverse(this);
BlockNodeHandler.traverse(this);
replaceVariables(ScssStylesheet.getVariables());
} catch (Exception e) {
diff --git a/theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java b/theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java
index 4ab8486add..9c58a8c0f1 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java
@@ -55,8 +55,13 @@ public class EachDefNode extends Node implements IVariableNode {
@Override
public String toString() {
- return "Each Definition Node: {variable : " + var + ", "
- + "children : " + list.size() + "}";
+ if (hasListVariable()) {
+ return "Each Definition Node: {variable : " + var + ", "
+ + "listVariable : " + listVariable + "}";
+ } else {
+ return "Each Definition Node: {variable : " + var + ", "
+ + "children : " + list.size() + "}";
+ }
}
public boolean hasListVariable() {
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java b/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java
index a3fdd1cefa..d128da0b4b 100644
--- a/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java
+++ b/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java
@@ -23,6 +23,25 @@ import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.tree.BlockNode;
import com.vaadin.sass.tree.Node;
+/**
+ * Handle nesting of blocks by moving child blocks to their parent, updating
+ * their selector lists while doing so. Also parent selectors (&amp;) are
+ * handled here.
+ *
+ * Sample SASS code (from www.sass-lang.com):
+ *
+ * <pre>
+ * table.hl {
+ * margin: 2em 0;
+ * td.ln {
+ * text-align: right;
+ * }
+ * }
+ * </pre>
+ *
+ * Note that nested properties are handled by {@link NestedNodeHandler}, not
+ * here.
+ */
public class BlockNodeHandler {
public static void traverse(BlockNode node) {
@@ -47,26 +66,25 @@ public class BlockNodeHandler {
private static void combineParentSelectorListToChild(BlockNode node) {
ArrayList<String> newList = new ArrayList<String>();
- ArrayList<String> parentSelectors = ((BlockNode) node.getParentNode())
- .getSelectorList();
- ArrayList<String> childSelectors = node.getSelectorList();
- for (int i = 0; i < parentSelectors.size(); i++) {
- String parentSelector = parentSelectors.get(i);
- for (int j = 0; j < childSelectors.size(); j++) {
- String childSelector = childSelectors.get(j);
- newList.add(parentSelector + " " + childSelector);
+ BlockNode parentBlock = (BlockNode) node.getParentNode();
+ for (String parentSelector : parentBlock.getSelectorList()) {
+ for (String childSelector : node.getSelectorList()) {
+ // handle parent selector
+ if (childSelector.contains("&")) {
+ newList.add(childSelector.replace("&", parentSelector));
+ } else {
+ newList.add(parentSelector + " " + childSelector);
+ }
}
-
}
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));
+ oldParent.getParentNode().appendChild(node,
+ lastNodeAdded.get(oldParent));
} else {
- node.getParentNode().getParentNode()
- .appendChild(node, node.getParentNode());
+ oldParent.getParentNode().appendChild(node, oldParent);
}
lastNodeAdded.put(oldParent, node);
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/NestedNodeHandler.java b/theme-compiler/src/com/vaadin/sass/visitor/NestedNodeHandler.java
index bb094885f0..bf75b3f728 100644
--- a/theme-compiler/src/com/vaadin/sass/visitor/NestedNodeHandler.java
+++ b/theme-compiler/src/com/vaadin/sass/visitor/NestedNodeHandler.java
@@ -20,6 +20,25 @@ import com.vaadin.sass.tree.NestPropertiesNode;
import com.vaadin.sass.tree.Node;
import com.vaadin.sass.tree.RuleNode;
+/**
+ * Handle nested properties nodes (e.g. "font: { family: serif; }" to
+ * "font-family: serif;").
+ *
+ * Sample SASS code (from www.sass-lang.com):
+ *
+ * <pre>
+ * li {
+ * font: {
+ * family: serif;
+ * weight: bold;
+ * size: 1.2em;
+ * }
+ * }
+ * </pre>
+ *
+ * Note that this does not apply to nested blocks, which are handled by
+ * {@link BlockNodeHandler}.
+ */
public class NestedNodeHandler {
public static void traverse(NestPropertiesNode node) {
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorHandler.java b/theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorHandler.java
deleted file mode 100644
index 6b5c5538a4..0000000000
--- a/theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorHandler.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2011 Vaadin Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-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 {
-
- public static void traverse(BlockNode block) throws Exception {
- Node parentNode = block.getParentNode();
- if (parentNode instanceof BlockNode) {
- boolean isParentSelector = false;
- ArrayList<String> newList = new ArrayList<String>(block
- .getSelectorList().size());
- BlockNode parentBlock = (BlockNode) parentNode;
- for (final String parentSelector : parentBlock.getSelectorList()) {
- for (final String s : block.getSelectorList()) {
- if (s.contains("&")) {
- newList.add(s.replace("&", parentSelector));
- isParentSelector = true;
- } else {
- newList.add(parentSelector + " " + s);
- }
- }
- }
- if (isParentSelector) {
- block.setSelectorList(newList);
- Node oldparent = block.getParentNode();
- HashMap<Node, Node> lastNodeAdded = ScssStylesheet
- .getLastNodeAdded();
- if (lastNodeAdded.containsKey(block.getParentNode())) {
- block.getParentNode()
- .getParentNode()
- .appendChild(block,
- lastNodeAdded.get(block.getParentNode()));
- } else {
- block.getParentNode().getParentNode()
- .appendChild(block, block.getParentNode());
- }
-
- lastNodeAdded.put(oldparent, block);
- }
- }
- }
-}