From c5ae391ce7f6087dedd7dccd064c43145e83fce0 Mon Sep 17 00:00:00 2001 From: Marco Petris Date: Fri, 14 Dec 2018 15:39:43 +0100 Subject: [PATCH 1/8] bugfix: in the case of a LeafNode calling childNodes throws an Exception, therefore check childNodeSize first --- elements/src/main/java/org/vaadin/elements/impl/Context.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/elements/src/main/java/org/vaadin/elements/impl/Context.java b/elements/src/main/java/org/vaadin/elements/impl/Context.java index 285f0a1..3d6bf2f 100644 --- a/elements/src/main/java/org/vaadin/elements/impl/Context.java +++ b/elements/src/main/java/org/vaadin/elements/impl/Context.java @@ -37,8 +37,9 @@ public void wrapChildren(NodeImpl node) { while (!queue.isEmpty()) { Node soupChild = queue.poll(); - - queue.addAll(soupChild.childNodes()); + if (soupChild.childNodeSize() > 0) { + queue.addAll(soupChild.childNodes()); + } NodeImpl child = ElementReflectHelper.wrap(soupChild); adopt(child); From 948fce5173ea67739a57442d07f80c851981e549 Mon Sep 17 00:00:00 2001 From: Marco Petris Date: Fri, 14 Dec 2018 15:46:52 +0100 Subject: [PATCH 2/8] access to index 2 fails for elements with no children and no attributes because array size is 2 then conaining only tagname and element id therefore we check for length before trying access at idx 2 --- .../org/vaadin/elements/impl/RootImpl.java | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/elements/src/main/java/org/vaadin/elements/impl/RootImpl.java b/elements/src/main/java/org/vaadin/elements/impl/RootImpl.java index a244eab..a8eff97 100644 --- a/elements/src/main/java/org/vaadin/elements/impl/RootImpl.java +++ b/elements/src/main/java/org/vaadin/elements/impl/RootImpl.java @@ -302,23 +302,27 @@ public void init(String html) { private void synchronizeRecursively(JsonArray hierarchy, ElementImpl element) { int firstChild; - JsonValue maybeAttributes = hierarchy.get(2); - if (maybeAttributes.getType() == JsonType.OBJECT) { - firstChild = 3; - JsonObject attributes = (JsonObject) maybeAttributes; - String[] names = attributes.keys(); - - HashSet oldAttributes = new HashSet<>( - element.getAttributeNames()); - oldAttributes.removeAll(Arrays.asList(names)); - oldAttributes.forEach(n -> element.removeAttribute(n)); - - Arrays.stream(names).forEach(name -> element.setAttribute(name, - attributes.getString(name))); - } else { - firstChild = 2; + if (hierarchy.length() > 2) { + JsonValue maybeAttributes = hierarchy.get(2); + if (maybeAttributes.getType() == JsonType.OBJECT) { + firstChild = 3; + JsonObject attributes = (JsonObject) maybeAttributes; + String[] names = attributes.keys(); + + HashSet oldAttributes = new HashSet<>( + element.getAttributeNames()); + oldAttributes.removeAll(Arrays.asList(names)); + oldAttributes.forEach(n -> element.removeAttribute(n)); + + Arrays.stream(names).forEach(name -> element.setAttribute(name, + attributes.getString(name))); + } else { + firstChild = 2; + } + } + else { + firstChild = hierarchy.length(); } - ArrayList newChildren = new ArrayList<>(); for (int i = firstChild; i < hierarchy.length(); i++) { JsonArray child = hierarchy.getArray(i); From bc83b752610834a2a0ebc56029c5c8bc46379e5a Mon Sep 17 00:00:00 2001 From: Marco Petris Date: Wed, 19 Dec 2018 14:44:10 +0100 Subject: [PATCH 3/8] added tests to check changes for parsing DOM leafs without attributes and adding LeafNode work in order to test LeafNode an upgrade of the referenced vaadin version because of the newer jsoup dependency was necessary --- elements-demo/pom.xml | 4 ++-- elements/pom.xml | 4 ++-- .../java/org/vaadin/elements/RootTest.java | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/elements-demo/pom.xml b/elements-demo/pom.xml index ea9cc89..11b456b 100644 --- a/elements-demo/pom.xml +++ b/elements-demo/pom.xml @@ -5,12 +5,12 @@ org.vaadin elements-demo war - 0.2.0 + 0.2.1-SNAPSHOT Elements Add-on Demo UTF-8 - 8.0.5 + 8.6.2 diff --git a/elements/pom.xml b/elements/pom.xml index 90629f4..fd26089 100644 --- a/elements/pom.xml +++ b/elements/pom.xml @@ -10,7 +10,7 @@ UTF-8 - 8.0.5 + 8.6.2 ${vaadin.version} @@ -74,7 +74,7 @@ org.jsoup jsoup - 1.8.1 + 1.11.2 cglib diff --git a/elements/src/test/java/org/vaadin/elements/RootTest.java b/elements/src/test/java/org/vaadin/elements/RootTest.java index 942df10..6f870db 100644 --- a/elements/src/test/java/org/vaadin/elements/RootTest.java +++ b/elements/src/test/java/org/vaadin/elements/RootTest.java @@ -1,5 +1,7 @@ package org.vaadin.elements; +import com.vaadin.icons.VaadinIcons; +import com.vaadin.shared.ui.ContentMode; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -70,4 +72,20 @@ public void innerHtmlElementOrder() { pendingCommands.toJson()); } + @Test + public void fetchDOMWithLeafsWithoutAttributes() { + // set a callback for the synchronize + root.fetchDom(() -> { + Assert.assertEquals("
", root.asHtml()); + }); + JsonArray pendingCommands = root.flushPendingCommands(); + + // synchronize structure with no children and no attributes + root.synchronize(0, pendingCommands); + } + + @Test + public void addLeafToRootNode() { + root.setInnerHtml("Text-Leaf"); + } } From 8c0f9eeef408a0d09756928f5ccd699747e5ec29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leif=20=C3=85strand?= Date: Fri, 21 Dec 2018 09:13:50 +0100 Subject: [PATCH 4/8] Update elements-demo/pom.xml Co-Authored-By: mpetris --- elements-demo/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elements-demo/pom.xml b/elements-demo/pom.xml index 11b456b..4e6fafd 100644 --- a/elements-demo/pom.xml +++ b/elements-demo/pom.xml @@ -10,7 +10,7 @@ UTF-8 - 8.6.2 + 8.0.5 From cfb2df40fc415f93f49d23748fc861f4765fed6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leif=20=C3=85strand?= Date: Fri, 21 Dec 2018 09:13:57 +0100 Subject: [PATCH 5/8] Update elements/pom.xml Co-Authored-By: mpetris --- elements/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elements/pom.xml b/elements/pom.xml index fd26089..17d924c 100644 --- a/elements/pom.xml +++ b/elements/pom.xml @@ -10,7 +10,7 @@ UTF-8 - 8.6.2 + 8.0.5 ${vaadin.version} From 99dd032de9773fe34fa0b6147e9953cda2eb1f50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leif=20=C3=85strand?= Date: Fri, 21 Dec 2018 09:14:11 +0100 Subject: [PATCH 6/8] Update elements/src/main/java/org/vaadin/elements/impl/Context.java Co-Authored-By: mpetris --- elements/src/main/java/org/vaadin/elements/impl/Context.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/elements/src/main/java/org/vaadin/elements/impl/Context.java b/elements/src/main/java/org/vaadin/elements/impl/Context.java index 3d6bf2f..76283b1 100644 --- a/elements/src/main/java/org/vaadin/elements/impl/Context.java +++ b/elements/src/main/java/org/vaadin/elements/impl/Context.java @@ -37,7 +37,8 @@ public void wrapChildren(NodeImpl node) { while (!queue.isEmpty()) { Node soupChild = queue.poll(); - if (soupChild.childNodeSize() > 0) { + // Only relevant for newer JSoup versions + if (soupChild.childNodeSize() > 0) { queue.addAll(soupChild.childNodes()); } From f7d8d53f4a7b5a26ec381e12a22cb711b822ac77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leif=20=C3=85strand?= Date: Fri, 21 Dec 2018 09:14:22 +0100 Subject: [PATCH 7/8] Update elements/src/test/java/org/vaadin/elements/RootTest.java Co-Authored-By: mpetris --- elements/src/test/java/org/vaadin/elements/RootTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/elements/src/test/java/org/vaadin/elements/RootTest.java b/elements/src/test/java/org/vaadin/elements/RootTest.java index 6f870db..c082aa1 100644 --- a/elements/src/test/java/org/vaadin/elements/RootTest.java +++ b/elements/src/test/java/org/vaadin/elements/RootTest.java @@ -86,6 +86,7 @@ public void fetchDOMWithLeafsWithoutAttributes() { @Test public void addLeafToRootNode() { - root.setInnerHtml("Text-Leaf"); + // Only relevant for newer JSoup versions + root.setInnerHtml("Text-Leaf"); } } From f6dcd159744a9537dec139a59f604166a5916842 Mon Sep 17 00:00:00 2001 From: Marco Petris Date: Thu, 19 May 2022 17:08:23 +0200 Subject: [PATCH 8/8] adjusted construction of jsoup TextNode to the newer version of jsoup which requires one argument instead of two this enables compatibility with Vaadin Framework 8.14.1 which ships with the newer jsoup version (1.14.2) --- elements/pom.xml | 4 ++-- elements/src/main/java/org/vaadin/elements/Elements.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/elements/pom.xml b/elements/pom.xml index 47a42a3..a38b05f 100644 --- a/elements/pom.xml +++ b/elements/pom.xml @@ -5,12 +5,12 @@ org.vaadin elements jar - 0.2.1-SNAPSHOT + 0.2.3-SNAPSHOT Elements Add-on UTF-8 - 8.0.5 + 8.14.1 ${vaadin.version} diff --git a/elements/src/main/java/org/vaadin/elements/Elements.java b/elements/src/main/java/org/vaadin/elements/Elements.java index 9fc3b8e..290979e 100644 --- a/elements/src/main/java/org/vaadin/elements/Elements.java +++ b/elements/src/main/java/org/vaadin/elements/Elements.java @@ -54,6 +54,6 @@ private static String getElementTag(final Class type, public static TextNode createText(String text) { return (TextNode) ElementReflectHelper - .wrap(new org.jsoup.nodes.TextNode(text, "")); + .wrap(new org.jsoup.nodes.TextNode(text)); } }