Skip to content

Commit 04d0155

Browse files
author
Alexandr Fedorov
committed
Add display:flex support for all relevant tags
DEVSIX-7402
1 parent 35ad09c commit 04d0155

File tree

106 files changed

+82
-63
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+82
-63
lines changed

src/main/java/com/itextpdf/html2pdf/attach/impl/DefaultTagWorkerMapping.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ class DefaultTagWorkerMapping {
9090
workerMapping.putMapping(TagConstants.ABBR, (lhs, rhs) -> new AbbrTagWorker(lhs, rhs));
9191
workerMapping.putMapping(TagConstants.ADDRESS, (lhs, rhs) -> new DivTagWorker(lhs, rhs));
9292
workerMapping.putMapping(TagConstants.ARTICLE, (lhs, rhs) -> new DivTagWorker(lhs, rhs));
93+
workerMapping.putMapping(TagConstants.ARTICLE, CssConstants.FLEX,
94+
(lhs, rhs) -> new DisplayFlexTagWorker(lhs, rhs));
9395
workerMapping.putMapping(TagConstants.ASIDE, (lhs, rhs) -> new DivTagWorker(lhs, rhs));
9496
workerMapping.putMapping(TagConstants.B, (lhs, rhs) -> new SpanTagWorker(lhs, rhs));
9597
workerMapping.putMapping(TagConstants.BDI, (lhs, rhs) -> new SpanTagWorker(lhs, rhs));
@@ -114,16 +116,23 @@ class DefaultTagWorkerMapping {
114116
workerMapping.putMapping(TagConstants.FIELDSET, (lhs, rhs) -> new DivTagWorker(lhs, rhs));
115117
workerMapping.putMapping(TagConstants.FIGCAPTION, (lhs, rhs) -> new DivTagWorker(lhs, rhs));
116118
workerMapping.putMapping(TagConstants.FIGURE, (lhs, rhs) -> new DivTagWorker(lhs, rhs));
119+
workerMapping.putMapping(TagConstants.FIGURE, CssConstants.FLEX,
120+
(lhs, rhs) -> new DisplayFlexTagWorker(lhs, rhs));
117121
workerMapping.putMapping(TagConstants.FONT, (lhs, rhs) -> new SpanTagWorker(lhs, rhs));
118122
workerMapping.putMapping(TagConstants.FOOTER, (lhs, rhs) -> new DivTagWorker(lhs, rhs));
123+
workerMapping.putMapping(TagConstants.FOOTER, CssConstants.FLEX,
124+
(lhs, rhs) -> new DisplayFlexTagWorker(lhs, rhs));
119125
workerMapping.putMapping(TagConstants.FORM, (lhs, rhs) -> new DivTagWorker(lhs, rhs));
126+
workerMapping.putMapping(TagConstants.FORM, CssConstants.FLEX, (lhs, rhs) -> new DisplayFlexTagWorker(lhs, rhs));
120127
workerMapping.putMapping(TagConstants.H1, (lhs, rhs) -> new HTagWorker(lhs, rhs));
121128
workerMapping.putMapping(TagConstants.H2, (lhs, rhs) -> new HTagWorker(lhs, rhs));
122129
workerMapping.putMapping(TagConstants.H3, (lhs, rhs) -> new HTagWorker(lhs, rhs));
123130
workerMapping.putMapping(TagConstants.H4, (lhs, rhs) -> new HTagWorker(lhs, rhs));
124131
workerMapping.putMapping(TagConstants.H5, (lhs, rhs) -> new HTagWorker(lhs, rhs));
125132
workerMapping.putMapping(TagConstants.H6, (lhs, rhs) -> new HTagWorker(lhs, rhs));
126133
workerMapping.putMapping(TagConstants.HEADER, (lhs, rhs) -> new DivTagWorker(lhs, rhs));
134+
workerMapping.putMapping(TagConstants.HEADER, CssConstants.FLEX,
135+
(lhs, rhs) -> new DisplayFlexTagWorker(lhs, rhs));
127136
workerMapping.putMapping(TagConstants.HR, (lhs, rhs) -> new HrTagWorker(lhs, rhs));
128137
workerMapping.putMapping(TagConstants.HTML, (lhs, rhs) -> new HtmlTagWorker(lhs, rhs));
129138
workerMapping.putMapping(TagConstants.I, (lhs, rhs) -> new SpanTagWorker(lhs, rhs));
@@ -149,6 +158,8 @@ class DefaultTagWorkerMapping {
149158
workerMapping.putMapping(TagConstants.S, (lhs, rhs) -> new SpanTagWorker(lhs, rhs));
150159
workerMapping.putMapping(TagConstants.SAMP, (lhs, rhs) -> new SpanTagWorker(lhs, rhs));
151160
workerMapping.putMapping(TagConstants.SECTION, (lhs, rhs) -> new DivTagWorker(lhs, rhs));
161+
workerMapping.putMapping(TagConstants.SECTION, CssConstants.FLEX,
162+
(lhs, rhs) -> new DisplayFlexTagWorker(lhs, rhs));
152163
workerMapping.putMapping(TagConstants.SELECT, (lhs, rhs) -> new SelectTagWorker(lhs, rhs));
153164
workerMapping.putMapping(TagConstants.SMALL, (lhs, rhs) -> new SpanTagWorker(lhs, rhs));
154165
workerMapping.putMapping(TagConstants.SPAN, (lhs, rhs) -> new SpanTagWorker(lhs, rhs));

src/main/java/com/itextpdf/html2pdf/attach/impl/tags/PTagWorker.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,9 @@ public boolean processTagChild(ITagWorker childTagWorker, ProcessorContext conte
153153
}
154154
}
155155
return allChildrenProcessed;
156+
} else if (childTagWorker instanceof DisplayFlexTagWorker){
157+
processBlockElement((Div)element);
158+
return true;
156159
}
157160
return false;
158161
}

