Skip to content

Commit 83282e4

Browse files
ars18wrwiText-CI
authored andcommitted
Implement disabled pseudo class selector. Minor refactoring.
DEVSIX-1973
1 parent f3e0536 commit 83282e4

File tree

5 files changed

+81
-6
lines changed

5 files changed

+81
-6
lines changed

styled-xml-parser/src/main/java/com/itextpdf/styledxmlparser/CommonAttributeConstants.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,16 @@ This file is part of the iText (R) project.
4343
package com.itextpdf.styledxmlparser;
4444

4545
public class CommonAttributeConstants {
46-
/** The Constant ID. */
47-
public static final String ID = "id";
4846
/** The Constant CLASS. */
4947
public static final String CLASS = "class";
48+
/** The Constant DISABLED. */
49+
public static final String DISABLED = "disabled";
50+
/** The Constant ID. */
51+
public static final String ID = "id";
5052
/** The Constant LANG. */
5153
public static final String LANG = "lang";
52-
/** The Constant LANG. */
53-
public static final String STYLESHEET = "stylesheet";
54-
/** The Constant LANG. */
54+
/** The Constant REL. */
5555
public static final String REL = "rel";
56+
/** The Constant STYLESHEET. */
57+
public static final String STYLESHEET = "stylesheet";
5658
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.itextpdf.styledxmlparser.css.selector.item;
2+
3+
import com.itextpdf.styledxmlparser.css.CommonCssConstants;
4+
import com.itextpdf.styledxmlparser.node.ICustomElementNode;
5+
import com.itextpdf.styledxmlparser.node.IDocumentNode;
6+
import com.itextpdf.styledxmlparser.node.IElementNode;
7+
import com.itextpdf.styledxmlparser.node.INode;
8+
9+
class CssPseudoClassDisabledSelectorItem extends CssPseudoClassSelectorItem {
10+
private static final CssPseudoClassDisabledSelectorItem instance = new CssPseudoClassDisabledSelectorItem();
11+
12+
public static CssPseudoClassDisabledSelectorItem getInstance() {
13+
return instance;
14+
}
15+
16+
private CssPseudoClassDisabledSelectorItem() {
17+
super(CommonCssConstants.DISABLED);
18+
}
19+
20+
@Override
21+
public boolean matches(INode node) {
22+
if (!(node instanceof IElementNode) || node instanceof ICustomElementNode || node instanceof IDocumentNode) {
23+
return false;
24+
}
25+
return null != ((IElementNode) node).getAttribute(CommonCssConstants.DISABLED);
26+
}
27+
}

styled-xml-parser/src/main/java/com/itextpdf/styledxmlparser/css/selector/item/CssPseudoClassSelectorItem.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,10 @@ public static CssPseudoClassSelectorItem create(String pseudoClass, String argum
122122
case CommonCssConstants.TARGET:
123123
case CommonCssConstants.VISITED:
124124
return new AlwaysNotApplySelectorItem(pseudoClass, arguments);
125+
case CommonCssConstants.DISABLED:
126+
return CssPseudoClassDisabledSelectorItem.getInstance();
125127
//Still unsupported, should be addressed in DEVSIX-1440
126128
//case CommonCssConstants.CHECKED:
127-
//case CommonCssConstants.DISABLED:
128129
//case CommonCssConstants.ENABLED:
129130
//case CommonCssConstants.IN_RANGE:
130131
//case CommonCssConstants.INVALID:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.itextpdf.styledxmlparser.css.selector.item;
2+
3+
import com.itextpdf.styledxmlparser.IXmlParser;
4+
import com.itextpdf.styledxmlparser.css.CssStyleSheet;
5+
import com.itextpdf.styledxmlparser.css.media.MediaDeviceDescription;
6+
import com.itextpdf.styledxmlparser.css.parse.CssStyleSheetParser;
7+
import com.itextpdf.styledxmlparser.jsoup.nodes.Element;
8+
import com.itextpdf.styledxmlparser.node.IDocumentNode;
9+
import com.itextpdf.styledxmlparser.node.IElementNode;
10+
import com.itextpdf.styledxmlparser.node.impl.jsoup.JsoupHtmlParser;
11+
import com.itextpdf.styledxmlparser.node.impl.jsoup.node.JsoupDocumentNode;
12+
import com.itextpdf.styledxmlparser.node.impl.jsoup.node.JsoupElementNode;
13+
import com.itextpdf.test.ExtendedITextTest;
14+
import com.itextpdf.test.annotations.type.UnitTest;
15+
import org.junit.Assert;
16+
import org.junit.Test;
17+
import org.junit.experimental.categories.Category;
18+
19+
import java.io.FileInputStream;
20+
import java.io.FileNotFoundException;
21+
import java.io.IOException;
22+
23+
@Category(UnitTest.class)
24+
public class CssPseudoClassDisabledSelectorItemTest extends ExtendedITextTest {
25+
26+
private static final String sourceFolder = "./src/test/resources/com/itextpdf/styledxmlparser/css/selector/item/CssPseudoClassDisabledSelectorItemTest/";
27+
28+
@Test
29+
public void testDisabledSelector() throws IOException {
30+
String filename = sourceFolder + "disabled.html";
31+
32+
CssPseudoClassDisabledSelectorItem item = CssPseudoClassDisabledSelectorItem.getInstance();
33+
IXmlParser htmlParser = new JsoupHtmlParser();
34+
IDocumentNode documentNode = htmlParser.parse(new FileInputStream(filename), "UTF-8");
35+
IElementNode disabledInput = new JsoupElementNode(((JsoupDocumentNode)documentNode).getDocument().getElementsByTag("input").first());
36+
IElementNode enabledInput = new JsoupElementNode(((JsoupDocumentNode)documentNode).getDocument().getElementsByTag("input").get(1));
37+
38+
Assert.assertFalse(item.matches(documentNode));
39+
Assert.assertTrue(item.matches(disabledInput));
40+
Assert.assertFalse(item.matches(enabledInput));
41+
Assert.assertFalse(item.matches(null));
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<input type="text" disabled name="FirstD" value="Mickey">
2+
<input type="text" name="FirstE" value="Mickey">

0 commit comments

Comments
 (0)