X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.core%2Fsrc%2Forg%2Fargeo%2Fapp%2Fux%2Fjs%2FJsClient.java;h=708daff143af5191d6fc76c5b5e36158a2ebcd52;hb=32e6fcd7f2607415b3e6be7295756bb0b645ca7a;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..708daff 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,22 @@ public interface JsClient { execute(jsObject + '.' + methodCall, args); } + default boolean isInstanceOf(String reference, String jsClass) { + try { + return (Boolean) evaluate("return " + getJsVarName(reference) + " instanceof " + jsClass); + } catch (Exception e) { + // TODO better understand why instanceof is often failing with SWT Browser + return false; + } + } + /* * 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 +99,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 +146,8 @@ public interface JsClient { return sj.toString(); } + static String escapeQuotes(String str) { + return str.replace("'", "\\'").replace("\"", "\\\""); + } + }