ng-block-ui
Version:
Angular Block UI
106 lines • 15.7 kB
JavaScript
import { Directive, Input } from '@angular/core';
import { BlockUIContentComponent } from '../components/block-ui-content/block-ui-content.component';
import { BlockUIDefaultName } from '../constants/block-ui-default-name.constant';
import * as i0 from "@angular/core";
import * as i1 from "../services/block-ui.service";
import * as i2 from "../services/block-ui-instance.service";
export class BlockUIDirective {
constructor(blockUIService, blockUIInstanceService, viewRef, templateRef, renderer, componentFactoryResolver) {
this.blockUIService = blockUIService;
this.blockUIInstanceService = blockUIInstanceService;
this.viewRef = viewRef;
this.templateRef = templateRef;
this.renderer = renderer;
this.componentFactoryResolver = componentFactoryResolver;
}
set blockUI(name) { this.blockTarget = name; }
;
set blockUIMessage(message) { this.message = message; }
;
set blockUITemplate(template) { this.template = template; }
;
set blockUIDelayStart(delayStart) {
this.delayStart = delayStart ? Number(delayStart) : null;
}
;
set blockUIDelayStop(delayStop) {
this.delayStop = delayStop ? Number(delayStop) : null;
}
;
ngOnInit() {
try {
this.viewRef.createEmbeddedView(this.templateRef);
const parentElement = this.getParentElement();
if (parentElement && !this.isComponentInTemplate(parentElement)) {
this.renderer.addClass(parentElement, 'block-ui__element');
this.blockUIComponentRef = this.createComponent();
let blockUIContent = this.findContentNode(this.viewRef.element.nativeElement);
if (blockUIContent) {
const settings = this.blockUIInstanceService.getSettings();
parentElement.appendChild(blockUIContent);
this.blockUIComponentRef.instance.className = 'block-ui-wrapper--element';
this.blockUIComponentRef.instance.name = this.blockTarget || BlockUIDefaultName;
if (this.message)
this.blockUIComponentRef.instance.defaultMessage = this.message;
if (this.delayStart)
this.blockUIComponentRef.instance.delayStart = this.delayStart;
if (this.delayStop)
this.blockUIComponentRef.instance.delayStop = this.delayStop;
if (this.template || settings.template)
this.blockUIComponentRef.instance.templateCmp = this.template || settings.template;
}
}
}
catch (error) {
console.error('ng-block-ui:', error);
}
}
isComponentInTemplate(element) {
// Needed because of https://github.com/microsoft/TypeScript/issues/26235
const targetElement = element || {};
let { children } = targetElement;
children = Array.from(children || []).reverse();
return children.some((el) => el && el.localName === 'block-ui');
}
getParentElement() {
const embeddedView = this.viewRef.get(0);
return embeddedView.rootNodes[0];
}
// Needed for IE (#17)
findContentNode(element) {
const nextSibling = element.nextSibling || {};
const previousSibling = element.previousSibling || {};
return [
nextSibling,
nextSibling.nextSibling,
previousSibling,
previousSibling.previousSibling
].find((e) => e && e.localName === 'block-ui-content');
}
createComponent() {
const resolvedBlockUIComponent = this.componentFactoryResolver.resolveComponentFactory(BlockUIContentComponent);
return this.viewRef.createComponent(resolvedBlockUIComponent);
}
ngOnDestroy() {
if (this.blockTarget) {
this.blockUIService.reset(this.blockTarget);
}
}
}
BlockUIDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BlockUIDirective, deps: [{ token: i1.BlockUIService }, { token: i2.BlockUIInstanceService }, { token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Directive });
BlockUIDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: BlockUIDirective, selector: "[blockUI]", inputs: { blockUI: "blockUI", blockUIMessage: "blockUIMessage", blockUITemplate: "blockUITemplate", blockUIDelayStart: "blockUIDelayStart", blockUIDelayStop: "blockUIDelayStop" }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BlockUIDirective, decorators: [{
type: Directive,
args: [{ selector: '[blockUI]' }]
}], ctorParameters: function () { return [{ type: i1.BlockUIService }, { type: i2.BlockUIInstanceService }, { type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i0.Renderer2 }, { type: i0.ComponentFactoryResolver }]; }, propDecorators: { blockUI: [{
type: Input
}], blockUIMessage: [{
type: Input
}], blockUITemplate: [{
type: Input
}], blockUIDelayStart: [{
type: Input
}], blockUIDelayStop: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stdWkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2RpcmVjdGl2ZXMvYmxvY2stdWkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQVNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBRXBHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7O0FBSWpGLE1BQU0sT0FBTyxnQkFBZ0I7SUF1QjNCLFlBQ1UsY0FBOEIsRUFDOUIsc0JBQThDLEVBQzlDLE9BQXlCLEVBQ3pCLFdBQTZCLEVBQzdCLFFBQW1CLEVBQ25CLHdCQUFrRDtRQUxsRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDN0IsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO0lBQ3hELENBQUM7SUF0QkwsSUFDSSxPQUFPLENBQUMsSUFBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDcEQsSUFDSSxjQUFjLENBQUMsT0FBWSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDN0QsSUFDSSxlQUFlLENBQUMsUUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDakUsSUFDSSxpQkFBaUIsQ0FBQyxVQUFlO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMs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QyxDQUFDLENBQUM7SUFFbkMsQ0FBQztJQUVELHNCQUFzQjtJQUNkLGVBQWUsQ0FBQyxPQUFZO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQzlDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO1FBRXRELE9BQU87WUFDTCxXQUFXO1lBQ1gsV0FBVyxDQUFDLFdBQVc7WUFDdkIsZUFBZTtZQUNmLGVBQWUsQ0FBQyxlQUFlO1NBQ2hDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDaEgsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM3QztJQUNILENBQUM7OzZHQWpHVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTtrUUFVOUIsT0FBTztzQkFEVixLQUFLO2dCQUdGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBR0YsZUFBZTtzQkFEbEIsS0FBSztnQkFHRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBS0YsZ0JBQWdCO3NCQURuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIENvbXBvbmVudFJlZixcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgUmVuZGVyZXIyLFxuICBFbWJlZGRlZFZpZXdSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCbG9ja1VJQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYmxvY2stdWktY29udGVudC9ibG9jay11aS1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCbG9ja1VJSW5zdGFuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYmxvY2stdWktaW5zdGFuY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBCbG9ja1VJRGVmYXVsdE5hbWUgfSBmcm9tICcuLi9jb25zdGFudHMvYmxvY2stdWktZGVmYXVsdC1uYW1lLmNvbnN0YW50JztcbmltcG9ydCB7IEJsb2NrVUlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYmxvY2stdWkuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tibG9ja1VJXScgfSlcbmV4cG9ydCBjbGFzcyBCbG9ja1VJRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGJsb2NrVUlDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxCbG9ja1VJQ29udGVudENvbXBvbmVudD47XG4gIGJsb2NrVGFyZ2V0OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IGFueTtcbiAgdGVtcGxhdGU6IGFueTtcbiAgZGVsYXlTdGFydDogYW55O1xuICBkZWxheVN0b3A6IGFueTtcblxuICBASW5wdXQoKVxuICBzZXQgYmxvY2tVSShuYW1lOiBhbnkpIHsgdGhpcy5ibG9ja1RhcmdldCA9IG5hbWU7IH07XG4gIEBJbnB1dCgpXG4gIHNldCBibG9ja1VJTWVzc2FnZShtZXNzYWdlOiBhbnkpIHsgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsgfTtcbiAgQElucHV0KClcbiAgc2V0IGJsb2NrVUlUZW1wbGF0ZSh0ZW1wbGF0ZTogYW55KSB7IHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTsgfTtcbiAgQElucHV0KClcbiAgc2V0IGJsb2NrVUlEZWxheVN0YXJ0KGRlbGF5U3RhcnQ6IGFueSkge1xuICAgIHRoaXMuZGVsYXlTdGFydCA9IGRlbGF5U3RhcnQgPyBOdW1iZXIoZGVsYXlTdGFydCkgOiBudWxsO1xuICB9O1xuICBASW5wdXQoKVxuICBzZXQgYmxvY2tVSURlbGF5U3RvcChkZWxheVN0b3A6IGFueSkge1xuICAgIHRoaXMuZGVsYXlTdG9wID0gZGVsYXlTdG9wID8gTnVtYmVyKGRlbGF5U3RvcCkgOiBudWxsO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYmxvY2tVSVNlcnZpY2U6IEJsb2NrVUlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYmxvY2tVSUluc3RhbmNlU2VydmljZTogQmxvY2tVSUluc3RhbmNlU2VydmljZSxcbiAgICBwcml2YXRlIHZpZXdSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xuICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMuZ2V0UGFyZW50RWxlbWVudCgpO1xuXG4gICAgICBpZiAocGFyZW50RWxlbWVudCAmJiAhdGhpcy5pc0NvbXBvbmVudEluVGVtcGxhdGUocGFyZW50RWxlbWVudCkpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhwYXJlbnRFbGVtZW50LCAnYmxvY2stdWlfX2VsZW1lbnQnKTtcbiAgICAgICAgdGhpcy5ibG9ja1VJQ29tcG9uZW50UmVmID0gdGhpcy5jcmVhdGVDb21wb25lbnQoKTtcbiAgICAgICAgbGV0IGJsb2NrVUlDb250ZW50ID0gdGhpcy5maW5kQ29udGVudE5vZGUodGhpcy52aWV3UmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKGJsb2NrVUlDb250ZW50KSB7XG4gICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmJsb2NrVUlJbnN0YW5jZVNlcnZpY2UuZ2V0U2V0dGluZ3MoKTtcblxuICAgICAgICAgIHBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoYmxvY2tVSUNvbnRlbnQpO1xuICAgICAgICAgIHRoaXMuYmxvY2tVSUNvbXBvbmVudFJlZi5pbnN0YW5jZS5jbGFzc05hbWUgPSAnYmxvY2stdWktd3JhcHBlci0tZWxlbWVudCc7XG4gICAgICAgICAgdGhpcy5ibG9ja1VJQ29tcG9uZW50UmVmLmluc3RhbmNlLm5hbWUgPSB0aGlzLmJsb2NrVGFyZ2V0IHx8IEJsb2NrVUlEZWZhdWx0TmFtZTtcbiAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlKSB0aGlzLmJsb2NrVUlDb21wb25lbnRSZWYuaW5zdGFuY2UuZGVmYXVsdE1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2U7XG4gICAgICAgICAgaWYgKHRoaXMuZGVsYXlTdGFydCkgdGhpcy5ibG9ja1VJQ29tcG9uZW50UmVmLmluc3RhbmNlLmRlbGF5U3RhcnQgPSB0aGlzLmRlbGF5U3RhcnQ7XG4gICAgICAgICAgaWYgKHRoaXMuZGVsYXlTdG9wKSB0aGlzLmJsb2NrVUlDb21wb25lbnRSZWYuaW5zdGFuY2UuZGVsYXlTdG9wID0gdGhpcy5kZWxheVN0b3A7XG4gICAgICAgICAgaWYgKHRoaXMudGVtcGxhdGUgfHwgc2V0dGluZ3MudGVtcGxhdGUpXG4gICAgICAgICAgICB0aGlzLmJsb2NrVUlDb21wb25lbnRSZWYuaW5zdGFuY2UudGVtcGxhdGVDbXAgPSB0aGlzLnRlbXBsYXRlIHx8IHNldHRpbmdzLnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ25nLWJsb2NrLXVpOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzQ29tcG9uZW50SW5UZW1wbGF0ZShlbGVtZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICAvLyBOZWVkZWQgYmVjYXVzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI2MjM1XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGVsZW1lbnQgfHwge307XG4gICAgbGV0IHsgY2hpbGRyZW4gfSA9IHRhcmdldEVsZW1lbnQ7XG4gICAgY2hpbGRyZW4gPSBBcnJheS5mcm9tKGNoaWxkcmVuIHx8IFtdKS5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIGNoaWxkcmVuLnNvbWUoKGVsOiBhbnkpID0+IGVsICYmIGVsLmxvY2FsTmFtZSA9PT0gJ2Jsb2NrLXVpJyk7XG4gIH1cblxuICBwcml2YXRlIGdldFBhcmVudEVsZW1lbnQoKTogRWxlbWVudCB7XG4gICAgY29uc3QgZW1iZWRkZWRWaWV3ID0gdGhpcy52aWV3UmVmLmdldCgwKSBhcyBFbWJlZGRlZFZpZXdSZWY8YW55PjtcblxuICAgIHJldHVybiBlbWJlZGRlZFZpZXcucm9vdE5vZGVzWzBdO1xuXG4gIH1cblxuICAvLyBOZWVkZWQgZm9yIElFICgjMTcpXG4gIHByaXZhdGUgZmluZENvbnRlbnROb2RlKGVsZW1lbnQ6IGFueSkge1xuICAgIGNvbnN0IG5leHRTaWJsaW5nID0gZWxlbWVudC5uZXh0U2libGluZyB8fCB7fTtcbiAgICBjb25zdCBwcmV2aW91c1NpYmxpbmcgPSBlbGVtZW50LnByZXZpb3VzU2libGluZyB8fCB7fTtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXh0U2libGluZyxcbiAgICAgIG5leHRTaWJsaW5nLm5leHRTaWJsaW5nLFxuICAgICAgcHJldmlvdXNTaWJsaW5nLFxuICAgICAgcHJldmlvdXNTaWJsaW5nLnByZXZpb3VzU2libGluZ1xuICAgIF0uZmluZCgoZSkgPT4gZSAmJiBlLmxvY2FsTmFtZSA9PT0gJ2Jsb2NrLXVpLWNvbnRlbnQnKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29tcG9uZW50KCkge1xuICAgIGNvbnN0IHJlc29sdmVkQmxvY2tVSUNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KEJsb2NrVUlDb250ZW50Q29tcG9uZW50KTtcbiAgICByZXR1cm4gdGhpcy52aWV3UmVmLmNyZWF0ZUNvbXBvbmVudChyZXNvbHZlZEJsb2NrVUlDb21wb25lbnQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuYmxvY2tUYXJnZXQpIHtcbiAgICAgIHRoaXMuYmxvY2tVSVNlcnZpY2UucmVzZXQodGhpcy5ibG9ja1RhcmdldCk7XG4gICAgfVxuICB9XG59XG4iXX0=