71 Commits

Author SHA1 Message Date
David
eb3f28a09f [maven-release-plugin] prepare release j2html-1.2.1 2017-11-28 00:05:25 +01:00
David
368241313d Allow reading static resources from jars 2017-11-27 19:41:20 +01:00
David
4288924f8f Fix greedy semi-colon stripper bug in CSSMin
If CSSMin encounters a CSS-rule without a semi-colon at the end,
it will strip one char too many from that rule. This commit fixes that.
2017-11-27 12:54:07 +01:00
Janning Vygen
9948095c08 Fix for https://github.com/tipsy/j2html/issues/80 (#82)
* Fix for https://github.com/tipsy/j2html/issues/79

* Fix for https://github.com/tipsy/j2html/issues/80
2017-11-10 16:11:58 +01:00
Janning Vygen
56090046b5 Fix for https://github.com/tipsy/j2html/issues/79 (#81) 2017-11-10 16:07:20 +01:00
Thomas Tanon
d45af42650 Adds Tag.withLang and Tag.withDir (#76)
* Adds Tag.withLang and Tag.withDir

Allows easiest addition of mixed languages

* Add withCond(Lang|Dir)
2017-10-23 14:21:29 +02:00
David
7d65f91f44 Fix javadoc bug 2017-09-03 11:30:05 +02:00
David
aecf5e71d6 Update README.md 2017-09-03 11:26:10 +02:00
David
cf47772c89 [maven-release-plugin] prepare for next development iteration 2017-09-03 11:16:05 +02:00
David
897c53d830 [maven-release-plugin] prepare release j2html-1.2.0 2017-09-03 11:15:46 +02:00
David
1e29d81107 Fix another javadoc violation 2017-09-03 11:14:41 +02:00
David
dee3efb8e7 Remove javadoc violation 2017-09-03 11:08:36 +02:00
David
ee82201dfb Misc cleanup
- Add javadoc to Config
- Make CSSMin/JSMin configurable (add Minifier interface)
- Change SimpleEscaper back to a util
2017-09-02 19:41:37 +02:00
David
691680ea51 Add simple formatter (fixed #65)
* Add simple formatter
* Create Indenter interface
* Shorten variable-names in renderFormatted
* Fix javadoc
2017-09-02 19:05:48 +02:00
David
0853692e80 Use diamond operator 2017-09-01 20:50:20 +02:00
David
c2bc4b3209 Add @FunctionalInterface annotation to TextEscaper 2017-09-01 20:40:57 +02:00
David
ff9d138f63 Add option to close empty tags (fixes #52) 2017-09-01 20:39:23 +02:00
David
f778f4df3c Add convenience method for title (fixes #71) 2017-09-01 20:12:47 +02:00
David
a0b060ac42 Let attr() take object value (fixes #57) 2017-09-01 20:09:10 +02:00
David
4161be67bb Fix escaper-test 2017-09-01 20:07:48 +02:00
David
863527f684 Update README.md 2017-08-14 17:58:37 +02:00
David
5ef2dd3ec5 [maven-release-plugin] prepare for next development iteration 2017-08-14 17:45:23 +02:00
David
fc3bb29b6a [maven-release-plugin] prepare release j2html-1.1.0 2017-08-14 17:45:02 +02:00
Sergey Bezkostnyi
ef5777e54a Add ability to change text escaper implementation (#70) 2017-08-14 17:10:02 +02:00
David
cfc1489399 Merge pull request #63 from maztan/master
Add method to get number of children of ContainerTag
2017-07-29 19:19:08 +02:00
Ed Savailonei
8112dad1bb Add methd to get number of children of ContainerTag 2017-07-03 12:41:10 +02:00
David
235dec78ed Merge pull request #62 from kiru/patch-1
Updaate Gradle Version
2017-05-19 23:05:12 +02:00
Kiru
6316dd2262 Updaate Gradle Version 2017-05-19 21:57:04 +02:00
David
5667d7c68d Update README.md 2017-05-16 18:49:27 +02:00
David
13911d5f57 [maven-release-plugin] prepare for next development iteration 2017-05-16 18:00:33 +02:00
David
0bc6e274db [maven-release-plugin] prepare release j2html-1.0.0 2017-05-16 18:00:10 +02:00
David
325afd463c Fix version 2017-05-16 17:58:03 +02:00
David
f331eb9eb3 Merge pull request #61 from EthanDRaymond/DomContentJoiner-Does-Not-Use-Delimiter
Fixed a bug (maybe) where a delimiter was not being used
2017-05-12 22:45:10 +02:00
Ethan Raymond
d37dc1cac6 Fixed a bug (maybe) where a delimiter was not being used. 2017-05-12 15:39:23 -04:00
David
dab61bd662 [maven-release-plugin] prepare for next development iteration 2017-05-03 19:57:56 +02:00
David
d559f05903 [maven-release-plugin] prepare release j2html-1.0.0-RC 2017-05-03 19:57:31 +02:00
David
97a8f34572 Make filereader java6 compatible, because why not 2017-05-02 22:39:59 +02:00
David
6305e364ca Experimental Java6/Java7 support 2017-05-02 03:12:17 +02:00
David
28ba518b12 Fix name collision + minor cleanup 2017-05-01 19:10:42 +02:00
David
5f04cde97c Merge pull request #56 from tipsy/id-class-shorthand
Add shorthand notation for id/class
2017-05-01 18:59:11 +02:00
David
b00ba50133 Add attrs method to tagcreator 2017-05-01 18:51:04 +02:00
David
e09918da12 Add missing test-case to attr.shortform 2017-05-01 18:06:10 +02:00
David
55b74e81aa Improve generics in Attr.addTo 2017-05-01 16:54:05 +02:00
David
75deeff13d Remove unwanted import 2017-05-01 16:29:22 +02:00
David
3aa05aa540 Merge branch 'master' into id-class-shorthand 2017-05-01 16:15:01 +02:00
David
fb24d1eabf Merge pull request #55 from chmuche/empty-attribute
Empty attribute
2017-05-01 15:50:07 +02:00
David
458f3baf98 Merge pull request #54 from chmuche/gradle-dependency
Add Gradle dependency in README.md
2017-05-01 15:48:25 +02:00
David
a661f37575 Add document() method that renders a html() child 2017-05-01 15:45:02 +02:00
David
26796cd30d Add shorthand notation for id/class 2017-05-01 15:22:48 +02:00
chmuche
75dc60c415 Add Test 2017-05-01 15:19:27 +02:00
chmuche
99b98f9b09 Create a method attr without value to create empty attribute inside the tag 2017-05-01 15:12:41 +02:00
chmuche
8d4756bab0 Add Gradle dependency in README.md 2017-05-01 15:07:50 +02:00
David
2c1f337348 Update README.md 2017-04-30 20:37:27 +02:00
David
d437e1affd Add a domcontentjoiner 2017-04-29 16:44:48 +02:00
David
4fdcc3c213 Remove need for with() 2017-04-29 12:15:51 +02:00
David
ba3261b210 Update README.md 2017-04-25 23:34:26 +02:00
David
ee0100d1a7 Set snapshot to 1.0.0 2017-04-20 23:17:07 +02:00
David
9ec3088d82 [maven-release-plugin] prepare for next development iteration 2017-04-20 23:13:36 +02:00
David
8052cdaff1 [maven-release-plugin] prepare release j2html-0.99 2017-04-20 23:13:16 +02:00
David
34b2410830 Add withClasses(String... classes) method 2017-04-20 23:08:12 +02:00
David
75d361fa20 Merge pull request #51 from tipsy/iff-else
Add generic iff-method to use in method calls
2017-04-20 21:34:07 +02:00
David
3e91da0640 Add generic iff-method to use in method calls 2017-04-17 16:20:12 +02:00
David
d1613b0570 Change Error to RuntimeException 2017-04-17 15:35:06 +02:00
David
a841271ba4 Merge pull request #50 from tipsy/inline-static-fix
Fix #14 (Unable to read files from directories other that /src/main/r…
2017-04-16 10:37:09 +02:00
David
9272438940 Simplify resource handling and throw exception 2017-04-13 21:21:01 +02:00
David
3d43eb159f Fix #14 (Unable to read files from directories other that /src/main/resources) 2017-04-13 01:25:16 +02:00
David
30bfe4ea7f Small formatting fix 2017-04-12 19:40:26 +02:00
David
7409772c20 Update README.md 2017-04-12 19:30:26 +02:00
David
29e16df057 Improve escaper performance 2017-03-28 22:23:33 +02:00
David
6903bcbe4d Update README.md 2017-01-30 00:28:58 +01:00
David
56b830782f [maven-release-plugin] prepare for next development iteration 2017-01-29 21:32:54 +01:00
33 changed files with 1724 additions and 314 deletions

View File

@@ -7,25 +7,29 @@ Java to HTML generator. Enjoy typesafe HTML generation.
The project webpage is [j2html.com](http://j2html.com).
##Getting started
###Add the maven dependency
## Getting started
### Add the maven dependency
```xml
<dependency>
<groupId>com.j2html</groupId>
<artifactId>j2html</artifactId>
<version>0.7</version>
<version>1.2.0</version>
</dependency>
```
### OR the gradle dependency
```
compile 'com.j2html:j2html:1.2.0'
```
###Import TagCreator and start building HTML
### Import TagCreator and start building HTML
```java
import static j2html.TagCreator.*;
public class Main {
public static void main(String[] args) {
body().with(
h1("Heading!").withClass("example"),
img().withSrc("img/hello.png")
h1("Heading!").withClass("example"),
img().withSrc("img/hello.png")
).render();
}
}

25
pom.xml
View File

@@ -10,7 +10,7 @@
<groupId>com.j2html</groupId>
<artifactId>j2html</artifactId>
<version>0.88</version>
<version>1.2.1</version>
<name>j2html</name>
<description>Java to HTML builder with a fluent API</description>
@@ -52,12 +52,35 @@
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>net.orfjackal.retrolambda</groupId>
<artifactId>retrolambda-maven-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<?m2e ignore?>
<goals>
<goal>process-main</goal>
<goal>process-test</goal>
</goals>
</execution>
</executions>
<configuration>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>

View File

@@ -0,0 +1,50 @@
package j2html;
import java.util.Collections;
import j2html.utils.CSSMin;
import j2html.utils.EscapeUtil;
import j2html.utils.Indenter;
import j2html.utils.JSMin;
import j2html.utils.Minifier;
import j2html.utils.TextEscaper;
public class Config {
private static String FOUR_SPACES = " ";
private Config() {
}
/**
* Change this to configure text-escaping
* For example, to disable escaping, do <code>{@code Config.textEscaper = text -> text;}</code>
*/
public static TextEscaper textEscaper = EscapeUtil::escape;
/**
* Change this to configure css-minification.
* The default minifier is https://github.com/barryvan/CSSMin
*/
public static Minifier cssMinifier = CSSMin::compressCss;
/**
* Change this to configure js-minification.
* The default minifier is a simple whitespace/newline stripper
*/
public static Minifier jsMinifier = JSMin::compressJs;
/**
* Change this to configure indentation when rendering formatted html
* The default is four spaces
*/
public static Indenter indenter = (level, text) -> String.join("", Collections.nCopies(level, FOUR_SPACES)) + text;
/**
* Change this to configure enable/disable closing empty tags
* The default is to NOT close them
*/
public static boolean closeEmptyTags = false;
}

View File

@@ -6,8 +6,10 @@ import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import j2html.attributes.Attr;
import j2html.tags.ContainerTag;
import j2html.tags.DomContent;
import j2html.tags.DomContentJoiner;
import j2html.tags.EmptyTag;
import j2html.tags.InlineStaticResource;
import j2html.tags.Text;
@@ -17,11 +19,53 @@ public class TagCreator {
private TagCreator() {}
/**
* Generic if-expression to do if'ing inside method calls
*
* @param <T> The derived generic parameter type
* @param condition the condition to if-on
* @param ifValue the value to return if condition is true
* @return value if condition is true, null otherwise
*/
public static <T> T iff(boolean condition, T ifValue) {
return condition ? ifValue : null;
}
/**
* Like {@link j2html.TagCreator#iff}, but returns else-value instead of null
*/
public static <T> T iffElse(boolean condition, T ifValue, T elseValue) {
return condition ? ifValue : elseValue;
}
/**
* Returns a Attr.ShortForm object with either id, classes or both,
* obtained from parsing the input string using css selector syntax
*
* @param attrs the string with shortform attributes, only id and class is supported
* @return a Attr.ShortForm object
*/
public static Attr.ShortForm attrs(String attrs) {
return Attr.shortFormFromAttrsString(attrs);
}
/**
* Returns the HTML created by concatenating the input elements,
* separated by space, in encounter order.
* Also removes spaces before periods and commas.
*
* @param stringOrDomObjects the elements to join
* @return joined elements as HTML
*/
public static UnescapedText join(Object... stringOrDomObjects) {
return DomContentJoiner.join(" ", true, stringOrDomObjects);
}
/**
* Creates a DomContent object containing HTML using a mapping function on a collection
* Intended usage: {@literal each(numbers, n -> li(n.toString()))}
*
* @param <T> The derived generic parameter type
* @param <T> The derived generic parameter type
* @param collection the collection to iterate over, ex: a list of values "1, 2, 3"
* @param mapper the mapping function, ex: {@literal "n -> li(n.toString())"}
* @return rawHtml containing mapped data {@literal (ex. docs: <li>1</li><li>2</li><li>3</li>)}
@@ -34,7 +78,7 @@ public class TagCreator {
* Filters a collection to a list, to be used with {@link j2html.TagCreator#each}
* Intended usage: {@literal each(filter(numbers, n -> n % 2 == 0), n -> li(n.toString()))}
*
* @param <T> The derived generic parameter type
* @param <T> The derived generic parameter type
* @param collection the collection to filter, ex: a list of values "1, 2, 3"
* @param filter the filter predicate, {@literal ex: "n -> n % 2 == 0"}
* @return the filtered collection as a list (ex. docs: 2)
@@ -63,171 +107,736 @@ public class TagCreator {
return new Text(text);
}
/**
* Return a complete html document string
*
* @param htmlTag the html content of a website
* @return document declaration and rendered html content
*/
public static String document(ContainerTag htmlTag) {
if (htmlTag.getTagName().equals("html")) {
return document().render() + htmlTag.render();
}
throw new IllegalArgumentException("Only HTML-tag can follow document declaration");
}
//Special tags
public static ContainerTag tag(String tagName) { return new ContainerTag(tagName); }
public static EmptyTag emptyTag(String tagName) { return new EmptyTag(tagName); }
public static ContainerTag tag(String tagName) { return new ContainerTag(tagName); }
public static EmptyTag emptyTag(String tagName) { return new EmptyTag(tagName); }
public static Text fileAsEscapedString(String path) { return text(InlineStaticResource.getFileAsString(path)); }
public static UnescapedText fileAsString(String path) { return rawHtml(InlineStaticResource.getFileAsString(path)); }
public static Text fileAsEscapedString(String path) { return text(InlineStaticResource.getFileAsString(path)); }
public static UnescapedText fileAsString(String path) { return rawHtml(InlineStaticResource.getFileAsString(path)); }
public static ContainerTag styleWithInlineFile(String path) { return InlineStaticResource.get(path, InlineStaticResource.TargetFormat.CSS); }
public static ContainerTag scriptWithInlineFile(String path) { return InlineStaticResource.get(path, InlineStaticResource.TargetFormat.JS); }
public static ContainerTag styleWithInlineFile_min(String path) { return InlineStaticResource.get(path, InlineStaticResource.TargetFormat.CSS_MIN); }
public static ContainerTag scriptWithInlineFile_min(String path) { return InlineStaticResource.get(path, InlineStaticResource.TargetFormat.JS_MIN); }
public static ContainerTag styleWithInlineFile(String path) { return InlineStaticResource.get(path, InlineStaticResource.TargetFormat.CSS); }
public static ContainerTag scriptWithInlineFile(String path) { return InlineStaticResource.get(path, InlineStaticResource.TargetFormat.JS); }
public static ContainerTag styleWithInlineFile_min(String path) { return InlineStaticResource.get(path, InlineStaticResource.TargetFormat.CSS_MIN); }
public static ContainerTag scriptWithInlineFile_min(String path) { return InlineStaticResource.get(path, InlineStaticResource.TargetFormat.JS_MIN); }
//EmptyTags
public static EmptyTag area() { return new EmptyTag("area"); }
public static EmptyTag base() { return new EmptyTag("base"); }
public static EmptyTag br() { return new EmptyTag("br"); }
public static EmptyTag col() { return new EmptyTag("col"); }
public static EmptyTag document() { return new EmptyTag("!DOCTYPE html"); }
public static EmptyTag embed() { return new EmptyTag("embed"); }
public static EmptyTag hr() { return new EmptyTag("hr"); }
public static EmptyTag img() { return new EmptyTag("img"); }
public static EmptyTag input() { return new EmptyTag("input"); }
public static EmptyTag keygen() { return new EmptyTag("keygen"); }
public static EmptyTag link() { return new EmptyTag("link"); }
public static EmptyTag meta() { return new EmptyTag("meta"); }
public static EmptyTag param() { return new EmptyTag("param"); }
public static EmptyTag source() { return new EmptyTag("source"); }
public static EmptyTag track() { return new EmptyTag("track"); }
public static EmptyTag wbr() { return new EmptyTag("wbr"); }
public static DomContent document() { return rawHtml("<!DOCTYPE html>"); }
// EmptyTags, generated in class j2html.tags.TagCreatorCodeGenerator
public static EmptyTag area() { return new EmptyTag("area"); }
public static EmptyTag area(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("area"), shortAttr); }
//ContainerTags
public static ContainerTag a() { return new ContainerTag("a"); }
public static ContainerTag a(String text) { return new ContainerTag("a").withText(text); }
public static ContainerTag abbr() { return new ContainerTag("abbr"); }
public static ContainerTag address() { return new ContainerTag("address"); }
public static ContainerTag article() { return new ContainerTag("article"); }
public static ContainerTag aside() { return new ContainerTag("aside"); }
public static ContainerTag audio() { return new ContainerTag("audio"); }
public static ContainerTag b() { return new ContainerTag("b"); }
public static ContainerTag b(String text) { return new ContainerTag("b").withText(text); }
public static ContainerTag bdi() { return new ContainerTag("bdi"); }
public static ContainerTag bdi(String text) { return new ContainerTag("bdi").withText(text); }
public static ContainerTag bdo() { return new ContainerTag("bdo"); }
public static ContainerTag bdo(String text) { return new ContainerTag("bdo").withText(text); }
public static ContainerTag blockquote() { return new ContainerTag("blockquote"); }
public static ContainerTag blockquote(String text) { return new ContainerTag("blockquote").withText(text); }
public static ContainerTag body() { return new ContainerTag("body"); }
public static ContainerTag button() { return new ContainerTag("button"); }
public static ContainerTag button(String text) { return new ContainerTag("button").withText(text); }
public static ContainerTag canvas() { return new ContainerTag("canvas"); }
public static ContainerTag caption() { return new ContainerTag("caption"); }
public static ContainerTag caption(String text) { return new ContainerTag("caption").withText(text); }
public static ContainerTag cite() { return new ContainerTag("cite"); }
public static ContainerTag cite(String text) { return new ContainerTag("cite").withText(text); }
public static ContainerTag code() { return new ContainerTag("code"); }
public static ContainerTag colgroup() { return new ContainerTag("colgroup"); }
public static ContainerTag datalist() { return new ContainerTag("datalist"); }
public static ContainerTag dd() { return new ContainerTag("dd"); }
public static ContainerTag dd(String text) { return new ContainerTag("dd").withText(text); }
public static ContainerTag del() { return new ContainerTag("del"); }
public static ContainerTag del(String text) { return new ContainerTag("del").withText(text); }
public static ContainerTag details() { return new ContainerTag("details"); }
public static ContainerTag dfn() { return new ContainerTag("dfn"); }
public static ContainerTag dfn(String text) { return new ContainerTag("dfn").withText(text); }
public static ContainerTag dialog() { return new ContainerTag("dialog"); }
public static ContainerTag dialog(String text) { return new ContainerTag("dialog").withText(text); }
public static ContainerTag div() { return new ContainerTag("div"); }
public static ContainerTag dl() { return new ContainerTag("dl"); }
public static ContainerTag dt() { return new ContainerTag("dt"); }
public static ContainerTag dt(String text) { return new ContainerTag("dt").withText(text); }
public static ContainerTag em() { return new ContainerTag("em"); }
public static ContainerTag em(String text) { return new ContainerTag("em").withText(text); }
public static ContainerTag fieldset() { return new ContainerTag("fieldset"); }
public static ContainerTag figcaption() { return new ContainerTag("figcaption"); }
public static ContainerTag figcaption(String text) { return new ContainerTag("figcaption").withText(text); }
public static ContainerTag figure() { return new ContainerTag("figure"); }
public static ContainerTag footer() { return new ContainerTag("footer"); }
public static ContainerTag form() { return new ContainerTag("form"); }
public static ContainerTag h1() { return new ContainerTag("h1"); }
public static ContainerTag h1(String text) { return new ContainerTag("h1").withText(text); }
public static ContainerTag h2() { return new ContainerTag("h2"); }
public static ContainerTag h2(String text) { return new ContainerTag("h2").withText(text); }
public static ContainerTag h3() { return new ContainerTag("h3"); }
public static ContainerTag h3(String text) { return new ContainerTag("h3").withText(text); }
public static ContainerTag h4() { return new ContainerTag("h4"); }
public static ContainerTag h4(String text) { return new ContainerTag("h4").withText(text); }
public static ContainerTag h5() { return new ContainerTag("h5"); }
public static ContainerTag h5(String text) { return new ContainerTag("h5").withText(text); }
public static ContainerTag h6() { return new ContainerTag("h6"); }
public static ContainerTag h6(String text) { return new ContainerTag("h6").withText(text); }
public static ContainerTag head() { return new ContainerTag("head"); }
public static ContainerTag header() { return new ContainerTag("header"); }
public static ContainerTag html() { return new ContainerTag("html"); }
public static ContainerTag i() { return new ContainerTag("i"); }
public static ContainerTag i(String text) { return new ContainerTag("i").withText(text); }
public static ContainerTag iframe() { return new ContainerTag("iframe"); }
public static ContainerTag ins() { return new ContainerTag("ins"); }
public static ContainerTag ins(String text) { return new ContainerTag("ins").withText(text); }
public static ContainerTag kbd() { return new ContainerTag("kbd"); }
public static ContainerTag label() { return new ContainerTag("label"); }
public static ContainerTag label(String text) { return new ContainerTag("label").withText(text); }
public static ContainerTag legend() { return new ContainerTag("legend"); }
public static ContainerTag legend(String text) { return new ContainerTag("legend").withText(text); }
public static ContainerTag li() { return new ContainerTag("li"); }
public static ContainerTag li(String text) { return new ContainerTag("li").withText(text); }
public static ContainerTag main() { return new ContainerTag("main"); }
public static ContainerTag map() { return new ContainerTag("map"); }
public static ContainerTag mark() { return new ContainerTag("mark"); }
public static ContainerTag menu() { return new ContainerTag("menu"); }
public static ContainerTag menuitem() { return new ContainerTag("menuitem"); }
public static ContainerTag meter() { return new ContainerTag("meter"); }
public static ContainerTag nav() { return new ContainerTag("nav"); }
public static ContainerTag noscript() { return new ContainerTag("noscript"); }
public static ContainerTag object() { return new ContainerTag("object"); }
public static ContainerTag ol() { return new ContainerTag("ol"); }
public static ContainerTag optgroup() { return new ContainerTag("optgroup"); }
public static ContainerTag option() { return new ContainerTag("option"); }
public static ContainerTag option(String text) { return new ContainerTag("option").withText(text); }
public static ContainerTag output() { return new ContainerTag("output"); }
public static ContainerTag p() { return new ContainerTag("p"); }
public static ContainerTag p(String text) { return new ContainerTag("p").withText(text); }
public static ContainerTag pre() { return new ContainerTag("pre"); }
public static ContainerTag progress() { return new ContainerTag("progress"); }
public static ContainerTag q() { return new ContainerTag("q"); }
public static ContainerTag q(String text) { return new ContainerTag("q").withText(text); }
public static ContainerTag rp() { return new ContainerTag("rp"); }
public static ContainerTag rt() { return new ContainerTag("rt"); }
public static ContainerTag ruby() { return new ContainerTag("ruby"); }
public static ContainerTag s() { return new ContainerTag("s"); }
public static ContainerTag s(String text) { return new ContainerTag("s").withText(text); }
public static ContainerTag samp() { return new ContainerTag("samp"); }
public static ContainerTag script() { return new ContainerTag("script"); }
public static ContainerTag section() { return new ContainerTag("section"); }
public static ContainerTag select() { return new ContainerTag("select"); }
public static ContainerTag small() { return new ContainerTag("small"); }
public static ContainerTag small(String text) { return new ContainerTag("small").withText(text); }
public static ContainerTag span() { return new ContainerTag("span"); }
public static ContainerTag span(String text) { return new ContainerTag("span").withText(text); }
public static ContainerTag strong() { return new ContainerTag("strong"); }
public static ContainerTag strong(String text) { return new ContainerTag("strong").withText(text); }
public static ContainerTag style() { return new ContainerTag("style"); }
public static ContainerTag sub() { return new ContainerTag("sub"); }
public static ContainerTag sub(String text) { return new ContainerTag("sub").withText(text); }
public static ContainerTag summary() { return new ContainerTag("summary"); }
public static ContainerTag summary(String text) { return new ContainerTag("summary").withText(text); }
public static ContainerTag sup() { return new ContainerTag("sup"); }
public static ContainerTag sup(String text) { return new ContainerTag("sup").withText(text); }
public static ContainerTag table() { return new ContainerTag("table"); }
public static ContainerTag tbody() { return new ContainerTag("tbody"); }
public static ContainerTag td() { return new ContainerTag("td"); }
public static ContainerTag td(String text) { return new ContainerTag("td").withText(text); }
public static ContainerTag textarea() { return new ContainerTag("textarea"); }
public static ContainerTag tfoot() { return new ContainerTag("tfoot"); }
public static ContainerTag th() { return new ContainerTag("th"); }
public static ContainerTag th(String text) { return new ContainerTag("th").withText(text); }
public static ContainerTag thead() { return new ContainerTag("thead"); }
public static ContainerTag time() { return new ContainerTag("time"); }
public static ContainerTag title() { return new ContainerTag("title"); }
public static ContainerTag title(String text) { return new ContainerTag("title").withText(text); }
public static ContainerTag tr() { return new ContainerTag("tr"); }
public static ContainerTag u() { return new ContainerTag("u"); }
public static ContainerTag u(String text) { return new ContainerTag("u").withText(text); }
public static ContainerTag ul() { return new ContainerTag("ul"); }
public static ContainerTag var() { return new ContainerTag("var"); }
public static ContainerTag video() { return new ContainerTag("video"); }
public static EmptyTag base() { return new EmptyTag("base"); }
public static EmptyTag base(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("base"), shortAttr); }
public static EmptyTag br() { return new EmptyTag("br"); }
public static EmptyTag br(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("br"), shortAttr); }
public static EmptyTag col() { return new EmptyTag("col"); }
public static EmptyTag col(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("col"), shortAttr); }
public static EmptyTag embed() { return new EmptyTag("embed"); }
public static EmptyTag embed(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("embed"), shortAttr); }
public static EmptyTag hr() { return new EmptyTag("hr"); }
public static EmptyTag hr(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("hr"), shortAttr); }
public static EmptyTag img() { return new EmptyTag("img"); }
public static EmptyTag img(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("img"), shortAttr); }
public static EmptyTag input() { return new EmptyTag("input"); }
public static EmptyTag input(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("input"), shortAttr); }
public static EmptyTag keygen() { return new EmptyTag("keygen"); }
public static EmptyTag keygen(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("keygen"), shortAttr); }
public static EmptyTag link() { return new EmptyTag("link"); }
public static EmptyTag link(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("link"), shortAttr); }
public static EmptyTag meta() { return new EmptyTag("meta"); }
public static EmptyTag meta(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("meta"), shortAttr); }
public static EmptyTag param() { return new EmptyTag("param"); }
public static EmptyTag param(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("param"), shortAttr); }
public static EmptyTag source() { return new EmptyTag("source"); }
public static EmptyTag source(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("source"), shortAttr); }
public static EmptyTag track() { return new EmptyTag("track"); }
public static EmptyTag track(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("track"), shortAttr); }
public static EmptyTag wbr() { return new EmptyTag("wbr"); }
public static EmptyTag wbr(Attr.ShortForm shortAttr) { return Attr.addTo(new EmptyTag("wbr"), shortAttr); }
// ContainerTags, generated in class j2html.tags.TagCreatorCodeGenerator
public static ContainerTag a() { return new ContainerTag("a"); }
public static ContainerTag a(String text) { return new ContainerTag("a").withText(text); }
public static ContainerTag a(DomContent... dc) { return new ContainerTag("a").with(dc); }
public static ContainerTag a(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("a"), shortAttr); }
public static ContainerTag a(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("a").withText(text), shortAttr); }
public static ContainerTag a(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("a").with(dc), shortAttr); }
public static ContainerTag abbr() { return new ContainerTag("abbr"); }
public static ContainerTag abbr(String text) { return new ContainerTag("abbr").withText(text); }
public static ContainerTag abbr(DomContent... dc) { return new ContainerTag("abbr").with(dc); }
public static ContainerTag abbr(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("abbr"), shortAttr); }
public static ContainerTag abbr(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("abbr").withText(text), shortAttr); }
public static ContainerTag abbr(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("abbr").with(dc), shortAttr); }
public static ContainerTag address() { return new ContainerTag("address"); }
public static ContainerTag address(String text) { return new ContainerTag("address").withText(text); }
public static ContainerTag address(DomContent... dc) { return new ContainerTag("address").with(dc); }
public static ContainerTag address(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("address"), shortAttr); }
public static ContainerTag address(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("address").withText(text), shortAttr); }
public static ContainerTag address(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("address").with(dc), shortAttr); }
public static ContainerTag article() { return new ContainerTag("article"); }
public static ContainerTag article(String text) { return new ContainerTag("article").withText(text); }
public static ContainerTag article(DomContent... dc) { return new ContainerTag("article").with(dc); }
public static ContainerTag article(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("article"), shortAttr); }
public static ContainerTag article(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("article").withText(text), shortAttr); }
public static ContainerTag article(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("article").with(dc), shortAttr); }
public static ContainerTag aside() { return new ContainerTag("aside"); }
public static ContainerTag aside(String text) { return new ContainerTag("aside").withText(text); }
public static ContainerTag aside(DomContent... dc) { return new ContainerTag("aside").with(dc); }
public static ContainerTag aside(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("aside"), shortAttr); }
public static ContainerTag aside(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("aside").withText(text), shortAttr); }
public static ContainerTag aside(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("aside").with(dc), shortAttr); }
public static ContainerTag audio() { return new ContainerTag("audio"); }
public static ContainerTag audio(String text) { return new ContainerTag("audio").withText(text); }
public static ContainerTag audio(DomContent... dc) { return new ContainerTag("audio").with(dc); }
public static ContainerTag audio(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("audio"), shortAttr); }
public static ContainerTag audio(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("audio").withText(text), shortAttr); }
public static ContainerTag audio(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("audio").with(dc), shortAttr); }
public static ContainerTag b() { return new ContainerTag("b"); }
public static ContainerTag b(String text) { return new ContainerTag("b").withText(text); }
public static ContainerTag b(DomContent... dc) { return new ContainerTag("b").with(dc); }
public static ContainerTag b(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("b"), shortAttr); }
public static ContainerTag b(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("b").withText(text), shortAttr); }
public static ContainerTag b(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("b").with(dc), shortAttr); }
public static ContainerTag bdi() { return new ContainerTag("bdi"); }
public static ContainerTag bdi(String text) { return new ContainerTag("bdi").withText(text); }
public static ContainerTag bdi(DomContent... dc) { return new ContainerTag("bdi").with(dc); }
public static ContainerTag bdi(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("bdi"), shortAttr); }
public static ContainerTag bdi(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("bdi").withText(text), shortAttr); }
public static ContainerTag bdi(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("bdi").with(dc), shortAttr); }
public static ContainerTag bdo() { return new ContainerTag("bdo"); }
public static ContainerTag bdo(String text) { return new ContainerTag("bdo").withText(text); }
public static ContainerTag bdo(DomContent... dc) { return new ContainerTag("bdo").with(dc); }
public static ContainerTag bdo(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("bdo"), shortAttr); }
public static ContainerTag bdo(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("bdo").withText(text), shortAttr); }
public static ContainerTag bdo(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("bdo").with(dc), shortAttr); }
public static ContainerTag blockquote() { return new ContainerTag("blockquote"); }
public static ContainerTag blockquote(String text) { return new ContainerTag("blockquote").withText(text); }
public static ContainerTag blockquote(DomContent... dc) { return new ContainerTag("blockquote").with(dc); }
public static ContainerTag blockquote(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("blockquote"), shortAttr); }
public static ContainerTag blockquote(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("blockquote").withText(text), shortAttr); }
public static ContainerTag blockquote(Attr.ShortForm shortAttr, DomContent... dc){ return Attr.addTo(new ContainerTag("blockquote").with(dc), shortAttr); }
public static ContainerTag body() { return new ContainerTag("body"); }
public static ContainerTag body(String text) { return new ContainerTag("body").withText(text); }
public static ContainerTag body(DomContent... dc) { return new ContainerTag("body").with(dc); }
public static ContainerTag body(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("body"), shortAttr); }
public static ContainerTag body(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("body").withText(text), shortAttr); }
public static ContainerTag body(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("body").with(dc), shortAttr); }
public static ContainerTag button() { return new ContainerTag("button"); }
public static ContainerTag button(String text) { return new ContainerTag("button").withText(text); }
public static ContainerTag button(DomContent... dc) { return new ContainerTag("button").with(dc); }
public static ContainerTag button(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("button"), shortAttr); }
public static ContainerTag button(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("button").withText(text), shortAttr); }
public static ContainerTag button(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("button").with(dc), shortAttr); }
public static ContainerTag canvas() { return new ContainerTag("canvas"); }
public static ContainerTag canvas(String text) { return new ContainerTag("canvas").withText(text); }
public static ContainerTag canvas(DomContent... dc) { return new ContainerTag("canvas").with(dc); }
public static ContainerTag canvas(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("canvas"), shortAttr); }
public static ContainerTag canvas(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("canvas").withText(text), shortAttr); }
public static ContainerTag canvas(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("canvas").with(dc), shortAttr); }
public static ContainerTag caption() { return new ContainerTag("caption"); }
public static ContainerTag caption(String text) { return new ContainerTag("caption").withText(text); }
public static ContainerTag caption(DomContent... dc) { return new ContainerTag("caption").with(dc); }
public static ContainerTag caption(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("caption"), shortAttr); }
public static ContainerTag caption(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("caption").withText(text), shortAttr); }
public static ContainerTag caption(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("caption").with(dc), shortAttr); }
public static ContainerTag cite() { return new ContainerTag("cite"); }
public static ContainerTag cite(String text) { return new ContainerTag("cite").withText(text); }
public static ContainerTag cite(DomContent... dc) { return new ContainerTag("cite").with(dc); }
public static ContainerTag cite(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("cite"), shortAttr); }
public static ContainerTag cite(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("cite").withText(text), shortAttr); }
public static ContainerTag cite(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("cite").with(dc), shortAttr); }
public static ContainerTag code() { return new ContainerTag("code"); }
public static ContainerTag code(String text) { return new ContainerTag("code").withText(text); }
public static ContainerTag code(DomContent... dc) { return new ContainerTag("code").with(dc); }
public static ContainerTag code(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("code"), shortAttr); }
public static ContainerTag code(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("code").withText(text), shortAttr); }
public static ContainerTag code(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("code").with(dc), shortAttr); }
public static ContainerTag colgroup() { return new ContainerTag("colgroup"); }
public static ContainerTag colgroup(String text) { return new ContainerTag("colgroup").withText(text); }
public static ContainerTag colgroup(DomContent... dc) { return new ContainerTag("colgroup").with(dc); }
public static ContainerTag colgroup(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("colgroup"), shortAttr); }
public static ContainerTag colgroup(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("colgroup").withText(text), shortAttr); }
public static ContainerTag colgroup(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("colgroup").with(dc), shortAttr); }
public static ContainerTag datalist() { return new ContainerTag("datalist"); }
public static ContainerTag datalist(String text) { return new ContainerTag("datalist").withText(text); }
public static ContainerTag datalist(DomContent... dc) { return new ContainerTag("datalist").with(dc); }
public static ContainerTag datalist(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("datalist"), shortAttr); }
public static ContainerTag datalist(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("datalist").withText(text), shortAttr); }
public static ContainerTag datalist(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("datalist").with(dc), shortAttr); }
public static ContainerTag dd() { return new ContainerTag("dd"); }
public static ContainerTag dd(String text) { return new ContainerTag("dd").withText(text); }
public static ContainerTag dd(DomContent... dc) { return new ContainerTag("dd").with(dc); }
public static ContainerTag dd(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("dd"), shortAttr); }
public static ContainerTag dd(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("dd").withText(text), shortAttr); }
public static ContainerTag dd(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("dd").with(dc), shortAttr); }
public static ContainerTag del() { return new ContainerTag("del"); }
public static ContainerTag del(String text) { return new ContainerTag("del").withText(text); }
public static ContainerTag del(DomContent... dc) { return new ContainerTag("del").with(dc); }
public static ContainerTag del(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("del"), shortAttr); }
public static ContainerTag del(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("del").withText(text), shortAttr); }
public static ContainerTag del(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("del").with(dc), shortAttr); }
public static ContainerTag details() { return new ContainerTag("details"); }
public static ContainerTag details(String text) { return new ContainerTag("details").withText(text); }
public static ContainerTag details(DomContent... dc) { return new ContainerTag("details").with(dc); }
public static ContainerTag details(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("details"), shortAttr); }
public static ContainerTag details(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("details").withText(text), shortAttr); }
public static ContainerTag details(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("details").with(dc), shortAttr); }
public static ContainerTag dfn() { return new ContainerTag("dfn"); }
public static ContainerTag dfn(String text) { return new ContainerTag("dfn").withText(text); }
public static ContainerTag dfn(DomContent... dc) { return new ContainerTag("dfn").with(dc); }
public static ContainerTag dfn(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("dfn"), shortAttr); }
public static ContainerTag dfn(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("dfn").withText(text), shortAttr); }
public static ContainerTag dfn(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("dfn").with(dc), shortAttr); }
public static ContainerTag dialog() { return new ContainerTag("dialog"); }
public static ContainerTag dialog(String text) { return new ContainerTag("dialog").withText(text); }
public static ContainerTag dialog(DomContent... dc) { return new ContainerTag("dialog").with(dc); }
public static ContainerTag dialog(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("dialog"), shortAttr); }
public static ContainerTag dialog(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("dialog").withText(text), shortAttr); }
public static ContainerTag dialog(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("dialog").with(dc), shortAttr); }
public static ContainerTag div() { return new ContainerTag("div"); }
public static ContainerTag div(String text) { return new ContainerTag("div").withText(text); }
public static ContainerTag div(DomContent... dc) { return new ContainerTag("div").with(dc); }
public static ContainerTag div(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("div"), shortAttr); }
public static ContainerTag div(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("div").withText(text), shortAttr); }
public static ContainerTag div(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("div").with(dc), shortAttr); }
public static ContainerTag dl() { return new ContainerTag("dl"); }
public static ContainerTag dl(String text) { return new ContainerTag("dl").withText(text); }
public static ContainerTag dl(DomContent... dc) { return new ContainerTag("dl").with(dc); }
public static ContainerTag dl(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("dl"), shortAttr); }
public static ContainerTag dl(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("dl").withText(text), shortAttr); }
public static ContainerTag dl(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("dl").with(dc), shortAttr); }
public static ContainerTag dt() { return new ContainerTag("dt"); }
public static ContainerTag dt(String text) { return new ContainerTag("dt").withText(text); }
public static ContainerTag dt(DomContent... dc) { return new ContainerTag("dt").with(dc); }
public static ContainerTag dt(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("dt"), shortAttr); }
public static ContainerTag dt(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("dt").withText(text), shortAttr); }
public static ContainerTag dt(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("dt").with(dc), shortAttr); }
public static ContainerTag em() { return new ContainerTag("em"); }
public static ContainerTag em(String text) { return new ContainerTag("em").withText(text); }
public static ContainerTag em(DomContent... dc) { return new ContainerTag("em").with(dc); }
public static ContainerTag em(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("em"), shortAttr); }
public static ContainerTag em(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("em").withText(text), shortAttr); }
public static ContainerTag em(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("em").with(dc), shortAttr); }
public static ContainerTag fieldset() { return new ContainerTag("fieldset"); }
public static ContainerTag fieldset(String text) { return new ContainerTag("fieldset").withText(text); }
public static ContainerTag fieldset(DomContent... dc) { return new ContainerTag("fieldset").with(dc); }
public static ContainerTag fieldset(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("fieldset"), shortAttr); }
public static ContainerTag fieldset(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("fieldset").withText(text), shortAttr); }
public static ContainerTag fieldset(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("fieldset").with(dc), shortAttr); }
public static ContainerTag figcaption() { return new ContainerTag("figcaption"); }
public static ContainerTag figcaption(String text) { return new ContainerTag("figcaption").withText(text); }
public static ContainerTag figcaption(DomContent... dc) { return new ContainerTag("figcaption").with(dc); }
public static ContainerTag figcaption(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("figcaption"), shortAttr); }
public static ContainerTag figcaption(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("figcaption").withText(text), shortAttr); }
public static ContainerTag figcaption(Attr.ShortForm shortAttr, DomContent... dc){ return Attr.addTo(new ContainerTag("figcaption").with(dc), shortAttr); }
public static ContainerTag figure() { return new ContainerTag("figure"); }
public static ContainerTag figure(String text) { return new ContainerTag("figure").withText(text); }
public static ContainerTag figure(DomContent... dc) { return new ContainerTag("figure").with(dc); }
public static ContainerTag figure(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("figure"), shortAttr); }
public static ContainerTag figure(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("figure").withText(text), shortAttr); }
public static ContainerTag figure(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("figure").with(dc), shortAttr); }
public static ContainerTag footer() { return new ContainerTag("footer"); }
public static ContainerTag footer(String text) { return new ContainerTag("footer").withText(text); }
public static ContainerTag footer(DomContent... dc) { return new ContainerTag("footer").with(dc); }
public static ContainerTag footer(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("footer"), shortAttr); }
public static ContainerTag footer(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("footer").withText(text), shortAttr); }
public static ContainerTag footer(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("footer").with(dc), shortAttr); }
public static ContainerTag form() { return new ContainerTag("form"); }
public static ContainerTag form(String text) { return new ContainerTag("form").withText(text); }
public static ContainerTag form(DomContent... dc) { return new ContainerTag("form").with(dc); }
public static ContainerTag form(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("form"), shortAttr); }
public static ContainerTag form(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("form").withText(text), shortAttr); }
public static ContainerTag form(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("form").with(dc), shortAttr); }
public static ContainerTag h1() { return new ContainerTag("h1"); }
public static ContainerTag h1(String text) { return new ContainerTag("h1").withText(text); }
public static ContainerTag h1(DomContent... dc) { return new ContainerTag("h1").with(dc); }
public static ContainerTag h1(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("h1"), shortAttr); }
public static ContainerTag h1(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("h1").withText(text), shortAttr); }
public static ContainerTag h1(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("h1").with(dc), shortAttr); }
public static ContainerTag h2() { return new ContainerTag("h2"); }
public static ContainerTag h2(String text) { return new ContainerTag("h2").withText(text); }
public static ContainerTag h2(DomContent... dc) { return new ContainerTag("h2").with(dc); }
public static ContainerTag h2(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("h2"), shortAttr); }
public static ContainerTag h2(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("h2").withText(text), shortAttr); }
public static ContainerTag h2(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("h2").with(dc), shortAttr); }
public static ContainerTag h3() { return new ContainerTag("h3"); }
public static ContainerTag h3(String text) { return new ContainerTag("h3").withText(text); }
public static ContainerTag h3(DomContent... dc) { return new ContainerTag("h3").with(dc); }
public static ContainerTag h3(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("h3"), shortAttr); }
public static ContainerTag h3(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("h3").withText(text), shortAttr); }
public static ContainerTag h3(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("h3").with(dc), shortAttr); }
public static ContainerTag h4() { return new ContainerTag("h4"); }
public static ContainerTag h4(String text) { return new ContainerTag("h4").withText(text); }
public static ContainerTag h4(DomContent... dc) { return new ContainerTag("h4").with(dc); }
public static ContainerTag h4(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("h4"), shortAttr); }
public static ContainerTag h4(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("h4").withText(text), shortAttr); }
public static ContainerTag h4(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("h4").with(dc), shortAttr); }
public static ContainerTag h5() { return new ContainerTag("h5"); }
public static ContainerTag h5(String text) { return new ContainerTag("h5").withText(text); }
public static ContainerTag h5(DomContent... dc) { return new ContainerTag("h5").with(dc); }
public static ContainerTag h5(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("h5"), shortAttr); }
public static ContainerTag h5(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("h5").withText(text), shortAttr); }
public static ContainerTag h5(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("h5").with(dc), shortAttr); }
public static ContainerTag h6() { return new ContainerTag("h6"); }
public static ContainerTag h6(String text) { return new ContainerTag("h6").withText(text); }
public static ContainerTag h6(DomContent... dc) { return new ContainerTag("h6").with(dc); }
public static ContainerTag h6(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("h6"), shortAttr); }
public static ContainerTag h6(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("h6").withText(text), shortAttr); }
public static ContainerTag h6(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("h6").with(dc), shortAttr); }
public static ContainerTag head() { return new ContainerTag("head"); }
public static ContainerTag head(String text) { return new ContainerTag("head").withText(text); }
public static ContainerTag head(DomContent... dc) { return new ContainerTag("head").with(dc); }
public static ContainerTag head(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("head"), shortAttr); }
public static ContainerTag head(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("head").withText(text), shortAttr); }
public static ContainerTag head(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("head").with(dc), shortAttr); }
public static ContainerTag header() { return new ContainerTag("header"); }
public static ContainerTag header(String text) { return new ContainerTag("header").withText(text); }
public static ContainerTag header(DomContent... dc) { return new ContainerTag("header").with(dc); }
public static ContainerTag header(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("header"), shortAttr); }
public static ContainerTag header(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("header").withText(text), shortAttr); }
public static ContainerTag header(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("header").with(dc), shortAttr); }
public static ContainerTag html() { return new ContainerTag("html"); }
public static ContainerTag html(String text) { return new ContainerTag("html").withText(text); }
public static ContainerTag html(DomContent... dc) { return new ContainerTag("html").with(dc); }
public static ContainerTag html(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("html"), shortAttr); }
public static ContainerTag html(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("html").withText(text), shortAttr); }
public static ContainerTag html(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("html").with(dc), shortAttr); }
public static ContainerTag i() { return new ContainerTag("i"); }
public static ContainerTag i(String text) { return new ContainerTag("i").withText(text); }
public static ContainerTag i(DomContent... dc) { return new ContainerTag("i").with(dc); }
public static ContainerTag i(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("i"), shortAttr); }
public static ContainerTag i(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("i").withText(text), shortAttr); }
public static ContainerTag i(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("i").with(dc), shortAttr); }
public static ContainerTag iframe() { return new ContainerTag("iframe"); }
public static ContainerTag iframe(String text) { return new ContainerTag("iframe").withText(text); }
public static ContainerTag iframe(DomContent... dc) { return new ContainerTag("iframe").with(dc); }
public static ContainerTag iframe(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("iframe"), shortAttr); }
public static ContainerTag iframe(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("iframe").withText(text), shortAttr); }
public static ContainerTag iframe(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("iframe").with(dc), shortAttr); }
public static ContainerTag ins() { return new ContainerTag("ins"); }
public static ContainerTag ins(String text) { return new ContainerTag("ins").withText(text); }
public static ContainerTag ins(DomContent... dc) { return new ContainerTag("ins").with(dc); }
public static ContainerTag ins(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("ins"), shortAttr); }
public static ContainerTag ins(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("ins").withText(text), shortAttr); }
public static ContainerTag ins(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("ins").with(dc), shortAttr); }
public static ContainerTag kbd() { return new ContainerTag("kbd"); }
public static ContainerTag kbd(String text) { return new ContainerTag("kbd").withText(text); }
public static ContainerTag kbd(DomContent... dc) { return new ContainerTag("kbd").with(dc); }
public static ContainerTag kbd(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("kbd"), shortAttr); }
public static ContainerTag kbd(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("kbd").withText(text), shortAttr); }
public static ContainerTag kbd(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("kbd").with(dc), shortAttr); }
public static ContainerTag label() { return new ContainerTag("label"); }
public static ContainerTag label(String text) { return new ContainerTag("label").withText(text); }
public static ContainerTag label(DomContent... dc) { return new ContainerTag("label").with(dc); }
public static ContainerTag label(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("label"), shortAttr); }
public static ContainerTag label(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("label").withText(text), shortAttr); }
public static ContainerTag label(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("label").with(dc), shortAttr); }
public static ContainerTag legend() { return new ContainerTag("legend"); }
public static ContainerTag legend(String text) { return new ContainerTag("legend").withText(text); }
public static ContainerTag legend(DomContent... dc) { return new ContainerTag("legend").with(dc); }
public static ContainerTag legend(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("legend"), shortAttr); }
public static ContainerTag legend(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("legend").withText(text), shortAttr); }
public static ContainerTag legend(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("legend").with(dc), shortAttr); }
public static ContainerTag li() { return new ContainerTag("li"); }
public static ContainerTag li(String text) { return new ContainerTag("li").withText(text); }
public static ContainerTag li(DomContent... dc) { return new ContainerTag("li").with(dc); }
public static ContainerTag li(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("li"), shortAttr); }
public static ContainerTag li(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("li").withText(text), shortAttr); }
public static ContainerTag li(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("li").with(dc), shortAttr); }
public static ContainerTag main() { return new ContainerTag("main"); }
public static ContainerTag main(String text) { return new ContainerTag("main").withText(text); }
public static ContainerTag main(DomContent... dc) { return new ContainerTag("main").with(dc); }
public static ContainerTag main(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("main"), shortAttr); }
public static ContainerTag main(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("main").withText(text), shortAttr); }
public static ContainerTag main(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("main").with(dc), shortAttr); }
public static ContainerTag map() { return new ContainerTag("map"); }
public static ContainerTag map(String text) { return new ContainerTag("map").withText(text); }
public static ContainerTag map(DomContent... dc) { return new ContainerTag("map").with(dc); }
public static ContainerTag map(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("map"), shortAttr); }
public static ContainerTag map(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("map").withText(text), shortAttr); }
public static ContainerTag map(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("map").with(dc), shortAttr); }
public static ContainerTag mark() { return new ContainerTag("mark"); }
public static ContainerTag mark(String text) { return new ContainerTag("mark").withText(text); }
public static ContainerTag mark(DomContent... dc) { return new ContainerTag("mark").with(dc); }
public static ContainerTag mark(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("mark"), shortAttr); }
public static ContainerTag mark(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("mark").withText(text), shortAttr); }
public static ContainerTag mark(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("mark").with(dc), shortAttr); }
public static ContainerTag menu() { return new ContainerTag("menu"); }
public static ContainerTag menu(String text) { return new ContainerTag("menu").withText(text); }
public static ContainerTag menu(DomContent... dc) { return new ContainerTag("menu").with(dc); }
public static ContainerTag menu(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("menu"), shortAttr); }
public static ContainerTag menu(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("menu").withText(text), shortAttr); }
public static ContainerTag menu(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("menu").with(dc), shortAttr); }
public static ContainerTag menuitem() { return new ContainerTag("menuitem"); }
public static ContainerTag menuitem(String text) { return new ContainerTag("menuitem").withText(text); }
public static ContainerTag menuitem(DomContent... dc) { return new ContainerTag("menuitem").with(dc); }
public static ContainerTag menuitem(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("menuitem"), shortAttr); }
public static ContainerTag menuitem(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("menuitem").withText(text), shortAttr); }
public static ContainerTag menuitem(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("menuitem").with(dc), shortAttr); }
public static ContainerTag meter() { return new ContainerTag("meter"); }
public static ContainerTag meter(String text) { return new ContainerTag("meter").withText(text); }
public static ContainerTag meter(DomContent... dc) { return new ContainerTag("meter").with(dc); }
public static ContainerTag meter(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("meter"), shortAttr); }
public static ContainerTag meter(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("meter").withText(text), shortAttr); }
public static ContainerTag meter(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("meter").with(dc), shortAttr); }
public static ContainerTag nav() { return new ContainerTag("nav"); }
public static ContainerTag nav(String text) { return new ContainerTag("nav").withText(text); }
public static ContainerTag nav(DomContent... dc) { return new ContainerTag("nav").with(dc); }
public static ContainerTag nav(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("nav"), shortAttr); }
public static ContainerTag nav(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("nav").withText(text), shortAttr); }
public static ContainerTag nav(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("nav").with(dc), shortAttr); }
public static ContainerTag noscript() { return new ContainerTag("noscript"); }
public static ContainerTag noscript(String text) { return new ContainerTag("noscript").withText(text); }
public static ContainerTag noscript(DomContent... dc) { return new ContainerTag("noscript").with(dc); }
public static ContainerTag noscript(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("noscript"), shortAttr); }
public static ContainerTag noscript(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("noscript").withText(text), shortAttr); }
public static ContainerTag noscript(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("noscript").with(dc), shortAttr); }
public static ContainerTag object() { return new ContainerTag("object"); }
public static ContainerTag object(String text) { return new ContainerTag("object").withText(text); }
public static ContainerTag object(DomContent... dc) { return new ContainerTag("object").with(dc); }
public static ContainerTag object(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("object"), shortAttr); }
public static ContainerTag object(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("object").withText(text), shortAttr); }
public static ContainerTag object(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("object").with(dc), shortAttr); }
public static ContainerTag ol() { return new ContainerTag("ol"); }
public static ContainerTag ol(String text) { return new ContainerTag("ol").withText(text); }
public static ContainerTag ol(DomContent... dc) { return new ContainerTag("ol").with(dc); }
public static ContainerTag ol(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("ol"), shortAttr); }
public static ContainerTag ol(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("ol").withText(text), shortAttr); }
public static ContainerTag ol(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("ol").with(dc), shortAttr); }
public static ContainerTag optgroup() { return new ContainerTag("optgroup"); }
public static ContainerTag optgroup(String text) { return new ContainerTag("optgroup").withText(text); }
public static ContainerTag optgroup(DomContent... dc) { return new ContainerTag("optgroup").with(dc); }
public static ContainerTag optgroup(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("optgroup"), shortAttr); }
public static ContainerTag optgroup(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("optgroup").withText(text), shortAttr); }
public static ContainerTag optgroup(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("optgroup").with(dc), shortAttr); }
public static ContainerTag option() { return new ContainerTag("option"); }
public static ContainerTag option(String text) { return new ContainerTag("option").withText(text); }
public static ContainerTag option(DomContent... dc) { return new ContainerTag("option").with(dc); }
public static ContainerTag option(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("option"), shortAttr); }
public static ContainerTag option(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("option").withText(text), shortAttr); }
public static ContainerTag option(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("option").with(dc), shortAttr); }
public static ContainerTag output() { return new ContainerTag("output"); }
public static ContainerTag output(String text) { return new ContainerTag("output").withText(text); }
public static ContainerTag output(DomContent... dc) { return new ContainerTag("output").with(dc); }
public static ContainerTag output(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("output"), shortAttr); }
public static ContainerTag output(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("output").withText(text), shortAttr); }
public static ContainerTag output(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("output").with(dc), shortAttr); }
public static ContainerTag p() { return new ContainerTag("p"); }
public static ContainerTag p(String text) { return new ContainerTag("p").withText(text); }
public static ContainerTag p(DomContent... dc) { return new ContainerTag("p").with(dc); }
public static ContainerTag p(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("p"), shortAttr); }
public static ContainerTag p(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("p").withText(text), shortAttr); }
public static ContainerTag p(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("p").with(dc), shortAttr); }
public static ContainerTag pre() { return new ContainerTag("pre"); }
public static ContainerTag pre(String text) { return new ContainerTag("pre").withText(text); }
public static ContainerTag pre(DomContent... dc) { return new ContainerTag("pre").with(dc); }
public static ContainerTag pre(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("pre"), shortAttr); }
public static ContainerTag pre(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("pre").withText(text), shortAttr); }
public static ContainerTag pre(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("pre").with(dc), shortAttr); }
public static ContainerTag progress() { return new ContainerTag("progress"); }
public static ContainerTag progress(String text) { return new ContainerTag("progress").withText(text); }
public static ContainerTag progress(DomContent... dc) { return new ContainerTag("progress").with(dc); }
public static ContainerTag progress(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("progress"), shortAttr); }
public static ContainerTag progress(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("progress").withText(text), shortAttr); }
public static ContainerTag progress(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("progress").with(dc), shortAttr); }
public static ContainerTag q() { return new ContainerTag("q"); }
public static ContainerTag q(String text) { return new ContainerTag("q").withText(text); }
public static ContainerTag q(DomContent... dc) { return new ContainerTag("q").with(dc); }
public static ContainerTag q(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("q"), shortAttr); }
public static ContainerTag q(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("q").withText(text), shortAttr); }
public static ContainerTag q(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("q").with(dc), shortAttr); }
public static ContainerTag rp() { return new ContainerTag("rp"); }
public static ContainerTag rp(String text) { return new ContainerTag("rp").withText(text); }
public static ContainerTag rp(DomContent... dc) { return new ContainerTag("rp").with(dc); }
public static ContainerTag rp(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("rp"), shortAttr); }
public static ContainerTag rp(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("rp").withText(text), shortAttr); }
public static ContainerTag rp(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("rp").with(dc), shortAttr); }
public static ContainerTag rt() { return new ContainerTag("rt"); }
public static ContainerTag rt(String text) { return new ContainerTag("rt").withText(text); }
public static ContainerTag rt(DomContent... dc) { return new ContainerTag("rt").with(dc); }
public static ContainerTag rt(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("rt"), shortAttr); }
public static ContainerTag rt(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("rt").withText(text), shortAttr); }
public static ContainerTag rt(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("rt").with(dc), shortAttr); }
public static ContainerTag ruby() { return new ContainerTag("ruby"); }
public static ContainerTag ruby(String text) { return new ContainerTag("ruby").withText(text); }
public static ContainerTag ruby(DomContent... dc) { return new ContainerTag("ruby").with(dc); }
public static ContainerTag ruby(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("ruby"), shortAttr); }
public static ContainerTag ruby(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("ruby").withText(text), shortAttr); }
public static ContainerTag ruby(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("ruby").with(dc), shortAttr); }
public static ContainerTag s() { return new ContainerTag("s"); }
public static ContainerTag s(String text) { return new ContainerTag("s").withText(text); }
public static ContainerTag s(DomContent... dc) { return new ContainerTag("s").with(dc); }
public static ContainerTag s(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("s"), shortAttr); }
public static ContainerTag s(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("s").withText(text), shortAttr); }
public static ContainerTag s(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("s").with(dc), shortAttr); }
public static ContainerTag samp() { return new ContainerTag("samp"); }
public static ContainerTag samp(String text) { return new ContainerTag("samp").withText(text); }
public static ContainerTag samp(DomContent... dc) { return new ContainerTag("samp").with(dc); }
public static ContainerTag samp(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("samp"), shortAttr); }
public static ContainerTag samp(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("samp").withText(text), shortAttr); }
public static ContainerTag samp(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("samp").with(dc), shortAttr); }
public static ContainerTag script() { return new ContainerTag("script"); }
public static ContainerTag script(String text) { return new ContainerTag("script").withText(text); }
public static ContainerTag script(DomContent... dc) { return new ContainerTag("script").with(dc); }
public static ContainerTag script(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("script"), shortAttr); }
public static ContainerTag script(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("script").withText(text), shortAttr); }
public static ContainerTag script(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("script").with(dc), shortAttr); }
public static ContainerTag section() { return new ContainerTag("section"); }
public static ContainerTag section(String text) { return new ContainerTag("section").withText(text); }
public static ContainerTag section(DomContent... dc) { return new ContainerTag("section").with(dc); }
public static ContainerTag section(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("section"), shortAttr); }
public static ContainerTag section(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("section").withText(text), shortAttr); }
public static ContainerTag section(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("section").with(dc), shortAttr); }
public static ContainerTag select() { return new ContainerTag("select"); }
public static ContainerTag select(String text) { return new ContainerTag("select").withText(text); }
public static ContainerTag select(DomContent... dc) { return new ContainerTag("select").with(dc); }
public static ContainerTag select(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("select"), shortAttr); }
public static ContainerTag select(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("select").withText(text), shortAttr); }
public static ContainerTag select(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("select").with(dc), shortAttr); }
public static ContainerTag small() { return new ContainerTag("small"); }
public static ContainerTag small(String text) { return new ContainerTag("small").withText(text); }
public static ContainerTag small(DomContent... dc) { return new ContainerTag("small").with(dc); }
public static ContainerTag small(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("small"), shortAttr); }
public static ContainerTag small(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("small").withText(text), shortAttr); }
public static ContainerTag small(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("small").with(dc), shortAttr); }
public static ContainerTag span() { return new ContainerTag("span"); }
public static ContainerTag span(String text) { return new ContainerTag("span").withText(text); }
public static ContainerTag span(DomContent... dc) { return new ContainerTag("span").with(dc); }
public static ContainerTag span(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("span"), shortAttr); }
public static ContainerTag span(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("span").withText(text), shortAttr); }
public static ContainerTag span(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("span").with(dc), shortAttr); }
public static ContainerTag strong() { return new ContainerTag("strong"); }
public static ContainerTag strong(String text) { return new ContainerTag("strong").withText(text); }
public static ContainerTag strong(DomContent... dc) { return new ContainerTag("strong").with(dc); }
public static ContainerTag strong(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("strong"), shortAttr); }
public static ContainerTag strong(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("strong").withText(text), shortAttr); }
public static ContainerTag strong(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("strong").with(dc), shortAttr); }
public static ContainerTag style() { return new ContainerTag("style"); }
public static ContainerTag style(String text) { return new ContainerTag("style").withText(text); }
public static ContainerTag style(DomContent... dc) { return new ContainerTag("style").with(dc); }
public static ContainerTag style(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("style"), shortAttr); }
public static ContainerTag style(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("style").withText(text), shortAttr); }
public static ContainerTag style(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("style").with(dc), shortAttr); }
public static ContainerTag sub() { return new ContainerTag("sub"); }
public static ContainerTag sub(String text) { return new ContainerTag("sub").withText(text); }
public static ContainerTag sub(DomContent... dc) { return new ContainerTag("sub").with(dc); }
public static ContainerTag sub(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("sub"), shortAttr); }
public static ContainerTag sub(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("sub").withText(text), shortAttr); }
public static ContainerTag sub(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("sub").with(dc), shortAttr); }
public static ContainerTag summary() { return new ContainerTag("summary"); }
public static ContainerTag summary(String text) { return new ContainerTag("summary").withText(text); }
public static ContainerTag summary(DomContent... dc) { return new ContainerTag("summary").with(dc); }
public static ContainerTag summary(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("summary"), shortAttr); }
public static ContainerTag summary(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("summary").withText(text), shortAttr); }
public static ContainerTag summary(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("summary").with(dc), shortAttr); }
public static ContainerTag sup() { return new ContainerTag("sup"); }
public static ContainerTag sup(String text) { return new ContainerTag("sup").withText(text); }
public static ContainerTag sup(DomContent... dc) { return new ContainerTag("sup").with(dc); }
public static ContainerTag sup(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("sup"), shortAttr); }
public static ContainerTag sup(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("sup").withText(text), shortAttr); }
public static ContainerTag sup(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("sup").with(dc), shortAttr); }
public static ContainerTag table() { return new ContainerTag("table"); }
public static ContainerTag table(String text) { return new ContainerTag("table").withText(text); }
public static ContainerTag table(DomContent... dc) { return new ContainerTag("table").with(dc); }
public static ContainerTag table(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("table"), shortAttr); }
public static ContainerTag table(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("table").withText(text), shortAttr); }
public static ContainerTag table(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("table").with(dc), shortAttr); }
public static ContainerTag tbody() { return new ContainerTag("tbody"); }
public static ContainerTag tbody(String text) { return new ContainerTag("tbody").withText(text); }
public static ContainerTag tbody(DomContent... dc) { return new ContainerTag("tbody").with(dc); }
public static ContainerTag tbody(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("tbody"), shortAttr); }
public static ContainerTag tbody(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("tbody").withText(text), shortAttr); }
public static ContainerTag tbody(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("tbody").with(dc), shortAttr); }
public static ContainerTag td() { return new ContainerTag("td"); }
public static ContainerTag td(String text) { return new ContainerTag("td").withText(text); }
public static ContainerTag td(DomContent... dc) { return new ContainerTag("td").with(dc); }
public static ContainerTag td(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("td"), shortAttr); }
public static ContainerTag td(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("td").withText(text), shortAttr); }
public static ContainerTag td(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("td").with(dc), shortAttr); }
public static ContainerTag textarea() { return new ContainerTag("textarea"); }
public static ContainerTag textarea(String text) { return new ContainerTag("textarea").withText(text); }
public static ContainerTag textarea(DomContent... dc) { return new ContainerTag("textarea").with(dc); }
public static ContainerTag textarea(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("textarea"), shortAttr); }
public static ContainerTag textarea(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("textarea").withText(text), shortAttr); }
public static ContainerTag textarea(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("textarea").with(dc), shortAttr); }
public static ContainerTag tfoot() { return new ContainerTag("tfoot"); }
public static ContainerTag tfoot(String text) { return new ContainerTag("tfoot").withText(text); }
public static ContainerTag tfoot(DomContent... dc) { return new ContainerTag("tfoot").with(dc); }
public static ContainerTag tfoot(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("tfoot"), shortAttr); }
public static ContainerTag tfoot(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("tfoot").withText(text), shortAttr); }
public static ContainerTag tfoot(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("tfoot").with(dc), shortAttr); }
public static ContainerTag th() { return new ContainerTag("th"); }
public static ContainerTag th(String text) { return new ContainerTag("th").withText(text); }
public static ContainerTag th(DomContent... dc) { return new ContainerTag("th").with(dc); }
public static ContainerTag th(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("th"), shortAttr); }
public static ContainerTag th(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("th").withText(text), shortAttr); }
public static ContainerTag th(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("th").with(dc), shortAttr); }
public static ContainerTag thead() { return new ContainerTag("thead"); }
public static ContainerTag thead(String text) { return new ContainerTag("thead").withText(text); }
public static ContainerTag thead(DomContent... dc) { return new ContainerTag("thead").with(dc); }
public static ContainerTag thead(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("thead"), shortAttr); }
public static ContainerTag thead(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("thead").withText(text), shortAttr); }
public static ContainerTag thead(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("thead").with(dc), shortAttr); }
public static ContainerTag time() { return new ContainerTag("time"); }
public static ContainerTag time(String text) { return new ContainerTag("time").withText(text); }
public static ContainerTag time(DomContent... dc) { return new ContainerTag("time").with(dc); }
public static ContainerTag time(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("time"), shortAttr); }
public static ContainerTag time(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("time").withText(text), shortAttr); }
public static ContainerTag time(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("time").with(dc), shortAttr); }
public static ContainerTag title() { return new ContainerTag("title"); }
public static ContainerTag title(String text) { return new ContainerTag("title").withText(text); }
public static ContainerTag title(DomContent... dc) { return new ContainerTag("title").with(dc); }
public static ContainerTag title(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("title"), shortAttr); }
public static ContainerTag title(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("title").withText(text), shortAttr); }
public static ContainerTag title(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("title").with(dc), shortAttr); }
public static ContainerTag tr() { return new ContainerTag("tr"); }
public static ContainerTag tr(String text) { return new ContainerTag("tr").withText(text); }
public static ContainerTag tr(DomContent... dc) { return new ContainerTag("tr").with(dc); }
public static ContainerTag tr(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("tr"), shortAttr); }
public static ContainerTag tr(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("tr").withText(text), shortAttr); }
public static ContainerTag tr(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("tr").with(dc), shortAttr); }
public static ContainerTag u() { return new ContainerTag("u"); }
public static ContainerTag u(String text) { return new ContainerTag("u").withText(text); }
public static ContainerTag u(DomContent... dc) { return new ContainerTag("u").with(dc); }
public static ContainerTag u(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("u"), shortAttr); }
public static ContainerTag u(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("u").withText(text), shortAttr); }
public static ContainerTag u(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("u").with(dc), shortAttr); }
public static ContainerTag ul() { return new ContainerTag("ul"); }
public static ContainerTag ul(String text) { return new ContainerTag("ul").withText(text); }
public static ContainerTag ul(DomContent... dc) { return new ContainerTag("ul").with(dc); }
public static ContainerTag ul(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("ul"), shortAttr); }
public static ContainerTag ul(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("ul").withText(text), shortAttr); }
public static ContainerTag ul(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("ul").with(dc), shortAttr); }
public static ContainerTag var() { return new ContainerTag("var"); }
public static ContainerTag var(String text) { return new ContainerTag("var").withText(text); }
public static ContainerTag var(DomContent... dc) { return new ContainerTag("var").with(dc); }
public static ContainerTag var(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("var"), shortAttr); }
public static ContainerTag var(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("var").withText(text), shortAttr); }
public static ContainerTag var(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("var").with(dc), shortAttr); }
public static ContainerTag video() { return new ContainerTag("video"); }
public static ContainerTag video(String text) { return new ContainerTag("video").withText(text); }
public static ContainerTag video(DomContent... dc) { return new ContainerTag("video").with(dc); }
public static ContainerTag video(Attr.ShortForm shortAttr) { return Attr.addTo(new ContainerTag("video"), shortAttr); }
public static ContainerTag video(Attr.ShortForm shortAttr, String text) { return Attr.addTo(new ContainerTag("video").withText(text), shortAttr); }
public static ContainerTag video(Attr.ShortForm shortAttr, DomContent... dc) { return Attr.addTo(new ContainerTag("video").with(dc), shortAttr); }
}

View File

@@ -1,7 +1,62 @@
package j2html.attributes;
import j2html.tags.Tag;
public class Attr {
public static class ShortForm {
String id;
String classes;
private ShortForm(String id, String classes) {
this.id = id;
this.classes = classes;
}
boolean hasId() {
return id != null && !"".equals(id);
}
boolean hasClasses() {
return classes != null && !"".equals(classes);
}
}
public static ShortForm shortFormFromAttrsString(String attrs) {
if (!attrs.contains(".") && !attrs.contains(("#"))) {
throw new IllegalArgumentException("String must contain either id (#) or class (.)");
}
if (attrs.split("#").length > 2) {
throw new IllegalArgumentException("Only one id (#) allowed");
}
String id = "";
StringBuilder classes = new StringBuilder();
for (String attr : attrs.split("\\.")) {
if (attr.contains("#")) {
if (!attr.startsWith("#")) {
throw new IllegalArgumentException("# cannot be in the middle of string");
}
id = attr.replace("#", "");
} else {
classes.append(attr).append(" ");
}
}
return new ShortForm(id.trim(), classes.toString().trim());
}
public static <T extends Tag<T>> T addTo(T tag, ShortForm shortForm) {
if (shortForm.hasId() && shortForm.hasClasses()) {
return tag.withId(shortForm.id).withClass(shortForm.classes);
}
if (shortForm.hasId()) {
return tag.withId(shortForm.id);
}
if (shortForm.hasClasses()) {
return tag.withClass(shortForm.classes);
}
return tag;
}
private Attr() {
}

View File

@@ -1,7 +1,7 @@
package j2html.attributes;
import j2html.utils.SimpleEscaper;
import j2html.Config;
public class Attribute {
private String name;
@@ -9,7 +9,7 @@ public class Attribute {
public Attribute(String name, String value) {
this.name = name;
this.value = SimpleEscaper.escape(value);
this.value = Config.textEscaper.escape(value);
}
public Attribute(String name) {

View File

@@ -4,6 +4,8 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import j2html.Config;
public class ContainerTag extends Tag<ContainerTag> {
private List<DomContent> children;
@@ -22,7 +24,10 @@ public class ContainerTag extends Tag<ContainerTag> {
*/
public ContainerTag with(DomContent child) {
if (this == child) {
throw new Error("Cannot append a tag to itself.");
throw new RuntimeException("Cannot append a tag to itself.");
}
if (child == null) {
return this; // in some cases, like when using iff(), we ignore null children
}
children.add(child);
return this;
@@ -108,6 +113,12 @@ public class ContainerTag extends Tag<ContainerTag> {
return with(new Text(text));
}
/**
* Gets number of child nodes this tag element contains
*/
public int getNumChildren() {
return children.size();
}
/**
* Render the ContainerTag and its children
@@ -117,7 +128,7 @@ public class ContainerTag extends Tag<ContainerTag> {
@Override
public String render() {
StringBuilder rendered = new StringBuilder(renderOpenTag());
if (children != null && !children.isEmpty()) {
if (!children.isEmpty()) {
for (DomContent child : children) {
rendered.append(child.render());
}
@@ -126,6 +137,34 @@ public class ContainerTag extends Tag<ContainerTag> {
return rendered.toString();
}
/**
* Render the ContainerTag and its children, adding newlines before each
* child and using Config.indenter to indent child based on how deep
* in the tree it is
*
* @return the rendered and formatted string
*/
public String renderFormatted() {
return renderFormatted(0);
}
private String renderFormatted(int lvl) {
StringBuilder sb = new StringBuilder(renderOpenTag() + "\n");
if (!children.isEmpty()) {
for (DomContent c : children) {
lvl++;
if (c instanceof ContainerTag) {
sb.append(Config.indenter.indent(lvl, ((ContainerTag) c).renderFormatted(lvl)));
} else {
sb.append(Config.indenter.indent(lvl, c.render())).append("\n");
}
lvl--;
}
}
sb.append(Config.indenter.indent(lvl, renderCloseTag())).append("\n");
return sb.toString();
}
@Override
public void render(Appendable writer) throws IOException {
writer.append(renderOpenTag());

View File

@@ -0,0 +1,24 @@
package j2html.tags;
public class DomContentJoiner {
public static UnescapedText join(CharSequence delimiter, boolean fixPeriodAndCommaSpacing, Object... stringOrDomObjects) {
StringBuilder sb = new StringBuilder();
for (Object o : stringOrDomObjects) {
if (o instanceof String) {
sb.append(((String) o).trim()).append(delimiter);
} else if (o instanceof DomContent) {
sb.append(((DomContent) o).render().trim()).append(delimiter);
} else {
throw new RuntimeException("You can only join DomContent and String objects");
}
}
String joined = sb.toString().trim();
if (fixPeriodAndCommaSpacing) {
joined = joined.replaceAll("\\s\\.", ".");
joined = joined.replaceAll("\\s\\,", ",");
}
return new UnescapedText(joined);
}
}

View File

@@ -1,5 +1,7 @@
package j2html.tags;
import j2html.Config;
public class EmptyTag extends Tag<EmptyTag> {
public EmptyTag(String tagName) {
@@ -8,6 +10,10 @@ public class EmptyTag extends Tag<EmptyTag> {
@Override
public String render() {
if (Config.closeEmptyTags) {
String tag = renderOpenTag();
return tag.substring(0, tag.length() - 1) + "/>";
}
return renderOpenTag();
}

View File

@@ -1,48 +1,43 @@
package j2html.tags;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Scanner;
import j2html.utils.CSSMin;
import j2html.utils.JSMin;
import j2html.Config;
import static j2html.TagCreator.script;
import static j2html.TagCreator.style;
import static j2html.TagCreator.rawHtml;
import static j2html.TagCreator.*;
public class InlineStaticResource {
public enum TargetFormat {CSS_MIN, CSS, JS_MIN, JS}
public static ContainerTag get(String path, TargetFormat format) {
ContainerTag errorAlert = script().with(rawHtml("alert('Unable to read file. File: \"" + path + "\", Type: \"" + format + "\"')"));
String fileString = getFileAsString(path);
if(fileString != null) {
switch(format) {
case CSS_MIN : return style().with(rawHtml(compressCss(fileString)));
case JS_MIN : return script().with(rawHtml(compressJs(fileString)));
case CSS : return style().with(rawHtml(fileString));
case JS : return script().with(rawHtml(fileString));
default : return errorAlert;
}
switch (format) {
case CSS_MIN : return style().with(rawHtml(Config.cssMinifier.minify(fileString)));
case JS_MIN : return script().with(rawHtml(Config.jsMinifier.minify((fileString))));
case CSS : return style().with(rawHtml(fileString));
case JS : return script().with(rawHtml(fileString));
default : throw new RuntimeException("Invalid target format");
}
return errorAlert;
}
public static String getFileAsString(String path) {
try {
return new String(Files.readAllBytes(Paths.get(InlineStaticResource.class.getResource(path).toURI())), "UTF-8");
} catch (Exception e) {
return null;
return streamToString(InlineStaticResource.class.getResourceAsStream(path));
} catch (Exception expected) { // we don't ask users to specify classpath or file-system
try {
return streamToString(new FileInputStream(path));
} catch (Exception exception) {
throw new RuntimeException("Couldn't find file with path='" + path + "'");
}
}
}
private static String compressCss(String code) {
return CSSMin.compress(code);
}
private static String compressJs(String code) {
return JSMin.compressJs(code);
private static String streamToString(InputStream inputStream) {
Scanner s = new Scanner(inputStream).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
}

View File

@@ -15,6 +15,9 @@ public abstract class Tag<T extends Tag<T>> extends DomContent {
this.attributes = new ArrayList<>();
}
public String getTagName() {
return this.tagName;
}
String renderOpenTag() {
StringBuilder sb = new StringBuilder("<").append(tagName);
@@ -58,15 +61,26 @@ public abstract class Tag<T extends Tag<T>> extends DomContent {
* @param value the attribute value
* @return itself for easy chaining
*/
public T attr(String attribute, String value) {
setAttribute(attribute, value);
public T attr(String attribute, Object value) {
setAttribute(attribute, value == null ? null : String.valueOf(value));
return (T) this;
}
/**
* Sets a custom attribute without value
*
* @param attribute the attribute name
* @return itself for easy chaining
* @see Tag#attr(String, Object)
*/
public T attr(String attribute) {
return attr(attribute, null);
}
/**
* Call attr-method based on condition
* {@link #attr(String attribute, String value)}
* {@link #attr(String attribute, Object value)}
*
* @param condition the condition
* @param attribute the attribute name
@@ -89,8 +103,18 @@ public abstract class Tag<T extends Tag<T>> extends DomContent {
/**
* Convenience methods that call attr with predefined attributes
*
* @return itself for easy chaining
*/
public T withClasses(String... classes) {
StringBuilder sb = new StringBuilder();
for (String s : classes) {
sb.append(s != null ? s : "").append(" ");
}
return attr(Attr.CLASS, sb.toString().trim());
}
public T isAutoComplete() { return attr(Attr.AUTOCOMPLETE, null); }
public T isAutoFocus() { return attr(Attr.AUTOFOCUS, null); }
public T isHidden() { return attr(Attr.HIDDEN, null); }
@@ -100,13 +124,16 @@ public abstract class Tag<T extends Tag<T>> extends DomContent {
public T withCharset(String charset) { return attr(Attr.CHARSET, charset); }
public T withClass(String className) { return attr(Attr.CLASS, className); }
public T withContent(String content) { return attr(Attr.CONTENT, content); }
public T withDir(String dir) { return attr(Attr.DIR, dir); }
public T withHref(String href) { return attr(Attr.HREF, href); }
public T withId(String id) { return attr(Attr.ID, id); }
public T withData(String dataAttr, String value) { return attr(Attr.DATA + "-" + dataAttr, value); }
public T withLang(String lang) { return attr(Attr.LANG, lang); }
public T withMethod(String method) { return attr(Attr.METHOD, method); }
public T withName(String name) { return attr(Attr.NAME, name); }
public T withPlaceholder(String placeholder) { return attr(Attr.PLACEHOLDER, placeholder); }
public T withTarget(String target) { return attr(Attr.TARGET, target); }
public T withTitle(String title) { return attr(Attr.TITLE, title); }
public T withType(String type) { return attr(Attr.TYPE, type); }
public T withRel(String rel) { return attr(Attr.REL, rel); }
public T withRole(String role) { return attr(Attr.ROLE, role); }
@@ -123,13 +150,16 @@ public abstract class Tag<T extends Tag<T>> extends DomContent {
public T withCharset(boolean condition, String charset) { return condAttr(condition, Attr.CHARSET, charset); }
public T withCondClass(boolean condition, String className) { return condAttr(condition, Attr.CLASS, className); }
public T withCondContent(boolean condition, String content) { return condAttr(condition, Attr.CONTENT, content); }
public T withCondDir(boolean condition, String dir) { return condAttr(condition, Attr.DIR, dir); }
public T withCondHref(boolean condition, String href) { return condAttr(condition, Attr.HREF, href); }
public T withCondId(boolean condition, String id) { return condAttr(condition, Attr.ID, id); }
public T withCondData(boolean condition, String dataAttr, String value) { return condAttr(condition, Attr.DATA + "-" + dataAttr, value); }
public T withCondLang(boolean condition, String lang) { return condAttr(condition, Attr.LANG, lang); }
public T withCondMethod(boolean condition, String method) { return condAttr(condition, Attr.METHOD, method); }
public T withCondName(boolean condition, String name) { return condAttr(condition, Attr.NAME, name); }
public T withCondPlaceholder(boolean condition, String placeholder) { return condAttr(condition, Attr.PLACEHOLDER, placeholder); }
public T withCondTarget(boolean condition, String target) { return condAttr(condition, Attr.TARGET, target); }
public T withCondTitle(boolean condition, String title) { return condAttr(condition, Attr.TITLE, title); }
public T withCondType(boolean condition, String type) { return condAttr(condition, Attr.TYPE, type); }
public T withCondRel(boolean condition, String rel) { return condAttr(condition, Attr.REL, rel); }
public T withCondSrc(boolean condition, String src) { return condAttr(condition, Attr.SRC, src); }

View File

@@ -0,0 +1,167 @@
package j2html.tags;
import java.util.Arrays;
import java.util.List;
class TagCreatorCodeGenerator {
public static void main(String[] args) {
System.out.println("// EmptyTags, generated in " + TagCreatorCodeGenerator.class);
for (String tag : emptyTags()) {
String emptyA1 = "public static EmptyTag " + tag + "()";
String emptyA2 = "{ return new EmptyTag(\"" + tag + "\"); }";
// Attr shorthands
String emptyB1 = "public static EmptyTag " + tag + "(Attr.ShortForm shortAttr)";
String emptyB2 = "{ return Attr.addTo(new EmptyTag(\"" + tag + "\"), shortAttr); }";
// Print
System.out.println(String.format("%-80s%1s", emptyA1, emptyA2));
System.out.println(String.format("%-80s%1s", emptyB1, emptyB2));
System.out.println("");
}
System.out.println("// ContainerTags, generated in " + TagCreatorCodeGenerator.class);
for (String tag : containerTags()) {
String containerA1 = "public static ContainerTag " + tag + "()";
String containerA2 = "{ return new ContainerTag(\"" + tag + "\"); }";
String containerB1 = "public static ContainerTag " + tag + "(String text)";
String containerB2 = "{ return new ContainerTag(\"" + tag + "\").withText(text); }";
String containerC1 = "public static ContainerTag " + tag + "(DomContent... dc)";
String containerC2 = "{ return new ContainerTag(\"" + tag + "\").with(dc); }";
// Attr shorthands
String containerD1 = "public static ContainerTag " + tag + "(Attr.ShortForm shortAttr)";
String containerD2 = "{ return Attr.addTo(new ContainerTag(\"" + tag + "\"), shortAttr); }";
String containerE1 = "public static ContainerTag " + tag + "(Attr.ShortForm shortAttr, String text)";
String containerE2 = "{ return Attr.addTo(new ContainerTag(\"" + tag + "\").withText(text), shortAttr); }";
String containerF1 = "public static ContainerTag " + tag + "(Attr.ShortForm shortAttr, DomContent... dc)";
String containerF2 = "{ return Attr.addTo(new ContainerTag(\"" + tag + "\").with(dc), shortAttr); }";
// Print
System.out.println(String.format("%-80s%1s", containerA1, containerA2));
System.out.println(String.format("%-80s%1s", containerB1, containerB2));
System.out.println(String.format("%-80s%1s", containerC1, containerC2));
System.out.println(String.format("%-80s%1s", containerD1, containerD2));
System.out.println(String.format("%-80s%1s", containerE1, containerE2));
System.out.println(String.format("%-80s%1s", containerF1, containerF2));
System.out.println("");
}
}
// This is a method that contains all ContainerTags, there is nothing below it
private static List<String> emptyTags() {
return Arrays.asList(
"area",
"base",
"br",
"col",
//"!DOCTYPE html",
"embed",
"hr",
"img",
"input",
"keygen",
"link",
"meta",
"param",
"source",
"track",
"wbr"
);
}
private static List<String> containerTags() {
return Arrays.asList(
"a",
"abbr",
"address",
"article",
"aside",
"audio",
"b",
"bdi",
"bdo",
"blockquote",
"body",
"button",
"canvas",
"caption",
"cite",
"code",
"colgroup",
"datalist",
"dd",
"del",
"details",
"dfn",
"dialog",
"div",
"dl",
"dt",
"em",
"fieldset",
"figcaption",
"figure",
"footer",
"form",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"head",
"header",
"html",
"i",
"iframe",
"ins",
"kbd",
"label",
"legend",
"li",
"main",
"map",
"mark",
"menu",
"menuitem",
"meter",
"nav",
"noscript",
"object",
"ol",
"optgroup",
"option",
"output",
"p",
"pre",
"progress",
"q",
"rp",
"rt",
"ruby",
"s",
"samp",
"script",
"section",
"select",
"small",
"span",
"strong",
"style",
"sub",
"summary",
"sup",
"table",
"tbody",
"td",
"textarea",
"tfoot",
"th",
"thead",
"time",
"title",
"tr",
"u",
"ul",
"var",
"video"
);
}
}

View File

@@ -1,6 +1,6 @@
package j2html.tags;
import j2html.utils.SimpleEscaper;
import j2html.Config;
public class Text extends DomContent {
@@ -12,7 +12,7 @@ public class Text extends DomContent {
@Override
public String render() {
return SimpleEscaper.escape(text);
return Config.textEscaper.escape(text);
}
}

View File

@@ -1,4 +1,4 @@
/**
/*
* * CSSMin Copyright License Agreement (BSD License)
* <p>
* Copyright (c) 2011-2014, Barry van Oudtshoorn
@@ -79,11 +79,11 @@ public class CSSMin {
* @param input the CSS
* @return the compressed version
*/
public static String compress(String input) {
public static String compressCss(String input) {
try {
int k,
j, // Number of open braces
n; // Current position in stream
j, // Number of open braces
n; // Current position in stream
char curr;
BufferedReader br = new BufferedReader(new StringReader(input));
@@ -224,7 +224,8 @@ class Selector {
if (contents.length() == 1) {
throw new EmptySelectorBodyException(selector);
}
contents = contents.substring(0, contents.length() - 2);
int endIndex = contents.endsWith(";}") ? 2 : 1;
contents = contents.substring(0, contents.length() - endIndex);
this.properties = new Property[0];
this.properties = parseProperties(contents).toArray(this.properties);
@@ -266,7 +267,7 @@ class Selector {
private ArrayList<Property> parseProperties(String contents) {
ArrayList<String> parts = new ArrayList<>();
boolean bInsideString = false,
bInsideURL = false;
bInsideURL = false;
int j = 0;
String substr;
for (int i = 0; i < contents.length(); i++) {

View File

@@ -0,0 +1,36 @@
package j2html.utils;
public class EscapeUtil {
public static String escape(String s) {
if (s == null) {
return null;
}
StringBuilder escapedText = new StringBuilder();
char currentChar;
for (int i = 0; i < s.length(); i++) {
currentChar = s.charAt(i);
switch (currentChar) {
case '<':
escapedText.append("&lt;");
break;
case '>':
escapedText.append("&gt;");
break;
case '&':
escapedText.append("&amp;");
break;
case '"':
escapedText.append("&quot;");
break;
case '\'':
escapedText.append("&#x27;");
break;
default:
escapedText.append(currentChar);
}
}
return escapedText.toString();
}
}

View File

@@ -0,0 +1,6 @@
package j2html.utils;
@FunctionalInterface
public interface Indenter {
String indent(int level, String text);
}

View File

@@ -62,7 +62,7 @@ public class JSMin {
try {
jsmin.jsmin();
return outStream.toString().trim();
} catch (IOException | UnterminatedRegExpLiteralException | UnterminatedCommentException | UnterminatedStringLiteralException e) {
} catch (Exception e) {
e.printStackTrace();
return "";
}
@@ -302,4 +302,4 @@ public class JSMin {
private class UnterminatedRegExpLiteralException extends Exception {
}
}
}

View File

@@ -0,0 +1,6 @@
package j2html.utils;
@FunctionalInterface
public interface Minifier {
String minify(String s);
}

View File

@@ -1,28 +0,0 @@
package j2html.utils;
import java.util.HashMap;
import java.util.Map;
public class SimpleEscaper {
private static Map<Character, String> map = new HashMap<Character, String>() {{
put('&', "&amp;");
put('<', "&lt;");
put('>', "&gt;");
put('"', "&quot;");
put('\'', "&#x27;");
}};
public static String escape(String s) {
if(s == null) {
return null;
}
String escapedString = "";
for(char c : s.toCharArray()) {
String escaped = map.get(c);
escapedString += escaped != null ? escaped : c;
}
return escapedString;
}
}

View File

@@ -0,0 +1,6 @@
package j2html.utils;
@FunctionalInterface
public interface TextEscaper {
String escape(String text);
}

View File

@@ -0,0 +1 @@
public class AnyContent{}

7
src/test/files/test.css Normal file
View File

@@ -0,0 +1,7 @@
body {
background: goldenrod;
margin-top: 10px;
margin-right: 10px;
margin-bottom: 10px;
margin-left: 10px;
}

3
src/test/files/test.html Normal file
View File

@@ -0,0 +1,3 @@
<body>
Any content
</body>

6
src/test/files/test.js Normal file
View File

@@ -0,0 +1,6 @@
(function () {
var test = 5;
var tast = 10;
var testTast = test + tast;
console.log(testTast);
})();

View File

@@ -0,0 +1,49 @@
package j2html;
import java.util.concurrent.Callable;
import org.apache.commons.lang3.StringEscapeUtils;
import org.junit.Test;
import j2html.utils.EscapeUtil;
public class PerformanceTest {
private String shortTestString = "<body>\n"
+ " <h1 class=\"example\">Heading!</h1>\n"
+ " <img src=\"img/hello.png\">\n"
+ "</body>";
// syntax-highlighted getting started example from j2html.com:
private String longTestString =
"<pre class=\" language-java\"><code class=\" language-java\"><span class=\"token keyword\">import</span> <span class=\"token keyword\">static</span> j2html<span class=\"token punctuation\">.</span>TagCreator<span class=\"token punctuation\">.</span>*<span class=\"token punctuation\">;</span>\n"
+ "\n"
+ "<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Main</span> <span class=\"token punctuation\">{</span>\n"
+ " <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">main<span class=\"token punctuation\">(</span></span>String<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> args<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n"
+ " <span class=\"token function\">body<span class=\"token punctuation\">(</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">with<span class=\"token punctuation\">(</span></span>\n"
+ " <span class=\"token function\">h1<span class=\"token punctuation\">(</span></span><span class=\"token string\">\"Heading!\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">withClass<span class=\"token punctuation\">(</span></span><span class=\"token string\">\"example\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n"
+ " <span class=\"token function\">img<span class=\"token punctuation\">(</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">withSrc<span class=\"token punctuation\">(</span></span><span class=\"token string\">\"img/hello.png\"</span><span class=\"token punctuation\">)</span>\n"
+ " <span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">render<span class=\"token punctuation\">(</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n"
+ " <span class=\"token punctuation\">}</span>\n"
+ "<span class=\"token punctuation\">}</span>\n"
+ "</code></pre>";
@Test
public void test_escaper_performnce() throws Exception {
timeEscaper("SimpleEscaper#short", () -> EscapeUtil.escape(shortTestString));
timeEscaper("SimpleEscaper#long", () -> EscapeUtil.escape(longTestString));
timeEscaper("ApacheEscaper#short", () -> StringEscapeUtils.escapeHtml4(shortTestString));
timeEscaper("ApacheEscaper#long", () -> StringEscapeUtils.escapeHtml4(longTestString));
}
private void timeEscaper(String name, Callable escaper) throws Exception {
long startTime = System.nanoTime();
for (int i = 0; i < 1000; i++) {
escaper.call();
}
long endTime = System.nanoTime();
long durationMs = (endTime - startTime) / 1000000;
System.out.println(String.format("%-21s%s", name + ":", +durationMs + "ms"));
}
}

View File

@@ -0,0 +1,38 @@
package j2html;
import org.junit.Test;
import j2html.utils.EscapeUtil;
import j2html.utils.TextEscaper;
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
public class TextEscaperTest {
@Test
public void testTextEscaper() throws Exception {
String expected = "&lt;div&gt;&lt;/div&gt;";
assertThat("default text escaper works",
Config.textEscaper.escape("<div></div>"), is(expected));
Config.textEscaper = new NoOpEscaper();
assertThat("user can change text escaper implementation",
Config.textEscaper, is(instanceOf(NoOpEscaper.class)));
expected = "<div></div>";
assertThat("user provided text escaper actually works",
Config.textEscaper.escape("<div></div>"), is(expected));
Config.textEscaper = EscapeUtil::escape; // reset escaper
}
private static class NoOpEscaper implements TextEscaper {
@Override
public String escape(String text) {
return text;
}
}
}

View File

@@ -0,0 +1,61 @@
package j2html.attributes;
import org.junit.Test;
import static j2html.TagCreator.*;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
public class AttrShortFormTest {
@Test
public void addTo_emptyTag() throws Exception {
String expected = "<input id=\"some-id\" class=\"some-class\">";
String actual = input(attrs("#some-id.some-class")).render();
assertThat(actual, is(expected));
}
@Test
public void addTo_containerTag() throws Exception {
String expected = "<div id=\"some-id\" class=\"some-class\"></div>";
String actual = div(attrs("#some-id.some-class")).render();
assertThat(actual, is(expected));
}
@Test
public void addTo_justId() throws Exception {
String expected = "<div id=\"some-id\"></div>";
String actual = div(attrs("#some-id")).render();
assertThat(actual, is(expected));
}
@Test
public void addTo_justClass() throws Exception {
String expected = "<div class=\"some-class\"></div>";
String actual = div(attrs(".some-class")).render();
assertThat(actual, is(expected));
}
@Test
public void addTo_addTwoClasses() throws Exception {
String expected = "<div class=\"some-class some-other-class\"></div>";
String actual = div(attrs(".some-class.some-other-class")).render();
assertThat(actual, is(expected));
}
@Test(expected = IllegalArgumentException.class)
public void addTo_stringWithoutIdOrClass() throws Exception {
div(attrs("some-class")).render();
}
@Test(expected = IllegalArgumentException.class)
public void addTo_stringWithTwoIds() throws Exception {
div(attrs("#id1#id2")).render();
}
@Test(expected = IllegalArgumentException.class)
public void addTo_stringWithStupidlyPlacedId() throws Exception {
div(attrs("id1#id2")).render();
}
}

View File

@@ -2,24 +2,10 @@ package j2html.tags;
import org.junit.Test;
import j2html.TagCreator;
import j2html.attributes.Attr;
import static j2html.TagCreator.a;
import static j2html.TagCreator.body;
import static j2html.TagCreator.button;
import static j2html.TagCreator.div;
import static j2html.TagCreator.document;
import static j2html.TagCreator.footer;
import static j2html.TagCreator.h1;
import static j2html.TagCreator.h2;
import static j2html.TagCreator.head;
import static j2html.TagCreator.header;
import static j2html.TagCreator.html;
import static j2html.TagCreator.input;
import static j2html.TagCreator.main;
import static j2html.TagCreator.script;
import static j2html.TagCreator.text;
import static j2html.TagCreator.title;
import static j2html.TagCreator.*;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -29,35 +15,139 @@ public class ComplexRenderTest {
boolean USER_SHOULD_LOG_IN = true;
boolean USER_SHOULD_SIGN_UP = false;
return document().render() +
html().with(
head().with(
title().withText("Test")
),
body().with(
header().with(
h1().with(
text("Test Header "),
a("with link").withHref("http://example.com"),
text(".")
)
),
main().with(
h2("Test Form"),
div().with(
input().withType("email").withName("email").withPlaceholder("Email"),
input().withType("password").withName("password").withPlaceholder("Password")
).condWith(USER_SHOULD_LOG_IN, button().withType("submit").withText("Login")
).condWith(USER_SHOULD_SIGN_UP, button().withType("submit").withText("Signup"))
),
footer().attr(Attr.CLASS, "footer").condAttr(1 == 1, Attr.ID, "id").withText("Test Footer"),
script().withSrc("/testScript.js")
html().with(
head().with(
title().withText("Test")
),
body().with(
header().with(
h1().with(
text("Test Header "),
a("with link").withHref("http://example.com"),
text(".")
)
).render();
),
main().with(
h2("Test Form"),
div().with(
input().withType("email").withName("email").withPlaceholder("Email"),
input().withType("password").withName("password").withPlaceholder("Password")
).condWith(USER_SHOULD_LOG_IN, button().withType("submit").withText("Login")
).condWith(USER_SHOULD_SIGN_UP, button().withType("submit").withText("Signup"))
),
footer().attr(Attr.CLASS, "footer").condAttr(1 == 1, Attr.ID, "id").withText("Test Footer"),
script().withSrc("/testScript.js")
)
).render();
}
private String renderTest2() {
boolean USER_SHOULD_LOG_IN = true;
boolean USER_SHOULD_SIGN_UP = false;
return document().render() +
html(
head(
title("Test")
),
body(
header(
h1(
text("Test Header "),
a("with link").withHref("http://example.com"),
text(".")
)
),
main(
h2("Test Form"),
div(
input().withType("email").withName("email").withPlaceholder("Email"),
input().withType("password").withName("password").withPlaceholder("Password"),
iff(USER_SHOULD_LOG_IN, button().withType("submit").withText("Login")),
iff(USER_SHOULD_SIGN_UP, button().withType("submit").withText("Signup"))
)
),
footer("Test Footer").attr(Attr.CLASS, "footer").condAttr(1 == 1, Attr.ID, "id"),
script().withSrc("/testScript.js")
)
).render();
}
private String renderTest3() {
boolean USER_SHOULD_LOG_IN = true;
boolean USER_SHOULD_SIGN_UP = false;
return document().render() + "\n" +
html(
head(
title("Test")
),
body(
header(
h1(
text("Test Header "),
a("with link").withHref("http://example.com"),
text(".")
)
),
main(
h2("Test Form"),
div(
input().withType("email").withName("email").withPlaceholder("Email"),
input().withType("password").withName("password").withPlaceholder("Password"),
iff(USER_SHOULD_LOG_IN, button().withType("submit").withText("Login")),
iff(USER_SHOULD_SIGN_UP, button().withType("submit").withText("Signup"))
)
),
footer("Test Footer").attr(Attr.CLASS, "footer").condAttr(1 == 1, Attr.ID, "id"),
script().withSrc("/testScript.js")
)
).renderFormatted();
}
@Test
public void testComplexRender() {
String expectedResult = "<!DOCTYPE html><html><head><title>Test</title></head><body><header><h1>Test Header <a href=\"http://example.com\">with link</a>.</h1></header><main><h2>Test Form</h2><div><input type=\"email\" name=\"email\" placeholder=\"Email\"><input type=\"password\" name=\"password\" placeholder=\"Password\"><button type=\"submit\">Login</button></div></main><footer class=\"footer\" id=\"id\">Test Footer</footer><script src=\"/testScript.js\"></script></body></html>";
assertThat(renderTest(), is(expectedResult));
assertThat(renderTest2(), is(expectedResult));
}
@Test
public void testComplexRender_formatted() {
assertThat(renderTest3(),
is("<!DOCTYPE html>\n"
+ "<html>\n"
+ " <head>\n"
+ " <title>\n"
+ " Test\n"
+ " </title>\n"
+ " </head>\n"
+ " <body>\n"
+ " <header>\n"
+ " <h1>\n"
+ " Test Header \n"
+ " <a href=\"http://example.com\">\n"
+ " with link\n"
+ " </a>\n"
+ " .\n"
+ " </h1>\n"
+ " </header>\n"
+ " <main>\n"
+ " <h2>\n"
+ " Test Form\n"
+ " </h2>\n"
+ " <div>\n"
+ " <input type=\"email\" name=\"email\" placeholder=\"Email\">\n"
+ " <input type=\"password\" name=\"password\" placeholder=\"Password\">\n"
+ " <button type=\"submit\">\n"
+ " Login\n"
+ " </button>\n"
+ " </div>\n"
+ " </main>\n"
+ " <footer class=\"footer\" id=\"id\">\n"
+ " Test Footer\n"
+ " </footer>\n"
+ " <script src=\"/testScript.js\">\n"
+ " </script>\n"
+ " </body>\n"
+ "</html>\n"));
}
}

View File

@@ -32,6 +32,7 @@ public class ConvenienceMethodTest {
assertThat(input().withName("test-name").render(), is("<input name=\"test-name\">"));
assertThat(input().withPlaceholder("test-placeholder").render(), is("<input placeholder=\"test-placeholder\">"));
assertThat(a().withTarget("_blank").render(), is("<a target=\"_blank\"></a>"));
assertThat(a().withTitle("Title").render(), is("<a title=\"Title\"></a>"));
assertThat(input().withType("email").render(), is("<input type=\"email\">"));
assertThat(link().withRel("stylesheet").render(), is("<link rel=\"stylesheet\">"));
assertThat(link().withRole("role").render(), is("<link role=\"role\">"));

View File

@@ -0,0 +1,46 @@
package j2html.tags;
import org.junit.Test;
import static j2html.TagCreator.fileAsEscapedString;
import static j2html.TagCreator.fileAsString;
import static j2html.TagCreator.scriptWithInlineFile_min;
import static j2html.TagCreator.styleWithInlineFile_min;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
public class InlineStaticResourceTest {
private static final String EOL = System.getProperty("line.separator"); // System independent End Of Line
@Test
public void testAllTags() throws Exception {
String expectedCss = "<style>body{background:#daa520;margin-bottom:10px;margin-left:10px;margin-right:10px;margin-top:10px}</style>";
String expectedJs = "<script>(function(){var test=5;var tast=10;var testTast=test+tast;console.log(testTast);})();</script>";
String expectedHtml = "<body>" + EOL + " Any content" + EOL + "</body>" + EOL;
String expectedEscapedHtml = "&lt;body&gt;" + EOL + " Any content" + EOL + "&lt;/body&gt;" + EOL;
String expectedAnyContent = "public class AnyContent{}" + EOL;
// classpath files
assertThat(styleWithInlineFile_min("/test.css").render(), is(expectedCss));
assertThat(styleWithInlineFile_min("/test-without-trailing-semis.css").render(), is(expectedCss));
assertThat(scriptWithInlineFile_min("/test.js").render(), is(expectedJs));
assertThat(fileAsString("/test.html").render(), is(expectedHtml));
assertThat(fileAsEscapedString("/test.html").render(), is(expectedEscapedHtml));
assertThat(fileAsString("/AnyContent.java").render(), is(expectedAnyContent));
// files outside classpath
assertThat(styleWithInlineFile_min("src/test/files/test.css").render(), is(expectedCss));
assertThat(scriptWithInlineFile_min("src/test/files/test.js").render(), is(expectedJs));
assertThat(fileAsString("src/test/files/test.html").render(), is(expectedHtml));
assertThat(fileAsEscapedString("src/test/files/test.html").render(), is(expectedEscapedHtml));
assertThat(fileAsString("src/test/files/AnyContent.java").render(), is(expectedAnyContent));
}
@Test(expected=RuntimeException.class)
public void testExceptionForBadPath() throws Exception {
styleWithInlineFile_min("NOT A FILE");
}
}

View File

@@ -4,11 +4,14 @@ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.junit.Test;
import org.junit.*;
import j2html.Config;
import static j2html.TagCreator.*;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals;
public class TagCreatorTest {
@@ -16,41 +19,79 @@ public class TagCreatorTest {
List<Employee> employees = Arrays.asList(new Employee(1, "Name 1", "Title 1"), new Employee(2, "Name 2", "Title 2"), new Employee(3, "Name 3", "Title 3"));
@Test
public void testDocument() throws Exception {
Config.closeEmptyTags = true;
assertEquals("<!DOCTYPE html>", document().render());
assertEquals("<!DOCTYPE html><html></html>", document(html()));
Config.closeEmptyTags = false;
assertEquals("<!DOCTYPE html>", document().render());
assertEquals("<!DOCTYPE html><html></html>", document(html()));
}
@Test
public void testIff() throws Exception {
String expected = "<div><p>Test</p><a href=\"#\">Test</a></div>";
String actual = div(
p("Test"),
iff(1 == 1, a("Test").withHref("#")),
iff(1 == 2, a("Tast").withHref("#"))
).render();
assertThat(actual, is(expected));
}
@Test
public void testIffElse() throws Exception {
String expected = "<div><p>Tast</p></div>";
String actual = div(iffElse(1 == 2, p("Test"), p("Tast"))).render();
assertThat(actual, is(expected));
}
@Test
public void testJoin() throws Exception {
String expected = "This is my joined string. It has a <a href=\"#\">link in the middle</a> and <code>code at the end</code>.";
String actual = join("This is my joined string. It has a", a("link in the middle").withHref("#"), "and", code("code at the end"), ".").render();
assertThat(actual, is(expected));
}
@Test
@Ignore // Having some trouble with RetroLambda setup
public void testEach() throws Exception {
String j2htmlMap = ul().with(
li("Begin list"),
each(employees, employee -> li().with(
h2(employee.name),
p(employee.title)
))
li("Begin list"),
each(employees, employee -> li(
h2(employee.name),
p(employee.title)
))
).render();
String javaMap = ul().with(
li("Begin list"),
rawHtml(employees.stream().map(employee -> li().with(
h2(employee.name),
p(employee.title)
)).map(DomContent::render).collect(Collectors.joining()))
li("Begin list"),
rawHtml(employees.stream().map(employee -> li(
h2(employee.name),
p(employee.title)
)).map(DomContent::render).collect(Collectors.joining()))
).render();
assertThat(j2htmlMap.equals(javaMap), is(true));
assertThat(j2htmlMap, is("<ul><li>Begin list</li><li><h2>Name 1</h2><p>Title 1</p></li><li><h2>Name 2</h2><p>Title 2</p></li><li><h2>Name 3</h2><p>Title 3</p></li></ul>"));
}
@Test
@Ignore // Having some trouble with RetroLambda setup
public void testFilter() throws Exception {
String j2htmlFilter = ul().with(
li("Begin list"),
each(filter(employees, e -> e.id % 2 == 1), employee -> li().with(
h2(employee.name),
p(employee.title)
))
li("Begin list"),
each(filter(employees, e -> e.id % 2 == 1), employee -> li(
h2(employee.name),
p(employee.title)
))
).render();
String javaFilter = ul().with(
li("Begin list"),
rawHtml(employees.stream().filter(e -> e.id % 2 == 1).map(employee -> li().with(
h2(employee.name),
p(employee.title)
)).map(DomContent::render).collect(Collectors.joining()))
li("Begin list"),
rawHtml(employees.stream().filter(e -> e.id % 2 == 1).map(employee -> li(
h2(employee.name),
p(employee.title)
)).map(DomContent::render).collect(Collectors.joining()))
).render();
assertThat(j2htmlFilter.equals(javaFilter), is(true));
assertThat(j2htmlFilter, is("<ul><li>Begin list</li><li><h2>Name 1</h2><p>Title 1</p></li><li><h2>Name 3</h2><p>Title 3</p></li></ul>"));
@@ -65,11 +106,6 @@ public class TagCreatorTest {
assertThat(text("text").render(), is("text"));
assertThat(text("<script> and \"</script>\"").render(), is("&lt;script&gt; and &quot;&lt;/script&gt;&quot;"));
assertThat(rawHtml("<script>").render(), is("<script>"));
assertThat(styleWithInlineFile_min("/test.css").render(), is("<style>body{background:#daa520;margin-bottom:10px;margin-left:10px;margin-right:10px;margin-top:10px}</style>"));
assertThat(scriptWithInlineFile_min("/test.js").render(), is("<script>(function(){var test=5;var tast=10;var testTast=test+tast;console.log(testTast);})();</script>"));
assertThat(fileAsString("/test.html").render(), is("<body>" + EOL + " Any content" + EOL + "</body>" + EOL));
assertThat(fileAsEscapedString("/test.html").render(), is("&lt;body&gt;" + EOL + " Any content" + EOL + "&lt;/body&gt;" + EOL));
assertThat(fileAsString("/AnyContent.java").render(), is("public class AnyContent{}" + EOL));
//EmptyTags
assertThat(document().render(), is("<!DOCTYPE html>"));

View File

@@ -2,15 +2,11 @@ package j2html.tags;
import org.junit.Test;
import static j2html.TagCreator.body;
import static j2html.TagCreator.footer;
import static j2html.TagCreator.header;
import static j2html.TagCreator.html;
import static j2html.TagCreator.main;
import static j2html.TagCreator.p;
import static j2html.TagCreator.tag;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import j2html.Config;
import static j2html.TagCreator.*;
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
public class TagTest {
@@ -42,6 +38,19 @@ public class TagTest {
assertThat(testTag.renderCloseTag(), is("</a>"));
}
@Test
public void testSelfClosingTags() throws Exception {
Config.closeEmptyTags = true;
assertThat(img().withSrc("/test.png").render(), is("<img src=\"/test.png\"/>"));
assertThat(input().withType("text").render(), is("<input type=\"text\"/>"));
Config.closeEmptyTags = false;
}
@Test
public void testFormattedTags() throws Exception { // better test in ComplexRenderTest.java
assertThat(div(p("Hello")).renderFormatted(), is("<div>\n <p>\n Hello\n </p>\n</div>\n"));
}
@Test
public void testEquals() throws Exception {
Tag tagOne = tag("p").withClass("class").withText("Test");
@@ -49,4 +58,31 @@ public class TagTest {
assertThat(tagOne.equals(tagTwo), is(true));
}
@Test
public void testAcceptObjectValueAttribute() throws Exception {
ContainerTag complexTestTag = new ContainerTag("input")
.attr("attr1", "value1")
.attr("attr2", 2)
.attr("attr3", null);
String expectedResult = "<input attr1=\"value1\" attr2=\"2\" attr3>";
assertThat(complexTestTag.renderOpenTag(), is(expectedResult));
}
@Test
public void testWithClasses() throws Exception {
String expected = "<div class=\"c1 c2\"></div>";
String actual = div().withClasses("c1", iff(1 == 1, "c2"), iff(1 == 2, "c3")).render();
assertThat(actual, is(expected));
}
@Test
public void testEmptyAttribute() throws Exception {
ContainerTag testTagWithAttrValueNull = new ContainerTag("a").attr("attribute", null);
assertThat(testTagWithAttrValueNull.render(), is("<a attribute></a>"));
ContainerTag testTagAttrWithoutAttr = new ContainerTag("a").attr("attribute");
assertThat(testTagAttrWithoutAttr.render(), is("<a attribute></a>"));
}
}

View File

@@ -0,0 +1,7 @@
body {
background: goldenrod;
margin-top: 10px;
margin-right: 10px;
margin-bottom: 10px;
margin-left: 10px
}