UNPKG

@creativeacer/ngx-image-display

Version:
149 lines 22.5 kB
import { Component, Input, EventEmitter, Output, ViewChild, Renderer2 } from '@angular/core'; var hoverEffect; (function (hoverEffect) { hoverEffect["zoom"] = "zoom"; hoverEffect["lighten"] = "lighten"; hoverEffect["darken"] = "darken"; hoverEffect["greyscale"] = "greyscale"; hoverEffect["sepia"] = "sepia"; })(hoverEffect || (hoverEffect = {})); export class NgximagedisplayComponent { constructor(renderer) { this.renderer = renderer; /** * Default configuration */ this.defaultdisplayconfig = { imageminwidth: '250px', containerwidth: '65%', containerheight: '600px' }; this.defaultImageEffect = { hoverEffectActive: false }; this.onImageSelected = new EventEmitter(); } ngOnInit() { if (!this.displayconfig) { this.displayconfig = this.defaultdisplayconfig; } if (!this.imageEffect) { this.imageEffect = this.defaultImageEffect; } // this.gridrows = 'repeat(auto-fit, minmax('+this.displayconfig.rowheight+', 1fr))'; this.setContainerLayout(); this.setContainer(); this.setHoverEffect(); this.setSameSize(); } setContainer() { if (this.displayconfig && this.displayconfig.containerwidth) { this.containerwidth = this.displayconfig.containerwidth; } if (this.displayconfig && this.displayconfig.containerheight) { this.containerheight = this.displayconfig.containerheight; } } setContainerLayout() { if (this.displayconfig && this.displayconfig.imageminwidth && this.displayconfig.columns) { this.gridcolumns = 'repeat(' + this.displayconfig.columns + ', minmax(' + this.displayconfig.imageminwidth + ', 1fr))'; } else if (this.displayconfig && this.displayconfig.imageminwidth) { this.gridcolumns = 'repeat(auto-fit, minmax(' + this.displayconfig.imageminwidth + ', 1fr))'; } else { this.gridcolumns = 'repeat(auto-fit, minmax(300px, 1fr))'; } } setHoverEffect() { if (this.imageEffect.hoverEffectActive && this.imageEffect.hoverEffect) { switch (this.imageEffect.hoverEffect) { case 'zoom': this.zoomlvl = hoverEffect.zoom; break; case 'lighten': this.zoomlvl = hoverEffect.lighten; break; case 'darken': this.zoomlvl = hoverEffect.darken; break; case 'greyscale': this.zoomlvl = hoverEffect.greyscale; break; case 'sepia': this.zoomlvl = hoverEffect.sepia; break; default: break; } } else if (this.imageEffect.hoverEffectActive) { this.zoomlvl = hoverEffect.zoom; } } viewFullScreen(img) { this.renderer.setStyle(this.myModal.nativeElement, 'display', 'block'); this.renderer.setProperty(this.img01.nativeElement, 'src', img.imageData.value); this.renderer.setProperty(this.caption.nativeElement, 'innerHTML', img.imageData.subtext ? img.imageData.subtext : ''); } closeImage() { this.renderer.setStyle(this.myModal.nativeElement, 'display', 'none'); } calculateStyle(i) { return { initialEffect: !this.hovering === i, zoom: this.hovering === i && (this.zoomlvl === hoverEffect.zoom), lighten: this.hovering === i && (this.zoomlvl === hoverEffect.lighten), darken: this.hovering === i && (this.zoomlvl === hoverEffect.darken), greyscale: this.hovering === i && (this.zoomlvl === hoverEffect.greyscale), sepia: this.hovering === i && (this.zoomlvl === hoverEffect.sepia) }; } setSameSize() { if (!this.sameSize) { this.sameSize = { active: false, imgContainerHeight: '300px' }; } } mouseenter(itemIndex) { if (this.imageEffect.hoverEffectActive) { this.hovering = itemIndex; } } mouseleave() { this.hovering = -1; } imageSelected(mouseEvent, img) { const clickedImageData = { imageData: img.imageData, type: img.type, mouseEvent }; this.onImageSelected.emit(clickedImageData); } } NgximagedisplayComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-image-display', template: "<div class=\"bodymain\">\n <div class=\"imageDiv\" [ngStyle]=\"{'width': containerwidth, 'height': containerheight}\">\n <main *ngIf=\"!sameSize.active\" [ngStyle]=\"{'grid-template-columns': gridcolumns, 'grid-template-rows': gridrows}\">\n <div class=\"overlay\" *ngFor=\"let image of images; let i = index\" (mouseenter)=\"mouseenter(i)\" (mouseleave)=\"mouseleave()\" [ngClass]=\"calculateStyle(i)\">\n <img (click)='imageSelected($event, image)' class=\"imagecontainer\" [src]=\"image.imageData.value\"/>\n <div class=\"subtext\" (click)='imageSelected($event, image)' [ngClass]=\"{'full': image.imageData.subtextOverlay === 'full',\n 'half': image.imageData.subtextOverlay === 'half',\n 'bottom': image.imageData.subtextOverlay === 'bottom' || (!image.imageData.subtextOverlay && image.imageData.subtext)}\">{{image.imageData.subtext}}</div>\n <span *ngIf=\"displayconfig.fullScreenView\" class=\"fullview\" (click)=\"viewFullScreen(image)\">&#10064;</span>\n </div>\n </main>\n <main *ngIf=\"sameSize.active\" [ngStyle]=\"{'grid-template-columns': gridcolumns, 'grid-template-rows': gridrows}\">\n <div class=\"overlay\" *ngFor=\"let image of images; let i = index\" (mouseenter)=\"mouseenter(i)\" (mouseleave)=\"mouseleave()\" [ngClass]=\"calculateStyle(i)\">\n <div class=\"img imagecontainer\" (click)='imageSelected($event, image)' [ngStyle]=\"{'background-image':' url(' + image.imageData.value + ')',\n 'min-height': sameSize.imgContainerHeight}\"></div>\n <div class=\"subtext\" (click)='imageSelected($event, image)' [ngClass]=\"{'full': image.imageData.subtextOverlay === 'full',\n 'half': image.imageData.subtextOverlay === 'half',\n 'bottom': image.imageData.subtextOverlay === 'bottom' || (!image.imageData.subtextOverlay && image.imageData.subtext)}\">{{image.imageData.subtext}}</div>\n <span *ngIf=\"displayconfig.fullScreenView\" class=\"fullview\" (click)=\"viewFullScreen(image)\">&#10064;</span>\n </div>\n </main>\n </div>\n</div>\n\n<!-- The Modal --> \n<div #myModal class=\"modal\">\n<span #close class=\"close\" (click)=\"closeImage()\">&times;</span>\n<img class=\"modal-content\" #img01>\n<div #caption class=\"caption\"></div>\n</div>\n", styles: [".bodymain{display:flex;justify-content:center;width:100%}.bodymain .imageDiv{overflow:auto}.overlay:hover .fullview{display:initial}.fullview{color:#f1f1f1;display:none;font-size:25px;font-weight:700;position:absolute;right:25px;top:15px;transition:.3s}.fullview:focus,.fullview:hover{color:#bbb;cursor:pointer;text-decoration:none}main{box-sizing:border-box;display:grid;grid-column-gap:10px;grid-row-gap:10px}main .overlay{align-self:center;display:flex;overflow:hidden;position:relative}main .overlay .imagecontainer{transition:transform .5s ease}main .overlay .img,main .overlay img{align-self:center;display:flex;width:100%}main .overlay .img{background-position:50% 50%;background-repeat:no-repeat;background-size:cover}main .overlay .subtext{align-items:center;background-color:rgba(0,0,0,.4);bottom:0;color:#fff;display:flex;justify-content:center;left:0;overflow:hidden;position:absolute;right:0;transition:.5s ease}main .overlay .subtext.full{background-size:cover;height:100%;width:100%}main .overlay .subtext.half{background-size:cover;height:45%;width:100%}main .overlay .subtext.bottom{background-size:cover;height:20%;width:100%}main .initialEffect{filter:brightness(100%);overflow:hidden;transform:scale(1);z-index:\"initial\"}main .zoom{overflow:hidden;z-index:\"999\"}main .zoom .img,main .zoom img{transform:scale(1.3);transition:transform .3s ease}main .lighten{filter:brightness(150%)}main .darken,main .lighten{transition:.2s ease-in-out;z-index:\"999\"}main .darken{filter:brightness(50%)}main .greyscale{filter:grayscale(100%)}main .greyscale,main .sepia{transition:.2s ease-in-out;z-index:\"999\"}main .sepia{filter:sepia(100%)}#myImg{border-radius:5px;cursor:pointer;transition:.3s}#myImg:hover{opacity:.7}.modal{background-color:#000;background-color:rgba(0,0,0,.9);display:none;height:100%;left:0;overflow:auto;padding-top:100px;position:fixed;top:0;width:100%;z-index:1}.caption,.modal-content{display:block;margin:auto;max-width:700px;width:80%}.caption{color:#ccc;height:150px;padding:10px 0;text-align:center}#caption,.modal-content{-webkit-animation-duration:.6s;-webkit-animation-name:zoom;animation-duration:.6s;animation-name:zoom}@-webkit-keyframes zoom{0%{-webkit-transform:scale(0)}to{-webkit-transform:scale(1)}}@keyframes zoom{0%{transform:scale(0)}to{transform:scale(1)}}.close{color:#f1f1f1;font-size:40px;font-weight:700;position:absolute;right:35px;top:15px;transition:.3s}.close:focus,.close:hover{color:#bbb;cursor:pointer;text-decoration:none}@media only screen and (max-width:700px){.modal-content{width:100%}}"] },] } ]; NgximagedisplayComponent.ctorParameters = () => [ { type: Renderer2 } ]; NgximagedisplayComponent.propDecorators = { images: [{ type: Input }], sameSize: [{ type: Input }], displayconfig: [{ type: Input }], imageEffect: [{ type: Input }], onImageSelected: [{ type: Output }], myModal: [{ type: ViewChild, args: ['myModal',] }], myImg: [{ type: ViewChild, args: ['myImg',] }], img01: [{ type: ViewChild, args: ['img01',] }], caption: [{ type: ViewChild, args: ['caption',] }], close: [{ type: ViewChild, args: ['close',] }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4aW1hZ2VkaXNwbGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9tYXJjby9Eb2N1bWVudHMvRGV2ZWxvcG1lbnQvR2l0aHViL25neC1pbWFnZS1kaXNwbGF5L3Byb2plY3RzL25neGltYWdlZGlzcGxheS9zcmMvIiwic291cmNlcyI6WyJsaWIvbmd4aW1hZ2VkaXNwbGF5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHckcsSUFBSyxXQU1KO0FBTkQsV0FBSyxXQUFXO0lBQ2QsNEJBQWEsQ0FBQTtJQUNiLGtDQUFtQixDQUFBO0lBQ25CLGdDQUFpQixDQUFBO0lBQ2pCLHNDQUF1QixDQUFBO0lBQ3ZCLDhCQUFlLENBQUE7QUFDakIsQ0FBQyxFQU5JLFdBQVcsS0FBWCxXQUFXLFFBTWY7QUFPRCxNQUFNLE9BQU8sd0JBQXdCO0lBb0NuQyxZQUFvQixRQUFtQjtRQUFuQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBNUJ2Qzs7V0FFRztRQUNILHlCQUFvQixHQUFrQjtZQUNwQyxhQUFhLEVBQUUsT0FBTztZQUN0QixjQUFjLEVBQUUsS0FBSztZQUNyQixlQUFlLEVBQUUsT0FBTztTQUN6QixDQUFDO1FBQ0YsdUJBQWtCLEdBQWdCO1lBQ2hDLGlCQUFpQixFQUFHLEtBQUs7U0FDMUIsQ0FBQztRQVVPLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztJQVFkLENBQUM7SUFFNUMsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJ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QUVELFVBQVUsQ0FBQyxTQUFTO1FBQ2xCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRTtZQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFDRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsYUFBYSxDQUFDLFVBQXNCLEVBQUUsR0FBYztRQUNsRCxNQUFNLGdCQUFnQixHQUFxQjtZQUN6QyxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7WUFDeEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1lBQ2QsVUFBVTtTQUNYLENBQUE7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7OztZQXRKRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0Isd3ZFQUErQzs7YUFFaEQ7OztZQWZtRSxTQUFTOzs7cUJBdUMzRSxLQUFLO3VCQUNMLEtBQUs7NEJBQ0wsS0FBSzswQkFDTCxLQUFLOzhCQUVMLE1BQU07c0JBRU4sU0FBUyxTQUFDLFNBQVM7b0JBQ25CLFNBQVMsU0FBQyxPQUFPO29CQUNqQixTQUFTLFNBQUMsT0FBTztzQkFDakIsU0FBUyxTQUFDLFNBQVM7b0JBQ25CLFNBQVMsU0FBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgVmlld0NoaWxkLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEltYWdlRGF0YSwgRGlzcGxheUNvbmZpZywgU2FtZVNpemVDb25maWcsIEltYWdlRWZmZWN0LCBDbGlja2VkSW1hZ2VEYXRhfSBmcm9tICcuLi9pbnRlcmZhY2VzL25neGltYWdlZGlzcGxheS5pbnRlcmZhY2UnO1xuXG5lbnVtIGhvdmVyRWZmZWN0IHtcbiAgem9vbSA9ICd6b29tJyxcbiAgbGlnaHRlbiA9ICdsaWdodGVuJyxcbiAgZGFya2VuID0gJ2RhcmtlbicsXG4gIGdyZXlzY2FsZSA9ICdncmV5c2NhbGUnLFxuICBzZXBpYSA9ICdzZXBpYSdcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWltYWdlLWRpc3BsYXknLFxuICB0ZW1wbGF0ZVVybDogJy4vbmd4aW1hZ2VkaXNwbGF5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmd4aW1hZ2VkaXNwbGF5LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTmd4aW1hZ2VkaXNwbGF5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29udGFpbmVyd2lkdGg6IHN0cmluZztcbiAgY29udGFpbmVyaGVpZ2h0OiBzdHJpbmc7XG4gIGdyaWRjb2x1bW5zOiBzdHJpbmc7XG4gIGdyaWRyb3dzOiBzdHJpbmc7XG4gIGhvdmVyaW5nOiBudW1iZXI7XG4gIHpvb21sdmw6IHN0cmluZztcblxuICAvKipcbiAgICogRGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBkZWZhdWx0ZGlzcGxheWNvbmZpZzogRGlzcGxheUNvbmZpZyA9IHtcbiAgICBpbWFnZW1pbndpZHRoOiAnMjUwcHgnLFxuICAgIGNvbnRhaW5lcndpZHRoOiAnNjUlJyxcbiAgICBjb250YWluZXJoZWlnaHQ6ICc2MDBweCdcbiAgfTtcbiAgZGVmYXVsdEltYWdlRWZmZWN0OiBJbWFnZUVmZmVjdCA9IHtcbiAgICBob3ZlckVmZmVjdEFjdGl2ZSA6IGZhbHNlXG4gIH07XG4gLyoqXG4gICogRU5EIERlZmF1bHQgY29uZmlndXJhdGlvblxuICAqL1xuXG4gQElucHV0KCkgaW1hZ2VzOiBBcnJheTxJbWFnZURhdGE+O1xuIEBJbnB1dCgpIHNhbWVTaXplOiBTYW1lU2l6ZUNvbmZpZztcbiBASW5wdXQoKSBkaXNwbGF5Y29uZmlnOiBEaXNwbGF5Q29uZmlnO1xuIEBJbnB1dCgpIGltYWdlRWZmZWN0OiBJbWFnZUVmZmVjdDtcblxuIEBPdXRwdXQoKSBvbkltYWdlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEltYWdlRGF0YT4oKTtcblxuIEBWaWV3Q2hpbGQoJ215TW9kYWwnKSBteU1vZGFsO1xuIEBWaWV3Q2hpbGQoJ215SW1nJykgbXlJbWc7XG4gQFZpZXdDaGlsZCgnaW1nMDEnKSBpbWcwMTtcbiBAVmlld0NoaWxkKCdjYXB0aW9uJykgY2FwdGlvbjtcbiBAVmlld0NoaWxkKCdjbG9zZScpIGNsb3NlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmRpc3BsYXljb25maWcpIHtcbiAgICAgIHRoaXMuZGlzcGxheWNvbmZpZyA9IHRoaXMuZGVmYXVsdGRpc3BsYXljb25maWc7XG4gICAgfVxuICAgIGlmICghdGhpcy5pbWFnZUVmZmVjdCkge1xuICAgICAgdGhpcy5pbWFnZUVmZmVjdCA9IHRoaXMuZGVmYXVsdEltYWdlRWZmZWN0O1xuICAgIH1cbiAgICAvLyB0aGlzLmdyaWRyb3dzID0gJ3JlcGVhdChhdXRvLWZpdCwgbWlubWF4KCcrdGhpcy5kaXNwbGF5Y29uZmlnLnJvd2hlaWdodCsnLCAxZnIpKSc7XG5cbiAgICB0aGlzLnNldENvbnRhaW5lckxheW91dCgpO1xuICAgIHRoaXMuc2V0Q29udGFpbmVyKCk7XG4gICAgdGhpcy5zZXRIb3ZlckVmZmVjdCgpO1xuICAgIHRoaXMuc2V0U2FtZVNpemUoKTtcblxuICB9XG5cbiAgc2V0Q29udGFpbmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc3BsYXljb25maWcgJiYgdGhpcy5kaXNwbGF5Y29uZmlnLmNvbnRhaW5lcndpZHRoKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lcndpZHRoID0gdGhpcy5kaXNwbGF5Y29uZmlnLmNvbnRhaW5lcndpZHRoO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNwbGF5Y29uZmlnICYmIHRoaXMuZGlzcGxheWNvbmZpZy5jb250YWluZXJoZWlnaHQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyaGVpZ2h0ID0gdGhpcy5kaXNwbGF5Y29uZmlnLmNvbnRhaW5lcmhlaWdodDtcbiAgICB9XG4gIH1cblxuICBzZXRDb250YWluZXJMYXlvdXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzcGxheWNvbmZpZyAmJiB0aGlzLmRpc3BsYXljb25maWcuaW1hZ2VtaW53aWR0aCAmJiB0aGlzLmRpc3BsYXljb25maWcuY29sdW1ucykge1xuICAgICAgdGhpcy5ncmlkY29sdW1ucyA9ICdyZXBlYXQoJyArIHRoaXMuZGlzcGxheWNvbmZpZy5jb2x1bW5zICsgJywgbWlubWF4KCcgKyB0aGlzLmRpc3BsYXljb25maWcuaW1hZ2VtaW53aWR0aCArICcsIDFmcikpJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGlzcGxheWNvbmZpZyAmJiB0aGlzLmRpc3BsYXljb25maWcuaW1hZ2VtaW53aWR0aCkge1xuICAgICAgdGhpcy5ncmlkY29sdW1ucyA9ICdyZXBlYXQoYXV0by1maXQsIG1pbm1heCgnICsgdGhpcy5kaXNwbGF5Y29uZmlnLmltYWdlbWlud2lkdGggKyAnLCAxZnIpKSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JpZGNvbHVtbnMgPSAncmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzAwcHgsIDFmcikpJztcbiAgICB9XG4gIH1cblxuICBzZXRIb3ZlckVmZmVjdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbWFnZUVmZmVjdC5ob3ZlckVmZmVjdEFjdGl2ZSAmJiB0aGlzLmltYWdlRWZmZWN0LmhvdmVyRWZmZWN0KSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuaW1hZ2VFZmZlY3QuaG92ZXJFZmZlY3QpIHtcbiAgICAgICAgY2FzZSAnem9vbSc6XG4gICAgICAgICAgdGhpcy56b29tbHZsID0gaG92ZXJFZmZlY3Quem9vbTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGlnaHRlbic6XG4gICAgICAgICAgdGhpcy56b29tbHZsID0gaG92ZXJFZmZlY3QubGlnaHRlbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGFya2VuJzpcbiAgICAgICAgICB0aGlzLnpvb21sdmwgPSBob3ZlckVmZmVjdC5kYXJrZW47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2dyZXlzY2FsZSc6XG4gICAgICAgICAgdGhpcy56b29tbHZsID0gaG92ZXJFZmZlY3QuZ3JleXNjYWxlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzZXBpYSc6XG4gICAgICAgICAgdGhpcy56b29tbHZsID0gaG92ZXJFZmZlY3Quc2VwaWE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmltYWdlRWZmZWN0LmhvdmVyRWZmZWN0QWN0aXZlKSB7XG4gICAgICB0aGlzLnpvb21sdmwgPSBob3ZlckVmZmVjdC56b29tO1xuICAgIH1cbiAgfVxuXG4gIHZpZXdGdWxsU2NyZWVuKGltZzogSW1hZ2VEYXRhKSB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm15TW9kYWwubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuaW1nMDEubmF0aXZlRWxlbWVudCwgJ3NyYycsIGltZy5pbWFnZURhdGEudmFsdWUpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5jYXB0aW9uLm5hdGl2ZUVsZW1lbnQsICdpbm5lckhUTUwnLCBpbWcuaW1hZ2VEYXRhLnN1YnRleHQgPyBpbWcuaW1hZ2VEYXRhLnN1YnRleHQgOiAnJyk7XG4gIH1cblxuICBjbG9zZUltYWdlKCkge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5teU1vZGFsLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZVN0eWxlKGkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5pdGlhbEVmZmVjdDogIXRoaXMuaG92ZXJpbmcgPT09IGksXG4gICAgICB6b29tOiB0aGlzLmhvdmVyaW5nID09PSBpICYmICh0aGlzLnpvb21sdmwgPT09IGhvdmVyRWZmZWN0Lnpvb20pLFxuICAgICAgbGlnaHRlbjogdGhpcy5ob3ZlcmluZyA9PT0gaSAmJiAodGhpcy56b29tbHZsID09PSBob3ZlckVmZmVjdC5saWdodGVuKSxcbiAgICAgIGRhcmtlbjogdGhpcy5ob3ZlcmluZyA9PT0gaSAmJiAodGhpcy56b29tbHZsID09PSBob3ZlckVmZmVjdC5kYXJrZW4pLFxuICAgICAgZ3JleXNjYWxlOiB0aGlzLmhvdmVyaW5nID09PSBpICYmICh0aGlzLnpvb21sdmwgPT09IGhvdmVyRWZmZWN0LmdyZXlzY2FsZSksXG4gICAgICBzZXBpYTogdGhpcy5ob3ZlcmluZyA9PT0gaSAmJiAodGhpcy56b29tbHZsID09PSBob3ZlckVmZmVjdC5zZXBpYSlcbiAgICB9O1xuICB9XG5cbiAgc2V0U2FtZVNpemUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNhbWVTaXplKSB7XG4gICAgICB0aGlzLnNhbWVTaXplID0ge1xuICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICBpbWdDb250YWluZXJIZWlnaHQ6ICczMDBweCdcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgbW91c2VlbnRlcihpdGVtSW5kZXgpIHtcbiAgICBpZiAodGhpcy5pbWFnZUVmZmVjdC5ob3ZlckVmZmVjdEFjdGl2ZSkge1xuICAgICAgdGhpcy5ob3ZlcmluZyA9IGl0ZW1JbmRleDtcbiAgICB9XG4gIH1cbiAgbW91c2VsZWF2ZSgpIHtcbiAgICB0aGlzLmhvdmVyaW5nID0gLTE7XG4gIH1cblxuICBpbWFnZVNlbGVjdGVkKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGltZzogSW1hZ2VEYXRhKSB7XG4gICAgY29uc3QgY2xpY2tlZEltYWdlRGF0YTogQ2xpY2tlZEltYWdlRGF0YSA9IHtcbiAgICAgIGltYWdlRGF0YTogaW1nLmltYWdlRGF0YSxcbiAgICAgIHR5cGU6IGltZy50eXBlLFxuICAgICAgbW91c2VFdmVudFxuICAgIH1cbiAgICB0aGlzLm9uSW1hZ2VTZWxlY3RlZC5lbWl0KGNsaWNrZWRJbWFnZURhdGEpO1xuICB9XG5cbn1cbiJdfQ==