Package com.google.gwt.angular.client

Source Code of com.google.gwt.angular.client.AngularApp$ScriptLoader

package com.google.gwt.angular.client;

import com.google.gwt.angular.client.impl.AngularModuleBase;
import com.google.gwt.core.client.Callback;
import com.google.gwt.core.client.ScriptInjector;
import com.google.gwt.query.client.Function;
import com.google.gwt.query.client.Promise;
import com.google.gwt.query.client.plugins.deferred.PromiseFunction;

import elemental.client.Browser;
import elemental.js.util.JsArrayOfString;

/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public abstract class AngularApp extends AngularEntryPoint {

  private static final String ANGULAR_MIN_JS_URL = "https://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular.min.js";

  /**
   * This is the entry point method.
   */
  public final void onModuleLoad() {
    loadAngular();
  }

  private void loadAngular() {
    if(!isInjected()) {
      Promise loadAngular = new ScriptLoader();

      loadAngular.done(new Function() {
        public void f() {
          Browser.getWindow().getConsole().info("loading angularjs succeeded.");
          injectModules();         
        }
      });

      loadAngular.fail(new Function() {
        public void f() {
          Browser.getWindow().getConsole().warn("loading angularjs failed.");
        }
      });

    } else {
      Browser.getWindow().getConsole().info("angularjs already loaded.");
      injectModules();
    }
  }

  private void injectModules() {
    super.onModuleLoad();
    final JsArrayOfString moduleNames = JsArrayOfString.create();
    final AngularModule[] modules = main();
    for (int i = 0; i < modules.length; i++) {
      moduleNames.push(((AngularModuleBase) modules[i]).moduleName());
    }
    bootstrap(moduleNames);
  }

  private native final boolean isInjected() /*-{
      if (!(typeof $wnd.angular === "undefined") && !(null===$wnd.angular)) {
          return true;
      }
        return false;
  }-*/;

  private native void bootstrap(JsArrayOfString moduleNames/*-{
      $wnd.angular.bootstrap($doc, moduleNames);
  }-*/;

  /**
   * Override this and invoke GWT.create() on your modules.
   */
 
  private final static class ScriptLoader extends PromiseFunction {
 
    @Override
    public void f(final Deferred dfd) {
      ScriptInjector
      .fromUrl(ANGULAR_MIN_JS_URL)
      .setCallback(new Callback<Void, Exception>() {
        @Override
        public void onFailure(Exception reason) {
          dfd.reject(reason);
        }
 
        @Override
        public void onSuccess(Void result) {
          dfd.resolve();
        }
      }).setWindow(ScriptInjector.TOP_WINDOW).inject();       
    }
 
 
  }
}
TOP

Related Classes of com.google.gwt.angular.client.AngularApp$ScriptLoader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.