dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
265 lines • 24.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { formatDate } from '@angular/common';
import { Component, HostBinding, HostListener } from '@angular/core';
import { CalendarDateFormatter, CalendarView } from 'angular-calendar';
import { IndexService } from '../index.service';
var CustomDateFormatter = /** @class */ (function (_super) {
tslib_1.__extends(CustomDateFormatter, _super);
function CustomDateFormatter() {
return _super !== null && _super.apply(this, arguments) || this;
}
/**
* @param {?} __0
* @return {?}
*/
CustomDateFormatter.prototype.monthViewColumnHeader = /**
* @param {?} __0
* @return {?}
*/
function (_a) {
var date = _a.date, locale = _a.locale;
// console.log(formatDate(date, 'EEEEE', locale));
// switch (date.getDay()) {
// case 0:
// return 'S';
// break;
// case 1:
// return 'M';
// break;
// case 2:
// return 'T';
// break;
// case 3:
// return 'W';
// break;
// case 4:
// return 'T';
// break;
// case 5:
// return 'F';
// break;
// case 6:
// return 'S';
// break;
// }
return formatDate(date, 'EEEEE', locale); // use short week days
};
return CustomDateFormatter;
}(CalendarDateFormatter));
export { CustomDateFormatter };
var CalendarComponent = /** @class */ (function () {
function CalendarComponent(svr) {
var _this = this;
this.svr = svr;
this.hostClass = true;
this.navName = 'calendar';
this.view = CalendarView.Month;
this.viewDate = new Date();
this.isEdit = false;
this.activeDayIsOpen = true;
this.showDayHint = false;
this.navSize = this.svr.userSetting.Cards.find((/**
* @param {?} x
* @return {?}
*/
function (x) { return x.Type === _this.navName; })).Size;
// console.log(this.navSize);
}
/**
* @return {?}
*/
CalendarComponent.prototype.closeShowDayHint = /**
* @return {?}
*/
function () {
this.showDayHint = false;
};
Object.defineProperty(CalendarComponent.prototype, "events", {
get: /**
* @return {?}
*/
function () {
if (this.svr.userDiary) {
return this.svr.userDiary.map((/**
* @param {?} v
* @return {?}
*/
function (v) { return ({
start: new Date(v.Day),
title: v.Content
}); }));
}
return [];
},
enumerable: true,
configurable: true
});
/**
* @param {?} action
* @param {?} event
* @return {?}
*/
CalendarComponent.prototype.handleEvent = /**
* @param {?} action
* @param {?} event
* @return {?}
*/
function (action, event) {
// 111;
console.log(action, event);
};
/**
* @return {?}
*/
CalendarComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.svr.initCalendar();
};
// ↓单击日期时
// ↓单击日期时
/**
* @param {?} event
* @return {?}
*/
CalendarComponent.prototype.dayClick =
// ↓单击日期时
/**
* @param {?} event
* @return {?}
*/
function (event) {
// console.log((event.sourceEvent.target as HTMLElement).getBoundingClientRect());
this.showDay = event.day;
this.isEdit = !this.showDay.isPast && this.showDay.events.length === 0;
this.showDayHint = true; // 日期备注是否显示
// 日期备注是否显示
// ↓ 获取备注信息栏的坐标(即 点击元素在屏幕中的位置)
/** @type {?} */
var posCircle = ((/** @type {?} */ (event.sourceEvent.target))).getBoundingClientRect();
/** @type {?} */
var distanceWidth = posCircle.width;
/** @type {?} */
var distanceRight = posCircle.right;
// 如果右侧距离不够,则往选择左侧显示
if (window.innerWidth - distanceRight < 320) {
this.disX = posCircle.left - 320 + 32;
}
else {
this.disX = posCircle.left + distanceWidth - 32;
}
this.disY = posCircle.bottom;
if (event.day.events && event.day.events.length > 0) {
this.editText = event.day.events[0].title;
}
else {
this.editText = '';
}
// console.log((this.innerWidth = window.innerWidth));
// console.log('showDay:', this.showDay);
// console.log('---');
// console.log('showDay:', this.showDay.isPast);
};
/**
* @return {?}
*/
CalendarComponent.prototype.editOk = /**
* @return {?}
*/
function () {
var _this = this;
this.svr.updateUserDiary(this.showDay.date, this.editText).subscribe((/**
* @return {?}
*/
function () {
_this.showDayHint = false;
}));
};
/**
* @return {?}
*/
CalendarComponent.prototype.editCancel = /**
* @return {?}
*/
function () {
this.editText === '' ? (this.showDayHint = false) : (this.isEdit = false);
};
/**
* @return {?}
*/
CalendarComponent.prototype.removeEvents = /**
* @return {?}
*/
function () {
var _this = this;
this.svr.removeUserDiary(this.showDay.date).subscribe((/**
* @return {?}
*/
function () {
_this.showDayHint = false;
}));
};
CalendarComponent.decorators = [
{ type: Component, args: [{
selector: 'common-calendar',
template: "<div class=\"calendar-main mat-elevation-z2\">\r\n\t<div class=\"main-title\">\r\n\t\t<div class=\"title-left\">\r\n\t\t\t<mat-icon svgIcon=\"date_range\"></mat-icon>\r\n\t\t\t<span>\u65E5\u7A0B\u5B89\u6392</span>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"title-right\">\r\n\t\t\t<common-more-vert [typeName]=\"navName\" [theNavSize]=\"navSize\">\r\n\t\t\t</common-more-vert>\r\n\t\t</div>\r\n\t</div>\r\n\t<div class=\"cal-title\">\r\n\t\t<button mat-button color=\"primary\" class=\"btn btn-primary\"\r\n\t\t\tmwlCalendarPreviousView [view]=\"view\" [(viewDate)]=\"viewDate\">\r\n\t\t\t<mat-icon svgIcon=\"keyboard_arrow_left\"></mat-icon>\r\n\t\t</button>\r\n\t\t<div class=\"title-text\">\r\n\t\t\t{{ this.viewDate|date:'yyyy\u5E74MM\u6708'}}\r\n\t\t\t<!-- {{ viewDate | calendarDate:(view + 'ViewTitle'):'en' }} -->\r\n\t\t</div>\r\n\t\t<button mat-button color=\"primary\" class=\"btn btn-primary\"\r\n\t\t\tmwlCalendarNextView [view]=\"view\" [(viewDate)]=\"viewDate\">\r\n\t\t\t<mat-icon svgIcon=\"keyboard_arrow_right\"></mat-icon>\r\n\t\t</button>\r\n\t</div>\r\n\t<div class=\"dateCal\">\r\n\t\t<mwl-calendar-month-view [viewDate]=\"viewDate\" [events]=\"events\"\r\n\t\t\t[cellTemplate]=\"customCellTemplate\" (dayClicked)=\"dayClick($event)\">\r\n\t\t</mwl-calendar-month-view>\r\n\t</div>\r\n\t<ng-template #customCellTemplate let-day=\"day\" let-locale=\"locale\">\r\n\t\t<div class=\"per-day\">\r\n\t\t\t<div class=\"per-day-cricle\"\r\n\t\t\t\t[ngClass]=\"{'active':showDay?.date?.getTime() === day.date.getTime()}\">\r\n\t\t\t\t{{ day.date | calendarDate:'monthViewDayNumber':locale }}\r\n\t\t\t\t<mat-icon class=\"icon-circle\" svgIcon=\"fiber_manual_record\"\r\n\t\t\t\t\t*ngIf=\"day.badgeTotal>0\"></mat-icon>\r\n\t\t\t\t<!-- \u7B49\u4F1A\u63D2\u5165 -->\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t</ng-template>\r\n\r\n\r\n\t<div class=\"show-day mat-elevation-z2\"\r\n\t\t[ngStyle]=\"{'left.px': disX, 'top.px': disY}\" *ngIf=\"showDayHint\"\r\n\t\t(click)=\"$event.stopPropagation()\">\r\n\t\t<div *ngIf=\"isEdit;else readonly\" class=\"is-edit\">\r\n\t\t\t<div class=\"edit-title\">\r\n\t\t\t\t<b class=\"edit-left\">\r\n\t\t\t\t\t{{showDay.date|date:'yyyy.MM.dd'}}\r\n\t\t\t\t</b>\r\n\t\t\t\t<div class=\"edit-right\">\r\n\t\t\t\t\t<button mat-button>\r\n\t\t\t\t\t\t<mat-icon svgIcon=\"clear\" (click)=\"editCancel()\">\r\n\t\t\t\t\t\t</mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button color=\"primary\" mat-button>\r\n\t\t\t\t\t\t<mat-icon svgIcon=\"check\" (click)=\"editOk()\"></mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<textarea class=\"area\" matInput [(ngModel)]=\"editText\"></textarea>\r\n\t\t</div>\r\n\t\t<ng-template #readonly>\r\n\t\t\t<div class=\"is-read-only\">\r\n\t\t\t\t<div class=\"edit-title\">\r\n\t\t\t\t\t<b class=\"read-only-left\">\r\n\t\t\t\t\t\t{{showDay.date|date:'yyyy.MM.dd'}}\r\n\t\t\t\t\t</b>\r\n\t\t\t\t\t<div class=\"read-only-right\">\r\n\t\t\t\t\t\t<button mat-button (click)=\"removeEvents()\">\r\n\t\t\t\t\t\t\t<mat-icon svgIcon=\"delete_outline\"></mat-icon>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<button color=\"primary\" [disabled]=\"showDay.isPast\"\r\n\t\t\t\t\t\t\tmat-button (click)=\"isEdit=true\">\r\n\t\t\t\t\t\t\t<mat-icon svgIcon=\"create\"></mat-icon>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<button mat-button (click)=\"showDayHint=false\">\r\n\t\t\t\t\t\t\t<mat-icon svgIcon=\"cancel\"></mat-icon>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"area\">{{showDay?.events[0]?.title}}</div>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t</div>\r\n\r\n\r\n</div>",
providers: [
{
provide: CalendarDateFormatter,
useClass: CustomDateFormatter
}
],
styles: [".calendar-main{width:100%;height:100%;box-sizing:border-box;padding:8px;border-radius:4px}.main-title{display:flex;justify-content:space-between;align-items:center;width:100%;height:24px;box-sizing:border-box;margin-bottom:4px;color:#72aac9}.main-title .title-left,.main-title .title-right{align-items:center}.main-title .title-left{display:flex;align-items:center}.main-title .title-left span{margin-left:8px}.main-title .title-right{display:none}.calendar-main:hover .title-right{display:flex}.cal-title{display:flex;justify-content:space-between;width:100%;height:34px;line-height:34px;box-sizing:border-box}.cal-title .btn{display:flex;align-items:center;height:34px;line-height:34px}.dateCal{width:100%;height:195px;box-sizing:border-box;padding-left:8px;padding-right:8px;font-size:12px;overflow:auto}.per-day{position:relative;display:flex;justify-content:center;height:30px;line-height:30px;cursor:pointer}.per-day-cricle{position:relative;width:100%;max-width:30px;min-width:22px;height:30px;line-height:30px;box-sizing:border-box;border-radius:17px}.icon-circle{position:absolute;right:0;top:0;margin-top:-12px;width:8px;height:8px}.show-day{position:absolute;width:320px;height:184px;box-sizing:border-box;padding:0 8px 8px 12px;border-radius:4px;z-index:999}.active .show-day{display:block}.edit-title{display:flex;justify-content:space-between;align-items:center;flex-wrap:nowrap;width:100%;height:40px;font-size:18px}.edit-title button{width:40px;height:40px}.area{width:100%;height:136px;box-sizing:border-box}"]
}] }
];
/** @nocollapse */
CalendarComponent.ctorParameters = function () { return [
{ type: IndexService }
]; };
CalendarComponent.propDecorators = {
hostClass: [{ type: HostBinding, args: ['class.c-index-calendar',] }],
closeShowDayHint: [{ type: HostListener, args: ['document:click',] }]
};
return CalendarComponent;
}());
export { CalendarComponent };
if (false) {
/** @type {?} */
CalendarComponent.prototype.hostClass;
/** @type {?} */
CalendarComponent.prototype.navName;
/** @type {?} */
CalendarComponent.prototype.navSize;
/** @type {?} */
CalendarComponent.prototype.view;
/** @type {?} */
CalendarComponent.prototype.viewDate;
/** @type {?} */
CalendarComponent.prototype.innerWidth;
/** @type {?} */
CalendarComponent.prototype.modalData;
/** @type {?} */
CalendarComponent.prototype.showDay;
/** @type {?} */
CalendarComponent.prototype.isEdit;
/** @type {?} */
CalendarComponent.prototype.activeDayIsOpen;
/** @type {?} */
CalendarComponent.prototype.editText;
/** @type {?} */
CalendarComponent.prototype.disX;
/** @type {?} */
CalendarComponent.prototype.disY;
/** @type {?} */
CalendarComponent.prototype.showDayHint;
/** @type {?} */
CalendarComponent.prototype.isEventsEmpty;
/** @type {?} */
CalendarComponent.prototype.svr;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2luZGV4L2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFpQixZQUFZLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFFM0csT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLGtCQUFrQixDQUFDO0FBRTFEO0lBQXlDLCtDQUFxQjtJQUE5RDs7SUE0QkEsQ0FBQzs7Ozs7SUEzQk8sbURBQXFCOzs7O0lBQTVCLFVBQTZCLEVBQXFDO1lBQW5DLGNBQUksRUFBRSxrQkFBTTtRQUMxQyxrREFBa0Q7UUFDbEQsMkJBQTJCO1FBQzNCLFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsV0FBVztRQUNYLFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsV0FBVztRQUNYLFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsV0FBVztRQUNYLFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsV0FBVztRQUNYLFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsV0FBVztRQUNYLFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsV0FBVztRQUNYLFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsV0FBVztRQUNYLElBQUk7UUFDSixPQUFPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsc0JBQXNCO0lBQ2pFLENBQUM7SUFDRiwwQkFBQztBQUFELENBQUMsQUE1QkQsQ0FBeUMscUJBQXFCLEdBNEI3RDs7QUFDRDtJQWlEQywyQkFBbUIsR0FBaUI7UUFBcEMsaUJBR0M7UUFIa0IsUUFB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d0JBQUM7Q0FBQSxBQXZHRCxJQXVHQztTQTVGWSxpQkFBaUI7OztJQUM3QixzQ0FBd0Q7O0lBQ3hELG9DQUFxQjs7SUFDckIsb0NBQWtCOztJQUVsQixpQ0FBd0M7O0lBQ3hDLHFDQUFzQjs7SUFFdEIsdUNBQXVCOztJQUN2QixzQ0FHRTs7SUFFRixvQ0FBMkI7O0lBQzNCLG1DQUFlOztJQUNmLDRDQUF1Qjs7SUFDdkIscUNBQWlCOztJQUNqQixpQ0FBYTs7SUFDYixpQ0FBYTs7SUFDYix3Q0FBb0I7O0lBRXBCLDBDQUF1Qjs7SUFnQlgsZ0NBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENhbGVuZGFyRGF0ZUZvcm1hdHRlciwgQ2FsZW5kYXJFdmVudCwgQ2FsZW5kYXJWaWV3LCBEYXRlRm9ybWF0dGVyUGFyYW1zIH0gZnJvbSAnYW5ndWxhci1jYWxlbmRhcic7XHJcbmltcG9ydCB7IE1vbnRoVmlld0RheSB9IGZyb20gJ2NhbGVuZGFyLXV0aWxzJztcclxuaW1wb3J0IHsgSW5kZXhTZXJ2aWNlLCBDYXJkU2l6ZSB9IGZyb20gJy4uL2luZGV4LnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGVGb3JtYXR0ZXIgZXh0ZW5kcyBDYWxlbmRhckRhdGVGb3JtYXR0ZXIge1xyXG5cdHB1YmxpYyBtb250aFZpZXdDb2x1bW5IZWFkZXIoeyBkYXRlLCBsb2NhbGUgfTogRGF0ZUZvcm1hdHRlclBhcmFtcyk6IHN0cmluZyB7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhmb3JtYXREYXRlKGRhdGUsICdFRUVFRScsIGxvY2FsZSkpO1xyXG5cdFx0Ly8gc3dpdGNoIChkYXRlLmdldERheSgpKSB7XHJcblx0XHQvLyBcdGNhc2UgMDpcclxuXHRcdC8vIFx0XHRyZXR1cm4gJ1MnO1xyXG5cdFx0Ly8gXHRcdGJyZWFrO1xyXG5cdFx0Ly8gXHRjYXNlIDE6XHJcblx0XHQvLyBcdFx0cmV0dXJuICdNJztcclxuXHRcdC8vIFx0XHRicmVhaztcclxuXHRcdC8vIFx0Y2FzZSAyOlxyXG5cdFx0Ly8gXHRcdHJldHVybiAnVCc7XHJcblx0XHQvLyBcdFx0YnJlYWs7XHJcblx0XHQvLyBcdGNhc2UgMzpcclxuXHRcdC8vIFx0XHRyZXR1cm4gJ1cnO1xyXG5cdFx0Ly8gXHRcdGJyZWFrO1xyXG5cdFx0Ly8gXHRjYXNlIDQ6XHJcblx0XHQvLyBcdFx0cmV0dXJuICdUJztcclxuXHRcdC8vIFx0XHRicmVhaztcclxuXHRcdC8vIFx0Y2FzZSA1OlxyXG5cdFx0Ly8gXHRcdHJldHVybiAnRic7XHJcblx0XHQvLyBcdFx0YnJlYWs7XHJcblx0XHQvLyBcdGNhc2UgNjpcclxuXHRcdC8vIFx0XHRyZXR1cm4gJ1MnO1xyXG5cdFx0Ly8gXHRcdGJyZWFrO1xyXG5cdFx0Ly8gfVxyXG5cdFx0cmV0dXJuIGZvcm1hdERhdGUoZGF0ZSwgJ0VFRUVFJywgbG9jYWxlKTsgLy8gdXNlIHNob3J0IHdlZWsgZGF5c1xyXG5cdH1cclxufVxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2NvbW1vbi1jYWxlbmRhcicsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9jYWxlbmRhci5jb21wb25lbnQuc2NzcyddLFxyXG5cdHByb3ZpZGVyczogW1xyXG5cdFx0e1xyXG5cdFx0XHRwcm92aWRlOiBDYWxlbmRhckRhdGVGb3JtYXR0ZXIsXHJcblx0XHRcdHVzZUNsYXNzOiBDdXN0b21EYXRlRm9ybWF0dGVyXHJcblx0XHR9XHJcblx0XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdEBIb3N0QmluZGluZygnY2xhc3MuYy1pbmRleC1jYWxlbmRhcicpIGhvc3RDbGFzcyA9IHRydWU7XHJcblx0bmF2TmFtZSA9ICdjYWxlbmRhcic7XHJcblx0bmF2U2l6ZTogQ2FyZFNpemU7XHJcblxyXG5cdHZpZXc6IENhbGVuZGFyVmlldyA9IENhbGVuZGFyVmlldy5Nb250aDtcclxuXHR2aWV3RGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG5cdHB1YmxpYyBpbm5lcldpZHRoOiBhbnk7XHJcblx0bW9kYWxEYXRhOiB7XHJcblx0XHRhY3Rpb246IHN0cmluZztcclxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50O1xyXG5cdH07XHJcblxyXG5cdHNob3dEYXk6IE1vbnRoVmlld0RheTxhbnk+O1xyXG5cdGlzRWRpdCA9IGZhbHNlO1xyXG5cdGFjdGl2ZURheUlzT3BlbiA9IHRydWU7XHJcblx0ZWRpdFRleHQ6IHN0cmluZztcclxuXHRkaXNYOiBudW1iZXI7XHJcblx0ZGlzWTogbnVtYmVyO1xyXG5cdHNob3dEYXlIaW50ID0gZmFsc2U7XHJcblxyXG5cdGlzRXZlbnRzRW1wdHk6IGJvb2xlYW47XHJcblxyXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJylcclxuXHRjbG9zZVNob3dEYXlIaW50KCkge1xyXG5cdFx0dGhpcy5zaG93RGF5SGludCA9IGZhbHNlO1xyXG5cdH1cclxuXHRnZXQgZXZlbnRzKCk6IENhbGVuZGFyRXZlbnRbXSB7XHJcblx0XHRpZiAodGhpcy5zdnIudXNlckRpYXJ5KSB7XHJcblx0XHRcdHJldHVybiB0aGlzLnN2ci51c2VyRGlhcnkubWFwKHYgPT4gKHtcclxuXHRcdFx0XHRzdGFydDogbmV3IERhdGUodi5EYXkpLFxyXG5cdFx0XHRcdHRpdGxlOiB2LkNvbnRlbnRcclxuXHRcdFx0fSkpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIFtdO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0b3IocHVibGljIHN2cjogSW5kZXhTZXJ2aWNlKSB7XHJcblx0XHR0aGlzLm5hdlNpemUgPSB0aGlzLnN2ci51c2VyU2V0dGluZy5DYXJkcy5maW5kKHggPT4geC5UeXBlID09PSB0aGlzLm5hdk5hbWUpLlNpemU7XHJcblx0XHQvLyBjb25zb2xlLmxvZyh0aGlzLm5hdlNpemUpO1xyXG5cdH1cclxuXHRoYW5kbGVFdmVudChhY3Rpb246IHN0cmluZywgZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiB2b2lkIHtcclxuXHRcdC8vIDExMTtcclxuXHRcdGNvbnNvbGUubG9nKGFjdGlvbiwgZXZlbnQpO1xyXG5cdH1cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHRoaXMuc3ZyLmluaXRDYWxlbmRhcigpO1xyXG5cdH1cclxuXHJcblx0Ly8g4oaT5Y2V5Ye75pel5pyf5pe2XHJcblx0ZGF5Q2xpY2soZXZlbnQ6IHsgZGF5OiBNb250aFZpZXdEYXk8YW55Pjsgc291cmNlRXZlbnQ6IE1vdXNlRXZlbnQgfSkge1xyXG5cdFx0Ly8gY29uc29sZS5sb2coKGV2ZW50LnNvdXJjZUV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xyXG5cdFx0dGhpcy5zaG93RGF5ID0gZXZlbnQuZGF5O1xyXG5cdFx0dGhpcy5pc0VkaXQgPSAhdGhpcy5zaG93RGF5LmlzUGFzdCAmJiB0aGlzLnNob3dEYXkuZXZlbnRzLmxlbmd0aCA9PT0gMDtcclxuXHRcdHRoaXMuc2hvd0RheUhpbnQgPSB0cnVlOyAvLyDml6XmnJ/lpIfms6jmmK/lkKbmmL7npLpcclxuXHRcdC8vIOKGkyDojrflj5blpIfms6jkv6Hmga/moI/nmoTlnZDmoIfvvIjljbMg54K55Ye75YWD57Sg5Zyo5bGP5bmV5Lit55qE5L2N572u77yJXHJcblx0XHRjb25zdCBwb3NDaXJjbGUgPSAoZXZlbnQuc291cmNlRXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHRcdGNvbnN0IGRpc3RhbmNlV2lkdGggPSBwb3NDaXJjbGUud2lkdGg7XHJcblx0XHRjb25zdCBkaXN0YW5jZVJpZ2h0ID0gcG9zQ2lyY2xlLnJpZ2h0O1xyXG5cdFx0Ly8g5aaC5p6c5Y+z5L6n6Led56a75LiN5aSf77yM5YiZ5b6A6YCJ5oup5bem5L6n5pi+56S6XHJcblx0XHRpZiAod2luZG93LmlubmVyV2lkdGggLSBkaXN0YW5jZVJpZ2h0IDwgMzIwKSB7XHJcblx0XHRcdHRoaXMuZGlzWCA9IHBvc0NpcmNsZS5sZWZ0IC0gMzIwICsgMzI7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmRpc1ggPSBwb3NDaXJjbGUubGVmdCArIGRpc3RhbmNlV2lkdGggLSAzMjtcclxuXHRcdH1cclxuXHRcdHRoaXMuZGlzWSA9IHBvc0NpcmNsZS5ib3R0b207XHJcblxyXG5cdFx0aWYgKGV2ZW50LmRheS5ldmVudHMgJiYgZXZlbnQuZGF5LmV2ZW50cy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdHRoaXMuZWRpdFRleHQgPSBldmVudC5kYXkuZXZlbnRzWzBdLnRpdGxlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5lZGl0VGV4dCA9ICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGNvbnNvbGUubG9nKCh0aGlzLmlubmVyV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCkpO1xyXG5cdFx0Ly8gY29uc29sZS5sb2coJ3Nob3dEYXk6JywgdGhpcy5zaG93RGF5KTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKCctLS0nKTtcclxuXHRcdC8vIGNvbnNvbGUubG9nKCdzaG93RGF5OicsIHRoaXMuc2hvd0RheS5pc1Bhc3QpO1xyXG5cdH1cclxuXHRlZGl0T2soKSB7XHJcblx0XHR0aGlzLnN2ci51cGRhdGVVc2VyRGlhcnkodGhpcy5zaG93RGF5LmRhdGUsIHRoaXMuZWRpdFRleHQpLnN1YnNjcmliZSgoKSA9PiB7XHJcblx0XHRcdHRoaXMuc2hvd0RheUhpbnQgPSBmYWxzZTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRlZGl0Q2FuY2VsKCkge1xyXG5cdFx0dGhpcy5lZGl0VGV4dCA9PT0gJycgPyAodGhpcy5zaG93RGF5SGludCA9IGZhbHNlKSA6ICh0aGlzLmlzRWRpdCA9IGZhbHNlKTtcclxuXHR9XHJcblx0cmVtb3ZlRXZlbnRzKCkge1xyXG5cdFx0dGhpcy5zdnIucmVtb3ZlVXNlckRpYXJ5KHRoaXMuc2hvd0RheS5kYXRlKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHR0aGlzLnNob3dEYXlIaW50ID0gZmFsc2U7XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIl19