diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-14 12:43:24 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-14 12:43:24 +0000 |
| commit | 22b699c4351a3eadc92b3ffb690b64a7ab903f1f (patch) | |
| tree | fda1945f9b0df68c55d66485effbc57bbe059d39 /src/main | |
| parent | 0889d26717379eaccc8a3d76df7d12144376e2c2 (diff) | |
Add attributes to self closing element
Diffstat (limited to 'src/main')
4 files changed, 39 insertions, 24 deletions
diff --git a/src/main/java/org/zwobble/mammoth/html/Html.java b/src/main/java/org/zwobble/mammoth/html/Html.java index 2291200..bd139c8 100644 --- a/src/main/java/org/zwobble/mammoth/html/Html.java +++ b/src/main/java/org/zwobble/mammoth/html/Html.java @@ -34,6 +34,10 @@ public class Html { } public static HtmlNode selfClosingElement(String tagName) { - return new HtmlSelfClosingElement(tagName); + return selfClosingElement(tagName, map()); + } + + public static HtmlNode selfClosingElement(String tagName, Map<String, String> attributes) { + return new HtmlSelfClosingElement(tagName, attributes); } } diff --git a/src/main/java/org/zwobble/mammoth/html/HtmlElement.java b/src/main/java/org/zwobble/mammoth/html/HtmlElement.java index 31b1fe2..8111507 100644 --- a/src/main/java/org/zwobble/mammoth/html/HtmlElement.java +++ b/src/main/java/org/zwobble/mammoth/html/HtmlElement.java @@ -1,8 +1,5 @@ package org.zwobble.mammoth.html; -import com.google.common.base.Function; -import com.google.common.collect.Ordering; - import java.util.List; import java.util.Map; @@ -21,17 +18,7 @@ public class HtmlElement implements HtmlNode { public void write(StringBuilder builder) { builder.append("<").append(tagName); - List<Map.Entry<String, String>> sortedAttributes = orderBy(Map.Entry<String, String>::getKey) - .sortedCopy(attributes.entrySet()); - - for (Map.Entry<String, String> attribute : sortedAttributes) { - builder - .append(" ") - .append(attribute.getKey()) - .append("=\"") - .append(HtmlWriter.escapeAttributeValue(attribute.getValue())) - .append("\""); - } + HtmlWriter.generateAttributes(attributes, builder); builder.append(">"); @@ -42,8 +29,4 @@ public class HtmlElement implements HtmlNode { .append(tagName) .append(">"); } - - private static <T, R extends Comparable<R>> Ordering<T> orderBy(Function<T, R> getKey) { - return Ordering.from((first, second) -> getKey.apply(first).compareTo(getKey.apply(second))); - } } diff --git a/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java b/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java index f3ef3f8..73f4734 100644 --- a/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java +++ b/src/main/java/org/zwobble/mammoth/html/HtmlSelfClosingElement.java @@ -1,16 +1,20 @@ package org.zwobble.mammoth.html; +import java.util.Map; + public class HtmlSelfClosingElement implements HtmlNode { private final String tagName; + private final Map<String, String> attributes; - public HtmlSelfClosingElement(String tagName) { + public HtmlSelfClosingElement(String tagName, Map<String, String> attributes) { this.tagName = tagName; + this.attributes = attributes; } @Override public void write(StringBuilder builder) { - builder.append("<") - .append(tagName) - .append(" />"); + builder.append("<").append(tagName); + HtmlWriter.generateAttributes(attributes, builder); + builder.append(" />"); } } diff --git a/src/main/java/org/zwobble/mammoth/html/HtmlWriter.java b/src/main/java/org/zwobble/mammoth/html/HtmlWriter.java index fdf1e6c..4262e03 100644 --- a/src/main/java/org/zwobble/mammoth/html/HtmlWriter.java +++ b/src/main/java/org/zwobble/mammoth/html/HtmlWriter.java @@ -1,11 +1,35 @@ package org.zwobble.mammoth.html; +import com.google.common.base.Function; +import com.google.common.collect.Ordering; + +import java.util.List; +import java.util.Map; + public class HtmlWriter { public static String escapeText(String text) { return text.replace("&", "&").replace("<", "<").replace(">", ">"); } - public static String escapeAttributeValue(String value) { + private static String escapeAttributeValue(String value) { return escapeText(value).replace("\"", """); } + + public static void generateAttributes(Map<String, String> attributes, StringBuilder builder) { + List<Map.Entry<String, String>> sortedAttributes = orderBy(Map.Entry<String, String>::getKey) + .sortedCopy(attributes.entrySet()); + + for (Map.Entry<String, String> attribute : sortedAttributes) { + builder + .append(" ") + .append(attribute.getKey()) + .append("=\"") + .append(HtmlWriter.escapeAttributeValue(attribute.getValue())) + .append("\""); + } + } + + private static <T, R extends Comparable<R>> Ordering<T> orderBy(Function<T, R> getKey) { + return Ordering.from((first, second) -> getKey.apply(first).compareTo(getKey.apply(second))); + } } |
