ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
161 lines • 23 kB
JavaScript
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=