All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.gwt.angular.client.AngularApp Maven / Gradle / Ivy

There is a newer version: 1.1.3
Show newest version
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.EntryPoint;
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.Promise.Deferred;
import com.google.gwt.query.client.plugins.deferred.PromiseFunction;

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

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

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

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

	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() {
		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() {
				@Override
				public void onFailure(Exception reason) {
					dfd.reject(reason);
				}
	
				@Override
				public void onSuccess(Void result) {
					dfd.resolve();
				}
			}).setWindow(ScriptInjector.TOP_WINDOW).inject();				
		}
	
	
	}
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy