UNPKG

@sedeh/into-pipes

Version:

Have you ever wanted to transform data in different parts of your application into interactive objects without writing a single line of code?

151 lines 25.8 kB
import { Component, HostListener, EventEmitter } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class ImageComponent { constructor() { this.magnification = 0; this.disabled = false; this.active = true; this.validate = (item, newValue) => true; this.onIntoComponentChange = new EventEmitter(); } enter(event) { if (this.active && !this.disabled) { if (this.popLocation) { const image = event.target.children[0]; const popper = event.target.children[1]; const rect = image.parentNode.getBoundingClientRect(); if (!this.origWidth && !this.origHeight) { this.origWidth = image.parentNode.clientWidth; this.origHeight = image.parentNode.clientHeight; image.parentNode.style.width = this.origWidth + "px"; image.parentNode.style.height = this.origHeight + "px"; } popper.parentNode.style.overflow = 'inherit'; popper.style.display = 'table'; switch (this.popLocation) { case 'left': popper.style.right = (rect.width + 20) + 'px'; popper.style.top = (((1 - this.magnification) * this.origHeight) / 2) + 'px'; break; case 'right': popper.style.left = (rect.width + 20) + 'px'; popper.style.top = (((1 - this.magnification) * this.origHeight) / 2) + 'px'; break; case 'top': popper.style.bottom = (rect.height + 20) + 'px'; popper.style.left = (((1 - this.magnification) * this.origWidth) / 2) + 'px'; break; case 'bottom': popper.style.top = (rect.height + 20) + 'px'; popper.style.left = (((1 - this.magnification) * this.origWidth) / 2) + 'px'; break; } } else if (this.magnification) { const image = event.target.children[0]; if (!this.origWidth && !this.origHeight) { this.origWidth = image.parentNode.clientWidth; this.origHeight = image.parentNode.clientHeight; image.parentNode.style.width = this.origWidth + "px"; image.parentNode.style.height = this.origHeight + "px"; } this.width = (this.origWidth * this.magnification * 2) + 'px'; this.height = (this.origHeight * this.magnification * 2) + 'px'; image.style.position = "absolute"; } this.change(event); } } hoverOut(event) { if (this.active && !this.disabled) { if (this.popLocation) { const popper = event.target.children[1]; popper.style.display = 'none'; } else if (this.magnification) { const image = event.target.tagName === 'IMG' ? event.target : event.target.children[0]; if (image) { this.width = this.origWidth + 'px'; this.height = this.origHeight + 'px'; image.style.position = "relative"; image.style.left = "0"; image.style.top = "0"; } } this.change(event); } } hoverViewPort(event) { if (this.active && !this.disabled) { if (this.magnification && !this.popLocation) { const image = event.target.tagName === 'IMG' ? event.target : event.target.children[0]; if (image) { image.style.top = -(event.layerY * this.magnification) + "px"; image.style.left = -(event.layerX * this.magnification) + "px"; } } } } static settingsPatterns() { return ['image:::::']; //width, height, alt text, magnify, popup } transform(source, data, args) { this.source = source; this.width = (args && args.length) ? args[0] : "auto"; this.height = (args && args.length > 1) ? args[1] : "auto"; this.alt = (args && args.length > 2) ? args[2] : ""; this.magnification = (args && args.length > 3) ? parseInt(args[3], 10) : 1; this.popLocation = (args && args.length > 4) ? args[4] : undefined; this.magnification = this.magnification < 0 ? 0 : this.magnification; if ((typeof source === "string") || !(source instanceof Array)) { if (!this.alt || !this.alt.length) { const q = source.indexOf("?"); const t = q < 0 ? source : source.substring(0, q); const d = t.lastIndexOf("/"); this.alt = d < 0 ? t : t.substring(d + 1); } } } change(event) { if (!this.disabled) { this.onIntoComponentChange.emit({ id: this.id, name: this.name, value: this.source, type: event.type, item: { x: event.layerX, y: event.layerY } }); } } } ImageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); ImageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ImageComponent, selector: "image-component", host: { listeners: { "mouseenter": "enter($event)", "mouseout": "hoverOut($event)", "mousemove": "hoverViewPort($event)" } }, ngImport: i0, template: `<img [src]="source" [style.width]="width" [style.height]="height" [title]="alt" /> <img *ngIf="popLocation" [src]="source" class='popper' [style.width]="(origWidth * magnification) + 'px'" [style.height]="(origHeight * magnification) + 'px'" />`, isInline: true, styles: [":host{display:block;overflow:hidden;margin:0;position:relative;float:left;min-width:var(--sedeh-min-width, 25px);min-height:var(--sedeh-min-height, 25px)}:host .popper{position:absolute;pointer-events:none;display:none;z-index:2;border:2px solid;box-shadow:var(--sedeh-box-shadow, 3px 3px 3px #999);border-radius:4px}:host img{position:relative;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ImageComponent, decorators: [{ type: Component, args: [{ selector: 'image-component', template: `<img [src]="source" [style.width]="width" [style.height]="height" [title]="alt" /> <img *ngIf="popLocation" [src]="source" class='popper' [style.width]="(origWidth * magnification) + 'px'" [style.height]="(origHeight * magnification) + 'px'" />`, styles: [":host{display:block;overflow:hidden;margin:0;position:relative;float:left;min-width:var(--sedeh-min-width, 25px);min-height:var(--sedeh-min-height, 25px)}:host .popper{position:absolute;pointer-events:none;display:none;z-index:2;border:2px solid;box-shadow:var(--sedeh-box-shadow, 3px 3px 3px #999);border-radius:4px}:host img{position:relative;pointer-events:none}\n"] }] }], propDecorators: { enter: [{ type: HostListener, args: ['mouseenter', ['$event']] }], hoverOut: [{ type: HostListener, args: ['mouseout', ['$event']] }], hoverViewPort: [{ type: HostListener, args: ['mousemove', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW50by1waXBlcy9zcmMvbGliL2ltYWdlL2ltYWdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQW1CdEUsTUFBTSxPQUFPLGNBQWM7SUFoQjNCO1FBc0JJLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBS2xCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLGFBQVEsR0FBRyxDQUFDLElBQVMsRUFBRSxRQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQztRQUU5QywwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0tBa0g5QztJQS9HQSxLQUFLLENBQUMsS0FBVTtRQUNULElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUM7WUFDOUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNsQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO29CQUM5QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENB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QUFDLE1BQU0sQ0FBQztRQUN0RCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzNELElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVuRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDckUsSUFBSSxDQUFDLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksS0FBSyxDQUFDLEVBQUU7WUFDNUQsSUFBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDOUIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNDO1NBQ0o7SUFDTCxDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQVU7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO2dCQUM1QixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUNoQixJQUFJLEVBQUUsRUFBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBQzthQUMzQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7OzRHQWhJUSxjQUFjO2dHQUFkLGNBQWMscUxBZGI7Ozs7Ozs7Z0VBT2tEOzRGQU9uRCxjQUFjO2tCQWhCMUIsU0FBUzsrQkFDSSxpQkFBaUIsWUFDakI7Ozs7Ozs7Z0VBT2tEOzhCQXlCL0QsS0FBSztzQkFERCxZQUFZO3VCQUFDLFlBQVksRUFBQyxDQUFDLFFBQVEsQ0FBQztnQkFpRHhDLFFBQVE7c0JBREosWUFBWTt1QkFBQyxVQUFVLEVBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBb0J0QyxhQUFhO3NCQURULFlBQVk7dUJBQUMsV0FBVyxFQUFDLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQaXBlQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vY29tbW9uL3BpcGUuY29tcG9uZW50LmludGVyZmFjZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnaW1hZ2UtY29tcG9uZW50JyxcclxuICAgIHRlbXBsYXRlOiBgPGltZyBbc3JjXT1cInNvdXJjZVwiIFxyXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiIFxyXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0XCIgXHJcbiAgICAgICAgW3RpdGxlXT1cImFsdFwiIC8+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cInBvcExvY2F0aW9uXCIgXHJcbiAgICAgICAgW3NyY109XCJzb3VyY2VcIiBjbGFzcz0ncG9wcGVyJ1xyXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCIob3JpZ1dpZHRoICogbWFnbmlmaWNhdGlvbikgKyAncHgnXCIgXHJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCIob3JpZ0hlaWdodCAqIG1hZ25pZmljYXRpb24pICsgJ3B4J1wiIC8+YCxcclxuICAgIHN0eWxlczogW2BcclxuICAgIDpob3N0IHtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjttYXJnaW46MDtwb3NpdGlvbjpyZWxhdGl2ZTtmbG9hdDpsZWZ0O21pbi13aWR0aDogdmFyKC0tc2VkZWgtbWluLXdpZHRoLCAyNXB4KTttaW4taGVpZ2h0OiB2YXIoLS1zZWRlaC1taW4taGVpZ2h0LCAyNXB4KX1cclxuICAgIDpob3N0IC5wb3BwZXJ7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6IG5vbmU7ZGlzcGxheTogbm9uZTt6LWluZGV4OjI7Ym9yZGVyOjJweCBzb2xpZDtib3gtc2hhZG93OiB2YXIoLS1zZWRlaC1ib3gtc2hhZG93LCAzcHggM3B4IDNweCAjOTk5KTtib3JkZXItcmFkaXVzOiA0cHh9XHJcbiAgICA6aG9zdCBpbWd7cG9zaXRpb246cmVsYXRpdmU7cG9pbnRlci1ldmVudHM6IG5vbmU7fVxyXG4gICAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEltYWdlQ29tcG9uZW50IGltcGxlbWVudHMgUGlwZUNvbXBvbmVudEludGVyZmFjZSB7XHJcbiAgICBzb3VyY2UhOiBzdHJpbmc7XHJcblx0aWQhOiBzdHJpbmc7XHJcblx0bmFtZSE6IHN0cmluZztcclxuICAgIG9yaWdXaWR0aCE6IG51bWJlcjtcclxuICAgIG9yaWdIZWlnaHQhOiBudW1iZXI7XHJcbiAgICBtYWduaWZpY2F0aW9uID0gMDtcclxuICAgIHBvcExvY2F0aW9uITogc3RyaW5nO1xyXG4gICAgd2lkdGghOiBzdHJpbmc7XHJcbiAgICBoZWlnaHQhOiBzdHJpbmc7XHJcbiAgICBhbHQhOiBzdHJpbmc7XHJcbiAgICBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgYWN0aXZlID0gdHJ1ZTtcclxuICAgIHZhbGlkYXRlID0gKGl0ZW06IGFueSwgbmV3VmFsdWU6IGFueSkgPT4gdHJ1ZTtcclxuXHJcbiAgICBvbkludG9Db21wb25lbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBcclxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInLFsnJGV2ZW50J10pXHJcblx0ZW50ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSAmJiAhdGhpcy5kaXNhYmxlZCl7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IGV2ZW50LnRhcmdldC5jaGlsZHJlblswXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvcHBlciA9IGV2ZW50LnRhcmdldC5jaGlsZHJlblsxXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBpbWFnZS5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9yaWdXaWR0aCAmJiAhdGhpcy5vcmlnSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmlnV2lkdGggPSBpbWFnZS5wYXJlbnROb2RlLmNsaWVudFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3JpZ0hlaWdodCA9IGltYWdlLnBhcmVudE5vZGUuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlLnBhcmVudE5vZGUuc3R5bGUud2lkdGggPSB0aGlzLm9yaWdXaWR0aCArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZS5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCA9IHRoaXMub3JpZ0hlaWdodCArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBvcHBlci5wYXJlbnROb2RlLnN0eWxlLm92ZXJmbG93ID0gJ2luaGVyaXQnO1xyXG4gICAgICAgICAgICAgICAgcG9wcGVyLnN0eWxlLmRpc3BsYXkgPSAndGFibGUnO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBvcExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGVmdCcgOiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9wcGVyLnN0eWxlLnJpZ2h0ID0gKHJlY3Qud2lkdGggKyAyMCkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3BwZXIuc3R5bGUudG9wID0gKCgoMSAtIHRoaXMubWFnbmlmaWNhdGlvbikgKiB0aGlzLm9yaWdIZWlnaHQpIC8gMikgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdyaWdodCc6IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3BwZXIuc3R5bGUubGVmdCA9IChyZWN0LndpZHRoICsgMjApICArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHBlci5zdHlsZS50b3AgPSAoKCgxIC0gdGhpcy5tYWduaWZpY2F0aW9uKSAqIHRoaXMub3JpZ0hlaWdodCkgLyAyKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvcCcgIDogXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHBlci5zdHlsZS5ib3R0b20gPSAocmVjdC5oZWlnaHQgKyAyMCkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3BwZXIuc3R5bGUubGVmdCA9ICgoKDEgLSB0aGlzLm1hZ25pZmljYXRpb24pICogdGhpcy5vcmlnV2lkdGgpIC8gMikgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdib3R0b20nOiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9wcGVyLnN0eWxlLnRvcCA9IChyZWN0LmhlaWdodCArIDIwKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHBlci5zdHlsZS5sZWZ0ID0gKCgoMSAtIHRoaXMubWFnbmlmaWNhdGlvbikgKiB0aGlzLm9yaWdXaWR0aCkgLyAyKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWFnbmlmaWNhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBldmVudC50YXJnZXQuY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3JpZ1dpZHRoICYmICF0aGlzLm9yaWdIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9yaWdXaWR0aCA9IGltYWdlLnBhcmVudE5vZGUuY2xpZW50V2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmlnSGVpZ2h0ID0gaW1hZ2UucGFyZW50Tm9kZS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2UucGFyZW50Tm9kZS5zdHlsZS53aWR0aCA9IHRoaXMub3JpZ1dpZHRoICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0ID0gdGhpcy5vcmlnSGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9ICh0aGlzLm9yaWdXaWR0aCAqIHRoaXMuIG1hZ25pZmljYXRpb24gKiAyKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9ICh0aGlzLm9yaWdIZWlnaHQgKiB0aGlzLiBtYWduaWZpY2F0aW9uICogMikgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgaW1hZ2Uuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2UoZXZlbnQpO1xyXG4gICAgICAgIH1cclxuXHR9XHJcbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZW91dCcsWyckZXZlbnQnXSlcclxuXHRob3Zlck91dChldmVudDogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlICYmICF0aGlzLmRpc2FibGVkKXtcclxuICAgICAgICAgICAgaWYgKHRoaXMucG9wTG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvcHBlciA9IGV2ZW50LnRhcmdldC5jaGlsZHJlblsxXTtcclxuICAgICAgICAgICAgICAgIHBvcHBlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWFnbmlmaWNhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBldmVudC50YXJnZXQudGFnTmFtZSA9PT0gJ0lNRycgPyBldmVudC50YXJnZXQgOiBldmVudC50YXJnZXQuY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5vcmlnV2lkdGggKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5vcmlnSGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZS5zdHlsZS5sZWZ0ID0gXCIwXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2Uuc3R5bGUudG9wID0gXCIwXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2UoZXZlbnQpO1xyXG4gICAgICAgIH1cclxuXHR9XHJcbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZW1vdmUnLFsnJGV2ZW50J10pXHJcblx0aG92ZXJWaWV3UG9ydChldmVudDogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlICYmICF0aGlzLmRpc2FibGVkKXtcclxuICAgICAgICAgICAgaWYgKHRoaXMubWFnbmlmaWNhdGlvbiAmJiAhdGhpcy5wb3BMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBldmVudC50YXJnZXQudGFnTmFtZSA9PT0gJ0lNRycgPyBldmVudC50YXJnZXQgOiBldmVudC50YXJnZXQuY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZS5zdHlsZS50b3AgPSAtKGV2ZW50LmxheWVyWSAqIHRoaXMuIG1hZ25pZmljYXRpb24pICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlLnN0eWxlLmxlZnQgPSAtKGV2ZW50LmxheWVyWCAqIHRoaXMuIG1hZ25pZmljYXRpb24pICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cdH1cclxuICAgIHN0YXRpYyBzZXR0aW5nc1BhdHRlcm5zKCkge1xyXG4gICAgICAgIHJldHVybiBbJ2ltYWdlOjo6OjonXTsgLy93aWR0aCwgaGVpZ2h0LCBhbHQgdGV4dCwgbWFnbmlmeSwgcG9wdXBcclxuICAgIH1cclxuICAgIHRyYW5zZm9ybShzb3VyY2U6IGFueSwgZGF0YTogYW55LCBhcmdzOiBhbnlbXSkge1xyXG5cclxuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcclxuICAgICAgICB0aGlzLndpZHRoID0gKGFyZ3MgJiYgYXJncy5sZW5ndGgpID8gYXJnc1swXSA6IFwiYXV0b1wiO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gKGFyZ3MgJiYgYXJncy5sZW5ndGggPiAxKSA/IGFyZ3NbMV0gOiBcImF1dG9cIjtcclxuICAgICAgICB0aGlzLmFsdCA9IChhcmdzICYmIGFyZ3MubGVuZ3RoID4gMikgPyBhcmdzWzJdIDogXCJcIjtcclxuICAgICAgICB0aGlzLm1hZ25pZmljYXRpb24gPSAoYXJncyAmJiBhcmdzLmxlbmd0aCA+IDMpID8gcGFyc2VJbnQoYXJnc1szXSwxMCkgOiAxO1xyXG4gICAgICAgIHRoaXMucG9wTG9jYXRpb24gPSAoYXJncyAmJiBhcmdzLmxlbmd0aCA+IDQpID8gYXJnc1s0XSA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgdGhpcy5tYWduaWZpY2F0aW9uID0gdGhpcy5tYWduaWZpY2F0aW9uIDwgMCA/IDAgOiB0aGlzLm1hZ25pZmljYXRpb247XHJcbiAgICAgICAgaWYgKCh0eXBlb2Ygc291cmNlID09PSBcInN0cmluZ1wiKSB8fCAhKHNvdXJjZSBpbnN0YW5jZW9mIEFycmF5KSkge1xyXG4gICAgICAgICAgICBpZighdGhpcy5hbHQgfHwgIXRoaXMuYWx0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcSA9IHNvdXJjZS5pbmRleE9mKFwiP1wiKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBxIDwgMCA/IHNvdXJjZSA6IHNvdXJjZS5zdWJzdHJpbmcoMCwgcSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gdC5sYXN0SW5kZXhPZihcIi9cIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsdCA9IGQgPCAwID8gdCA6IHQuc3Vic3RyaW5nKGQrMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uSW50b0NvbXBvbmVudENoYW5nZS5lbWl0KHtcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuc291cmNlLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogZXZlbnQudHlwZSxcclxuICAgICAgICAgICAgICAgIGl0ZW06IHt4OiBldmVudC5sYXllclgsIHk6IGV2ZW50LmxheWVyWX1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==