UNPKG

ng-zorro-antd-mobile

Version:

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

300 lines 23.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, HostBinding, ViewEncapsulation, Input, ElementRef, ViewChild } from '@angular/core'; import { CalendarDatePickerBaseComponent } from './datepicker.base.component'; export class CalendarDatePickerComponent extends CalendarDatePickerBaseComponent { constructor() { super(); this.transform = ''; this._initDelta = 0; this._lastY = 0; this._delta = this._initDelta; this.amCalendar = true; this.datePicker = true; this.genMonthComponent = (/** * @param {?=} data * @return {?} */ (data) => { if (!data) { return; } return { monthData: data, locale: this.props.locale, rowSize: this.props.rowSize, onCellClick: this.baseOnCellClick, getDateExtra: this.props.getDateExtra, ref: (/** * @param {?} dom * @return {?} */ dom => { data.componentRef = dom || data.componentRef || undefined; data.updateLayout = (/** * @return {?} */ () => { this.computeHeight(data, dom); }); data.updateLayout(); }) }; }); this.computeHeight = (/** * @param {?} data * @param {?} singleMonth * @return {?} */ (data, singleMonth) => { if (singleMonth && singleMonth.wrapperDivDOM) { if (!data.height && !singleMonth.wrapperDivDOM.clientHeight) { setTimeout((/** * @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 = (/** * @param {?} dom * @return {?} */ (dom) => { if (dom) { const { onLayout } = this.props; if (onLayout) { onLayout(dom.clientHeight); } /** @type {?} */ const scrollHandler = this.createOnScroll(); dom.onscroll = (/** * @param {?} evt * @return {?} */ evt => { scrollHandler({ client: dom.clientHeight, full: ((/** @type {?} */ (evt.currentTarget))).clientHeight, top: ((/** @type {?} */ (evt.currentTarget))).scrollTop }); }); } }); this.setPanel = (/** * @param {?} dom * @return {?} */ (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 || event.touches[0].pageY; 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 || event.touches[0].pageY) - 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((/** * @param {?} m * @return {?} */ m => { if (m.updateLayout) { m.updateLayout(); } })); } this.setTransform(this._panel.style, `translate3d(0,0,0)`); this.setTransition(this._panel.style, '.3s'); setTimeout((/** * @return {?} */ () => { if (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); } } CalendarDatePickerComponent.decorators = [ { type: Component, args: [{ selector: 'CalendarDatePicker, nzm-calendar-date-picker', template: "<CalendarWeekPanel [locale]=\"props.locale\"></CalendarWeekPanel>\n<div\n #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 <CalendarSingleMonth\n *ngFor=\"let item of visibleMonth; let i = index\"\n style=\"display: block;\"\n [data]=\"item.component\"\n ></CalendarSingleMonth>\n </div>\n </div>\n</div>\n", encapsulation: ViewEncapsulation.None }] } ]; /** @nocollapse */ CalendarDatePickerComponent.ctorParameters = () => []; CalendarDatePickerComponent.propDecorators = { layoutDom: [{ type: ViewChild, args: ['layout', { static: true },] }], panelDom: [{ type: ViewChild, args: ['panel', { static: true },] }], 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 {?} */ CalendarDatePickerComponent.prototype.transform; /** * @type {?} * @private */ CalendarDatePickerComponent.prototype._panel; /** * @type {?} * @private */ CalendarDatePickerComponent.prototype._initDelta; /** * @type {?} * @private */ CalendarDatePickerComponent.prototype._lastY; /** * @type {?} * @private */ CalendarDatePickerComponent.prototype._delta; /** @type {?} */ CalendarDatePickerComponent.prototype.layoutDom; /** @type {?} */ CalendarDatePickerComponent.prototype.panelDom; /** @type {?} */ CalendarDatePickerComponent.prototype.amCalendar; /** @type {?} */ CalendarDatePickerComponent.prototype.datePicker; /** @type {?} */ CalendarDatePickerComponent.prototype.genMonthComponent; /** @type {?} */ CalendarDatePickerComponent.prototype.computeHeight; /** @type {?} */ CalendarDatePickerComponent.prototype.setLayout; /** @type {?} */ CalendarDatePickerComponent.prototype.setPanel; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbImNhbGVuZGFyL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFVLGlCQUFpQixFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBTzlFLE1BQU0sT0FBTywyQkFBNEIsU0FBUSwrQkFBK0I7SUFDOUU7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUdWLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFFZixlQUFVLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFDbkIsV0FBTSxHQUFXLElBQUksQ0FBQyxVQUFVLENBQUM7UUF1Q1AsZUFBVSxHQUFZLElBQUksQ0FBQztRQUMzQixlQUFVLEdBQVksSUFBSSxDQUFDO1FBRTdELHNCQUFpQjs7OztRQUFHLENBQUMsSUFBMkIsRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsT0FBTzthQUNSO1lBQ0QsT0FBTztnQkFDTCxTQUFTLEVBQUUsSUFBSTtnQkFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO2dCQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO2dCQUMzQixXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQ2pDLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVk7Z0JBQ3JDLEdBQUc7Ozs7Z0JBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxT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SUFDM0IsNkNBQXlDOztJQUV6QyxnREFDc0I7O0lBQ3RCLCtDQUNxQjs7SUFrQ3JCLGlEQUE2RDs7SUFDN0QsaURBQTZEOztJQUU3RCx3REFrQkM7O0lBRUQsb0RBU0M7O0lBRUQsZ0RBaUJDOztJQUVELCtDQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiwgSW5wdXQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZU1vZGVscyB9IGZyb20gJy4uL2RhdGUvRGF0YVR5cGVzJztcbmltcG9ydCB7IENhbGVuZGFyRGF0ZVBpY2tlckJhc2VDb21wb25lbnQgfSBmcm9tICcuL2RhdGVwaWNrZXIuYmFzZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdDYWxlbmRhckRhdGVQaWNrZXIsIG56bS1jYWxlbmRhci1kYXRlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckRhdGVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBDYWxlbmRhckRhdGVQaWNrZXJCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHRyYW5zZm9ybTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3BhbmVsOiBhbnk7XG4gIHByaXZhdGUgX2luaXREZWx0YTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfbGFzdFk6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2RlbHRhOiBudW1iZXIgPSB0aGlzLl9pbml0RGVsdGE7XG5cbiAgQFZpZXdDaGlsZCgnbGF5b3V0JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgbGF5b3V0RG9tOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdwYW5lbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHBhbmVsRG9tOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBvbkNlbGxDbGljayh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMub25DZWxsQ2xpY2sgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZW5kRGF0ZSh2YWx1ZSkge1xuICAgIGNvbnN0IG9sZFByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcyk7XG4gICAgdGhpcy5wcm9wcy5lbmREYXRlID0gdmFsdWU7XG4gICAgdGhpcy5yZWNlaXZlUHJvcHMob2xkUHJvcHMsIHRoaXMucHJvcHMpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBzdGFydERhdGUodmFsdWUpIHtcbiAgICBjb25zdCBvbGRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucHJvcHMpO1xuICAgIHRoaXMucHJvcHMuc3RhcnREYXRlID0gdmFsdWU7XG4gICAgdGhpcy5yZWNlaXZlUHJvcHMob2xkUHJvcHMsIHRoaXMucHJvcHMpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBwcm9wc0RhdGEodmFsdWUpIHtcbiAgICB0aGlzLnByb3BzID0ge1xuICAgICAgLi4udGhpcy5wcm9wcyxcbiAgICAgIC4uLnZhbHVlXG4gICAgfTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgb25TZWxlY3RIYXNEaXNhYmxlRGF0ZSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMub25TZWxlY3RIYXNEaXNhYmxlRGF0ZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBvbkxheW91dCh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMub25MYXlvdXQgPSB2YWx1ZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tY2FsZW5kYXInKSBhbUNhbGVuZGFyOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kYXRlLXBpY2tlcicpIGRhdGVQaWNrZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGdlbk1vbnRoQ29tcG9uZW50ID0gKGRhdGE/OiBEYXRlTW9kZWxzLk1vbnRoRGF0YSkgPT4ge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbW9udGhEYXRhOiBkYXRhLFxuICAgICAgbG9jYWxlOiB0aGlzLnByb3BzLmxvY2FsZSxcbiAgICAgIHJvd1NpemU6IHRoaXMucHJvcHMucm93U2l6ZSxcbiAgICAgIG9uQ2VsbENsaWNrOiB0aGlzLmJhc2VPbkNlbGxDbGljayxcbiAgICAgIGdldERhdGVFeHRyYTogdGhpcy5wcm9wcy5nZXREYXRlRXh0cmEsXG4gICAgICByZWY6IGRvbSA9PiB7XG4gICAgICAgIGRhdGEuY29tcG9uZW50UmVmID0gZG9tIHx8IGRhdGEuY29tcG9uZW50UmVmIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgZGF0YS51cGRhdGVMYXlvdXQgPSAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb21wdXRlSGVpZ2h0KGRhdGEsIGRvbSk7XG4gICAgICAgIH07XG4gICAgICAgIGRhdGEudXBkYXRlTGF5b3V0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbXB1dGVIZWlnaHQgPSAoZGF0YTogRGF0ZU1vZGVscy5Nb250aERhdGEsIHNpbmdsZU1vbnRoKSA9PiB7XG4gICAgaWYgKHNpbmdsZU1vbnRoICYmIHNpbmdsZU1vbnRoLndyYXBwZXJEaXZET00pIHtcbiAgICAgIGlmICghZGF0YS5oZWlnaHQgJiYgIXNpbmdsZU1vbnRoLndyYXBwZXJEaXZET00uY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb21wdXRlSGVpZ2h0KGRhdGEsIHNpbmdsZU1vbnRoKSwgNTAwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGF0YS5oZWlnaHQgPSBzaW5nbGVNb250aC53cmFwcGVyRGl2RE9NLmNsaWVudEhlaWdodCB8fCBkYXRhLmhlaWdodCB8fCAwO1xuICAgICAgZGF0YS55ID0gc2luZ2xlTW9udGgud3JhcHBlckRpdkRPTS5vZmZzZXRUb3AgfHwgZGF0YS55IHx8IDA7XG4gICAgfVxuICB9XG5cbiAgc2V0TGF5b3V0ID0gKGRvbTogSFRNTERpdkVsZW1lbnQpID0+IHtcbiAgICBpZiAoZG9tKSB7XG4gICAgICBjb25zdCB7IG9uTGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAob25MYXlvdXQpIHtcbiAgICAgICAgb25MYXlvdXQoZG9tLmNsaWVudEhlaWdodCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjcm9sbEhhbmRsZXIgPSB0aGlzLmNyZWF0ZU9uU2Nyb2xsKCk7XG4gICAgICBkb20ub25zY3JvbGwgPSBldnQgPT4ge1xuICAgICAgICBzY3JvbGxIYW5kbGVyKHtcbiAgICAgICAgICBjbGllbnQ6IGRvbS5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgZnVsbDogKGV2dC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50KS5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgdG9wOiAoZXZ0LmN1cnJlbnRUYXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpLnNjcm9sbFRvcFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgc2V0UGFuZWwgPSAoZG9tOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgIHRoaXMuX3BhbmVsID0gZG9tO1xuICB9XG5cbiAgb25Ub3VjaFN0YXJ0KGV2ZW50KSB7XG4gICAgdGhpcy5fbGFzdFkgPSBldmVudC50b3VjaGVzWzBdLnNjcmVlblkgfHwgZXZlbnQudG91Y2hlc1swXS5wYWdlWTtcbiAgICB0aGlzLl9kZWx0YSA9IHRoaXMuX2luaXREZWx0YTtcbiAgfVxuXG4gIG9uVG91Y2hNb3ZlKGV2ZW50KSB7XG4gICAgY29uc3QgZWxlID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICBjb25zdCBpc1JlYWNoVG9wID0gZWxlLnNjcm9sbFRvcCA9PT0gMDtcblxuICAgIGlmIChpc1JlYWNoVG9wKSB7XG4gICAgICB0aGlzLl9kZWx0YSA9IChldmVudC50b3VjaGVzWzBdLnNjcmVlblkgfHwgZXZlbnQudG91Y2hlc1swXS5wYWdlWSkgLSB0aGlzLl9sYXN0WTtcbiAgICAgIGlmICh0aGlzLl9kZWx0YSA+IDApIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuX2RlbHRhID4gODApIHtcbiAgICAgICAgICB0aGlzLl9kZWx0YSA9IDgwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9kZWx0YSA9IDA7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFRyYW5zZm9ybSh0aGlzLl9wYW5lbC5zdHlsZSwgYHRyYW5zbGF0ZTNkKDAsJHt0aGlzLl9kZWx0YX1weCwwKWApO1xuICAgIH1cbiAgfVxuXG4gIG9uVG91Y2hFbmQoZXZlbnQpIHtcbiAgICB0aGlzLm9uRmluaXNoKCk7XG4gIH1cblxuICBvbkZpbmlzaCgpIHtcbiAgICBpZiAodGhpcy5fZGVsdGEgPiA0MCAmJiB0aGlzLmNhbkxvYWRQcmV2KCkpIHtcbiAgICAgIHRoaXMuZ2VuTW9udGhEYXRhKHRoaXMuc3RhdGUubW9udGhzWzBdLmZpcnN0RGF0ZSwgLTEpO1xuXG4gICAgICB0aGlzLnZpc2libGVNb250aCA9IHRoaXMuc3RhdGUubW9udGhzLnNsaWNlKDAsIHRoaXMucHJvcHMuaW5pdGFsTW9udGhzKTtcblxuICAgICAgdGhpcy5zdGF0ZS5tb250aHMuZm9yRWFjaChtID0+IHtcbiAgICAgICAgaWYgKG0udXBkYXRlTGF5b3V0KSB7XG4gICAgICAgICAgbS51cGRhdGVMYXlvdXQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0VHJhbnNmb3JtKHRoaXMuX3BhbmVsLnN0eWxlLCBgdHJhbnNsYXRlM2QoMCwwLDApYCk7XG4gICAgdGhpcy5zZXRUcmFuc2l0aW9uKHRoaXMuX3BhbmVsLnN0eWxlLCAnLjNzJyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fcGFuZWwpIHtcbiAgICAgICAgdGhpcy5zZXRUcmFuc2l0aW9uKHRoaXMuX3BhbmVsLnN0eWxlLCAnJyk7XG4gICAgICB9XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIHNldFRyYW5zZm9ybShub2RlU3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24sIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHZhbHVlO1xuICAgIG5vZGVTdHlsZS50cmFuc2Zvcm0gPSB2YWx1ZTtcbiAgICBub2RlU3R5bGUud2Via2l0VHJhbnNmb3JtID0gdmFsdWU7XG4gIH1cblxuICBzZXRUcmFuc2l0aW9uKG5vZGVTdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiwgdmFsdWU6IGFueSkge1xuICAgIG5vZGVTdHlsZS50cmFuc2l0aW9uID0gdmFsdWU7XG4gICAgbm9kZVN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSB2YWx1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIHRoaXMuc2V0TGF5b3V0KHRoaXMubGF5b3V0RG9tLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuc2V0UGFuZWwodGhpcy5wYW5lbERvbS5uYXRpdmVFbGVtZW50KTtcbiAgfVxufVxuIl19