Add HTMLPanel.wrap(Element).
http://gwt-code-reviews.appspot.com/1360801/show
Issue: 3511
Author: tbroyer
Review by: jlabanca
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9735 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/HTMLPanel.java b/user/src/com/google/gwt/user/client/ui/HTMLPanel.java
index 814381a..2240ac7 100644
--- a/user/src/com/google/gwt/user/client/ui/HTMLPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/HTMLPanel.java
@@ -42,6 +42,28 @@
}
/**
+ * Creates an HTML panel that wraps an existing element.
+ *
+ * This element must already be attached to the document. If the element is
+ * removed from the document, you must call
+ * {@link RootPanel#detachNow(Widget)}.
+ *
+ * @param element the element to be wrapped
+ */
+ public static HTMLPanel wrap(Element element) {
+ // Assert that the element is attached.
+ assert Document.get().getBody().isOrHasChild(element);
+
+ HTMLPanel html = new HTMLPanel(element);
+
+ // Mark it attached and remember it for cleanup.
+ html.onAttach();
+ RootPanel.detachOnWindowClose(html);
+
+ return html;
+ }
+
+ /**
* Creates an HTML panel with the specified HTML contents inside a DIV
* element. Any element within this HTML that has a specified id can contain a
* child widget.
@@ -100,7 +122,16 @@
setElement(scratchDiv.getFirstChildElement());
getElement().removeFromParent();
}
-
+
+ /**
+ * Construct a new {@link HTMLPanel} with the specified element.
+ *
+ * @param elem the element at the root of the panel
+ */
+ private HTMLPanel(Element elem) {
+ setElement(elem);
+ }
+
/**
* Adds a child widget to the panel.
*
diff --git a/user/test/com/google/gwt/user/client/ui/ElementWrappingTest.java b/user/test/com/google/gwt/user/client/ui/ElementWrappingTest.java
index 27a8b50..683834b 100644
--- a/user/test/com/google/gwt/user/client/ui/ElementWrappingTest.java
+++ b/user/test/com/google/gwt/user/client/ui/ElementWrappingTest.java
@@ -151,6 +151,18 @@
}
/**
+ * Tests {@link HTMLPanel#wrap(Element)}.
+ */
+ public void testHTMLPanel() {
+ ensureDiv().setInnerHTML("<div id='foo'>my<div id='bar'>HTML</div></div>");
+ Element bar = Document.get().getElementById("bar");
+ HTMLPanel html = HTMLPanel.wrap(Document.get().getElementById("foo"));
+
+ assertExistsAndAttached(html);
+ assertTrue(html.getElement().isOrHasChild(bar));
+ }
+
+ /**
* Tests {@link Image#wrap(Element)}.
*/
public void testImage() {