Skip to content

Commit 73f36b2

Browse files
committed
Finished logic for all Attribute Selectors
1 parent b0b3a35 commit 73f36b2

File tree

14 files changed

+180
-9
lines changed

14 files changed

+180
-9
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package me.david.sploty4.dom.css.selectors;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import lombok.Setter;
6+
import me.david.sploty4.dom.css.CSSSelector;
7+
8+
@AllArgsConstructor
9+
public abstract class AttributeSelector extends CSSSelector {
10+
11+
@Getter @Setter protected boolean ignoreCase;
12+
@Getter protected final char operator;
13+
@Getter @Setter protected String attributeName, value;
14+
15+
16+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package me.david.sploty4.dom.css.selectors.attribute;
2+
3+
import me.david.sploty4.document.text.HtmlDocument;
4+
import me.david.sploty4.dom.css.selectors.AttributeSelector;
5+
import me.david.sploty4.dom.html.StyleableNode;
6+
7+
public class BeginWithAttribute extends AttributeSelector {
8+
9+
public BeginWithAttribute(boolean ignoreCase, String attributeName, String value) {
10+
super(ignoreCase, '^', attributeName, value);
11+
}
12+
13+
@Override
14+
public boolean valid(StyleableNode node, HtmlDocument document) {
15+
String nodeValue = node.getRawAttribute(attributeName);
16+
if (ignoreCase) nodeValue = nodeValue.toLowerCase();
17+
return value.startsWith(nodeValue);
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package me.david.sploty4.dom.css.selectors.attribute;
2+
3+
import me.david.sploty4.document.text.HtmlDocument;
4+
import me.david.sploty4.dom.css.selectors.AttributeSelector;
5+
import me.david.sploty4.dom.html.StyleableNode;
6+
7+
public class ConstainsAttribute extends AttributeSelector {
8+
9+
public ConstainsAttribute(boolean ignoreCase, String attributeName, String value) {
10+
super(ignoreCase, '*', attributeName, value);
11+
}
12+
13+
@Override
14+
public boolean valid(StyleableNode node, HtmlDocument document) {
15+
String nodeValue = node.getRawAttribute(attributeName);
16+
if (ignoreCase) nodeValue = nodeValue.toLowerCase();
17+
return value.contains(nodeValue);
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package me.david.sploty4.dom.css.selectors.attribute;
2+
3+
import me.david.sploty4.document.text.HtmlDocument;
4+
import me.david.sploty4.dom.css.selectors.AttributeSelector;
5+
import me.david.sploty4.dom.html.StyleableNode;
6+
7+
public class EndWithAttribute extends AttributeSelector {
8+
9+
public EndWithAttribute(boolean ignoreCase, String attributeName, String value) {
10+
super(ignoreCase, '$', attributeName, value);
11+
}
12+
13+
@Override
14+
public boolean valid(StyleableNode node, HtmlDocument document) {
15+
String nodeValue = node.getRawAttribute(attributeName);
16+
if (ignoreCase) nodeValue = nodeValue.toLowerCase();
17+
return value.endsWith(nodeValue);
18+
}
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package me.david.sploty4.dom.css.selectors.attribute;
2+
3+
import me.david.sploty4.document.text.HtmlDocument;
4+
import me.david.sploty4.dom.css.selectors.AttributeSelector;
5+
import me.david.sploty4.dom.html.StyleableNode;
6+
7+
public class EqualsAttribute extends AttributeSelector {
8+
9+
public EqualsAttribute(boolean ignoreCase, String attributeName, String value) {
10+
super(ignoreCase, Character.MIN_VALUE, attributeName, value);
11+
}
12+
13+
@Override
14+
public boolean valid(StyleableNode node, HtmlDocument document) {
15+
String nodeValue = node.getRawAttribute(attributeName);
16+
return ignoreCase?nodeValue.equalsIgnoreCase(value):nodeValue.equals(value);
17+
}
18+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package me.david.sploty4.dom.css.selectors.attribute;
2+
3+
import me.david.sploty4.document.text.HtmlDocument;
4+
import me.david.sploty4.dom.css.selectors.AttributeSelector;
5+
import me.david.sploty4.dom.html.StyleableNode;
6+
7+
public class HasAttribute extends AttributeSelector {
8+
9+
public HasAttribute(boolean ignoreCase, String attributeName, String value) {
10+
super(ignoreCase, Character.MIN_VALUE, attributeName, value);
11+
}
12+
13+
@Override
14+
public boolean valid(StyleableNode node, HtmlDocument document) {
15+
return node.hasAttribute(attributeName);
16+
}
17+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package me.david.sploty4.dom.css.selectors.attribute;
2+
3+
import me.david.sploty4.document.text.HtmlDocument;
4+
import me.david.sploty4.dom.css.selectors.AttributeSelector;
5+
import me.david.sploty4.dom.html.StyleableNode;
6+
7+
public class HyphenAttribute extends AttributeSelector {
8+
9+
public HyphenAttribute(boolean ignoreCase, String attributeName, String value) {
10+
super(ignoreCase, '|', attributeName, value);
11+
}
12+
13+
@Override
14+
public boolean valid(StyleableNode node, HtmlDocument document) {
15+
String nodeValue = node.getRawAttribute(attributeName).split("-")[0];
16+
return ignoreCase?nodeValue.equalsIgnoreCase(value):nodeValue.equals(value);
17+
}
18+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package me.david.sploty4.dom.css.selectors.attribute;
2+
3+
import me.david.sploty4.document.text.HtmlDocument;
4+
import me.david.sploty4.dom.css.selectors.AttributeSelector;
5+
import me.david.sploty4.dom.html.StyleableNode;
6+
7+
public class OneWordAttribute extends AttributeSelector {
8+
9+
public OneWordAttribute(boolean ignoreCase, String attributeName, String value) {
10+
super(ignoreCase, '~', attributeName, value);
11+
}
12+
13+
@Override
14+
public boolean valid(StyleableNode node, HtmlDocument document) {
15+
String nodeValue = node.getRawAttribute(attributeName);
16+
if (ignoreCase) nodeValue = nodeValue.toLowerCase();
17+
String[] split = nodeValue.split(" ");
18+
for (String word : split)
19+
if (word.equals(value))
20+
return true;
21+
return false;
22+
}
23+
}

src/main/java/me/david/sploty4/dom/css/selectors/special/RootSelector.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ public boolean startSelector(char c, DomCSSParser parser) {
1717
public boolean valid(StyleableNode node, HtmlDocument document) {
1818
return node instanceof BaseNode;
1919
}
20-
20+
2121
}

src/main/java/me/david/sploty4/dom/html/Node.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import me.david.sploty4.document.SyntaxException;
44
import me.david.sploty4.dom.html.attriute.Attribute;
55
import me.david.sploty4.dom.html.attriute.StandardAttribute;
6+
import me.david.sploty4.dom.html.attriute.ValueAttribute;
67
import me.david.sploty4.dom.html.nodes.TagHelper;
78
import me.david.sploty4.objects.IgnorePrint;
89

@@ -82,6 +83,13 @@ public StandardAttribute getStandartAttribute(String name){
8283
return null;
8384
}
8485

86+
public String getRawAttribute(String name){
87+
for(Attribute attribute : attributes)
88+
if(attribute instanceof ValueAttribute)
89+
return ((ValueAttribute) attribute).getStringValue();
90+
return null;
91+
}
92+
8593
@Override
8694
public Node clone() {
8795
try {

0 commit comments

Comments
 (0)