UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

214 lines (213 loc) 18.3 kB
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, } from '@angular/core'; import dayjs from 'dayjs'; import { map } from 'rxjs'; import { ContextChartService } from '../../chart.service'; import { Orientation } from '../../types'; import { ScaleType, reduceTicks } from '../../utils'; import * as i0 from "@angular/core"; import * as i1 from "../../chart.service"; import * as i2 from "@angular/common"; import * as i3 from "../../../translate/translate.pipe"; const _c0 = ["aclXAxisTicks", ""]; function XAxisTicksComponent_ng_container_0__svg_g_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵnamespaceSVG(); i0.ɵɵelementStart(0, "g")(1, "text", 4); i0.ɵɵtext(2); i0.ɵɵpipe(3, "translate"); i0.ɵɵelementEnd(); i0.ɵɵelement(4, "line", 5); i0.ɵɵelementEnd(); } if (rf & 2) { const tick_r1 = ctx.$implicit; const i_r2 = ctx.index; const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵadvance(); i0.ɵɵattribute("x", i_r2 === ctx_r2.ticks.length - 1 && tick_r1.x >= (ctx_r2.context.chartView == null ? null : ctx_r2.context.chartView.height) ? tick_r1.x - 5 : tick_r1.x)("y", tick_r1.y + 16)("text-anchor", ctx_r2.textAnchor); i0.ɵɵadvance(); i0.ɵɵtextInterpolate1(" ", ctx_r2.translation ? i0.ɵɵpipeBind1(3, 8, tick_r1.value) : tick_r1.value, " "); i0.ɵɵadvance(2); i0.ɵɵattribute("x1", tick_r1.x)("x2", tick_r1.x)("y1", tick_r1.y)("y2", tick_r1.y + 6); } } function XAxisTicksComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵtemplate(1, XAxisTicksComponent_ng_container_0__svg_g_1_Template, 5, 10, "g", 2); i0.ɵɵnamespaceSVG(); i0.ɵɵelementStart(2, "g"); i0.ɵɵelement(3, "path", 3); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("ngForOf", ctx_r2.ticks); i0.ɵɵadvance(2); i0.ɵɵattribute("d", ctx_r2.xAxisLine); } } function XAxisTicksComponent_ng_template_1__svg_g_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵnamespaceSVG(); i0.ɵɵelementStart(0, "g")(1, "text", 6); i0.ɵɵtext(2); i0.ɵɵpipe(3, "translate"); i0.ɵɵpipe(4, "translate"); i0.ɵɵelementEnd()(); } if (rf & 2) { const tick_r4 = ctx.$implicit; const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵadvance(); i0.ɵɵattribute("y", tick_r4.x); i0.ɵɵadvance(); i0.ɵɵtextInterpolate1(" ", ctx_r2.translation ? i0.ɵɵpipeBind1(4, 4, i0.ɵɵpipeBind1(3, 2, tick_r4.value)) : tick_r4.value, " "); } } function XAxisTicksComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, XAxisTicksComponent_ng_template_1__svg_g_0_Template, 5, 6, "g", 2); i0.ɵɵnamespaceSVG(); i0.ɵɵelementStart(1, "g"); i0.ɵɵelement(2, "path", 3); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵproperty("ngForOf", ctx_r2.ticks); i0.ɵɵadvance(2); i0.ɵɵattribute("d", ctx_r2.yAxisLine); } } export class XAxisTicksComponent { get context() { return this.contextService; } get yAxisLine() { return `M${0} ${0}L${0} ${this.context.chartView.height}Z`; } get xAxisLine() { const { width } = this.contextService.chartView; return `M0 0L${width} 0Z`; } getTicks() { let ticks; if (this.context.scaleType === ScaleType.ORDINAL) { const maxTicks = this.getMaxTicks(20); ticks = reduceTicks(this.context.x.domain(), maxTicks).map(this.handleTicksData); } else { ticks = this.context.x .ticks(this.getMaxTicks(100)) .map(this.handleTicksData); } return ticks; } getMaxTicks(tickWidth) { const width = this.context.horizontal ? this.context.chartView.height : this.context.chartView.width; return Math.floor(width / tickWidth); } constructor(contextService, cdr) { this.contextService = contextService; this.cdr = cdr; this.textAnchor = 'middle'; this.orientation = Orientation; this.handleTicksData = (value) => { const bandwidth = this.context.barOptions.isBand ? this.context.x.bandwidth() * 0.5 : 0; return { value: this.format(value), x: this.context.x(value) + bandwidth, y: 0, }; }; } ngOnInit() { this.contextService.seriesData$ .pipe(map(() => this.getTicks())) .subscribe(res => { this.ticks = res; this.cdr.detectChanges(); }); } format(value) { return this.contextService.scaleType === ScaleType.TIME ? dayjs(value).format(this.dateFormat) : value; } static { this.ɵfac = function XAxisTicksComponent_Factory(t) { return new (t || XAxisTicksComponent)(i0.ɵɵdirectiveInject(i1.ContextChartService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: XAxisTicksComponent, selectors: [["g", "aclXAxisTicks", ""]], inputs: { dateFormat: "dateFormat", translation: "translation" }, attrs: _c0, decls: 3, vars: 2, consts: [["elseTemplate", ""], [4, "ngIf", "ngIfElse"], [4, "ngFor", "ngForOf"], ["stroke", "#ccd6eb", "fill", "none"], ["fill", "#666", "font-size", "11"], ["stroke-width", "1", "stroke", "#ccd6eb"], ["x", "-8", "fill", "#666", "text-anchor", "end", "font-size", "11", "alignment-baseline", "middle"]], template: function XAxisTicksComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, XAxisTicksComponent_ng_container_0_Template, 4, 2, "ng-container", 1)(1, XAxisTicksComponent_ng_template_1_Template, 3, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor); } if (rf & 2) { const elseTemplate_r5 = i0.ɵɵreference(2); i0.ɵɵproperty("ngIf", ctx.context.barOptions.orientation === ctx.orientation.VERTICAL)("ngIfElse", elseTemplate_r5); } }, dependencies: [i2.NgForOf, i2.NgIf, i3.TranslatePipe], encapsulation: 2, changeDetection: 0 }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(XAxisTicksComponent, [{ type: Component, args: [{ // eslint-disable-next-line @angular-eslint/component-selector selector: 'g[aclXAxisTicks]', template: ` <ng-container *ngIf=" context.barOptions.orientation === orientation.VERTICAL; else elseTemplate " > <svg:g *ngFor="let tick of ticks; let i = index"> <text [attr.x]=" i === ticks.length - 1 && tick.x >= context.chartView?.height ? tick.x - 5 : tick.x " [attr.y]="tick.y + 16" fill="#666" [attr.text-anchor]="textAnchor" font-size="11" > {{ translation ? (tick.value | translate) : tick.value }} </text> <line [attr.x1]="tick.x" [attr.x2]="tick.x" [attr.y1]="tick.y" [attr.y2]="tick.y + 6" stroke-width="1" stroke="#ccd6eb" ></line> </svg:g> <svg:g> <path [attr.d]="xAxisLine" stroke="#ccd6eb" fill="none" /> </svg:g> </ng-container> <ng-template #elseTemplate> <svg:g *ngFor="let tick of ticks; let i = index"> <text x="-8" [attr.y]="tick.x" fill="#666" text-anchor="end" font-size="11" alignment-baseline="middle" > {{ translation ? (tick.value | translate | translate) : tick.value }} </text> </svg:g> <svg:g> <path [attr.d]="yAxisLine" stroke="#ccd6eb" fill="none" /> </svg:g> </ng-template> `, changeDetection: ChangeDetectionStrategy.OnPush, }] }], () => [{ type: i1.ContextChartService }, { type: i0.ChangeDetectorRef }], { dateFormat: [{ type: Input }], translation: [{ type: Input }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(XAxisTicksComponent, { className: "XAxisTicksComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieC1heGlzLXRpY2tzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jaGFydC9jb21tb24vYXhpcy94LWF4aXMtdGlja3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEdBRU4sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBbUIsTUFBTSxhQUFhLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7O0lBYTdDLEFBREYseUJBQWlELGNBVzlDO0lBQ0MsWUFDRjs7SUFBQSxpQkFBTztJQUNQLDBCQU9RO0lBQ1YsaUJBQVE7Ozs7O0lBcEJKLGNBSUM7O0lBTUQsY0FDRjtJQURFLHlHQUNGO0lBRUUsZUFBa0I7Ozs7SUFyQnhCLDZCQUtDO0lBQ0MscUZBQWlEOztJQXVCakQseUJBQU87SUFDTCwwQkFJRTtJQUNKLGlCQUFROzs7O0lBN0JnQixjQUFVO0lBQVYsc0NBQVU7SUF5QjlCLGVBQW9COzs7OztJQVN0QixBQURGLHlCQUFpRCxjQVE5QztJQUNDLFlBQ0Y7OztJQUNGLEFBREUsaUJBQU8sRUFDRDs7OztJQVJKLGNBQWlCOztJQU1qQixjQUNGO0lBREUsK0hBQ0Y7OztJQVZGLG1GQUFpRDs7SUFZakQseUJBQU87SUFDTCwwQkFJRTtJQUNKLGlCQUFROzs7SUFsQmdCLHNDQUFVO0lBYzlCLGVBQW9COzs7QUFTOUIsTUFBTSxPQUFPLG1CQUFtQjtJQU85QixJ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QUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsSUFBSTtZQUNyRCxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDWixDQUFDO29GQXhFVSxtQkFBbUI7b0VBQW5CLG1CQUFtQjtZQXhCNUIsQUF0Q0Esc0ZBS0Msd0dBaUMwQjs7O1lBbkNkLEFBRlYsc0ZBRVUsNkJBRWpCOzs7aUZBeURhLG1CQUFtQjtjQWxFL0IsU0FBUztlQUFDO2dCQUNULDhEQUE4RDtnQkFDOUQsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0RFQ7Z0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7b0ZBRVUsVUFBVTtrQkFBbEIsS0FBSztZQUVHLFdBQVc7a0JBQW5CLEtBQUs7O2tGQUhLLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjYWxlUG9pbnQsIFNjYWxlVGltZSB9IGZyb20gJ2QzJztcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ29udGV4dENoYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JpZW50YXRpb24sIFRpY2ssIFRpY2tWYWx1ZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IFNjYWxlVHlwZSwgcmVkdWNlVGlja3MgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2dbYWNsWEF4aXNUaWNrc10nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIGNvbnRleHQuYmFyT3B0aW9ucy5vcmllbnRhdGlvbiA9PT0gb3JpZW50YXRpb24uVkVSVElDQUw7XG4gICAgICAgIGVsc2UgZWxzZVRlbXBsYXRlXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxzdmc6ZyAqbmdGb3I9XCJsZXQgdGljayBvZiB0aWNrczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICA8dGV4dFxuICAgICAgICAgIFthdHRyLnhdPVwiXG4gICAgICAgICAgICBpID09PSB0aWNrcy5sZW5ndGggLSAxICYmIHRpY2sueCA+PSBjb250ZXh0LmNoYXJ0Vmlldz8uaGVpZ2h0XG4gICAgICAgICAgICAgID8gdGljay54IC0gNVxuICAgICAgICAgICAgICA6IHRpY2sueFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2F0dHIueV09XCJ0aWNrLnkgKyAxNlwiXG4gICAgICAgICAgZmlsbD1cIiM2NjZcIlxuICAgICAgICAgIFthdHRyLnRleHQtYW5jaG9yXT1cInRleHRBbmNob3JcIlxuICAgICAgICAgIGZvbnQtc2l6ZT1cIjExXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRyYW5zbGF0aW9uID8gKHRpY2sudmFsdWUgfCB0cmFuc2xhdGUpIDogdGljay52YWx1ZSB9fVxuICAgICAgICA8L3RleHQ+XG4gICAgICAgIDxsaW5lXG4gICAgICAgICAgW2F0dHIueDFdPVwidGljay54XCJcbiAgICAgICAgICBbYXR0ci54Ml09XCJ0aWNrLnhcIlxuICAgICAgICAgIFthdHRyLnkxXT1cInRpY2sueVwiXG4gICAgICAgICAgW2F0dHIueTJdPVwidGljay55ICsgNlwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICAgICAgc3Ryb2tlPVwiI2NjZDZlYlwiXG4gICAgICAgID48L2xpbmU+XG4gICAgICA8L3N2ZzpnPlxuICAgICAgPHN2ZzpnPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIFthdHRyLmRdPVwieEF4aXNMaW5lXCJcbiAgICAgICAgICBzdHJva2U9XCIjY2NkNmViXCJcbiAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgIC8+XG4gICAgICA8L3N2ZzpnPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XG4gICAgICA8c3ZnOmcgKm5nRm9yPVwibGV0IHRpY2sgb2YgdGlja3M7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgPHRleHRcbiAgICAgICAgICB4PVwiLThcIlxuICAgICAgICAgIFthdHRyLnldPVwidGljay54XCJcbiAgICAgICAgICBmaWxsPVwiIzY2NlwiXG4gICAgICAgICAgdGV4dC1hbmNob3I9XCJlbmRcIlxuICAgICAgICAgIGZvbnQtc2l6ZT1cIjExXCJcbiAgICAgICAgICBhbGlnbm1lbnQtYmFzZWxpbmU9XCJtaWRkbGVcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgdHJhbnNsYXRpb24gPyAodGljay52YWx1ZSB8IHRyYW5zbGF0ZSB8IHRyYW5zbGF0ZSkgOiB0aWNrLnZhbHVlIH19XG4gICAgICAgIDwvdGV4dD5cbiAgICAgIDwvc3ZnOmc+XG4gICAgICA8c3ZnOmc+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgW2F0dHIuZF09XCJ5QXhpc0xpbmVcIlxuICAgICAgICAgIHN0cm9rZT1cIiNjY2Q2ZWJcIlxuICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgLz5cbiAgICAgIDwvc3ZnOmc+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFhBeGlzVGlja3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBkYXRlRm9ybWF0OiBzdHJpbmc7XG5cbiAgQElucHV0KCkgdHJhbnNsYXRpb246IGJvb2xlYW47XG5cbiAgdGV4dEFuY2hvciA9ICdtaWRkbGUnO1xuICBvcmllbnRhdGlvbiA9IE9yaWVudGF0aW9uO1xuICBnZXQgY29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZTtcbiAgfVxuXG4gIHRpY2tzOiBUaWNrW107XG4gIGdldCB5QXhpc0xpbmUoKSB7XG4gICAgcmV0dXJuIGBNJHswfSAkezB9TCR7MH0gJHt0aGlzLmNvbnRleHQuY2hhcnRWaWV3LmhlaWdodH1aYDtcbiAgfVxuXG4gIGdldCB4QXhpc0xpbmUoKSB7XG4gICAgY29uc3QgeyB3aWR0aCB9ID0gdGhpcy5jb250ZXh0U2VydmljZS5jaGFydFZpZXc7XG4gICAgcmV0dXJuIGBNMCAwTCR7d2lkdGh9IDBaYDtcbiAgfVxuXG4gIGdldFRpY2tzKCkge1xuICAgIGxldCB0aWNrczogVGlja1tdO1xuICAgIGlmICh0aGlzLmNvbnRleHQuc2NhbGVUeXBlID09PSBTY2FsZVR5cGUuT1JESU5BTCkge1xuICAgICAgY29uc3QgbWF4VGlja3MgPSB0aGlzLmdldE1heFRpY2tzKDIwKTtcbiAgICAgIHRpY2tzID0gcmVkdWNlVGlja3ModGhpcy5jb250ZXh0LnguZG9tYWluKCksIG1heFRpY2tzKS5tYXAoXG4gICAgICAgIHRoaXMuaGFuZGxlVGlja3NEYXRhLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGlja3MgPSAodGhpcy5jb250ZXh0LnggYXMgU2NhbGVUaW1lPG51bWJlciwgbnVtYmVyPilcbiAgICAgICAgLnRpY2tzKHRoaXMuZ2V0TWF4VGlja3MoMTAwKSlcbiAgICAgICAgLm1hcCh0aGlzLmhhbmRsZVRpY2tzRGF0YSk7XG4gICAgfVxuICAgIHJldHVybiB0aWNrcztcbiAgfVxuXG4gIGhhbmRsZVRpY2tzRGF0YSA9ICh2YWx1ZTogVGlja1ZhbHVlKTogVGljayA9PiB7XG4gICAgY29uc3QgYmFuZHdpZHRoID0gdGhpcy5jb250ZXh0LmJhck9wdGlvbnMuaXNCYW5kXG4gICAgICA/ICh0aGlzLmNvbnRleHQueCBhcyBTY2FsZVBvaW50PHN0cmluZz4pLmJhbmR3aWR0aCgpICogMC41XG4gICAgICA6IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB0aGlzLmZvcm1hdCh2YWx1ZSksXG4gICAgICB4OiB0aGlzLmNvbnRleHQueCh2YWx1ZSkgKyBiYW5kd2lkdGgsXG4gICAgICB5OiAwLFxuICAgIH0gYXMgVGljaztcbiAgfTtcblxuICBnZXRNYXhUaWNrcyh0aWNrV2lkdGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbnRleHQuaG9yaXpvbnRhbFxuICAgICAgPyB0aGlzLmNvbnRleHQuY2hhcnRWaWV3LmhlaWdodFxuICAgICAgOiB0aGlzLmNvbnRleHQuY2hhcnRWaWV3LndpZHRoO1xuICAgIHJldHVybiBNYXRoLmZsb29yKHdpZHRoIC8gdGlja1dpZHRoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dFNlcnZpY2U6IENvbnRleHRDaGFydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb250ZXh0U2VydmljZS5zZXJpZXNEYXRhJFxuICAgICAgLnBpcGUobWFwKCgpID0+IHRoaXMuZ2V0VGlja3MoKSkpXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMudGlja3MgPSByZXM7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZm9ybWF0KHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dFNlcnZpY2Uuc2NhbGVUeXBlID09PSBTY2FsZVR5cGUuVElNRVxuICAgICAgPyBkYXlqcyh2YWx1ZSkuZm9ybWF0KHRoaXMuZGF0ZUZvcm1hdClcbiAgICAgIDogdmFsdWU7XG4gIH1cbn1cbiJdfQ==