ngx-mat-cdk
Version:
Extra Components for Angular Material including Filters,Drag Drop File, MatSelect Mobile Version
217 lines • 29 kB
JavaScript
import { Component, ViewEncapsulation, Input, Output, EventEmitter, ElementRef, ViewChild, Directive, } from "@angular/core";
import { v4 as uuid } from "uuid";
import { Subscription } from "rxjs";
import { trigger, state, style, animate, transition, } from "@angular/animations";
import { NgxSidePanelsService } from "../ngx-side-panels.service";
export class NgxSidePanelComponent {
constructor(el, sidePanelService) {
this.el = el;
this.sidePanelService = sidePanelService;
this.hideShowState = "hide";
this.rightLabel = 0;
this.widthleft = "0px";
this.firstWidth = 180;
this.stepWidth = 60;
this.autoOverFlow = false;
this.saveConfirm = false;
this.loading = false;
this.hasLabel = true;
this.zIndex = 1;
this.zIndexForView = 2999;
this.hidden = false;
this.id = uuid();
this.title = "";
this.label = "";
this.close = new EventEmitter();
this.waiteAnimate = "translateX(-100%)";
this.isFirst = true;
this.loadingSub = new Subscription();
this._show = false;
this.showChange = new EventEmitter();
}
ngAfterViewInit() {
}
get show() {
return this._show;
}
set show(val) {
this._show = val;
this.showChange.emit(val);
if (this.show) {
setTimeout(() => {
this.hideShowState = "show";
setTimeout(() => {
this.widthleft = this.widthLeft;
}, 400);
}, 0);
}
else if (this.show === false) {
}
if (this.autoOverFlow) {
setTimeout(() => {
const html = document.documentElement;
if (html) {
if (val === true) {
html.style.overflow = "hidden";
}
else if (val === false) {
html.style.overflow = "auto";
}
}
}, 100);
}
}
ngOnInit() {
this.loadingSub = this.sidePanelService.loading.subscribe((loading) => {
if (this.isFirst) {
this.loading = loading;
}
if (this.isFirst && this.loading) {
this.isFirst = false;
}
if (!this.isFirst && !loading) {
this.loading = false;
}
});
if (this.hasLabel) {
setTimeout(() => {
const el = this.elLabel.nativeElement;
if (el) {
el.style.right = `-${el.clientWidth * 2}px`;
}
}, 0);
}
this.zIndexForView = this.sidePanelService.zIndex + this.zIndex;
}
preventFromSaveData() {
var r = confirm("شما اطلاعات جدیدی در این صفحه وارد کردهاید. اگر شما میخواهید بدون ذخیره کردن اطلاعات از این صفحه خارج شوید ، اطلاعات ورودی شما ازبین خواهد رفت");
if (r == false) {
window.event.stopPropagation();
this._show = true;
}
return !r;
}
onClose() {
if (this.saveConfirm) {
if (this.preventFromSaveData()) {
return;
}
}
this.hideShowState = "hide";
setTimeout(() => {
this.show = false;
this.close.emit();
}, 700);
}
onClickOut(e) {
e.stopPropagation();
this.hideShowState = "hide";
setTimeout(() => {
this.show = false;
this.close.emit();
}, 700);
// const el = document.getElementById("main_" + this.id);
// if (el) {
// if (!el.contains(e.target)) {
// if (this.saveConfirm) {
// if (this.preventFromSaveData()) {
// return;
// }
// }
// this.hideShowState = "hide";
// setTimeout(() => {
// this.show = false;
// this.close.emit();
// }, 700);
// }
// }
}
get getWidth() {
return `calc(${this.width} - ${this.getLeft()}px)`;
}
getLeft() {
if (this.zIndex > 4) {
return this.firstWidth + 4 * this.stepWidth;
}
return this.firstWidth + this.zIndex * this.stepWidth;
}
get widthLeft() {
const el = document.getElementById(`contianer_${this.id}`);
if (el) {
return `calc(100% - ${el.clientWidth}px)`;
}
return "";
}
ngOnDestroy() {
this.loadingSub.unsubscribe();
}
getRight(el) {
if (el)
return -(el.clientWidth * 2);
}
}
NgxSidePanelComponent.decorators = [
{ type: Component, args: [{
selector: "ngxSidePanel",
template: "<div (click)=\"$event.stopPropagation()\">\r\n <div class=\"ngx-side-panel-overlay\" [style.left]=\"!hasLabel? '0': ''\" [class.side-panel-overlay-hidden]=\"hidden\"\r\n [class.ngx-side-panel-overlay-open]=\"show\" [style.zIndex]=\"zIndexForView\">\r\n <div (click)=\"onClickOut($event)\" class=\"ngx-side-panel-right\" [style.zIndex]=\"zIndexForView\"\r\n [style.width]=\"widthleft\"></div>\r\n\r\n <div [class.side-panel-show-shadow]=\"hidden\" class=\"ngx-side-panel-container\" [style.zIndex]=\"zIndexForView + 1\"\r\n [style.width]=\"hasLabel? getWidth: width\" [@hideShow]=\"hideShowState\" [id]=\"'contianer_' + id\">\r\n <div style=\"max-height: 100%; height: 100%; position: relative;\" [id]=\"'main_' + id\">\r\n\r\n <div style=\"\r\n background: #eef2f4 !important;\r\n color: #000;\r\n font-size: 14px;\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n height: 100%;\r\n width: auto;\r\n margin: 0;\r\n padding: 0;\r\n overflow-y: scroll;\r\n direction: ltr !important;\r\n \">\r\n <div (click)=\"$event.stopPropagation(); onClose()\" class=\"ngx-side-panel-close-btn mob\" title=\"\u0628\u0633\u062A\u0646\">\r\n <div class=\"ngx-side-panel-close-btn-inner\"></div>\r\n </div>\r\n\r\n <div class=\"ngx-side-panel-wrapper\">\r\n <ng-content></ng-content>\r\n <ng-content select=\"ngx-panel-header\"></ng-content>\r\n\r\n <ng-content select=\"ngx-panel-content\"></ng-content>\r\n\r\n <ng-content select=\"ngx-panel-footer\"></ng-content>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"hasLabel\" #elLabel class=\"ngx-side-panel-label\" [class.show]=\"show\"\r\n (click)=\"$event.stopPropagation(); onClose()\">\r\n <div class=\"ngx-side-panel-close-btn\" title=\"\u0628\u0633\u062A\u0646\">\r\n <div class=\"ngx-side-panel-close-btn-inner\"></div>\r\n </div>\r\n <span class=\"ngx-side-panel-label-text\">{{ label }}</span>\r\n </div>\r\n\r\n <!-- <div\r\n class=\"ngx-ngx-side-panel-loader ngx-issue-view-loader\"\r\n [style.opacity]=\"!loading ? 0 : 1\"\r\n [style.display]=\"!loading ? 'none' : 'block'\"\r\n >\r\n <img\r\n class=\"ngx-ngx-side-panel-loader-mask left\"\r\n src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAMAAABhq6zVAAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAAAtJREFUeAFjGMQAAACcAAG25ruvAAAAAElFTkSuQmCC\"\r\n />\r\n <img\r\n class=\"ngx-ngx-side-panel-loader-mask right\"\r\n src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAMAAABhq6zVAAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAAAtJREFUeAFjGMQAAACcAAG25ruvAAAAAElFTkSuQmCC\"\r\n />\r\n </div> -->\r\n </div>\r\n </div>\r\n</div>\r\n",
animations: [
trigger("hideShow", [
state("hide", style({
transform: "translateX(-120%)",
})),
state("show", style({
transform: "translateX(0%)",
})),
transition("hide => show", animate("0.3s 0.2s linear")),
transition("show => hide", animate("0.3s 0.2s linear")),
]),
],
encapsulation: ViewEncapsulation.None,
styles: ["@keyframes animation-name{0%{transform:translateX(-100%)}50%{transform:translateX(-50%)}to{transform:translateX(0)}}.ngx-side-panel-overlay-open{display:none;pointer-events:auto}.side-panel-overlay-hidden{background-color:initial!important}.ngx-side-panel-overlay{background-color:rgba(0,0,0,.4);bottom:0;display:none;left:0;overflow:hidden;position:fixed;right:0;top:0;transform:translateZ(0);z-index:3000}.ngx-side-panel-overlay-open{display:block!important}.ngx-side-panel-container{background:#ebf1f4;bottom:0;display:block;left:0;max-width:calc(100% - 80px);position:absolute;top:0;transform:translate(-100%);width:calc(100% - 300px);z-index:3001}.ngx-side-panel-label{background:rgba(47,198,246,.95);border-bottom-right-radius:19px;border-top-right-radius:19px;box-shadow:inset -6px 0 8px -10px rgba(0,0,0,.95);cursor:pointer;display:flex;height:38px;min-width:30px;overflow:hidden;padding-left:5px;position:absolute;right:-144px;top:21px;transform:translateX(-100%);transition:top .3s;white-space:nowrap;z-index:1}.ngx-side-panel-label-text{color:#fff;display:inline-block;flex-basis:0;flex-grow:1;flex-shrink:1;font-family:OpenSans-Bold,Helvetica,Arial,sans-serif;font-size:11px;height:100%;line-height:38px;margin-left:8px;margin-right:2px;overflow:hidden;text-overflow:ellipsis;text-transform:uppercase;vertical-align:top}.ngx-side-panel-close-btn{border-radius:19px;display:inline-block;height:38px;transition:all .2s;vertical-align:top;width:34px}.ngx-side-panel-close-btn-inner{background-color:initial;border:2px solid transparent;border-radius:50%;height:22px;margin-right:7px;margin-top:6px;opacity:.75;position:relative;transition:all .3s ease;width:22px}.ngx-side-panel-close-btn.mob{cursor:pointer;display:none;left:20px;position:absolute;top:12px}.ngx-side-panel-close-btn-inner:before{transform:translateX(-50%) translateY(-50%) rotate(-45deg)}.ngx-side-panel-close-btn-inner:after,.ngx-side-panel-close-btn-inner:before{background-color:#fff;content:\"\";height:2px;left:50%;position:absolute;top:50%;width:14px}.mob .ngx-side-panel-close-btn-inner{background-color:#757575;left:12px;position:absolute}.ngx-side-panel-close-btn-inner:after{transform:translateX(-50%) translateY(-50%) rotate(45deg)}.ngx-side-panel-iframe{height:100%;overflow:auto;position:relative;width:100%;z-index:3000}.ngx-side-panel-loader{background-color:#fff;bottom:0;display:block;left:0;opacity:1;position:absolute;right:0;top:0;z-index:3200}.ngx-side-panel-label:hover .ngx-side-panel-close-btn-inner{border:2px solid hsla(0,0%,100%,.4);opacity:1}@keyframes mymove{0%{background-color:initial}to{background-color:rgba(0,0,0,.4)}}.ngx-side-panel-right{bottom:0;position:absolute;right:0;top:0;z-index:2999}.side-panel-show-shadow.ngx-side-panel-container{box-shadow:-5px 0 22px -5px rgba(0,0,0,.3)}ngxSidePanel ngx-panel-content{background-color:#fff;margin:0 21px 83px;padding:15px 15px 20px;position:relative}ngxSidePanel ngx-panel-header{display:block;margin:0;padding:21px 25px 21px 5px}ngxSidePanel ngx-panel-footer{align-items:center;background:#fff;bottom:0;box-shadow:0 -2px 4px 0 #c6c9cb;display:flex;grid-gap:20px;height:60px;overflow:hidden;padding:15px;position:fixed;width:100%;z-index:99}.ngx-side-panel-wrapper{background:#eef2f4!important;height:auto;overflow:hidden}.ngx-side-panel-wrapper *{box-sizing:border-box}.ngx-side-panel-wrapper>:last-child{display:flex;flex-direction:column;height:100%;overflow:hidden}html[dir=rtl] .ngx-side-panel-wrapper{direction:rtl!important}@media (max-width:600px){.ngx-side-panel-container{max-width:100%!important;width:100%!important}.ngx-side-panel-label{display:none!important}.ngx-side-panel-close-btn.mob{display:block}}"]
},] }
];
NgxSidePanelComponent.ctorParameters = () => [
{ type: ElementRef },
{ type: NgxSidePanelsService }
];
NgxSidePanelComponent.propDecorators = {
elLabel: [{ type: ViewChild, args: ["elLabel",] }],
elWidth: [{ type: ViewChild, args: ["elWidth",] }],
firstWidth: [{ type: Input }],
stepWidth: [{ type: Input }],
autoOverFlow: [{ type: Input }],
saveConfirm: [{ type: Input }],
loading: [{ type: Input }],
hasLabel: [{ type: Input }],
zIndex: [{ type: Input }],
hidden: [{ type: Input }],
id: [{ type: Input }],
width: [{ type: Input }],
title: [{ type: Input }],
label: [{ type: Input }],
close: [{ type: Output }],
show: [{ type: Input }],
showChange: [{ type: Output }]
};
export class NgxPanelHeader {
}
NgxPanelHeader.decorators = [
{ type: Directive, args: [{
selector: 'ngx-panel-header'
},] }
];
export class NgxPanelContent {
}
NgxPanelContent.decorators = [
{ type: Directive, args: [{
selector: 'ngx-panel-content'
},] }
];
export class NgxPanelFooter {
}
NgxPanelFooter.decorators = [
{ type: Directive, args: [{
selector: 'ngx-panel-footer'
},] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNpZGUtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL0FsaXJlemEgTW9oYW1tYWRpL3NvdXJjZS9yZXBvcy9NeUxpYnJhcnkvQW5ndWxhci5MaWJyYXJ5L2xpYnMvcHJvamVjdHMvbmd4LW1hdC1jZGsvc3JjLyIsInNvdXJjZXMiOlsibGliL25neC1zaWRlLXBhbmVscy9uZ3gtc2lkZS1wYW5lbC9uZ3gtc2lkZS1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFFakIsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osVUFBVSxFQUdWLFNBQVMsRUFBRSxTQUFTLEdBQ3JCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxFQUFFLElBQUksSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLE9BQU8sRUFDUCxVQUFVLEdBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQTBCaEUsTUFBTSxPQUFPLHFCQUFxQjtJQUVoQyxZQUNVLEVBQWMsRUFDZCxnQkFBc0M7UUFEdEMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBc0I7UUFNaEQsa0JBQWEsR0FBRyxNQUFNLENBQUM7UUFDdkIsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUtmLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDVCxlQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixZQUFPLEdB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QUFtQjt5QkFDL0IsQ0FBQyxDQUNIO3dCQUNELEtBQUssQ0FDSCxNQUFNLEVBQ04sS0FBSyxDQUFDOzRCQUNKLFNBQVMsRUFBRSxnQkFBZ0I7eUJBQzVCLENBQUMsQ0FDSDt3QkFDRCxVQUFVLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3dCQUN2RCxVQUFVLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3FCQUN4RCxDQUFDO2lCQUNIO2dCQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOzthQUN0Qzs7O1lBeENDLFVBQVU7WUFlSixvQkFBb0I7OztzQkFrQ3pCLFNBQVMsU0FBQyxTQUFTO3NCQUNuQixTQUFTLFNBQUMsU0FBUzt5QkFRbkIsS0FBSzt3QkFDTCxLQUFLOzJCQUNMLEtBQUs7MEJBQ0wsS0FBSztzQkFDTCxLQUFLO3VCQUNMLEtBQUs7cUJBQ0wsS0FBSztxQkFFTCxLQUFLO2lCQUNMLEtBQUs7b0JBQ0wsS0FBSztvQkFDTCxLQUFLO29CQUNMLEtBQUs7b0JBQ0wsTUFBTTttQkFTTixLQUFLO3lCQTBCTCxNQUFNOztBQXlHVCxNQUFNLE9BQU8sY0FBYzs7O1lBSDFCLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsa0JBQWtCO2FBQzdCOztBQVFELE1BQU0sT0FBTyxlQUFlOzs7WUFIM0IsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7YUFDOUI7O0FBUUQsTUFBTSxPQUFPLGNBQWM7OztZQUgxQixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjthQUM3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgT25EZXN0cm95LFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgVmlld0NoaWxkLCBEaXJlY3RpdmUsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7djQgYXMgdXVpZH0gZnJvbSBcInV1aWRcIjtcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7XHJcbiAgdHJpZ2dlcixcclxuICBzdGF0ZSxcclxuICBzdHlsZSxcclxuICBhbmltYXRlLFxyXG4gIHRyYW5zaXRpb24sXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2FuaW1hdGlvbnNcIjtcclxuaW1wb3J0IHtOZ3hTaWRlUGFuZWxzU2VydmljZX0gZnJvbSBcIi4uL25neC1zaWRlLXBhbmVscy5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJuZ3hTaWRlUGFuZWxcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL25neC1zaWRlLXBhbmVsLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL25neC1zaWRlLXBhbmVsLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoXCJoaWRlU2hvd1wiLCBbXHJcbiAgICAgIHN0YXRlKFxyXG4gICAgICAgIFwiaGlkZVwiLFxyXG4gICAgICAgIHN0eWxlKHtcclxuICAgICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKC0xMjAlKVwiLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICksXHJcbiAgICAgIHN0YXRlKFxyXG4gICAgICAgIFwic2hvd1wiLFxyXG4gICAgICAgIHN0eWxlKHtcclxuICAgICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDAlKVwiLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICksXHJcbiAgICAgIHRyYW5zaXRpb24oXCJoaWRlID0+IHNob3dcIiwgYW5pbWF0ZShcIjAuM3MgMC4ycyBsaW5lYXJcIikpLFxyXG4gICAgICB0cmFuc2l0aW9uKFwic2hvdyA9PiBoaWRlXCIsIGFuaW1hdGUoXCIwLjNzIDAuMnMgbGluZWFyXCIpKSxcclxuICAgIF0pLFxyXG4gIF0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5neFNpZGVQYW5lbENvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgc2lkZVBhbmVsU2VydmljZTogTmd4U2lkZVBhbmVsc1NlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJlbExhYmVsXCIpIGVsTGFiZWw6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChcImVsV2lkdGhcIikgZWxXaWR0aDogRWxlbWVudFJlZjtcclxuICBoaWRlU2hvd1N0YXRlID0gXCJoaWRlXCI7XHJcbiAgcmlnaHRMYWJlbCA9IDA7XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHdpZHRobGVmdCA9IFwiMHB4XCI7XHJcbiAgQElucHV0KCkgZmlyc3RXaWR0aCA9IDE4MDtcclxuICBASW5wdXQoKSBzdGVwV2lkdGggPSA2MDtcclxuICBASW5wdXQoKSBhdXRvT3ZlckZsb3cgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzYXZlQ29uZmlybSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBoYXNMYWJlbCA9IHRydWU7XHJcbiAgQElucHV0KCkgekluZGV4ID0gMTtcclxuICB6SW5kZXhGb3JWaWV3ID0gMjk5OTtcclxuICBASW5wdXQoKSBoaWRkZW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpZCA9IHV1aWQoKTtcclxuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHRpdGxlID0gXCJcIjtcclxuICBASW5wdXQoKSBsYWJlbCA9IFwiXCI7XHJcbiAgQE91dHB1dCgpIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgd2FpdGVBbmltYXRlID0gXCJ0cmFuc2xhdGVYKC0xMDAlKVwiO1xyXG4gIGlzRmlyc3QgPSB0cnVlO1xyXG4gIGxvYWRpbmdTdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgcHJpdmF0ZSBfc2hvdyA9IGZhbHNlO1xyXG4gIGdldCBzaG93KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nob3c7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgc2hvdyh2YWwpIHtcclxuICAgIHRoaXMuX3Nob3cgPSB2YWw7XHJcbiAgICB0aGlzLnNob3dDaGFuZ2UuZW1pdCh2YWwpO1xyXG4gICAgaWYgKHRoaXMuc2hvdykge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmhpZGVTaG93U3RhdGUgPSBcInNob3dcIjtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMud2lkdGhsZWZ0ID0gdGhpcy53aWR0aExlZnQ7XHJcbiAgICAgICAgfSwgNDAwKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2hvdyA9PT0gZmFsc2UpIHtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmF1dG9PdmVyRmxvdykge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgICAgIGlmIChodG1sKSB7XHJcbiAgICAgICAgICBpZiAodmFsID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGh0bWwuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh2YWwgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGh0bWwuc3R5bGUub3ZlcmZsb3cgPSBcImF1dG9cIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgc2hvd0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZGluZ1N1YiA9IHRoaXMuc2lkZVBhbmVsU2VydmljZS5sb2FkaW5nLnN1YnNjcmliZSgobG9hZGluZykgPT4ge1xyXG4gICAgICBpZiAodGhpcy5pc0ZpcnN0KSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gbG9hZGluZztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0ZpcnN0ICYmIHRoaXMubG9hZGluZykge1xyXG4gICAgICAgIHRoaXMuaXNGaXJzdCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5pc0ZpcnN0ICYmICFsb2FkaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuaGFzTGFiZWwpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmVsTGFiZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgIGVsLnN0eWxlLnJpZ2h0ID0gYC0ke2VsLmNsaWVudFdpZHRoICogMn1weGA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAwKTtcclxuICAgIH1cclxuICAgIHRoaXMuekluZGV4Rm9yVmlldyA9IHRoaXMuc2lkZVBhbmVsU2VydmljZS56SW5kZXggKyB0aGlzLnpJbmRleDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJldmVudEZyb21TYXZlRGF0YSgpIHtcclxuICAgIHZhciByID0gY29uZmlybShcclxuICAgICAgXCLYtNmF2Kcg2KfYt9mE2KfYudin2Kog2KzYr9uM2K/bjCDYr9ixINin24zZhiDYtdmB2K3ZhyDZiNin2LHYryDaqdix2K/Zh+KAjNin24zYry4g2Kfar9ixINi02YXYpyDZhduM4oCM4oCM2K7ZiNin2YfbjNivINio2K/ZiNmGINiw2K7bjNix2Ycg2qnYsdiv2YYg2KfYt9mE2KfYudin2Kog2KfYsiDYp9uM2YYg2LXZgdit2Ycg2K7Yp9ix2Kwg2LTZiNuM2K8g2Iwg2KfYt9mE2KfYudin2Kog2YjYsdmI2K/bjCDYtNmF2Kcg2KfYstio24zZhiDYrtmI2KfZh9ivINix2YHYqlwiXHJcbiAgICApO1xyXG4gICAgaWYgKHIgPT0gZmFsc2UpIHtcclxuICAgICAgd2luZG93LmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB0aGlzLl9zaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiAhcjtcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoKSB7XHJcbiAgICBpZiAodGhpcy5zYXZlQ29uZmlybSkge1xyXG4gICAgICBpZiAodGhpcy5wcmV2ZW50RnJvbVNhdmVEYXRhKCkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaGlkZVNob3dTdGF0ZSA9IFwiaGlkZVwiO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNsb3NlLmVtaXQoKTtcclxuICAgIH0sIDcwMCk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrT3V0KGU6IE1vdXNlRXZlbnQpIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmhpZGVTaG93U3RhdGUgPSBcImhpZGVcIjtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jbG9zZS5lbWl0KCk7XHJcbiAgICB9LCA3MDApO1xyXG5cclxuICAgIC8vIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluX1wiICsgdGhpcy5pZCk7XHJcbiAgICAvLyBpZiAoZWwpIHtcclxuICAgIC8vICAgaWYgKCFlbC5jb250YWlucyhlLnRhcmdldCkpIHtcclxuICAgIC8vICAgICBpZiAodGhpcy5zYXZlQ29uZmlybSkge1xyXG4gICAgLy8gICAgICAgaWYgKHRoaXMucHJldmVudEZyb21TYXZlRGF0YSgpKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybjtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgdGhpcy5oaWRlU2hvd1N0YXRlID0gXCJoaWRlXCI7XHJcbiAgICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgIC8vICAgICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xyXG4gICAgLy8gICAgIH0sIDcwMCk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGdldCBnZXRXaWR0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGBjYWxjKCR7dGhpcy53aWR0aH0gLSAke3RoaXMuZ2V0TGVmdCgpfXB4KWA7XHJcbiAgfVxyXG5cclxuICBnZXRMZWZ0KCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy56SW5kZXggPiA0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpcnN0V2lkdGggKyA0ICogdGhpcy5zdGVwV2lkdGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5maXJzdFdpZHRoICsgdGhpcy56SW5kZXggKiB0aGlzLnN0ZXBXaWR0aDtcclxuICB9XHJcblxyXG4gIGdldCB3aWR0aExlZnQoKSB7XHJcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjb250aWFuZXJfJHt0aGlzLmlkfWApO1xyXG4gICAgaWYgKGVsKSB7XHJcbiAgICAgIHJldHVybiBgY2FsYygxMDAlIC0gJHtlbC5jbGllbnRXaWR0aH1weClgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZGluZ1N1Yi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmlnaHQoZWw6IEhUTUxFbGVtZW50KSB7XHJcbiAgICBpZiAoZWwpIHJldHVybiAtKGVsLmNsaWVudFdpZHRoICogMik7XHJcbiAgfVxyXG59XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ25neC1wYW5lbC1oZWFkZXInXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hQYW5lbEhlYWRlciB7XHJcblxyXG59XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ25neC1wYW5lbC1jb250ZW50J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4UGFuZWxDb250ZW50IHtcclxuXHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LXBhbmVsLWZvb3RlcidcclxufSlcclxuZXhwb3J0IGNsYXNzIE5neFBhbmVsRm9vdGVyIHtcclxuXHJcbn1cclxuIl19