UNPKG

@greg-md/ng-flex-css-layout

Version:

Flex-CSS-Layout is an alternative behaviour of Flex-Layout directives, that will still work with Angular Universal and App Shell.

261 lines (260 loc) 17.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Directive, ElementRef, Input, Renderer2, Optional, Host } from '@angular/core'; import { ReplaySubject } from 'rxjs'; import { FlexCssService } from './flex-css.service'; import { BaseDirective } from './directive'; import { LayoutDirective } from './layout.directive'; var FlexAlignDirective = /** @class */ (function (_super) { tslib_1.__extends(FlexAlignDirective, _super); function FlexAlignDirective(elementRef, renderer, service, layout) { var _this = _super.call(this, elementRef, renderer) || this; _this.service = service; _this.fcValues = {}; _this.observer$ = new ReplaySubject(1); if (layout && layout.elementRef.nativeElement === _this.parentElement) { _this.layout = layout; } return _this; } Object.defineProperty(FlexAlignDirective.prototype, "align", { set: /** * @param {?} val * @return {?} */ function (val) { this.fcValues['all'] = val; }, enumerable: true, configurable: true }); Object.defineProperty(FlexAlignDirective.prototype, "alignXs", { set: /** * @param {?} val * @return {?} */ function (val) { this.fcValues['xs'] = val; }, enumerable: true, configurable: true }); Object.defineProperty(FlexAlignDirective.prototype, "alignSm", { set: /** * @param {?} val * @return {?} */ function (val) { this.fcValues['sm'] = val; }, enumerable: true, configurable: true }); Object.defineProperty(FlexAlignDirective.prototype, "alignMd", { set: /** * @param {?} val * @return {?} */ function (val) { this.fcValues['md'] = val; }, enumerable: true, configurable: true }); Object.defineProperty(FlexAlignDirective.prototype, "alignLg", { set: /** * @param {?} val * @return {?} */ function (val) { this.fcValues['lg'] = val; }, enumerable: true, configurable: true }); Object.defineProperty(FlexAlignDirective.prototype, "alignXl", { set: /** * @param {?} val * @return {?} */ function (val) { this.fcValues['xl'] = val; }, enumerable: true, configurable: true }); Object.defineProperty(FlexAlignDirective.prototype, "alignGtXs", { set: /** * @param {?} val * @return {?} */ function (val) { this.fcValues['gt-xs'] = val; }, enumerable: true, configurable: true }); Object.defineProperty(FlexAlignDirective.prototype, "alignGtSm", { set: /** * @param {?} val * @return {?} */ function (val) { this.fcValues['gt-sm'] = val; }, enumerable: true, configurable: true }); Object.defineProperty(FlexAlignDirective.prototype, "alignGtMd", { set: /** * @param {?} val * @return {?} */ function (val) { this.fcValues['gt-md'] = val; }, enumerable: true, configurable: true }); Object.defineProperty(FlexAlignDirective.prototype, "alignGtLg", { set: /** * @param {?} val * @return {?} */ function (val) { this.fcValues['gt-lg'] = val; }, enumerable: true, configurable: true }); Object.defineProperty(FlexAlignDirective.prototype, "alignLtSm", { set: /** * @param {?} val * @return {?} */ function (val) { this.fcValues['lt-sm'] = val; }, enumerable: true, configurable: true }); Object.defineProperty(FlexAlignDirective.prototype, "alignLtMd", { set: /** * @param {?} val * @return {?} */ function (val) { this.fcValues['lt-md'] = val; }, enumerable: true, configurable: true }); Object.defineProperty(FlexAlignDirective.prototype, "alignLtLg", { set: /** * @param {?} val * @return {?} */ function (val) { this.fcValues['lt-lg'] = val; }, enumerable: true, configurable: true }); Object.defineProperty(FlexAlignDirective.prototype, "alignLtXl", { set: /** * @param {?} val * @return {?} */ function (val) { this.fcValues['lt-xl'] = val; }, enumerable: true, configurable: true }); /** * @return {?} */ FlexAlignDirective.prototype.ngOnInit = /** * @return {?} */ function () { this.dependsOnParentLayout(); }; /** * @return {?} */ FlexAlignDirective.prototype.ngOnChanges = /** * @return {?} */ function () { this.reload(); }; /** * @return {?} */ FlexAlignDirective.prototype.reload = /** * @return {?} */ function () { var _this = this; var /** @type {?} */ classNames = []; this.breakpoints.forEach(function (breakpoint) { classNames.push(_this.service.addFlexAlign(_this.fcValues[breakpoint], breakpoint)); }); this.setClassNames(classNames); this.observer$.next(this.fcValues); }; /** * @return {?} */ FlexAlignDirective.prototype.dependsOnParentLayout = /** * @return {?} */ function () { var _this = this; if (this.layout) { this.layout.addNewBreakpoints(this.breakpoints, 'row'); } else { this.breakpoints.forEach(function (breakpoint) { _this.renderer.addClass(_this.parentElement, _this.service.addLayout('row', breakpoint)); }); } }; Object.defineProperty(FlexAlignDirective.prototype, "parentElement", { get: /** * @return {?} */ function () { return this.renderer.parentNode(this.elementRef.nativeElement); }, enumerable: true, configurable: true }); Object.defineProperty(FlexAlignDirective.prototype, "breakpoints", { get: /** * @return {?} */ function () { return Object.keys(this.fcValues); }, enumerable: true, configurable: true }); FlexAlignDirective.decorators = [ { type: Directive, args: [{ selector: "\n [fcFlexAlign],\n [fcFlexAlign.xs], [fcFlexAlign.sm], [fcFlexAlign.md], [fcFlexAlign.lg], [fcFlexAlign.xl],\n [fcFlexAlign.lt-sm], [fcFlexAlign.lt-md], [fcFlexAlign.lt-lg], [fcFlexAlign.lt-xl],\n [fcFlexAlign.gt-xs], [fcFlexAlign.gt-sm], [fcFlexAlign.gt-md], [fcFlexAlign.gt-lg]\n ", },] }, ]; /** @nocollapse */ FlexAlignDirective.ctorParameters = function () { return [ { type: ElementRef }, { type: Renderer2 }, { type: FlexCssService }, { type: LayoutDirective, decorators: [{ type: Optional }, { type: Host }] } ]; }; FlexAlignDirective.propDecorators = { align: [{ type: Input, args: ['fcFlexAlign',] }], alignXs: [{ type: Input, args: ['fcFlexAlign.xs',] }], alignSm: [{ type: Input, args: ['fcFlexAlign.sm',] }], alignMd: [{ type: Input, args: ['fcFlexAlign.md',] }], alignLg: [{ type: Input, args: ['fcFlexAlign.lg',] }], alignXl: [{ type: Input, args: ['fcFlexAlign.xl',] }], alignGtXs: [{ type: Input, args: ['fcFlexAlign.gt-xs',] }], alignGtSm: [{ type: Input, args: ['fcFlexAlign.gt-sm',] }], alignGtMd: [{ type: Input, args: ['fcFlexAlign.gt-md',] }], alignGtLg: [{ type: Input, args: ['fcFlexAlign.gt-lg',] }], alignLtSm: [{ type: Input, args: ['fcFlexAlign.lt-sm',] }], alignLtMd: [{ type: Input, args: ['fcFlexAlign.lt-md',] }], alignLtLg: [{ type: Input, args: ['fcFlexAlign.lt-lg',] }], alignLtXl: [{ type: Input, args: ['fcFlexAlign.lt-xl',] }] }; return FlexAlignDirective; }(BaseDirective)); export { FlexAlignDirective }; function FlexAlignDirective_tsickle_Closure_declarations() { /** @type {?} */ FlexAlignDirective.prototype.fcValues; /** @type {?} */ FlexAlignDirective.prototype.observer$; /** @type {?} */ FlexAlignDirective.prototype.layout; /** @type {?} */ FlexAlignDirective.prototype.service; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxleC1hbGlnbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ3JlZy1tZC9uZy1mbGV4LWNzcy1sYXlvdXQvIiwic291cmNlcyI6WyJsaWIvZmxleC1hbGlnbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0lBVWIsOENBQWE7SUF3Qm5ELDRCQUNFLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ1gsU0FDWSxNQUF1QjtRQUo3QyxZQU1FLGtCQUFNLFVBQVUsRUFBRSxRQUFRLENBQUMsU0FLNUI7UUFSUyxhQUFPLEdBQVAsT0FBTzt5QkExQk4sRUFBRTswQkFFRCxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUE2QjlCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsS0FBSyxLQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNyRSxLQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztTQUN0Qjs7S0FDRjtJQTVCRCxzQkFBZ0MscUNBQUs7Ozs7O1FBQXJDLFVBQXNDLEdBQUcsSUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUM5RSxzQkFBZ0MsdUNBQU87Ozs7O1FBQXZDLFVBQXdDLEdBQUcsSUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUM3RSxzQkFBZ0MsdUNBQU87Ozs7O1FBQXZDLFVBQXdDLEdBQUcsSUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUM3RSxzQkFBZ0MsdUNBQU87Ozs7O1FBQXZDLFVBQXdDLEdBQUcsSUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUM3RSxzQkFBZ0MsdUNBQU87Ozs7O1FBQXZDLFVBQXdDLEdBQUcsSUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUM3RSxzQkFBZ0MsdUNBQU87Ozs7O1FBQXZDLFVBQXdDLEdBQUcsSUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUU3RSxzQkFBZ0MseUNBQVM7Ozs7O1FBQXpDLFVBQTBDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUNoRixzQkFBZ0MseUNBQVM7Ozs7O1FBQXpDLFVBQTBDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUNoRixzQkFBZ0MseUNBQVM7Ozs7O1FBQXpDLFVBQTBDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUNoRixzQkFBZ0MseUNBQVM7Ozs7O1FBQXpDLFVBQTBDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUVoRixzQkFBZ0MseUNBQVM7Ozs7O1FBQXpDLFVBQTBDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUNoRixzQkFBZ0MseUNBQVM7Ozs7O1FBQXpDLFVBQTBDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUNoRixzQkFBZ0MseUNBQVM7Ozs7O1FBQXpDLFVBQTBDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUNoRixzQkFBZ0MseUNBQVM7Ozs7O1FBQXpDLFVBQTBDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTs7OztJQWVoRixxQ0FBUTs7O0lBQVI7UUFDRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztLQUM5Qjs7OztJQUVELHdDQUFXOzs7SUFBWDtRQUNFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUNmOzs7O0lBRUQsbUNBQU07OztJQUFOO1FBQUEsaUJBWUM7UUFYQyxxQkFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXRCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQUEsVUFBVTtZQUNqQyxVQUFVLENBQUMsSUFBSSxDQUNiLEtBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQ2pFLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNwQzs7OztJQUVELGtEQUFxQjs7O0lBQXJCO1FBQUEsaUJBUUM7UUFQQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDeEQ7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQUEsVUFBVTtnQkFDakMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSSxDQUFDLGFBQWEsRUFBRSxLQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQzthQUN2RixDQUFDLENBQUM7U0FDSjtLQUNGO0lBRUQsc0JBQUksNkNBQWE7Ozs7UUFBakI7WUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNoRTs7O09BQUE7SUFFRCxzQkFBSSwyQ0FBVzs7OztRQUFmO1lBQ0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25DOzs7T0FBQTs7Z0JBbkZGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsMFNBS1Q7aUJBQ0Y7Ozs7Z0JBZG1CLFVBQVU7Z0JBQWlCLFNBQVM7Z0JBRy9DLGNBQWM7Z0JBRWQsZUFBZSx1QkFzQ25CLFFBQVEsWUFBSSxJQUFJOzs7d0JBckJsQixLQUFLLFNBQUMsYUFBYTswQkFDbkIsS0FBSyxTQUFDLGdCQUFnQjswQkFDdEIsS0FBSyxTQUFDLGdCQUFnQjswQkFDdEIsS0FBSyxTQUFDLGdCQUFnQjswQkFDdEIsS0FBSyxTQUFDLGdCQUFnQjswQkFDdEIsS0FBSyxTQUFDLGdCQUFnQjs0QkFFdEIsS0FBSyxTQUFDLG1CQUFtQjs0QkFDekIsS0FBSyxTQUFDLG1CQUFtQjs0QkFDekIsS0FBSyxTQUFDLG1CQUFtQjs0QkFDekIsS0FBSyxTQUFDLG1CQUFtQjs0QkFFekIsS0FBSyxTQUFDLG1CQUFtQjs0QkFDekIsS0FBSyxTQUFDLG1CQUFtQjs0QkFDekIsS0FBSyxTQUFDLG1CQUFtQjs0QkFDekIsS0FBSyxTQUFDLG1CQUFtQjs7NkJBckM1QjtFQWV3QyxhQUFhO1NBQXhDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT25Jbml0LCBJbnB1dCwgUmVuZGVyZXIyLCBPcHRpb25hbCwgSG9zdCwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZsZXhDc3NTZXJ2aWNlIH0gZnJvbSAnLi9mbGV4LWNzcy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMYXlvdXREaXJlY3RpdmUgfSBmcm9tICcuL2xheW91dC5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IGBcbiAgICBbZmNGbGV4QWxpZ25dLFxuICAgIFtmY0ZsZXhBbGlnbi54c10sIFtmY0ZsZXhBbGlnbi5zbV0sIFtmY0ZsZXhBbGlnbi5tZF0sIFtmY0ZsZXhBbGlnbi5sZ10sIFtmY0ZsZXhBbGlnbi54bF0sXG4gICAgW2ZjRmxleEFsaWduLmx0LXNtXSwgW2ZjRmxleEFsaWduLmx0LW1kXSwgW2ZjRmxleEFsaWduLmx0LWxnXSwgW2ZjRmxleEFsaWduLmx0LXhsXSxcbiAgICBbZmNGbGV4QWxpZ24uZ3QteHNdLCBbZmNGbGV4QWxpZ24uZ3Qtc21dLCBbZmNGbGV4QWxpZ24uZ3QtbWRdLCBbZmNGbGV4QWxpZ24uZ3QtbGddXG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIEZsZXhBbGlnbkRpcmVjdGl2ZSBleHRlbmRzIEJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIGZjVmFsdWVzID0ge307XG5cbiAgb2JzZXJ2ZXIkID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG5cbiAgcHJpdmF0ZSBsYXlvdXQ6IExheW91dERpcmVjdGl2ZTtcblxuICBASW5wdXQoJ2ZjRmxleEFsaWduJykgICAgICAgc2V0IGFsaWduKHZhbCkgICAgIHsgdGhpcy5mY1ZhbHVlc1snYWxsJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXhBbGlnbi54cycpICAgIHNldCBhbGlnblhzKHZhbCkgICB7IHRoaXMuZmNWYWx1ZXNbJ3hzJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXhBbGlnbi5zbScpICAgIHNldCBhbGlnblNtKHZhbCkgICB7IHRoaXMuZmNWYWx1ZXNbJ3NtJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXhBbGlnbi5tZCcpICAgIHNldCBhbGlnbk1kKHZhbCkgICB7IHRoaXMuZmNWYWx1ZXNbJ21kJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXhBbGlnbi5sZycpICAgIHNldCBhbGlnbkxnKHZhbCkgICB7IHRoaXMuZmNWYWx1ZXNbJ2xnJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXhBbGlnbi54bCcpICAgIHNldCBhbGlnblhsKHZhbCkgICB7IHRoaXMuZmNWYWx1ZXNbJ3hsJ10gPSB2YWw7IH1cblxuICBASW5wdXQoJ2ZjRmxleEFsaWduLmd0LXhzJykgc2V0IGFsaWduR3RYcyh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snZ3QteHMnXSA9IHZhbDsgfVxuICBASW5wdXQoJ2ZjRmxleEFsaWduLmd0LXNtJykgc2V0IGFsaWduR3RTbSh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snZ3Qtc20nXSA9IHZhbDsgfVxuICBASW5wdXQoJ2ZjRmxleEFsaWduLmd0LW1kJykgc2V0IGFsaWduR3RNZCh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snZ3QtbWQnXSA9IHZhbDsgfVxuICBASW5wdXQoJ2ZjRmxleEFsaWduLmd0LWxnJykgc2V0IGFsaWduR3RMZyh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snZ3QtbGcnXSA9IHZhbDsgfVxuXG4gIEBJbnB1dCgnZmNGbGV4QWxpZ24ubHQtc20nKSBzZXQgYWxpZ25MdFNtKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydsdC1zbSddID0gdmFsOyB9XG4gIEBJbnB1dCgnZmNGbGV4QWxpZ24ubHQtbWQnKSBzZXQgYWxpZ25MdE1kKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydsdC1tZCddID0gdmFsOyB9XG4gIEBJbnB1dCgnZmNGbGV4QWxpZ24ubHQtbGcnKSBzZXQgYWxpZ25MdExnKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydsdC1sZyddID0gdmFsOyB9XG4gIEBJbnB1dCgnZmNGbGV4QWxpZ24ubHQteGwnKSBzZXQgYWxpZ25MdFhsKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydsdC14bCddID0gdmFsOyB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc2VydmljZTogRmxleENzc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBsYXlvdXQ6IExheW91dERpcmVjdGl2ZSxcbiAgKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZiwgcmVuZGVyZXIpO1xuXG4gICAgaWYgKGxheW91dCAmJiBsYXlvdXQuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50ID09PSB0aGlzLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGVwZW5kc09uUGFyZW50TGF5b3V0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcmVsb2FkKCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXTtcblxuICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaChcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmFkZEZsZXhBbGlnbih0aGlzLmZjVmFsdWVzW2JyZWFrcG9pbnRdLCBicmVha3BvaW50KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0Q2xhc3NOYW1lcyhjbGFzc05hbWVzKTtcblxuICAgIHRoaXMub2JzZXJ2ZXIkLm5leHQodGhpcy5mY1ZhbHVlcyk7XG4gIH1cblxuICBkZXBlbmRzT25QYXJlbnRMYXlvdXQoKSB7XG4gICAgaWYgKHRoaXMubGF5b3V0KSB7XG4gICAgICB0aGlzLmxheW91dC5hZGROZXdCcmVha3BvaW50cyh0aGlzLmJyZWFrcG9pbnRzLCAncm93Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnBhcmVudEVsZW1lbnQsIHRoaXMuc2VydmljZS5hZGRMYXlvdXQoJ3JvdycsIGJyZWFrcG9pbnQpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYXJlbnRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmVudE5vZGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgZ2V0IGJyZWFrcG9pbnRzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZjVmFsdWVzKTtcbiAgfVxufVxuIl19