X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.core%2Fsrc%2Forg%2Fargeo%2Fapp%2Fux%2Fjs%2FJsClient.java;h=060f1200856c94bb666d8d0c02562b7ee9764210;hb=b384a9cbe93b83b3aa94fe46cf2ff0a929f0332c;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..060f120 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; /** @@ -45,6 +46,12 @@ public interface JsClient { /** Get a global variable name. */ public 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(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("\"", "\\\""); + } + }