@lunaeme/circe-modal
Version:
Circe :: Angular Modal Component
180 lines • 19.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output } from '@angular/core';
import { BoxModelService, EventsService } from '@lunaeme/circe-core';
var ModalComponent = /** @class */ (function () {
function ModalComponent(ev, _el, _bm) {
this.ev = ev;
this._el = _el;
this._bm = _bm;
this.clickOutside = false;
this.clickOutsideExceptions = [];
this.close = new EventEmitter();
this._element = _el.nativeElement;
}
/**
* @private
* @return {?}
*/
ModalComponent.prototype._adjustContentBody = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var _modalContentBody = this._bm.getElement('content__body');
if (this._element.contains(_modalContentBody)) {
/** @type {?} */
var _contentBody = this._bm.getBoxModel('content__body');
/** @type {?} */
var _headerAggregated = 0;
if (this.title || this.closeButton) {
/** @type {?} */
var _contentHeader = this._bm.getBoxModel('content__header');
_headerAggregated = _contentHeader.boxModelAggregated;
}
/** @type {?} */
var _cssCalcHeight = "calc(100% - " + _headerAggregated + "px + " + _contentBody.boxModelAdditions + "px)";
((/** @type {?} */ (_modalContentBody))).style.height = _cssCalcHeight;
((/** @type {?} */ (_modalContentBody))).style.minHeight = _cssCalcHeight;
}
};
/**
* @return {?}
*/
ModalComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _a;
this.titleAddClass = (_a = {},
_a[this.titleClass] = !!this.titleClass,
_a);
};
/**
* @return {?}
*/
ModalComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
/** @type {?} */
var _modalComponent = document.getElementsByClassName('modal-component').item(0);
/** @type {?} */
var _modalCanvas = document.getElementsByClassName('modal__canvas').item(0);
if (this._element.contains(_modalComponent) && this._element.contains(_modalCanvas)) {
/** @type {?} */
var _modalComponentRect = _modalComponent.getBoundingClientRect();
/** @type {?} */
var _modalCanvasRect = _modalCanvas.getBoundingClientRect();
/** @type {?} */
var _fixed = this._bm.processSizeString(this.fixed);
if (_fixed && Object.keys(_fixed)) {
/** @type {?} */
var _modalCanvasWidth = (_fixed.with.unit === '%') ?
_modalComponentRect.width * _fixed.with.value / 100 : _fixed.with.value;
/** @type {?} */
var _modalCanvasHeight = (_fixed.height.unit === '%') ?
_modalComponentRect.height * _fixed.height.value / 100 : _fixed.height.value;
((/** @type {?} */ (_modalCanvas))).style.width = _modalCanvasWidth + 'px';
((/** @type {?} */ (_modalCanvas))).style.minWidth = _modalCanvasWidth + 'px';
((/** @type {?} */ (_modalCanvas))).style.height = _modalCanvasHeight + 'px';
((/** @type {?} */ (_modalCanvas))).style.minHeight = _modalCanvasHeight + 'px';
this._adjustContentBody();
}
else {
/** @type {?} */
var _modalCanvasMaxWidth = _modalComponentRect.width * 0.9;
/** @type {?} */
var _modalCanvasMaxHeight = _modalComponentRect.height * 0.9;
if (_modalCanvasRect.width > _modalCanvasMaxWidth) {
((/** @type {?} */ (_modalCanvas))).style.width = _modalCanvasMaxWidth + 'px';
((/** @type {?} */ (_modalCanvas))).style.minWidth = _modalCanvasMaxWidth + 'px';
}
if (_modalCanvasRect.height > _modalCanvasMaxHeight) {
((/** @type {?} */ (_modalCanvas))).style.height = _modalCanvasMaxHeight + 'px';
((/** @type {?} */ (_modalCanvas))).style.minHeight = _modalCanvasMaxHeight + 'px';
}
}
}
};
/**
* @return {?}
*/
ModalComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () { };
ModalComponent.decorators = [
{ type: Component, args: [{
selector: 'cc-modal',
template: "<div class=\"medea-tpl__layer modal-component\" [ngClass]=\"{noModalBg: !modalBackground}\">\n <div\n class=\"modal__canvas\"\n ccClickOutside\n [apply]=\"clickOutside\"\n [exceptions]=\"clickOutsideExceptions\"\n (clickOutside)=\"close.emit()\">\n <div class=\"modal__content\">\n <div class=\"content__header\" *ngIf=\"title || closeButton\" [ngClass]=\"{noBg: !titleBackground}\">\n <div class=\"header__left mda-fs__22\" [ngClass]=\"titleAddClass\">{{title}}</div>\n <div class=\"header__right\">\n <i\n class=\"mda-icon icon-cross mda-fs__18 modal__close\"\n *ngIf=\"closeButton\"\n (click)=\"ev.preventNoNeededEvent($event); close.emit();\"\n title=\"Close\">\n </i>\n </div>\n </div>\n <div\n class=\"content__body\"\n [ngStyle]=\"{\n padding: (noPadding) ? '0' : (!titleBackground) ? '0 20px 20px 20px' : '20px',\n 'box-sizing': (!titleBackground) ? 'content-box' : 'border-box'\n }\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>\n",
changeDetection: ChangeDetectionStrategy.OnPush,
styles: [".modal-component{display:flex;display:-ms-flexbox;flex-flow:row nowrap;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;-ms-flex-align:center;justify-content:center;-webkit-justify-content:center;position:absolute;z-index:10;left:0;top:0;width:100%;height:100%;background-color:rgba(17,17,17,.3);overflow:hidden}.modal-component.noModalBg{background-color:transparent}.modal-component .modal__canvas{background-color:#fff;border:1px solid #fff;border-radius:5px;box-shadow:0 1px 10px 0 rgba(85,85,85,.8)}.modal-component .modal__canvas .modal__content{overflow:hidden;width:100%;min-width:100%;height:100%;min-height:100%}.modal-component .modal__canvas .modal__content .content__header{display:flex;display:-ms-flexbox;flex-flow:row nowrap;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;-ms-flex-align:center;justify-content:space-between;-webkit-justify-content:space-between;padding:20px;background-color:#f4f4f4}.modal-component .modal__canvas .modal__content .content__header.noBg{background-color:#fff}.modal-component .modal__canvas .modal__content .content__header .header__right .modal__close{margin-left:15px;cursor:pointer}.modal-component .modal__canvas .modal__content .content__body{padding:20px;position:relative}"]
}] }
];
/** @nocollapse */
ModalComponent.ctorParameters = function () { return [
{ type: EventsService },
{ type: ElementRef },
{ type: BoxModelService }
]; };
ModalComponent.propDecorators = {
title: [{ type: Input }],
titleClass: [{ type: Input }],
titleBackground: [{ type: Input }],
closeButton: [{ type: Input }],
modalBackground: [{ type: Input }],
clickOutside: [{ type: Input }],
clickOutsideExceptions: [{ type: Input }],
fixed: [{ type: Input }],
noPadding: [{ type: Input }],
close: [{ type: Output }]
};
return ModalComponent;
}());
export { ModalComponent };
if (false) {
/** @type {?} */
ModalComponent.prototype.title;
/** @type {?} */
ModalComponent.prototype.titleClass;
/** @type {?} */
ModalComponent.prototype.titleBackground;
/** @type {?} */
ModalComponent.prototype.closeButton;
/** @type {?} */
ModalComponent.prototype.modalBackground;
/** @type {?} */
ModalComponent.prototype.clickOutside;
/** @type {?} */
ModalComponent.prototype.clickOutsideExceptions;
/** @type {?} */
ModalComponent.prototype.fixed;
/** @type {?} */
ModalComponent.prototype.noPadding;
/** @type {?} */
ModalComponent.prototype.close;
/** @type {?} */
ModalComponent.prototype.titleAddClass;
/**
* @type {?}
* @private
*/
ModalComponent.prototype._element;
/** @type {?} */
ModalComponent.prototype.ev;
/**
* @type {?}
* @private
*/
ModalComponent.prototype._el;
/**
* @type {?}
* @private
*/
ModalComponent.prototype._bm;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGx1bmFlbWUvY2lyY2UtbW9kYWwvIiwic291cmNlcyI6WyJsaWIvbW9kYWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBc0IsYUFBYSxFQUFjLE1BQU0scUJBQXFCLENBQUM7QUFFckc7SUFzQkUsd0JBQW1CLEVBQWlCLEVBQVUsR0FBZSxFQUFVLEdBQW9CO1FBQXhFLE9BQUUsR0FBRixFQUFFLENBQWU7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFZO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBaUI7UUFWbEYsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsMkJBQXNCLEdBQWtCLEVBQUUsQ0FBQztRQUcxQyxVQUFLLEdBQTBCLElBQUksWUFBWSxFQUFFLENBQUM7UUFPMUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO0lBQ3BDLENBQUM7Ozs7O0lBRU8sMkNBQWtCOzs7O0lBQTFCOztZQUNRLGlCQUFpQixHQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztRQUN2RSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7O2dCQUN2QyxZQUFZLEdBQXVCLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQzs7Z0JBQzFFLGlCQUFpQixHQUFXLENBQUM7WUFDakMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7O29CQUM1QixjQUFjLEdBQXVCLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLGlCQUFpQixD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ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJveE1vZGVsU2VydmljZSwgQm94TW9kZWxTd2FwT2JqZWN0LCBFdmVudHNTZXJ2aWNlLCBTaXplT2JqZWN0IH0gZnJvbSAnQGx1bmFlbWUvY2lyY2UtY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRpdGxlQ2xhc3M6IHN0cmluZztcbiAgQElucHV0KCkgdGl0bGVCYWNrZ3JvdW5kOiBib29sZWFuO1xuICBASW5wdXQoKSBjbG9zZUJ1dHRvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgbW9kYWxCYWNrZ3JvdW5kOiBib29sZWFuO1xuICBASW5wdXQoKSBjbGlja091dHNpZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY2xpY2tPdXRzaWRlRXhjZXB0aW9uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBASW5wdXQoKSBmaXhlZDogc3RyaW5nO1xuICBASW5wdXQoKSBub1BhZGRpbmc6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBjbG9zZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyB0aXRsZUFkZENsYXNzOiBhbnk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGV2OiBFdmVudHNTZXJ2aWNlLCBwcml2YXRlIF9lbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBfYm06IEJveE1vZGVsU2VydmljZSkge1xuICAgIHRoaXMuX2VsZW1lbnQgPSBfZWwubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgX2FkanVzdENvbnRlbnRCb2R5KCk6IHZvaWQge1xuICAgIGNvbnN0IF9tb2RhbENvbnRlbnRCb2R5OiBFbGVtZW50ID0gdGhpcy5fYm0uZ2V0RWxlbWVudCgnY29udGVudF9fYm9keScpO1xuICAgIGlmICh0aGlzLl9lbGVtZW50LmNvbnRhaW5zKF9tb2RhbENvbnRlbnRCb2R5KSkge1xuICAgICAgY29uc3QgX2NvbnRlbnRCb2R5OiBCb3hNb2RlbFN3YXBPYmplY3QgPSB0aGlzLl9ibS5nZXRCb3hNb2RlbCgnY29udGVudF9fYm9keScpO1xuICAgICAgbGV0IF9oZWFkZXJBZ2dyZWdhdGVkOiBudW1iZXIgPSAwO1xuICAgICAgaWYgKHRoaXMudGl0bGUgfHwgdGhpcy5jbG9zZUJ1dHRvbikge1xuICAgICAgICBjb25zdCBfY29udGVudEhlYWRlcjogQm94TW9kZWxTd2FwT2JqZWN0ID0gdGhpcy5fYm0uZ2V0Qm94TW9kZWwoJ2NvbnRlbnRfX2hlYWRlcicpO1xuICAgICAgICBfaGVhZGVyQWdncmVnYXRlZCA9IF9jb250ZW50SGVhZGVyLmJveE1vZGVsQWdncmVnYXRlZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IF9jc3NDYWxjSGVpZ2h0OiBzdHJpbmcgPSBgY2FsYygxMDAlIC0gJHtfaGVhZGVyQWdncmVnYXRlZH1weCArICR7X2NvbnRlbnRCb2R5LmJveE1vZGVsQWRkaXRpb25zfXB4KWA7XG4gICAgICAoX21vZGFsQ29udGVudEJvZHkgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmhlaWdodCA9IF9jc3NDYWxjSGVpZ2h0O1xuICAgICAgKF9tb2RhbENvbnRlbnRCb2R5IGFzIEhUTUxFbGVtZW50KS5zdHlsZS5taW5IZWlnaHQgPSBfY3NzQ2FsY0hlaWdodDtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRpdGxlQWRkQ2xhc3MgPSB7XG4gICAgICBbdGhpcy50aXRsZUNsYXNzXTogISF0aGlzLnRpdGxlQ2xhc3NcbiAgICB9O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IF9tb2RhbENvbXBvbmVudDogRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21vZGFsLWNvbXBvbmVudCcpLml0ZW0oMCk7XG4gICAgY29uc3QgX21vZGFsQ2FudmFzOiBFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbW9kYWxfX2NhbnZhcycpLml0ZW0oMCk7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuY29udGFpbnMoX21vZGFsQ29tcG9uZW50KSAmJiB0aGlzLl9lbGVtZW50LmNvbnRhaW5zKF9tb2RhbENhbnZhcykpIHtcbiAgICAgIGNvbnN0IF9tb2RhbENvbXBvbmVudFJlY3Q6IERPTVJlY3QgfCBDbGllbnRSZWN0ID0gX21vZGFsQ29tcG9uZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgX21vZGFsQ2FudmFzUmVjdDogRE9NUmVjdCB8IENsaWVudFJlY3QgPSBfbW9kYWxDYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBfZml4ZWQ6IFNpemVPYmplY3QgPSB0aGlzLl9ibS5wcm9jZXNzU2l6ZVN0cmluZyh0aGlzLmZpeGVkKTtcbiAgICAgIGlmIChfZml4ZWQgJiYgT2JqZWN0LmtleXMoX2ZpeGVkKSkge1xuICAgICAgICBjb25zdCBfbW9kYWxDYW52YXNXaWR0aDogbnVtYmVyID0gKF9maXhlZC53aXRoLnVuaXQgPT09ICclJykgP1xuICAgICAgICAgIF9tb2RhbENvbXBvbmVudFJlY3Qud2lkdGggKiBfZml4ZWQud2l0aC52YWx1ZSAvIDEwMCA6IF9maXhlZC53aXRoLnZhbHVlO1xuICAgICAgICBjb25zdCBfbW9kYWxDYW52YXNIZWlnaHQ6IG51bWJlciA9IChfZml4ZWQuaGVpZ2h0LnVuaXQgPT09ICclJykgP1xuICAgICAgICAgIF9tb2RhbENvbXBvbmVudFJlY3QuaGVpZ2h0ICogX2ZpeGVkLmhlaWdodC52YWx1ZSAvIDEwMCA6IF9maXhlZC5oZWlnaHQudmFsdWU7XG4gICAgICAgIChfbW9kYWxDYW52YXMgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLndpZHRoID0gX21vZGFsQ2FudmFzV2lkdGggKyAncHgnO1xuICAgICAgICAoX21vZGFsQ2FudmFzIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5taW5XaWR0aCA9IF9tb2RhbENhbnZhc1dpZHRoICsgJ3B4JztcbiAgICAgICAgKF9tb2RhbENhbnZhcyBhcyBIVE1MRWxlbWVudCkuc3R5bGUuaGVpZ2h0ID0gX21vZGFsQ2FudmFzSGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgKF9tb2RhbENhbnZhcyBhcyBIVE1MRWxlbWVudCkuc3R5bGUubWluSGVpZ2h0ID0gX21vZGFsQ2FudmFzSGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgdGhpcy5fYWRqdXN0Q29udGVudEJvZHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IF9tb2RhbENhbnZhc01heFdpZHRoOiBudW1iZXIgPSBfbW9kYWxDb21wb25lbnRSZWN0LndpZHRoICogMC45O1xuICAgICAgICBjb25zdCBfbW9kYWxDYW52YXNNYXhIZWlnaHQ6IG51bWJlciA9IF9tb2RhbENvbXBvbmVudFJlY3QuaGVpZ2h0ICogMC45O1xuICAgICAgICBpZiAoX21vZGFsQ2FudmFzUmVjdC53aWR0aCA+IF9tb2RhbENhbnZhc01heFdpZHRoKSB7XG4gICAgICAgICAgKF9tb2RhbENhbnZhcyBhcyBIVE1MRWxlbWVudCkuc3R5bGUud2lkdGggPSBfbW9kYWxDYW52YXNNYXhXaWR0aCArICdweCc7XG4gICAgICAgICAgKF9tb2RhbENhbnZhcyBhcyBIVE1MRWxlbWVudCkuc3R5bGUubWluV2lkdGggPSBfbW9kYWxDYW52YXNNYXhXaWR0aCArICdweCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9tb2RhbENhbnZhc1JlY3QuaGVpZ2h0ID4gX21vZGFsQ2FudmFzTWF4SGVpZ2h0KSB7XG4gICAgICAgICAgKF9tb2RhbENhbnZhcyBhcyBIVE1MRWxlbWVudCkuc3R5bGUuaGVpZ2h0ID0gX21vZGFsQ2FudmFzTWF4SGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgICAoX21vZGFsQ2FudmFzIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5taW5IZWlnaHQgPSBfbW9kYWxDYW52YXNNYXhIZWlnaHQgKyAncHgnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7fVxufVxuIl19