]> source.dussan.org Git - gwtquery.git/commitdiff
lazy initialization for some static fields
authorJulien Dramaix <julien.dramaix@gmail.com>
Fri, 30 Sep 2011 21:19:09 +0000 (21:19 +0000)
committerJulien Dramaix <julien.dramaix@gmail.com>
Fri, 30 Sep 2011 21:19:09 +0000 (21:19 +0000)
gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java

index f754f4aca44aad7016fd552f2980cfc807102706..f7768bb69787d1de162709abd582f45659317a01 100644 (file)
@@ -110,7 +110,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
   /**\r
    * Implementation class to modify attributes.\r
    */\r
-  protected static AttributeImpl attributeImpl = GWT.create(AttributeImpl.class);\r
+  protected static AttributeImpl attributeImpl;\r
 \r
   /**\r
    * The body element in the current page.\r
@@ -158,7 +158,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
   /**\r
    * Implementation class used for style manipulations.\r
    */\r
-  protected static DocumentStyleImpl styleImpl = GWT.create(DocumentStyleImpl.class);\r
+  private static DocumentStyleImpl styleImpl;\r
 \r
   private static JsRegexp tagNameRegex = new JsRegexp("<([\\w:]+)");\r
 \r
@@ -174,28 +174,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
   \r
   private static Element windowData = null;\r
   \r
