import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.visitor.BlockNodeHandler;
-import com.vaadin.sass.visitor.ParentSelectorHandler;
public class BlockNode extends Node implements IVariableNode {
@Override
public void traverse() {
try {
- ParentSelectorHandler.traverse(this);
BlockNodeHandler.traverse(this);
replaceVariables(ScssStylesheet.getVariables());
} catch (Exception e) {
@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() {
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 (&) 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) {
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);
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) {
+++ /dev/null
-/*
- * 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);
- }
- }
- }
-}