Makes sure the RenderablePanel inherits all attributes from the PotentialElement when realizing the Element.
Review at http://gwt-code-reviews.appspot.com/1556805
Review by: rjrjr@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10712 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/PotentialElement.java b/user/src/com/google/gwt/user/client/ui/PotentialElement.java
index 83d06d9..a3b1e96 100644
--- a/user/src/com/google/gwt/user/client/ui/PotentialElement.java
+++ b/user/src/com/google/gwt/user/client/ui/PotentialElement.java
@@ -16,9 +16,11 @@
package com.google.gwt.user.client.ui;
import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.dom.client.Element;
-import com.google.gwt.dom.builder.shared.HtmlElementBuilder;
+import com.google.gwt.dom.builder.client.DomBuilderFactory;
+import com.google.gwt.dom.builder.shared.ElementBuilder;
import com.google.gwt.dom.builder.shared.HtmlBuilderFactory;
+import com.google.gwt.dom.builder.shared.HtmlElementBuilder;
+import com.google.gwt.dom.client.Element;
/**
* EXPERIMENTAL and subject to change. Do not use this in production code.
@@ -71,6 +73,22 @@
}-*/;
/**
+ * Creates an {@link ElementBuilder} instance inheriting all attributes
+ * set for the given PotentialElement.
+ *
+ * @param potentialElement assumed to be a PotentialElement, used as basis for
+ * the builder
+ * @return a propertly configured {@link ElementBuilder} instance
+ */
+ public static ElementBuilder createDomBuilderFor(Element potentialElement) {
+ PotentialElement el = PotentialElement.as(potentialElement);
+ ElementBuilder builder = DomBuilderFactory.get().trustedCreate(
+ el.getTagName());
+ el.mergeInto(builder);
+ return builder;
+ }
+
+ /**
* Creates an {@link HtmlElementBuilder} instance inheriting all attributes
* set for the given PotentialElement.
*
@@ -78,7 +96,7 @@
* the builder
* @return a propertly configured {@link HtmlElementBuilder} instance
*/
- public static HtmlElementBuilder createBuilderFor(Element potentialElement) {
+ public static HtmlElementBuilder createHtmlBuilderFor(Element potentialElement) {
PotentialElement el = PotentialElement.as(potentialElement);
HtmlElementBuilder builder = HtmlBuilderFactory.get().trustedCreate(
el.getTagName());
@@ -164,7 +182,7 @@
* prototype. Do this by severing the __proto__ link, allowing us to iterate
* only on the fields set in this specific instance.
*/
- private native void mergeInto(HtmlElementBuilder builder) /*-{
+ private native void mergeInto(ElementBuilder builder) /*-{
var savedProto = this.__proto__;
var tagName = this.tagName;
var gwtResolve = this.__gwt_resolve;
diff --git a/user/src/com/google/gwt/user/client/ui/RenderablePanel.java b/user/src/com/google/gwt/user/client/ui/RenderablePanel.java
index 747c049..793c1c4 100644
--- a/user/src/com/google/gwt/user/client/ui/RenderablePanel.java
+++ b/user/src/com/google/gwt/user/client/ui/RenderablePanel.java
@@ -188,7 +188,7 @@
@Override
public SafeHtml render(RenderableStamper stamper) {
- HtmlElementBuilder builder = PotentialElement.createBuilderFor(getElement());
+ HtmlElementBuilder builder = PotentialElement.createHtmlBuilderFor(getElement());
stamper.stamp(builder);
builder.html(getInnerHtml()).end();
@@ -229,18 +229,8 @@
* that may have been added to the panel.
*/
private void buildAndInitDivContainer() {
- // TODO(rdcastro): Use the same technique as in render() above.
-
- // Build the div that'll container the panel's HTML.
- Element element = Document.get().createDivElement();
- element.setInnerHTML(getInnerHtml().asString());
-
- // TODO(rdcastro): Implement something like
- // element.mergeFrom(getElement());
- String styleName = getStyleName();
- if (styleName != null) {
- element.setClassName(styleName);
- }
+ Element element = PotentialElement.createDomBuilderFor(getElement())
+ .html(getInnerHtml()).finish();
setElement(element);