diff --git a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java index 80f807e..7618db7 100644 --- a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java +++ b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java @@ -298,6 +298,18 @@ private String generateHref(Hyperlink hyperlink) { } } + @Override + public List visit(Checkbox checkbox, Context context) { + Map attributes = new HashMap<>(); + attributes.put("type", "checkbox"); + + if (checkbox.checked()) { + attributes.put("checked", "checked"); + } + + return list(Html.element("input", attributes)); + } + @Override public List visit(Bookmark bookmark, Context context) { return list(Html.element("a", map("id", generateId(bookmark.getName())), list(Html.FORCE_WRITE))); diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Checkbox.java b/src/main/java/org/zwobble/mammoth/internal/documents/Checkbox.java new file mode 100644 index 0000000..62e2944 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/internal/documents/Checkbox.java @@ -0,0 +1,18 @@ +package org.zwobble.mammoth.internal.documents; + +public class Checkbox implements DocumentElement { + private final boolean checked; + + public Checkbox(boolean checked) { + this.checked = checked; + } + + public boolean checked() { + return this.checked; + } + + @Override + public T accept(DocumentElementVisitor visitor, U context) { + return visitor.visit(this, context); + } +} diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java b/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java index 908a9b7..ea67113 100644 --- a/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java +++ b/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java @@ -13,6 +13,7 @@ public interface DocumentElementVisitor { T visit(TableCell tableCell, U context); T visit(Hyperlink hyperlink, U context); + T visit(Checkbox checkbox, U context); T visit(Bookmark bookmark, U context); T visit(NoteReference noteReference, U context); T visit(CommentReference commentReference, U context); diff --git a/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java b/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java index 3cea235..c5d007e 100644 --- a/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java @@ -454,6 +454,22 @@ public void hyperlinkTargetFrameIsUsedAsAnchorTarget() { deepEquals(list(Html.collapsibleElement("a", map("href", "#doc-42-start", "target", "_blank"), list(Html.text("Hello")))))); } + @Test + public void uncheckedCheckboxIsConvertedToUncheckedCheckboxInput() { + assertThat( + convertToHtml(checkbox(false)), + deepEquals(list(Html.element("input", map("type", "checkbox")))) + ); + } + + @Test + public void checkedCheckboxIsConvertedToCheckedCheckboxInput() { + assertThat( + convertToHtml(checkbox(true)), + deepEquals(list(Html.element("input", map("type", "checkbox", "checked", "checked")))) + ); + } + @Test public void bookmarksAreConvertedToAnchorsWithIds() { assertThat( diff --git a/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java b/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java index d807e57..93dbccc 100644 --- a/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java +++ b/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java @@ -184,4 +184,8 @@ public static Argument> withAnchor(String anchor) { public static Argument> withTargetFrame(String targetFrame) { return arg(TARGET_FRAME, Optional.of(targetFrame)); } + + public static Checkbox checkbox(boolean checked) { + return new Checkbox(checked); + } }