On Friday, September 9, 2016 at 8:32:08 PM UTC+2, Zufar Fakhurtdinov wrote:
>
> Hi all. I'm trying to understand how can I effective work with jsinterop
> and browser-specific api.
> For example Fullscreen api is mostly work in latest browsers, but methods
> are prefixed.
>
> Before jsinterop I was write something like this:
>
>
> public static native void leaveFullscreen() /*-{
> if ($doc.cancelFullscreen) {
> $doc.cancelFullscreen();
> } else if ($doc.mozCancelFullScreen) {
> $doc.mozCancelFullScreen();
> } else if ($doc.webkitCancelFullScreen) {
> $doc.webkitCancelFullScreen();
> }
>
> }-*/;
>
> What should I do now? Add mozCancelFullScreen, webkitCancelFullScreen
> methods to my jsinteropped Document interface? And then add static jsni
> method
> boolean exists(Object a)/*-{return a;}-*/; and add java method with "if
> (exists(..))" chain.
> It looks very verbose and inefficiently.
>
Have a look at https://github.com/gwtproject/gwt/issues/9327
I'd do it like:
@JsOverlay
public void exitFullScreen() {
if (getExitFullScreen() != null) {
nativeExitFullScreen();
} else if (getMozCancelFullScreen() != null) {
mozCancelFullScreen();
} else if (getWebkitExitFullscreen() != null) {
webkitExitFullscreen();
} else if (getMsExitFullscreen() != null) {
msExitFullscreen();
} else {
throw new UnsupportedOperationException();
}
}
@JsMethod(name = "exitFullScreen") private native void
nativeExitFullScreen();
@JsProperty(name = "exitFullScreen") private native Object
getExitFullScreen();
@JsMethod private native void webkitExitFullscreen();
@JsProperty(name = "webkitExitFullscreen") private native Object
getWebkitExitFullscreen();
@JsMethod private native void mozCancelFullScreen();
@JsProperty(name = "mozCancelFullScreen") private native Object
getMozCancelFullScreen();
@JsMethod private native void msExitFullscreen();
@JsProperty(name = "msExitFullscreen") private native Object
getMsExitFullscreen();
It's a bit verbose in the method declarations (but the idea of JsInterop is
that this could be somehow
generated; https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API
has the info in wiki format, there probably is a machine-readable format
somewhere, from Closure externs
<https://github.com/google/closure-compiler/blob/cf3c1f5ba45d3154c80ce5eecbec45549e8641f6/externs/browser/html5.js#L3125-L3213>
or DefinitelyTyped; an equivalence table like in the MDN wiki could even
allow generating that @JsOverlay method),
but the if-cascade is otherwise the same as the original JSNI method.
--
You received this message because you are subscribed to the Google Groups "GWT
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.