ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
244 lines (243 loc) • 21 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, HostBinding, ViewEncapsulation, Input, ElementRef, ViewChild } from '@angular/core';
import DatePicker from './datepicker.base.component';
export class DatePickerComponent extends DatePicker {
constructor() {
super();
this.transform = '';
this._initDelta = 0;
this._lastY = 0;
this._delta = this._initDelta;
this.amCalendar = true;
this.datePicker = true;
this.genMonthComponent = (data) => {
if (!data)
return;
return {
monthData: data,
locale: this.props.locale,
rowSize: this.props.rowSize,
onCellClick: this.baseOnCellClick,
getDateExtra: this.props.getDateExtra,
ref: dom => {
data.componentRef = dom || data.componentRef || undefined;
data.updateLayout = () => {
this.computeHeight(data, dom);
};
data.updateLayout();
}
};
};
this.computeHeight = (data, singleMonth) => {
if (singleMonth && singleMonth.wrapperDivDOM) {
if (!data.height && !singleMonth.wrapperDivDOM.clientHeight) {
setTimeout(() => this.computeHeight(data, singleMonth), 500);
return;
}
data.height = singleMonth.wrapperDivDOM.clientHeight || data.height || 0;
data.y = singleMonth.wrapperDivDOM.offsetTop || data.y || 0;
}
};
this.setLayout = (dom) => {
if (dom) {
const { onLayout } = this.props;
onLayout && onLayout(dom.clientHeight);
/** @type {?} */
const scrollHandler = this.createOnScroll();
dom.onscroll = evt => {
scrollHandler({
client: dom.clientHeight,
full: (/** @type {?} */ (evt.currentTarget)).clientHeight,
top: (/** @type {?} */ (evt.currentTarget)).scrollTop
});
};
}
};
this.setPanel = (dom) => {
this._panel = dom;
};
}
/**
* @param {?} value
* @return {?}
*/
set onCellClick(value) {
this.props.onCellClick = value;
}
/**
* @param {?} value
* @return {?}
*/
set endDate(value) {
/** @type {?} */
const oldProps = Object.assign({}, this.props);
this.props.endDate = value;
this.receiveProps(oldProps, this.props);
}
/**
* @param {?} value
* @return {?}
*/
set startDate(value) {
/** @type {?} */
const oldProps = Object.assign({}, this.props);
this.props.startDate = value;
this.receiveProps(oldProps, this.props);
}
/**
* @param {?} value
* @return {?}
*/
set propsData(value) {
this.props = Object.assign({}, this.props, value);
}
/**
* @param {?} value
* @return {?}
*/
set onSelectHasDisableDate(value) {
this.props.onSelectHasDisableDate = value;
}
/**
* @param {?} value
* @return {?}
*/
set onLayout(value) {
this.props.onLayout = value;
}
/**
* @param {?} event
* @return {?}
*/
onTouchStart(event) {
this._lastY = event.touches[0].screenY;
this._delta = this._initDelta;
}
/**
* @param {?} event
* @return {?}
*/
onTouchMove(event) {
/** @type {?} */
const ele = event.currentTarget;
/** @type {?} */
const isReachTop = ele.scrollTop === 0;
if (isReachTop) {
this._delta = event.touches[0].screenY - this._lastY;
if (this._delta > 0) {
event.preventDefault();
if (this._delta > 80) {
this._delta = 80;
}
}
else {
this._delta = 0;
}
this.setTransform(this._panel.style, `translate3d(0,${this._delta}px,0)`);
}
}
/**
* @param {?} event
* @return {?}
*/
onTouchEnd(event) {
this.onFinish();
}
/**
* @return {?}
*/
onFinish() {
if (this._delta > 40 && this.canLoadPrev()) {
this.genMonthData(this.state.months[0].firstDate, -1);
this.visibleMonth = this.state.months.slice(0, this.props.initalMonths);
this.state.months.forEach(m => {
m.updateLayout && m.updateLayout();
});
}
this.setTransform(this._panel.style, `translate3d(0,0,0)`);
this.setTransition(this._panel.style, '.3s');
setTimeout(() => {
this._panel && this.setTransition(this._panel.style, '');
}, 300);
}
/**
* @param {?} nodeStyle
* @param {?} value
* @return {?}
*/
setTransform(nodeStyle, value) {
this.transform = value;
nodeStyle.transform = value;
nodeStyle.webkitTransform = value;
}
/**
* @param {?} nodeStyle
* @param {?} value
* @return {?}
*/
setTransition(nodeStyle, value) {
nodeStyle.transition = value;
nodeStyle.webkitTransition = value;
}
/**
* @return {?}
*/
ngOnInit() {
this.init();
this.setLayout(this.layoutDom.nativeElement);
this.setPanel(this.panelDom.nativeElement);
}
}
DatePickerComponent.decorators = [
{ type: Component, args: [{
selector: 'CalendarDatePicker, nzm-calendar-date-picker',
template: "<CalendarWeekPanel [locale]=\"props.locale\"></CalendarWeekPanel>\n<div #layout\n class=\"wrapper\"\n style=\"overflow-x:hidden;overflow-y:visible;-webkit-overflow-scrolling:touch;\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n>\n <div #panel [ngStyle]=\"{transform: transform}\">\n <div *ngIf=\"canLoadPrev()\" class=\"load-tip\">{{props.locale.loadPrevMonth}}</div>\n <div class=\"months\">\n <SingleMonth *ngFor=\"let item of visibleMonth;let i = index;\"\n style=\"display: block;\"\n [data]=\"item.component\"\n ></SingleMonth>\n </div>\n </div>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
DatePickerComponent.ctorParameters = () => [];
DatePickerComponent.propDecorators = {
layoutDom: [{ type: ViewChild, args: ['layout',] }],
panelDom: [{ type: ViewChild, args: ['panel',] }],
onCellClick: [{ type: Input }],
endDate: [{ type: Input }],
startDate: [{ type: Input }],
propsData: [{ type: Input }],
onSelectHasDisableDate: [{ type: Input }],
onLayout: [{ type: Input }],
amCalendar: [{ type: HostBinding, args: ['class.am-calendar',] }],
datePicker: [{ type: HostBinding, args: ['class.date-picker',] }]
};
if (false) {
/** @type {?} */
DatePickerComponent.prototype.transform;
/** @type {?} */
DatePickerComponent.prototype._panel;
/** @type {?} */
DatePickerComponent.prototype._initDelta;
/** @type {?} */
DatePickerComponent.prototype._lastY;
/** @type {?} */
DatePickerComponent.prototype._delta;
/** @type {?} */
DatePickerComponent.prototype.layoutDom;
/** @type {?} */
DatePickerComponent.prototype.panelDom;
/** @type {?} */
DatePickerComponent.prototype.amCalendar;
/** @type {?} */
DatePickerComponent.prototype.datePicker;
/** @type {?} */
DatePickerComponent.prototype.genMonthComponent;
/** @type {?} */
DatePickerComponent.prototype.computeHeight;
/** @type {?} */
DatePickerComponent.prototype.setLayout;
/** @type {?} */
DatePickerComponent.prototype.setPanel;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbImNhbGVuZGFyL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFVLGlCQUFpQixFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhILE9BQU8sVUFBVSxNQUFNLDZCQUE2QixDQUFDO0FBT3JELE1BQU0sMEJBQTJCLFNBQVEsVUFBVTtJQUNqRDtRQUNFLEtBQUssRUFBRSxDQUFDO3lCQUdVLEVBQUU7MEJBRU8sQ0FBQztzQkFDTCxDQUFDO3NCQUNELElBQUksQ0FBQyxVQUFVOzBCQXVDZ0IsSUFBSTswQkFDSixJQUFJO2lDQUV4QyxDQUFDLElBQXVCLEVBQUUsRUFBRTtZQUM5QyxJQUFJLENBQUMsSUFBSTtnQkFBRSxPQUFPO1lBQ2xCLE9BQU87Z0JBQ0wsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtnQkFDekIsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztnQkFDM0IsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUNqQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZO2dCQUNyQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxTQUFTLENBQUM7b0JBQzFELElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFO3dCQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztxQkFDL0IsQ0FBQztvQkFDRixJQUFJLENBQUMsWUFBWSxF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QUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDNUM7OztZQXBLRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDhDQUE4QztnQkFDeEQsZ3RCQUEwQztnQkFDMUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDdEM7Ozs7O3dCQVlFLFNBQVMsU0FBQyxRQUFRO3VCQUVsQixTQUFTLFNBQUMsT0FBTzswQkFHakIsS0FBSztzQkFJTCxLQUFLO3dCQU1MLEtBQUs7d0JBTUwsS0FBSztxQ0FPTCxLQUFLO3VCQUlMLEtBQUs7eUJBS0wsV0FBVyxTQUFDLG1CQUFtQjt5QkFDL0IsV0FBVyxTQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4uL2RhdGUvRGF0YVR5cGVzJztcbmltcG9ydCBEYXRlUGlja2VyIGZyb20gJy4vZGF0ZXBpY2tlci5iYXNlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0NhbGVuZGFyRGF0ZVBpY2tlciwgbnptLWNhbGVuZGFyLWRhdGUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBEYXRlUGlja2VyIGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHRyYW5zZm9ybTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3BhbmVsOiBhbnk7XG4gIHByaXZhdGUgX2luaXREZWx0YTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfbGFzdFk6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2RlbHRhOiBudW1iZXIgPSB0aGlzLl9pbml0RGVsdGE7XG5cbiAgQFZpZXdDaGlsZCgnbGF5b3V0JylcbiAgbGF5b3V0RG9tOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdwYW5lbCcpXG4gIHBhbmVsRG9tOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBvbkNlbGxDbGljayh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMub25DZWxsQ2xpY2sgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZW5kRGF0ZSh2YWx1ZSkge1xuICAgIGNvbnN0IG9sZFByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcyk7XG4gICAgdGhpcy5wcm9wcy5lbmREYXRlID0gdmFsdWU7XG4gICAgdGhpcy5yZWNlaXZlUHJvcHMob2xkUHJvcHMsIHRoaXMucHJvcHMpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBzdGFydERhdGUodmFsdWUpIHtcbiAgICBjb25zdCBvbGRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucHJvcHMpO1xuICAgIHRoaXMucHJvcHMuc3RhcnREYXRlID0gdmFsdWU7XG4gICAgdGhpcy5yZWNlaXZlUHJvcHMob2xkUHJvcHMsIHRoaXMucHJvcHMpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBwcm9wc0RhdGEodmFsdWUpIHtcbiAgICB0aGlzLnByb3BzID0ge1xuICAgICAgLi4udGhpcy5wcm9wcyxcbiAgICAgIC4uLnZhbHVlXG4gICAgfTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgb25TZWxlY3RIYXNEaXNhYmxlRGF0ZSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMub25TZWxlY3RIYXNEaXNhYmxlRGF0ZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBvbkxheW91dCh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMub25MYXlvdXQgPSB2YWx1ZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tY2FsZW5kYXInKSBhbUNhbGVuZGFyOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kYXRlLXBpY2tlcicpIGRhdGVQaWNrZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGdlbk1vbnRoQ29tcG9uZW50ID0gKGRhdGE/OiBNb2RlbHMuTW9udGhEYXRhKSA9PiB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm47XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vbnRoRGF0YTogZGF0YSxcbiAgICAgIGxvY2FsZTogdGhpcy5wcm9wcy5sb2NhbGUsXG4gICAgICByb3dTaXplOiB0aGlzLnByb3BzLnJvd1NpemUsXG4gICAgICBvbkNlbGxDbGljazogdGhpcy5iYXNlT25DZWxsQ2xpY2ssXG4gICAgICBnZXREYXRlRXh0cmE6IHRoaXMucHJvcHMuZ2V0RGF0ZUV4dHJhLFxuICAgICAgcmVmOiBkb20gPT4ge1xuICAgICAgICBkYXRhLmNvbXBvbmVudFJlZiA9IGRvbSB8fCBkYXRhLmNvbXBvbmVudFJlZiB8fCB1bmRlZmluZWQ7XG4gICAgICAgIGRhdGEudXBkYXRlTGF5b3V0ID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29tcHV0ZUhlaWdodChkYXRhLCBkb20pO1xuICAgICAgICB9O1xuICAgICAgICBkYXRhLnVwZGF0ZUxheW91dCgpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb21wdXRlSGVpZ2h0ID0gKGRhdGE6IE1vZGVscy5Nb250aERhdGEsIHNpbmdsZU1vbnRoKSA9PiB7XG4gICAgaWYgKHNpbmdsZU1vbnRoICYmIHNpbmdsZU1vbnRoLndyYXBwZXJEaXZET00pIHtcbiAgICAgIGlmICghZGF0YS5oZWlnaHQgJiYgIXNpbmdsZU1vbnRoLndyYXBwZXJEaXZET00uY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb21wdXRlSGVpZ2h0KGRhdGEsIHNpbmdsZU1vbnRoKSwgNTAwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGF0YS5oZWlnaHQgPSBzaW5nbGVNb250aC53cmFwcGVyRGl2RE9NLmNsaWVudEhlaWdodCB8fCBkYXRhLmhlaWdodCB8fCAwO1xuICAgICAgZGF0YS55ID0gc2luZ2xlTW9udGgud3JhcHBlckRpdkRPTS5vZmZzZXRUb3AgfHwgZGF0YS55IHx8IDA7XG4gICAgfVxuICB9XG5cbiAgc2V0TGF5b3V0ID0gKGRvbTogSFRNTERpdkVsZW1lbnQpID0+IHtcbiAgICBpZiAoZG9tKSB7XG4gICAgICBjb25zdCB7IG9uTGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgb25MYXlvdXQgJiYgb25MYXlvdXQoZG9tLmNsaWVudEhlaWdodCk7XG5cbiAgICAgIGNvbnN0IHNjcm9sbEhhbmRsZXIgPSB0aGlzLmNyZWF0ZU9uU2Nyb2xsKCk7XG4gICAgICBkb20ub25zY3JvbGwgPSBldnQgPT4ge1xuICAgICAgICBzY3JvbGxIYW5kbGVyKHtcbiAgICAgICAgICBjbGllbnQ6IGRvbS5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgZnVsbDogKGV2dC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50KS5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgdG9wOiAoZXZ0LmN1cnJlbnRUYXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpLnNjcm9sbFRvcFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgc2V0UGFuZWwgPSAoZG9tOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgIHRoaXMuX3BhbmVsID0gZG9tO1xuICB9XG5cbiAgb25Ub3VjaFN0YXJ0KGV2ZW50KSB7XG4gICAgdGhpcy5fbGFzdFkgPSBldmVudC50b3VjaGVzWzBdLnNjcmVlblk7XG4gICAgdGhpcy5fZGVsdGEgPSB0aGlzLl9pbml0RGVsdGE7XG4gIH1cblxuICBvblRvdWNoTW92ZShldmVudCkge1xuICAgIGNvbnN0IGVsZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgY29uc3QgaXNSZWFjaFRvcCA9IGVsZS5zY3JvbGxUb3AgPT09IDA7XG5cbiAgICBpZiAoaXNSZWFjaFRvcCkge1xuICAgICAgdGhpcy5fZGVsdGEgPSBldmVudC50b3VjaGVzWzBdLnNjcmVlblkgLSB0aGlzLl9sYXN0WTtcbiAgICAgIGlmICh0aGlzLl9kZWx0YSA+IDApIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuX2RlbHRhID4gODApIHtcbiAgICAgICAgICB0aGlzLl9kZWx0YSA9IDgwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9kZWx0YSA9IDA7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFRyYW5zZm9ybSh0aGlzLl9wYW5lbC5zdHlsZSwgYHRyYW5zbGF0ZTNkKDAsJHt0aGlzLl9kZWx0YX1weCwwKWApO1xuICAgIH1cbiAgfVxuXG4gIG9uVG91Y2hFbmQoZXZlbnQpIHtcbiAgICB0aGlzLm9uRmluaXNoKCk7XG4gIH1cblxuICBvbkZpbmlzaCgpIHtcbiAgICBpZiAodGhpcy5fZGVsdGEgPiA0MCAmJiB0aGlzLmNhbkxvYWRQcmV2KCkpIHtcbiAgICAgIHRoaXMuZ2VuTW9udGhEYXRhKHRoaXMuc3RhdGUubW9udGhzWzBdLmZpcnN0RGF0ZSwgLTEpO1xuXG4gICAgICB0aGlzLnZpc2libGVNb250aCA9IHRoaXMuc3RhdGUubW9udGhzLnNsaWNlKDAsIHRoaXMucHJvcHMuaW5pdGFsTW9udGhzKTtcblxuICAgICAgdGhpcy5zdGF0ZS5tb250aHMuZm9yRWFjaChtID0+IHtcbiAgICAgICAgbS51cGRhdGVMYXlvdXQgJiYgbS51cGRhdGVMYXlvdXQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNldFRyYW5zZm9ybSh0aGlzLl9wYW5lbC5zdHlsZSwgYHRyYW5zbGF0ZTNkKDAsMCwwKWApO1xuICAgIHRoaXMuc2V0VHJhbnNpdGlvbih0aGlzLl9wYW5lbC5zdHlsZSwgJy4zcycpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcGFuZWwgJiYgdGhpcy5zZXRUcmFuc2l0aW9uKHRoaXMuX3BhbmVsLnN0eWxlLCAnJyk7XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIHNldFRyYW5zZm9ybShub2RlU3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24sIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHZhbHVlO1xuICAgIG5vZGVTdHlsZS50cmFuc2Zvcm0gPSB2YWx1ZTtcbiAgICBub2RlU3R5bGUud2Via2l0VHJhbnNmb3JtID0gdmFsdWU7XG4gIH1cblxuICBzZXRUcmFuc2l0aW9uKG5vZGVTdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiwgdmFsdWU6IGFueSkge1xuICAgIG5vZGVTdHlsZS50cmFuc2l0aW9uID0gdmFsdWU7XG4gICAgbm9kZVN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSB2YWx1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIHRoaXMuc2V0TGF5b3V0KHRoaXMubGF5b3V0RG9tLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuc2V0UGFuZWwodGhpcy5wYW5lbERvbS5uYXRpdmVFbGVtZW50KTtcbiAgfVxufVxuIl19