UNPKG

ng-zorro-antd-mobile

Version:

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

161 lines 23 kB
import { Component, ViewEncapsulation, HostBinding, Input, ElementRef } from '@angular/core'; import { DateModels } from '../date/DataTypes'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class CalendarSingleMonthComponent { set data(value) { this.props = { ...this.props, ...value }; } constructor(_elementRef) { this._elementRef = _elementRef; this.props = { rowSize: 'normal' }; this.state = { weekComponents: [] }; this.singleMonth = true; this.genWeek = (weeksData, index) => { const { getDateExtra, monthData, onCellClick, locale, rowSize } = this.props; let rowCls = 'row'; let weeksDataList = []; if (rowSize === 'xl') { rowCls += ' row-xl'; } weeksData.forEach((day, dayOfWeek) => { const extra = (getDateExtra && getDateExtra(new Date(day.tick))) || {}; let info = extra.info; const disable = extra.disable || day.outOfDate; let cls = 'date'; let lCls = 'left'; let rCls = 'right'; let infoCls = 'info'; if (dayOfWeek === 0 || dayOfWeek === 6) { cls += ' grey'; } if (disable) { cls += ' disable'; } else if (info) { cls += ' important'; } if (day.selected) { cls += ' date-selected'; let styleType = day.selected; switch (styleType) { case DateModels.SelectType.Only: info = locale.begin; infoCls += ' date-selected'; break; case DateModels.SelectType.All: info = locale.begin_over; infoCls += ' date-selected'; break; case DateModels.SelectType.Start: info = locale.begin; infoCls += ' date-selected'; if (dayOfWeek === 6 || day.isLastOfMonth) { styleType = DateModels.SelectType.All; } break; case DateModels.SelectType.Middle: if (dayOfWeek === 0 || day.isFirstOfMonth) { if (day.isLastOfMonth || dayOfWeek === 6) { styleType = DateModels.SelectType.All; } else { styleType = DateModels.SelectType.Start; } } else if (dayOfWeek === 6 || day.isLastOfMonth) { styleType = DateModels.SelectType.End; } break; case DateModels.SelectType.End: info = locale.over; infoCls += ' date-selected'; if (dayOfWeek === 0 || day.isFirstOfMonth) { styleType = DateModels.SelectType.All; } break; } switch (styleType) { case DateModels.SelectType.Single: case DateModels.SelectType.Only: case DateModels.SelectType.All: cls += ' selected-single'; break; case DateModels.SelectType.Start: cls += ' selected-start'; rCls += ' date-selected'; break; case DateModels.SelectType.Middle: cls += ' selected-middle'; lCls += ' date-selected'; rCls += ' date-selected'; break; case DateModels.SelectType.End: cls += ' selected-end'; lCls += ' date-selected'; break; } } weeksDataList[dayOfWeek] = { lCls, cls, day, rCls, infoCls, info, extra, disable, onCellClick: onCellClick, monthData }; }); this.state.weekComponents[index] = { index: index, rowCls, weeksDataList }; }; this.updateWeeks = (monthData) => { (monthData || this.props.monthData).weeks.forEach((week, index) => { this.genWeek(week, index); }); }; this.setWarpper = (dom) => { this.wrapperDivDOM = dom; }; } onClickCell(item) { if (!item.disable && item.onCellClick) { item.onCellClick(item.day, item.monthData); } } ngOnInit() { this.setWarpper(this._elementRef.nativeElement); this.props.monthData.weeks.forEach((week, index) => { this.genWeek(week, index); }); } ngAfterViewInit() { this.ref = this.props.ref; this.ref(this); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: CalendarSingleMonthComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: CalendarSingleMonthComponent, selector: "CalendarSingleMonth, nzm-single-month", inputs: { data: "data" }, host: { properties: { "class.single-month": "this.singleMonth" } }, ngImport: i0, template: "<div class=\"month-title\">\n {{ props.monthData.title }}\n</div>\n<div class=\"date\">\n <div *ngFor=\"let row of state.weekComponents; let i = index\" [ngClass]=\"row.rowCls\">\n <div\n *ngFor=\"let cell of row.weeksDataList; let j = index\"\n class=\"{{ 'cell ' + ((cell.extra && cell.extra.cellCls) || '') }}\"\n (click)=\"onClickCell(cell)\"\n >\n <div *ngIf=\"row.extra && row.extra.cellRender\">test</div>\n <div *ngIf=\"!row.extra || (row.extra && row.extra.cellRender)\" class=\"date-wrapper\">\n <span [ngClass]=\"cell.lCls\"></span>\n <div [ngClass]=\"cell.cls\">\n {{ (cell.day && cell.day.dayOfMonth) || '' }}\n </div>\n <span [ngClass]=\"cell.rCls\"></span>\n </div>\n <div *ngIf=\"!row.extra || (row.extra && row.extra.cellRender)\" [ngClass]=\"cell.infoCls\">\n {{ cell.info }}\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: CalendarSingleMonthComponent, decorators: [{ type: Component, args: [{ selector: 'CalendarSingleMonth, nzm-single-month', encapsulation: ViewEncapsulation.None, template: "<div class=\"month-title\">\n {{ props.monthData.title }}\n</div>\n<div class=\"date\">\n <div *ngFor=\"let row of state.weekComponents; let i = index\" [ngClass]=\"row.rowCls\">\n <div\n *ngFor=\"let cell of row.weeksDataList; let j = index\"\n class=\"{{ 'cell ' + ((cell.extra && cell.extra.cellCls) || '') }}\"\n (click)=\"onClickCell(cell)\"\n >\n <div *ngIf=\"row.extra && row.extra.cellRender\">test</div>\n <div *ngIf=\"!row.extra || (row.extra && row.extra.cellRender)\" class=\"date-wrapper\">\n <span [ngClass]=\"cell.lCls\"></span>\n <div [ngClass]=\"cell.cls\">\n {{ (cell.day && cell.day.dayOfMonth) || '' }}\n </div>\n <span [ngClass]=\"cell.rCls\"></span>\n </div>\n <div *ngIf=\"!row.extra || (row.extra && row.extra.cellRender)\" [ngClass]=\"cell.infoCls\">\n {{ cell.info }}\n </div>\n </div>\n </div>\n</div>\n" }] }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { data: [{ type: Input }], singleMonth: [{ type: HostBinding, args: ['class.single-month'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLW1vbnRoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY2FsZW5kYXIvc2luZ2xlLW1vbnRoL3NpbmdsZS1tb250aC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NhbGVuZGFyL3NpbmdsZS1tb250aC9zaW5nbGUtbW9udGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFRL0MsTUFBTSxPQUFPLDRCQUE0QjtJQVd2QyxJQUNJLElBQUksQ0FBQyxLQUFLO1FBQ1osSUFBSSxDQUFDLEtBQUssR0FBRztZQUNYLEdBQUcsSUFBSSxDQUFDLEtBQUs7WUFDYixHQUFHLEtBQUs7U0FDVCxDQUFDO0lBQ0osQ0FBQztJQUlELFlBQW9CLFdBQXVCO1FBQXZCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBcEIzQyxVQUFLLEdBQUc7WUFDTixPQUFPLEVBQUUsUUFBUTtTQUNjLENBQUM7UUFFbEMsVUFBSyxHQUFHO1lBQ04sY0FBYyxFQUFFLEVBQUU7U0FDbkIsQ0FBQztRQVlpQyxnQkFBVyxHQUFZLElBQUksQ0FBQztRQUkvRCxZQUFPLEdBQUcsQ0FBQyxTQUFnQyxFQUFFLEtBQWEsRUFBRSxFQUFFO1lBQzVELE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUM3RSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDbkIsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksT0FBTyxLQUFLLElBQUks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Y2pDLElBQUk7c0JBRFAsS0FBSztnQkFRNkIsV0FBVztzQkFBN0MsV0FBVzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24sIEhvc3RCaW5kaW5nLCBJbnB1dCwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZU1vZGVscyB9IGZyb20gJy4uL2RhdGUvRGF0YVR5cGVzJztcbmltcG9ydCB7IENhbGVuZGFyU2luZ2xlTW9udGhQcm9wc1R5cGUgfSBmcm9tICcuL1Byb3BzVHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0NhbGVuZGFyU2luZ2xlTW9udGgsIG56bS1zaW5nbGUtbW9udGgnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2luZ2xlLW1vbnRoLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhclNpbmdsZU1vbnRoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgcHJvcHMgPSB7XG4gICAgcm93U2l6ZTogJ25vcm1hbCdcbiAgfSBhcyBDYWxlbmRhclNpbmdsZU1vbnRoUHJvcHNUeXBlO1xuXG4gIHN0YXRlID0ge1xuICAgIHdlZWtDb21wb25lbnRzOiBbXVxuICB9O1xuICByZWY6IChkb20pID0+IHZvaWQ7XG4gIHdyYXBwZXJEaXZET006IEhUTUxEaXZFbGVtZW50IHwgbnVsbDtcblxuICBASW5wdXQoKVxuICBzZXQgZGF0YSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgLi4udmFsdWVcbiAgICB9O1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zaW5nbGUtbW9udGgnKSBzaW5nbGVNb250aDogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICBnZW5XZWVrID0gKHdlZWtzRGF0YTogRGF0ZU1vZGVscy5DZWxsRGF0YVtdLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgeyBnZXREYXRlRXh0cmEsIG1vbnRoRGF0YSwgb25DZWxsQ2xpY2ssIGxvY2FsZSwgcm93U2l6ZSB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgcm93Q2xzID0gJ3Jvdyc7XG4gICAgbGV0IHdlZWtzRGF0YUxpc3QgPSBbXTtcbiAgICBpZiAocm93U2l6ZSA9PT0gJ3hsJykge1xuICAgICAgcm93Q2xzICs9ICcgcm93LXhsJztcbiAgICB9XG5cbiAgICB3ZWVrc0RhdGEuZm9yRWFjaCgoZGF5LCBkYXlPZldlZWspID0+IHtcbiAgICAgIGNvbnN0IGV4dHJhID0gKGdldERhdGVFeHRyYSAmJiBnZXREYXRlRXh0cmEobmV3IERhdGUoZGF5LnRpY2spKSkgfHwge307XG4gICAgICBsZXQgaW5mbyA9IGV4dHJhLmluZm87XG4gICAgICBjb25zdCBkaXNhYmxlID0gZXh0cmEuZGlzYWJsZSB8fCBkYXkub3V0T2ZEYXRlO1xuXG4gICAgICBsZXQgY2xzID0gJ2RhdGUnO1xuICAgICAgbGV0IGxDbHMgPSAnbGVmdCc7XG4gICAgICBsZXQgckNscyA9ICdyaWdodCc7XG4gICAgICBsZXQgaW5mb0NscyA9ICdpbmZvJztcblxuICAgICAgaWYgKGRheU9mV2VlayA9PT0gMCB8fCBkYXlPZldlZWsgPT09IDYpIHtcbiAgICAgICAgY2xzICs9ICcgZ3JleSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaXNhYmxlKSB7XG4gICAgICAgIGNscyArPSAnIGRpc2FibGUnO1xuICAgICAgfSBlbHNlIGlmIChpbmZvKSB7XG4gICAgICAgIGNscyArPSAnIGltcG9ydGFudCc7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXkuc2VsZWN0ZWQpIHtcbiAgICAgICAgY2xzICs9ICcgZGF0ZS1zZWxlY3RlZCc7XG4gICAgICAgIGxldCBzdHlsZVR5cGUgPSBkYXkuc2VsZWN0ZWQ7XG4gICAgICAgIHN3aXRjaCAoc3R5bGVUeXBlKSB7XG4gICAgICAgICAgY2FzZSBEYXRlTW9kZWxzLlNlbGVjdFR5cGUuT25seTpcbiAgICAgICAgICAgIGluZm8gPSBsb2NhbGUuYmVnaW47XG4gICAgICAgICAgICBpbmZvQ2xzICs9ICcgZGF0ZS1zZWxlY3RlZCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIERhdGVNb2RlbHMuU2VsZWN0VHlwZS5BbGw6XG4gICAgICAgICAgICBpbmZvID0gbG9jYWxlLmJlZ2luX292ZXI7XG4gICAgICAgICAgICBpbmZvQ2xzICs9ICcgZGF0ZS1zZWxlY3RlZCc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgRGF0ZU1vZGVscy5TZWxlY3RUeXBlLlN0YXJ0OlxuICAgICAgICAgICAgaW5mbyA9IGxvY2FsZS5iZWdpbjtcbiAgICAgICAgICAgIGluZm9DbHMgKz0gJyBkYXRlLXNlbGVjdGVkJztcbiAgICAgICAgICAgIGlmIChkYXlPZldlZWsgPT09IDYgfHwgZGF5LmlzTGFzdE9mTW9udGgpIHtcbiAgICAgICAgICAgICAgc3R5bGVUeXBlID0gRGF0ZU1vZGVscy5TZWxlY3RUeXBlLkFsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgRGF0ZU1vZGVscy5TZWxlY3RUeXBlLk1pZGRsZTpcbiAgICAgICAgICAgIGlmIChkYXlPZldlZWsgPT09IDAgfHwgZGF5LmlzRmlyc3RPZk1vbnRoKSB7XG4gICAgICAgICAgICAgIGlmIChkYXkuaXNMYXN0T2ZNb250aCB8fCBkYXlPZldlZWsgPT09IDYpIHtcbiAgICAgICAgICAgICAgICBzdHlsZVR5cGUgPSBEYXRlTW9kZWxzLlNlbGVjdFR5cGUuQWxsO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0eWxlVHlwZSA9IERhdGVNb2RlbHMuU2VsZWN0VHlwZS5TdGFydDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXlPZldlZWsgPT09IDYgfHwgZGF5LmlzTGFzdE9mTW9udGgpIHtcbiAgICAgICAgICAgICAgc3R5bGVUeXBlID0gRGF0ZU1vZGVscy5TZWxlY3RUeXBlLkVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgRGF0ZU1vZGVscy5TZWxlY3RUeXBlLkVuZDpcbiAgICAgICAgICAgIGluZm8gPSBsb2NhbGUub3ZlcjtcbiAgICAgICAgICAgIGluZm9DbHMgKz0gJyBkYXRlLXNlbGVjdGVkJztcbiAgICAgICAgICAgIGlmIChkYXlPZldlZWsgPT09IDAgfHwgZGF5LmlzRmlyc3RPZk1vbnRoKSB7XG4gICAgICAgICAgICAgIHN0eWxlVHlwZSA9IERhdGVNb2RlbHMuU2VsZWN0VHlwZS5BbGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoc3R5bGVUeXBlKSB7XG4gICAgICAgICAgY2FzZSBEYXRlTW9kZWxzLlNlbGVjdFR5cGUuU2luZ2xlOlxuICAgICAgICAgIGNhc2UgRGF0ZU1vZGVscy5TZWxlY3RUeXBlLk9ubHk6XG4gICAgICAgICAgY2FzZSBEYXRlTW9kZWxzLlNlbGVjdFR5cGUuQWxsOlxuICAgICAgICAgICAgY2xzICs9ICcgc2VsZWN0ZWQtc2luZ2xlJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgRGF0ZU1vZGVscy5TZWxlY3RUeXBlLlN0YXJ0OlxuICAgICAgICAgICAgY2xzICs9ICcgc2VsZWN0ZWQtc3RhcnQnO1xuICAgICAgICAgICAgckNscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBEYXRlTW9kZWxzLlNlbGVjdFR5cGUuTWlkZGxlOlxuICAgICAgICAgICAgY2xzICs9ICcgc2VsZWN0ZWQtbWlkZGxlJztcbiAgICAgICAgICAgIGxDbHMgKz0gJyBkYXRlLXNlbGVjdGVkJztcbiAgICAgICAgICAgIHJDbHMgKz0gJyBkYXRlLXNlbGVjdGVkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgRGF0ZU1vZGVscy5TZWxlY3RUeXBlLkVuZDpcbiAgICAgICAgICAgIGNscyArPSAnIHNlbGVjdGVkLWVuZCc7XG4gICAgICAgICAgICBsQ2xzICs9ICcgZGF0ZS1zZWxlY3RlZCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3ZWVrc0RhdGFMaXN0W2RheU9mV2Vla10gPSB7XG4gICAgICAgIGxDbHMsXG4gICAgICAgIGNscyxcbiAgICAgICAgZGF5LFxuICAgICAgICByQ2xzLFxuICAgICAgICBpbmZvQ2xzLFxuICAgICAgICBpbmZvLFxuICAgICAgICBleHRyYSxcbiAgICAgICAgZGlzYWJsZSxcbiAgICAgICAgb25DZWxsQ2xpY2s6IG9uQ2VsbENsaWNrLFxuICAgICAgICBtb250aERhdGFcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXRlLndlZWtDb21wb25lbnRzW2luZGV4XSA9IHtcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIHJvd0NscyxcbiAgICAgIHdlZWtzRGF0YUxpc3RcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlV2Vla3MgPSAobW9udGhEYXRhPzogRGF0ZU1vZGVscy5Nb250aERhdGEpID0+IHtcbiAgICAobW9udGhEYXRhIHx8IHRoaXMucHJvcHMubW9udGhEYXRhKS53ZWVrcy5mb3JFYWNoKCh3ZWVrLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5nZW5XZWVrKHdlZWssIGluZGV4KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFdhcnBwZXIgPSAoZG9tOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgIHRoaXMud3JhcHBlckRpdkRPTSA9IGRvbTtcbiAgfVxuXG4gIG9uQ2xpY2tDZWxsKGl0ZW0pIHtcbiAgICBpZiAoIWl0ZW0uZGlzYWJsZSAmJiBpdGVtLm9uQ2VsbENsaWNrKSB7XG4gICAgICBpdGVtLm9uQ2VsbENsaWNrKGl0ZW0uZGF5LCBpdGVtLm1vbnRoRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXRXYXJwcGVyKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5wcm9wcy5tb250aERhdGEud2Vla3MuZm9yRWFjaCgod2VlaywgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMuZ2VuV2Vlayh3ZWVrLCBpbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZWYgPSB0aGlzLnByb3BzLnJlZjtcbiAgICB0aGlzLnJlZih0aGlzKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1vbnRoLXRpdGxlXCI+XG4gIHt7IHByb3BzLm1vbnRoRGF0YS50aXRsZSB9fVxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZGF0ZVwiPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2Ygc3RhdGUud2Vla0NvbXBvbmVudHM7IGxldCBpID0gaW5kZXhcIiBbbmdDbGFzc109XCJyb3cucm93Q2xzXCI+XG4gICAgPGRpdlxuICAgICAgKm5nRm9yPVwibGV0IGNlbGwgb2Ygcm93LndlZWtzRGF0YUxpc3Q7IGxldCBqID0gaW5kZXhcIlxuICAgICAgY2xhc3M9XCJ7eyAnY2VsbCAnICsgKChjZWxsLmV4dHJhICYmIGNlbGwuZXh0cmEuY2VsbENscykgfHwgJycpIH19XCJcbiAgICAgIChjbGljayk9XCJvbkNsaWNrQ2VsbChjZWxsKVwiXG4gICAgPlxuICAgICAgPGRpdiAqbmdJZj1cInJvdy5leHRyYSAmJiByb3cuZXh0cmEuY2VsbFJlbmRlclwiPnRlc3Q8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCIhcm93LmV4dHJhIHx8IChyb3cuZXh0cmEgJiYgcm93LmV4dHJhLmNlbGxSZW5kZXIpXCIgY2xhc3M9XCJkYXRlLXdyYXBwZXJcIj5cbiAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiY2VsbC5sQ2xzXCI+PC9zcGFuPlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImNlbGwuY2xzXCI+XG4gICAgICAgICAge3sgKGNlbGwuZGF5ICYmIGNlbGwuZGF5LmRheU9mTW9udGgpIHx8ICcnIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJjZWxsLnJDbHNcIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCIhcm93LmV4dHJhIHx8IChyb3cuZXh0cmEgJiYgcm93LmV4dHJhLmNlbGxSZW5kZXIpXCIgW25nQ2xhc3NdPVwiY2VsbC5pbmZvQ2xzXCI+XG4gICAgICAgIHt7IGNlbGwuaW5mbyB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=