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
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';
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=