public Node get(int i) { return children().get(i); }
public Node first() { return children().get(0); }
public Node last() { return children().get(children.size() - 1); }
public Body(Node node, String offset, String dir, boolean addNewLine, Set<String> imports, ViewRenderingService viewRenderingService) { this.node = node; for (Node child : node.children()) { viewRenderingService.prepare(child, this, dir, offset, addNewLine, imports); } }
protected void readImports(Node html, Set<String> imports) { Node page = html.get("%@"); if (page != null && page.hasAttr("page")) { html.children().remove(page); if (page.hasAttr("import")) { imports.addAll(Arrays.asList(page.attr("import").split("; *"))); } } }
@Override public void decorate(Node from, Node to) { Node title = from.get("html/head/title"); if (title != null) title.parent().children().remove(title); Node layoutTitle = to.find("g:layoutTitle"); String defaultTitle = layoutTitle.attr("default"); if (defaultTitle == null) defaultTitle = ""; replace(layoutTitle, title != null ? title : new Node("title").addText(defaultTitle)); }
@Test public void xml_comment_1() throws IOException { String s = "<div><!-- <comment> --></div>"; Node div = new XmlParser().parse(s); Assert.assertEquals(0, div.attributes().size()); Assert.assertEquals(1, div.children().size()); Assert.assertEquals(true, div.children().get(0).isComment()); Assert.assertEquals("<!--<comment>-->", div.children().get(0).ownText()); }
@Test public void gsp_comment_2() throws IOException { String s = "" + "<div %{--foo=\"${bar}\"--}%>\n" + " \n" + "</div>\n"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(0, div.children().size()); Assert.assertEquals(0, div.attributes().size()); }
@Test public void gsp_comment_1() throws IOException { String s = "" + "<div>\n" + " %{--<p>$test</p>--}%\n" + "</div>\n"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(1, div.children().size()); Assert.assertEquals(0, div.attributes().size()); Assert.assertEquals("%{--<p>$test</p>--}%", div.children().get(0).textOwn()); }
@Test public void gsp_1() throws IOException { String s = "<div><g:textField name=\"${it.key}\" placeholder=\"${[].collect({it})}\"/></div>"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(1, div.children().size()); Node textField = div.children().get(0); Assert.assertEquals("g:textField", textField.name()); Assert.assertEquals(0, textField.children().size()); Assert.assertEquals(2, textField.attributes().size()); Assert.assertEquals("${it.key}", textField.attr("name")); Assert.assertEquals("${[].collect({it})}", textField.attr("placeholder")); }
@Test public void gsp_2() throws IOException { String s = "<div><g:textField name=\"${it.key}\" placeholder=\"${String.valueOf(it.getValue()).replace(\"\\\"\", \"\")}\"/></div>"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(1, div.children().size()); Node textField = div.children().get(0); Assert.assertEquals("g:textField", textField.name()); Assert.assertEquals(0, textField.children().size()); Assert.assertEquals(2, textField.attributes().size()); Assert.assertEquals("${it.key}", textField.attr("name")); Assert.assertEquals("${String.valueOf(it.getValue()).replace(\"\\\"\", \"\")}", textField.attr("placeholder")); }
@Test public void html_2() throws IOException { String s = "<div width=100px></div>"; Node root = new HtmlParser().parse(s); Node div = root.children().get(0); Assert.assertEquals(1, div.attributes().size()); Assert.assertEquals(0, div.children().size()); Assert.assertEquals("100px", div.attr("width")); s = "<div width=100px height=50px></div>"; root = new HtmlParser().parse(s); div = root.children().get(0); Assert.assertEquals(2, div.attributes().size()); Assert.assertEquals(0, div.children().size()); Assert.assertEquals("100px", div.attr("width")); Assert.assertEquals("50px", div.attr("height")); }
@Test public void gsp_comment_3() throws IOException { String s = "" + "<div foo=\"bar%{--_$id--}%_0\">\n" + " \n" + "</div>\n"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(0, div.children().size()); Assert.assertEquals(1, div.attributes().size()); Assert.assertEquals("bar_0", div.attr("foo")); }
default RenderableList prepare(String html) { Node n = new GspParser().parse(html); RenderableList l = new RenderableList(); new ViewRenderingService().prepare(n.children(), l, "", ""); return l; }
@Test public void html_doctype() throws IOException { String s = "<!DOCTYPE html>"; Node doc = new HtmlParser().parse(s); Assert.assertEquals(1, doc.children().size()); Assert.assertEquals("!DOCTYPE", doc.get(0).name()); Assert.assertEquals(1, doc.get(0).attributes().size()); Assert.assertEquals(true, doc.get(0).attributes().containsKey("html")); Assert.assertEquals(null, doc.get(0).attributes().get("html")); }
@Test public void gsp_comment_4() throws IOException { String s = "<div>\n" + " before\n" + " %{--<p>text</p>--}%\n" + " after\n" + "</div>"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(3, div.children().size()); Assert.assertEquals("before", div.get(0).text()); Assert.assertEquals("%{--<p>text</p>--}%", div.get(1).text()); Assert.assertEquals("after", div.get(2).text()); }
@Test public void gsp_html_comment() throws IOException { String s = "<div>\n" + " before\n" + " <!--<p>text</p>-->\n" + " after\n" + "</div>"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(3, div.children().size()); Assert.assertEquals("before", div.get(0).text()); Assert.assertEquals("<!--<p>text</p>-->", div.get(1).text()); Assert.assertEquals("after", div.get(2).text()); }
@Test public void html_doctype2() throws IOException { String s = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n"; Node doc = new HtmlParser().parse(s); Assert.assertEquals(1, doc.children().size()); Assert.assertEquals("!DOCTYPE", doc.get(0).name()); Assert.assertEquals(4, doc.get(0).attributes().size()); Assert.assertEquals(true, doc.get(0).attributes().containsKey("HTML")); Assert.assertEquals(null, doc.get(0).attributes().get("HTML")); Assert.assertEquals(true, doc.get(0).attributes().containsKey("PUBLIC")); Assert.assertEquals(null, doc.get(0).attributes().get("PUBLIC")); Assert.assertEquals(true, doc.get(0).attributes().containsKey("\"-//W3C//DTD HTML 4.01//EN\"")); Assert.assertEquals(null, doc.get(0).attributes().get("\"-//W3C//DTD HTML 4.01//EN\"")); Assert.assertEquals(true, doc.get(0).attributes().containsKey("\"http://www.w3.org/TR/html4/strict.dtd\"")); Assert.assertEquals(null, doc.get(0).attributes().get("\"http://www.w3.org/TR/html4/strict.dtd\"")); }
@Test() public void test_ignore_comments() { String gsp = "<div>\n" + " before\n" + " %{--<p>text</p>--}%\n" + " after\n" + "</div>"; RenderableList renderable = new RenderableList(); new ViewRenderingService().prepare(new GspParser().parse(gsp).children(), renderable, "", ""); Assert.assertEquals("<div>\n" + " before\n" + " after\n" + "</div>\n", renderable.get(null).toString()); } }