UNPKG

ng-reorder

Version:

Sort elements within a list by using drag-n-drop interface without any restrictions by direction

64 lines 7.67 kB
import { Injectable, Inject, NgZone } from '@angular/core'; import { DOCUMENT } from '@angular/common'; import { Subject } from 'rxjs'; export class EventService { constructor(_document, _zone) { this._document = _document; this._zone = _zone; this.move = new Subject(); this.up = new Subject(); this.scroll = new Subject(); this._globalListeners = new Map(); } applyGlobalListeners(event) { const isMouse = event.type.startsWith('mouse'); const moveEvent = isMouse ? 'mousemove' : 'touchmove'; const endEvent = isMouse ? 'mouseup' : 'touchend'; this._globalListeners .set('scroll', { func: (e) => { this.scroll.next(e); }, options: true }) .set('selectstart', { func: (e) => { e.preventDefault(); }, options: false }) .set(moveEvent, { func: (e) => { this.move.next(e); e.preventDefault(); }, options: { passive: false } }) .set(endEvent, { func: e => { this.up.next(e); }, options: true }); this._zone.runOutsideAngular(() => { this._globalListeners.forEach((handler, e) => { this._document.addEventListener(e, handler.func, handler.options); }); }); } removeGlobalListeners() { this._zone.runOutsideAngular(() => { this._globalListeners.forEach((handler, event) => { this._document.removeEventListener(event, handler.func, handler.options); }); }); } } EventService.decorators = [ { type: Injectable } ]; EventService.ctorParameters = () => [ { type: HTMLElement, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, { type: NgZone } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXJlb3JkZXIvc3JjL2xpYi9ldmVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcvQixNQUFNLE9BQU8sWUFBWTtJQWF4QixZQUMyQixTQUFzQixFQUN4QyxLQUFhO1FBREssY0FBUyxHQUFULFNBQVMsQ0FBYTtRQUN4QyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBYmIsU0FBSSxHQUFHLElBQUksT0FBTyxFQUEyQixDQUFDO1FBRTlDLE9BQUUsR0FBRyxJQUFJLE9BQU8sRUFBMkIsQ0FBQztRQUU1QyxXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQVMsQ0FBQztRQUUvQixxQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFHOUIsQ0FBQztJQU1MLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxLQUE4QjtRQUN6RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ3RELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFFbEQsSUFBSSxDQUFDLGdCQUFnQjthQUNuQixHQUFHLENBQ0gsUUFBUSxFQUFFO1lBQ1YsSUFBSSxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLENBQUM7WUFDRCxPQUFPLEVBQUUsSUFBSTtTQUNiLENBQUM7YUFDRCxHQUFHLENBQ0gsYUFBYSxFQUFFO1lBQ2YsSUFBSSxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUU7Z0JBQ2xCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixDQUFDO1lBQ0QsT0FBTyxFQUFFLEtBQUs7U0FDZCxDQUFDO2FBQ0QsR0FBRyxDQUNILFNBQVMsRUFBRTtZQUNYLElBQUksRUFBRSxDQUFDLENBQVEsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUE0QixDQUFDLENBQUM7Z0JBQzdDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixDQUFDO1lBQ0QsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtTQUMzQixDQUFDO2FBQ0QsR0FBRyxDQUNILFFBQVEsRUFBRTtZQUNWLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDVCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUE0QixDQUFDLENBQUM7WUFDNUMsQ0FBQztZQUNELE9BQU8sRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDO1FBRUosSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxxQkFBcUI7UUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OztZQXJFRCxVQUFVOzs7WUFlNEIsV0FBVyx1QkFBL0MsTUFBTSxTQUFDLFFBQVE7WUFuQlcsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRXZlbnRTZXJ2aWNlIHtcclxuXHJcblx0cmVhZG9ubHkgbW92ZSA9IG5ldyBTdWJqZWN0PE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50PigpO1xyXG5cclxuXHRyZWFkb25seSB1cCA9IG5ldyBTdWJqZWN0PE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50PigpO1xyXG5cclxuXHRyZWFkb25seSBzY3JvbGwgPSBuZXcgU3ViamVjdDxFdmVudD4oKTtcclxuXHJcblx0cHJpdmF0ZSBfZ2xvYmFsTGlzdGVuZXJzID0gbmV3IE1hcDxzdHJpbmcsIHtcclxuXHRcdGZ1bmM6IChldmVudCkgPT4gdm9pZCxcclxuXHRcdG9wdGlvbnM6IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zIHwgYm9vbGVhbjtcclxuXHR9PigpO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBIVE1MRWxlbWVudCxcclxuXHRcdHByaXZhdGUgX3pvbmU6IE5nWm9uZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFwcGx5R2xvYmFsTGlzdGVuZXJzKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCkge1xyXG5cdFx0Y29uc3QgaXNNb3VzZSA9IGV2ZW50LnR5cGUuc3RhcnRzV2l0aCgnbW91c2UnKTtcclxuXHRcdGNvbnN0IG1vdmVFdmVudCA9IGlzTW91c2UgPyAnbW91c2Vtb3ZlJyA6ICd0b3VjaG1vdmUnO1xyXG5cdFx0Y29uc3QgZW5kRXZlbnQgPSBpc01vdXNlID8gJ21vdXNldXAnIDogJ3RvdWNoZW5kJztcclxuXHJcblx0XHR0aGlzLl9nbG9iYWxMaXN0ZW5lcnNcclxuXHRcdFx0LnNldChcclxuXHRcdFx0XHQnc2Nyb2xsJywge1xyXG5cdFx0XHRcdGZ1bmM6IChlOiBFdmVudCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5zY3JvbGwubmV4dChlKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdG9wdGlvbnM6IHRydWVcclxuXHRcdFx0fSlcclxuXHRcdFx0LnNldChcclxuXHRcdFx0XHQnc2VsZWN0c3RhcnQnLCB7XHJcblx0XHRcdFx0ZnVuYzogKGU6IEV2ZW50KSA9PiB7XHJcblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRvcHRpb25zOiBmYWxzZVxyXG5cdFx0XHR9KVxyXG5cdFx0XHQuc2V0KFxyXG5cdFx0XHRcdG1vdmVFdmVudCwge1xyXG5cdFx0XHRcdGZ1bmM6IChlOiBFdmVudCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5tb3ZlLm5leHQoZSBhcyBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk7XHJcblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRvcHRpb25zOiB7IHBhc3NpdmU6IGZhbHNlIH1cclxuXHRcdFx0fSlcclxuXHRcdFx0LnNldChcclxuXHRcdFx0XHRlbmRFdmVudCwge1xyXG5cdFx0XHRcdGZ1bmM6IGUgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy51cC5uZXh0KGUgYXMgTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0b3B0aW9uczogdHJ1ZVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHR0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuXHRcdFx0dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLmZvckVhY2goKGhhbmRsZXIsIGUpID0+IHtcclxuXHRcdFx0XHR0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGUsIGhhbmRsZXIuZnVuYywgaGFuZGxlci5vcHRpb25zKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUdsb2JhbExpc3RlbmVycygpIHtcclxuXHRcdHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG5cdFx0XHR0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuZm9yRWFjaCgoaGFuZGxlciwgZXZlbnQpID0+IHtcclxuXHRcdFx0XHR0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLmZ1bmMsIGhhbmRsZXIub3B0aW9ucyk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbiJdfQ==