UNPKG

iris-ds

Version:

Joveo iris libray

137 lines 22.3 kB
import { Component, Input, ViewChild } from '@angular/core'; // Old CODE // <div class="dropzone-container"> // <h5 class="w500">{{title}}</h5> // <p class="subtitle2 mt-1 mb-4">{{subtitle}}</p> // <div class="progress" #progressBar > // </div> // <div> // <div DragDrop class="dropzone" (filesChangeEmiter)="onFileChange($event)"> // <div class="text-wrapper"> // <div class="centered"> // <input type="file" name="file" id="file" (change)="onFileChange($event.target.files)" multiple> // <label for="file"><span class="textLink">Choose a file</span> or Drag it here!</label> // </div> // </div> // </div> // </div> // <hr> // <div> // <h3 mat-subheader>Files</h3> // <div *ngFor="let file of files"> // <div>{{file.name}}</div> // <button color="warn" (click)="deleteFile(file)">Delete</button> // </div> // </div> // </div> export class DropzoneComponent { constructor() { this.files = []; this.src = ''; this.title = ''; this.subtitle = ''; this.backgroundType = 'solid'; this.size = 'medium'; this.imgStyles = {}; this.nameStyles = {}; this.progressState = 'verify'; this.alt = ''; this.bgColors = [ 'red', 'pink', 'purple', 'deep-purple', 'indigo', 'blue', 'light-blue', 'cyan', 'teal', 'green', 'light-green', 'lime', 'amber', 'orange', 'deep-orange', ]; this.colorCssClass = ''; } ngAfterViewInit() { this.progressBar.nativeElement.hidden = true; //state = verify / success / error } ngOnChanges() { this.setProgress(this.ProgressPercentage); } onFileChange(pFileList) { console.log("change called"); this.files = Object.keys(pFileList).map(key => pFileList[key]); this.progressBar.nativeElement.hidden = false; // this.setProgressState('verify') } resetFileStack(event) { if (this.files.length == 0) { console.log("set dom data to null"); event.target.value = null; } } deleteFile(f) { this.files = this.files.filter(function (w) { return w.name != f.name; }); if (this.files.length == 0) { this.progressBar.nativeElement.hidden = true; } } setProgress(progresspercentage) { const totalLength = (this.progressBar.nativeElement.offsetWidth * 2) + (this.progressBar.nativeElement.offsetHeight * 2); const input = (progresspercentage > 100) ? 100 : progresspercentage; const borderLen = (input / 100) * totalLength; let backgroundPos; if (borderLen <= this.progressBar.nativeElement.offsetWidth) { backgroundPos = (-448 + borderLen) + 'px 0px, 448px -100px, 453px 95px, 0px 100px'; } else if (borderLen <= (this.progressBar.nativeElement.offsetWidth + this.progressBar.nativeElement.offsetHeight)) { backgroundPos = '0px 0px, 448px ' + (-100 + (borderLen - this.progressBar.nativeElement.offsetWidth)) + 'px, 453px 95px, 0px 100px'; } else if (borderLen <= (this.progressBar.nativeElement.offsetWidth * 2 + this.progressBar.nativeElement.offsetHeight)) { backgroundPos = '0px 0px, 448px 0px, ' + (448 - (borderLen - this.progressBar.nativeElement.offsetWidth - this.progressBar.nativeElement.offsetHeight)) + 'px 95px, 0px 100px'; } else { backgroundPos = '0px 0px, 448px 0px, 0px 95px, 0px ' + (100 - (borderLen - (this.progressBar.nativeElement.offsetWidth * 2) - this.progressBar.nativeElement.offsetHeight)) + 'px'; } this.progressBar.nativeElement.setAttribute("style", "background-position : " + backgroundPos); } } DropzoneComponent.decorators = [ { type: Component, args: [{ selector: 'iris-dropzone', template: ` <div class="dropzone-container"> <h5 class="iris-h5 w500">{{title}}</h5> <p class="iris-body2 mt-1 mb-4">{{subtitle}}</p> <div class="{{ 'progress ' + progressState }}" #progressBar> <div class="filenamecontainer"> <div *ngFor="let file of files"> <div class="filename">{{file.name}}</div> <button color="warn" (click)="deleteFile(file)"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M10.0003 1.66602C5.39199 1.66602 1.66699 5.39102 1.66699 9.99935C1.66699 14.6077 5.39199 18.3327 10.0003 18.3327C14.6087 18.3327 18.3337 14.6077 18.3337 9.99935C18.3337 5.39102 14.6087 1.66602 10.0003 1.66602ZM14.167 12.991L12.992 14.166L10.0003 11.1744L7.00866 14.166L5.83366 12.991L8.82533 9.99935L5.83366 7.00768L7.00866 5.83268L10.0003 8.82435L12.992 5.83268L14.167 7.00768L11.1753 9.99935L14.167 12.991Z" fill="#718096"/> </svg> </button> </div> </div> </div> <div> <div DragDrop class="dropzone" (filesChangeEmiter)="onFileChange($event)"> <div class="text-wrapper"> <div class="centered"> <input type="file" name="file" id="file" (change)="onFileChange($event.target.files)" (click)="resetFileStack($event)"> <label for="file"><span class="textLink">Choose a file</span> or Drag it here!</label> </div> </div> </div> </div> </div> `, styles: ["@charset \"UTF-8\";.iris-h6{font-size:.6rem}.iris-h5,.iris-h6{color:#212121;margin:0}.iris-h5{font-size:1.2rem}.iris-h4{font-size:1.8rem}.iris-h3,.iris-h4{color:#212121;margin:0}.iris-h3{font-size:2.4rem}.iris-h2{font-size:3rem}.iris-h1,.iris-h2{color:#212121;margin:0}.iris-h1{font-size:3.6rem}.iris-subtitle1{font-size:1rem!important;color:#424242;font-weight:500;line-height:1.2rem}.iris-subtitle2{font-size:.9rem!important;color:#424242;font-weight:500}.iris-body1{line-height:1.2rem}.iris-body1,.iris-body2{font-size:.9rem!important;color:#616161;font-weight:400}.iris-caption{font-size:.75rem}.iris-caption,.iris-overline{color:#616161;font-weight:400}.iris-overline{font-size:.65rem}.w100{font-weight:100}.w200{font-weight:200}.w400{font-weight:400}.w500{font-weight:500}.w600{font-weight:600}.w700{font-weight:700}.dropzone{height:96px;display:table;background-color:#fff}.dropzone,.dropzone-container{width:448px}input[type=file]{display:none}.textLink{color:#2196f3;font-weight:600;cursor:pointer}.text-wrapper{display:table-cell;vertical-align:middle}.centered{font-size:1rem;text-align:center;color:#616161}.fileItem{width:calc(25% - 6px);overflow:hidden;height:-moz-fit-content;height:fit-content;margin:3px;padding:10px;display:block;position:relative;float:left;border:2px dashed #789;border-radius:5px;transition:.3s ease}.fileItem:hover{border:2px solid #c33838;background-color:rgba(195,56,56,.7490196078431373)}.fileItem:hover .fileItemIcon:before{content:\"\uF00D\";color:#f5f5f5}.fileItem:hover .fileItemText{color:#f5f5f5}.fileItemIconDiv{text-align:center}.fileItemIcon:before{font-style:normal;content:\"\uF15B\";color:#789;font-family:Font Awesome\\ 5 Free;font-weight:900}.fileItemText{text-align:center;margin-top:10px;height:40px}.filename{color:#4a5568;font-weight:500;float:left}.filenamecontainer{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;background:#fff;width:calc(100% - 6px);margin-left:2px;margin-top:40px}.progress{height:100px;position:absolute;width:453px;margin-top:0;background-size:100% 5px,5px 100%,100% 5px,5px 100%!important;background-repeat:no-repeat!important;animation:progress 4s linear forwards}.progress.verify{background:linear-gradient(90deg,#42a5f5 99.99%,transparent),linear-gradient(180deg,#42a5f5 99.99%,transparent),linear-gradient(90deg,#42a5f5 99.99%,transparent),linear-gradient(180deg,#42a5f5 99.99%,transparent)}.progress.success{background:linear-gradient(90deg,#81c784 99.99%,transparent),linear-gradient(180deg,#81c784 99.99%,transparent),linear-gradient(90deg,#81c784 99.99%,transparent),linear-gradient(180deg,#81c784 99.99%,transparent)}.progress.error{background:linear-gradient(90deg,#e57373 99.99%,transparent),linear-gradient(180deg,#e57373 99.99%,transparent),linear-gradient(90deg,#e57373 99.99%,transparent),linear-gradient(180deg,#e57373 99.99%,transparent)}button{background:none;border:0;cursor:pointer}"] },] } ]; DropzoneComponent.ctorParameters = () => []; DropzoneComponent.propDecorators = { progressBar: [{ type: ViewChild, args: ['progressBar', { static: true },] }], src: [{ type: Input }], title: [{ type: Input }], subtitle: [{ type: Input }], backgroundType: [{ type: Input }], size: [{ type: Input }], imgStyles: [{ type: Input }], nameStyles: [{ type: Input }], ProgressPercentage: [{ type: Input }], progressState: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcHpvbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaXJpcy9zcmMvbGliL2Ryb3B6b25lL2Ryb3B6b25lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYyxTQUFTLEVBQTJDLE1BQU0sZUFBZSxDQUFDO0FBa0NqSCxXQUFXO0FBQ1gsbUNBQW1DO0FBQ25DLGtDQUFrQztBQUNsQyxrREFBa0Q7QUFDbEQsdUNBQXVDO0FBRXZDLFNBQVM7QUFDVCxRQUFRO0FBQ1IsK0VBQStFO0FBQy9FLGlDQUFpQztBQUNqQywrQkFBK0I7QUFDL0IsMEdBQTBHO0FBQzFHLGlHQUFpRztBQUNqRyxlQUFlO0FBQ2YsYUFBYTtBQUNiLFdBQVc7QUFDWCxTQUFTO0FBQ1QsT0FBTztBQUNQLFFBQVE7QUFDUixtQ0FBbUM7QUFDbkMsdUNBQXVDO0FBQ3ZDLG1DQUFtQztBQUNuQywwRUFBMEU7QUFDMUUsYUFBYTtBQUNiLFNBQVM7QUFDVCxTQUFTO0FBSVQsTUFBTSxPQUFPLGlCQUFpQjtJQXNCNUI7UUFyQk8sVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUdoQixRQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1QsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxtQkFBYyxHQUF1QixPQUFPLENBQUM7UUFDN0MsU0FBSSxHQUFpQyxRQUFRLENBQUE7UUFDN0MsY0FBUyxHQUErQixFQUFFLENBQUM7UUFDM0MsZUFBVSxHQUErQixFQUFFLENBQUM7UUFFNUMsa0JBQWEsR0FBbUMsUUFBUSxDQUFDO1FBRWxFLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxhQUFRLEdBQUc7WUFDVCxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU07WUFDeEQsWUFBWSxFQUFF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V0FBVyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN0SCxhQUFhLEdBQUcsc0JBQXNCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsb0JBQW9CLENBQUM7U0FDaEw7YUFBTTtZQUNMLGFBQWEsR0FBRyxvQ0FBb0MsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUNwTDtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUcsd0JBQXdCLEdBQUcsYUFBYSxDQUFDLENBQUM7SUFDcEcsQ0FBQzs7O1lBbElGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZUFBZTtnQkFDekIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCVDs7YUFFRjs7OzswQkFrQ0UsU0FBUyxTQUFDLGFBQWEsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7a0JBQ3ZDLEtBQUs7b0JBQ0wsS0FBSzt1QkFDTCxLQUFLOzZCQUNMLEtBQUs7bUJBQ0wsS0FBSzt3QkFDTCxLQUFLO3lCQUNMLEtBQUs7aUNBQ0wsS0FBSzs0QkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaXJpcy1kcm9wem9uZScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImRyb3B6b25lLWNvbnRhaW5lclwiPlxuICAgICAgPGg1IGNsYXNzPVwiaXJpcy1oNSB3NTAwXCI+e3t0aXRsZX19PC9oNT5cbiAgICAgIDxwIGNsYXNzPVwiaXJpcy1ib2R5MiBtdC0xIG1iLTRcIj57e3N1YnRpdGxlfX08L3A+XG4gICAgICA8ZGl2IGNsYXNzPVwie3sgJ3Byb2dyZXNzICcgKyBwcm9ncmVzc1N0YXRlIH19XCIgI3Byb2dyZXNzQmFyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVjb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgZmlsZXNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVcIj57e2ZpbGUubmFtZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjb2xvcj1cIndhcm5cIiAoY2xpY2spPVwiZGVsZXRlRmlsZShmaWxlKVwiPjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAuMDAwMyAxLjY2NjAyQzUuMzkxOTkgMS42NjYwMiAxLjY2Njk5IDUuMzkxMDIgMS42NjY5OSA5Ljk5OTM1QzEuNjY2OTkgMTQuNjA3NyA1LjM5MTk5IDE4LjMzMjcgMTAuMDAwMyAxOC4zMzI3QzE0LjYwODcgMTguMzMyNyAxOC4zMzM3IDE0LjYwNzcgMTguMzMzNyA5Ljk5OTM1QzE4LjMzMzcgNS4zOTEwMiAxNC42MDg3IDEuNjY2MDIgMTAuMDAwMyAxLjY2NjAyWk0xNC4xNjcgMTIuOTkxTDEyLjk5MiAxNC4xNjZMMTAuMDAwMyAxMS4xNzQ0TDcuMDA4NjYgMTQuMTY2TDUuODMzNjYgMTIuOTkxTDguODI1MzMgOS45OTkzNUw1LjgzMzY2IDcuMDA3NjhMNy4wMDg2NiA1LjgzMjY4TDEwLjAwMDMgOC44MjQzNUwxMi45OTIgNS44MzI2OEwxNC4xNjcgNy4wMDc2OEwxMS4xNzUzIDkuOTk5MzVMMTQuMTY3IDEyLjk5MVpcIiBmaWxsPVwiIzcxODA5NlwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBEcmFnRHJvcCBjbGFzcz1cImRyb3B6b25lXCIgKGZpbGVzQ2hhbmdlRW1pdGVyKT1cIm9uRmlsZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlcmVkXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIG5hbWU9XCJmaWxlXCIgaWQ9XCJmaWxlXCIgKGNoYW5nZSk9XCJvbkZpbGVDaGFuZ2UoJGV2ZW50LnRhcmdldC5maWxlcylcIiAoY2xpY2spPVwicmVzZXRGaWxlU3RhY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZmlsZVwiPjxzcGFuIGNsYXNzPVwidGV4dExpbmtcIj5DaG9vc2UgYSBmaWxlPC9zcGFuPiBvciBEcmFnIGl0IGhlcmUhPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wem9uZS5jb21wb25lbnQuc2NzcyddXG59KVxuXG4vLyBPbGQgQ09ERVxuLy8gPGRpdiBjbGFzcz1cImRyb3B6b25lLWNvbnRhaW5lclwiPlxuLy8gPGg1IGNsYXNzPVwidzUwMFwiPnt7dGl0bGV9fTwvaDU+XG4vLyA8cCBjbGFzcz1cInN1YnRpdGxlMiBtdC0xIG1iLTRcIj57e3N1YnRpdGxlfX08L3A+XG4vLyA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiAjcHJvZ3Jlc3NCYXIgPlxuXG4vLyA8L2Rpdj5cbi8vIDxkaXY+XG4vLyAgIDxkaXYgRHJhZ0Ryb3AgY2xhc3M9XCJkcm9wem9uZVwiIChmaWxlc0NoYW5nZUVtaXRlcik9XCJvbkZpbGVDaGFuZ2UoJGV2ZW50KVwiPlxuLy8gICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXdyYXBwZXJcIj5cbi8vICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXJlZFwiPlxuLy8gICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwiZmlsZVwiIGlkPVwiZmlsZVwiIChjaGFuZ2UpPVwib25GaWxlQ2hhbmdlKCRldmVudC50YXJnZXQuZmlsZXMpXCIgbXVsdGlwbGU+XG4vLyAgICAgICAgIDxsYWJlbCBmb3I9XCJmaWxlXCI+PHNwYW4gY2xhc3M9XCJ0ZXh0TGlua1wiPkNob29zZSBhIGZpbGU8L3NwYW4+IG9yIERyYWcgaXQgaGVyZSE8L2xhYmVsPlxuLy8gICAgICAgPC9kaXY+XG4vLyAgICAgPC9kaXY+XG4vLyAgIDwvZGl2PlxuLy8gPC9kaXY+XG4vLyA8aHI+XG4vLyA8ZGl2PlxuLy8gICAgIDxoMyBtYXQtc3ViaGVhZGVyPkZpbGVzPC9oMz5cbi8vICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIGZpbGVzXCI+XG4vLyAgICAgICAgIDxkaXY+e3tmaWxlLm5hbWV9fTwvZGl2PlxuLy8gICAgICAgICA8YnV0dG9uIGNvbG9yPVwid2FyblwiIChjbGljayk9XCJkZWxldGVGaWxlKGZpbGUpXCI+RGVsZXRlPC9idXR0b24+XG4vLyAgICAgPC9kaXY+XG4vLyA8L2Rpdj5cbi8vIDwvZGl2PlxuXG5cblxuZXhwb3J0IGNsYXNzIERyb3B6b25lQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2Vze1xuICBwdWJsaWMgZmlsZXM6IGFueVtdID0gW107XG5cbiAgQFZpZXdDaGlsZCgncHJvZ3Jlc3NCYXInLCB7c3RhdGljOiB0cnVlfSkgcHJvZ3Jlc3NCYXI6IEVsZW1lbnRSZWY7XG4gIEBJbnB1dCgpIHNyYyA9ICcnO1xuICBASW5wdXQoKSB0aXRsZSA9ICcnO1xuICBASW5wdXQoKSBzdWJ0aXRsZSA9ICcnO1xuICBASW5wdXQoKSBiYWNrZ3JvdW5kVHlwZTogJ3NvbGlkJyB8ICdzdWJ0bGUnID0gJ3NvbGlkJztcbiAgQElucHV0KCkgc2l6ZTogJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJyA9ICdtZWRpdW0nXG4gIEBJbnB1dCgpIGltZ1N0eWxlczogeyBbdHlwZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgQElucHV0KCkgbmFtZVN0eWxlczogeyBbdHlwZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgQElucHV0KCkgUHJvZ3Jlc3NQZXJjZW50YWdlOiAwO1xuICBASW5wdXQoKSBwcm9ncmVzc1N0YXRlOiAndmVyaWZ5JyB8ICdzdWNjZXNzJyB8ICdlcnJvcicgPSAndmVyaWZ5JztcblxuICBhbHQgPSAnJztcbiAgYmdDb2xvcnMgPSBbXG4gICAgJ3JlZCcsICdwaW5rJywgJ3B1cnBsZScsICdkZWVwLXB1cnBsZScsICdpbmRpZ28nLCAnYmx1ZScsXG4gICAgJ2xpZ2h0LWJsdWUnLCAnY3lhbicsICd0ZWFsJywgJ2dyZWVuJywgJ2xpZ2h0LWdyZWVuJyxcbiAgICAnbGltZScsICdhbWJlcicsICdvcmFuZ2UnLCAnZGVlcC1vcmFuZ2UnLFxuICBdO1xuICBjb2xvckNzc0NsYXNzID0gJyc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucHJvZ3Jlc3NCYXIubmF0aXZlRWxlbWVudC5oaWRkZW49dHJ1ZTtcbiAgICAvL3N0YXRlID0gdmVyaWZ5IC8gc3VjY2VzcyAvIGVycm9yXG4gIH1cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRQcm9ncmVzcyh0aGlzLlByb2dyZXNzUGVyY2VudGFnZSlcbiAgfVxuXG4gIG9uRmlsZUNoYW5nZShwRmlsZUxpc3Q6IEZpbGVbXSl7XG4gICAgY29uc29sZS5sb2coXCJjaGFuZ2UgY2FsbGVkXCIpXG4gICAgdGhpcy5maWxlcyA9IE9iamVjdC5rZXlzKHBGaWxlTGlzdCkubWFwKGtleSA9PiBwRmlsZUxpc3Rba2V5XSk7XG4gICAgdGhpcy5wcm9ncmVzc0Jhci5uYXRpdmVFbGVtZW50LmhpZGRlbj1mYWxzZTtcbiAgICAvLyB0aGlzLnNldFByb2dyZXNzU3RhdGUoJ3ZlcmlmeScpXG4gIH1cbiAgcmVzZXRGaWxlU3RhY2soZXZlbnQpXG4gIHtcbiAgICBpZih0aGlzLmZpbGVzLmxlbmd0aCA9PSAwKVxuICAgIHtcbiAgICAgIGNvbnNvbGUubG9nKFwic2V0IGRvbSBkYXRhIHRvIG51bGxcIilcbiAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IG51bGxcbiAgICB9XG4gIH1cbiAgZGVsZXRlRmlsZShmKXtcbiAgICB0aGlzLmZpbGVzID0gdGhpcy5maWxlcy5maWx0ZXIoZnVuY3Rpb24odyl7IHJldHVybiB3Lm5hbWUgIT0gZi5uYW1lIH0pO1xuICAgIGlmKHRoaXMuZmlsZXMubGVuZ3RoID09IDApXG4gICAge1xuICAgICAgdGhpcy5wcm9ncmVzc0Jhci5uYXRpdmVFbGVtZW50LmhpZGRlbj10cnVlO1xuICAgIH1cbiAgfVxuICBzZXRQcm9ncmVzcyhwcm9ncmVzc3BlcmNlbnRhZ2UpXG4gIHtcbiAgICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gKHRoaXMucHJvZ3Jlc3NCYXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAqIDIpICsgKHRoaXMucHJvZ3Jlc3NCYXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKiAyKTtcbiAgICAgIGNvbnN0IGlucHV0ID0gKHByb2dyZXNzcGVyY2VudGFnZSA+IDEwMCkgPyAxMDAgOiBwcm9ncmVzc3BlcmNlbnRhZ2U7XG4gICAgICBjb25zdCBib3JkZXJMZW4gPSAoaW5wdXQgLyAxMDApICogdG90YWxMZW5ndGg7XG4gICAgICBsZXQgYmFja2dyb3VuZFBvcztcbiAgICAgIGlmIChib3JkZXJMZW4gPD0gdGhpcy5wcm9ncmVzc0Jhci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKSB7XG4gICAgICAgIGJhY2tncm91bmRQb3MgPSAoLTQ0OCArIGJvcmRlckxlbikgKyAncHggMHB4LCA0NDhweCAtMTAwcHgsIDQ1M3B4IDk1cHgsIDBweCAxMDBweCc7XG4gICAgICB9IGVsc2UgaWYgKGJvcmRlckxlbiA8PSAodGhpcy5wcm9ncmVzc0Jhci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICsgdGhpcy5wcm9ncmVzc0Jhci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCkpIHtcbiAgICAgICAgYmFja2dyb3VuZFBvcyA9ICcwcHggMHB4LCA0NDhweCAnICsgKC0xMDAgKyAoYm9yZGVyTGVuIC0gdGhpcy5wcm9ncmVzc0Jhci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKSkgKyAncHgsIDQ1M3B4IDk1cHgsIDBweCAxMDBweCc7XG4gICAgICB9IGVsc2UgaWYgKGJvcmRlckxlbiA8PSAodGhpcy5wcm9ncmVzc0Jhci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICogMiArIHRoaXMucHJvZ3Jlc3NCYXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpKSB7XG4gICAgICAgIGJhY2tncm91bmRQb3MgPSAnMHB4IDBweCwgNDQ4cHggMHB4LCAnICsgKDQ0OCAtIChib3JkZXJMZW4gLSB0aGlzLnByb2dyZXNzQmFyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLSB0aGlzLnByb2dyZXNzQmFyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KSkgKyAncHggOTVweCwgMHB4IDEwMHB4JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhY2tncm91bmRQb3MgPSAnMHB4IDBweCwgNDQ4cHggMHB4LCAwcHggOTVweCwgMHB4ICcgKyAoMTAwIC0gKGJvcmRlckxlbiAtICh0aGlzLnByb2dyZXNzQmFyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKiAyKSAtIHRoaXMucHJvZ3Jlc3NCYXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpKSArICdweCc7XG4gICAgICB9XG4gICAgICB0aGlzLnByb2dyZXNzQmFyLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgIFwiYmFja2dyb3VuZC1wb3NpdGlvbiA6IFwiICsgYmFja2dyb3VuZFBvcyk7XG4gIH1cbiAgLy8gc2V0UHJvZ3Jlc3NTdGF0ZShzdGF0ZSlcbiAgLy8ge1xuICAvLyAgIHZhciBuYXRpdmVjbGFzc2xpc3QgPSB0aGlzLnByb2dyZXNzQmFyLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0O1xuICAvLyAgIGlmKG5hdGl2ZWNsYXNzbGlzdC5jb250YWlucygncHJvZ3Jlc3NzdWNjZXNzJykpXG4gIC8vICAge1xuICAvLyAgICAgbmF0aXZlY2xhc3NsaXN0LnJlbW92ZSgncHJvZ3Jlc3NzdWNjZXNzJylcbiAgLy8gICB9XG4gIC8vICAgaWYobmF0aXZlY2xhc3NsaXN0LmNvbnRhaW5zKCdwcm9ncmVzc3ZlcmlmeScpKVxuICAvLyAgIHtcbiAgLy8gICAgIG5hdGl2ZWNsYXNzbGlzdC5yZW1vdmUoJ3Byb2dyZXNzdmVyaWZ5JylcbiAgLy8gICB9XG4gIC8vICAgaWYobmF0aXZlY2xhc3NsaXN0LmNvbnRhaW5zKCdwcm9ncmVzc2Vycm9yJykpXG4gIC8vICAge1xuICAvLyAgICAgbmF0aXZlY2xhc3NsaXN0LnJlbW92ZSgncHJvZ3Jlc3NlcnJvcicpXG4gIC8vICAgfVxuICAvLyAgIGlmKHN0YXRlID09ICd2ZXJpZnknKVxuICAvLyAgIHtcbiAgLy8gICAgIG5hdGl2ZWNsYXNzbGlzdC5hZGQoJ3Byb2dyZXNzdmVyaWZ5JylcbiAgLy8gICB9XG4gIC8vICAgZWxzZSBpZihzdGF0ZSA9PSAnc3VjY2VzcycpXG4gIC8vICAge1xuICAvLyAgICAgbmF0aXZlY2xhc3NsaXN0LmFkZCgncHJvZ3Jlc3NzdWNjZXNzJylcbiAgLy8gICB9XG4gIC8vICAgZWxzZSBpZihzdGF0ZSA9PSAnZXJyb3InKVxuICAvLyAgIHtcbiAgLy8gICAgIG5hdGl2ZWNsYXNzbGlzdC5hZGQoJ3Byb2dyZXNzZXJyb3InKVxuICAvLyAgIH1cbiAgLy8gfVxufVxuIl19