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.

Reply via email to