UNPKG

angular-cesium

Version:
109 lines 16.1 kB
import { fromEvent as observableFromEvent, Subject } from 'rxjs'; import { map, merge, takeUntil, tap } from 'rxjs/operators'; import { Inject, Injectable } from '@angular/core'; import { DOCUMENT } from '@angular/common'; import { MapsManagerService } from '../../angular-cesium/services/maps-manager/maps-manager.service'; /** * The Service is used to preform, handle and subscribe to icon dragging when using the `DraggableToMapDirective`. * For more info check `DraggableToMapDirective` docs. */ export class DraggableToMapService { constructor(document, mapsManager) { this.document = document; this.mapsManager = mapsManager; this.mainSubject = new Subject(); } setCoordinateConverter(coordinateConverter) { this.coordinateConverter = coordinateConverter; } drag(imageSrc, style) { if (!this.coordinateConverter) { const mapComponent = this.mapsManager.getMap(); if (mapComponent) { this.coordinateConverter = mapComponent.getCoordinateConverter(); } } this.cancel(); const imgElement = document.createElement('img'); imgElement.src = imageSrc; imgElement.style.position = 'fixed'; imgElement.style.visibility = 'hidden'; imgElement.style.width = '30px'; imgElement.style.height = '30px'; imgElement.style['user-drag'] = 'none'; imgElement.style['user-select'] = 'none'; imgElement.style['-moz-user-select'] = 'none'; imgElement.style['-webkit-user-drag'] = 'none'; imgElement.style['-webkit-user-select'] = 'none'; imgElement.style['-ms-user-select'] = 'none'; Object.assign(imgElement.style, style); document.body.appendChild(imgElement); this.createDragObservable(); this.dragObservable.subscribe((e) => { imgElement.style.visibility = 'visible'; imgElement.style.left = e.screenPosition.x - imgElement.clientWidth / 2 + 'px'; imgElement.style.top = e.screenPosition.y - imgElement.clientHeight / 2 + 'px'; this.mainSubject.next(e); if (e.drop) { imgElement.remove(); } }, (e) => { imgElement.remove(); }, () => { imgElement.remove(); }); } dragUpdates() { return this.mainSubject; } cancel() { if (this.stopper) { this.stopper.next(true); this.stopper = undefined; this.dragObservable = undefined; } } createDragObservable() { const stopper = new Subject(); const dropSubject = new Subject(); const pointerUp = observableFromEvent(document, 'pointerup'); const pointerMove = observableFromEvent(document, 'pointermove'); let dragStartPositionX; let dragStartPositionY; let lastMove; const moveObservable = pointerMove.pipe(map((e) => { dragStartPositionX = dragStartPositionX ? dragStartPositionX : e.x; dragStartPositionY = dragStartPositionY ? dragStartPositionY : e.y; lastMove = { drop: false, initialScreenPosition: { x: dragStartPositionX, y: dragStartPositionY, }, screenPosition: { x: e.x, y: e.y, }, mapPosition: this.coordinateConverter ? this.coordinateConverter.screenToCartesian3({ x: e.x, y: e.y }) : undefined, }; return lastMove; }), takeUntil(pointerUp), tap(undefined, undefined, () => { if (lastMove) { const dropEvent = Object.assign({}, lastMove); dropEvent.drop = true; dropSubject.next(dropEvent); } })); this.dragObservable = moveObservable.pipe(merge(dropSubject), takeUntil(stopper)); this.stopper = stopper; } } DraggableToMapService.decorators = [ { type: Injectable } ]; DraggableToMapService.ctorParameters = () => [ { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, { type: MapsManagerService } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLXRvLW1hcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jZXNpdW0vc3JjL2xpYi9hbmd1bGFyLWNlc2l1bS13aWRnZXRzL3NlcnZpY2VzL2RyYWdnYWJsZS10by1tYXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxJQUFJLG1CQUFtQixFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3RSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSTNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBU3JHOzs7R0FHRztBQUdILE1BQU0sT0FBTyxxQkFBcUI7SUFPaEMsWUFBc0MsUUFBYSxFQUFVLFdBQStCO1FBQXRELGFBQVEsR0FBUixRQUFRLENBQUs7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFGcEYsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBaUIsQ0FBQztJQUduRCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsbUJBQXdDO1FBQzdELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxDQUFDLFFBQWdCLEVBQUUsS0FBVztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzdCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0MsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxtQkFBbUIsR0FB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QUFDO2dCQUM5QyxTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDdEIsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUM3QjtRQUNILENBQUMsQ0FBQyxDQUFHLENBQUM7UUFFUixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBRyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7OztZQTVHRixVQUFVOzs7NENBUUksTUFBTSxTQUFDLFFBQVE7WUF0QnJCLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb21FdmVudCBhcyBvYnNlcnZhYmxlRnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBtYXAsIG1lcmdlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVmVjMiB9IGZyb20gJy4uLy4uL2FuZ3VsYXItY2VzaXVtL21vZGVscy92ZWMyJztcclxuaW1wb3J0IHsgQ2FydGVzaWFuMyB9IGZyb20gJy4uLy4uL2FuZ3VsYXItY2VzaXVtL21vZGVscy9jYXJ0ZXNpYW4zJztcclxuaW1wb3J0IHsgQ29vcmRpbmF0ZUNvbnZlcnRlciB9IGZyb20gJy4uLy4uL2FuZ3VsYXItY2VzaXVtL3NlcnZpY2VzL2Nvb3JkaW5hdGUtY29udmVydGVyL2Nvb3JkaW5hdGUtY29udmVydGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXBzTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbmd1bGFyLWNlc2l1bS9zZXJ2aWNlcy9tYXBzLW1hbmFnZXIvbWFwcy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJY29uRHJhZ0V2ZW50IHtcclxuICBpbml0aWFsU2NyZWVuUG9zaXRpb246IFZlYzI7XHJcbiAgc2NyZWVuUG9zaXRpb246IFZlYzI7XHJcbiAgbWFwUG9zaXRpb246IENhcnRlc2lhbjM7XHJcbiAgZHJvcDogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBTZXJ2aWNlIGlzIHVzZWQgdG8gcHJlZm9ybSwgaGFuZGxlIGFuZCBzdWJzY3JpYmUgdG8gaWNvbiBkcmFnZ2luZyB3aGVuIHVzaW5nIHRoZSBgRHJhZ2dhYmxlVG9NYXBEaXJlY3RpdmVgLlxyXG4gKiBGb3IgbW9yZSBpbmZvIGNoZWNrIGBEcmFnZ2FibGVUb01hcERpcmVjdGl2ZWAgZG9jcy5cclxuICovXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEcmFnZ2FibGVUb01hcFNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIGNvb3JkaW5hdGVDb252ZXJ0ZXI6IENvb3JkaW5hdGVDb252ZXJ0ZXI7XHJcbiAgcHJpdmF0ZSBkcmFnT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxJY29uRHJhZ0V2ZW50PjtcclxuICBwcml2YXRlIHN0b3BwZXI6IFN1YmplY3Q8YW55PjtcclxuICBwcml2YXRlIG1haW5TdWJqZWN0ID0gbmV3IFN1YmplY3Q8SWNvbkRyYWdFdmVudD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LCBwcml2YXRlIG1hcHNNYW5hZ2VyOiBNYXBzTWFuYWdlclNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIHNldENvb3JkaW5hdGVDb252ZXJ0ZXIoY29vcmRpbmF0ZUNvbnZlcnRlcjogQ29vcmRpbmF0ZUNvbnZlcnRlcikge1xyXG4gICAgdGhpcy5jb29yZGluYXRlQ29udmVydGVyID0gY29vcmRpbmF0ZUNvbnZlcnRlcjtcclxuICB9XHJcblxyXG4gIGRyYWcoaW1hZ2VTcmM6IHN0cmluZywgc3R5bGU/OiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5jb29yZGluYXRlQ29udmVydGVyKSB7XHJcbiAgICAgIGNvbnN0IG1hcENvbXBvbmVudCA9IHRoaXMubWFwc01hbmFnZXIuZ2V0TWFwKCk7XHJcbiAgICAgIGlmIChtYXBDb21wb25lbnQpIHtcclxuICAgICAgICB0aGlzLmNvb3JkaW5hdGVDb252ZXJ0ZXIgPSBtYXBDb21wb25lbnQuZ2V0Q29vcmRpbmF0ZUNvbnZlcnRlcigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbmNlbCgpO1xyXG4gICAgY29uc3QgaW1nRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgaW1nRWxlbWVudC5zcmMgPSBpbWFnZVNyYztcclxuICAgIGltZ0VsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG4gICAgaW1nRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICBpbWdFbGVtZW50LnN0eWxlLndpZHRoID0gJzMwcHgnO1xyXG4gICAgaW1nRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMzBweCc7XHJcbiAgICBpbWdFbGVtZW50LnN0eWxlWyd1c2VyLWRyYWcnXSA9ICdub25lJztcclxuICAgIGltZ0VsZW1lbnQuc3R5bGVbJ3VzZXItc2VsZWN0J10gPSAnbm9uZSc7XHJcbiAgICBpbWdFbGVtZW50LnN0eWxlWyctbW96LXVzZXItc2VsZWN0J10gPSAnbm9uZSc7XHJcbiAgICBpbWdFbGVtZW50LnN0eWxlWyctd2Via2l0LXVzZXItZHJhZyddID0gJ25vbmUnO1xyXG4gICAgaW1nRWxlbWVudC5zdHlsZVsnLXdlYmtpdC11c2VyLXNlbGVjdCddID0gJ25vbmUnO1xyXG4gICAgaW1nRWxlbWVudC5zdHlsZVsnLW1zLXVzZXItc2VsZWN0J10gPSAnbm9uZSc7XHJcbiAgICBPYmplY3QuYXNzaWduKGltZ0VsZW1lbnQuc3R5bGUsIHN0eWxlKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nRWxlbWVudCk7XHJcblxyXG4gICAgdGhpcy5jcmVhdGVEcmFnT2JzZXJ2YWJsZSgpO1xyXG4gICAgdGhpcy5kcmFnT2JzZXJ2YWJsZS5zdWJzY3JpYmUoXHJcbiAgICAgIChlKSA9PiB7XHJcbiAgICAgICAgaW1nRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xyXG4gICAgICAgIGltZ0VsZW1lbnQuc3R5bGUubGVmdCA9IGUuc2NyZWVuUG9zaXRpb24ueCAtIGltZ0VsZW1lbnQuY2xpZW50V2lkdGggLyAyICsgJ3B4JztcclxuICAgICAgICBpbWdFbGVtZW50LnN0eWxlLnRvcCA9IGUuc2NyZWVuUG9zaXRpb24ueSAtIGltZ0VsZW1lbnQuY2xpZW50SGVpZ2h0IC8gMiArICdweCc7XHJcbiAgICAgICAgdGhpcy5tYWluU3ViamVjdC5uZXh0KGUpO1xyXG4gICAgICAgIGlmIChlLmRyb3ApIHtcclxuICAgICAgICAgIGltZ0VsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgaW1nRWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgfSxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIGltZ0VsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkcmFnVXBkYXRlcygpOiBPYnNlcnZhYmxlPEljb25EcmFnRXZlbnQ+IHtcclxuICAgIHJldHVybiB0aGlzLm1haW5TdWJqZWN0O1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgaWYgKHRoaXMuc3RvcHBlcikge1xyXG4gICAgICB0aGlzLnN0b3BwZXIubmV4dCh0cnVlKTtcclxuICAgICAgdGhpcy5zdG9wcGVyID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLmRyYWdPYnNlcnZhYmxlID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEcmFnT2JzZXJ2YWJsZSgpIHtcclxuICAgIGNvbnN0IHN0b3BwZXIgPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgY29uc3QgZHJvcFN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICBjb25zdCBwb2ludGVyVXAgPSBvYnNlcnZhYmxlRnJvbUV2ZW50KGRvY3VtZW50LCAncG9pbnRlcnVwJyk7XHJcbiAgICBjb25zdCBwb2ludGVyTW92ZSA9IG9ic2VydmFibGVGcm9tRXZlbnQoZG9jdW1lbnQsICdwb2ludGVybW92ZScpO1xyXG5cclxuICAgIGxldCBkcmFnU3RhcnRQb3NpdGlvblg6IG51bWJlcjtcclxuICAgIGxldCBkcmFnU3RhcnRQb3NpdGlvblk6IG51bWJlcjtcclxuICAgIGxldCBsYXN0TW92ZTogYW55O1xyXG4gICAgY29uc3QgbW92ZU9ic2VydmFibGUgPSBwb2ludGVyTW92ZS5waXBlKG1hcCgoZTogYW55KSA9PiB7XHJcbiAgICAgICAgZHJhZ1N0YXJ0UG9zaXRpb25YID0gZHJhZ1N0YXJ0UG9zaXRpb25YID8gZHJhZ1N0YXJ0UG9zaXRpb25YIDogZS54O1xyXG4gICAgICAgIGRyYWdTdGFydFBvc2l0aW9uWSA9IGRyYWdTdGFydFBvc2l0aW9uWSA/IGRyYWdTdGFydFBvc2l0aW9uWSA6IGUueTtcclxuICAgICAgICBsYXN0TW92ZSA9IHtcclxuICAgICAgICAgIGRyb3A6IGZhbHNlLFxyXG4gICAgICAgICAgaW5pdGlhbFNjcmVlblBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHg6IGRyYWdTdGFydFBvc2l0aW9uWCxcclxuICAgICAgICAgICAgeTogZHJhZ1N0YXJ0UG9zaXRpb25ZLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHNjcmVlblBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHg6IGUueCxcclxuICAgICAgICAgICAgeTogZS55LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG1hcFBvc2l0aW9uOiB0aGlzLmNvb3JkaW5hdGVDb252ZXJ0ZXIgP1xyXG4gICAgICAgICAgICB0aGlzLmNvb3JkaW5hdGVDb252ZXJ0ZXIuc2NyZWVuVG9DYXJ0ZXNpYW4zKHt4OiBlLngsIHk6IGUueX0pIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGxhc3RNb3ZlO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFrZVVudGlsKHBvaW50ZXJVcCksXHJcbiAgICAgIHRhcCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgKCkgPT4ge1xyXG4gICAgICAgIGlmIChsYXN0TW92ZSkge1xyXG4gICAgICAgICAgY29uc3QgZHJvcEV2ZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgbGFzdE1vdmUpO1xyXG4gICAgICAgICAgZHJvcEV2ZW50LmRyb3AgPSB0cnVlO1xyXG4gICAgICAgICAgZHJvcFN1YmplY3QubmV4dChkcm9wRXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksICk7XHJcblxyXG4gICAgdGhpcy5kcmFnT2JzZXJ2YWJsZSA9IG1vdmVPYnNlcnZhYmxlLnBpcGUobWVyZ2UoZHJvcFN1YmplY3QpLCB0YWtlVW50aWwoc3RvcHBlciksICk7XHJcbiAgICB0aGlzLnN0b3BwZXIgPSBzdG9wcGVyO1xyXG4gIH1cclxufVxyXG4iXX0=