]> source.dussan.org Git - gwtquery.git/commitdiff
Append temporary dettached elements to the document so as we can correctly compute...
authorManolo Carrasco <manolo@apache.org>
Fri, 12 Oct 2012 18:28:47 +0000 (20:28 +0200)
committerManolo Carrasco <manolo@apache.org>
Fri, 12 Oct 2012 18:28:47 +0000 (20:28 +0200)
gwtquery-core/src/main/java/com/google/gwt/query/client/impl/DocumentStyleImpl.java
gwtquery-core/src/main/java/com/google/gwt/query/client/js/JsUtils.java

index 39e8ee0992bccb3ff5254a96ecd46c52b86da2bd..6fcfca3147e2f13e1a0017b8ec3f7fba62f02666 100644 (file)
@@ -93,16 +93,29 @@ public class DocumentStyleImpl {
     name = fixPropertyName(name);
     //value defined in the element style
     String ret = elem.getStyle().getProperty(name);
-
-    if (force && sizeRegex.test(name)) {
-      return getVisibleSize(elem, name) + "px";
-    }
-    if (force && "opacity".equalsIgnoreCase(name)) {
-      return String.valueOf(getOpacity(elem));
-    }
+    
     if (force) {
-      ret = getComputedStyle(elem, JsUtils.hyphenize(name), name, null);
+      // If the element is dettached to the DOM we attach temporary to it
+      Element parent = null;
+      if (JsUtils.isDettached(elem)) {
+        parent = elem.getParentElement();
+        Document.get().getBody().appendChild(elem);
+      }
+      
+      if (sizeRegex.test(name)) {
+        ret = getVisibleSize(elem, name) + "px";
+      } else if ("opacity".equalsIgnoreCase(name)) {
+        ret = String.valueOf(getOpacity(elem));
+      } else {
+        ret = getComputedStyle(elem, JsUtils.hyphenize(name), name, null);
+      }
+      
+      // If the element had a parent previously to be attached, append to it. 
+      if (parent != null) {
+        parent.appendChild(elem);
+      }
     }
+
     return ret == null ? "" : ret;
   }
   
index e9649b192ef6106b6c2955b787cf2927848384b4..9d384a19270b908f0f1556f60e4ad02802253c98 100644 (file)
@@ -274,6 +274,15 @@ public class JsUtils {
                return e.defaultPrevented || e.returnValue === false || e.getPreventDefault
                                && e.getPreventDefault() ? true : false;
   }-*/;
+  
+  /**
+   * Return whether a node is dettached to the dom
+   */
+  public static native boolean isDettached(Node n) /*-{
+    while (n.parentNode) 
+      n = n.parentNode;
+    return !n.body;
+  }-*/;
 
   /**
    * Check is a javascript object can be cast to an Element