package org.geogebra.web.resources; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.HeadElement; import com.google.gwt.dom.client.ScriptElement; import com.google.gwt.resources.client.TextResource; import com.google.gwt.user.client.DOM; /** * Injects scripts into parent document * */ public class JavaScriptInjector { private static HeadElement head; /** * @param scriptResource * javascript file */ public static void inject(TextResource scriptResource) { if (DOM.getElementById(scriptResource.getName()) == null) { ScriptElement element = createScriptElement(scriptResource .getName()); element.setText(scriptResource.getText()); getHead().appendChild(element); } } private static ScriptElement createScriptElement(String id) { ScriptElement script = Document.get().createScriptElement(); script.setAttribute("language", "javascript"); script.setAttribute("id", id); script.setClassName(StyleInjector.CLASSNAME); return script; } private static HeadElement getHead() { if (JavaScriptInjector.head == null) { Element element = Document.get().getElementsByTagName("head") .getItem(0); assert element != null : "HTML Head element required"; JavaScriptInjector.head = HeadElement.as(element); } return JavaScriptInjector.head; } /** * @param js * to inject * @return wheter the js injected already, or not. This check is made during * injection, but can be useful. */ public static boolean injected(TextResource js) { return DOM.getElementById(js.getName()) != null; } }