Skip to content

Commit

Permalink
Added classname selector
Browse files Browse the repository at this point in the history
  • Loading branch information
minetoblend committed Nov 24, 2018
1 parent 756e757 commit 9c6f930
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 3 deletions.
@@ -1,11 +1,14 @@
package com.spinyowl.spinygui.core.converter.css3.visitor;

import com.spinyowl.spinygui.core.component.Button;
import com.spinyowl.spinygui.core.component.Panel;
import com.spinyowl.spinygui.core.component.base.Component;
import com.spinyowl.spinygui.core.component.base.Container;
import com.spinyowl.spinygui.core.converter.css3.CSS3BaseVisitor;
import com.spinyowl.spinygui.core.converter.css3.CSS3Parser;
import com.spinyowl.spinygui.core.converter.css3.StyleReflectionHandler;
import com.spinyowl.spinygui.core.converter.css3.StyleSheetException;
import com.spinyowl.spinygui.core.style.selector.ClassNameSelector;
import com.spinyowl.spinygui.core.style.selector.StyleSelector;
import com.spinyowl.spinygui.core.style.selector.TypeSelector;
import org.antlr.v4.runtime.tree.ParseTree;
Expand Down Expand Up @@ -33,11 +36,11 @@ public List<StyleSelector> visitSelectorGroup(CSS3Parser.SelectorGroupContext ct

@Override
public List<StyleSelector> visitSelector(CSS3Parser.SelectorContext ctx) {
var list = new ArrayList<StyleSelector>();
var firstSelectorSequence = visitSimpleSelectorSequence(ctx.simpleSelectorSequence(0)).get(0);
for (int i = 1; i < ctx.simpleSelectorSequence().size(); i++) {
final var selectorSequence = visitSimpleSelectorSequence(ctx.simpleSelectorSequence(i)).get(0);


if (ctx.combinator(i - 1).Space() != null) {
firstSelectorSequence = selectorSequence.and(firstSelectorSequence);
} else if (ctx.combinator(i - 1).Greater() != null) {
Expand All @@ -48,7 +51,8 @@ public List<StyleSelector> visitSelector(CSS3Parser.SelectorContext ctx) {
//TODO: General Sibling Selector
}
}
return super.visitSelector(ctx);
list.add(firstSelectorSequence);
return list;
}

@Override
Expand Down Expand Up @@ -85,4 +89,15 @@ public List<StyleSelector> visitPseudo(CSS3Parser.PseudoContext ctx) {
}
return list;
}

@Override
public List<StyleSelector> visitClassName(CSS3Parser.ClassNameContext ctx) {
var list = new ArrayList<StyleSelector>();

var clazz = ctx.ident().getText();

list.add(new ClassNameSelector(clazz));

return list;
}
}
@@ -0,0 +1,33 @@
package com.spinyowl.spinygui.core.style.selector;

import com.spinyowl.spinygui.core.component.base.Component;

import java.util.stream.Stream;

public class ClassNameSelector implements StyleSelector {

private String className;

public ClassNameSelector(String className) {
this.className = className;
}

@Override
public boolean test(Component component) {

var classes = component.getAttribute("class");
if (classes != null) {
var classList = classes.split(" ");
return Stream.of(classList).anyMatch((clazz) -> clazz.equals(className));
}
return false;
}

public String getClassName() {
return className;
}

public void setClassName(String className) {
this.className = className;
}
}
Expand Up @@ -17,6 +17,14 @@ public boolean test(Component component) {
return component.getClass().equals(type);
}

public Class<?> getType() {
return type;
}

public void setType(Class<?> type) {
this.type = type;
}

@Override
public String toString() {
return new StringJoiner(", ", TypeSelector.class.getSimpleName() + "[", "]")
Expand Down
Expand Up @@ -10,7 +10,7 @@ public class StyleSheetFactoryTest {
@Test
public void createFromCSS() throws StyleSheetException {

String css = "container > button:hover" +
String css = "panel > button .test" +
"{" +
"background: red;" +
"}";
Expand Down

0 comments on commit 9c6f930

Please sign in to comment.