-  private static final JsNamedArray<TagWrapper> wrapperMap;\r
-\r
-  static {\r
-    TagWrapper tableWrapper = new TagWrapper(1, "<table>", "</table>");\r
-    TagWrapper selectWrapper =  new TagWrapper(1, "<select multiple=\"multiple\">", "</select>");\r
-    TagWrapper trWrapper = new TagWrapper(3, "<table><tbody><tr>", "</tr></tbody></table>");\r
-    \r
-    wrapperMap = JsNamedArray.create();\r
-    wrapperMap.put("option", selectWrapper);\r
-    wrapperMap.put("optgroup", selectWrapper);\r
-    wrapperMap.put("legend", new TagWrapper(1, "<fieldset>", "</fieldset>") );\r
-    wrapperMap.put("thead", tableWrapper);\r
-    wrapperMap.put("tbody", tableWrapper);\r
-    wrapperMap.put("tfoot", tableWrapper);\r
-    wrapperMap.put("colgroup", tableWrapper);\r
-    wrapperMap.put("caption", tableWrapper);\r
-    wrapperMap.put("tr",  new TagWrapper(2, "<table><tbody>", "</tbody></table>"));\r
-    wrapperMap.put("td", trWrapper);\r
-    wrapperMap.put("th", trWrapper); \r
-    wrapperMap.put("col",  new TagWrapper(2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"));\r
-    wrapperMap.put("area",  new TagWrapper(1, "<map>", "</map>"));\r
-  }\r
+  private static JsNamedArray<TagWrapper> wrapperMap;\r
   \r
   /**\r
    * Create an empty GQuery object.\r
@@ -388,6 +367,10 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
       throw new  RuntimeException("HTML snippet doesn't contain any tag");\r
     }\r
     \r
+    if (wrapperMap == null){\r
+      initWrapperMap();\r
+    }\r
+    \r
     TagWrapper wrapper = wrapperMap.get(tag.toLowerCase());\r
     \r
     if (wrapper == null){\r
@@ -428,6 +411,20 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
     return name != null ? d.get(name) : id;\r
   }\r
   \r
+  protected static DocumentStyleImpl getStyleImpl(){\r
+    if (styleImpl == null){\r
+      styleImpl = GWT.create(DocumentStyleImpl.class);\r
+    }\r
+    return styleImpl;\r
+  }\r
+  \r
+  private static AttributeImpl getAttributeImpl(){\r
+    if (attributeImpl == null){\r
+      attributeImpl = GWT.create(AttributeImpl.class);\r
+    }\r
+    return attributeImpl;\r
+  }\r
+  \r
   private static native void emptyDocument(Document d) /*-{\r
                d.open();\r
                d.write("<head/><body/>");\r
@@ -473,6 +470,29 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
     return $(cleanHtmlString(html, doc));\r
   }\r
   \r
+  private static void initWrapperMap(){\r
+    \r
+    TagWrapper tableWrapper = new TagWrapper(1, "<table>", "</table>");\r
+    TagWrapper selectWrapper =  new TagWrapper(1, "<select multiple=\"multiple\">", "</select>");\r
+    TagWrapper trWrapper = new TagWrapper(3, "<table><tbody><tr>", "</tr></tbody></table>");\r
+    \r
+    wrapperMap = JsNamedArray.create();\r
+    wrapperMap.put("option", selectWrapper);\r
+    wrapperMap.put("optgroup", selectWrapper);\r
+    wrapperMap.put("legend", new TagWrapper(1, "<fieldset>", "</fieldset>") );\r
+    wrapperMap.put("thead", tableWrapper);\r
+    wrapperMap.put("tbody", tableWrapper);\r
+    wrapperMap.put("tfoot", tableWrapper);\r
+    wrapperMap.put("colgroup", tableWrapper);\r
+    wrapperMap.put("caption", tableWrapper);\r
+    wrapperMap.put("tr",  new TagWrapper(2, "<table><tbody>", "</tbody></table>"));\r
+    wrapperMap.put("td", trWrapper);\r
+    wrapperMap.put("th", trWrapper); \r
+    wrapperMap.put("col",  new TagWrapper(2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"));\r
+    wrapperMap.put("area",  new TagWrapper(1, "<map>", "</map>"));\r
+  \r
+  }\r
+  \r
   protected static String[] jsArrayToString(JsArrayString array) {\r
     if (GWT.isScript()) {\r
       return jsArrayToString0(array);\r
@@ -511,16 +531,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
                if (n)\r
                        n.scrollIntoView()\r
   }-*/;\r
-  \r
-  private static native void setElementAttribute(Element e, String key, String value) /*-{\r
-    if (value == null)\r
-      e.removeAttribute(key);\r
-    else  \r
-      e.setAttribute(key, value);\r
-    e[key] = value;\r
-  }-*/;\r
-  \r
-  \r
+    \r
   private static native void setElementValue(Element e, String value) /*-{\r
     e.value = value;\r
   }-*/;\r
@@ -965,7 +976,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    */\r
   public GQuery attr(String key, Object value) {\r
     assert key != null : "key cannot be null";\r
-    attributeImpl.setAttribute(this, key, value);\r
+    getAttributeImpl().setAttribute(this, key, value);\r
     return this;\r
   }\r
 \r
@@ -1380,7 +1391,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    * parameter force=true.\r
    */\r
   public String css(String name, boolean force) {\r
-    return isEmpty() ? "" : styleImpl.curCSS(get(0), name, force);\r
+    return isEmpty() ? "" : getStyleImpl().curCSS(get(0), name, force);\r
   }\r
 \r
   /**\r
@@ -1389,7 +1400,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    */\r
   public GQuery css(String prop, String val) {\r
     for (Element e : elements) {\r
-      styleImpl.setStyleProperty(e, prop, val);\r
+      getStyleImpl().setStyleProperty(e, prop, val);\r
     }\r
     return this;\r
   }\r
@@ -1424,7 +1435,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    * When true returns the real computed value.\r
    */\r
   public double cur(String prop, boolean force) {\r
-    return isEmpty() ? 0 : styleImpl.cur(get(0), prop, force);\r
+    return isEmpty() ? 0 : getStyleImpl().cur(get(0), prop, force);\r
   }\r
 \r
   /**\r
@@ -2188,7 +2199,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
       String currentDisplay = e.getStyle().getDisplay();\r
       Object old = data(e, "oldDisplay", null);\r
       if (old == null && !"none".equals(currentDisplay)) {\r
-        data(e, "oldDisplay", styleImpl.curCSS(e, "display", false));\r
+        data(e, "oldDisplay", getStyleImpl().curCSS(e, "display", false));\r
       }\r
     }\r
     \r
@@ -2362,7 +2373,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    * Return true if the first element is visible.isVisible\r
    */\r
   public boolean isVisible() {\r
-    return isEmpty() ? false : styleImpl.isVisible(get(0));\r
+    return isEmpty() ? false : getStyleImpl().isVisible(get(0));\r
   }\r
 \r
   /**\r
@@ -2755,7 +2766,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
     while (offParent != null\r
         && !"body".equalsIgnoreCase(offParent.getTagName())\r
         && !"html".equalsIgnoreCase(offParent.getTagName())\r
-        && "static".equals(styleImpl.curCSS(offParent, "position", true))) {\r
+        && "static".equals(getStyleImpl().curCSS(offParent, "position", true))) {\r
       offParent = offParent.getOffsetParent();\r
     }\r
     return new GQuery(offParent);\r
@@ -2909,22 +2920,22 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
     }\r
 \r
     // Subtract element margins\r
-    int topMargin = (int) styleImpl.cur(element, "marginTop", true);\r
-    // TODO: move this check to styleImpl\r
+    int topMargin = (int) getStyleImpl().cur(element, "marginTop", true);\r
+    // TODO: move this check to getStyleImpl()\r
     // When margin-left = auto, Safari and chrome return a value while IE and\r
     // Firefox return 0\r
     // force the margin-left to 0 if margin-left = auto.\r
     int leftMargin = 0;\r
     if (!"auto".equals(element.getStyle().getMarginLeft())) {\r
-      leftMargin = (int) styleImpl.cur(element, "marginLeft", true);\r
+      leftMargin = (int) getStyleImpl().cur(element, "marginLeft", true);\r
     }\r
 \r
     offset = offset.add(-leftMargin, -topMargin);\r
 \r
     // Add offsetParent borders\r
-    int parentOffsetBorderTop = (int) styleImpl.cur(offsetParent,\r
+    int parentOffsetBorderTop = (int) getStyleImpl().cur(offsetParent,\r
         "borderTopWidth", true);\r
-    int parentOffsetBorderLeft = (int) styleImpl.cur(offsetParent,\r
+    int parentOffsetBorderLeft = (int) getStyleImpl().cur(offsetParent,\r
         "borderLeftWidth", true);\r
     parentOffset = parentOffset.add(parentOffsetBorderLeft,\r
         parentOffsetBorderTop);\r
@@ -3247,7 +3258,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    * Remove the named attribute from every element in the matched set.\r
    */\r
   public GQuery removeAttr(String key) {\r
-    attributeImpl.removeAttribute(this, key);\r
+    getAttributeImpl().removeAttribute(this, key);\r
     return this;\r
   }\r
 \r
@@ -3420,7 +3431,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
   public void restoreCssAttrs(String... cssProps) {\r
     for (Element e : elements) {\r
       for (String a : cssProps) {\r
-        styleImpl.setStyleProperty(e, a, (String) data(e, OLD_DATA_PREFIX + a,\r
+        getStyleImpl().setStyleProperty(e, a, (String) data(e, OLD_DATA_PREFIX + a,\r
             null));\r
       }\r
     }\r
@@ -3432,7 +3443,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
   public void saveCssAttrs(String... cssProps) {\r
     for (Element e : elements) {\r
       for (String a : cssProps) {\r
-        data(OLD_DATA_PREFIX + a, styleImpl.curCSS(e, a, false));\r
+        data(OLD_DATA_PREFIX + a, getStyleImpl().curCSS(e, a, false));\r
       }\r
     }\r
   }\r
@@ -3602,14 +3613,14 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
       \r
       //reset the display\r
       if (oldDisplay == null && "none".equals(currentDisplay)){\r
-        styleImpl.setStyleProperty(e, "display", "");\r
+        getStyleImpl().setStyleProperty(e, "display", "");\r
         currentDisplay = "";\r
       }\r
       \r
       //check if the stylesheet impose display: none. If it is the case, determine \r
       //the default display for the tag and store it at the element level\r
-      if ("".equals(currentDisplay) && !styleImpl.isVisible(e)){\r
-        data(e, "oldDisplay", styleImpl.defaultDisplay(e.getNodeName()));\r
+      if ("".equals(currentDisplay) && !getStyleImpl().isVisible(e)){\r
+        data(e, "oldDisplay", getStyleImpl().defaultDisplay(e.getNodeName()));\r
       }\r
     }\r
     \r
@@ -3619,7 +3630,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
     for (Element e : elements) {\r
       String currentDisplay = e.getStyle().getDisplay();\r
       if ("".equals(currentDisplay) || "none".equals(currentDisplay)){\r
-        styleImpl.setStyleProperty(e, "display", JsUtils.or((String) data(e,\r
+        getStyleImpl().setStyleProperty(e, "display", JsUtils.or((String) data(e,\r
             "oldDisplay", null), ""));\r
       }\r
     }\r
@@ -3788,7 +3799,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    */\r
   public GQuery toggle() {\r
     for (Element e : elements) {\r
-      if (styleImpl.isVisible(e)) {\r
+      if (getStyleImpl().isVisible(e)) {\r
         $(e).hide();\r
       } else {\r
         $(e).show();\r