ng-devui
Version:
DevUI components based on Angular
163 lines • 22.2 kB
JavaScript
import { Component, ElementRef, Input, ChangeDetectionStrategy, HostBinding, EventEmitter, Output, Optional, } from '@angular/core';
import { GridStackService } from '../grid-stack.service';
import * as i0 from "@angular/core";
import * as i1 from "../grid-stack.service";
export class DashboardWidgetComponent {
static { this.autoNumberedId = 0; }
constructor(elem, gridStackService) {
this.elem = elem;
this.gridStackService = gridStackService;
this.xChange = new EventEmitter();
this.yChange = new EventEmitter();
this.widthChange = new EventEmitter();
this.heightChange = new EventEmitter();
this.widgetInit = new EventEmitter(true);
this.widgetResize = new EventEmitter(true);
this.widgetDestroy = new EventEmitter();
this.hostBinding = true;
this.generatedId = (DashboardWidgetComponent.autoNumberedId++).toString();
}
ngOnChanges(changes) {
if (this.gridStackService && this.gridStackService.gridStack) {
if (changes.x || changes.y || changes.width || changes.height) {
this.gridStackService.gridStack.update(this.elem.nativeElement, { x: this.x, y: this.y, w: this.width, h: this.height });
}
if (changes.noResize) {
this.gridStackService.gridStack.resizable(this.elem.nativeElement, !this.noResize);
}
if (changes.noMove) {
this.gridStackService.gridStack.movable(this.elem.nativeElement, !this.noMove);
}
if (changes.locked) {
this.gridStackService.gridStack.update(this.elem.nativeElement, { locked: !!this.locked });
}
if (changes.maxWidth) {
this.gridStackService.gridStack.update(this.elem.nativeElement, { maxW: this.maxWidth });
}
if (changes.maxHeight) {
this.gridStackService.gridStack.update(this.elem.nativeElement, { maxH: this.maxHeight });
}
if (changes.minWidth) {
this.gridStackService.gridStack.update(this.elem.nativeElement, { minW: this.minWidth });
}
if (changes.minHeight) {
this.gridStackService.gridStack.update(this.elem.nativeElement, { minH: this.minHeight });
}
}
}
ngAfterViewInit() {
this.widgetInit.emit();
}
ngOnDestroy() {
this.widgetDestroy.emit();
}
handleChange({ x, y, width, height }) {
const change = { x, y, width, height };
const beforeChange = { width: this.width, height: this.height };
Object.keys(change).forEach((key) => {
if (change[key] !== this[key]) {
this[key] = change[key];
const eventEmitter = this[key + 'Change'];
if (eventEmitter) {
eventEmitter.emit(change[key]);
}
}
});
if (change.width !== beforeChange.width || change.height !== beforeChange.height) {
this.widgetResize.emit({ width, height });
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardWidgetComponent, deps: [{ token: i0.ElementRef }, { token: i1.GridStackService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DashboardWidgetComponent, selector: "d-dashboard-widget", inputs: { x: "x", y: "y", width: "width", height: "height", id: "id", maxWidth: "maxWidth", maxHeight: "maxHeight", minWidth: "minWidth", minHeight: "minHeight", noResize: "noResize", noMove: "noMove", autoPosition: "autoPosition", locked: "locked", widgetData: "widgetData" }, outputs: { xChange: "xChange", yChange: "yChange", widthChange: "widthChange", heightChange: "heightChange", widgetInit: "widgetInit", widgetResize: "widgetResize", widgetDestroy: "widgetDestroy" }, host: { properties: { "attr.gs-x": "this.x", "attr.gs-y": "this.y", "attr.gs-w": "this.width", "attr.gs-h": "this.height", "attr.gs-id": "this.id", "attr.gs-max-w": "this.maxWidth", "attr.gs-max-h": "this.maxHeight", "attr.gs-min-w": "this.minWidth", "attr.gs-min-h": "this.minHeight", "attr.gs-no-resize": "this.noResize", "attr.gs-no-move": "this.noMove", "attr.gs-auto-position": "this.autoPosition", "attr.gs-locked": "this.locked", "class.grid-stack-item": "this.hostBinding" } }, exportAs: ["dDashboardWidget"], usesOnChanges: true, ngImport: i0, template: "<div class=\"grid-stack-item-content d-dashboard-widget devui-scrollbar\">\n <ng-content></ng-content>\n</div>\n", styles: [".ui-draggable-dragging :host>*{pointer-events:none!important}.d-dashboard-widget{border:1px solid transparent;box-shadow:0 2px 8px 0 var(--devui-light-shadow, rgba(0, 0, 0, .08));background:var(--devui-base-bg, #ffffff);border-radius:var(--devui-border-radius, 2px);transition:box-shadow var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1)),transform var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}:host.ui-resizable-resizing .d-dashboard-widget,:host.ui-draggable-dragging .d-dashboard-widget{opacity:1}:host.ui-draggable-dragging .d-dashboard-widget,.grid-stack:not(.grid-stack-static) :host.ui-draggable:not(.ui-draggable-disabled) .d-dashboard-widget{cursor:pointer}.ui-draggable-dragging :host .d-dashboard-widget,:host.ui-draggable-dragging .d-dashboard-widget,.grid-stack:not(.grid-stack-static) :host:hover .d-dashboard-widget{transform:translateY(-4px);box-shadow:0 4px 8px 0 var(--devui-shadow, rgba(0, 0, 0, .16))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardWidgetComponent, decorators: [{
type: Component,
args: [{ selector: 'd-dashboard-widget', changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'dDashboardWidget', preserveWhitespaces: false, template: "<div class=\"grid-stack-item-content d-dashboard-widget devui-scrollbar\">\n <ng-content></ng-content>\n</div>\n", styles: [".ui-draggable-dragging :host>*{pointer-events:none!important}.d-dashboard-widget{border:1px solid transparent;box-shadow:0 2px 8px 0 var(--devui-light-shadow, rgba(0, 0, 0, .08));background:var(--devui-base-bg, #ffffff);border-radius:var(--devui-border-radius, 2px);transition:box-shadow var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1)),transform var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}:host.ui-resizable-resizing .d-dashboard-widget,:host.ui-draggable-dragging .d-dashboard-widget{opacity:1}:host.ui-draggable-dragging .d-dashboard-widget,.grid-stack:not(.grid-stack-static) :host.ui-draggable:not(.ui-draggable-disabled) .d-dashboard-widget{cursor:pointer}.ui-draggable-dragging :host .d-dashboard-widget,:host.ui-draggable-dragging .d-dashboard-widget,.grid-stack:not(.grid-stack-static) :host:hover .d-dashboard-widget{transform:translateY(-4px);box-shadow:0 4px 8px 0 var(--devui-shadow, rgba(0, 0, 0, .16))}\n"] }]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.GridStackService, decorators: [{
type: Optional
}] }], propDecorators: { x: [{
type: HostBinding,
args: ['attr.gs-x']
}, {
type: Input
}], xChange: [{
type: Output
}], y: [{
type: HostBinding,
args: ['attr.gs-y']
}, {
type: Input
}], yChange: [{
type: Output
}], width: [{
type: HostBinding,
args: ['attr.gs-w']
}, {
type: Input
}], widthChange: [{
type: Output
}], height: [{
type: HostBinding,
args: ['attr.gs-h']
}, {
type: Input
}], heightChange: [{
type: Output
}], id: [{
type: HostBinding,
args: ['attr.gs-id']
}, {
type: Input
}], maxWidth: [{
type: HostBinding,
args: ['attr.gs-max-w']
}, {
type: Input
}], maxHeight: [{
type: HostBinding,
args: ['attr.gs-max-h']
}, {
type: Input
}], minWidth: [{
type: HostBinding,
args: ['attr.gs-min-w']
}, {
type: Input
}], minHeight: [{
type: HostBinding,
args: ['attr.gs-min-h']
}, {
type: Input
}], noResize: [{
type: HostBinding,
args: ['attr.gs-no-resize']
}, {
type: Input
}], noMove: [{
type: HostBinding,
args: ['attr.gs-no-move']
}, {
type: Input
}], autoPosition: [{
type: HostBinding,
args: ['attr.gs-auto-position']
}, {
type: Input
}], locked: [{
type: HostBinding,
args: ['attr.gs-locked']
}, {
type: Input
}], widgetData: [{
type: Input
}], widgetInit: [{
type: Output
}], widgetResize: [{
type: Output
}], widgetDestroy: [{
type: Output
}], hostBinding: [{
type: HostBinding,
args: ['class.grid-stack-item']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2RldnVpL2Rhc2hib2FyZC93aWRnZXQvd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2RldnVpL2Rhc2hib2FyZC93aWRnZXQvd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCx1QkFBdUIsRUFDdkIsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBR04sUUFBUSxHQUdULE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFlekQsTUFBTSxPQUFPLHdCQUF3QjthQUM1QixtQkFBYyxHQUFHLENBQUMsQUFBSixDQUFLO0lBb0UxQixZQUFtQixJQUFnQixFQUFzQixnQkFBa0M7UUFBeEUsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFzQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBaEVqRixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUtyQyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUtyQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFLekMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBd0MxQyxlQUFVLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsaUJBQVksR0FBRyxJQUFJLFlBQVksQ0FBMkMsSUFBSSxDQUFDLENBQUM7UUFDaEYsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRzdDLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5CLGdCQUFXLEdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRWlCLENBQUM7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QUFLO2dCQUVJLE9BQU87c0JBQWhCLE1BQU07Z0JBSVAsQ0FBQztzQkFGQSxXQUFXO3VCQUFDLFdBQVc7O3NCQUN2QixLQUFLO2dCQUVJLE9BQU87c0JBQWhCLE1BQU07Z0JBSVAsS0FBSztzQkFGSixXQUFXO3VCQUFDLFdBQVc7O3NCQUN2QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBSVAsTUFBTTtzQkFGTCxXQUFXO3VCQUFDLFdBQVc7O3NCQUN2QixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBSVAsRUFBRTtzQkFGRCxXQUFXO3VCQUFDLFlBQVk7O3NCQUN4QixLQUFLO2dCQUtOLFFBQVE7c0JBRlAsV0FBVzt1QkFBQyxlQUFlOztzQkFDM0IsS0FBSztnQkFLTixTQUFTO3NCQUZSLFdBQVc7dUJBQUMsZUFBZTs7c0JBQzNCLEtBQUs7Z0JBS04sUUFBUTtzQkFGUCxXQUFXO3VCQUFDLGVBQWU7O3NCQUMzQixLQUFLO2dCQUtOLFNBQVM7c0JBRlIsV0FBVzt1QkFBQyxlQUFlOztzQkFDM0IsS0FBSztnQkFLTixRQUFRO3NCQUZQLFdBQVc7dUJBQUMsbUJBQW1COztzQkFDL0IsS0FBSztnQkFLTixNQUFNO3NCQUZMLFdBQVc7dUJBQUMsaUJBQWlCOztzQkFDN0IsS0FBSztnQkFLTixZQUFZO3NCQUZYLFdBQVc7dUJBQUMsdUJBQXVCOztzQkFDbkMsS0FBSztnQkFLTixNQUFNO3NCQUZMLFdBQVc7dUJBQUMsZ0JBQWdCOztzQkFDNUIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUdQLFdBQVc7c0JBRFYsV0FBVzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgSG9zdEJpbmRpbmcsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9wdGlvbmFsLFxuICBBZnRlclZpZXdJbml0LFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZFN0YWNrTm9kZSwgR3JpZFN0YWNrV2lkZ2V0IH0gZnJvbSAnZ3JpZHN0YWNrJztcbmltcG9ydCB7IEdyaWRTdGFja05vZGVDb21wYXRpYmxlIH0gZnJvbSAnLi4vZ3JpZC1zdGFjay5jb25maWcnO1xuaW1wb3J0IHsgR3JpZFN0YWNrU2VydmljZSB9IGZyb20gJy4uL2dyaWQtc3RhY2suc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIERhc2hib2FyZFdpZGdldCA9IEdyaWRTdGFja1dpZGdldCAmIHtcbiAgd2lkZ2V0RGF0YT86IGFueTtcbiAgW3Byb3A6IHN0cmluZ106IGFueTtcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2QtZGFzaGJvYXJkLXdpZGdldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93aWRnZXQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGV4cG9ydEFzOiAnZERhc2hib2FyZFdpZGdldCcsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZFdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIEdyaWRTdGFja05vZGUsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgc3RhdGljIGF1dG9OdW1iZXJlZElkID0gMDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmdzLXgnKVxuICBASW5wdXQoKVxuICB4OiBudW1iZXI7XG4gIEBPdXRwdXQoKSB4Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmdzLXknKVxuICBASW5wdXQoKVxuICB5OiBudW1iZXI7XG4gIEBPdXRwdXQoKSB5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmdzLXcnKVxuICBASW5wdXQoKVxuICB3aWR0aDogbnVtYmVyO1xuICBAT3V0cHV0KCkgd2lkdGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZ3MtaCcpXG4gIEBJbnB1dCgpXG4gIGhlaWdodDogbnVtYmVyO1xuICBAT3V0cHV0KCkgaGVpZ2h0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmdzLWlkJylcbiAgQElucHV0KClcbiAgaWQ6IHN0cmluZztcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZ3MtbWF4LXcnKVxuICBASW5wdXQoKVxuICBtYXhXaWR0aDogbnVtYmVyO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ncy1tYXgtaCcpXG4gIEBJbnB1dCgpXG4gIG1heEhlaWdodDogbnVtYmVyO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ncy1taW4tdycpXG4gIEBJbnB1dCgpXG4gIG1pbldpZHRoOiBudW1iZXI7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmdzLW1pbi1oJylcbiAgQElucHV0KClcbiAgbWluSGVpZ2h0OiBudW1iZXI7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmdzLW5vLXJlc2l6ZScpXG4gIEBJbnB1dCgpXG4gIG5vUmVzaXplOiBib29sZWFuO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ncy1uby1tb3ZlJylcbiAgQElucHV0KClcbiAgbm9Nb3ZlOiBib29sZWFuO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ncy1hdXRvLXBvc2l0aW9uJylcbiAgQElucHV0KClcbiAgYXV0b1Bvc2l0aW9uOiBib29sZWFuOyAvLyDku4XliJ3lp4vljJbmnInmlYjvvIzpu5jorqTkuLpmYWxzZVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ncy1sb2NrZWQnKVxuICBASW5wdXQoKVxuICBsb2NrZWQ6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgd2lkZ2V0RGF0YTtcblxuICBAT3V0cHV0KCkgd2lkZ2V0SW5pdCA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG4gIEBPdXRwdXQoKSB3aWRnZXRSZXNpemUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGw+KHRydWUpO1xuICBAT3V0cHV0KCkgd2lkZ2V0RGVzdHJveSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmdyaWQtc3RhY2staXRlbScpXG4gIGhvc3RCaW5kaW5nID0gdHJ1ZTtcblxuICBnZW5lcmF0ZWRJZDogc3RyaW5nID0gKERhc2hib2FyZFdpZGdldENvbXBvbmVudC5hdXRvTnVtYmVyZWRJZCsrKS50b1N0cmluZygpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtOiBFbGVtZW50UmVmLCBAT3B0aW9uYWwoKSBwcml2YXRlIGdyaWRTdGFja1NlcnZpY2U6IEdyaWRTdGFja1NlcnZpY2UpIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICh0aGlzLmdyaWRTdGFja1NlcnZpY2UgJiYgdGhpcy5ncmlkU3RhY2tTZXJ2aWNlLmdyaWRTdGFjaykge1xuICAgICAgaWYgKGNoYW5nZXMueCB8fCBjaGFuZ2VzLnkgfHwgY2hhbmdlcy53aWR0aCB8fCBjaGFuZ2VzLmhlaWdodCkge1xuICAgICAgICB0aGlzLmdyaWRTdGFja1NlcnZpY2UuZ3JpZFN0YWNrLnVwZGF0ZSh0aGlzLmVsZW0ubmF0aXZlRWxlbWVudCwgeyB4OiB0aGlzLngsIHk6IHRoaXMueSwgdzogdGhpcy53aWR0aCwgaDogdGhpcy5oZWlnaHQgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlcy5ub1Jlc2l6ZSkge1xuICAgICAgICB0aGlzLmdyaWRTdGFja1NlcnZpY2UuZ3JpZFN0YWNrLnJlc2l6YWJsZSh0aGlzLmVsZW0ubmF0aXZlRWxlbWVudCwgIXRoaXMubm9SZXNpemUpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXMubm9Nb3ZlKSB7XG4gICAgICAgIHRoaXMuZ3JpZFN0YWNrU2VydmljZS5ncmlkU3RhY2subW92YWJsZSh0aGlzLmVsZW0ubmF0aXZlRWxlbWVudCwgIXRoaXMubm9Nb3ZlKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzLmxvY2tlZCkge1xuICAgICAgICB0aGlzLmdyaWRTdGFja1NlcnZpY2UuZ3JpZFN0YWNrLnVwZGF0ZSh0aGlzLmVsZW0ubmF0aXZlRWxlbWVudCwgeyBsb2NrZWQ6ICEhdGhpcy5sb2NrZWQgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlcy5tYXhXaWR0aCkge1xuICAgICAgICB0aGlzLmdyaWRTdGFja1NlcnZpY2UuZ3JpZFN0YWNrLnVwZGF0ZSh0aGlzLmVsZW0ubmF0aXZlRWxlbWVudCwgeyBtYXhXOiB0aGlzLm1heFdpZHRoIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXMubWF4SGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuZ3JpZFN0YWNrU2VydmljZS5ncmlkU3RhY2sudXBkYXRlKHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50LCB7IG1heEg6IHRoaXMubWF4SGVpZ2h0IH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXMubWluV2lkdGgpIHtcbiAgICAgICAgdGhpcy5ncmlkU3RhY2tTZXJ2aWNlLmdyaWRTdGFjay51cGRhdGUodGhpcy5lbGVtLm5hdGl2ZUVsZW1lbnQsIHsgbWluVzogdGhpcy5taW5XaWR0aCB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzLm1pbkhlaWdodCkge1xuICAgICAgICB0aGlzLmdyaWRTdGFja1NlcnZpY2UuZ3JpZFN0YWNrLnVwZGF0ZSh0aGlzLmVsZW0ubmF0aXZlRWxlbWVudCwgeyBtaW5IOiB0aGlzLm1pbkhlaWdodCB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy53aWRnZXRJbml0LmVtaXQoKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLndpZGdldERlc3Ryb3kuZW1pdCgpO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlKHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9OiBHcmlkU3RhY2tOb2RlQ29tcGF0aWJsZSkge1xuICAgIGNvbnN0IGNoYW5nZSA9IHsgeCwgeSwgd2lkdGgsIGhlaWdodH07XG4gICAgY29uc3QgYmVmb3JlQ2hhbmdlID0geyB3aWR0aDogdGhpcy53aWR0aCwgaGVpZ2h0OiB0aGlzLmhlaWdodCB9O1xuICAgIE9iamVjdC5rZXlzKGNoYW5nZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoY2hhbmdlW2tleV0gIT09IHRoaXNba2V5XSkge1xuICAgICAgICB0aGlzW2tleV0gPSBjaGFuZ2Vba2V5XTtcbiAgICAgICAgY29uc3QgZXZlbnRFbWl0dGVyID0gdGhpc1trZXkgKyAnQ2hhbmdlJ10gYXMgRXZlbnRFbWl0dGVyPG51bWJlcj47XG4gICAgICAgIGlmIChldmVudEVtaXR0ZXIpIHtcbiAgICAgICAgICBldmVudEVtaXR0ZXIuZW1pdChjaGFuZ2Vba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoY2hhbmdlLndpZHRoICE9PSBiZWZvcmVDaGFuZ2Uud2lkdGggfHwgY2hhbmdlLmhlaWdodCAhPT0gYmVmb3JlQ2hhbmdlLmhlaWdodCkge1xuICAgICAgdGhpcy53aWRnZXRSZXNpemUuZW1pdCh7IHdpZHRoLCBoZWlnaHR9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJncmlkLXN0YWNrLWl0ZW0tY29udGVudCBkLWRhc2hib2FyZC13aWRnZXQgZGV2dWktc2Nyb2xsYmFyXCI+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19