ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
226 lines (225 loc) • 21.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, ViewEncapsulation, HostBinding, Input, ElementRef } from '@angular/core';
import { Models } from '../date/DataTypes';
/**
* @record
*/
export function PropsType() { }
/** @type {?} */
PropsType.prototype.locale;
/** @type {?} */
PropsType.prototype.monthData;
/** @type {?|undefined} */
PropsType.prototype.rowSize;
/** @type {?|undefined} */
PropsType.prototype.getDateExtra;
/** @type {?|undefined} */
PropsType.prototype.onCellClick;
/** @type {?} */
PropsType.prototype.ref;
export class SingleMonthComponent {
/**
* @param {?} _elementRef
*/
constructor(_elementRef) {
this._elementRef = _elementRef;
this.props = /** @type {?} */ ({
rowSize: 'normal'
});
this.state = {
weekComponents: []
};
this.singleMonth = true;
this.genWeek = (weeksData, index) => {
const { getDateExtra, monthData, onCellClick, locale, rowSize } = this.props;
/** @type {?} */
let rowCls = 'row';
/** @type {?} */
let weeksDataList = [];
if (rowSize === 'xl') {
rowCls += ' row-xl';
}
weeksData.forEach((day, dayOfWeek) => {
/** @type {?} */
const extra = (getDateExtra && getDateExtra(new Date(day.tick))) || {};
/** @type {?} */
let info = extra.info;
/** @type {?} */
const disable = extra.disable || day.outOfDate;
/** @type {?} */
let cls = 'date';
/** @type {?} */
let lCls = 'left';
/** @type {?} */
let rCls = 'right';
/** @type {?} */
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';
/** @type {?} */
let styleType = day.selected;
switch (styleType) {
case Models.SelectType.Only:
info = locale.begin;
infoCls += ' date-selected';
break;
case Models.SelectType.All:
info = locale.begin_over;
infoCls += ' date-selected';
break;
case Models.SelectType.Start:
info = locale.begin;
infoCls += ' date-selected';
if (dayOfWeek === 6 || day.isLastOfMonth) {
styleType = Models.SelectType.All;
}
break;
case Models.SelectType.Middle:
if (dayOfWeek === 0 || day.isFirstOfMonth) {
if (day.isLastOfMonth || dayOfWeek === 6) {
styleType = Models.SelectType.All;
}
else {
styleType = Models.SelectType.Start;
}
}
else if (dayOfWeek === 6 || day.isLastOfMonth) {
styleType = Models.SelectType.End;
}
break;
case Models.SelectType.End:
info = locale.over;
infoCls += ' date-selected';
if (dayOfWeek === 0 || day.isFirstOfMonth) {
styleType = Models.SelectType.All;
}
break;
}
switch (styleType) {
case Models.SelectType.Single:
case Models.SelectType.Only:
case Models.SelectType.All:
cls += ' selected-single';
break;
case Models.SelectType.Start:
cls += ' selected-start';
rCls += ' date-selected';
break;
case Models.SelectType.Middle:
cls += ' selected-middle';
lCls += ' date-selected';
rCls += ' date-selected';
break;
case Models.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;
};
}
/**
* @param {?} value
* @return {?}
*/
set data(value) {
this.props = Object.assign({}, this.props, value);
}
/**
* @param {?} item
* @return {?}
*/
onClickCell(item) {
!item.disable && item.onCellClick && item.onCellClick(item.day, item.monthData);
}
/**
* @return {?}
*/
ngOnInit() {
this.setWarpper(this._elementRef.nativeElement);
this.props.monthData.weeks.forEach((week, index) => {
this.genWeek(week, index);
});
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.ref = this.props.ref;
this.ref(this);
}
}
SingleMonthComponent.decorators = [
{ type: Component, args: [{
selector: 'SingleMonth, nzm-single-month',
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 *ngFor=\"let cell of row.weeksDataList;let j = index;\"\n class=\"{{'cell ' + (row.extra && row.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",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
SingleMonthComponent.ctorParameters = () => [
{ type: ElementRef }
];
SingleMonthComponent.propDecorators = {
data: [{ type: Input }],
singleMonth: [{ type: HostBinding, args: ['class.single-month',] }]
};
if (false) {
/** @type {?} */
SingleMonthComponent.prototype.props;
/** @type {?} */
SingleMonthComponent.prototype.state;
/** @type {?} */
SingleMonthComponent.prototype.ref;
/** @type {?} */
SingleMonthComponent.prototype.wrapperDivDOM;
/** @type {?} */
SingleMonthComponent.prototype.singleMonth;
/** @type {?} */
SingleMonthComponent.prototype.genWeek;
/** @type {?} */
SingleMonthComponent.prototype.updateWeeks;
/** @type {?} */
SingleMonthComponent.prototype.setWarpper;
/** @type {?} */
SingleMonthComponent.prototype._elementRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLW1vbnRoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsiY2FsZW5kYXIvc2luZ2xlLW1vbnRoL3NpbmdsZS1tb250aC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQjNDLE1BQU07Ozs7SUFxQkosWUFBb0IsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7dUNBcEJuQztZQUNOLE9BQU8sRUFBRSxRQUFRO1NBQ0w7cUJBRU47WUFDTixjQUFjLEVBQUUsRUFBRTtTQUNuQjsyQkFZeUQsSUFBSTt1QkFJcEQsQ0FBQyxTQUE0QixFQUFFLEtBQWEsRUFBRSxFQUFFO1lBQ3hELE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzs7WUFDN0UsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDOztZQUNuQixJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO2dCQUNwQixNQUFNLElBQUksU0FBUyxDQUFDO2FBQ3JCO1lBRUQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRTs7Z0JBQ25DLE1BQU0sS0FBSyxHQUFHLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7Z0JBQ3ZFLElBQUksSUFBSSxHQUFH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L0MsSUFDSSxJQUFJLENBQUMsS0FBSztRQUNaLElBQUksQ0FBQyxLQUFLLHFCQUNMLElBQUksQ0FBQyxLQUFLLEVBQ1YsS0FBSyxDQUNULENBQUM7S0FDSDs7Ozs7SUErSEQsV0FBVyxDQUFDLElBQUk7UUFDZCxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ2pGOzs7O0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzNCLENBQUMsQ0FBQztLQUNKOzs7O0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNoQjs7O1lBbktGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsK0JBQStCO2dCQUN6QywyNUJBQTRDO2dCQUM1QyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7OztZQWhCa0UsVUFBVTs7O21CQTRCMUUsS0FBSzswQkFRTCxXQUFXLFNBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBIb3N0QmluZGluZywgSW5wdXQsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4uL2RhdGUvRGF0YVR5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBQcm9wc1R5cGUge1xuICBsb2NhbGU6IE1vZGVscy5Mb2NhbGU7XG4gIG1vbnRoRGF0YTogTW9kZWxzLk1vbnRoRGF0YTtcbiAgcm93U2l6ZT86ICdub3JtYWwnIHwgJ3hsJztcbiAgZ2V0RGF0ZUV4dHJhPzogKGRhdGU6IERhdGUpID0+IE1vZGVscy5FeHRyYURhdGE7XG4gIG9uQ2VsbENsaWNrPzogKGRhdGE6IE1vZGVscy5DZWxsRGF0YSwgbW9udGhEYXRhOiBNb2RlbHMuTW9udGhEYXRhKSA9PiB2b2lkO1xuICByZWY6IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnU2luZ2xlTW9udGgsIG56bS1zaW5nbGUtbW9udGgnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2luZ2xlLW1vbnRoLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTaW5nbGVNb250aENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByb3BzID0ge1xuICAgIHJvd1NpemU6ICdub3JtYWwnXG4gIH0gYXMgUHJvcHNUeXBlO1xuXG4gIHN0YXRlID0ge1xuICAgIHdlZWtDb21wb25lbnRzOiBbXVxuICB9O1xuICByZWY6IChkb20pID0+IHZvaWQ7XG4gIHdyYXBwZXJEaXZET006IEhUTUxEaXZFbGVtZW50IHwgbnVsbDtcblxuICBASW5wdXQoKVxuICBzZXQgZGF0YSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgLi4udmFsdWVcbiAgICB9O1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zaW5nbGUtbW9udGgnKSBzaW5nbGVNb250aDogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICBnZW5XZWVrID0gKHdlZWtzRGF0YTogTW9kZWxzLkNlbGxEYXRhW10sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCB7IGdldERhdGVFeHRyYSwgbW9udGhEYXRhLCBvbkNlbGxDbGljaywgbG9jYWxlLCByb3dTaXplIH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCByb3dDbHMgPSAncm93JztcbiAgICBsZXQgd2Vla3NEYXRhTGlzdCA9IFtdO1xuICAgIGlmIChyb3dTaXplID09PSAneGwnKSB7XG4gICAgICByb3dDbHMgKz0gJyByb3cteGwnO1xuICAgIH1cblxuICAgIHdlZWtzRGF0YS5mb3JFYWNoKChkYXksIGRheU9mV2VlaykgPT4ge1xuICAgICAgY29uc3QgZXh0cmEgPSAoZ2V0RGF0ZUV4dHJhICYmIGdldERhdGVFeHRyYShuZXcgRGF0ZShkYXkudGljaykpKSB8fCB7fTtcbiAgICAgIGxldCBpbmZvID0gZXh0cmEuaW5mbztcbiAgICAgIGNvbnN0IGRpc2FibGUgPSBleHRyYS5kaXNhYmxlIHx8IGRheS5vdXRPZkRhdGU7XG5cbiAgICAgIGxldCBjbHMgPSAnZGF0ZSc7XG4gICAgICBsZXQgbENscyA9ICdsZWZ0JztcbiAgICAgIGxldCByQ2xzID0gJ3JpZ2h0JztcbiAgICAgIGxldCBpbmZvQ2xzID0gJ2luZm8nO1xuXG4gICAgICBpZiAoZGF5T2ZXZWVrID09PSAwIHx8IGRheU9mV2VlayA9PT0gNikge1xuICAgICAgICBjbHMgKz0gJyBncmV5JztcbiAgICAgIH1cblxuICAgICAgaWYgKGRpc2FibGUpIHtcbiAgICAgICAgY2xzICs9ICcgZGlzYWJsZSc7XG4gICAgICB9IGVsc2UgaWYgKGluZm8pIHtcbiAgICAgICAgY2xzICs9ICcgaW1wb3J0YW50JztcbiAgICAgIH1cblxuICAgICAgaWYgKGRheS5zZWxlY3RlZCkge1xuICAgICAgICBjbHMgKz0gJyBkYXRlLXNlbGVjdGVkJztcbiAgICAgICAgbGV0IHN0eWxlVHlwZSA9IGRheS5zZWxlY3RlZDtcbiAgICAgICAgc3dpdGNoIChzdHlsZVR5cGUpIHtcbiAgICAgICAgICBjYXNlIE1vZGVscy5TZWxlY3RUeXBlLk9ubHk6XG4gICAgICAgICAgICBpbmZvID0gbG9jYWxlLmJlZ2luO1xuICAgICAgICAgICAgaW5mb0NscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBNb2RlbHMuU2VsZWN0VHlwZS5BbGw6XG4gICAgICAgICAgICBpbmZvID0gbG9jYWxlLmJlZ2luX292ZXI7XG4gICAgICAgICAgICBpbmZvQ2xzICs9ICcgZGF0ZS1zZWxlY3RlZCc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgTW9kZWxzLlNlbGVjdFR5cGUuU3RhcnQ6XG4gICAgICAgICAgICBpbmZvID0gbG9jYWxlLmJlZ2luO1xuICAgICAgICAgICAgaW5mb0NscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgaWYgKGRheU9mV2VlayA9PT0gNiB8fCBkYXkuaXNMYXN0T2ZNb250aCkge1xuICAgICAgICAgICAgICBzdHlsZVR5cGUgPSBNb2RlbHMuU2VsZWN0VHlwZS5BbGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIE1vZGVscy5TZWxlY3RUeXBlLk1pZGRsZTpcbiAgICAgICAgICAgIGlmIChkYXlPZldlZWsgPT09IDAgfHwgZGF5LmlzRmlyc3RPZk1vbnRoKSB7XG4gICAgICAgICAgICAgIGlmIChkYXkuaXNMYXN0T2ZNb250aCB8fCBkYXlPZldlZWsgPT09IDYpIHtcbiAgICAgICAgICAgICAgICBzdHlsZVR5cGUgPSBNb2RlbHMuU2VsZWN0VHlwZS5BbGw7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGVUeXBlID0gTW9kZWxzLlNlbGVjdFR5cGUuU3RhcnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZXZWVrID09PSA2IHx8IGRheS5pc0xhc3RPZk1vbnRoKSB7XG4gICAgICAgICAgICAgIHN0eWxlVHlwZSA9IE1vZGVscy5TZWxlY3RUeXBlLkVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTW9kZWxzLlNlbGVjdFR5cGUuRW5kOlxuICAgICAgICAgICAgaW5mbyA9IGxvY2FsZS5vdmVyO1xuICAgICAgICAgICAgaW5mb0NscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgaWYgKGRheU9mV2VlayA9PT0gMCB8fCBkYXkuaXNGaXJzdE9mTW9udGgpIHtcbiAgICAgICAgICAgICAgc3R5bGVUeXBlID0gTW9kZWxzLlNlbGVjdFR5cGUuQWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHN0eWxlVHlwZSkge1xuICAgICAgICAgIGNhc2UgTW9kZWxzLlNlbGVjdFR5cGUuU2luZ2xlOlxuICAgICAgICAgIGNhc2UgTW9kZWxzLlNlbGVjdFR5cGUuT25seTpcbiAgICAgICAgICBjYXNlIE1vZGVscy5TZWxlY3RUeXBlLkFsbDpcbiAgICAgICAgICAgIGNscyArPSAnIHNlbGVjdGVkLXNpbmdsZSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIE1vZGVscy5TZWxlY3RUeXBlLlN0YXJ0OlxuICAgICAgICAgICAgY2xzICs9ICcgc2VsZWN0ZWQtc3RhcnQnO1xuICAgICAgICAgICAgckNscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBNb2RlbHMuU2VsZWN0VHlwZS5NaWRkbGU6XG4gICAgICAgICAgICBjbHMgKz0gJyBzZWxlY3RlZC1taWRkbGUnO1xuICAgICAgICAgICAgbENscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgckNscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBNb2RlbHMuU2VsZWN0VHlwZS5FbmQ6XG4gICAgICAgICAgICBjbHMgKz0gJyBzZWxlY3RlZC1lbmQnO1xuICAgICAgICAgICAgbENscyArPSAnIGRhdGUtc2VsZWN0ZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd2Vla3NEYXRhTGlzdFtkYXlPZldlZWtdID0ge1xuICAgICAgICBsQ2xzLFxuICAgICAgICBjbHMsXG4gICAgICAgIGRheSxcbiAgICAgICAgckNscyxcbiAgICAgICAgaW5mb0NscyxcbiAgICAgICAgaW5mbyxcbiAgICAgICAgZXh0cmEsXG4gICAgICAgIGRpc2FibGUsXG4gICAgICAgIG9uQ2VsbENsaWNrOiBvbkNlbGxDbGljayxcbiAgICAgICAgbW9udGhEYXRhXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5zdGF0ZS53ZWVrQ29tcG9uZW50c1tpbmRleF0gPSB7XG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICByb3dDbHMsXG4gICAgICB3ZWVrc0RhdGFMaXN0XG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZVdlZWtzID0gKG1vbnRoRGF0YT86IE1vZGVscy5Nb250aERhdGEpID0+IHtcbiAgICAobW9udGhEYXRhIHx8IHRoaXMucHJvcHMubW9udGhEYXRhKS53ZWVrcy5mb3JFYWNoKCh3ZWVrLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5nZW5XZWVrKHdlZWssIGluZGV4KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFdhcnBwZXIgPSAoZG9tOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgIHRoaXMud3JhcHBlckRpdkRPTSA9IGRvbTtcbiAgfVxuXG4gIG9uQ2xpY2tDZWxsKGl0ZW0pIHtcbiAgICAhaXRlbS5kaXNhYmxlICYmIGl0ZW0ub25DZWxsQ2xpY2sgJiYgaXRlbS5vbkNlbGxDbGljayhpdGVtLmRheSwgaXRlbS5tb250aERhdGEpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXRXYXJwcGVyKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5wcm9wcy5tb250aERhdGEud2Vla3MuZm9yRWFjaCgod2VlaywgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMuZ2VuV2Vlayh3ZWVrLCBpbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZWYgPSB0aGlzLnByb3BzLnJlZjtcbiAgICB0aGlzLnJlZih0aGlzKTtcbiAgfVxufVxuIl19