UNPKG

ngx-pluto

Version:
429 lines 29.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewEncapsulation, Input, ViewChild, forwardRef, Output, EventEmitter, ChangeDetectorRef } from "@angular/core"; import { NpDatePickerService } from "./date-picker.service"; import * as moment_ from 'moment'; /** @type {?} */ var moment = moment_; import { NpDatePickerPopup } from "./components/date-picker-popup"; import { ComponentPortal } from "@angular/cdk/portal"; import { DATE_FORMAT, DATE_TIME_FORMAT } from "./date-picker-const"; import { NpInput } from "../input"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; /** * Date picker组件 */ var NpDatePicker = /** @class */ (function () { function NpDatePicker(datePickerService, cdf) { this.datePickerService = datePickerService; this.cdf = cdf; /** * Placeholder */ this.placeholder = ''; /** * 已选时间 */ this.date = null; /** * 日期时间展示格式,默认只展示日期 */ this.format = DATE_FORMAT; /** * 是否展示时间,默认不展示 */ this.isShowTime = false; /** * 显示在footer左侧的自定义时间标签数组,如“昨天”等 */ this.footerItems = []; /** * 当为datetime-picker时,底部面板最右侧展示的确认按钮名称 */ this.confirmButtonText = '确认'; this.onDateChanged = new EventEmitter(); this.isHover = false; this.emitChange = (/** * @param {?} _ * @return {?} */ function (_) { }); } /** * @return {?} */ NpDatePicker.prototype.ngOnInit = /** * @return {?} */ function () { this.overlayRef = this.datePickerService.getOverlayRef(this.datePickerInput.npInput); if (this.isShowTime) { this.format = DATE_TIME_FORMAT; } }; /** * @param {?} changes * @return {?} */ NpDatePicker.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { }; /** * @return {?} */ NpDatePicker.prototype.onToggleDatePickerPopup = /** * @return {?} */ function () { var _this = this; if (this.isDisabled) { return; } if (this.overlayRef.hasAttached()) { this.closePopup(); return; } this.datePickerPopupRef = this.overlayRef.attach(new ComponentPortal(NpDatePickerPopup)); this.datePickerPopupRef.instance.date = moment(this.date); this.datePickerPopupRef.instance.datePickerType = this.isShowTime ? 'datetime-picker' : 'date-picker'; this.datePickerPopupRef.instance.footerItems = this.footerItems; this.datePickerPopupRef.instance.isShowTime = this.isShowTime; this.datePickerPopupRef.instance.confirmButtonText = this.confirmButtonText; this.subscribeNotifyEvents(); this.overlayRef.backdropClick().subscribe((/** * @return {?} */ function () { _this.closePopup(); })); }; /** * @param {?} data * @return {?} */ NpDatePicker.prototype.onBlur = /** * @param {?} data * @return {?} */ function (data) { if (this.datePickerService.isValid(data.value)) { this.date = moment(data.value, this.format).clone(); } else { // 如果输入日期不合法,默认当前时间 this.date = moment().clone(); } this.syncValue(); this.emitChange(this.date); this.onDateChanged.emit(this.date); }; /** * @return {?} */ NpDatePicker.prototype.onClear = /** * @return {?} */ function () { if (this.isDisabled) { return; } this.date = null; this.syncValue(); this.emitChange(this.date); this.onDateChanged.emit(this.date); }; /** * @return {?} */ NpDatePicker.prototype.onMouseenter = /** * @return {?} */ function () { this.isHover = true; }; /** * @return {?} */ NpDatePicker.prototype.onMouseleave = /** * @return {?} */ function () { this.isHover = false; }; //#region Private methods /**每次this.date改变时,这个方法都必须要调用 */ //#region Private methods /** * 每次this.date改变时,这个方法都必须要调用 * @private * @return {?} */ NpDatePicker.prototype.syncValue = //#region Private methods /** * 每次this.date改变时,这个方法都必须要调用 * @private * @return {?} */ function () { if (this.date && this.datePickerService.isValid(this.date)) { this.value = moment(this.date, this.format).format(this.format); } else { this.value = ''; } }; /** * @private * @return {?} */ NpDatePicker.prototype.closePopup = /** * @private * @return {?} */ function () { if (this.overlayRef.hasAttached()) { this.overlayRef.detach(); } }; /** * @private * @return {?} */ NpDatePicker.prototype.subscribeNotifyEvents = /** * @private * @return {?} */ function () { var _this = this; this.datePickerPopupRef.instance.onDayClicked.subscribe((/** * @param {?} res * @return {?} */ function (res) { _this.emitDataAndClosePopup(res.date); })); this.datePickerPopupRef.instance.onItemLabelClicked.subscribe((/** * @param {?} res * @return {?} */ function (res) { if (res.value instanceof Function) { _this.emitDataAndClosePopup(res.value()); } else { _this.emitDataAndClosePopup(moment(res.value)); } _this.closePopup(); })); if (this.isShowTime) { this.datePickerPopupRef.instance.onTimeClicked.subscribe((/** * @param {?} res * @return {?} */ function (res) { /** @type {?} */ var date = moment(moment(_this.date).format(DATE_FORMAT) + ' ' + res); _this.emitDataAndClosePopup(date); })); this.datePickerPopupRef.instance.onConfirmClicked.subscribe((/** * @param {?} res * @return {?} */ function (res) { /** @type {?} */ var date = moment(moment(_this.date).format(DATE_FORMAT) + ' ' + res); _this.emitDataAndClosePopup(date); _this.closePopup(); })); } }; /** * @private * @param {?} date * @return {?} */ NpDatePicker.prototype.emitDataAndClosePopup = /** * @private * @param {?} date * @return {?} */ function (date) { this.date = date; this.syncValue(); this.emitChange(moment(this.date)); this.onDateChanged.emit(moment(this.date)); this.datePickerInput.focus(); if (!this.isShowTime) { this.closePopup(); } }; //#endregion //#region Implement for ControlValueAccessor //#endregion //#region Implement for ControlValueAccessor /** * @param {?} obj * @return {?} */ NpDatePicker.prototype.writeValue = //#endregion //#region Implement for ControlValueAccessor /** * @param {?} obj * @return {?} */ function (obj) { this.date = obj; this.syncValue(); }; /** * @param {?} fn * @return {?} */ NpDatePicker.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this.emitChange = fn; }; /** * @param {?} fn * @return {?} */ NpDatePicker.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { }; NpDatePicker.decorators = [ { type: Component, args: [{ selector: "np-date-picker", template: "<div class=\"np-date-picker-wrapper flex-wrap col-flex\" (mouseenter)=\"onMouseenter()\" (mouseleave)=\"onMouseleave()\">\r\n <i *ngIf=\"!isHover\" class=\"far fa-calendar\"></i>\r\n <i *ngIf=\"isHover\" class=\"fas fa-times-circle\" (click)=\"onClear()\"></i>\r\n <np-input #datePickerInput [label]=\"label\" [isRequired]=\"isRequired\" [isDisabled]=\"isDisabled\"\r\n [placeholder]=\"placeholder\" [errorMessage]=\"errorMessage\" [(ngModel)]=\"value\" (click)=\"onToggleDatePickerPopup()\"\r\n (onBlur)=\"onBlur($event)\">\r\n </np-input>\r\n</div>\r\n", encapsulation: ViewEncapsulation.None, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return NpDatePicker; })), multi: true, } ], styles: [".np-date-picker-wrapper{position:relative}.np-date-picker-wrapper>.far.fa-calendar,.np-date-picker-wrapper>.fas.fa-times-circle{position:absolute;right:10px;line-height:34px;font-size:15px;cursor:pointer;z-index:1}.np-date-picker-wrapper .np-input-wrapper .np-input{width:220px}"] }] } ]; /** @nocollapse */ NpDatePicker.ctorParameters = function () { return [ { type: NpDatePickerService }, { type: ChangeDetectorRef } ]; }; NpDatePicker.propDecorators = { label: [{ type: Input }], isRequired: [{ type: Input }], placeholder: [{ type: Input }], errorMessage: [{ type: Input }], isDisabled: [{ type: Input }], date: [{ type: Input }], format: [{ type: Input }], isShowTime: [{ type: Input }], footerItems: [{ type: Input }], confirmButtonText: [{ type: Input }], onDateChanged: [{ type: Output }], datePickerInput: [{ type: ViewChild, args: ['datePickerInput',] }] }; return NpDatePicker; }()); export { NpDatePicker }; if (false) { /** * 标签 * @type {?} */ NpDatePicker.prototype.label; /** * 是否必填,true仅在标签前面添加红色*号, false不加 * @type {?} */ NpDatePicker.prototype.isRequired; /** * Placeholder * @type {?} */ NpDatePicker.prototype.placeholder; /** * 校验错误时显示错误信息 * @type {?} */ NpDatePicker.prototype.errorMessage; /** * 是否禁用 * @type {?} */ NpDatePicker.prototype.isDisabled; /** * 已选时间 * @type {?} */ NpDatePicker.prototype.date; /** * 日期时间展示格式,默认只展示日期 * @type {?} */ NpDatePicker.prototype.format; /** * 是否展示时间,默认不展示 * @type {?} */ NpDatePicker.prototype.isShowTime; /** * 显示在footer左侧的自定义时间标签数组,如“昨天”等 * @type {?} */ NpDatePicker.prototype.footerItems; /** * 当为datetime-picker时,底部面板最右侧展示的确认按钮名称 * @type {?} */ NpDatePicker.prototype.confirmButtonText; /** @type {?} */ NpDatePicker.prototype.onDateChanged; /** @type {?} */ NpDatePicker.prototype.datePickerInput; /** @type {?} */ NpDatePicker.prototype.datePickerPopupRef; /** * @type {?} * @private */ NpDatePicker.prototype.overlayRef; /** @type {?} */ NpDatePicker.prototype.isHover; /** * @type {?} * @private */ NpDatePicker.prototype.emitChange; /** * 日期输入框文本值,每当this.date改变时此值会同步改变 * @type {?} */ NpDatePicker.prototype.value; /** * @type {?} * @private */ NpDatePicker.prototype.datePickerService; /** * @type {?} * @private */ NpDatePicker.prototype.cdf; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtcGx1dG8vIiwic291cmNlcyI6WyJsaWIvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQVUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQTRCLE1BQU0sRUFBRSxZQUFZLEVBQWdCLGlCQUFpQixFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUM3TSxPQUFPLEVBQUUsbUJBQW1CLEVBQW1CLE1BQU0sdUJBQXVCLENBQUM7QUFDN0UsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7O0lBQU8sTUFBTSxHQUFHLE9BQU87QUFFekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQU16RTtJQW1ERSxzQkFBb0IsaUJBQXNDLEVBQVUsR0FBc0I7UUFBdEUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFxQjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1COzs7O1FBOUJqRixnQkFBVyxHQUFXLEVBQUUsQ0FBQzs7OztRQU96QixTQUFJLEdBQTRCLElBQUksQ0FBQzs7OztRQUVyQyxXQUFNLEdBQVcsV0FBVyxDQUFDOzs7O1FBRTdCLGVBQVUsR0FBWSxLQUFLLENBQUM7Ozs7UUFFNUIsZ0JBQVcsR0FBMkIsRUFBRSxDQUFDOzs7O1FBRXpDLHNCQUFpQixHQUFXLElBQUksQ0FBQztRQUVoQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFNbEQsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUVqQixlQUFVOzs7O1FBQUcsVUFBQyxDQUFNLElBQU8sQ0FBQyxFQUFDO0lBS3lELENBQUM7Ozs7SUFFL0YsK0JBQVE7OztJQUFSO1FBQ0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFckYsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUM7U0FDaEM7SUFDSCxDQUFDOzs7OztJQUVELGtDQUFXOzs7O0lBQVgsVUFBWSxPQUFzQixJQUFVLENBQUM7Ozs7SUFFN0MsOENBQXVCOzs7SUFBdkI7UUFBQSxpQkFxQkM7UUFwQkMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFDdEcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNoRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzlELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQzVFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRTdCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUzs7O1FBQUM7WUFDeEMsS0FBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7SUFFRCw2QkFBTTs7OztJQUFOLFVBQU8sSUFBZ0M7UUFDckMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNyRDthQUFNO1lBQ0wsbUJBQW1CO1lBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDOUI7UUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Ozs7SUFFRCw4QkFBTzs7O0lBQVA7UUFDRSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDOzs7O0lBRUQsbUNBQVk7OztJQUFaO1FBQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQzs7OztJQUVELG1DQUFZOzs7SUFBWjtRQUNFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCx5QkFBeUI7SUFFekIsK0JBQStCOzs7Ozs7O0lBQ3ZCLGdDQUFTOzs7Ozs7O0lBQWpCO1FBQ0UsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakU7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQzs7Ozs7SUFFTyxpQ0FBVTs7OztJQUFsQjtRQUNFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQzs7Ozs7SUFFTyw0Q0FBcUI7Ozs7SUFBN0I7UUFBQSxpQkEyQkM7UUExQkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsU0FBUzs7OztRQUFDLFVBQUMsR0FBb0I7WUFDM0UsS0FBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxDQUFDLEVBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsU0FBUzs7OztRQUFDLFVBQUMsR0FBeUI7WUFDdEYsSUFBSSxHQUFHLENBQUMsS0FBSyxZQUFZLFFBQVEsRUFBRTtnQkFDakMsS0FBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ3pDO2lCQUFNO2dCQUNMLEtBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDL0M7WUFFRCxLQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxFQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUzs7OztZQUFDLFVBQUMsR0FBVzs7b0JBQy9ELElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztnQkFDcEUsS0FBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLENBQUMsRUFBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTOzs7O1lBQUMsVUFBQyxHQUFXOztvQkFDbEUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO2dCQUNwRSxLQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLEtBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixDQUFDLEVBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7Ozs7O0lBRU8sNENBQXFCOzs7OztJQUE3QixVQUE4QixJQUFvQjtRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUNELFlBQVk7SUFFWiw0Q0FBNEM7Ozs7Ozs7SUFDNUMsaUNBQVU7Ozs7Ozs7SUFBVixVQUFXLEdBQVE7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDaEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7Ozs7O0lBRUQsdUNBQWdCOzs7O0lBQWhCLFVBQWlCLEVBQU87UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQzs7Ozs7SUFFRCx3Q0FBaUI7Ozs7SUFBakIsVUFBa0IsRUFBTyxJQUFVLENBQUM7O2dCQTFMckMsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLGdrQkFBK0I7b0JBRS9CLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVU7Ozs0QkFBQyxjQUFNLE9BQUEsWUFBWSxFQUFaLENBQVksRUFBQzs0QkFDM0MsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7O2lCQUNGOzs7O2dCQXpCUSxtQkFBbUI7Z0JBRCtHLGlCQUFpQjs7O3dCQStCekosS0FBSzs2QkFFTCxLQUFLOzhCQUVMLEtBQUs7K0JBRUwsS0FBSzs2QkFFTCxLQUFLO3VCQUdMLEtBQUs7eUJBRUwsS0FBSzs2QkFFTCxLQUFLOzhCQUVMLEtBQUs7b0NBRUwsS0FBSztnQ0FFTCxNQUFNO2tDQUVOLFNBQVMsU0FBQyxpQkFBaUI7O0lBb0o5QixtQkFBQztDQUFBLEFBNUxELElBNExDO1NBOUtZLFlBQVk7Ozs7OztJQUd2Qiw2QkFBdUI7Ozs7O0lBRXZCLGtDQUE2Qjs7Ozs7SUFFN0IsbUNBQWtDOzs7OztJQUVsQyxvQ0FBOEI7Ozs7O0lBRTlCLGtDQUE2Qjs7Ozs7SUFHN0IsNEJBQThDOzs7OztJQUU5Qyw4QkFBc0M7Ozs7O0lBRXRDLGtDQUFxQzs7Ozs7SUFFckMsbUNBQWtEOzs7OztJQUVsRCx5Q0FBMEM7O0lBRTFDLHFDQUFrRDs7SUFFbEQsdUNBQXVEOztJQUN2RCwwQ0FBb0Q7Ozs7O0lBRXBELGtDQUErQjs7SUFDL0IsK0JBQXlCOzs7OztJQUV6QixrQ0FBcUM7Ozs7O0lBR3JDLDZCQUFjOzs7OztJQUVGLHlDQUE4Qzs7Ozs7SUFBRSwyQkFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkluaXQsIElucHV0LCBWaWV3Q2hpbGQsIGZvcndhcmRSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENvbXBvbmVudFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTnBEYXRlUGlja2VyU2VydmljZSwgRGF5RGF0YVBlck1vbnRoIH0gZnJvbSBcIi4vZGF0ZS1waWNrZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgKiBhcyBtb21lbnRfIGZyb20gJ21vbWVudCc7IGNvbnN0IG1vbWVudCA9IG1vbWVudF9cclxuaW1wb3J0IHsgT3ZlcmxheVJlZiB9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xyXG5pbXBvcnQgeyBOcERhdGVQaWNrZXJQb3B1cCB9IGZyb20gXCIuL2NvbXBvbmVudHMvZGF0ZS1waWNrZXItcG9wdXBcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcclxuaW1wb3J0IHsgREFURV9GT1JNQVQsIERBVEVfVElNRV9GT1JNQVQgfSBmcm9tIFwiLi9kYXRlLXBpY2tlci1jb25zdFwiO1xyXG5pbXBvcnQgeyBOcElucHV0IH0gZnJvbSBcIi4uL2lucHV0XCI7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBEYXRlUGlja2VyRm9vdGVySXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvZGF0ZS1waWNrZXItZm9vdGVyXCI7XHJcblxyXG4vKipcclxuICogRGF0ZSBwaWNrZXLnu4Tku7ZcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgbnAtZGF0ZS1waWNrZXJgLFxyXG4gIHRlbXBsYXRlVXJsOiAnZGF0ZS1waWNrZXIuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2RhdGUtcGlja2VyLnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTnBEYXRlUGlja2VyKSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE5wRGF0ZVBpY2tlciBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gIC8qKuagh+etviAqL1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XHJcbiAgLyoq5piv5ZCm5b+F5aGr77yMdHJ1ZeS7heWcqOagh+etvuWJjemdoua3u+WKoOe6ouiJsirlj7fvvIwgZmFsc2XkuI3liqAqL1xyXG4gIEBJbnB1dCgpIGlzUmVxdWlyZWQ6IGJvb2xlYW47XHJcbiAgLyoqUGxhY2Vob2xkZXIgKi9cclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XHJcbiAgLyoq5qCh6aqM6ZSZ6K+v5pe25pi+56S66ZSZ6K+v5L+h5oGvICovXHJcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgLyoq5piv5ZCm56aB55SoICovXHJcbiAgQElucHV0KCkgaXNEaXNhYmxlZDogYm9vbGVhbjtcclxuXHJcbiAgLyoq5bey6YCJ5pe26Ze0ICovXHJcbiAgQElucHV0KCkgZGF0ZTogbW9tZW50Xy5Nb21lbnQgfCBzdHJpbmcgPSBudWxsO1xyXG4gIC8qKuaXpeacn+aXtumXtOWxleekuuagvOW8j++8jOm7mOiupOWPquWxleekuuaXpeacnyAqL1xyXG4gIEBJbnB1dCgpIGZvcm1hdDogc3RyaW5nID0gREFURV9GT1JNQVQ7XHJcbiAgLyoq5piv5ZCm5bGV56S65pe26Ze077yM6buY6K6k5LiN5bGV56S6ICovXHJcbiAgQElucHV0KCkgaXNTaG93VGltZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKuaYvuekuuWcqGZvb3RlcuW3puS+p+eahOiHquWumuS5ieaXtumXtOagh+etvuaVsOe7hO+8jOWmguKAnOaYqOWkqeKAneetiSAqL1xyXG4gIEBJbnB1dCgpIGZvb3Rlckl0ZW1zOiBEYXRlUGlja2VyRm9vdGVySXRlbVtdID0gW107XHJcbiAgLyoq5b2T5Li6ZGF0ZXRpbWUtcGlja2Vy5pe277yM5bqV6YOo6Z2i5p2/5pyA5Y+z5L6n5bGV56S655qE56Gu6K6k5oyJ6ZKu5ZCN56ewICovXHJcbiAgQElucHV0KCkgY29uZmlybUJ1dHRvblRleHQ6IHN0cmluZyA9ICfnoa7orqQnO1xyXG5cclxuICBAT3V0cHV0KCkgb25EYXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdkYXRlUGlja2VySW5wdXQnKSBkYXRlUGlja2VySW5wdXQ6IE5wSW5wdXQ7XHJcbiAgZGF0ZVBpY2tlclBvcHVwUmVmOiBDb21wb25lbnRSZWY8TnBEYXRlUGlja2VyUG9wdXA+O1xyXG5cclxuICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XHJcbiAgaXNIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGVtaXRDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcblxyXG4gIC8qKuaXpeacn+i+k+WFpeahhuaWh+acrOWAvO+8jOavj+W9k3RoaXMuZGF0ZeaUueWPmOaXtuatpOWAvOS8muWQjOatpeaUueWPmCovXHJcbiAgdmFsdWU6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlUGlja2VyU2VydmljZTogTnBEYXRlUGlja2VyU2VydmljZSwgcHJpdmF0ZSBjZGY6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldE92ZXJsYXlSZWYodGhpcy5kYXRlUGlja2VySW5wdXQubnBJbnB1dCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTaG93VGltZSkge1xyXG4gICAgICB0aGlzLmZvcm1hdCA9IERBVEVfVElNRV9GT1JNQVQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7IH1cclxuXHJcbiAgb25Ub2dnbGVEYXRlUGlja2VyUG9wdXAoKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpIHtcclxuICAgICAgdGhpcy5jbG9zZVBvcHVwKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGVQaWNrZXJQb3B1cFJlZiA9IHRoaXMub3ZlcmxheVJlZi5hdHRhY2gobmV3IENvbXBvbmVudFBvcnRhbChOcERhdGVQaWNrZXJQb3B1cCkpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyUG9wdXBSZWYuaW5zdGFuY2UuZGF0ZSA9IG1vbWVudCh0aGlzLmRhdGUpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyUG9wdXBSZWYuaW5zdGFuY2UuZGF0ZVBpY2tlclR5cGUgPSB0aGlzLmlzU2hvd1RpbWUgPyAnZGF0ZXRpbWUtcGlja2VyJyA6ICdkYXRlLXBpY2tlcic7XHJcbiAgICB0aGlzLmRhdGVQaWNrZXJQb3B1cFJlZi5pbnN0YW5jZS5mb290ZXJJdGVtcyA9IHRoaXMuZm9vdGVySXRlbXM7XHJcbiAgICB0aGlzLmRhdGVQaWNrZXJQb3B1cFJlZi5pbnN0YW5jZS5pc1Nob3dUaW1lID0gdGhpcy5pc1Nob3dUaW1lO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyUG9wdXBSZWYuaW5zdGFuY2UuY29uZmlybUJ1dHRvblRleHQgPSB0aGlzLmNvbmZpcm1CdXR0b25UZXh0O1xyXG4gICAgdGhpcy5zdWJzY3JpYmVOb3RpZnlFdmVudHMoKTtcclxuXHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2xvc2VQb3B1cCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoZGF0YTogeyB2YWx1ZTogYW55LCBldmVudDogYW55IH0pIHtcclxuICAgIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlzVmFsaWQoZGF0YS52YWx1ZSkpIHtcclxuICAgICAgdGhpcy5kYXRlID0gbW9tZW50KGRhdGEudmFsdWUsIHRoaXMuZm9ybWF0KS5jbG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g5aaC5p6c6L6T5YWl5pel5pyf5LiN5ZCI5rOV77yM6buY6K6k5b2T5YmN5pe26Ze0XHJcbiAgICAgIHRoaXMuZGF0ZSA9IG1vbWVudCgpLmNsb25lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zeW5jVmFsdWUoKTtcclxuICAgIHRoaXMuZW1pdENoYW5nZSh0aGlzLmRhdGUpO1xyXG4gICAgdGhpcy5vbkRhdGVDaGFuZ2VkLmVtaXQodGhpcy5kYXRlKTtcclxuICB9XHJcblxyXG4gIG9uQ2xlYXIoKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGUgPSBudWxsO1xyXG4gICAgdGhpcy5zeW5jVmFsdWUoKTtcclxuICAgIHRoaXMuZW1pdENoYW5nZSh0aGlzLmRhdGUpO1xyXG4gICAgdGhpcy5vbkRhdGVDaGFuZ2VkLmVtaXQodGhpcy5kYXRlKTtcclxuICB9XHJcblxyXG4gIG9uTW91c2VlbnRlcigpIHtcclxuICAgIHRoaXMuaXNIb3ZlciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlbGVhdmUoKSB7XHJcbiAgICB0aGlzLmlzSG92ZXIgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBQcml2YXRlIG1ldGhvZHNcclxuXHJcbiAgLyoq5q+P5qyhdGhpcy5kYXRl5pS55Y+Y5pe277yM6L+Z5Liq5pa55rOV6YO95b+F6aG76KaB6LCD55SoICovXHJcbiAgcHJpdmF0ZSBzeW5jVmFsdWUoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRlICYmIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaXNWYWxpZCh0aGlzLmRhdGUpKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBtb21lbnQodGhpcy5kYXRlLCB0aGlzLmZvcm1hdCkuZm9ybWF0KHRoaXMuZm9ybWF0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvc2VQb3B1cCgpIHtcclxuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSkge1xyXG4gICAgICB0aGlzLm92ZXJsYXlSZWYuZGV0YWNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmliZU5vdGlmeUV2ZW50cygpIHtcclxuICAgIHRoaXMuZGF0ZVBpY2tlclBvcHVwUmVmLmluc3RhbmNlLm9uRGF5Q2xpY2tlZC5zdWJzY3JpYmUoKHJlczogRGF5RGF0YVBlck1vbnRoKSA9PiB7XHJcbiAgICAgIHRoaXMuZW1pdERhdGFBbmRDbG9zZVBvcHVwKHJlcy5kYXRlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGF0ZVBpY2tlclBvcHVwUmVmLmluc3RhbmNlLm9uSXRlbUxhYmVsQ2xpY2tlZC5zdWJzY3JpYmUoKHJlczogRGF0ZVBpY2tlckZvb3Rlckl0ZW0pID0+IHtcclxuICAgICAgaWYgKHJlcy52YWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0RGF0YUFuZENsb3NlUG9wdXAocmVzLnZhbHVlKCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZW1pdERhdGFBbmRDbG9zZVBvcHVwKG1vbWVudChyZXMudmFsdWUpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jbG9zZVBvcHVwKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1Nob3dUaW1lKSB7XHJcbiAgICAgIHRoaXMuZGF0ZVBpY2tlclBvcHVwUmVmLmluc3RhbmNlLm9uVGltZUNsaWNrZWQuc3Vic2NyaWJlKChyZXM6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCBkYXRlID0gbW9tZW50KG1vbWVudCh0aGlzLmRhdGUpLmZvcm1hdChEQVRFX0ZPUk1BVCkgKyAnICcgKyByZXMpO1xyXG4gICAgICAgIHRoaXMuZW1pdERhdGFBbmRDbG9zZVBvcHVwKGRhdGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuZGF0ZVBpY2tlclBvcHVwUmVmLmluc3RhbmNlLm9uQ29uZmlybUNsaWNrZWQuc3Vic2NyaWJlKChyZXM6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCBkYXRlID0gbW9tZW50KG1vbWVudCh0aGlzLmRhdGUpLmZvcm1hdChEQVRFX0ZPUk1BVCkgKyAnICcgKyByZXMpO1xyXG4gICAgICAgIHRoaXMuZW1pdERhdGFBbmRDbG9zZVBvcHVwKGRhdGUpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VQb3B1cCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdERhdGFBbmRDbG9zZVBvcHVwKGRhdGU6IG1vbWVudF8uTW9tZW50KSB7XHJcbiAgICB0aGlzLmRhdGUgPSBkYXRlO1xyXG4gICAgdGhpcy5zeW5jVmFsdWUoKTtcclxuICAgIHRoaXMuZW1pdENoYW5nZShtb21lbnQodGhpcy5kYXRlKSk7XHJcbiAgICB0aGlzLm9uRGF0ZUNoYW5nZWQuZW1pdChtb21lbnQodGhpcy5kYXRlKSk7XHJcbiAgICB0aGlzLmRhdGVQaWNrZXJJbnB1dC5mb2N1cygpO1xyXG4gICAgaWYgKCF0aGlzLmlzU2hvd1RpbWUpIHtcclxuICAgICAgdGhpcy5jbG9zZVBvcHVwKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSW1wbGVtZW50IGZvciBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0ZSA9IG9iajtcclxuICAgIHRoaXMuc3luY1ZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuZW1pdENoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQgeyB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn0iXX0=