angular-cesium
Version:
Angular library for working with Cesium.
43 lines • 9.03 kB
JavaScript
import { merge, of as observableOf } from 'rxjs';
import { delay, filter, mergeMap, publish, takeUntil, tap } from 'rxjs/operators';
import { CesiumPureEventObserver } from './cesium-pure-event-observer';
import { CesiumEvent } from '../consts/cesium-event.enum';
export class CesiumLongPressObserver extends CesiumPureEventObserver {
constructor(event, modifier, eventFactory) {
super(event, modifier);
this.event = event;
this.modifier = modifier;
this.eventFactory = eventFactory;
}
init() {
let startEvent;
let stopEvent;
if (this.event === CesiumEvent.LONG_LEFT_PRESS) {
startEvent = CesiumEvent.LEFT_DOWN;
stopEvent = CesiumEvent.LEFT_UP;
}
else if (this.event === CesiumEvent.LONG_RIGHT_PRESS) {
startEvent = CesiumEvent.RIGHT_DOWN;
stopEvent = CesiumEvent.RIGHT_UP;
}
else if (this.event === CesiumEvent.LONG_MIDDLE_PRESS) {
startEvent = CesiumEvent.MIDDLE_DOWN;
stopEvent = CesiumEvent.MIDDLE_UP;
}
// Save start event position
let startEventPosition = null;
const startEventObservable = this.eventFactory.get(startEvent, this.modifier)
.pipe(tap((movement) => (startEventPosition = movement.endPosition)));
// Prevent drag mistaken for long press by observing mouse move far from start event position
const mouseMoveEventObservable = this.eventFactory.get(CesiumEvent.MOUSE_MOVE)
.pipe(filter((movement) => Math.abs(movement.endPosition.x - startEventPosition.x) > CesiumLongPressObserver.LONG_PRESS_EVENTS_MIN_DISTANCE_PX ||
Math.abs(movement.endPosition.y - startEventPosition.y) > CesiumLongPressObserver.LONG_PRESS_EVENTS_MIN_DISTANCE_PX));
const stopEventObservable = merge(this.eventFactory.get(stopEvent, this.modifier), mouseMoveEventObservable);
// publish for preventing side effect
const longPressObservable = publish()(startEventObservable.pipe(mergeMap((e) => observableOf(e).pipe(delay(CesiumLongPressObserver.LONG_PRESS_EVENTS_DURATION), takeUntil(stopEventObservable)))));
return longPressObservable;
}
}
CesiumLongPressObserver.LONG_PRESS_EVENTS_DURATION = 250;
CesiumLongPressObserver.LONG_PRESS_EVENTS_MIN_DISTANCE_PX = 10;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VzaXVtLWxvbmctcHJlc3Mtb2JzZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNlc2l1bS9zcmMvbGliL2FuZ3VsYXItY2VzaXVtL3NlcnZpY2VzL21hcC1ldmVudHMtbWFuYW5nZXIvZXZlbnQtb2JzZXJ2ZXJzL2Nlc2l1bS1sb25nLXByZXNzLW9ic2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBeUIsS0FBSyxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSzFELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSx1QkFBdUI7SUFJbEUsWUFBc0IsS0FBa0IsRUFDbEIsUUFBNkIsRUFDL0IsWUFBZ0M7UUFDbEQsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUhILFVBQUssR0FBTCxLQUFLLENBQWE7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7UUFDL0IsaUJBQVksR0FBWixZQUFZLENBQW9CO0lBRXBELENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxVQUF1QixDQUFDO1FBQzVCLElBQUksU0FBc0IsQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLGVBQWUsRUFBRTtZQUM5QyxVQUFVLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztZQUNuQyxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztTQUNqQzthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7WUFDdEQsVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUM7WUFDcEMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7U0FDbEM7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLGlCQUFpQixFQUFFO1lBQ3ZELFVBQVUsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO1lBQ3JDLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO1NBQ25DO1FBRUQsNEJBQTRCO1FBQzVCLElBQUksa0JBQWtCLEdBQWUsSUFBSSxDQUFDO1FBQzFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDMUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhFLDZGQUE2RjtRQUM3RixNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7YUFDM0UsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEdBQUcsdUJBQXVCLENBQUMsaUNBQWlDO1lBQ25ILElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEdBQUcsdUJBQXVCLENBQUMsaUNBQWlDLENBQ3BILENBQ0YsQ0FBQztRQUVKLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUMvQyx3QkFBd0IsQ0FDekIsQ0FBQztRQUVGLHFDQUFxQztRQUNyQyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FDN0QsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsMEJBQTBCLENBQUMsRUFDekQsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUNuQyxDQUFDLENBQUM7UUFDSCxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7O0FBbERhLGtEQUEwQixHQUFHLEdBQUcsQ0FBQztBQUNqQyx5REFBaUMsR0FBRyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25uZWN0YWJsZU9ic2VydmFibGUsIG1lcmdlLCBvZiBhcyBvYnNlcnZhYmxlT2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVsYXksIGZpbHRlciwgbWVyZ2VNYXAsIHB1Ymxpc2gsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDZXNpdW1QdXJlRXZlbnRPYnNlcnZlciB9IGZyb20gJy4vY2VzaXVtLXB1cmUtZXZlbnQtb2JzZXJ2ZXInO1xyXG5pbXBvcnQgeyBDZXNpdW1FdmVudCB9IGZyb20gJy4uL2NvbnN0cy9jZXNpdW0tZXZlbnQuZW51bSc7XHJcbmltcG9ydCB7IENlc2l1bUV2ZW50TW9kaWZpZXIgfSBmcm9tICcuLi9jb25zdHMvY2VzaXVtLWV2ZW50LW1vZGlmaWVyLmVudW0nO1xyXG5pbXBvcnQgeyBDZXNpdW1FdmVudEJ1aWxkZXIgfSBmcm9tICcuLi9jZXNpdW0tZXZlbnQtYnVpbGRlcic7XHJcbmltcG9ydCB7IENhcnRlc2lhbjIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY2FydGVzaWFuMic7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2VzaXVtTG9uZ1ByZXNzT2JzZXJ2ZXIgZXh0ZW5kcyBDZXNpdW1QdXJlRXZlbnRPYnNlcnZlciB7XHJcbiAgcHVibGljIHN0YXRpYyBMT05HX1BSRVNTX0VWRU5UU19EVVJBVElPTiA9IDI1MDtcclxuICBwdWJsaWMgc3RhdGljIExPTkdfUFJFU1NfRVZFTlRTX01JTl9ESVNUQU5DRV9QWCA9IDEwO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZXZlbnQ6IENlc2l1bUV2ZW50LFxyXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBtb2RpZmllcjogQ2VzaXVtRXZlbnRNb2RpZmllcixcclxuICAgICAgICAgICAgICBwcml2YXRlIGV2ZW50RmFjdG9yeTogQ2VzaXVtRXZlbnRCdWlsZGVyKSB7XHJcbiAgICBzdXBlcihldmVudCwgbW9kaWZpZXIpO1xyXG4gIH1cclxuXHJcbiAgaW5pdCgpOiBDb25uZWN0YWJsZU9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgc3RhcnRFdmVudDogQ2VzaXVtRXZlbnQ7XHJcbiAgICBsZXQgc3RvcEV2ZW50OiBDZXNpdW1FdmVudDtcclxuXHJcbiAgICBpZiAodGhpcy5ldmVudCA9PT0gQ2VzaXVtRXZlbnQuTE9OR19MRUZUX1BSRVNTKSB7XHJcbiAgICAgIHN0YXJ0RXZlbnQgPSBDZXNpdW1FdmVudC5MRUZUX0RPV047XHJcbiAgICAgIHN0b3BFdmVudCA9IENlc2l1bUV2ZW50LkxFRlRfVVA7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnQgPT09IENlc2l1bUV2ZW50LkxPTkdfUklHSFRfUFJFU1MpIHtcclxuICAgICAgc3RhcnRFdmVudCA9IENlc2l1bUV2ZW50LlJJR0hUX0RPV047XHJcbiAgICAgIHN0b3BFdmVudCA9IENlc2l1bUV2ZW50LlJJR0hUX1VQO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50ID09PSBDZXNpdW1FdmVudC5MT05HX01JRERMRV9QUkVTUykge1xyXG4gICAgICBzdGFydEV2ZW50ID0gQ2VzaXVtRXZlbnQuTUlERExFX0RPV047XHJcbiAgICAgIHN0b3BFdmVudCA9IENlc2l1bUV2ZW50Lk1JRERMRV9VUDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTYXZlIHN0YXJ0IGV2ZW50IHBvc2l0aW9uXHJcbiAgICBsZXQgc3RhcnRFdmVudFBvc2l0aW9uOiBDYXJ0ZXNpYW4yID0gbnVsbDtcclxuICAgIGNvbnN0IHN0YXJ0RXZlbnRPYnNlcnZhYmxlID0gdGhpcy5ldmVudEZhY3RvcnkuZ2V0KHN0YXJ0RXZlbnQsIHRoaXMubW9kaWZpZXIpXHJcbiAgICAgIC5waXBlKHRhcCgobW92ZW1lbnQpID0+IChzdGFydEV2ZW50UG9zaXRpb24gPSBtb3ZlbWVudC5lbmRQb3NpdGlvbikpKTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IGRyYWcgbWlzdGFrZW4gZm9yIGxvbmcgcHJlc3MgYnkgb2JzZXJ2aW5nIG1vdXNlIG1vdmUgZmFyIGZyb20gc3RhcnQgZXZlbnQgcG9zaXRpb25cclxuICAgIGNvbnN0IG1vdXNlTW92ZUV2ZW50T2JzZXJ2YWJsZSA9IHRoaXMuZXZlbnRGYWN0b3J5LmdldChDZXNpdW1FdmVudC5NT1VTRV9NT1ZFKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoKG1vdmVtZW50KSA9PlxyXG4gICAgICAgICAgTWF0aC5hYnMobW92ZW1lbnQuZW5kUG9zaXRpb24ueCAtIHN0YXJ0RXZlbnRQb3NpdGlvbi54KSA+IENlc2l1bUxvbmdQcmVzc09ic2VydmVyLkxPTkdfUFJFU1NfRVZFTlRTX01JTl9ESVNUQU5DRV9QWCB8fFxyXG4gICAgICAgICAgTWF0aC5hYnMobW92ZW1lbnQuZW5kUG9zaXRpb24ueSAtIHN0YXJ0RXZlbnRQb3NpdGlvbi55KSA+IENlc2l1bUxvbmdQcmVzc09ic2VydmVyLkxPTkdfUFJFU1NfRVZFTlRTX01JTl9ESVNUQU5DRV9QWFxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuXHJcbiAgICBjb25zdCBzdG9wRXZlbnRPYnNlcnZhYmxlID0gbWVyZ2UoXHJcbiAgICAgIHRoaXMuZXZlbnRGYWN0b3J5LmdldChzdG9wRXZlbnQsIHRoaXMubW9kaWZpZXIpLFxyXG4gICAgICBtb3VzZU1vdmVFdmVudE9ic2VydmFibGVcclxuICAgICk7XHJcblxyXG4gICAgLy8gcHVibGlzaCBmb3IgcHJldmVudGluZyBzaWRlIGVmZmVjdFxyXG4gICAgY29uc3QgbG9uZ1ByZXNzT2JzZXJ2YWJsZSA9IHB1Ymxpc2goKShzdGFydEV2ZW50T2JzZXJ2YWJsZS5waXBlKFxyXG4gICAgICBtZXJnZU1hcCgoZSkgPT4gb2JzZXJ2YWJsZU9mKGUpLnBpcGUoXHJcbiAgICAgICAgZGVsYXkoQ2VzaXVtTG9uZ1ByZXNzT2JzZXJ2ZXIuTE9OR19QUkVTU19FVkVOVFNfRFVSQVRJT04pLFxyXG4gICAgICAgIHRha2VVbnRpbChzdG9wRXZlbnRPYnNlcnZhYmxlKSkpLFxyXG4gICAgKSk7XHJcbiAgICByZXR1cm4gbG9uZ1ByZXNzT2JzZXJ2YWJsZTtcclxuICB9XHJcbn1cclxuIl19