ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
302 lines (301 loc) • 23.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, HostBinding, ViewEncapsulation, Input, ElementRef, ViewChild } from '@angular/core';
import DatePicker from './datepicker.base.component';
var DatePickerComponent = /** @class */ (function (_super) {
tslib_1.__extends(DatePickerComponent, _super);
function DatePickerComponent() {
var _this = _super.call(this) || this;
_this.transform = '';
_this._initDelta = 0;
_this._lastY = 0;
_this._delta = _this._initDelta;
_this.amCalendar = true;
_this.datePicker = true;
_this.genMonthComponent = function (data) {
if (!data)
return;
return {
monthData: data,
locale: _this.props.locale,
rowSize: _this.props.rowSize,
onCellClick: _this.baseOnCellClick,
getDateExtra: _this.props.getDateExtra,
ref: function (dom) {
data.componentRef = dom || data.componentRef || undefined;
data.updateLayout = function () {
_this.computeHeight(data, dom);
};
data.updateLayout();
}
};
};
_this.computeHeight = function (data, singleMonth) {
if (singleMonth && singleMonth.wrapperDivDOM) {
if (!data.height && !singleMonth.wrapperDivDOM.clientHeight) {
setTimeout(function () { return _this.computeHeight(data, singleMonth); }, 500);
return;
}
data.height = singleMonth.wrapperDivDOM.clientHeight || data.height || 0;
data.y = singleMonth.wrapperDivDOM.offsetTop || data.y || 0;
}
};
_this.setLayout = function (dom) {
if (dom) {
var onLayout = _this.props.onLayout;
onLayout && onLayout(dom.clientHeight);
/** @type {?} */
var scrollHandler_1 = _this.createOnScroll();
dom.onscroll = function (evt) {
scrollHandler_1({
client: dom.clientHeight,
full: (/** @type {?} */ (evt.currentTarget)).clientHeight,
top: (/** @type {?} */ (evt.currentTarget)).scrollTop
});
};
}
};
_this.setPanel = function (dom) {
_this._panel = dom;
};
return _this;
}
Object.defineProperty(DatePickerComponent.prototype, "onCellClick", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.props.onCellClick = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(DatePickerComponent.prototype, "endDate", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
/** @type {?} */
var oldProps = Object.assign({}, this.props);
this.props.endDate = value;
this.receiveProps(oldProps, this.props);
},
enumerable: true,
configurable: true
});
Object.defineProperty(DatePickerComponent.prototype, "startDate", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
/** @type {?} */
var oldProps = Object.assign({}, this.props);
this.props.startDate = value;
this.receiveProps(oldProps, this.props);
},
enumerable: true,
configurable: true
});
Object.defineProperty(DatePickerComponent.prototype, "propsData", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.props = tslib_1.__assign({}, this.props, value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(DatePickerComponent.prototype, "onSelectHasDisableDate", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.props.onSelectHasDisableDate = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(DatePickerComponent.prototype, "onLayout", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.props.onLayout = value;
},
enumerable: true,
configurable: true
});
/**
* @param {?} event
* @return {?}
*/
DatePickerComponent.prototype.onTouchStart = /**
* @param {?} event
* @return {?}
*/
function (event) {
this._lastY = event.touches[0].screenY;
this._delta = this._initDelta;
};
/**
* @param {?} event
* @return {?}
*/
DatePickerComponent.prototype.onTouchMove = /**
* @param {?} event
* @return {?}
*/
function (event) {
/** @type {?} */
var ele = event.currentTarget;
/** @type {?} */
var 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 {?}
*/
DatePickerComponent.prototype.onTouchEnd = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.onFinish();
};
/**
* @return {?}
*/
DatePickerComponent.prototype.onFinish = /**
* @return {?}
*/
function () {
var _this = this;
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(function (m) {
m.updateLayout && m.updateLayout();
});
}
this.setTransform(this._panel.style, "translate3d(0,0,0)");
this.setTransition(this._panel.style, '.3s');
setTimeout(function () {
_this._panel && _this.setTransition(_this._panel.style, '');
}, 300);
};
/**
* @param {?} nodeStyle
* @param {?} value
* @return {?}
*/
DatePickerComponent.prototype.setTransform = /**
* @param {?} nodeStyle
* @param {?} value
* @return {?}
*/
function (nodeStyle, value) {
this.transform = value;
nodeStyle.transform = value;
nodeStyle.webkitTransform = value;
};
/**
* @param {?} nodeStyle
* @param {?} value
* @return {?}
*/
DatePickerComponent.prototype.setTransition = /**
* @param {?} nodeStyle
* @param {?} value
* @return {?}
*/
function (nodeStyle, value) {
nodeStyle.transition = value;
nodeStyle.webkitTransition = value;
};
/**
* @return {?}
*/
DatePickerComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
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 = function () { return []; };
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',] }]
};
return DatePickerComponent;
}(DatePicker));
export { DatePickerComponent };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbImNhbGVuZGFyL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBVSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoSCxPQUFPLFVBQVUsTUFBTSw2QkFBNkIsQ0FBQzs7SUFPWiwrQ0FBVTtJQUNqRDtRQUFBLFlBQ0UsaUJBQU8sU0FDUjswQkFFbUIsRUFBRTsyQkFFTyxDQUFDO3VCQUNMLENBQUM7dUJBQ0QsS0FBSSxDQUFDLFVBQVU7MkJBdUNnQixJQUFJOzJCQUNKLElBQUk7a0NBRXhDLFVBQUMsSUFBdUI7WUFDMUMsSUFBSSxDQUFDLElBQUk7Z0JBQUUsT0FBTztZQUNsQixPQUFPO2dCQUNMLFNBQVMsRUFBRSxJQUFJO2dCQUNmLE1BQU0sRUFBRSxLQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQ3pCLE9BQU8sRUFBRSxLQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87Z0JBQzNCLFdBQVcsRUFBRSxLQUFJLENBQUMsZUFBZTtnQkFDakMsWUFBWSxFQUFFLEtBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtnQkFDckMsR0FBRyxFQUFFLFVBQUEsR0FBRztvQkFDTixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQztvQkFDMUQsSUFBSSxDQUFDLFlBQVksR0FBRzt3QkFDbEIsS0FBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7cUJBQy9CLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2lCQUNyQjthQUNGLENBQUM7U0FDSDs4QkFFZSxV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LENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQzVDOztnQkFwS0YsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSw4Q0FBOEM7b0JBQ3hELGd0QkFBMEM7b0JBQzFDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUN0Qzs7Ozs7NEJBWUUsU0FBUyxTQUFDLFFBQVE7MkJBRWxCLFNBQVMsU0FBQyxPQUFPOzhCQUdqQixLQUFLOzBCQUlMLEtBQUs7NEJBTUwsS0FBSzs0QkFNTCxLQUFLO3lDQU9MLEtBQUs7MkJBSUwsS0FBSzs2QkFLTCxXQUFXLFNBQUMsbUJBQW1COzZCQUMvQixXQUFXLFNBQUMsbUJBQW1COzs4QkExRGxDO0VBU3lDLFVBQVU7U0FBdEMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiwgSW5wdXQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kZWxzIH0gZnJvbSAnLi4vZGF0ZS9EYXRhVHlwZXMnO1xuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSAnLi9kYXRlcGlja2VyLmJhc2UuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnQ2FsZW5kYXJEYXRlUGlja2VyLCBuem0tY2FsZW5kYXItZGF0ZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIERhdGVQaWNrZXIgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgdHJhbnNmb3JtOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfcGFuZWw6IGFueTtcbiAgcHJpdmF0ZSBfaW5pdERlbHRhOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9sYXN0WTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfZGVsdGE6IG51bWJlciA9IHRoaXMuX2luaXREZWx0YTtcblxuICBAVmlld0NoaWxkKCdsYXlvdXQnKVxuICBsYXlvdXREb206IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BhbmVsJylcbiAgcGFuZWxEb206IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KClcbiAgc2V0IG9uQ2VsbENsaWNrKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5vbkNlbGxDbGljayA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBlbmREYXRlKHZhbHVlKSB7XG4gICAgY29uc3Qgb2xkUHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnByb3BzKTtcbiAgICB0aGlzLnByb3BzLmVuZERhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLnJlY2VpdmVQcm9wcyhvbGRQcm9wcywgdGhpcy5wcm9wcyk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHN0YXJ0RGF0ZSh2YWx1ZSkge1xuICAgIGNvbnN0IG9sZFByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcyk7XG4gICAgdGhpcy5wcm9wcy5zdGFydERhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLnJlY2VpdmVQcm9wcyhvbGRQcm9wcywgdGhpcy5wcm9wcyk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHByb3BzRGF0YSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgLi4udmFsdWVcbiAgICB9O1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBvblNlbGVjdEhhc0Rpc2FibGVEYXRlKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5vblNlbGVjdEhhc0Rpc2FibGVEYXRlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG9uTGF5b3V0KHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5vbkxheW91dCA9IHZhbHVlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1jYWxlbmRhcicpIGFtQ2FsZW5kYXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRhdGUtcGlja2VyJykgZGF0ZVBpY2tlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgZ2VuTW9udGhDb21wb25lbnQgPSAoZGF0YT86IE1vZGVscy5Nb250aERhdGEpID0+IHtcbiAgICBpZiAoIWRhdGEpIHJldHVybjtcbiAgICByZXR1cm4ge1xuICAgICAgbW9udGhEYXRhOiBkYXRhLFxuICAgICAgbG9jYWxlOiB0aGlzLnByb3BzLmxvY2FsZSxcbiAgICAgIHJvd1NpemU6IHRoaXMucHJvcHMucm93U2l6ZSxcbiAgICAgIG9uQ2VsbENsaWNrOiB0aGlzLmJhc2VPbkNlbGxDbGljayxcbiAgICAgIGdldERhdGVFeHRyYTogdGhpcy5wcm9wcy5nZXREYXRlRXh0cmEsXG4gICAgICByZWY6IGRvbSA9PiB7XG4gICAgICAgIGRhdGEuY29tcG9uZW50UmVmID0gZG9tIHx8IGRhdGEuY29tcG9uZW50UmVmIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgZGF0YS51cGRhdGVMYXlvdXQgPSAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb21wdXRlSGVpZ2h0KGRhdGEsIGRvbSk7XG4gICAgICAgIH07XG4gICAgICAgIGRhdGEudXBkYXRlTGF5b3V0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbXB1dGVIZWlnaHQgPSAoZGF0YTogTW9kZWxzLk1vbnRoRGF0YSwgc2luZ2xlTW9udGgpID0+IHtcbiAgICBpZiAoc2luZ2xlTW9udGggJiYgc2luZ2xlTW9udGgud3JhcHBlckRpdkRPTSkge1xuICAgICAgaWYgKCFkYXRhLmhlaWdodCAmJiAhc2luZ2xlTW9udGgud3JhcHBlckRpdkRPTS5jbGllbnRIZWlnaHQpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvbXB1dGVIZWlnaHQoZGF0YSwgc2luZ2xlTW9udGgpLCA1MDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkYXRhLmhlaWdodCA9IHNpbmdsZU1vbnRoLndyYXBwZXJEaXZET00uY2xpZW50SGVpZ2h0IHx8IGRhdGEuaGVpZ2h0IHx8IDA7XG4gICAgICBkYXRhLnkgPSBzaW5nbGVNb250aC53cmFwcGVyRGl2RE9NLm9mZnNldFRvcCB8fCBkYXRhLnkgfHwgMDtcbiAgICB9XG4gIH1cblxuICBzZXRMYXlvdXQgPSAoZG9tOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgIGlmIChkb20pIHtcbiAgICAgIGNvbnN0IHsgb25MYXlvdXQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBvbkxheW91dCAmJiBvbkxheW91dChkb20uY2xpZW50SGVpZ2h0KTtcblxuICAgICAgY29uc3Qgc2Nyb2xsSGFuZGxlciA9IHRoaXMuY3JlYXRlT25TY3JvbGwoKTtcbiAgICAgIGRvbS5vbnNjcm9sbCA9IGV2dCA9PiB7XG4gICAgICAgIHNjcm9sbEhhbmRsZXIoe1xuICAgICAgICAgIGNsaWVudDogZG9tLmNsaWVudEhlaWdodCxcbiAgICAgICAgICBmdWxsOiAoZXZ0LmN1cnJlbnRUYXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpLmNsaWVudEhlaWdodCxcbiAgICAgICAgICB0b3A6IChldnQuY3VycmVudFRhcmdldCBhcyBIVE1MRGl2RWxlbWVudCkuc2Nyb2xsVG9wXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBzZXRQYW5lbCA9IChkb206IEhUTUxEaXZFbGVtZW50KSA9PiB7XG4gICAgdGhpcy5fcGFuZWwgPSBkb207XG4gIH1cblxuICBvblRvdWNoU3RhcnQoZXZlbnQpIHtcbiAgICB0aGlzLl9sYXN0WSA9IGV2ZW50LnRvdWNoZXNbMF0uc2NyZWVuWTtcbiAgICB0aGlzLl9kZWx0YSA9IHRoaXMuX2luaXREZWx0YTtcbiAgfVxuXG4gIG9uVG91Y2hNb3ZlKGV2ZW50KSB7XG4gICAgY29uc3QgZWxlID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICBjb25zdCBpc1JlYWNoVG9wID0gZWxlLnNjcm9sbFRvcCA9PT0gMDtcblxuICAgIGlmIChpc1JlYWNoVG9wKSB7XG4gICAgICB0aGlzLl9kZWx0YSA9IGV2ZW50LnRvdWNoZXNbMF0uc2NyZWVuWSAtIHRoaXMuX2xhc3RZO1xuICAgICAgaWYgKHRoaXMuX2RlbHRhID4gMCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5fZGVsdGEgPiA4MCkge1xuICAgICAgICAgIHRoaXMuX2RlbHRhID0gODA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RlbHRhID0gMDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VHJhbnNmb3JtKHRoaXMuX3BhbmVsLnN0eWxlLCBgdHJhbnNsYXRlM2QoMCwke3RoaXMuX2RlbHRhfXB4LDApYCk7XG4gICAgfVxuICB9XG5cbiAgb25Ub3VjaEVuZChldmVudCkge1xuICAgIHRoaXMub25GaW5pc2goKTtcbiAgfVxuXG4gIG9uRmluaXNoKCkge1xuICAgIGlmICh0aGlzLl9kZWx0YSA+IDQwICYmIHRoaXMuY2FuTG9hZFByZXYoKSkge1xuICAgICAgdGhpcy5nZW5Nb250aERhdGEodGhpcy5zdGF0ZS5tb250aHNbMF0uZmlyc3REYXRlLCAtMSk7XG5cbiAgICAgIHRoaXMudmlzaWJsZU1vbnRoID0gdGhpcy5zdGF0ZS5tb250aHMuc2xpY2UoMCwgdGhpcy5wcm9wcy5pbml0YWxNb250aHMpO1xuXG4gICAgICB0aGlzLnN0YXRlLm1vbnRocy5mb3JFYWNoKG0gPT4ge1xuICAgICAgICBtLnVwZGF0ZUxheW91dCAmJiBtLnVwZGF0ZUxheW91dCgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0VHJhbnNmb3JtKHRoaXMuX3BhbmVsLnN0eWxlLCBgdHJhbnNsYXRlM2QoMCwwLDApYCk7XG4gICAgdGhpcy5zZXRUcmFuc2l0aW9uKHRoaXMuX3BhbmVsLnN0eWxlLCAnLjNzJyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9wYW5lbCAmJiB0aGlzLnNldFRyYW5zaXRpb24odGhpcy5fcGFuZWwuc3R5bGUsICcnKTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgc2V0VHJhbnNmb3JtKG5vZGVTdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiwgdmFsdWU6IGFueSkge1xuICAgIHRoaXMudHJhbnNmb3JtID0gdmFsdWU7XG4gICAgbm9kZVN0eWxlLnRyYW5zZm9ybSA9IHZhbHVlO1xuICAgIG5vZGVTdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB2YWx1ZTtcbiAgfVxuXG4gIHNldFRyYW5zaXRpb24obm9kZVN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uLCB2YWx1ZTogYW55KSB7XG4gICAgbm9kZVN0eWxlLnRyYW5zaXRpb24gPSB2YWx1ZTtcbiAgICBub2RlU3R5bGUud2Via2l0VHJhbnNpdGlvbiA9IHZhbHVlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0KCk7XG4gICAgdGhpcy5zZXRMYXlvdXQodGhpcy5sYXlvdXREb20ubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5zZXRQYW5lbCh0aGlzLnBhbmVsRG9tLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG59XG4iXX0=