UNPKG

ng-zorro-antd

Version:

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

290 lines (288 loc) 22.9 kB
/** * @fileoverview added by tsickle * Generated from: calendar.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { __decorate, __metadata } from "tslib"; /** * @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, ChangeDetectorRef, Component, ContentChild, EventEmitter, forwardRef, Input, Output, TemplateRef, ViewEncapsulation } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { CandyDate } from 'ng-zorro-antd/core/time'; import { InputBoolean } from 'ng-zorro-antd/core/util'; import { NzDateCellDirective as DateCell, NzDateFullCellDirective as DateFullCell, NzMonthCellDirective as MonthCell, NzMonthFullCellDirective as MonthFullCell } from './calendar-cells'; export class NzCalendarComponent { /** * @param {?} cdr */ constructor(cdr) { this.cdr = cdr; this.activeDate = new CandyDate(); this.prefixCls = 'ant-picker-calendar'; this.onChangeFn = (/** * @return {?} */ () => { }); this.onTouchFn = (/** * @return {?} */ () => { }); this.nzMode = 'month'; this.nzModeChange = new EventEmitter(); this.nzPanelChange = new EventEmitter(); this.nzSelectChange = new EventEmitter(); this.nzValueChange = new EventEmitter(); this.nzFullscreen = true; } /** * @return {?} */ get dateCell() { return (/** @type {?} */ ((this.nzDateCell || this.nzDateCellChild))); } /** * @return {?} */ get dateFullCell() { return (/** @type {?} */ ((this.nzDateFullCell || this.nzDateFullCellChild))); } /** * @return {?} */ get monthCell() { return (/** @type {?} */ ((this.nzMonthCell || this.nzMonthCellChild))); } /** * @return {?} */ get monthFullCell() { return (/** @type {?} */ ((this.nzMonthFullCell || this.nzMonthFullCellChild))); } /** * @param {?} mode * @return {?} */ onModeChange(mode) { this.nzModeChange.emit(mode); this.nzPanelChange.emit({ date: this.activeDate.nativeDate, mode }); } /** * @param {?} year * @return {?} */ onYearSelect(year) { /** @type {?} */ const date = this.activeDate.setYear(year); this.updateDate(date); } /** * @param {?} month * @return {?} */ onMonthSelect(month) { /** @type {?} */ const date = this.activeDate.setMonth(month); this.updateDate(date); } /** * @param {?} date * @return {?} */ onDateSelect(date) { // Only activeDate is enough in calendar // this.value = date; this.updateDate(date); } /** * @param {?} value * @return {?} */ writeValue(value) { this.updateDate(new CandyDate((/** @type {?} */ (value))), false); this.cdr.markForCheck(); } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this.onChangeFn = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this.onTouchFn = fn; } /** * @private * @param {?} date * @param {?=} touched * @return {?} */ updateDate(date, touched = true) { this.activeDate = date; if (touched) { this.onChangeFn(date.nativeDate); this.onTouchFn(); this.nzSelectChange.emit(date.nativeDate); this.nzValueChange.emit(date.nativeDate); } } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (changes.nzValue) { this.updateDate(new CandyDate(this.nzValue), false); } } } NzCalendarComponent.decorators = [ { type: Component, args: [{ encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, selector: 'nz-calendar', exportAs: 'nzCalendar', template: ` <nz-calendar-header [fullscreen]="nzFullscreen" [activeDate]="activeDate" [(mode)]="nzMode" (modeChange)="onModeChange($event)" (yearChange)="onYearSelect($event)" (monthChange)="onMonthSelect($event)" > </nz-calendar-header> <div class="ant-picker-panel"> <div class="ant-picker-{{ nzMode === 'month' ? 'date' : 'month' }}-panel"> <div class="ant-picker-body"> <ng-container *ngIf="nzMode === 'month'; then monthModeTable; else yearModeTable"></ng-container> </div> </div> </div> <ng-template #monthModeTable> <!-- TODO(@wenqi73) [cellRender] [fullCellRender] --> <date-table [prefixCls]="prefixCls" [value]="activeDate" [activeDate]="activeDate" [cellRender]="$any(dateCell)" [fullCellRender]="$any(dateFullCell)" (valueChange)="onDateSelect($event)" ></date-table> </ng-template> <!-- TODO(@wenqi73) [cellRender] [fullCellRender] --> <ng-template #yearModeTable> <month-table [prefixCls]="prefixCls" [value]="activeDate" [activeDate]="activeDate" [cellRender]="$any(monthCell)" [fullCellRender]="$any(monthFullCell)" (valueChange)="onDateSelect($event)" ></month-table> </ng-template> `, host: { '[class.ant-picker-calendar]': 'true', '[class.ant-picker-calendar-full]': 'nzFullscreen', '[class.ant-picker-calendar-mini]': '!nzFullscreen' }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ () => NzCalendarComponent)), multi: true }] }] } ]; /** @nocollapse */ NzCalendarComponent.ctorParameters = () => [ { type: ChangeDetectorRef } ]; NzCalendarComponent.propDecorators = { nzMode: [{ type: Input }], nzValue: [{ type: Input }], nzModeChange: [{ type: Output }], nzPanelChange: [{ type: Output }], nzSelectChange: [{ type: Output }], nzValueChange: [{ type: Output }], nzDateCell: [{ type: Input }], nzDateCellChild: [{ type: ContentChild, args: [DateCell, { static: false, read: TemplateRef },] }], nzDateFullCell: [{ type: Input }], nzDateFullCellChild: [{ type: ContentChild, args: [DateFullCell, { static: false, read: TemplateRef },] }], nzMonthCell: [{ type: Input }], nzMonthCellChild: [{ type: ContentChild, args: [MonthCell, { static: false, read: TemplateRef },] }], nzMonthFullCell: [{ type: Input }], nzMonthFullCellChild: [{ type: ContentChild, args: [MonthFullCell, { static: false, read: TemplateRef },] }], nzFullscreen: [{ type: Input }] }; __decorate([ InputBoolean(), __metadata("design:type", Boolean) ], NzCalendarComponent.prototype, "nzFullscreen", void 0); if (false) { /** @type {?} */ NzCalendarComponent.ngAcceptInputType_nzFullscreen; /** @type {?} */ NzCalendarComponent.prototype.activeDate; /** @type {?} */ NzCalendarComponent.prototype.prefixCls; /** * @type {?} * @private */ NzCalendarComponent.prototype.onChangeFn; /** * @type {?} * @private */ NzCalendarComponent.prototype.onTouchFn; /** @type {?} */ NzCalendarComponent.prototype.nzMode; /** @type {?} */ NzCalendarComponent.prototype.nzValue; /** @type {?} */ NzCalendarComponent.prototype.nzModeChange; /** @type {?} */ NzCalendarComponent.prototype.nzPanelChange; /** @type {?} */ NzCalendarComponent.prototype.nzSelectChange; /** @type {?} */ NzCalendarComponent.prototype.nzValueChange; /** * Cannot use \@Input and \@ContentChild on one variable * because { static: false } will make \@Input property get delayed * * @type {?} */ NzCalendarComponent.prototype.nzDateCell; /** @type {?} */ NzCalendarComponent.prototype.nzDateCellChild; /** @type {?} */ NzCalendarComponent.prototype.nzDateFullCell; /** @type {?} */ NzCalendarComponent.prototype.nzDateFullCellChild; /** @type {?} */ NzCalendarComponent.prototype.nzMonthCell; /** @type {?} */ NzCalendarComponent.prototype.nzMonthCellChild; /** @type {?} */ NzCalendarComponent.prototype.nzMonthFullCell; /** @type {?} */ NzCalendarComponent.prototype.nzMonthFullCellChild; /** @type {?} */ NzCalendarComponent.prototype.nzFullscreen; /** * @type {?} * @private */ NzCalendarComponent.prototype.cdr; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctem9ycm8tYW50ZC9jYWxlbmRhci8iLCJzb3VyY2VzIjpbImNhbGVuZGFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBRU4sV0FBVyxFQUNYLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsbUJBQW1CLElBQUksUUFBUSxFQUMvQix1QkFBdUIsSUFBSSxZQUFZLEVBQ3ZDLG9CQUFvQixJQUFJLFNBQVMsRUFDakMsd0JBQXdCLElBQUksYUFBYSxFQUMxQyxNQUFNLGtCQUFrQixDQUFDO0FBMkQxQixNQUFNLE9BQU8sbUJBQW1COzs7O0lBK0M5QixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTVDMUMsZUFBVSxHQUFjLElBQUksU0FBUyxFQUFFLENBQUM7UUFDeEMsY0FBUyxHQUFXLHFCQUFxQixDQUFDO1FBRWxDLGVBQVU7OztRQUF5QixHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQUM7UUFDNUMsY0FBUzs7O1FBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFDO1FBRWhDLFdBQU0sR0FBbUIsT0FBTyxDQUFDO1FBR3ZCLGlCQUFZLEdBQWlDLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEUsa0JBQWEsR0FBdUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2RixtQkFBYyxHQUF1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WUFBWSxFQUFFOzt5REFBOEI7OztJQTVDdEQsbURBQW9EOztJQUVwRCx5Q0FBd0M7O0lBQ3hDLHdDQUEwQzs7Ozs7SUFFMUMseUNBQW9EOzs7OztJQUNwRCx3Q0FBeUM7O0lBRXpDLHFDQUEwQzs7SUFDMUMsc0NBQXdCOztJQUV4QiwyQ0FBbUY7O0lBQ25GLDRDQUEwRzs7SUFDMUcsNkNBQTJFOztJQUMzRSw0Q0FBMEU7Ozs7Ozs7SUFNMUUseUNBQTZDOztJQUM3Qyw4Q0FBdUc7O0lBS3ZHLDZDQUFpRDs7SUFDakQsa0RBQStHOztJQUsvRywwQ0FBOEM7O0lBQzlDLCtDQUF5Rzs7SUFLekcsOENBQWtEOztJQUNsRCxtREFBaUg7O0lBS2pILDJDQUFzRDs7Ozs7SUFFMUMsa0NBQThCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEFsaWJhYmEuY29tIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IENhbmR5RGF0ZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90aW1lJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdXRpbCc7XG5pbXBvcnQge1xuICBOekRhdGVDZWxsRGlyZWN0aXZlIGFzIERhdGVDZWxsLFxuICBOekRhdGVGdWxsQ2VsbERpcmVjdGl2ZSBhcyBEYXRlRnVsbENlbGwsXG4gIE56TW9udGhDZWxsRGlyZWN0aXZlIGFzIE1vbnRoQ2VsbCxcbiAgTnpNb250aEZ1bGxDZWxsRGlyZWN0aXZlIGFzIE1vbnRoRnVsbENlbGxcbn0gZnJvbSAnLi9jYWxlbmRhci1jZWxscyc7XG5cbmV4cG9ydCB0eXBlIE56Q2FsZW5kYXJNb2RlID0gJ21vbnRoJyB8ICd5ZWFyJztcbnR5cGUgTnpDYWxlbmRhckRhdGVUZW1wbGF0ZSA9IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBEYXRlIH0+O1xuXG5AQ29tcG9uZW50KHtcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHNlbGVjdG9yOiAnbnotY2FsZW5kYXInLFxuICBleHBvcnRBczogJ256Q2FsZW5kYXInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuei1jYWxlbmRhci1oZWFkZXJcbiAgICAgIFtmdWxsc2NyZWVuXT1cIm56RnVsbHNjcmVlblwiXG4gICAgICBbYWN0aXZlRGF0ZV09XCJhY3RpdmVEYXRlXCJcbiAgICAgIFsobW9kZSldPVwibnpNb2RlXCJcbiAgICAgIChtb2RlQ2hhbmdlKT1cIm9uTW9kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICh5ZWFyQ2hhbmdlKT1cIm9uWWVhclNlbGVjdCgkZXZlbnQpXCJcbiAgICAgIChtb250aENoYW5nZSk9XCJvbk1vbnRoU2VsZWN0KCRldmVudClcIlxuICAgID5cbiAgICA8L256LWNhbGVuZGFyLWhlYWRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJhbnQtcGlja2VyLXBhbmVsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYW50LXBpY2tlci17eyBuek1vZGUgPT09ICdtb250aCcgPyAnZGF0ZScgOiAnbW9udGgnIH19LXBhbmVsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbnQtcGlja2VyLWJvZHlcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibnpNb2RlID09PSAnbW9udGgnOyB0aGVuIG1vbnRoTW9kZVRhYmxlOyBlbHNlIHllYXJNb2RlVGFibGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI21vbnRoTW9kZVRhYmxlPlxuICAgICAgPCEtLSAgVE9ETyhAd2VucWk3MykgW2NlbGxSZW5kZXJdIFtmdWxsQ2VsbFJlbmRlcl0gLS0+XG4gICAgICA8ZGF0ZS10YWJsZVxuICAgICAgICBbcHJlZml4Q2xzXT1cInByZWZpeENsc1wiXG4gICAgICAgIFt2YWx1ZV09XCJhY3RpdmVEYXRlXCJcbiAgICAgICAgW2FjdGl2ZURhdGVdPVwiYWN0aXZlRGF0ZVwiXG4gICAgICAgIFtjZWxsUmVuZGVyXT1cIiRhbnkoZGF0ZUNlbGwpXCJcbiAgICAgICAgW2Z1bGxDZWxsUmVuZGVyXT1cIiRhbnkoZGF0ZUZ1bGxDZWxsKVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkRhdGVTZWxlY3QoJGV2ZW50KVwiXG4gICAgICA+PC9kYXRlLXRhYmxlPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tICBUT0RPKEB3ZW5xaTczKSBbY2VsbFJlbmRlcl0gW2Z1bGxDZWxsUmVuZGVyXSAtLT5cbiAgICA8bmctdGVtcGxhdGUgI3llYXJNb2RlVGFibGU+XG4gICAgICA8bW9udGgtdGFibGVcbiAgICAgICAgW3ByZWZpeENsc109XCJwcmVmaXhDbHNcIlxuICAgICAgICBbdmFsdWVdPVwiYWN0aXZlRGF0ZVwiXG4gICAgICAgIFthY3RpdmVEYXRlXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICBbY2VsbFJlbmRlcl09XCIkYW55KG1vbnRoQ2VsbClcIlxuICAgICAgICBbZnVsbENlbGxSZW5kZXJdPVwiJGFueShtb250aEZ1bGxDZWxsKVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkRhdGVTZWxlY3QoJGV2ZW50KVwiXG4gICAgICA+PC9tb250aC10YWJsZT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICBgLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5hbnQtcGlja2VyLWNhbGVuZGFyXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLmFudC1waWNrZXItY2FsZW5kYXItZnVsbF0nOiAnbnpGdWxsc2NyZWVuJyxcbiAgICAnW2NsYXNzLmFudC1waWNrZXItY2FsZW5kYXItbWluaV0nOiAnIW56RnVsbHNjcmVlbidcbiAgfSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTnpDYWxlbmRhckNvbXBvbmVudCksIG11bHRpOiB0cnVlIH1dXG59KVxuZXhwb3J0IGNsYXNzIE56Q2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX256RnVsbHNjcmVlbjogQm9vbGVhbklucHV0O1xuXG4gIGFjdGl2ZURhdGU6IENhbmR5RGF0ZSA9IG5ldyBDYW5keURhdGUoKTtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW50LXBpY2tlci1jYWxlbmRhcic7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZUZuOiAoZGF0ZTogRGF0ZSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBwcml2YXRlIG9uVG91Y2hGbjogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIEBJbnB1dCgpIG56TW9kZTogTnpDYWxlbmRhck1vZGUgPSAnbW9udGgnO1xuICBASW5wdXQoKSBuelZhbHVlPzogRGF0ZTtcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgbnpNb2RlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TnpDYWxlbmRhck1vZGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbnpQYW5lbENoYW5nZTogRXZlbnRFbWl0dGVyPHsgZGF0ZTogRGF0ZTsgbW9kZTogTnpDYWxlbmRhck1vZGUgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBuelNlbGVjdENoYW5nZTogRXZlbnRFbWl0dGVyPERhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbnpWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBDYW5ub3QgdXNlIEBJbnB1dCBhbmQgQENvbnRlbnRDaGlsZCBvbiBvbmUgdmFyaWFibGVcbiAgICogYmVjYXVzZSB7IHN0YXRpYzogZmFsc2UgfSB3aWxsIG1ha2UgQElucHV0IHByb3BlcnR5IGdldCBkZWxheWVkXG4gICAqKi9cbiAgQElucHV0KCkgbnpEYXRlQ2VsbD86IE56Q2FsZW5kYXJEYXRlVGVtcGxhdGU7XG4gIEBDb250ZW50Q2hpbGQoRGF0ZUNlbGwsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVGVtcGxhdGVSZWYgfSkgbnpEYXRlQ2VsbENoaWxkPzogTnpDYWxlbmRhckRhdGVUZW1wbGF0ZTtcbiAgZ2V0IGRhdGVDZWxsKCk6IE56Q2FsZW5kYXJEYXRlVGVtcGxhdGUge1xuICAgIHJldHVybiAodGhpcy5uekRhdGVDZWxsIHx8IHRoaXMubnpEYXRlQ2VsbENoaWxkKSE7XG4gIH1cblxuICBASW5wdXQoKSBuekRhdGVGdWxsQ2VsbD86IE56Q2FsZW5kYXJEYXRlVGVtcGxhdGU7XG4gIEBDb250ZW50Q2hpbGQoRGF0ZUZ1bGxDZWxsLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pIG56RGF0ZUZ1bGxDZWxsQ2hpbGQ/OiBOekNhbGVuZGFyRGF0ZVRlbXBsYXRlO1xuICBnZXQgZGF0ZUZ1bGxDZWxsKCk6IE56Q2FsZW5kYXJEYXRlVGVtcGxhdGUge1xuICAgIHJldHVybiAodGhpcy5uekRhdGVGdWxsQ2VsbCB8fCB0aGlzLm56RGF0ZUZ1bGxDZWxsQ2hpbGQpITtcbiAgfVxuXG4gIEBJbnB1dCgpIG56TW9udGhDZWxsPzogTnpDYWxlbmRhckRhdGVUZW1wbGF0ZTtcbiAgQENvbnRlbnRDaGlsZChNb250aENlbGwsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVGVtcGxhdGVSZWYgfSkgbnpNb250aENlbGxDaGlsZD86IE56Q2FsZW5kYXJEYXRlVGVtcGxhdGU7XG4gIGdldCBtb250aENlbGwoKTogTnpDYWxlbmRhckRhdGVUZW1wbGF0ZSB7XG4gICAgcmV0dXJuICh0aGlzLm56TW9udGhDZWxsIHx8IHRoaXMubnpNb250aENlbGxDaGlsZCkhO1xuICB9XG5cbiAgQElucHV0KCkgbnpNb250aEZ1bGxDZWxsPzogTnpDYWxlbmRhckRhdGVUZW1wbGF0ZTtcbiAgQENvbnRlbnRDaGlsZChNb250aEZ1bGxDZWxsLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pIG56TW9udGhGdWxsQ2VsbENoaWxkPzogTnpDYWxlbmRhckRhdGVUZW1wbGF0ZTtcbiAgZ2V0IG1vbnRoRnVsbENlbGwoKTogTnpDYWxlbmRhckRhdGVUZW1wbGF0ZSB7XG4gICAgcmV0dXJuICh0aGlzLm56TW9udGhGdWxsQ2VsbCB8fCB0aGlzLm56TW9udGhGdWxsQ2VsbENoaWxkKSE7XG4gIH1cblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpGdWxsc2NyZWVuOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgb25Nb2RlQ2hhbmdlKG1vZGU6IE56Q2FsZW5kYXJNb2RlKTogdm9pZCB7XG4gICAgdGhpcy5uek1vZGVDaGFuZ2UuZW1pdChtb2RlKTtcbiAgICB0aGlzLm56UGFuZWxDaGFuZ2UuZW1pdCh7IGRhdGU6IHRoaXMuYWN0aXZlRGF0ZS5uYXRpdmVEYXRlLCBtb2RlIH0pO1xuICB9XG5cbiAgb25ZZWFyU2VsZWN0KHllYXI6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLmFjdGl2ZURhdGUuc2V0WWVhcih5ZWFyKTtcbiAgICB0aGlzLnVwZGF0ZURhdGUoZGF0ZSk7XG4gIH1cblxuICBvbk1vbnRoU2VsZWN0KG1vbnRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5hY3RpdmVEYXRlLnNldE1vbnRoKG1vbnRoKTtcbiAgICB0aGlzLnVwZGF0ZURhdGUoZGF0ZSk7XG4gIH1cblxuICBvbkRhdGVTZWxlY3QoZGF0ZTogQ2FuZHlEYXRlKTogdm9pZCB7XG4gICAgLy8gT25seSBhY3RpdmVEYXRlIGlzIGVub3VnaCBpbiBjYWxlbmRhclxuICAgIC8vIHRoaXMudmFsdWUgPSBkYXRlO1xuICAgIHRoaXMudXBkYXRlRGF0ZShkYXRlKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IERhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVEYXRlKG5ldyBDYW5keURhdGUodmFsdWUgYXMgRGF0ZSksIGZhbHNlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChkYXRlOiBEYXRlKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZUZuID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaEZuID0gZm47XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURhdGUoZGF0ZTogQ2FuZHlEYXRlLCB0b3VjaGVkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGRhdGU7XG5cbiAgICBpZiAodG91Y2hlZCkge1xuICAgICAgdGhpcy5vbkNoYW5nZUZuKGRhdGUubmF0aXZlRGF0ZSk7XG4gICAgICB0aGlzLm9uVG91Y2hGbigpO1xuICAgICAgdGhpcy5uelNlbGVjdENoYW5nZS5lbWl0KGRhdGUubmF0aXZlRGF0ZSk7XG4gICAgICB0aGlzLm56VmFsdWVDaGFuZ2UuZW1pdChkYXRlLm5hdGl2ZURhdGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5uelZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZURhdGUobmV3IENhbmR5RGF0ZSh0aGlzLm56VmFsdWUpLCBmYWxzZSk7XG4gICAgfVxuICB9XG59XG4iXX0=