UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

145 lines (143 loc) 22.2 kB
/* MIT License Copyright (c) 2019 Temainfo Software Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { Md5 } from 'ts-md5/dist/md5'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "../icons/icons"; import * as i3 from "./parts/image/image.component"; export class TlAvatar { constructor() { this.shape = 'square'; this.size = '100px'; this.gender = 'male'; this.color = 'basic'; this.selected = new EventEmitter(); this.type = 'gender'; } ngOnInit() { this.defineType(); } defineType() { if (this.isSrc()) { this.setSrc(); return; } if (this.isGravatar()) { this.setGravatar(); return; } if (this.isIcon()) { this.setIcon(); return; } if (this.isText()) { this.setText(); return; } if (this.isChar()) { this.setChar(); return; } } isSrc() { return this.src && this.src !== ''; } isGravatar() { return this.gravatar && this.gravatar !== ''; } isIcon() { return this.icon && this.icon !== ''; } isText() { return this.text && this.text !== ''; } isChar() { return this.char && this.char !== ''; } setSrc() { this.type = 'src'; } setGravatar() { const sizeGravatar = (this.isPercentage()) ? '200px' : this.size; this.gravatarImg = `http://www.gravatar.com/avatar/${Md5.hashStr(this.gravatar)}?s=${sizeGravatar}&d=mm`; this.type = 'gravatar'; } setIcon() { this.multiplierIcon = (this.isPercentage()) ? 25 : 0.7; this.type = 'icon'; } setText() { this.multiplierText = (this.isPercentage()) ? 8 : 0.2; this.fontSize = (this.isOneCharacter()) ? '2em' : '1em'; this.type = 'text'; } setChar() { this.multiplierText = (this.isPercentage()) ? 8 : 0.2; this.fontSize = '2em'; this.type = 'char'; this.char = this.char.substr(0, 1).toUpperCase(); } isPercentage() { return this.size.substr(this.size.length - 1) === '%'; } isOneCharacter() { return this.text && this.text.length === 1; } selectedAvatar($event) { this.selected.emit($event); } ngOnChanges(changes) { if (changes['gravatar']) { this.defineType(); } } } /** @nocollapse */ TlAvatar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlAvatar, deps: [], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ TlAvatar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TlAvatar, selector: "tl-avatar", inputs: { shape: "shape", size: "size", src: "src", gravatar: "gravatar", icon: "icon", text: "text", char: "char", fontColor: "fontColor", bgColor: "bgColor", gender: "gender", color: "color" }, outputs: { selected: "selected" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"type === 'src'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [ngStyle]=\"{'background-image' : 'url(' + src + ')',\n 'background-repeat' : 'no-repeat',\n 'background-size' : 'cover',\n 'background-position': 'center'}\">\n</div>\n<div *ngIf=\"type === 'gravatar'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"!isPercentage() ? size : null\">\n <img [src]=\"gravatarImg\" [style.width]=\"size\" [class]=\"shape\">\n</div>\n<div *ngIf=\"type === 'icon'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [style.background]=\"bgColor\">\n <tl-icon [ngStyle]=\"{'font-size': 'calc(' + size + ' * ' + multiplierIcon + ')'}\" [style.color]=\"fontColor\">{{ icon }}</tl-icon>\n</div>\n<div *ngIf=\"type === 'text'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [style.background]=\"bgColor\">\n <div [ngStyle]=\"{'font-size': 'calc(' + size + ' * ' + multiplierText + ')'}\">\n <span [ngStyle]=\"{'font-size': fontSize}\" [style.color]=\"fontColor\">{{ text }}</span>\n </div>\n</div>\n<div *ngIf=\"type === 'char'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [style.background]=\"bgColor\">\n <div [ngStyle]=\"{'font-size': 'calc(' + size + ' * ' + multiplierText + ')'}\">\n <span [ngStyle]=\"{'font-size': fontSize}\" [style.color]=\"fontColor\">{{ char }}</span>\n </div>\n</div>\n<div *ngIf=\"type === 'gender'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\">\n <tl-image [size]=\"size\" [gender]=\"gender\" [shape]=\"shape\"></tl-image>\n</div>\n", styles: [".tl-avatar{display:inline-block;position:relative}.tl-avatar tl-icon,span{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.square{border-radius:3px}.circle{border-radius:50%}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.TlIcons, selector: "tl-icon", inputs: ["icon", "lib", "style", "size", "animation", "color", "align"] }, { kind: "component", type: i3.ImageComponent, selector: "tl-image", inputs: ["size", "gender", "shape"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlAvatar, decorators: [{ type: Component, args: [{ selector: 'tl-avatar', template: "<div *ngIf=\"type === 'src'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [ngStyle]=\"{'background-image' : 'url(' + src + ')',\n 'background-repeat' : 'no-repeat',\n 'background-size' : 'cover',\n 'background-position': 'center'}\">\n</div>\n<div *ngIf=\"type === 'gravatar'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"!isPercentage() ? size : null\">\n <img [src]=\"gravatarImg\" [style.width]=\"size\" [class]=\"shape\">\n</div>\n<div *ngIf=\"type === 'icon'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [style.background]=\"bgColor\">\n <tl-icon [ngStyle]=\"{'font-size': 'calc(' + size + ' * ' + multiplierIcon + ')'}\" [style.color]=\"fontColor\">{{ icon }}</tl-icon>\n</div>\n<div *ngIf=\"type === 'text'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [style.background]=\"bgColor\">\n <div [ngStyle]=\"{'font-size': 'calc(' + size + ' * ' + multiplierText + ')'}\">\n <span [ngStyle]=\"{'font-size': fontSize}\" [style.color]=\"fontColor\">{{ text }}</span>\n </div>\n</div>\n<div *ngIf=\"type === 'char'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\"\n [style.height]=\"size\"\n [style.background]=\"bgColor\">\n <div [ngStyle]=\"{'font-size': 'calc(' + size + ' * ' + multiplierText + ')'}\">\n <span [ngStyle]=\"{'font-size': fontSize}\" [style.color]=\"fontColor\">{{ char }}</span>\n </div>\n</div>\n<div *ngIf=\"type === 'gender'\"\n [class]=\"'tl-avatar ' + color + ' ' + shape\"\n [style.width]=\"size\">\n <tl-image [size]=\"size\" [gender]=\"gender\" [shape]=\"shape\"></tl-image>\n</div>\n", styles: [".tl-avatar{display:inline-block;position:relative}.tl-avatar tl-icon,span{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.square{border-radius:3px}.circle{border-radius:50%}\n"] }] }], ctorParameters: function () { return []; }, propDecorators: { shape: [{ type: Input }], size: [{ type: Input }], src: [{ type: Input }], gravatar: [{ type: Input }], icon: [{ type: Input }], text: [{ type: Input }], char: [{ type: Input }], fontColor: [{ type: Input }], bgColor: [{ type: Input }], gender: [{ type: Input }], color: [{ type: Input }], selected: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvYXZhdGFyL2F2YXRhci50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL2F2YXRhci9hdmF0YXIuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFvQkU7QUFFRixPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFPdEMsTUFBTSxPQUFPLFFBQVE7SUFvQ25CO1FBbENTLFVBQUssR0FBRyxRQUFRLENBQUM7UUFFakIsU0FBSSxHQUFHLE9BQU8sQ0FBQztRQWdCZixXQUFNLEdBQXNCLE1BQU0sQ0FBQztRQUVuQyxVQUFLLEdBQUcsT0FBTyxDQUFDO1FBRWYsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXpELFNBQUksR0FBRyxRQUFRLENBQUM7SUFVUCxDQUFDO0lBRWpCLFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRztZQUNsQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxPQUFPO1NBQ1I7UUFDRCxJQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRztZQUN2QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsT0FBTztTQUNSO1FBQ0QsSUFBSyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUc7WUFDbkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsT0FBTztTQUNSO1FBQ0QsSUFBSyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUc7WUFDbkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsT0FBTztTQUNSO1FBQ0QsSUFBSyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUc7WUFDbkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsT0FBTztTQUNSO0lBQ0gsQ0FBQztJQUVPLEtBQUs7UUFDWCxPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVPLFVBQVU7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFTyxNQUFNO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxNQUFNO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxNQUFNO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVPLFdBQVc7UUFDakIsTUFBTSxZQUFZLEdBQUcsQ0FBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25FLElBQUksQ0FBQyxXQUFXLEdBQUcsa0NBQWtDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLFlBQVksT0FBTyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxPQUFPO1FBQ2IsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN6RCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRU8sT0FBTztRQUNiLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDeEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRU8sT0FBTztRQUNiLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDeEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVNLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7SUFDeEQsQ0FBQztJQUVPLGNBQWM7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQU07UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVcsQ0FBRSxPQUFPO1FBQ2xCLElBQUssT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFHO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7O3lIQWpJVSxRQUFROzZHQUFSLFFBQVEsNlNDckNyQiwyM0RBNkNBOzRGRFJhLFFBQVE7a0JBTHBCLFNBQVM7K0JBQ0UsV0FBVzswRUFNWixLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVHLEdBQUc7c0JBQVgsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgTUlUIExpY2Vuc2VcblxuICAgIENvcHlyaWdodCAoYykgMjAxOSBUZW1haW5mbyBTb2Z0d2FyZVxuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICAgIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAgICBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gICAgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICAgIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICAgIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gICAgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gICAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gICAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgICBTT0ZUV0FSRS5cbiovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1kNSB9IGZyb20gJ3RzLW1kNS9kaXN0L21kNSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RsLWF2YXRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdmF0YXIuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2F2YXRhci5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRsQXZhdGFyIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpIHNoYXBlID0gJ3NxdWFyZSc7XG5cbiAgQElucHV0KCkgc2l6ZSA9ICcxMDBweCc7XG5cbiAgQElucHV0KCkgc3JjOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgZ3JhdmF0YXI6IHN0cmluZztcblxuICBASW5wdXQoKSBpY29uOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgdGV4dDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGNoYXI6IHN0cmluZztcblxuICBASW5wdXQoKSBmb250Q29sb3I6IHN0cmluZztcblxuICBASW5wdXQoKSBiZ0NvbG9yOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgZ2VuZGVyOiAnZmVtYWxlJyB8ICdtYWxlJyA9ICdtYWxlJztcblxuICBASW5wdXQoKSBjb2xvciA9ICdiYXNpYyc7XG5cbiAgQE91dHB1dCgpIHNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHB1YmxpYyB0eXBlID0gJ2dlbmRlcic7XG5cbiAgcHVibGljIG11bHRpcGxpZXJJY29uO1xuXG4gIHB1YmxpYyBtdWx0aXBsaWVyVGV4dDtcblxuICBwdWJsaWMgZm9udFNpemU7XG5cbiAgcHVibGljIGdyYXZhdGFySW1nO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kZWZpbmVUeXBlKCk7XG4gIH1cblxuICBkZWZpbmVUeXBlKCkge1xuICAgIGlmICggdGhpcy5pc1NyYygpICkge1xuICAgICAgdGhpcy5zZXRTcmMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCB0aGlzLmlzR3JhdmF0YXIoKSApIHtcbiAgICAgIHRoaXMuc2V0R3JhdmF0YXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCB0aGlzLmlzSWNvbigpICkge1xuICAgICAgdGhpcy5zZXRJY29uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICggdGhpcy5pc1RleHQoKSApIHtcbiAgICAgIHRoaXMuc2V0VGV4dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIHRoaXMuaXNDaGFyKCkgKSB7XG4gICAgICB0aGlzLnNldENoYXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzU3JjKCkge1xuICAgIHJldHVybiB0aGlzLnNyYyAmJiB0aGlzLnNyYyAhPT0gJyc7XG4gIH1cblxuICBwcml2YXRlIGlzR3JhdmF0YXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhdmF0YXIgJiYgdGhpcy5ncmF2YXRhciAhPT0gJyc7XG4gIH1cblxuICBwcml2YXRlIGlzSWNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pY29uICYmIHRoaXMuaWNvbiAhPT0gJyc7XG4gIH1cblxuICBwcml2YXRlIGlzVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJyc7XG4gIH1cblxuICBwcml2YXRlIGlzQ2hhcigpIHtcbiAgICByZXR1cm4gdGhpcy5jaGFyICYmIHRoaXMuY2hhciAhPT0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldFNyYygpIHtcbiAgICB0aGlzLnR5cGUgPSAnc3JjJztcbiAgfVxuXG4gIHByaXZhdGUgc2V0R3JhdmF0YXIoKSB7XG4gICAgY29uc3Qgc2l6ZUdyYXZhdGFyID0gKCB0aGlzLmlzUGVyY2VudGFnZSgpICkgPyAnMjAwcHgnIDogdGhpcy5zaXplO1xuICAgIHRoaXMuZ3JhdmF0YXJJbWcgPSBgaHR0cDovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyLyR7TWQ1Lmhhc2hTdHIodGhpcy5ncmF2YXRhcil9P3M9JHtzaXplR3JhdmF0YXJ9JmQ9bW1gO1xuICAgIHRoaXMudHlwZSA9ICdncmF2YXRhcic7XG4gIH1cblxuICBwcml2YXRlIHNldEljb24oKSB7XG4gICAgdGhpcy5tdWx0aXBsaWVySWNvbiA9ICggdGhpcy5pc1BlcmNlbnRhZ2UoKSApID8gMjUgOiAwLjc7XG4gICAgdGhpcy50eXBlID0gJ2ljb24nO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUZXh0KCkge1xuICAgIHRoaXMubXVsdGlwbGllclRleHQgPSAoIHRoaXMuaXNQZXJjZW50YWdlKCkgKSA/IDggOiAwLjI7XG4gICAgdGhpcy5mb250U2l6ZSA9ICggdGhpcy5pc09uZUNoYXJhY3RlcigpICkgPyAnMmVtJyA6ICcxZW0nO1xuICAgIHRoaXMudHlwZSA9ICd0ZXh0JztcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hhcigpIHtcbiAgICB0aGlzLm11bHRpcGxpZXJUZXh0ID0gKCB0aGlzLmlzUGVyY2VudGFnZSgpICkgPyA4IDogMC4yO1xuICAgIHRoaXMuZm9udFNpemUgPSAnMmVtJztcbiAgICB0aGlzLnR5cGUgPSAnY2hhcic7XG4gICAgdGhpcy5jaGFyID0gdGhpcy5jaGFyLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgcHVibGljIGlzUGVyY2VudGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplLnN1YnN0cih0aGlzLnNpemUubGVuZ3RoIC0gMSkgPT09ICclJztcbiAgfVxuXG4gIHByaXZhdGUgaXNPbmVDaGFyYWN0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCAmJiB0aGlzLnRleHQubGVuZ3RoID09PSAxO1xuICB9XG5cbiAgc2VsZWN0ZWRBdmF0YXIoJGV2ZW50KSB7XG4gICAgdGhpcy5zZWxlY3RlZC5lbWl0KCRldmVudCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyggY2hhbmdlcyApIHtcbiAgICBpZiAoIGNoYW5nZXNbJ2dyYXZhdGFyJ10gKSB7XG4gICAgICB0aGlzLmRlZmluZVR5cGUoKTtcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiAqbmdJZj1cInR5cGUgPT09ICdzcmMnXCJcbiAgICAgW2NsYXNzXT1cIid0bC1hdmF0YXIgJyArIGNvbG9yICsgJyAnICsgc2hhcGVcIlxuICAgICBbc3R5bGUud2lkdGhdPVwic2l6ZVwiXG4gICAgIFtzdHlsZS5oZWlnaHRdPVwic2l6ZVwiXG4gICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1pbWFnZScgICA6ICd1cmwoJyArIHNyYyArICcpJyxcbiAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtcmVwZWF0JyAgOiAnbm8tcmVwZWF0JyxcbiAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZScgICAgOiAnY292ZXInLFxuICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1wb3NpdGlvbic6ICdjZW50ZXInfVwiPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwidHlwZSA9PT0gJ2dyYXZhdGFyJ1wiXG4gICAgIFtjbGFzc109XCIndGwtYXZhdGFyICcgKyBjb2xvciArICcgJyArIHNoYXBlXCJcbiAgICAgW3N0eWxlLndpZHRoXT1cInNpemVcIlxuICAgICBbc3R5bGUuaGVpZ2h0XT1cIiFpc1BlcmNlbnRhZ2UoKSA/IHNpemUgOiBudWxsXCI+XG4gIDxpbWcgW3NyY109XCJncmF2YXRhckltZ1wiIFtzdHlsZS53aWR0aF09XCJzaXplXCIgW2NsYXNzXT1cInNoYXBlXCI+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJ0eXBlID09PSAnaWNvbidcIlxuICAgICBbY2xhc3NdPVwiJ3RsLWF2YXRhciAnICsgY29sb3IgKyAnICcgKyBzaGFwZVwiXG4gICAgIFtzdHlsZS53aWR0aF09XCJzaXplXCJcbiAgICAgW3N0eWxlLmhlaWdodF09XCJzaXplXCJcbiAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiYmdDb2xvclwiPlxuICA8dGwtaWNvbiBbbmdTdHlsZV09XCJ7J2ZvbnQtc2l6ZSc6ICdjYWxjKCcgKyBzaXplICsgJyAqICcgKyBtdWx0aXBsaWVySWNvbiArICcpJ31cIiBbc3R5bGUuY29sb3JdPVwiZm9udENvbG9yXCI+e3sgaWNvbiB9fTwvdGwtaWNvbj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cInR5cGUgPT09ICd0ZXh0J1wiXG4gICAgIFtjbGFzc109XCIndGwtYXZhdGFyICcgKyBjb2xvciArICcgJyArIHNoYXBlXCJcbiAgICAgW3N0eWxlLndpZHRoXT1cInNpemVcIlxuICAgICBbc3R5bGUuaGVpZ2h0XT1cInNpemVcIlxuICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJiZ0NvbG9yXCI+XG4gIDxkaXYgW25nU3R5bGVdPVwieydmb250LXNpemUnOiAnY2FsYygnICsgc2l6ZSArICcgKiAnICsgbXVsdGlwbGllclRleHQgKyAnKSd9XCI+XG4gICAgPHNwYW4gW25nU3R5bGVdPVwieydmb250LXNpemUnOiBmb250U2l6ZX1cIiBbc3R5bGUuY29sb3JdPVwiZm9udENvbG9yXCI+e3sgdGV4dCB9fTwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJ0eXBlID09PSAnY2hhcidcIlxuICAgICBbY2xhc3NdPVwiJ3RsLWF2YXRhciAnICsgY29sb3IgKyAnICcgKyBzaGFwZVwiXG4gICAgIFtzdHlsZS53aWR0aF09XCJzaXplXCJcbiAgICAgW3N0eWxlLmhlaWdodF09XCJzaXplXCJcbiAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiYmdDb2xvclwiPlxuICA8ZGl2IFtuZ1N0eWxlXT1cInsnZm9udC1zaXplJzogJ2NhbGMoJyArIHNpemUgKyAnICogJyArIG11bHRpcGxpZXJUZXh0ICsgJyknfVwiPlxuICAgIDxzcGFuIFtuZ1N0eWxlXT1cInsnZm9udC1zaXplJzogZm9udFNpemV9XCIgW3N0eWxlLmNvbG9yXT1cImZvbnRDb2xvclwiPnt7IGNoYXIgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwidHlwZSA9PT0gJ2dlbmRlcidcIlxuICAgICBbY2xhc3NdPVwiJ3RsLWF2YXRhciAnICsgY29sb3IgKyAnICcgKyBzaGFwZVwiXG4gICAgIFtzdHlsZS53aWR0aF09XCJzaXplXCI+XG4gIDx0bC1pbWFnZSBbc2l6ZV09XCJzaXplXCIgW2dlbmRlcl09XCJnZW5kZXJcIiBbc2hhcGVdPVwic2hhcGVcIj48L3RsLWltYWdlPlxuPC9kaXY+XG4iXX0=