UNPKG

ng-devui

Version:

DevUI components based on Angular

201 lines 25.8 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS13aWRnZXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZGV2dWkvZGFzaGJvYXJkL3dpZGdldC1saWJyYXJ5L2xpYnJhcnktd2lkZ2V0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFDVSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUNyRyxLQUFLLEVBQXdCLFFBQVEsRUFBaUIsV0FBVyxFQUFFLGdCQUFnQixFQUNwRixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7O0FBSzNGLE1BQU0sT0FBTywrQkFBK0I7SUEyQjFDLElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsWUFDVSxFQUFjLEVBQ2QsR0FBNkIsRUFDN0IsTUFBc0IsRUFDdEIsUUFBa0IsRUFDbEIsR0FBcUIsRUFDVCxZQUE0QztRQUx4RCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsUUFBRyxHQUFILEdBQUcsQ0FBMEI7UUFDN0IsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUNULGlCQUFZLEdBQVosWUFBWSxDQUFnQztRQXpCekQsYUFBUSxHQUFvQixNQUFNLENBQUM7UUFFbkMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsa0JBQWEsR0FB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Q0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdOLFdBQVc7c0JBRFYsV0FBVzt1QkFBQywyQkFBMkI7Z0JBSXhDLGtCQUFrQjtzQkFEakIsV0FBVzt1QkFBQywrQkFBK0I7Z0JBSTVDLFdBQVc7c0JBRFYsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBR3RCLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb21Qb3J0YWxPdXRsZXQsIFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LCBBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbmplY3RvcixcbiAgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPcHRpb25hbCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDb21wb25lbnQgfSBmcm9tICcuLi9kYXNoYm9hcmQuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRTdGFja1NlcnZpY2UgfSBmcm9tICcuLi9ncmlkLXN0YWNrLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGFzaGJvYXJkTGlicmFyeVBhbmVsRGlyZWN0aXZlIH0gZnJvbSAnLi4vd2lkZ2V0LWxpYnJhcnkvbGlicmFyeS1wYW5lbC5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZERhc2hib2FyZExpYnJhcnlXaWRnZXRdJyxcbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkTGlicmFyeVdpZGdldERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmdzLXcnKVxuICBASW5wdXQoKVxuICB3aWR0aDogbnVtYmVyO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ncy1oJylcbiAgQElucHV0KClcbiAgaGVpZ2h0OiBudW1iZXI7XG5cbiAgQElucHV0KCkgd2lkZ2V0RGF0YTtcblxuICBASW5wdXQoKSBkcmFnTW9kZTogJ2NvcHknIHwgJ21vdmUnID0gJ2NvcHknO1xuICBASW5wdXQoKSBkcmFnVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGRyYWdEaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBkcmFnQ29weVN0eWxlID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5ncmlkLXN0YWNrLW5ldy1pdGVtJylcbiAgaG9zdEJpbmRpbmcgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZ3JpZC1zdGFjay1pdGVtLWNvbnRlbnQnKVxuICBob3N0QmluZGluZ0hhbmRsZXIgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ncy1pbnN0YW5jZScpXG4gIGdyaWRTdGFja0lkO1xuXG4gIEBJbnB1dCgpIHRhcmdldERhc2hib2FyZDogRGFzaGJvYXJkQ29tcG9uZW50O1xuICBpc1NldHVwID0gZmFsc2U7XG4gIGdldCBncmlkU3RhY2tTZXJ2aWNlKCk6IEdyaWRTdGFja1NlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLnRhcmdldERhc2hib2FyZD8uZ3JpZFN0YWNrU2VydmljZTtcbiAgfVxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgdmNmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgbGlicmFyeVBhbmVsOiBEYXNoYm9hcmRMaWJyYXJ5UGFuZWxEaXJlY3RpdmVcbiAgKSB7IH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMudGFyZ2V0RGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLnNldHVwKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmRyYWdEaXNhYmxlZCkge1xuICAgICAgaWYgKHRoaXMuZHJhZ0Rpc2FibGVkKSB7XG4gICAgICAgIEdyaWRTdGFja1NlcnZpY2UuZGlzYWJsZURyYWcodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEdyaWRTdGFja1NlcnZpY2UuZW5hYmxlRHJhZyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLmlzU2V0dXApIHtcbiAgICAgIEdyaWRTdGFja1NlcnZpY2UuY2xlYW5EcmFnSW4odGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgIHRoaXMuc2V0dXAoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5ncmlkU3RhY2tTZXJ2aWNlKSB7XG4gICAgICB0aGlzLmdyaWRTdGFja1NlcnZpY2UuZGVzdHJveURyYWdJbih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHNldHVwKCkge1xuICAgIGlmICh0aGlzLnRhcmdldERhc2hib2FyZCAmJiAhdGhpcy5pc1NldHVwKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZFN0YWNrU2VydmljZSAmJiB0aGlzLmdyaWRTdGFja1NlcnZpY2UuZ3JpZFN0YWNrKSB7XG4gICAgICAgICAgR3JpZFN0YWNrU2VydmljZS5jbGVhbkRyYWdJbih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuZ3JpZFN0YWNrU2VydmljZS5zZXR1cERyYWdJbih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMsIHRoaXMuaGVscGVyLCB0aGlzLm5vdGlmeSk7XG4gICAgICAgICAgaWYgKHRoaXMuZHJhZ0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBHcmlkU3RhY2tTZXJ2aWNlLmRpc2FibGVEcmFnKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaXNTZXR1cCA9IHRydWU7XG4gICAgfVxuICB9XG4gIG5vdGlmeSA9IChldmVudDogJ2RyYWdTdGFydCcgfCAnZHJhZ1N0b3AnIHwgc3RyaW5nKSA9PiB7XG4gICAgaWYgKHRoaXMubGlicmFyeVBhbmVsKSB7XG4gICAgICBpZiAoZXZlbnQgPT09ICdkcmFnU3RhcnQnKSB7XG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgIHRoaXMubGlicmFyeVBhbmVsLmRyYWdTdGFydEhhbmRsZXIoKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCA9PT0gJ2RyYWdTdG9wJykge1xuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICB0aGlzLmxpYnJhcnlQYW5lbC5kcmFnU3RvcEhhbmRsZXIoKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICgpID0+IHsgfTtcbiAgICB9XG4gIH07XG5cbiAgaGVscGVyID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKHRoaXMuZHJhZ01vZGUgPT09ICdtb3ZlJykge1xuICAgICAgLy8gZ3JpZCBzdGFjayDmnInpq5jluqblj5jljJbnmoRidWfvvIwg5pqC5pe25bCx5LiN6Kej5Yaz5LqGXG4gICAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZHJhZ1RlbXBsYXRlKSB7XG4gICAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBlbC5zdHlsZS56SW5kZXggPSAnMTA2MCc7XG4gICAgICB0aGlzLmNvcHlDYW52YXModGhpcy5lbC5uYXRpdmVFbGVtZW50LCBlbCk7XG4gICAgICBpZiAodGhpcy5kcmFnQ29weVN0eWxlKSB7XG4gICAgICAgIHRoaXMuY29weVN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgZWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnZ3JpZC1zdGFjay1pdGVtLWFkZGluZy1pdGVtLXRlbXBsYXRlJyk7XG4gICAgICBlbC5zdHlsZS56SW5kZXggPSAnMTA2MCc7XG4gICAgICBpZiAodGhpcy53aWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZ3MtdycsIGAke3RoaXMud2lkdGh9YCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5oZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2dzLWgnLCBgJHt0aGlzLmhlaWdodH1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0RHJhZ1dpZHRoSGVpZ2h0KGVsKTtcbiAgICAgIGNvbnN0IGRvbVBvcnRhbE91dGxldCA9IG5ldyBEb21Qb3J0YWxPdXRsZXQoZWwsIHRoaXMuY2ZyLCB0aGlzLmFwcFJlZiwgdGhpcy5pbmplY3Rvcik7XG4gICAgICBkb21Qb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwoXG4gICAgICAgIG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLmRyYWdUZW1wbGF0ZSwgdGhpcy52Y2YsIHtcbiAgICAgICAgICAkaW1wbGljaXQ6IHRoaXMud2lkZ2V0RGF0YSxcbiAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGVsLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIHRoaXMuY29weUNhbnZhcyhlbCwgcmVzdWx0KTtcbiAgICAgIGlmICh0aGlzLmRyYWdDb3B5U3R5bGUpIHtcbiAgICAgICAgdGhpcy5jb3B5U3R5bGUoZWwsIHJlc3VsdCk7XG4gICAgICB9XG4gICAgICBkb21Qb3J0YWxPdXRsZXQuZGV0YWNoKCk7XG4gICAgICBkb21Qb3J0YWxPdXRsZXQuZGlzcG9zZSgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH07XG5cbiAgY29weUNhbnZhcyhvcmlnaW4sIHRhcmdldCkge1xuICAgIC8vIOaLt+i0nWNhbnZhc+eahOWGheWuuVxuICAgIGNvbnN0IG9yaWdpbkNhbnZhc0FyciA9IG9yaWdpbi5xdWVyeVNlbGVjdG9yQWxsKCdjYW52YXMnKTtcbiAgICBjb25zdCB0YXJnZXRDYW52YXNBcnIgPSB0YXJnZXQucXVlcnlTZWxlY3RvckFsbCgnY2FudmFzJyk7XG4gICAgW10uZm9yRWFjaC5jYWxsKHRhcmdldENhbnZhc0FyciwgKGNhbnZhcywgaW5kZXgpID0+IHtcbiAgICAgIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmRyYXdJbWFnZShvcmlnaW5DYW52YXNBcnJbaW5kZXhdLCAwLCAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldERyYWdXaWR0aEhlaWdodChlbCkge1xuICAgIGNvbnN0IGNvbHVtbldpZHRoID0gdGhpcy50YXJnZXREYXNoYm9hcmQuZ2V0Q3VycmVudENvbHVtbldpZHRoKCk7XG4gICAgY29uc3QgY2VsbEhlaWdodCA9IHRoaXMudGFyZ2V0RGFzaGJvYXJkLmdldEN1cnJlbnRDZWxsSGVpZ2h0KCk7XG4gICAgY29uc3QgbWFyZ2luID0gdGhpcy50YXJnZXREYXNoYm9hcmQuZ2V0Q3VycmVudE1hcmdpbigpO1xuICAgIGlmICh0aGlzLndpZHRoKSB7XG4gICAgICBlbC5zdHlsZS53aWR0aCA9IGNvbHVtbldpZHRoICogKHRoaXMud2lkdGggfHwgMSkgLSBtYXJnaW4gKiAoKHRoaXMud2lkdGggfHwgMSkgLSAxKSArICdweCc7XG4gICAgfVxuICAgIGlmICh0aGlzLmhlaWdodCkge1xuICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gY2VsbEhlaWdodCAqICh0aGlzLmhlaWdodCB8fCAxKSAtIG1hcmdpbiAqIDIgKyAncHgnO1xuICAgIH1cbiAgfVxuICBjb3B5U3R5bGUoc291cmNlLCB0YXJnZXQpIHtcbiAgICBbJ2lkJywgJ3N0eWxlJywgJ2RyYWdnYWJsZSddLmZvckVhY2goKGF0dCkgPT4ge1xuICAgICAgdGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZShhdHQpO1xuICAgIH0pO1xuXG4gICAgLy8gY29weSBzdHlsZSAod2l0aG91dCB0cmFuc2l0aW9ucylcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShzb3VyY2UpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcHV0ZWRTdHlsZS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0gY29tcHV0ZWRTdHlsZVtpXTtcbiAgICAgIGlmIChrZXkuaW5kZXhPZigndHJhbnNpdGlvbicpIDwgMCkge1xuICAgICAgICB0YXJnZXQuc3R5bGVba2V5XSA9IGNvbXB1dGVkU3R5bGVba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGFyZ2V0LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgLy8gYW5kIHJlcGVhdCBmb3IgYWxsIGNoaWxkcmVuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY29weVN0eWxlKHNvdXJjZS5jaGlsZHJlbltpXSwgdGFyZ2V0LmNoaWxkcmVuW2ldKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==