RxGWT: Reactive Extensions for GWT
GWT specific bindings for RxJava (requires RxJava GWT).
This module adds the minimum classes to RxJava that make writing reactive components in GWT applications easy and hassle-free. More specifically, it provides adapters for all available events and various operators like bufferedFinally, debounceFinally, etc.
GWT module system requires all classes used by a module to be included as dependant modules. So to not to force to load all optional modules various independent small modules are exposed by RxGWT.
- RxGWT.gwt.xml - includes common utils, usually not included explicit as it is included by all other modules
- RxUser.gwt.xml - includes GWT user dependant utils like RxHandlers and RxEvents
- RxElemental.gwt.xml - legacy GWT elemental utils
- RxElemental2.gwt.xml - new generation GWT elemental2 utils
- RxElemento.gwt.xml - elemento typed events on top of new generation GWT elemental2 utils
Download
Releases are deployed to the Central Repository.
Snapshots of the development version are available in Sonatype's snapshots
repository.
Example
Observable<List<double[]>> mouseDiff$ = mouseMove(canvas)
.map(e -> canvasPosition(canvas, e))
.buffer(3, 1);
Observable<List<double[]>> mouseDrag$ = mouseDown(canvas).compose(log("mouse down"))
.flatMap(e -> mouseDiff$.takeUntil(mouseUp(canvas).compose(log("mouse up"))));
Observable<List<double[]>> touchDiff$ = touchMove(canvas)
.map(e -> e.getTouches().get(0))
.map(e -> canvasPosition(canvas, e))
.buffer(2, 1);
Observable<List<double[]>> touchDrag$ = touchStart(canvas).compose(log("touch down"))
.flatMap(e -> touchDiff$.takeUntil(touchEnd(canvas).compose(log("touch up"))));
Observable<Object> down$ = merge(mouseDown(canvas), touchStart(canvas));
Observable<List<double[]>> drag$ = merge(mouseDrag$, touchDrag$);
Observable<String> paint$ = keyPress(canvas, '1').map(e -> "paint").startWith("default");
Observable<String> erase$ = keyPress(canvas, '2').map(e -> "erase");
All the mouseMove
, mouseDown
, touchMove
, touchStart
, touchEnd
and keyPress
static methods are exposed by the
RxGWT API. To find all of them just explore RxGwt,
or RxHandlers and RxEvents.
RxEvents and RxHandlers are auto-generated
using all classes in gwt-user
extending from Events
and HasValue respectively.
You can see this complete code example here RxCanvas, or other interesting one in RxSnake.