UNPKG

@jaspero/ng-helpers

Version:

[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) [![CircleCI](https://circleci.com/gh/Jaspero/ng-helpers.svg?style=svg)](https://circleci.

70 lines 6.67 kB
import { Directive, EventEmitter, Input, Output } from '@angular/core'; import * as i0 from "@angular/core"; /** * Used for preventing propagation on event calls event.stopPropagation()) * * @example * <div (jpStopPropagation)="doSomething()"></div> */ export class StopPropagationDirective { _renderer; _el; constructor(_renderer, _el) { this._renderer = _renderer; this._el = _el; } /** * Any valid html event */ stopPropagationEventType = 'click'; /** * Should preventDefault also be called */ preventDefault = false; condition; /** * Outputs the input event */ jpStopPropagation = new EventEmitter(); ngOnInit() { this._renderer.listen(this._el.nativeElement, this.stopPropagationEventType, event => { if (this.preventDefault) { event.preventDefault(); } if (this.condition !== undefined) { if (typeof this.condition === 'boolean') { if (this.condition) { this.sp(event); } } else if (this.condition(event)) { this.sp(event); } } else { this.sp(event); } }); } sp(event) { event.stopPropagation(); this.jpStopPropagation.emit(event); } /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StopPropagationDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: StopPropagationDirective, selector: "[jpStopPropagation]", inputs: { stopPropagationEventType: "stopPropagationEventType", preventDefault: "preventDefault", condition: "condition" }, outputs: { jpStopPropagation: "jpStopPropagation" }, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StopPropagationDirective, decorators: [{ type: Directive, args: [{ selector: '[jpStopPropagation]' }] }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { stopPropagationEventType: [{ type: Input }], preventDefault: [{ type: Input }], condition: [{ type: Input }], jpStopPropagation: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcC1wcm9wYWdhdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1oZWxwZXJzL3NyYy9kaXJlY3RpdmVzL3N0b3AtcHJvcGFnYXRpb24vc3RvcC1wcm9wYWdhdGlvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQzs7QUFFcEc7Ozs7O0dBS0c7QUFJSCxNQUFNLE9BQU8sd0JBQXdCO0lBQ2Y7SUFBOEI7SUFBbEQsWUFBb0IsU0FBb0IsRUFBVSxHQUFlO1FBQTdDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFZO0lBQUcsQ0FBQztJQUVyRTs7T0FFRztJQUNNLHdCQUF3QixHQUFHLE9BQU8sQ0FBQztJQUU1Qzs7T0FFRztJQUNNLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFFdkIsU0FBUyxDQUE2QztJQUUvRDs7T0FFRztJQUNPLGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFakQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFDdEIsSUFBSSxDQUFDLHdCQUF3QixFQUM3QixLQUFLLENBQUMsRUFBRTtZQUNOLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ3hDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUNuQixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNqQixDQUFDO2dCQUNILENBQUM7cUJBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixDQUFDO1FBQ0gsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sRUFBRSxDQUFDLEtBQUs7UUFDZCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDOzJIQS9DVSx3QkFBd0I7K0dBQXhCLHdCQUF3Qjs7NEZBQXhCLHdCQUF3QjtrQkFIcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO2lCQUNoQzt1R0FPVSx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBS0csY0FBYztzQkFBdEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtJLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUmVuZGVyZXIyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBVc2VkIGZvciBwcmV2ZW50aW5nIHByb3BhZ2F0aW9uIG9uIGV2ZW50IGNhbGxzIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpKVxuICpcbiAqIEBleGFtcGxlXG4gKiA8ZGl2IChqcFN0b3BQcm9wYWdhdGlvbik9XCJkb1NvbWV0aGluZygpXCI+PC9kaXY+XG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tqcFN0b3BQcm9wYWdhdGlvbl0nXG59KVxuZXhwb3J0IGNsYXNzIFN0b3BQcm9wYWdhdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgX2VsOiBFbGVtZW50UmVmKSB7fVxuXG4gIC8qKlxuICAgKiBBbnkgdmFsaWQgaHRtbCBldmVudFxuICAgKi9cbiAgQElucHV0KCkgc3RvcFByb3BhZ2F0aW9uRXZlbnRUeXBlID0gJ2NsaWNrJztcblxuICAvKipcbiAgICogU2hvdWxkIHByZXZlbnREZWZhdWx0IGFsc28gYmUgY2FsbGVkXG4gICAqL1xuICBASW5wdXQoKSBwcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGNvbmRpdGlvbjogYm9vbGVhbiB8ICgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IGJvb2xlYW4pO1xuXG4gIC8qKlxuICAgKiBPdXRwdXRzIHRoZSBpbnB1dCBldmVudFxuICAgKi9cbiAgQE91dHB1dCgpIGpwU3RvcFByb3BhZ2F0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX3JlbmRlcmVyLmxpc3RlbihcbiAgICAgIHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbkV2ZW50VHlwZSxcbiAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHRoaXMucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZGl0aW9uID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICB0aGlzLnNwKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZGl0aW9uKGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5zcChldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3AoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3AoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmpwU3RvcFByb3BhZ2F0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG59XG4iXX0=