]> source.dussan.org Git - gwtquery.git/commitdiff
Adding a couple of methods to import html
authorManolo Carrasco <manolo@apache.org>
Wed, 28 Jan 2015 16:34:46 +0000 (17:34 +0100)
committerManolo Carrasco <manolo@apache.org>
Thu, 29 Jan 2015 10:25:58 +0000 (11:25 +0100)
gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/ajax/Ajax.java

index eb58f93decf98e1617f7c0e20973404e8e58e17c..814a58e217c38e821f4739467044b48b31959c6f 100644 (file)
@@ -29,6 +29,8 @@ import com.google.gwt.query.client.Promise;
 import com.google.gwt.query.client.builders.JsonBuilder;
 import com.google.gwt.query.client.js.JsUtils;
 import com.google.gwt.query.client.plugins.Plugin;
+import com.google.gwt.query.client.plugins.deferred.PromiseFunction;
+import com.google.gwt.user.client.Timer;
 import com.google.gwt.user.client.ui.FormPanel;
 
 /**
@@ -311,6 +313,9 @@ public class Ajax extends GQuery {
     return get(url, (IsProperties) data, null);
   }
 
+  /**
+   * @deprecated Use promises instead
+   */
   public static Promise get(String url, IsProperties data, Function onSuccess) {
     Settings s = createSettings();
     s.setUrl(url);
@@ -386,11 +391,16 @@ public class Ajax extends GQuery {
   }
 
   public static Promise loadScript(final String url, Function success) {
-    return ajax(createSettings()
-        .setUrl(url)
-        .setType("get")
-        .setDataType("loadscript")
-        .setSuccess(success));
+    GQuery script = $("script[src^='" + url + "']");
+    if (script.isEmpty()) {
+      return ajax(createSettings()
+          .setUrl(url)
+          .setType("get")
+          .setDataType("loadscript")
+          .setSuccess(success));
+    } else {
+      return Deferred().resolve().promise();
+    }
   }
 
   public static Promise post(String url, IsProperties data) {
@@ -452,4 +462,33 @@ public class Ajax extends GQuery {
     ajax(s);
     return this;
   }
+
+  public static Promise loadLink(String rel, String url) {
+    GQuery link = $("link[rel='" + rel + "'][href^='" + url + "']");
+    if (link.isEmpty()) {
+      return new PromiseFunction() {
+        public void f(Deferred dfd) {
+          GQuery link = $("<link rel='" + rel + "' href='" + url + "'/>");
+          link.on("load", new Function() {
+            public void f() {
+              // load event is fired before the imported stuff has actually
+              // being ready, we delay it to be sure it is ready.
+              new Timer() {
+                public void run() {
+                  dfd.resolve();
+                }
+              }.schedule(100);
+            }
+          });
+          $(document.getHead()).append(link);
+        }
+      };
+    } else {
+      return Deferred().resolve().promise();
+    }
+  }
+
+  public static Promise importHtml(String url) {
+    return loadLink("import", url);
+  }
 }