@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.
281 lines (280 loc) • 18.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Directive, ElementRef, Input, Renderer2, Optional, Host, SkipSelf } from '@angular/core';
import { ReplaySubject } from 'rxjs';
import { FlexCssService } from './flex-css.service';
import { BaseDirective } from './directive';
import { LayoutDirective } from './layout.directive';
var FlexDirective = /** @class */ (function (_super) {
tslib_1.__extends(FlexDirective, _super);
function FlexDirective(elementRef, renderer, service, layout) {
var _this = _super.call(this, elementRef, renderer) || this;
_this.service = service;
_this.fcValues = {};
_this.observer$ = new ReplaySubject(1);
_this.fcShrink = 1;
_this.fcGrow = 1;
if (layout && layout.elementRef.nativeElement === _this.parentElement) {
_this.layout = layout;
}
return _this;
}
Object.defineProperty(FlexDirective.prototype, "flex", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['all'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "flexXs", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['xs'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "flexSm", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['sm'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "flexMd", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['md'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "flexLg", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lg'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "flexXl", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['xl'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "flexGtXs", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-xs'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "flexGtSm", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-sm'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "flexGtMd", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-md'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "flexGtLg", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-lg'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "flexLtSm", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-sm'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "flexLtMd", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-md'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "flexLtLg", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-lg'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "flexLtXl", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-xl'] = val; },
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
FlexDirective.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.dependsOnParentLayout();
};
/**
* @return {?}
*/
FlexDirective.prototype.ngOnChanges = /**
* @return {?}
*/
function () {
this.reload();
};
/**
* @return {?}
*/
FlexDirective.prototype.reload = /**
* @return {?}
*/
function () {
var _this = this;
var /** @type {?} */ classNames = [];
this.breakpoints.forEach(function (breakpoint) {
Object.keys(_this.layoutValues).forEach(function (layoutBreakpoint) {
classNames.push(_this.service.addFlex(_this.layoutValues[layoutBreakpoint], layoutBreakpoint, _this.fcValues[breakpoint], breakpoint, _this.fcGrow, _this.fcShrink));
});
});
this.setClassNames(classNames);
this.observer$.next(this.fcValues);
};
/**
* @return {?}
*/
FlexDirective.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(FlexDirective.prototype, "layoutValues", {
get: /**
* @return {?}
*/
function () {
return this.layout ? this.layout.fcValues : { 'all': '' };
},
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "parentElement", {
get: /**
* @return {?}
*/
function () {
return this.renderer.parentNode(this.elementRef.nativeElement);
},
enumerable: true,
configurable: true
});
Object.defineProperty(FlexDirective.prototype, "breakpoints", {
get: /**
* @return {?}
*/
function () {
return Object.keys(this.fcValues);
},
enumerable: true,
configurable: true
});
FlexDirective.decorators = [
{ type: Directive, args: [{
selector: "\n [fcFlex],\n [fcFlex.xs], [fcFlex.sm], [fcFlex.md], [fcFlex.lg], [fcFlex.xl],\n [fcFlex.lt-sm], [fcFlex.lt-md], [fcFlex.lt-lg], [fcFlex.lt-xl],\n [fcFlex.gt-xs], [fcFlex.gt-sm], [fcFlex.gt-md], [fcFlex.gt-lg],\n ",
},] },
];
/** @nocollapse */
FlexDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: Renderer2 },
{ type: FlexCssService },
{ type: LayoutDirective, decorators: [{ type: Optional }, { type: Host }, { type: SkipSelf }] }
]; };
FlexDirective.propDecorators = {
fcShrink: [{ type: Input }],
fcGrow: [{ type: Input }],
flex: [{ type: Input, args: ['fcFlex',] }],
flexXs: [{ type: Input, args: ['fcFlex.xs',] }],
flexSm: [{ type: Input, args: ['fcFlex.sm',] }],
flexMd: [{ type: Input, args: ['fcFlex.md',] }],
flexLg: [{ type: Input, args: ['fcFlex.lg',] }],
flexXl: [{ type: Input, args: ['fcFlex.xl',] }],
flexGtXs: [{ type: Input, args: ['fcFlex.gt-xs',] }],
flexGtSm: [{ type: Input, args: ['fcFlex.gt-sm',] }],
flexGtMd: [{ type: Input, args: ['fcFlex.gt-md',] }],
flexGtLg: [{ type: Input, args: ['fcFlex.gt-lg',] }],
flexLtSm: [{ type: Input, args: ['fcFlex.lt-sm',] }],
flexLtMd: [{ type: Input, args: ['fcFlex.lt-md',] }],
flexLtLg: [{ type: Input, args: ['fcFlex.lt-lg',] }],
flexLtXl: [{ type: Input, args: ['fcFlex.lt-xl',] }]
};
return FlexDirective;
}(BaseDirective));
export { FlexDirective };
function FlexDirective_tsickle_Closure_declarations() {
/** @type {?} */
FlexDirective.prototype.fcValues;
/** @type {?} */
FlexDirective.prototype.observer$;
/** @type {?} */
FlexDirective.prototype.layout;
/** @type {?} */
FlexDirective.prototype.fcShrink;
/** @type {?} */
FlexDirective.prototype.fcGrow;
/** @type {?} */
FlexDirective.prototype.service;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxleC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ3JlZy1tZC9uZy1mbGV4LWNzcy1sYXlvdXQvIiwic291cmNlcyI6WyJsaWIvZmxleC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWEsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztJQVVsQix5Q0FBYTtJQTJCOUMsdUJBQ0UsVUFBc0IsRUFDdEIsUUFBbUIsRUFDWCxTQUN3QixNQUF1QjtRQUp6RCxZQU1FLGtCQUFNLFVBQVUsRUFBRSxRQUFRLENBQUMsU0FLNUI7UUFSUyxhQUFPLEdBQVAsT0FBTzt5QkE3Qk4sRUFBRTswQkFFRCxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUM7eUJBSVosQ0FBQzt1QkFDSCxDQUFDO1FBMkJqQixFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEtBQUssS0FBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDckUsS0FBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDdEI7O0tBQ0Y7SUE1QkQsc0JBQTJCLCtCQUFJOzs7OztRQUEvQixVQUFnQyxHQUFHLElBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTs7O09BQUE7SUFDeEUsc0JBQTJCLGlDQUFNOzs7OztRQUFqQyxVQUFrQyxHQUFHLElBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTs7O09BQUE7SUFDdkUsc0JBQTJCLGlDQUFNOzs7OztRQUFqQyxVQUFrQyxHQUFHLElBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTs7O09BQUE7SUFDdkUsc0JBQTJCLGlDQUFNOzs7OztRQUFqQyxVQUFrQyxHQUFHLElBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTs7O09BQUE7SUFDdkUsc0JBQTJCLGlDQUFNOzs7OztRQUFqQyxVQUFrQyxHQUFHLElBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTs7O09BQUE7SUFDdkUsc0JBQTJCLGlDQUFNOzs7OztRQUFqQyxVQUFrQyxHQUFHLElBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTs7O09BQUE7SUFFdkUsc0JBQTJCLG1DQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTs7O09BQUE7SUFDMUUsc0JBQTJCLG1DQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTs7O09BQUE7SUFDMUUsc0JBQTJCLG1DQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTs7O09BQUE7SUFDMUUsc0JBQTJCLG1DQUFROzs7OztRQUFuQyxVQUFvQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTs7O09BQUE7SUFFMUUsc0JBQTJCLG1DQUFROzs7OztRQUFuQyxV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QkFDRjs7OztnQkFkbUIsVUFBVTtnQkFBaUIsU0FBUztnQkFHL0MsY0FBYztnQkFFZCxlQUFlLHVCQXlDbkIsUUFBUSxZQUFJLElBQUksWUFBSSxRQUFROzs7MkJBeEI5QixLQUFLO3lCQUNMLEtBQUs7dUJBRUwsS0FBSyxTQUFDLFFBQVE7eUJBQ2QsS0FBSyxTQUFDLFdBQVc7eUJBQ2pCLEtBQUssU0FBQyxXQUFXO3lCQUNqQixLQUFLLFNBQUMsV0FBVzt5QkFDakIsS0FBSyxTQUFDLFdBQVc7eUJBQ2pCLEtBQUssU0FBQyxXQUFXOzJCQUVqQixLQUFLLFNBQUMsY0FBYzsyQkFDcEIsS0FBSyxTQUFDLGNBQWM7MkJBQ3BCLEtBQUssU0FBQyxjQUFjOzJCQUNwQixLQUFLLFNBQUMsY0FBYzsyQkFFcEIsS0FBSyxTQUFDLGNBQWM7MkJBQ3BCLEtBQUssU0FBQyxjQUFjOzJCQUNwQixLQUFLLFNBQUMsY0FBYzsyQkFDcEIsS0FBSyxTQUFDLGNBQWM7O3dCQXhDdkI7RUFlbUMsYUFBYTtTQUFuQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBPbkluaXQsIElucHV0LCBSZW5kZXJlcjIsIE9wdGlvbmFsLCBIb3N0LCBPbkNoYW5nZXMsIFNraXBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZsZXhDc3NTZXJ2aWNlIH0gZnJvbSAnLi9mbGV4LWNzcy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMYXlvdXREaXJlY3RpdmUgfSBmcm9tICcuL2xheW91dC5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IGBcbiAgICBbZmNGbGV4XSxcbiAgICBbZmNGbGV4LnhzXSwgW2ZjRmxleC5zbV0sIFtmY0ZsZXgubWRdLCBbZmNGbGV4LmxnXSwgW2ZjRmxleC54bF0sXG4gICAgW2ZjRmxleC5sdC1zbV0sIFtmY0ZsZXgubHQtbWRdLCBbZmNGbGV4Lmx0LWxnXSwgW2ZjRmxleC5sdC14bF0sXG4gICAgW2ZjRmxleC5ndC14c10sIFtmY0ZsZXguZ3Qtc21dLCBbZmNGbGV4Lmd0LW1kXSwgW2ZjRmxleC5ndC1sZ10sXG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIEZsZXhEaXJlY3RpdmUgZXh0ZW5kcyBCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBmY1ZhbHVlcyA9IHt9O1xuXG4gIG9ic2VydmVyJCA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuXG4gIHByaXZhdGUgbGF5b3V0OiBMYXlvdXREaXJlY3RpdmU7XG5cbiAgQElucHV0KCkgZmNTaHJpbmsgPSAxO1xuICBASW5wdXQoKSBmY0dyb3cgPSAxO1xuXG4gIEBJbnB1dCgnZmNGbGV4JykgICAgICAgc2V0IGZsZXgodmFsKSAgICAgeyB0aGlzLmZjVmFsdWVzWydhbGwnXSA9IHZhbDsgfVxuICBASW5wdXQoJ2ZjRmxleC54cycpICAgIHNldCBmbGV4WHModmFsKSAgIHsgdGhpcy5mY1ZhbHVlc1sneHMnXSA9IHZhbDsgfVxuICBASW5wdXQoJ2ZjRmxleC5zbScpICAgIHNldCBmbGV4U20odmFsKSAgIHsgdGhpcy5mY1ZhbHVlc1snc20nXSA9IHZhbDsgfVxuICBASW5wdXQoJ2ZjRmxleC5tZCcpICAgIHNldCBmbGV4TWQodmFsKSAgIHsgdGhpcy5mY1ZhbHVlc1snbWQnXSA9IHZhbDsgfVxuICBASW5wdXQoJ2ZjRmxleC5sZycpICAgIHNldCBmbGV4TGcodmFsKSAgIHsgdGhpcy5mY1ZhbHVlc1snbGcnXSA9IHZhbDsgfVxuICBASW5wdXQoJ2ZjRmxleC54bCcpICAgIHNldCBmbGV4WGwodmFsKSAgIHsgdGhpcy5mY1ZhbHVlc1sneGwnXSA9IHZhbDsgfVxuXG4gIEBJbnB1dCgnZmNGbGV4Lmd0LXhzJykgc2V0IGZsZXhHdFhzKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydndC14cyddID0gdmFsOyB9XG4gIEBJbnB1dCgnZmNGbGV4Lmd0LXNtJykgc2V0IGZsZXhHdFNtKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydndC1zbSddID0gdmFsOyB9XG4gIEBJbnB1dCgnZmNGbGV4Lmd0LW1kJykgc2V0IGZsZXhHdE1kKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydndC1tZCddID0gdmFsOyB9XG4gIEBJbnB1dCgnZmNGbGV4Lmd0LWxnJykgc2V0IGZsZXhHdExnKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydndC1sZyddID0gdmFsOyB9XG5cbiAgQElucHV0KCdmY0ZsZXgubHQtc20nKSBzZXQgZmxleEx0U20odmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ2x0LXNtJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXgubHQtbWQnKSBzZXQgZmxleEx0TWQodmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ2x0LW1kJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXgubHQtbGcnKSBzZXQgZmxleEx0TGcodmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ2x0LWxnJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXgubHQteGwnKSBzZXQgZmxleEx0WGwodmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ2x0LXhsJ10gPSB2YWw7IH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBGbGV4Q3NzU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASG9zdCgpIEBTa2lwU2VsZigpIGxheW91dDogTGF5b3V0RGlyZWN0aXZlLFxuICApIHtcbiAgICBzdXBlcihlbGVtZW50UmVmLCByZW5kZXJlcik7XG5cbiAgICBpZiAobGF5b3V0ICYmIGxheW91dC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgPT09IHRoaXMucGFyZW50RWxlbWVudCkge1xuICAgICAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kZXBlbmRzT25QYXJlbnRMYXlvdXQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICByZWxvYWQoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtdO1xuXG4gICAgdGhpcy5icmVha3BvaW50cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgICAgT2JqZWN0LmtleXModGhpcy5sYXlvdXRWYWx1ZXMpLmZvckVhY2gobGF5b3V0QnJlYWtwb2ludCA9PiB7XG4gICAgICAgIGNsYXNzTmFtZXMucHVzaChcbiAgICAgICAgICB0aGlzLnNlcnZpY2UuYWRkRmxleChcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VmFsdWVzW2xheW91dEJyZWFrcG9pbnRdLCBsYXlvdXRCcmVha3BvaW50LCB0aGlzLmZjVmFsdWVzW2JyZWFrcG9pbnRdLCBicmVha3BvaW50LCB0aGlzLmZjR3JvdywgdGhpcy5mY1Nocmlua1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zZXRDbGFzc05hbWVzKGNsYXNzTmFtZXMpO1xuXG4gICAgdGhpcy5vYnNlcnZlciQubmV4dCh0aGlzLmZjVmFsdWVzKTtcbiAgfVxuXG4gIGRlcGVuZHNPblBhcmVudExheW91dCgpIHtcbiAgICBpZiAodGhpcy5sYXlvdXQpIHtcbiAgICAgIHRoaXMubGF5b3V0LmFkZE5ld0JyZWFrcG9pbnRzKHRoaXMuYnJlYWtwb2ludHMsICdyb3cnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5icmVha3BvaW50cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMucGFyZW50RWxlbWVudCwgdGhpcy5zZXJ2aWNlLmFkZExheW91dCgncm93JywgYnJlYWtwb2ludCkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxheW91dFZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy5sYXlvdXQgPyB0aGlzLmxheW91dC5mY1ZhbHVlcyA6IHsgJ2FsbCc6ICcnIH07XG4gIH1cblxuICBnZXQgcGFyZW50RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJlbnROb2RlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIGdldCBicmVha3BvaW50cygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5mY1ZhbHVlcyk7XG4gIH1cbn1cbiJdfQ==