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.

211 lines 16.7 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'; export class NgModalsDirective { /** * @param {?} containers */ constructor(containers) { this.containers = containers; } } NgModalsDirective.decorators = [ { type: Directive, args: [{ selector: '[ngmodals]' },] } ]; /** @nocollapse */ NgModalsDirective.ctorParameters = () => [ { type: ViewContainerRef } ]; if (false) { /** @type {?} */ NgModalsDirective.prototype.containers; } export class NgModalsComponent { /** * @param {?} componentFactoryResolver */ constructor(componentFactoryResolver) { this.componentFactoryResolver = componentFactoryResolver; this.close = new EventEmitter(); this.css = {}; this.viewIsInit = false; this.initialClick = false; } /** * @param {?} targetElement * @return {?} */ onclick(targetElement) { if (this.initialClick) { /** @type {?} */ const clickedInside = document.getElementById("modelContainer").contains(targetElement); if (!clickedInside) { this.closeModal(); } } } /** * @return {?} */ ngOnInit() { } /** * @return {?} */ ngOnChanges() { setTimeout((/** * @return {?} */ () => { this.loadComponent(); }), 10); } /** * @return {?} */ ngAfterViewInit() { this.loadComponent(); this.viewIsInit = true; } /** * @return {?} */ loadComponent() { if (this.condition) { /** @type {?} */ let 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 {?} */ let factory = this.componentFactoryResolver.resolveComponentFactory(this.options.component); /** @type {?} */ let container = this.modalDirective.containers; container.clear(); /** @type {?} */ let component = container.createComponent(factory); ((/** @type {?} */ (component.instance))).data = this.options.data; ((/** @type {?} */ (component.instance))).toggleModal.subscribe((/** * @param {?} data * @return {?} */ data => { this.closeModal(); })); document.getElementById("mainWrapper").style.opacity = "1"; this.initialClick = true; } } /** * @return {?} */ closeModal() { this.initialClick = false; document.getElementById("mainWrapper").style.opacity = "0"; setTimeout((/** * @return {?} */ () => { this.close.emit(); }), 200); } } NgModalsComponent.decorators = [ { type: Component, args: [{ selector: 'ng-modals', template: ` <div class="mainWrapper" *ngIf="condition" id="mainWrapper"> <div class="modalContainer" id="modelContainer" #container> <ng-template ngmodals></ng-template> </div> </div> `, styles: [` .mainWrapper{ position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.5); width: 100%; height: 100vh; opacity: 0; transition: opacity 0.2s ease-out; z-index: 1000; } .modalContainer{ position: fixed; top: 15vh; left: 20vw; width: 60vw; height: 70vh; background: white; border-radius: 32px; box-shadow: 2px 2px 4px rgba(0,0,0,0.5); overflow-y: auto; } `] }] } ]; /** @nocollapse */ NgModalsComponent.ctorParameters = () => [ { 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'],] }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctbW9kYWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLW1vZGFscy8iLCJzb3VyY2VzIjpbImxpYi9uZy1tb2RhbHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBYyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPbE4sTUFBTSxPQUFPLGlCQUFpQjs7OztJQUM1QixZQUFtQixVQUE0QjtRQUE1QixlQUFVLEdBQVYsVUFBVSxDQUFrQjtJQUFJLENBQUM7OztZQUpyRCxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFlBQVk7YUFDdkI7Ozs7WUFOa0ksZ0JBQWdCOzs7O0lBUXJJLHVDQUFtQzs7QUF5Q2pELE1BQU0sT0FBTyxpQkFBaUI7Ozs7SUFtQjVCLFlBQW9CLHdCQUFrRDtRQUFsRCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBZnJELFVBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JDLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBR25CLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBVThDLENBQUM7Ozs7O0lBUnhCLE9BQU8sQ0FBQyxhQUFhO1FBQ3RFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTs7a0JBQ2YsYUFBYSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQ3ZGLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUNuQjtTQUNGO0lBQ0gsQ0FBQzs7OztJQUdELFFBQVE7SUFFUixDQUFDOzs7O0lBRUQsV0FBVztRQUNULFVBQVU7OztR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cG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIERpcmVjdGl2ZSwgVmlld0NvbnRhaW5lclJlZiwgVGVtcGxhdGVSZWYsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdNb2RhbHNJbnRlcmZhY2UgfSBmcm9tICcuL2ludGVyZmFjZS9uZy1tb2RhbHMuaW50ZXJmYWNlJztcblxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmdtb2RhbHNdJ1xufSlcbmV4cG9ydCBjbGFzcyBOZ01vZGFsc0RpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb250YWluZXJzOiBWaWV3Q29udGFpbmVyUmVmKSB7IH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmctbW9kYWxzJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibWFpbldyYXBwZXJcIiAqbmdJZj1cImNvbmRpdGlvblwiIGlkPVwibWFpbldyYXBwZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbENvbnRhaW5lclwiIGlkPVwibW9kZWxDb250YWluZXJcIiAjY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgbmdtb2RhbHM+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAubWFpbldyYXBwZXJ7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuNSk7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMHZoO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZS1vdXQ7XG4gICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICB9XG4gICAgICAubW9kYWxDb250YWluZXJ7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgdG9wOiAxNXZoO1xuICAgICAgICBsZWZ0OiAyMHZ3O1xuICAgICAgICB3aWR0aDogNjB2dztcbiAgICAgICAgaGVpZ2h0OiA3MHZoO1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMzJweDtcbiAgICAgICAgYm94LXNoYWRvdzogMnB4IDJweCA0cHggcmdiYSgwLDAsMCwwLjUpO1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgfVxuICAgIGBcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ01vZGFsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoJ29wdGlvbnMnKSBvcHRpb25zO1xuICBASW5wdXQoJ3N0YXR1cycpIGNvbmRpdGlvbjtcbiAgQE91dHB1dCgnY2xvc2UnKSBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIGNzcyA9IHt9O1xuICBwdWJsaWMgdmlld0lzSW5pdCA9IGZhbHNlO1xuICBAVmlld0NoaWxkKE5nTW9kYWxzRGlyZWN0aXZlKSBtb2RhbERpcmVjdGl2ZTogTmdNb2RhbHNEaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lcjogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHVibGljIGluaXRpYWxDbGljayA9IGZhbHNlO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pIG9uY2xpY2sodGFyZ2V0RWxlbWVudCkge1xuICAgIGlmICh0aGlzLmluaXRpYWxDbGljaykge1xuICAgICAgY29uc3QgY2xpY2tlZEluc2lkZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibW9kZWxDb250YWluZXJcIikuY29udGFpbnModGFyZ2V0RWxlbWVudCk7XG4gICAgICBpZiAoIWNsaWNrZWRJbnNpZGUpIHtcbiAgICAgICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9hZENvbXBvbmVudCgpO1xuICAgIH0sIDEwKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmxvYWRDb21wb25lbnQoKTtcbiAgICB0aGlzLnZpZXdJc0luaXQgPSB0cnVlO1xuICB9XG5cbiAgbG9hZENvbXBvbmVudCgpIHtcbiAgICBpZiAodGhpcy5jb25kaXRpb24pIHtcbiAgICAgIGxldCBjb250YWluID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsQ29udGFpbmVyJyk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLndpZHRoKSB7XG4gICAgICAgICAgY29udGFpbi5zdHlsZS53aWR0aCA9IHRoaXMub3B0aW9ucy53aWR0aCArIFwidndcIjtcbiAgICAgICAgICBjb250YWluLnN0eWxlLmxlZnQgPSB0aGlzLm9wdGlvbnMubGVmdCArIFwidndcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhlaWdodCkge1xuICAgICAgICAgIGNvbnRhaW4uc3R5bGUuaGVpZ2h0ID0gdGhpcy5vcHRpb25zLmhlaWdodCArIFwidmhcIjtcbiAgICAgICAgICBjb250YWluLnN0eWxlLnRvcCA9ICgoMTAwIC0gKHBhcnNlSW50KHRoaXMub3B0aW9ucy5oZWlnaHQpKSkgLyAyKSArIFwidmhcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy53aWR0aCkge1xuICAgICAgICAgIGNvbnRhaW4uc3R5bGUud2lkdGggPSB0aGlzLm9wdGlvbnMud2lkdGggKyBcInZ3XCI7XG4gICAgICAgICAgY29udGFpbi5zdHlsZS5sZWZ0ID0gKCgxMDAgLSAocGFyc2VJbnQodGhpcy5vcHRpb25zLndpZHRoKSkpIC8gMikgKyBcInZ3XCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oZWlnaHQpIHtcbiAgICAgICAgICBjb250YWluLnN0eWxlLmhlaWdodCA9IHRoaXMub3B0aW9ucy5oZWlnaHQgKyBcInZoXCI7XG4gICAgICAgICAgY29udGFpbi5zdHlsZS50b3AgPSAoKDEwMCAtIChwYXJzZUludCh0aGlzLm9wdGlvbnMuaGVpZ2h0KSkpIC8gMikgKyBcInZoXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja2dyb3VuZCkge1xuICAgICAgICBjb250YWluLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZDtcbiAgICAgICAgY29udGFpbi5zdHlsZS5ib3hTaGFkb3cgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgICBsZXQgZmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMub3B0aW9ucy5jb21wb25lbnQpO1xuICAgICAgbGV0IGNvbnRhaW5lciA9IHRoaXMubW9kYWxEaXJlY3RpdmUuY29udGFpbmVycztcbiAgICAgIGNvbnRhaW5lci5jbGVhcigpO1xuICAgICAgbGV0IGNvbXBvbmVudCA9IGNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoZmFjdG9yeSk7XG4gICAgICAoPE5nTW9kYWxzSW50ZXJmYWNlPmNvbXBvbmVudC5pbnN0YW5jZSkuZGF0YSA9IHRoaXMub3B0aW9ucy5kYXRhO1xuICAgICAgKDxOZ01vZGFsc0ludGVyZmFjZT5jb21wb25lbnQuaW5zdGFuY2UpLnRvZ2dsZU1vZGFsLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gICAgICB9KVxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluV3JhcHBlclwiKS5zdHlsZS5vcGFjaXR5ID0gXCIxXCI7XG4gICAgICB0aGlzLmluaXRpYWxDbGljayA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VNb2RhbCgpIHtcbiAgICB0aGlzLmluaXRpYWxDbGljayA9IGZhbHNlO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFpbldyYXBwZXJcIikuc3R5bGUub3BhY2l0eSA9IFwiMFwiO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jbG9zZS5lbWl0KCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG59XG4iXX0=