src/main/java/com/itextpdf/html2pdf/css/apply/impl/DefaultTagCssApplierMapping.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,15 @@ class DefaultTagCssApplierMapping {
5050
mapping.putMapping(TagConstants.ABBR, () -> new SpanTagCssApplier());
5151
mapping.putMapping(TagConstants.ADDRESS, () -> new BlockCssApplier());
5252
mapping.putMapping(TagConstants.ARTICLE, () -> new BlockCssApplier());
53+
mapping.putMapping(TagConstants.ARTICLE, CssConstants.FLEX, () -> new DisplayFlexTagCssApplier());
5354
mapping.putMapping(TagConstants.ASIDE, () -> new BlockCssApplier());
5455
mapping.putMapping(TagConstants.B, () -> new SpanTagCssApplier());
5556
mapping.putMapping(TagConstants.BDI, () -> new SpanTagCssApplier());
5657
mapping.putMapping(TagConstants.BDO, () -> new SpanTagCssApplier());
5758
mapping.putMapping(TagConstants.BLOCKQUOTE, () -> new BlockCssApplier());
5859
mapping.putMapping(TagConstants.BODY, () -> new BodyTagCssApplier());
5960
mapping.putMapping(TagConstants.BUTTON, () -> new BlockCssApplier());
61+
mapping.putMapping(TagConstants.BUTTON, CssConstants.FLEX, () -> new DisplayFlexTagCssApplier());
6062
mapping.putMapping(TagConstants.CAPTION, () -> new CaptionCssApplier());
6163
mapping.putMapping(TagConstants.CENTER, () -> new BlockCssApplier());
6264
mapping.putMapping(TagConstants.CITE, () -> new SpanTagCssApplier());
@@ -73,16 +75,20 @@ class DefaultTagCssApplierMapping {
7375
mapping.putMapping(TagConstants.FIELDSET, () -> new BlockCssApplier());
7476
mapping.putMapping(TagConstants.FIGCAPTION, () -> new BlockCssApplier());
7577
mapping.putMapping(TagConstants.FIGURE, () -> new BlockCssApplier());
78+
mapping.putMapping(TagConstants.FIGURE, CssConstants.FLEX, () -> new DisplayFlexTagCssApplier());
7679
mapping.putMapping(TagConstants.FONT, () -> new SpanTagCssApplier());
7780
mapping.putMapping(TagConstants.FOOTER, () -> new BlockCssApplier());
81+
mapping.putMapping(TagConstants.FOOTER, CssConstants.FLEX, () -> new DisplayFlexTagCssApplier());
7882
mapping.putMapping(TagConstants.FORM, () -> new BlockCssApplier());
83+
mapping.putMapping(TagConstants.FORM, CssConstants.FLEX, () -> new DisplayFlexTagCssApplier());
7984
mapping.putMapping(TagConstants.H1, () -> new BlockCssApplier());
8085
mapping.putMapping(TagConstants.H2, () -> new BlockCssApplier());
8186
mapping.putMapping(TagConstants.H3, () -> new BlockCssApplier());
8287
mapping.putMapping(TagConstants.H4, () -> new BlockCssApplier());
8388
mapping.putMapping(TagConstants.H5, () -> new BlockCssApplier());
8489
mapping.putMapping(TagConstants.H6, () -> new BlockCssApplier());
8590
mapping.putMapping(TagConstants.HEADER, () -> new BlockCssApplier());
91+
mapping.putMapping(TagConstants.HEADER, CssConstants.FLEX, () -> new DisplayFlexTagCssApplier());
8692
mapping.putMapping(TagConstants.HR, () -> new HrTagCssApplier());
8793
mapping.putMapping(TagConstants.HTML, () -> new HtmlTagCssApplier());
8894
mapping.putMapping(TagConstants.I, () -> new SpanTagCssApplier());
@@ -101,11 +107,13 @@ class DefaultTagCssApplierMapping {
101107
mapping.putMapping(TagConstants.OPTGROUP, () -> new BlockCssApplier());
102108
mapping.putMapping(TagConstants.OPTION, () -> new BlockCssApplier());
103109
mapping.putMapping(TagConstants.P, () -> new BlockCssApplier());
110+
mapping.putMapping(TagConstants.P, CssConstants.FLEX, () -> new DisplayFlexTagCssApplier());
104111
mapping.putMapping(TagConstants.PRE, () -> new BlockCssApplier());
105112
mapping.putMapping(TagConstants.Q, () -> new SpanTagCssApplier());
106113
mapping.putMapping(TagConstants.S, () -> new SpanTagCssApplier());
107114
mapping.putMapping(TagConstants.SAMP, () -> new SpanTagCssApplier());
108115
mapping.putMapping(TagConstants.SECTION, () -> new BlockCssApplier());
116+
mapping.putMapping(TagConstants.SECTION, CssConstants.FLEX, () -> new DisplayFlexTagCssApplier());
109117
mapping.putMapping(TagConstants.SELECT, () -> new BlockCssApplier());
110118
mapping.putMapping(TagConstants.SMALL, () -> new SpanTagCssApplier());
111119
mapping.putMapping(TagConstants.SPAN, () -> new SpanTagCssApplier());
@@ -143,15 +151,18 @@ class DefaultTagCssApplierMapping {
143151
mapping.putMapping(TagConstants.A, CssConstants.INLINE_BLOCK, () -> new BlockCssApplier());
144152
mapping.putMapping(TagConstants.A, CssConstants.BLOCK, () -> new BlockCssApplier());
145153
mapping.putMapping(TagConstants.A, CssConstants.TABLE_CELL, () -> new BlockCssApplier());
154+
mapping.putMapping(TagConstants.A, CssConstants.FLEX, () -> new DisplayFlexTagCssApplier());
146155

147156
mapping.putMapping(TagConstants.LABEL, CssConstants.BLOCK, () -> new BlockCssApplier());
148157
mapping.putMapping(TagConstants.LABEL, CssConstants.INLINE_BLOCK, () -> new BlockCssApplier());
158+
mapping.putMapping(TagConstants.LABEL, CssConstants.FLEX, () -> new DisplayFlexTagCssApplier());
149159

150160
mapping.putMapping(TagConstants.DIV, CssConstants.TABLE, () -> new TableTagCssApplier());
151161
mapping.putMapping(TagConstants.DIV, CssConstants.TABLE_CELL, () -> new TdTagCssApplier());
152162
mapping.putMapping(TagConstants.DIV, CssConstants.TABLE_ROW, () -> new DisplayTableRowTagCssApplier());
153163
mapping.putMapping(TagConstants.DIV, CssConstants.FLEX, () -> new DisplayFlexTagCssApplier());
154164
mapping.putMapping(TagConstants.SPAN, CssConstants.FLEX, () -> new DisplayFlexTagCssApplier());
165+
155166
mapping.putMapping(TagConstants.DIV, CssConstants.GRID, () -> new DisplayGridTagCssApplier());
156167

157168
// pseudo elements mapping

src/main/java/com/itextpdf/html2pdf/css/resolve/DefaultCssResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ private Map<String, String> resolveStyles(INode element, CssContext context) {
200200
final String currentElementDisplay = elementStyles.get(CssConstants.DISPLAY);
201201
if (isFlexItem(entry, currentElementDisplay) &&
202202
!CommonCssConstants.NONE.equals(currentElementDisplay) &&
203-
!CommonCssConstants.GRID.equals(currentElementDisplay)) {
203+
!CommonCssConstants.GRID.equals(currentElementDisplay) && !CssConstants.LIST_ITEM.equals(currentElementDisplay)) {
204204
elementStyles.put(CssConstants.DISPLAY, CssConstants.BLOCK);
205205
}
206206
}

src/test/java/com/itextpdf/html2pdf/HtmlConverterPdfUA1UA2Test.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,16 @@ public void inputFieldsUA2Test(PdfUAConformance conformance) throws IOException,
322322
convertToUaAndCheckCompliance(conformance, sourceHtml, destinationPdf, cmpFile, null, true, null);
323323
}
324324

325+
@ParameterizedTest
326+
@MethodSource("conformanceLevels")
327+
public void flexTagsUA2Test(PdfUAConformance conformance) throws IOException, InterruptedException {
328+
String sourceHtml = SOURCE_FOLDER + "flexTagsUA2.html";
329+
String cmpFile = SOURCE_FOLDER + "cmp_flexTagsUA" + conformance.getPart() + ".pdf";
330+
String destinationPdf = DESTINATION_FOLDER + "flexTagsUA" + conformance.getPart() + ".pdf";
331+
332+
convertToUaAndCheckCompliance(conformance, sourceHtml, destinationPdf, cmpFile, null, true, null);
333+
}
334+
325335
@ParameterizedTest
326336
@MethodSource("conformanceLevels")
327337
@LogMessages(messages = {@LogMessage(messageTemplate = PdfUALogMessageConstants.PAGE_FLUSHING_DISABLED, count = 1)})

src/test/java/com/itextpdf/html2pdf/css/flex/DisplayFlexTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,6 @@ public void imageStretchColumnFlexContainerTest() throws IOException, Interrupte
611611
}
612612

613613
@Test
614-
//TODO: DEVSIX-8730 bullet is not drawn
615614
public void unorderedListFlexTest() throws IOException, InterruptedException {
616615
convertToPdfAndCompare("UnorderedListWithFlex", SOURCE_FOLDER, DESTINATION_FOLDER);
617616
}
@@ -704,7 +703,6 @@ public void inlineBlockInsideFlexSimpleColumnTest() throws IOException, Interrup
704703
}
705704

706705
@Test
707-
// TODO DEVSIX-7402 Add display:flex support for all relevant tags
708706
public void displayFlexOnHeaderTagTest() throws IOException, InterruptedException {
709707
convertToPdfAndCompare("displayFlexOnHeaderTag", SOURCE_FOLDER, DESTINATION_FOLDER);
710708
}

0 commit comments

Comments
 (0)