UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

203 lines 16.6 kB
/** * @fileoverview added by tsickle * Generated from: calendar-header.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @license * Copyright Alibaba.com All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; import { CandyDate } from 'ng-zorro-antd/core/time'; import { DateHelperService, NzI18nService as I18n } from 'ng-zorro-antd/i18n'; var NzCalendarHeaderComponent = /** @class */ (function () { function NzCalendarHeaderComponent(i18n, dateHelper) { this.i18n = i18n; this.dateHelper = dateHelper; this.mode = 'month'; this.fullscreen = true; this.activeDate = new CandyDate(); this.modeChange = new EventEmitter(); this.yearChange = new EventEmitter(); this.monthChange = new EventEmitter(); // @Output() readonly valueChange: EventEmitter<CandyDate> = new EventEmitter(); this.yearOffset = 10; this.yearTotal = 20; this.years = []; this.months = []; } Object.defineProperty(NzCalendarHeaderComponent.prototype, "activeYear", { get: /** * @return {?} */ function () { return this.activeDate.getYear(); }, enumerable: true, configurable: true }); Object.defineProperty(NzCalendarHeaderComponent.prototype, "activeMonth", { get: /** * @return {?} */ function () { return this.activeDate.getMonth(); }, enumerable: true, configurable: true }); Object.defineProperty(NzCalendarHeaderComponent.prototype, "size", { get: /** * @return {?} */ function () { return this.fullscreen ? 'default' : 'small'; }, enumerable: true, configurable: true }); Object.defineProperty(NzCalendarHeaderComponent.prototype, "yearTypeText", { get: /** * @return {?} */ function () { return this.i18n.getLocale().Calendar.year; }, enumerable: true, configurable: true }); Object.defineProperty(NzCalendarHeaderComponent.prototype, "monthTypeText", { get: /** * @return {?} */ function () { return this.i18n.getLocale().Calendar.month; }, enumerable: true, configurable: true }); /** * @return {?} */ NzCalendarHeaderComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.setUpYears(); this.setUpMonths(); }; /** * @param {?} year * @return {?} */ NzCalendarHeaderComponent.prototype.updateYear = /** * @param {?} year * @return {?} */ function (year) { this.yearChange.emit(year); this.setUpYears(year); }; /** * @private * @param {?=} year * @return {?} */ NzCalendarHeaderComponent.prototype.setUpYears = /** * @private * @param {?=} year * @return {?} */ function (year) { /** @type {?} */ var start = (year || this.activeYear) - this.yearOffset; /** @type {?} */ var end = start + this.yearTotal; this.years = []; for (var i = start; i < end; i++) { this.years.push({ label: "" + i, value: i }); } }; /** * @private * @return {?} */ NzCalendarHeaderComponent.prototype.setUpMonths = /** * @private * @return {?} */ function () { this.months = []; for (var i = 0; i < 12; i++) { /** @type {?} */ var dateInMonth = this.activeDate.setMonth(i); /** @type {?} */ var monthText = this.dateHelper.format(dateInMonth.nativeDate, 'MMM'); this.months.push({ label: monthText, value: i }); } }; NzCalendarHeaderComponent.decorators = [ { type: Component, args: [{ encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, selector: 'nz-calendar-header', exportAs: 'nzCalendarHeader', template: "\n <div class=\"ant-picker-calendar-header\">\n <nz-select\n class=\"ant-picker-calendar-year-select\"\n [nzSize]=\"size\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [ngModel]=\"activeYear\"\n (ngModelChange)=\"updateYear($event)\"\n >\n <nz-option *ngFor=\"let year of years\" [nzLabel]=\"year.label\" [nzValue]=\"year.value\"></nz-option>\n </nz-select>\n\n <nz-select\n *ngIf=\"mode === 'month'\"\n class=\"ant-picker-calendar-month-select\"\n [nzSize]=\"size\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [ngModel]=\"activeMonth\"\n (ngModelChange)=\"monthChange.emit($event)\"\n >\n <nz-option *ngFor=\"let month of months\" [nzLabel]=\"month.label\" [nzValue]=\"month.value\"></nz-option>\n </nz-select>\n\n <nz-radio-group class=\"ant-picker-calendar-mode-switch\" [(ngModel)]=\"mode\" (ngModelChange)=\"modeChange.emit($event)\" [nzSize]=\"size\">\n <label nz-radio-button nzValue=\"month\">{{ monthTypeText }}</label>\n <label nz-radio-button nzValue=\"year\">{{ yearTypeText }}</label>\n </nz-radio-group>\n </div>\n ", host: { '[style.display]': "'block'", '[class.ant-fullcalendar-header]': "true" } }] } ]; /** @nocollapse */ NzCalendarHeaderComponent.ctorParameters = function () { return [ { type: I18n }, { type: DateHelperService } ]; }; NzCalendarHeaderComponent.propDecorators = { mode: [{ type: Input }], fullscreen: [{ type: Input }], activeDate: [{ type: Input }], modeChange: [{ type: Output }], yearChange: [{ type: Output }], monthChange: [{ type: Output }] }; return NzCalendarHeaderComponent; }()); export { NzCalendarHeaderComponent }; if (false) { /** @type {?} */ NzCalendarHeaderComponent.prototype.mode; /** @type {?} */ NzCalendarHeaderComponent.prototype.fullscreen; /** @type {?} */ NzCalendarHeaderComponent.prototype.activeDate; /** @type {?} */ NzCalendarHeaderComponent.prototype.modeChange; /** @type {?} */ NzCalendarHeaderComponent.prototype.yearChange; /** @type {?} */ NzCalendarHeaderComponent.prototype.monthChange; /** @type {?} */ NzCalendarHeaderComponent.prototype.yearOffset; /** @type {?} */ NzCalendarHeaderComponent.prototype.yearTotal; /** @type {?} */ NzCalendarHeaderComponent.prototype.years; /** @type {?} */ NzCalendarHeaderComponent.prototype.months; /** * @type {?} * @private */ NzCalendarHeaderComponent.prototype.i18n; /** * @type {?} * @private */ NzCalendarHeaderComponent.prototype.dateHelper; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQvY2FsZW5kYXIvIiwic291cmNlcyI6WyJjYWxlbmRhci1oZWFkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLElBQUksSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHOUU7SUEwRUUsbUNBQW9CLElBQVUsRUFBVSxVQUE2QjtRQUFqRCxTQUFJLEdBQUosSUFBSSxDQUFNO1FBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFsQzVELFNBQUksR0FBcUIsT0FBTyxDQUFDO1FBQ2pDLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0IsZUFBVSxHQUFjLElBQUksU0FBUyxFQUFFLENBQUM7UUFFOUIsZUFBVSxHQUFtQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hFLGVBQVUsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0RCxnQkFBVyxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDOztRQUcxRSxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsVUFBSyxHQUE0QyxFQUFFLENBQUM7UUFDcEQsV0FBTSxHQUE0QyxFQUFFLENBQUM7SUFzQm1CLENBQUM7SUFwQnpFLHNCQUFJLGlEQUFVOzs7O1FBQWQ7WUFDRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkMsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSxrREFBVzs7OztRQUFmO1lBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BDLENBQUM7OztPQUFBO0lBRUQsc0JBQUksMkNBQUk7Ozs7UUFBUjtZQUNFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDL0MsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSxtREFBWTs7OztRQUFoQjtZQUNFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzdDLENBQUM7OztPQUFBO0lBRUQsc0JBQUksb0RBQWE7Ozs7UUFBakI7WUFDRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUM5QyxDQUFDOzs7T0FBQTs7OztJQUlELDRDQUFROzs7SUFBUjtRQUNFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQzs7Ozs7SUFFRCw4Q0FBVTs7OztJQUFWLFVBQVcsSUFBWTtRQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Ozs7OztJQUVPLDhDQUFVOzs7OztJQUFsQixVQUFtQixJQUFhOztZQUN4QixLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVOztZQUNuRCxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTO1FBRWxDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBRyxDQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDOUM7SUFDSCxDQUFDOzs7OztJQUVPLCtDQUFXOzs7O0lBQW5CO1FBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTs7Z0JBQ3JCLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7O2dCQUN6QyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7WUFDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQzs7Z0JBeEdGLFNBQVMsU0FBQztvQkFDVCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSw0cENBNEJUO29CQUNELElBQUksRUFBRTt3QkFDSixpQkFBaUIsRUFBRSxTQUFTO3dCQUM1QixpQ0FBaUMsRUFBRSxNQUFNO3FCQUMxQztpQkFDRjs7OztnQkF6QzRDLElBQUk7Z0JBQXhDLGlCQUFpQjs7O3VCQTJDdkIsS0FBSzs2QkFDTCxLQUFLOzZCQUNMLEtBQUs7NkJBRUwsTUFBTTs2QkFDTixNQUFNOzhCQUNOLE1BQU07O0lBMkRULGdDQUFDO0NBQUEsQUF6R0QsSUF5R0M7U0FsRVkseUJBQXlCOzs7SUFDcEMseUNBQTBDOztJQUMxQywrQ0FBb0M7O0lBQ3BDLCtDQUFpRDs7SUFFakQsK0NBQW1GOztJQUNuRiwrQ0FBeUU7O0lBQ3pFLGdEQUEwRTs7SUFHMUUsK0NBQXdCOztJQUN4Qiw4Q0FBdUI7O0lBQ3ZCLDBDQUFvRDs7SUFDcEQsMkNBQXFEOzs7OztJQXNCekMseUNBQWtCOzs7OztJQUFFLCtDQUFxQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBBbGliYWJhLmNvbSBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbmR5RGF0ZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90aW1lJztcbmltcG9ydCB7IERhdGVIZWxwZXJTZXJ2aWNlLCBOekkxOG5TZXJ2aWNlIGFzIEkxOG4gfSBmcm9tICduZy16b3Jyby1hbnRkL2kxOG4nO1xuaW1wb3J0IHsgTnpTZWxlY3RTaXplVHlwZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvc2VsZWN0JztcblxuQENvbXBvbmVudCh7XG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzZWxlY3RvcjogJ256LWNhbGVuZGFyLWhlYWRlcicsXG4gIGV4cG9ydEFzOiAnbnpDYWxlbmRhckhlYWRlcicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImFudC1waWNrZXItY2FsZW5kYXItaGVhZGVyXCI+XG4gICAgICA8bnotc2VsZWN0XG4gICAgICAgIGNsYXNzPVwiYW50LXBpY2tlci1jYWxlbmRhci15ZWFyLXNlbGVjdFwiXG4gICAgICAgIFtuelNpemVdPVwic2l6ZVwiXG4gICAgICAgIFtuekRyb3Bkb3duTWF0Y2hTZWxlY3RXaWR0aF09XCJmYWxzZVwiXG4gICAgICAgIFtuZ01vZGVsXT1cImFjdGl2ZVllYXJcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVZZWFyKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bnotb3B0aW9uICpuZ0Zvcj1cImxldCB5ZWFyIG9mIHllYXJzXCIgW256TGFiZWxdPVwieWVhci5sYWJlbFwiIFtuelZhbHVlXT1cInllYXIudmFsdWVcIj48L256LW9wdGlvbj5cbiAgICAgIDwvbnotc2VsZWN0PlxuXG4gICAgICA8bnotc2VsZWN0XG4gICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICAgIGNsYXNzPVwiYW50LXBpY2tlci1jYWxlbmRhci1tb250aC1zZWxlY3RcIlxuICAgICAgICBbbnpTaXplXT1cInNpemVcIlxuICAgICAgICBbbnpEcm9wZG93bk1hdGNoU2VsZWN0V2lkdGhdPVwiZmFsc2VcIlxuICAgICAgICBbbmdNb2RlbF09XCJhY3RpdmVNb250aFwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm1vbnRoQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxuei1vcHRpb24gKm5nRm9yPVwibGV0IG1vbnRoIG9mIG1vbnRoc1wiIFtuekxhYmVsXT1cIm1vbnRoLmxhYmVsXCIgW256VmFsdWVdPVwibW9udGgudmFsdWVcIj48L256LW9wdGlvbj5cbiAgICAgIDwvbnotc2VsZWN0PlxuXG4gICAgICA8bnotcmFkaW8tZ3JvdXAgY2xhc3M9XCJhbnQtcGlja2VyLWNhbGVuZGFyLW1vZGUtc3dpdGNoXCIgWyhuZ01vZGVsKV09XCJtb2RlXCIgKG5nTW9kZWxDaGFuZ2UpPVwibW9kZUNoYW5nZS5lbWl0KCRldmVudClcIiBbbnpTaXplXT1cInNpemVcIj5cbiAgICAgICAgPGxhYmVsIG56LXJhZGlvLWJ1dHRvbiBuelZhbHVlPVwibW9udGhcIj57eyBtb250aFR5cGVUZXh0IH19PC9sYWJlbD5cbiAgICAgICAgPGxhYmVsIG56LXJhZGlvLWJ1dHRvbiBuelZhbHVlPVwieWVhclwiPnt7IHllYXJUeXBlVGV4dCB9fTwvbGFiZWw+XG4gICAgICA8L256LXJhZGlvLWdyb3VwPlxuICAgIDwvZGl2PlxuICBgLFxuICBob3N0OiB7XG4gICAgJ1tzdHlsZS5kaXNwbGF5XSc6IGAnYmxvY2snYCxcbiAgICAnW2NsYXNzLmFudC1mdWxsY2FsZW5kYXItaGVhZGVyXSc6IGB0cnVlYFxuICB9XG59KVxuZXhwb3J0IGNsYXNzIE56Q2FsZW5kYXJIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBtb2RlOiAnbW9udGgnIHwgJ3llYXInID0gJ21vbnRoJztcbiAgQElucHV0KCkgZnVsbHNjcmVlbjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGFjdGl2ZURhdGU6IENhbmR5RGF0ZSA9IG5ldyBDYW5keURhdGUoKTtcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgbW9kZUNoYW5nZTogRXZlbnRFbWl0dGVyPCdtb250aCcgfCAneWVhcic+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgeWVhckNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBtb250aENoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8vIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPENhbmR5RGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgeWVhck9mZnNldDogbnVtYmVyID0gMTA7XG4gIHllYXJUb3RhbDogbnVtYmVyID0gMjA7XG4gIHllYXJzOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfT4gPSBbXTtcbiAgbW9udGhzOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfT4gPSBbXTtcblxuICBnZXQgYWN0aXZlWWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZURhdGUuZ2V0WWVhcigpO1xuICB9XG5cbiAgZ2V0IGFjdGl2ZU1vbnRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpO1xuICB9XG5cbiAgZ2V0IHNpemUoKTogTnpTZWxlY3RTaXplVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuZnVsbHNjcmVlbiA/ICdkZWZhdWx0JyA6ICdzbWFsbCc7XG4gIH1cblxuICBnZXQgeWVhclR5cGVUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi5nZXRMb2NhbGUoKS5DYWxlbmRhci55ZWFyO1xuICB9XG5cbiAgZ2V0IG1vbnRoVHlwZVRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLmdldExvY2FsZSgpLkNhbGVuZGFyLm1vbnRoO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpMThuOiBJMThuLCBwcml2YXRlIGRhdGVIZWxwZXI6IERhdGVIZWxwZXJTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0VXBZZWFycygpO1xuICAgIHRoaXMuc2V0VXBNb250aHMoKTtcbiAgfVxuXG4gIHVwZGF0ZVllYXIoeWVhcjogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy55ZWFyQ2hhbmdlLmVtaXQoeWVhcik7XG4gICAgdGhpcy5zZXRVcFllYXJzKHllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRVcFllYXJzKHllYXI/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFydCA9ICh5ZWFyIHx8IHRoaXMuYWN0aXZlWWVhcikgLSB0aGlzLnllYXJPZmZzZXQ7XG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnllYXJUb3RhbDtcblxuICAgIHRoaXMueWVhcnMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdGhpcy55ZWFycy5wdXNoKHsgbGFiZWw6IGAke2l9YCwgdmFsdWU6IGkgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRVcE1vbnRocygpOiB2b2lkIHtcbiAgICB0aGlzLm1vbnRocyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlSW5Nb250aCA9IHRoaXMuYWN0aXZlRGF0ZS5zZXRNb250aChpKTtcbiAgICAgIGNvbnN0IG1vbnRoVGV4dCA9IHRoaXMuZGF0ZUhlbHBlci5mb3JtYXQoZGF0ZUluTW9udGgubmF0aXZlRGF0ZSwgJ01NTScpO1xuICAgICAgdGhpcy5tb250aHMucHVzaCh7IGxhYmVsOiBtb250aFRleHQsIHZhbHVlOiBpIH0pO1xuICAgIH1cbiAgfVxufVxuIl19