UNPKG

angular-cesium-ivy

Version:
43 lines 8.83 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VzaXVtLWxvbmctcHJlc3Mtb2JzZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNlc2l1bS9zcmMvbGliL2FuZ3VsYXItY2VzaXVtL3NlcnZpY2VzL21hcC1ldmVudHMtbWFuYW5nZXIvZXZlbnQtb2JzZXJ2ZXJzL2Nlc2l1bS1sb25nLXByZXNzLW9ic2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBeUIsS0FBSyxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSzFELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSx1QkFBdUI7SUFJbEUsWUFBc0IsS0FBa0IsRUFDbEIsUUFBNkIsRUFDL0IsWUFBZ0M7UUFDbEQsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUhILFVBQUssR0FBTCxLQUFLLENBQWE7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7UUFDL0IsaUJBQVksR0FBWixZQUFZLENBQW9CO0lBRXBELENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxVQUF1QixDQUFDO1FBQzVCLElBQUksU0FBc0IsQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLGVBQWUsRUFBRTtZQUM5QyxVQUFVLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztZQUNuQyxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztTQUNqQzthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7WUFDdEQsVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUM7WUFDcEMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7U0FDbEM7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLGlCQUFpQixFQUFFO1lBQ3ZELFVBQVUsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO1lBQ3JDLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO1NBQ25DO1FBRUQsNEJBQTRCO1FBQzVCLElBQUksa0JBQWtCLEdBQWUsSUFBSSxDQUFDO1FBQzFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDMUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhFLDZGQUE2RjtRQUM3RixNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7YUFDM0UsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEdBQUcsdUJBQXVCLENBQUMsaUNBQWlDO1lBQ25ILElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEdBQUcsdUJBQXVCLENBQUMsaUNBQWlDLENBQ3BILENBQ0YsQ0FBQztRQUVKLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUMvQyx3QkFBd0IsQ0FDekIsQ0FBQztRQUVGLHFDQUFxQztRQUNyQyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FDN0QsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsMEJBQTBCLENBQUMsRUFDekQsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUNuQyxDQUFDLENBQUM7UUFDSCxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7O0FBbERhLGtEQUEwQixHQUFHLEdBQUcsQ0FBQztBQUNqQyx5REFBaUMsR0FBRyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25uZWN0YWJsZU9ic2VydmFibGUsIG1lcmdlLCBvZiBhcyBvYnNlcnZhYmxlT2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBmaWx0ZXIsIG1lcmdlTWFwLCBwdWJsaXNoLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENlc2l1bVB1cmVFdmVudE9ic2VydmVyIH0gZnJvbSAnLi9jZXNpdW0tcHVyZS1ldmVudC1vYnNlcnZlcic7XG5pbXBvcnQgeyBDZXNpdW1FdmVudCB9IGZyb20gJy4uL2NvbnN0cy9jZXNpdW0tZXZlbnQuZW51bSc7XG5pbXBvcnQgeyBDZXNpdW1FdmVudE1vZGlmaWVyIH0gZnJvbSAnLi4vY29uc3RzL2Nlc2l1bS1ldmVudC1tb2RpZmllci5lbnVtJztcbmltcG9ydCB7IENlc2l1bUV2ZW50QnVpbGRlciB9IGZyb20gJy4uL2Nlc2l1bS1ldmVudC1idWlsZGVyJztcbmltcG9ydCB7IENhcnRlc2lhbjIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY2FydGVzaWFuMic7XG5cbmV4cG9ydCBjbGFzcyBDZXNpdW1Mb25nUHJlc3NPYnNlcnZlciBleHRlbmRzIENlc2l1bVB1cmVFdmVudE9ic2VydmVyIHtcbiAgcHVibGljIHN0YXRpYyBMT05HX1BSRVNTX0VWRU5UU19EVVJBVElPTiA9IDI1MDtcbiAgcHVibGljIHN0YXRpYyBMT05HX1BSRVNTX0VWRU5UU19NSU5fRElTVEFOQ0VfUFggPSAxMDtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZXZlbnQ6IENlc2l1bUV2ZW50LFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgbW9kaWZpZXI6IENlc2l1bUV2ZW50TW9kaWZpZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgZXZlbnRGYWN0b3J5OiBDZXNpdW1FdmVudEJ1aWxkZXIpIHtcbiAgICBzdXBlcihldmVudCwgbW9kaWZpZXIpO1xuICB9XG5cbiAgaW5pdCgpOiBDb25uZWN0YWJsZU9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHN0YXJ0RXZlbnQ6IENlc2l1bUV2ZW50O1xuICAgIGxldCBzdG9wRXZlbnQ6IENlc2l1bUV2ZW50O1xuXG4gICAgaWYgKHRoaXMuZXZlbnQgPT09IENlc2l1bUV2ZW50LkxPTkdfTEVGVF9QUkVTUykge1xuICAgICAgc3RhcnRFdmVudCA9IENlc2l1bUV2ZW50LkxFRlRfRE9XTjtcbiAgICAgIHN0b3BFdmVudCA9IENlc2l1bUV2ZW50LkxFRlRfVVA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50ID09PSBDZXNpdW1FdmVudC5MT05HX1JJR0hUX1BSRVNTKSB7XG4gICAgICBzdGFydEV2ZW50ID0gQ2VzaXVtRXZlbnQuUklHSFRfRE9XTjtcbiAgICAgIHN0b3BFdmVudCA9IENlc2l1bUV2ZW50LlJJR0hUX1VQO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ldmVudCA9PT0gQ2VzaXVtRXZlbnQuTE9OR19NSURETEVfUFJFU1MpIHtcbiAgICAgIHN0YXJ0RXZlbnQgPSBDZXNpdW1FdmVudC5NSURETEVfRE9XTjtcbiAgICAgIHN0b3BFdmVudCA9IENlc2l1bUV2ZW50Lk1JRERMRV9VUDtcbiAgICB9XG5cbiAgICAvLyBTYXZlIHN0YXJ0IGV2ZW50IHBvc2l0aW9uXG4gICAgbGV0IHN0YXJ0RXZlbnRQb3NpdGlvbjogQ2FydGVzaWFuMiA9IG51bGw7XG4gICAgY29uc3Qgc3RhcnRFdmVudE9ic2VydmFibGUgPSB0aGlzLmV2ZW50RmFjdG9yeS5nZXQoc3RhcnRFdmVudCwgdGhpcy5tb2RpZmllcilcbiAgICAgIC5waXBlKHRhcCgobW92ZW1lbnQpID0+IChzdGFydEV2ZW50UG9zaXRpb24gPSBtb3ZlbWVudC5lbmRQb3NpdGlvbikpKTtcblxuICAgIC8vIFByZXZlbnQgZHJhZyBtaXN0YWtlbiBmb3IgbG9uZyBwcmVzcyBieSBvYnNlcnZpbmcgbW91c2UgbW92ZSBmYXIgZnJvbSBzdGFydCBldmVudCBwb3NpdGlvblxuICAgIGNvbnN0IG1vdXNlTW92ZUV2ZW50T2JzZXJ2YWJsZSA9IHRoaXMuZXZlbnRGYWN0b3J5LmdldChDZXNpdW1FdmVudC5NT1VTRV9NT1ZFKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigobW92ZW1lbnQpID0+XG4gICAgICAgICAgTWF0aC5hYnMobW92ZW1lbnQuZW5kUG9zaXRpb24ueCAtIHN0YXJ0RXZlbnRQb3NpdGlvbi54KSA+IENlc2l1bUxvbmdQcmVzc09ic2VydmVyLkxPTkdfUFJFU1NfRVZFTlRTX01JTl9ESVNUQU5DRV9QWCB8fFxuICAgICAgICAgIE1hdGguYWJzKG1vdmVtZW50LmVuZFBvc2l0aW9uLnkgLSBzdGFydEV2ZW50UG9zaXRpb24ueSkgPiBDZXNpdW1Mb25nUHJlc3NPYnNlcnZlci5MT05HX1BSRVNTX0VWRU5UU19NSU5fRElTVEFOQ0VfUFhcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgIGNvbnN0IHN0b3BFdmVudE9ic2VydmFibGUgPSBtZXJnZShcbiAgICAgIHRoaXMuZXZlbnRGYWN0b3J5LmdldChzdG9wRXZlbnQsIHRoaXMubW9kaWZpZXIpLFxuICAgICAgbW91c2VNb3ZlRXZlbnRPYnNlcnZhYmxlXG4gICAgKTtcblxuICAgIC8vIHB1Ymxpc2ggZm9yIHByZXZlbnRpbmcgc2lkZSBlZmZlY3RcbiAgICBjb25zdCBsb25nUHJlc3NPYnNlcnZhYmxlID0gcHVibGlzaCgpKHN0YXJ0RXZlbnRPYnNlcnZhYmxlLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoZSkgPT4gb2JzZXJ2YWJsZU9mKGUpLnBpcGUoXG4gICAgICAgIGRlbGF5KENlc2l1bUxvbmdQcmVzc09ic2VydmVyLkxPTkdfUFJFU1NfRVZFTlRTX0RVUkFUSU9OKSxcbiAgICAgICAgdGFrZVVudGlsKHN0b3BFdmVudE9ic2VydmFibGUpKSksXG4gICAgKSk7XG4gICAgcmV0dXJuIGxvbmdQcmVzc09ic2VydmFibGU7XG4gIH1cbn1cbiJdfQ==