
de.knightsoftnet.mtwidgets.client.ui.widget.resourceloader.JQueryResources Maven / Gradle / Ivy
package de.knightsoftnet.mtwidgets.client.ui.widget.resourceloader;
import com.google.gwt.core.client.GWT;
import elemental2.dom.DomGlobal;
import elemental2.dom.Element;
import elemental2.dom.Event;
import elemental2.dom.EventListener;
import elemental2.dom.HTMLScriptElement;
import elemental2.dom.NodeList;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
public class JQueryResources {
private static final String JQUERY_URL =
((JsJQueryResourceDefinitionInterface) GWT.create(JsJQueryResourceDefinitionInterface.class))
.getJQeryPath();
private static final String JQUERY_MIGRATE_URL =
((JsJQueryResourceDefinitionInterface) GWT.create(JsJQueryResourceDefinitionInterface.class))
.getJQeryMigratePath();
private static boolean initializationStarted = false;
private static Event rememberEvent;
private static List eventLisenerQueue = new ArrayList<>();
/**
* async load of resources.
*
* @param function function to call on load
*/
public static void whenReady(final EventListener function) {
JQueryResources.eventLisenerQueue.add(function);
if (JQueryResources.initializationStarted || JQueryResources.isInHeader()) {
if (JQueryResources.isInitialized()) {
JQueryResources.eventLisenerQueue
.forEach(action -> action.handleEvent(JQueryResources.rememberEvent));
JQueryResources.eventLisenerQueue.clear();
}
return;
}
JQueryResources.initializationStarted = true;
final HTMLScriptElement jqueryScript =
(HTMLScriptElement) DomGlobal.document.createElement(JsResources.TAG_TYPE);
jqueryScript.src = JQUERY_URL;
jqueryScript.type = JsResources.SCRIPT_TYPE;
DomGlobal.document.head.appendChild(jqueryScript);
jqueryScript.addEventListener("load", event -> {
final HTMLScriptElement jqueryMigrateScript =
(HTMLScriptElement) DomGlobal.document.createElement(JsResources.TAG_TYPE);
jqueryMigrateScript.src = JQUERY_MIGRATE_URL;
jqueryMigrateScript.type = JsResources.SCRIPT_TYPE;
DomGlobal.document.head.appendChild(jqueryMigrateScript);
jqueryMigrateScript.addEventListener("load", secondEvent -> {
JQueryResources.eventLisenerQueue.forEach(action -> action.handleEvent(secondEvent));
JQueryResources.eventLisenerQueue.clear();
JQueryResources.rememberEvent = secondEvent;
});
});
}
/**
* check if script is available and initialized.
*
* @return true if it exists
*/
public static boolean isInitialized() {
final boolean loaded = JQueryResources.rememberEvent != null || StringUtils.isEmpty(JQUERY_URL);
return loaded || JQueryResources.isInHeader();
}
/**
* check if script is already in the header.
*
* @return true if it exists
*/
public static boolean isInHeader() {
boolean jqueryInHeader = false;
boolean jqueryMigrateInHeader = false;
final NodeList linkList =
DomGlobal.document.head.getElementsByTagName(JsResources.TAG_TYPE);
for (final Element element : linkList.asList()) {
jqueryInHeader |=
StringUtils.contains(((HTMLScriptElement) element).src, JQueryResources.JQUERY_URL);
jqueryMigrateInHeader |= StringUtils.contains(((HTMLScriptElement) element).src,
JQueryResources.JQUERY_MIGRATE_URL);
}
return jqueryInHeader && jqueryMigrateInHeader;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy