ng-reorder
Version:
Sort elements within a list by using drag-n-drop interface without any restrictions by direction
64 lines • 7.67 kB
JavaScript
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==