ng-devui
Version:
DevUI components based on Angular
201 lines • 25.8 kB
JavaScript
import { DomPortalOutlet, TemplatePortal } from '@angular/cdk/portal';
import { ApplicationRef, ComponentFactoryResolver, Directive, ElementRef, HostBinding, Injector, Input, Optional, TemplateRef, ViewContainerRef } from '@angular/core';
import { DashboardComponent } from '../dashboard.component';
import { GridStackService } from '../grid-stack.service';
import { DashboardLibraryPanelDirective } from '../widget-library/library-panel.directive';
import * as i0 from "@angular/core";
import * as i1 from "../widget-library/library-panel.directive";
export class DashboardLibraryWidgetDirective {
get gridStackService() {
return this.targetDashboard?.gridStackService;
}
constructor(el, cfr, appRef, injector, vcf, libraryPanel) {
this.el = el;
this.cfr = cfr;
this.appRef = appRef;
this.injector = injector;
this.vcf = vcf;
this.libraryPanel = libraryPanel;
this.dragMode = 'copy';
this.dragDisabled = false;
this.dragCopyStyle = false;
this.hostBinding = true;
this.hostBindingHandler = true;
this.isSetup = false;
this.notify = (event) => {
if (this.libraryPanel) {
if (event === 'dragStart') {
return (...args) => {
this.libraryPanel.dragStartHandler();
};
}
if (event === 'dragStop') {
return (...args) => {
this.libraryPanel.dragStopHandler();
};
}
}
else {
return () => { };
}
};
this.helper = (event) => {
if (this.dragMode === 'move') {
// grid stack 有高度变化的bug, 暂时就不解决了
return this.el.nativeElement;
}
if (!this.dragTemplate) {
const el = this.el.nativeElement.cloneNode(true);
el.style.zIndex = '1060';
this.copyCanvas(this.el.nativeElement, el);
if (this.dragCopyStyle) {
this.copyStyle(this.el.nativeElement, el);
}
return el;
}
else {
const el = document.createElement('div');
el.classList.add('grid-stack-item-adding-item-template');
el.style.zIndex = '1060';
if (this.width !== undefined) {
el.setAttribute('gs-w', `${this.width}`);
}
if (this.height !== undefined) {
el.setAttribute('gs-h', `${this.height}`);
}
this.setDragWidthHeight(el);
const domPortalOutlet = new DomPortalOutlet(el, this.cfr, this.appRef, this.injector);
domPortalOutlet.attachTemplatePortal(new TemplatePortal(this.dragTemplate, this.vcf, {
$implicit: this.widgetData,
width: this.width,
height: this.height,
}));
const result = el.cloneNode(true);
this.copyCanvas(el, result);
if (this.dragCopyStyle) {
this.copyStyle(el, result);
}
domPortalOutlet.detach();
domPortalOutlet.dispose();
return result;
}
};
}
ngOnChanges(changes) {
if (changes.targetDashboard) {
this.setup();
}
if (changes.dragDisabled) {
if (this.dragDisabled) {
GridStackService.disableDrag(this.el.nativeElement);
}
else {
GridStackService.enableDrag(this.el.nativeElement);
}
}
}
ngAfterViewInit() {
if (!this.isSetup) {
GridStackService.cleanDragIn(this.el.nativeElement);
this.setup();
}
}
ngOnDestroy() {
if (this.gridStackService) {
this.gridStackService.destroyDragIn(this.el.nativeElement);
}
}
setup() {
if (this.targetDashboard && !this.isSetup) {
setTimeout(() => {
if (this.gridStackService && this.gridStackService.gridStack) {
GridStackService.cleanDragIn(this.el.nativeElement);
this.gridStackService.setupDragIn(this.el.nativeElement, this, this.helper, this.notify);
if (this.dragDisabled) {
GridStackService.disableDrag(this.el.nativeElement);
}
}
});
this.isSetup = true;
}
}
copyCanvas(origin, target) {
// 拷贝canvas的内容
const originCanvasArr = origin.querySelectorAll('canvas');
const targetCanvasArr = target.querySelectorAll('canvas');
[].forEach.call(targetCanvasArr, (canvas, index) => {
canvas.getContext('2d').drawImage(originCanvasArr[index], 0, 0);
});
}
setDragWidthHeight(el) {
const columnWidth = this.targetDashboard.getCurrentColumnWidth();
const cellHeight = this.targetDashboard.getCurrentCellHeight();
const margin = this.targetDashboard.getCurrentMargin();
if (this.width) {
el.style.width = columnWidth * (this.width || 1) - margin * ((this.width || 1) - 1) + 'px';
}
if (this.height) {
el.style.height = cellHeight * (this.height || 1) - margin * 2 + 'px';
}
}
copyStyle(source, target) {
['id', 'style', 'draggable'].forEach((att) => {
target.removeAttribute(att);
});
// copy style (without transitions)
const computedStyle = getComputedStyle(source);
for (let i = 0; i < computedStyle.length; i++) {
const key = computedStyle[i];
if (key.indexOf('transition') < 0) {
target.style[key] = computedStyle[key];
}
}
target.style.pointerEvents = 'none';
// and repeat for all children
for (let i = 0; i < source.children.length; i++) {
this.copyStyle(source.children[i], target.children[i]);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardLibraryWidgetDirective, deps: [{ token: i0.ElementRef }, { token: i0.ComponentFactoryResolver }, { token: i0.ApplicationRef }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: i1.DashboardLibraryPanelDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DashboardLibraryWidgetDirective, selector: "[dDashboardLibraryWidget]", inputs: { width: "width", height: "height", widgetData: "widgetData", dragMode: "dragMode", dragTemplate: "dragTemplate", dragDisabled: "dragDisabled", dragCopyStyle: "dragCopyStyle", targetDashboard: "targetDashboard" }, host: { properties: { "attr.gs-w": "this.width", "attr.gs-h": "this.height", "class.grid-stack-new-item": "this.hostBinding", "class.grid-stack-item-content": "this.hostBindingHandler", "attr.gs-instance": "this.gridStackId" } }, usesOnChanges: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardLibraryWidgetDirective, decorators: [{
type: Directive,
args: [{
selector: '[dDashboardLibraryWidget]',
}]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ComponentFactoryResolver }, { type: i0.ApplicationRef }, { type: i0.Injector }, { type: i0.ViewContainerRef }, { type: i1.DashboardLibraryPanelDirective, decorators: [{
type: Optional
}] }], propDecorators: { width: [{
type: HostBinding,
args: ['attr.gs-w']
}, {
type: Input
}], height: [{
type: HostBinding,
args: ['attr.gs-h']
}, {
type: Input
}], widgetData: [{
type: Input
}], dragMode: [{
type: Input
}], dragTemplate: [{
type: Input
}], dragDisabled: [{
type: Input
}], dragCopyStyle: [{
type: Input
}], hostBinding: [{
type: HostBinding,
args: ['class.grid-stack-new-item']
}], hostBindingHandler: [{
type: HostBinding,
args: ['class.grid-stack-item-content']
}], gridStackId: [{
type: HostBinding,
args: ['attr.gs-instance']
}], targetDashboard: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS13aWRnZXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZGV2dWkvZGFzaGJvYXJkL3dpZGdldC1saWJyYXJ5L2xpYnJhcnktd2lkZ2V0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFDVSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUNyRyxLQUFLLEVBQXdCLFFBQVEsRUFBaUIsV0FBVyxFQUFFLGdCQUFnQixFQUNwRixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7O0FBSzNGLE1BQU0sT0FBTywrQkFBK0I7SUEyQjFDLElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsWUFDVSxFQUFjLEVBQ2QsR0FBNkIsRUFDN0IsTUFBc0IsRUFDdEIsUUFBa0IsRUFDbEIsR0FBcUIsRUFDVCxZQUE0QztRQUx4RCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsUUFBRyxHQUFILEdBQUcsQ0FBMEI7UUFDN0IsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUNULGlCQUFZLEdBQVosWUFBWSxDQUFnQztRQXpCekQsYUFBUSxHQUFvQixNQUFNLENBQUM7UUFFbkMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFHL0IsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFHbkIsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBTTFCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFvRGhCLFdBQU0sR0FBRyxDQUFDLEtBQXdDLEVBQUUsRUFBRTtZQUNwRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxLQUFLLEtBQUssV0FBVyxFQUFFLENBQUM7b0JBQzFCLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFO3dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQ3ZDLENBQUMsQ0FBQztnQkFDSixDQUFDO2dCQUNELElBQUksS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUN6QixPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRTt3QkFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDdEMsQ0FBQyxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLFdBQU0sR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDN0IsZ0NBQWdDO2dCQUNoQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQy9CLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN2QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pELEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzVDLENBQUM7Z0JBQ0QsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0NBQXNDLENBQUMsQ0FBQztnQkFDekQsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2dCQUN6QixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzdCLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQzNDLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUM5QixFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDO2dCQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDNUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3RGLGVBQWUsQ0FBQyxvQkFBb0IsQ0FDbEMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUM5QyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQzFCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2lCQUNwQixDQUFDLENBQ0gsQ0FBQztnQkFDRixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUM3QixDQUFDO2dCQUNELGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekIsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMxQixPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQyxDQUFDO0lBbkdFLENBQUM7SUFFTCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN0QixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsZUFBZTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUM3RCxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3pGLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUN0QixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDdEQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQTZERCxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU07UUFDdkIsY0FBYztRQUNkLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUQsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2pELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsRUFBRTtRQUNuQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDakUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQy9ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN2RCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUM3RixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUNELFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTTtRQUN0QixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDM0MsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILG1DQUFtQztRQUNuQyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlDLE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1FBQ3BDLDhCQUE4QjtRQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDOytHQWhMVSwrQkFBK0I7bUdBQS9CLCtCQUErQjs7NEZBQS9CLCtCQUErQjtrQkFIM0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMkJBQTJCO2lCQUN0Qzs7MEJBcUNJLFFBQVE7eUNBakNYLEtBQUs7c0JBRkosV0FBVzt1QkFBQyxXQUFXOztzQkFDdkIsS0FBSztnQkFLTixNQUFNO3NCQUZMLFdBQVc7dUJBQUMsV0FBVzs7c0JBQ3ZCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdOLFdBQVc7c0JBRFYsV0FBVzt1QkFBQywyQkFBMkI7Z0JBSXhDLGtCQUFrQjtzQkFEakIsV0FBVzt1QkFBQywrQkFBK0I7Z0JBSTVDLFdBQVc7c0JBRFYsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBR3RCLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb21Qb3J0YWxPdXRsZXQsIFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LCBBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbmplY3RvcixcbiAgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPcHRpb25hbCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDb21wb25lbnQgfSBmcm9tICcuLi9kYXNoYm9hcmQuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRTdGFja1NlcnZpY2UgfSBmcm9tICcuLi9ncmlkLXN0YWNrLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGFzaGJvYXJkTGlicmFyeVBhbmVsRGlyZWN0aXZlIH0gZnJvbSAnLi4vd2lkZ2V0LWxpYnJhcnkvbGlicmFyeS1wYW5lbC5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZERhc2hib2FyZExpYnJhcnlXaWRnZXRdJyxcbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkTGlicmFyeVdpZGdldERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmdzLXcnKVxuICBASW5wdXQoKVxuICB3aWR0aDogbnVtYmVyO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ncy1oJylcbiAgQElucHV0KClcbiAgaGVpZ2h0OiBudW1iZXI7XG5cbiAgQElucHV0KCkgd2lkZ2V0RGF0YTtcblxuICBASW5wdXQoKSBkcmFnTW9kZTogJ2NvcHknIHwgJ21vdmUnID0gJ2NvcHknO1xuICBASW5wdXQoKSBkcmFnVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGRyYWdEaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBkcmFnQ29weVN0eWxlID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5ncmlkLXN0YWNrLW5ldy1pdGVtJylcbiAgaG9zdEJpbmRpbmcgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZ3JpZC1zdGFjay1pdGVtLWNvbnRlbnQnKVxuICBob3N0QmluZGluZ0hhbmRsZXIgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ncy1pbnN0YW5jZScpXG4gIGdyaWRTdGFja0lkO1xuXG4gIEBJbnB1dCgpIHRhcmdldERhc2hib2FyZDogRGFzaGJvYXJkQ29tcG9uZW50O1xuICBpc1NldHVwID0gZmFsc2U7XG4gIGdldCBncmlkU3RhY2tTZXJ2aWNlKCk6IEdyaWRTdGFja1NlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLnRhcmdldERhc2hib2FyZD8uZ3JpZFN0YWNrU2VydmljZTtcbiAgfVxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgdmNmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgbGlicmFyeVBhbmVsOiBEYXNoYm9hcmRMaWJyYXJ5UGFuZWxEaXJlY3RpdmVcbiAgKSB7IH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMudGFyZ2V0RGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLnNldHVwKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmRyYWdEaXNhYmxlZCkge1xuICAgICAgaWYgKHRoaXMuZHJhZ0Rpc2FibGVkKSB7XG4gICAgICAgIEdyaWRTdGFja1NlcnZpY2UuZGlzYWJsZURyYWcodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEdyaWRTdGFja1NlcnZpY2UuZW5hYmxlRHJhZyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLmlzU2V0dXApIHtcbiAgICAgIEdyaWRTdGFja1NlcnZpY2UuY2xlYW5EcmFnSW4odGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgIHRoaXMuc2V0dXAoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5ncmlkU3RhY2tTZXJ2aWNlKSB7XG4gICAgICB0aGlzLmdyaWRTdGFja1NlcnZpY2UuZGVzdHJveURyYWdJbih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHNldHVwKCkge1xuICAgIGlmICh0aGlzLnRhcmdldERhc2hib2FyZCAmJiAhdGhpcy5pc1NldHVwKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZFN0YWNrU2VydmljZSAmJiB0aGlzLmdyaWRTdGFja1NlcnZpY2UuZ3JpZFN0YWNrKSB7XG4gICAgICAgICAgR3JpZFN0YWNrU2VydmljZS5jbGVhbkRyYWdJbih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuZ3JpZFN0YWNrU2VydmljZS5zZXR1cERyYWdJbih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMsIHRoaXMuaGVscGVyLCB0aGlzLm5vdGlmeSk7XG4gICAgICAgICAgaWYgKHRoaXMuZHJhZ0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBHcmlkU3RhY2tTZXJ2aWNlLmRpc2FibGVEcmFnKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaXNTZXR1cCA9IHRydWU7XG4gICAgfVxuICB9XG4gIG5vdGlmeSA9IChldmVudDogJ2RyYWdTdGFydCcgfCAnZHJhZ1N0b3AnIHwgc3RyaW5nKSA9PiB7XG4gICAgaWYgKHRoaXMubGlicmFyeVBhbmVsKSB7XG4gICAgICBpZiAoZXZlbnQgPT09ICdkcmFnU3RhcnQnKSB7XG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgIHRoaXMubGlicmFyeVBhbmVsLmRyYWdTdGFydEhhbmRsZXIoKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCA9PT0gJ2RyYWdTdG9wJykge1xuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICB0aGlzLmxpYnJhcnlQYW5lbC5kcmFnU3RvcEhhbmRsZXIoKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICgpID0+IHsgfTtcbiAgICB9XG4gIH07XG5cbiAgaGVscGVyID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKHRoaXMuZHJhZ01vZGUgPT09ICdtb3ZlJykge1xuICAgICAgLy8gZ3JpZCBzdGFjayDmnInpq5jluqblj5jljJbnmoRidWfvvIwg5pqC5pe25bCx5LiN6Kej5Yaz5LqGXG4gICAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZHJhZ1RlbXBsYXRlKSB7XG4gICAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBlbC5zdHlsZS56SW5kZXggPSAnMTA2MCc7XG4gICAgICB0aGlzLmNvcHlDYW52YXModGhpcy5lbC5uYXRpdmVFbGVtZW50LCBlbCk7XG4gICAgICBpZiAodGhpcy5kcmFnQ29weVN0eWxlKSB7XG4gICAgICAgIHRoaXMuY29weVN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgZWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnZ3JpZC1zdGFjay1pdGVtLWFkZGluZy1pdGVtLXRlbXBsYXRlJyk7XG4gICAgICBlbC5zdHlsZS56SW5kZXggPSAnMTA2MCc7XG4gICAgICBpZiAodGhpcy53aWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZ3MtdycsIGAke3RoaXMud2lkdGh9YCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5oZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2dzLWgnLCBgJHt0aGlzLmhlaWdodH1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0RHJhZ1dpZHRoSGVpZ2h0KGVsKTtcbiAgICAgIGNvbnN0IGRvbVBvcnRhbE91dGxldCA9IG5ldyBEb21Qb3J0YWxPdXRsZXQoZWwsIHRoaXMuY2ZyLCB0aGlzLmFwcFJlZiwgdGhpcy5pbmplY3Rvcik7XG4gICAgICBkb21Qb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwoXG4gICAgICAgIG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLmRyYWdUZW1wbGF0ZSwgdGhpcy52Y2YsIHtcbiAgICAgICAgICAkaW1wbGljaXQ6IHRoaXMud2lkZ2V0RGF0YSxcbiAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGVsLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIHRoaXMuY29weUNhbnZhcyhlbCwgcmVzdWx0KTtcbiAgICAgIGlmICh0aGlzLmRyYWdDb3B5U3R5bGUpIHtcbiAgICAgICAgdGhpcy5jb3B5U3R5bGUoZWwsIHJlc3VsdCk7XG4gICAgICB9XG4gICAgICBkb21Qb3J0YWxPdXRsZXQuZGV0YWNoKCk7XG4gICAgICBkb21Qb3J0YWxPdXRsZXQuZGlzcG9zZSgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH07XG5cbiAgY29weUNhbnZhcyhvcmlnaW4sIHRhcmdldCkge1xuICAgIC8vIOaLt+i0nWNhbnZhc+eahOWGheWuuVxuICAgIGNvbnN0IG9yaWdpbkNhbnZhc0FyciA9IG9yaWdpbi5xdWVyeVNlbGVjdG9yQWxsKCdjYW52YXMnKTtcbiAgICBjb25zdCB0YXJnZXRDYW52YXNBcnIgPSB0YXJnZXQucXVlcnlTZWxlY3RvckFsbCgnY2FudmFzJyk7XG4gICAgW10uZm9yRWFjaC5jYWxsKHRhcmdldENhbnZhc0FyciwgKGNhbnZhcywgaW5kZXgpID0+IHtcbiAgICAgIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmRyYXdJbWFnZShvcmlnaW5DYW52YXNBcnJbaW5kZXhdLCAwLCAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldERyYWdXaWR0aEhlaWdodChlbCkge1xuICAgIGNvbnN0IGNvbHVtbldpZHRoID0gdGhpcy50YXJnZXREYXNoYm9hcmQuZ2V0Q3VycmVudENvbHVtbldpZHRoKCk7XG4gICAgY29uc3QgY2VsbEhlaWdodCA9IHRoaXMudGFyZ2V0RGFzaGJvYXJkLmdldEN1cnJlbnRDZWxsSGVpZ2h0KCk7XG4gICAgY29uc3QgbWFyZ2luID0gdGhpcy50YXJnZXREYXNoYm9hcmQuZ2V0Q3VycmVudE1hcmdpbigpO1xuICAgIGlmICh0aGlzLndpZHRoKSB7XG4gICAgICBlbC5zdHlsZS53aWR0aCA9IGNvbHVtbldpZHRoICogKHRoaXMud2lkdGggfHwgMSkgLSBtYXJnaW4gKiAoKHRoaXMud2lkdGggfHwgMSkgLSAxKSArICdweCc7XG4gICAgfVxuICAgIGlmICh0aGlzLmhlaWdodCkge1xuICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gY2VsbEhlaWdodCAqICh0aGlzLmhlaWdodCB8fCAxKSAtIG1hcmdpbiAqIDIgKyAncHgnO1xuICAgIH1cbiAgfVxuICBjb3B5U3R5bGUoc291cmNlLCB0YXJnZXQpIHtcbiAgICBbJ2lkJywgJ3N0eWxlJywgJ2RyYWdnYWJsZSddLmZvckVhY2goKGF0dCkgPT4ge1xuICAgICAgdGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZShhdHQpO1xuICAgIH0pO1xuXG4gICAgLy8gY29weSBzdHlsZSAod2l0aG91dCB0cmFuc2l0aW9ucylcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShzb3VyY2UpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcHV0ZWRTdHlsZS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0gY29tcHV0ZWRTdHlsZVtpXTtcbiAgICAgIGlmIChrZXkuaW5kZXhPZigndHJhbnNpdGlvbicpIDwgMCkge1xuICAgICAgICB0YXJnZXQuc3R5bGVba2V5XSA9IGNvbXB1dGVkU3R5bGVba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGFyZ2V0LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgLy8gYW5kIHJlcGVhdCBmb3IgYWxsIGNoaWxkcmVuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY29weVN0eWxlKHNvdXJjZS5jaGlsZHJlbltpXSwgdGFyZ2V0LmNoaWxkcmVuW2ldKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==