X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.core%2Fsrc%2Forg%2Fargeo%2Fapp%2Fux%2Fjs%2FJsClient.java;h=2503cf05e482a06eb0bfb14a8feaf0ce21986cbf;hb=6e13b9416a5fd1f5477eb7233f86d3eacbb88c55;hp=b7fc724d4d0a3b46a748f836506d9db5da1967c5;hpb=59da7271e876ca8a429beb86b67e7350eef1e1ca;p=gpl%2Fargeo-suite.git diff --git a/org.argeo.app.core/src/org/argeo/app/ux/js/JsClient.java b/org.argeo.app.core/src/org/argeo/app/ux/js/JsClient.java index b7fc724..2503cf0 100644 --- a/org.argeo.app.core/src/org/argeo/app/ux/js/JsClient.java +++ b/org.argeo.app.core/src/org/argeo/app/ux/js/JsClient.java @@ -4,6 +4,7 @@ import java.util.Arrays; import java.util.Locale; import java.util.Map; import java.util.StringJoiner; +import java.util.concurrent.CompletionStage; import java.util.function.Function; /** @@ -43,7 +44,13 @@ public interface JsClient { String createJsFunction(String name, Function toDo); /** Get a global variable name. */ - public String getJsVarName(String name); + String getJsVarName(String name); + + /** + * Completion stage when the client is ready (typically the page has loaded in + * the browser). + */ + CompletionStage getReadyStage(); /* * DEFAULTS @@ -57,13 +64,17 @@ public interface JsClient { execute(jsObject + '.' + methodCall, args); } + default boolean isInstanceOf(String reference, String jsClass) { + return (Boolean) evaluate("return "+getJsVarName(reference) + " instanceof " + jsClass); + } + /* * UTILITIES */ static String toJsValue(Object o) { if (o instanceof CharSequence) - return '\"' + o.toString() + '\"'; + return '\'' + o.toString() + '\''; else if (o instanceof Number) return o.toString(); else if (o instanceof Boolean) @@ -83,8 +94,10 @@ public interface JsClient { return jsObject.newJs(); else return jsObject.getJsReference(); + } else if (o instanceof JsReference jsReference) { + return jsReference.get(); } else - return '\"' + o.toString() + '\"'; + return '\'' + o.toString() + '\''; } static String toJsArgs(Object... arr) { @@ -128,4 +141,8 @@ public interface JsClient { return sj.toString(); } + static String escapeQuotes(String str) { + return str.replace("'", "\\'").replace("\"", "\\\""); + } + }