@jaspero/ng-helpers
Version:
[](https://github.com/semantic-release/semantic-release) [](https://circleci.
70 lines • 6.67 kB
JavaScript
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=