ng-modals
Version:
Make a modal in angular extremely easily with ng-modals. Installation to have a modal pop up is quick and easy.
200 lines • 17.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, Output, EventEmitter, ViewChild, ComponentFactoryResolver, Directive, ViewContainerRef, TemplateRef, HostListener } from '@angular/core';
var NgModalsDirective = /** @class */ (function () {
function NgModalsDirective(containers) {
this.containers = containers;
}
NgModalsDirective.decorators = [
{ type: Directive, args: [{
selector: '[ngmodals]'
},] }
];
/** @nocollapse */
NgModalsDirective.ctorParameters = function () { return [
{ type: ViewContainerRef }
]; };
return NgModalsDirective;
}());
export { NgModalsDirective };
if (false) {
/** @type {?} */
NgModalsDirective.prototype.containers;
}
var NgModalsComponent = /** @class */ (function () {
function NgModalsComponent(componentFactoryResolver) {
this.componentFactoryResolver = componentFactoryResolver;
this.close = new EventEmitter();
this.css = {};
this.viewIsInit = false;
this.initialClick = false;
}
/**
* @param {?} targetElement
* @return {?}
*/
NgModalsComponent.prototype.onclick = /**
* @param {?} targetElement
* @return {?}
*/
function (targetElement) {
if (this.initialClick) {
/** @type {?} */
var clickedInside = document.getElementById("modelContainer").contains(targetElement);
if (!clickedInside) {
this.closeModal();
}
}
};
/**
* @return {?}
*/
NgModalsComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
NgModalsComponent.prototype.ngOnChanges = /**
* @return {?}
*/
function () {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
_this.loadComponent();
}), 10);
};
/**
* @return {?}
*/
NgModalsComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
this.loadComponent();
this.viewIsInit = true;
};
/**
* @return {?}
*/
NgModalsComponent.prototype.loadComponent = /**
* @return {?}
*/
function () {
var _this = this;
if (this.condition) {
/** @type {?} */
var contain = document.getElementById('modelContainer');
if (this.options.ignore) {
if (this.options.width) {
contain.style.width = this.options.width + "vw";
contain.style.left = this.options.left + "vw";
}
if (this.options.height) {
contain.style.height = this.options.height + "vh";
contain.style.top = ((100 - (parseInt(this.options.height))) / 2) + "vh";
}
}
else {
if (this.options.width) {
contain.style.width = this.options.width + "vw";
contain.style.left = ((100 - (parseInt(this.options.width))) / 2) + "vw";
}
if (this.options.height) {
contain.style.height = this.options.height + "vh";
contain.style.top = ((100 - (parseInt(this.options.height))) / 2) + "vh";
}
}
if (this.options.background) {
contain.style.background = this.options.background;
contain.style.boxShadow = 'none';
}
/** @type {?} */
var factory = this.componentFactoryResolver.resolveComponentFactory(this.options.component);
/** @type {?} */
var container = this.modalDirective.containers;
container.clear();
/** @type {?} */
var component = container.createComponent(factory);
((/** @type {?} */ (component.instance))).data = this.options.data;
((/** @type {?} */ (component.instance))).toggleModal.subscribe((/**
* @param {?} data
* @return {?}
*/
function (data) {
_this.closeModal();
}));
document.getElementById("mainWrapper").style.opacity = "1";
this.initialClick = true;
}
};
/**
* @return {?}
*/
NgModalsComponent.prototype.closeModal = /**
* @return {?}
*/
function () {
var _this = this;
this.initialClick = false;
document.getElementById("mainWrapper").style.opacity = "0";
setTimeout((/**
* @return {?}
*/
function () {
_this.close.emit();
}), 200);
};
NgModalsComponent.decorators = [
{ type: Component, args: [{
selector: 'ng-modals',
template: "\n <div class=\"mainWrapper\" *ngIf=\"condition\" id=\"mainWrapper\">\n <div class=\"modalContainer\" id=\"modelContainer\" #container>\n <ng-template ngmodals></ng-template>\n </div>\n </div>\n ",
styles: ["\n .mainWrapper{\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0,0,0,0.5);\n width: 100%;\n height: 100vh;\n opacity: 0;\n transition: opacity 0.2s ease-out;\n z-index: 1000;\n }\n .modalContainer{\n position: fixed;\n top: 15vh;\n left: 20vw;\n width: 60vw;\n height: 70vh;\n background: white;\n border-radius: 32px;\n box-shadow: 2px 2px 4px rgba(0,0,0,0.5);\n overflow-y: auto;\n }\n "]
}] }
];
/** @nocollapse */
NgModalsComponent.ctorParameters = function () { return [
{ type: ComponentFactoryResolver }
]; };
NgModalsComponent.propDecorators = {
options: [{ type: Input, args: ['options',] }],
condition: [{ type: Input, args: ['status',] }],
close: [{ type: Output, args: ['close',] }],
modalDirective: [{ type: ViewChild, args: [NgModalsDirective,] }],
container: [{ type: ViewChild, args: ['container',] }],
onclick: [{ type: HostListener, args: ['document:click', ['$event.target'],] }]
};
return NgModalsComponent;
}());
export { NgModalsComponent };
if (false) {
/** @type {?} */
NgModalsComponent.prototype.options;
/** @type {?} */
NgModalsComponent.prototype.condition;
/** @type {?} */
NgModalsComponent.prototype.close;
/** @type {?} */
NgModalsComponent.prototype.css;
/** @type {?} */
NgModalsComponent.prototype.viewIsInit;
/** @type {?} */
NgModalsComponent.prototype.modalDirective;
/** @type {?} */
NgModalsComponent.prototype.container;
/** @type {?} */
NgModalsComponent.prototype.initialClick;
/**
* @type {?}
* @private
*/
NgModalsComponent.prototype.componentFactoryResolver;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctbW9kYWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLW1vZGFscy8iLCJzb3VyY2VzIjpbImxpYi9uZy1tb2RhbHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBYyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbE47SUFJRSwyQkFBbUIsVUFBNEI7UUFBNUIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7SUFBSSxDQUFDOztnQkFKckQsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO2lCQUN2Qjs7OztnQkFOa0ksZ0JBQWdCOztJQVNuSix3QkFBQztDQUFBLEFBTEQsSUFLQztTQUZZLGlCQUFpQjs7O0lBQ2hCLHVDQUFtQzs7QUFHakQ7SUF5REUsMkJBQW9CLHdCQUFrRDtRQUFsRCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBZnJELFVBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JDLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBR25CLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBVThDLENBQUM7Ozs7O0lBUnhCLG1DQUFPOzs7O0lBQTFELFVBQTJELGFBQWE7UUFDdEUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFOztnQkFDZixhQUFhLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDdkYsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ25CO1NBQ0Y7SUFDSCxDQUFDOzs7O0lBR0Qsb0NBQVE7OztJQUFSO0lBRUEsQ0FBQzs7OztJQUVE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SUFDMUIsMkNBQWdFOztJQUNoRSxzQ0FBb0Q7O0lBQ3BELHlDQUE0Qjs7Ozs7SUFVaEIscURBQTBEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgRGlyZWN0aXZlLCBWaWV3Q29udGFpbmVyUmVmLCBUZW1wbGF0ZVJlZiwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ01vZGFsc0ludGVyZmFjZSB9IGZyb20gJy4vaW50ZXJmYWNlL25nLW1vZGFscy5pbnRlcmZhY2UnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tuZ21vZGFsc10nXG59KVxuZXhwb3J0IGNsYXNzIE5nTW9kYWxzRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IocHVibGljIGNvbnRhaW5lcnM6IFZpZXdDb250YWluZXJSZWYpIHsgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZy1tb2RhbHMnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJtYWluV3JhcHBlclwiICpuZ0lmPVwiY29uZGl0aW9uXCIgaWQ9XCJtYWluV3JhcHBlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsQ29udGFpbmVyXCIgaWQ9XCJtb2RlbENvbnRhaW5lclwiICNjb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZ21vZGFscz48L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5tYWluV3JhcHBlcntcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC41KTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwdmg7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLW91dDtcbiAgICAgICAgei1pbmRleDogMTAwMDtcbiAgICAgIH1cbiAgICAgIC5tb2RhbENvbnRhaW5lcntcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICB0b3A6IDE1dmg7XG4gICAgICAgIGxlZnQ6IDIwdnc7XG4gICAgICAgIHdpZHRoOiA2MHZ3O1xuICAgICAgICBoZWlnaHQ6IDcwdmg7XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAzMnB4O1xuICAgICAgICBib3gtc2hhZG93OiAycHggMnB4IDRweCByZ2JhKDAsMCwwLDAuNSk7XG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICB9XG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE5nTW9kYWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgnb3B0aW9ucycpIG9wdGlvbnM7XG4gIEBJbnB1dCgnc3RhdHVzJykgY29uZGl0aW9uO1xuICBAT3V0cHV0KCdjbG9zZScpIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgY3NzID0ge307XG4gIHB1YmxpYyB2aWV3SXNJbml0ID0gZmFsc2U7XG4gIEBWaWV3Q2hpbGQoTmdNb2RhbHNEaXJlY3RpdmUpIG1vZGFsRGlyZWN0aXZlOiBOZ01vZGFsc0RpcmVjdGl2ZTtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwdWJsaWMgaW5pdGlhbENsaWNrID0gZmFsc2U7XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudC50YXJnZXQnXSkgb25jbGljayh0YXJnZXRFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbENsaWNrKSB7XG4gICAgICBjb25zdCBjbGlja2VkSW5zaWRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtb2RlbENvbnRhaW5lclwiKS5jb250YWlucyh0YXJnZXRFbGVtZW50KTtcbiAgICAgIGlmICghY2xpY2tlZEluc2lkZSkge1xuICAgICAgICB0aGlzLmNsb3NlTW9kYWwoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkQ29tcG9uZW50KCk7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMubG9hZENvbXBvbmVudCgpO1xuICAgIHRoaXMudmlld0lzSW5pdCA9IHRydWU7XG4gIH1cblxuICBsb2FkQ29tcG9uZW50KCkge1xuICAgIGlmICh0aGlzLmNvbmRpdGlvbikge1xuICAgICAgbGV0IGNvbnRhaW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWxDb250YWluZXInKTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMud2lkdGgpIHtcbiAgICAgICAgICBjb250YWluLnN0eWxlLndpZHRoID0gdGhpcy5vcHRpb25zLndpZHRoICsgXCJ2d1wiO1xuICAgICAgICAgIGNvbnRhaW4uc3R5bGUubGVmdCA9IHRoaXMub3B0aW9ucy5sZWZ0ICsgXCJ2d1wiO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGVpZ2h0KSB7XG4gICAgICAgICAgY29udGFpbi5zdHlsZS5oZWlnaHQgPSB0aGlzLm9wdGlvbnMuaGVpZ2h0ICsgXCJ2aFwiO1xuICAgICAgICAgIGNvbnRhaW4uc3R5bGUudG9wID0gKCgxMDAgLSAocGFyc2VJbnQodGhpcy5vcHRpb25zLmhlaWdodCkpKSAvIDIpICsgXCJ2aFwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLndpZHRoKSB7XG4gICAgICAgICAgY29udGFpbi5zdHlsZS53aWR0aCA9IHRoaXMub3B0aW9ucy53aWR0aCArIFwidndcIjtcbiAgICAgICAgICBjb250YWluLnN0eWxlLmxlZnQgPSAoKDEwMCAtIChwYXJzZUludCh0aGlzLm9wdGlvbnMud2lkdGgpKSkgLyAyKSArIFwidndcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhlaWdodCkge1xuICAgICAgICAgIGNvbnRhaW4uc3R5bGUuaGVpZ2h0ID0gdGhpcy5vcHRpb25zLmhlaWdodCArIFwidmhcIjtcbiAgICAgICAgICBjb250YWluLnN0eWxlLnRvcCA9ICgoMTAwIC0gKHBhcnNlSW50KHRoaXMub3B0aW9ucy5oZWlnaHQpKSkgLyAyKSArIFwidmhcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kKSB7XG4gICAgICAgIGNvbnRhaW4uc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kO1xuICAgICAgICBjb250YWluLnN0eWxlLmJveFNoYWRvdyA9ICdub25lJztcbiAgICAgIH1cbiAgICAgIGxldCBmYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy5vcHRpb25zLmNvbXBvbmVudCk7XG4gICAgICBsZXQgY29udGFpbmVyID0gdGhpcy5tb2RhbERpcmVjdGl2ZS5jb250YWluZXJzO1xuICAgICAgY29udGFpbmVyLmNsZWFyKCk7XG4gICAgICBsZXQgY29tcG9uZW50ID0gY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcbiAgICAgICg8TmdNb2RhbHNJbnRlcmZhY2U+Y29tcG9uZW50Lmluc3RhbmNlKS5kYXRhID0gdGhpcy5vcHRpb25zLmRhdGE7XG4gICAgICAoPE5nTW9kYWxzSW50ZXJmYWNlPmNvbXBvbmVudC5pbnN0YW5jZSkudG9nZ2xlTW9kYWwuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlTW9kYWwoKTtcbiAgICAgIH0pXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1haW5XcmFwcGVyXCIpLnN0eWxlLm9wYWNpdHkgPSBcIjFcIjtcbiAgICAgIHRoaXMuaW5pdGlhbENsaWNrID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBjbG9zZU1vZGFsKCkge1xuICAgIHRoaXMuaW5pdGlhbENsaWNrID0gZmFsc2U7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluV3JhcHBlclwiKS5zdHlsZS5vcGFjaXR5ID0gXCIwXCI7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNsb3NlLmVtaXQoKTtcbiAgICB9LCAyMDApO1xuICB9XG5cbn1cbiJdfQ==