UNPKG

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
/** * @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==