ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
358 lines • 26.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, HostBinding, ViewEncapsulation, Input, ElementRef, ViewChild } from '@angular/core';
import { CalendarDatePickerBaseComponent } from './datepicker.base.component';
var CalendarDatePickerComponent = /** @class */ (function (_super) {
tslib_1.__extends(CalendarDatePickerComponent, _super);
function CalendarDatePickerComponent() {
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 = (/**
* @param {?=} data
* @return {?}
*/
function (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 {?}
*/
function (dom) {
data.componentRef = dom || data.componentRef || undefined;
data.updateLayout = (/**
* @return {?}
*/
function () {
_this.computeHeight(data, dom);
});
data.updateLayout();
})
};
});
_this.computeHeight = (/**
* @param {?} data
* @param {?} singleMonth
* @return {?}
*/
function (data, singleMonth) {
if (singleMonth && singleMonth.wrapperDivDOM) {
if (!data.height && !singleMonth.wrapperDivDOM.clientHeight) {
setTimeout((/**
* @return {?}
*/
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 = (/**
* @param {?} dom
* @return {?}
*/
function (dom) {
if (dom) {
var onLayout = _this.props.onLayout;
if (onLayout) {
onLayout(dom.clientHeight);
}
/** @type {?} */
var scrollHandler_1 = _this.createOnScroll();
dom.onscroll = (/**
* @param {?} evt
* @return {?}
*/
function (evt) {
scrollHandler_1({
client: dom.clientHeight,
full: ((/** @type {?} */ (evt.currentTarget))).clientHeight,
top: ((/** @type {?} */ (evt.currentTarget))).scrollTop
});
});
}
});
_this.setPanel = (/**
* @param {?} dom
* @return {?}
*/
function (dom) {
_this._panel = dom;
});
return _this;
}
Object.defineProperty(CalendarDatePickerComponent.prototype, "onCellClick", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.props.onCellClick = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(CalendarDatePickerComponent.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(CalendarDatePickerComponent.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(CalendarDatePickerComponent.prototype, "propsData", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.props = tslib_1.__assign({}, this.props, value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(CalendarDatePickerComponent.prototype, "onSelectHasDisableDate", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.props.onSelectHasDisableDate = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(CalendarDatePickerComponent.prototype, "onLayout", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.props.onLayout = value;
},
enumerable: true,
configurable: true
});
/**
* @param {?} event
* @return {?}
*/
CalendarDatePickerComponent.prototype.onTouchStart = /**
* @param {?} event
* @return {?}
*/
function (event) {
this._lastY = event.touches[0].screenY || event.touches[0].pageY;
this._delta = this._initDelta;
};
/**
* @param {?} event
* @return {?}
*/
CalendarDatePickerComponent.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 || 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 {?}
*/
CalendarDatePickerComponent.prototype.onTouchEnd = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.onFinish();
};
/**
* @return {?}
*/
CalendarDatePickerComponent.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((/**
* @param {?} m
* @return {?}
*/
function (m) {
if (m.updateLayout) {
m.updateLayout();
}
}));
}
this.setTransform(this._panel.style, "translate3d(0,0,0)");
this.setTransition(this._panel.style, '.3s');
setTimeout((/**
* @return {?}
*/
function () {
if (_this._panel) {
_this.setTransition(_this._panel.style, '');
}
}), 300);
};
/**
* @param {?} nodeStyle
* @param {?} value
* @return {?}
*/
CalendarDatePickerComponent.prototype.setTransform = /**
* @param {?} nodeStyle
* @param {?} value
* @return {?}
*/
function (nodeStyle, value) {
this.transform = value;
nodeStyle.transform = value;
nodeStyle.webkitTransform = value;
};
/**
* @param {?} nodeStyle
* @param {?} value
* @return {?}
*/
CalendarDatePickerComponent.prototype.setTransition = /**
* @param {?} nodeStyle
* @param {?} value
* @return {?}
*/
function (nodeStyle, value) {
nodeStyle.transition = value;
nodeStyle.webkitTransition = value;
};
/**
* @return {?}
*/
CalendarDatePickerComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
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 = function () { return []; };
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',] }]
};
return CalendarDatePickerComponent;
}(CalendarDatePickerBaseComponent));
export { CalendarDatePickerComponent };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbImNhbGVuZGFyL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBVSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoSCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU5RTtJQUtpRCx1REFBK0I7SUFDOUU7UUFBQSxZQUNFLGlCQUFPLFNBQ1I7UUFFRCxlQUFTLEdBQVcsRUFBRSxDQUFDO1FBRWYsZ0JBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsWUFBTSxHQUFXLENBQUMsQ0FBQztRQUNuQixZQUFNLEdBQVcsS0FBSSxDQUFDLFVBQVUsQ0FBQztRQXVDUCxnQkFBVSxHQUFZLElBQUksQ0FBQztRQUMzQixnQkFBVSxHQUFZLElBQUksQ0FBQztRQUU3RCx1QkFBaUI7Ozs7UUFBRyxVQUFDLElBQTJCO1lBQzlDLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsT0FBTzthQUNSO1lBQ0QsT0FBTztnQkFDTCxTQUFTLEVBQUUsSUFBSTtnQkFDZixNQUFNLEVBQUUsS0FBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO2dCQUN6QixPQUFPLEVBQUUsS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO2dCQUMzQixXQUFXLEVBQUUsS0FBSSxDQUFDLGVBQWU7Z0JBQ2pDLFlBQVksRUFBRSxLQUFJLENBQUMsS0FBSyxDQUFDLFlBQVk7Z0JBQ3JDLEdBQUc7Ozs7Z0JBQUUsVUFBQSxHQUFHO29CQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksU0FBUyxDQUFDO29CQUMxRCxJQUFJLENBQUMsWUFBWTs7O29CQUFHO3dCQUNsQixLQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDaEMsQ0FBQyxDQUFBLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN0QixDQUFDLENBQUE7YUFDRixDQUFDO1FBQ0osQ0FBQyxFQUFBO1FBRUQsbUJBQWE7Ozs7O1FBQUcsVUFBQyxJQUEwQixFQUFFLFdBQVc7WUFDdEQsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLGFBQWEsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRTtvQkFDM0QsVUFBVTs7O29CQUFDLGNBQU0sT0FBQSxLQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBckMsQ0FBcUMsR0FBRSxHQUFHLENBQUMsQ0FBQztvQkFDN0QsT0FBTztpQkFDUjtnQkFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzdEO1FBQ0gsQ0FBQyxFQUFBO1FBRUQsZUFBUzs7OztRQUFHLFVBQUMsR0FBbUI7WUFDOUIsSUFBSSxHQUFHLEVBQUU7Z0JBQ0MsSUFBQSwrQkFBUTtnQkFFaEIsSUFBSSxRQUFRLEVBQUU7b0JBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDNUI7O29CQUVLLGVBQWEsR0FBRyxLQUFJLENBQUMsY0FBYyxFQUFFO2dCQUMzQyxHQUFHLENBQUMsUUFBUTs7OztnQkFBRyxVQUFBLEdBQUc7b0JBQ2hCLGVBQWEsQ0FBQzt3QkFDWixNQUFNLEVBQUUsR0FBRyxDQUFDLFlBQVk7d0JBQ3hCLElBQUksRUFBRSxDQUFDLG1CQUFBLEdBQUcsQ0FBQyxhQUFhLEVBQWtCLENBQUMsQ0FBQyxZQUFZO3dCQUN4RCxHQUFHLEVBQUUsQ0FBQyxtQkFBQSxHQUFHLENBQUMsYUFBYSxFQUFrQixDQUFDLENBQUMsU0FBUztxQkFDckQsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQSxDQUFDO2FBQ0g7UUFDSCxDQUFDLEVBQUE7UUFFRCxjQUFROzs7O1FBQUcsVUFBQyxHQUFtQjtZQUM3QixLQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNwQixDQUFDLEVBQUE7O0lBcEdELENBQUM7SUFhRCxzQkFDSSxvREFBVzs7Ozs7UUFEZixVQUNnQixLQUFLO1lBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUNqQyxDQUFDOzs7T0FBQTtJQUNELHNCQUNJLGdEQUFPOzs7OztRQURYLFVBQ1ksS0FBSzs7Z0JBQ1QsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDOzs7T0FBQTtJQUNELHNCQUNJLGtEQUFTOzs7OztRQURiLFVBQ2MsS0FBSzs7Z0JBQ1gsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDOzs7T0FBQTtJQUNELHNCQUNJLGtEQUFTOzs7OztRQURiLFVBQ2MsS0FBSztZQUNqQixJQUFJLENBQUMsS0FBSyx3QkFDTCxJQUFJLENBQUMsS0FBSyxFQUNWLEtBQUssQ0FDVCxDQUFDO1FBQ0osQ0FBQzs7O09BQUE7SUFDRCxzQkFDSSwrREFBc0I7Ozs7O1FBRDFCLFVBQzJCLEtBQUs7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDNUMsQ0FBQzs7O09BQUE7SUFDRCxzQkFDSSxpREFBUTs7Ozs7UUFEWixVQUNhLEtBQUs7WUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzlCLENBQUM7OztPQUFBOzs7OztJQTJERCxrREFBWTs7OztJQUFaLFVBQWEsS0FBSztRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNoQyxDQUFDOzs7OztJQUVELGlEQUFXOzs7O0lBQVgsVUFBWSxLQUFLOztZQUNULEdBQUcsR0FBRyxLQUFLLENBQUMsYUFBYTs7WUFDekIsVUFBVSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEtBQUssQ0FBQztRQUV0QyxJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDakYsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbkIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO29CQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztpQkFDbEI7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUNqQjtZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsbUJBQWlCLElBQUksQ0FBQyxNQUFNLFVBQU8sQ0FBQyxDQUFDO1NBQzNFO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxnREFBVTs7OztJQUFWLFVBQVcsS0FBSztRQUNkLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDOzs7O0lBRUQsOENBQVE7OztJQUFSO1FBQUEsaUJBbUJDO1FBbEJDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFeEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTzs7OztZQUFDLFVBQUEsQ0FBQztnQkFDekIsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFO29CQUNsQixDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7aUJBQ2xCO1lBQ0gsQ0FBQyxFQUFDLENBQUM7U0FDSjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdDLFVBQVU7OztRQUFDO1lBQ1QsSUFBSSxLQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNmLEtBQUksQ0FBQyxhQUFhLENBQUMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDM0M7UUFDSCxDQUFDLEdBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDOzs7Ozs7SUFFRCxrREFBWTs7Ozs7SUFBWixVQUFhLFNBQThCLEVBQUUsS0FBVTtRQUNyRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixTQUFTLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUM1QixTQUFTLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUNwQyxDQUFDOzs7Ozs7SUFFRCxtREFBYTs7Ozs7SUFBYixVQUFjLFNBQThCLEVBQUUsS0FBVTtRQUN0RCxTQUFTLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUM3QixTQUFTLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLENBQUM7Ozs7SUFFRCw4Q0FBUTs7O0lBQVI7UUFDRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7O2dCQTdLRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLDhDQUE4QztvQkFDeEQsMnNCQUEwQztvQkFDMUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7aUJBQ3RDOzs7Ozs0QkFZRSxTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTsyQkFFcEMsU0FBUyxTQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7OEJBR25DLEtBQUs7MEJBSUwsS0FBSzs0QkFNTCxLQUFLOzRCQU1MLEtBQUs7eUNBT0wsS0FBSzsyQkFJTCxLQUFLOzZCQUtMLFdBQVcsU0FBQyxtQkFBbUI7NkJBQy9CLFdBQVcsU0FBQyxtQkFBbUI7O0lBd0hsQyxrQ0FBQztDQUFBLEFBOUtELENBS2lELCtCQUErQixHQXlLL0U7U0F6S1ksMkJBQTJCOzs7SUFLdEMsZ0RBQXVCOzs7OztJQUN2Qiw2Q0FBb0I7Ozs7O0lBQ3BCLGlEQUErQjs7Ozs7SUFDL0IsNkNBQTJCOzs7OztJQUMzQiw2Q0FBeUM7O0lBRXpDLGdEQUNzQjs7SUFDdEIsK0NBQ3FCOztJQWtDckIsaURBQTZEOztJQUM3RCxpREFBNkQ7O0lBRTdELHdEQWtCQzs7SUFFRCxvREFTQzs7SUFFRCxnREFpQkM7O0lBRUQsK0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBJbnB1dCwgRWxlbWVudFJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRlTW9kZWxzIH0gZnJvbSAnLi4vZGF0ZS9EYXRhVHlwZXMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJEYXRlUGlja2VyQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZXBpY2tlci5iYXNlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0NhbGVuZGFyRGF0ZVBpY2tlciwgbnptLWNhbGVuZGFyLWRhdGUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyRGF0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIENhbGVuZGFyRGF0ZVBpY2tlckJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgdHJhbnNmb3JtOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfcGFuZWw6IGFueTtcbiAgcHJpdmF0ZSBfaW5pdERlbHRhOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9sYXN0WTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfZGVsdGE6IG51bWJlciA9IHRoaXMuX2luaXREZWx0YTtcblxuICBAVmlld0NoaWxkKCdsYXlvdXQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBsYXlvdXREb206IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BhbmVsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcGFuZWxEb206IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KClcbiAgc2V0IG9uQ2VsbENsaWNrKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5vbkNlbGxDbGljayA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBlbmREYXRlKHZhbHVlKSB7XG4gICAgY29uc3Qgb2xkUHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnByb3BzKTtcbiAgICB0aGlzLnByb3BzLmVuZERhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLnJlY2VpdmVQcm9wcyhvbGRQcm9wcywgdGhpcy5wcm9wcyk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHN0YXJ0RGF0ZSh2YWx1ZSkge1xuICAgIGNvbnN0IG9sZFByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcyk7XG4gICAgdGhpcy5wcm9wcy5zdGFydERhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLnJlY2VpdmVQcm9wcyhvbGRQcm9wcywgdGhpcy5wcm9wcyk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHByb3BzRGF0YSh2YWx1ZSkge1xuICAgIHRoaXMucHJvcHMgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgLi4udmFsdWVcbiAgICB9O1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBvblNlbGVjdEhhc0Rpc2FibGVEYXRlKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5vblNlbGVjdEhhc0Rpc2FibGVEYXRlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG9uTGF5b3V0KHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wcy5vbkxheW91dCA9IHZhbHVlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1jYWxlbmRhcicpIGFtQ2FsZW5kYXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRhdGUtcGlja2VyJykgZGF0ZVBpY2tlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgZ2VuTW9udGhDb21wb25lbnQgPSAoZGF0YT86IERhdGVNb2RlbHMuTW9udGhEYXRhKSA9PiB7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBtb250aERhdGE6IGRhdGEsXG4gICAgICBsb2NhbGU6IHRoaXMucHJvcHMubG9jYWxlLFxuICAgICAgcm93U2l6ZTogdGhpcy5wcm9wcy5yb3dTaXplLFxuICAgICAgb25DZWxsQ2xpY2s6IHRoaXMuYmFzZU9uQ2VsbENsaWNrLFxuICAgICAgZ2V0RGF0ZUV4dHJhOiB0aGlzLnByb3BzLmdldERhdGVFeHRyYSxcbiAgICAgIHJlZjogZG9tID0+IHtcbiAgICAgICAgZGF0YS5jb21wb25lbnRSZWYgPSBkb20gfHwgZGF0YS5jb21wb25lbnRSZWYgfHwgdW5kZWZpbmVkO1xuICAgICAgICBkYXRhLnVwZGF0ZUxheW91dCA9ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbXB1dGVIZWlnaHQoZGF0YSwgZG9tKTtcbiAgICAgICAgfTtcbiAgICAgICAgZGF0YS51cGRhdGVMYXlvdXQoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29tcHV0ZUhlaWdodCA9IChkYXRhOiBEYXRlTW9kZWxzLk1vbnRoRGF0YSwgc2luZ2xlTW9udGgpID0+IHtcbiAgICBpZiAoc2luZ2xlTW9udGggJiYgc2luZ2xlTW9udGgud3JhcHBlckRpdkRPTSkge1xuICAgICAgaWYgKCFkYXRhLmhlaWdodCAmJiAhc2luZ2xlTW9udGgud3JhcHBlckRpdkRPTS5jbGllbnRIZWlnaHQpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvbXB1dGVIZWlnaHQoZGF0YSwgc2luZ2xlTW9udGgpLCA1MDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkYXRhLmhlaWdodCA9IHNpbmdsZU1vbnRoLndyYXBwZXJEaXZET00uY2xpZW50SGVpZ2h0IHx8IGRhdGEuaGVpZ2h0IHx8IDA7XG4gICAgICBkYXRhLnkgPSBzaW5nbGVNb250aC53cmFwcGVyRGl2RE9NLm9mZnNldFRvcCB8fCBkYXRhLnkgfHwgMDtcbiAgICB9XG4gIH1cblxuICBzZXRMYXlvdXQgPSAoZG9tOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgIGlmIChkb20pIHtcbiAgICAgIGNvbnN0IHsgb25MYXlvdXQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGlmIChvbkxheW91dCkge1xuICAgICAgICBvbkxheW91dChkb20uY2xpZW50SGVpZ2h0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Nyb2xsSGFuZGxlciA9IHRoaXMuY3JlYXRlT25TY3JvbGwoKTtcbiAgICAgIGRvbS5vbnNjcm9sbCA9IGV2dCA9PiB7XG4gICAgICAgIHNjcm9sbEhhbmRsZXIoe1xuICAgICAgICAgIGNsaWVudDogZG9tLmNsaWVudEhlaWdodCxcbiAgICAgICAgICBmdWxsOiAoZXZ0LmN1cnJlbnRUYXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpLmNsaWVudEhlaWdodCxcbiAgICAgICAgICB0b3A6IChldnQuY3VycmVudFRhcmdldCBhcyBIVE1MRGl2RWxlbWVudCkuc2Nyb2xsVG9wXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBzZXRQYW5lbCA9IChkb206IEhUTUxEaXZFbGVtZW50KSA9PiB7XG4gICAgdGhpcy5fcGFuZWwgPSBkb207XG4gIH1cblxuICBvblRvdWNoU3RhcnQoZXZlbnQpIHtcbiAgICB0aGlzLl9sYXN0WSA9IGV2ZW50LnRvdWNoZXNbMF0uc2NyZWVuWSB8fCBldmVudC50b3VjaGVzWzBdLnBhZ2VZO1xuICAgIHRoaXMuX2RlbHRhID0gdGhpcy5faW5pdERlbHRhO1xuICB9XG5cbiAgb25Ub3VjaE1vdmUoZXZlbnQpIHtcbiAgICBjb25zdCBlbGUgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgIGNvbnN0IGlzUmVhY2hUb3AgPSBlbGUuc2Nyb2xsVG9wID09PSAwO1xuXG4gICAgaWYgKGlzUmVhY2hUb3ApIHtcbiAgICAgIHRoaXMuX2RlbHRhID0gKGV2ZW50LnRvdWNoZXNbMF0uc2NyZWVuWSB8fCBldmVudC50b3VjaGVzWzBdLnBhZ2VZKSAtIHRoaXMuX2xhc3RZO1xuICAgICAgaWYgKHRoaXMuX2RlbHRhID4gMCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5fZGVsdGEgPiA4MCkge1xuICAgICAgICAgIHRoaXMuX2RlbHRhID0gODA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RlbHRhID0gMDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VHJhbnNmb3JtKHRoaXMuX3BhbmVsLnN0eWxlLCBgdHJhbnNsYXRlM2QoMCwke3RoaXMuX2RlbHRhfXB4LDApYCk7XG4gICAgfVxuICB9XG5cbiAgb25Ub3VjaEVuZChldmVudCkge1xuICAgIHRoaXMub25GaW5pc2goKTtcbiAgfVxuXG4gIG9uRmluaXNoKCkge1xuICAgIGlmICh0aGlzLl9kZWx0YSA+IDQwICYmIHRoaXMuY2FuTG9hZFByZXYoKSkge1xuICAgICAgdGhpcy5nZW5Nb250aERhdGEodGhpcy5zdGF0ZS5tb250aHNbMF0uZmlyc3REYXRlLCAtMSk7XG5cbiAgICAgIHRoaXMudmlzaWJsZU1vbnRoID0gdGhpcy5zdGF0ZS5tb250aHMuc2xpY2UoMCwgdGhpcy5wcm9wcy5pbml0YWxNb250aHMpO1xuXG4gICAgICB0aGlzLnN0YXRlLm1vbnRocy5mb3JFYWNoKG0gPT4ge1xuICAgICAgICBpZiAobS51cGRhdGVMYXlvdXQpIHtcbiAgICAgICAgICBtLnVwZGF0ZUxheW91dCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZXRUcmFuc2Zvcm0odGhpcy5fcGFuZWwuc3R5bGUsIGB0cmFuc2xhdGUzZCgwLDAsMClgKTtcbiAgICB0aGlzLnNldFRyYW5zaXRpb24odGhpcy5fcGFuZWwuc3R5bGUsICcuM3MnKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9wYW5lbCkge1xuICAgICAgICB0aGlzLnNldFRyYW5zaXRpb24odGhpcy5fcGFuZWwuc3R5bGUsICcnKTtcbiAgICAgIH1cbiAgICB9LCAzMDApO1xuICB9XG5cbiAgc2V0VHJhbnNmb3JtKG5vZGVTdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiwgdmFsdWU6IGFueSkge1xuICAgIHRoaXMudHJhbnNmb3JtID0gdmFsdWU7XG4gICAgbm9kZVN0eWxlLnRyYW5zZm9ybSA9IHZhbHVlO1xuICAgIG5vZGVTdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB2YWx1ZTtcbiAgfVxuXG4gIHNldFRyYW5zaXRpb24obm9kZVN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uLCB2YWx1ZTogYW55KSB7XG4gICAgbm9kZVN0eWxlLnRyYW5zaXRpb24gPSB2YWx1ZTtcbiAgICBub2RlU3R5bGUud2Via2l0VHJhbnNpdGlvbiA9IHZhbHVlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0KCk7XG4gICAgdGhpcy5zZXRMYXlvdXQodGhpcy5sYXlvdXREb20ubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5zZXRQYW5lbCh0aGlzLnBhbmVsRG9tLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG59XG4iXX0=