UNPKG

@ngx-gallery/core

Version:

Angular gallery directive that hooks the lightbox with the images automatically.

202 lines 15.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, HostBinding, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { animate, style, transition, trigger } from '@angular/animations'; import { BehaviorSubject } from 'rxjs'; var GalleryImageComponent = /** @class */ (function () { function GalleryImageComponent(_sanitizer) { this._sanitizer = _sanitizer; /** * Stream that emits the state */ this._state = new BehaviorSubject('loading'); this.state = this._state.asObservable(); /** * Progress value */ this.progress = 0; /** * Stream that emits when an error occurs */ this.error = new EventEmitter(); } Object.defineProperty(GalleryImageComponent.prototype, "imageLoadSuccess", { get: /** * @return {?} */ function () { return !!this.imageUrl; }, enumerable: true, configurable: true }); Object.defineProperty(GalleryImageComponent.prototype, "imageLoadFailed", { get: /** * @return {?} */ function () { return !!this.loadError; }, enumerable: true, configurable: true }); /** * @return {?} */ GalleryImageComponent.prototype.ngOnInit = /** * @return {?} */ function () { if (this.loadingIcon) { this.loaderTemplate = this._sanitizer.bypassSecurityTrustHtml(this.loadingIcon); } if (this.loadingError) { this.errorTemplate = this._sanitizer.bypassSecurityTrustHtml(this.loadingError); } }; /** * @return {?} */ GalleryImageComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this._state.complete(); }; /** * @param {?} __0 * @return {?} */ GalleryImageComponent.prototype.onProgress = /** * @param {?} __0 * @return {?} */ function (_a) { var loaded = _a.loaded, total = _a.total; this.progress = loaded * 100 / total; }; /** * @param {?} blobUrl * @return {?} */ GalleryImageComponent.prototype.onLoaded = /** * @param {?} blobUrl * @return {?} */ function (blobUrl) { this.imageUrl = this._sanitizer.bypassSecurityTrustStyle("url(" + blobUrl + ")"); this._state.next('success'); }; /** * @param {?} err * @return {?} */ GalleryImageComponent.prototype.onError = /** * @param {?} err * @return {?} */ function (err) { this.loadError = err; this._state.next('failed'); this.error.emit(err); }; GalleryImageComponent.decorators = [ { type: Component, args: [{ selector: 'gallery-image', changeDetection: ChangeDetectionStrategy.OnPush, animations: [ trigger('fadeIn', [ transition(':enter', [ style({ opacity: 0 }), animate('300ms ease-in', style({ opacity: 1 })) ]) ]) ], template: "\n <ng-container [lazyImage]=\"src\"\n (progress)=\"onProgress($event)\"\n (loaded)=\"onLoaded($event)\"\n (error)=\"onError($event)\"\n [ngSwitch]=\"state | async\">\n\n <div *ngSwitchCase=\"'success'\"\n @fadeIn\n class=\"g-image-item\"\n [style.backgroundImage]=\"imageUrl\">\n </div>\n\n <div *ngSwitchCase=\"'failed'\"\n class=\"g-image-error-message\">\n <div *ngIf=\"errorTemplate; else defaultError\"\n [innerHTML]=\"errorTemplate\"></div>\n <ng-template #defaultError>\n <ng-container *ngIf=\"isThumbnail; else isLarge\">\n <h4>\u26A0</h4>\n </ng-container>\n <ng-template #isLarge>\n <h2>\u26A0</h2>\n <p>Unable to load the image!</p>\n </ng-template>\n </ng-template>\n </div>\n\n <ng-container *ngSwitchCase=\"'loading'\">\n <div *ngIf=\"loaderTemplate; else defaultLoader\"\n class=\"g-loading\"\n [innerHTML]=\"loaderTemplate\">\n </div>\n <ng-template #defaultLoader>\n <div *ngIf=\"isThumbnail\" class=\"g-thumb-loading\"></div>\n </ng-template>\n </ng-container>\n </ng-container>\n " }] } ]; /** @nocollapse */ GalleryImageComponent.ctorParameters = function () { return [ { type: DomSanitizer } ]; }; GalleryImageComponent.propDecorators = { isThumbnail: [{ type: Input }], src: [{ type: Input }], loadingIcon: [{ type: Input }], loadingError: [{ type: Input }], error: [{ type: Output }], imageLoadSuccess: [{ type: HostBinding, args: ['class.g-image-loaded',] }], imageLoadFailed: [{ type: HostBinding, args: ['class.g-image-error',] }] }; return GalleryImageComponent; }()); export { GalleryImageComponent }; if (false) { /** * Stream that emits the state * @type {?} * @private */ GalleryImageComponent.prototype._state; /** @type {?} */ GalleryImageComponent.prototype.state; /** * Progress value * @type {?} */ GalleryImageComponent.prototype.progress; /** * Is thumbnail * @type {?} */ GalleryImageComponent.prototype.isThumbnail; /** * Image source URL * @type {?} */ GalleryImageComponent.prototype.src; /** * Loaded image URL * @type {?} */ GalleryImageComponent.prototype.imageUrl; /** * Custom loader template * @type {?} */ GalleryImageComponent.prototype.loadingIcon; /** * Custom loader safe template * @type {?} */ GalleryImageComponent.prototype.loaderTemplate; /** * Custom error template * @type {?} */ GalleryImageComponent.prototype.loadingError; /** * Custom error safe template * @type {?} */ GalleryImageComponent.prototype.errorTemplate; /** * Stream that emits when an error occurs * @type {?} */ GalleryImageComponent.prototype.error; /** * loading error * @type {?} */ GalleryImageComponent.prototype.loadError; /** * @type {?} * @private */ GalleryImageComponent.prototype._sanitizer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS1pbWFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LWdhbGxlcnkvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3RlbXBsYXRlcy9nYWxsZXJ5LWltYWdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFVLE1BQU0sRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDaEksT0FBTyxFQUFFLFlBQVksRUFBdUIsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QztJQTRGRSwrQkFBb0IsVUFBd0I7UUFBeEIsZUFBVSxHQUFWLFVBQVUsQ0FBYzs7OztRQXJDM0IsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFtQyxTQUFTLENBQUMsQ0FBQztRQUNsRixVQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQzs7OztRQUc1QyxhQUFRLEdBQUcsQ0FBQyxDQUFDOzs7O1FBcUJILFVBQUssR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBYTVDLENBQUM7SUFURCxzQkFBeUMsbURBQWdCOzs7O1FBQXpEO1lBQ0UsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUVELHNCQUF3QyxrREFBZTs7OztRQUF2RDtZQUNFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDMUIsQ0FBQzs7O09BQUE7Ozs7SUFLRCx3Q0FBUTs7O0lBQVI7UUFDRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNqRjtRQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2pGO0lBQ0gsQ0FBQzs7OztJQUVELDJDQUFXOzs7SUFBWDtRQUNFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7Ozs7SUFFRCwwQ0FBVTs7OztJQUFWLFVBQVcsRUFBa0Q7WUFBakQsa0JBQU0sRUFBRSxnQkFBSztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7Ozs7O0lBRUQsd0NBQVE7Ozs7SUFBUixVQUFTLE9BQWU7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLFNBQU8sT0FBTyxNQUFHLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QixDQUFDOzs7OztJQUVELHVDQUFPOzs7O0lBQVAsVUFBUSxHQUFVO1FBQ2hCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7O2dCQXpIRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxVQUFVLEVBQUU7d0JBQ1YsT0FBTyxDQUFDLFFBQVEsRUFBRTs0QkFDaEIsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDbkIsS0FBSyxDQUFDLEVBQUMsT0FBTyxFQUFFLENBQUMsRUFBQyxDQUFDO2dDQUNuQixPQUFPLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxFQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDOzZCQUM5QyxDQUFDO3lCQUNILENBQUM7cUJBQ0g7b0JBQ0QsUUFBUSxFQUFFLDh4Q0FzQ1Q7aUJBQ0Y7Ozs7Z0JBdERRLFlBQVk7Ozs4QkFrRWxCLEtBQUs7c0JBR0wsS0FBSzs4QkFLTCxLQUFLOytCQUtMLEtBQUs7d0JBS0wsTUFBTTttQ0FJTixXQUFXLFNBQUMsc0JBQXNCO2tDQUlsQyxXQUFXLFNBQUMscUJBQXFCOztJQW1DcEMsNEJBQUM7Q0FBQSxBQTNIRCxJQTJIQztTQXZFWSxxQkFBcUI7Ozs7Ozs7SUFHaEMsdUNBQTJGOztJQUMzRixzQ0FBNEM7Ozs7O0lBRzVDLHlDQUFhOzs7OztJQUdiLDRDQUE4Qjs7Ozs7SUFHOUIsb0NBQXFCOzs7OztJQUVyQix5Q0FBb0I7Ozs7O0lBR3BCLDRDQUE2Qjs7Ozs7SUFFN0IsK0NBQXlCOzs7OztJQUd6Qiw2Q0FBOEI7Ozs7O0lBRTlCLDhDQUF3Qjs7Ozs7SUFHeEIsc0NBQTRDOzs7OztJQUU1QywwQ0FBaUI7Ozs7O0lBVUwsMkNBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgSG9zdEJpbmRpbmcsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwsIFNhZmVTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnYWxsZXJ5LWltYWdlJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdmYWRlSW4nLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgIHN0eWxlKHtvcGFjaXR5OiAwfSksXG4gICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4nLCBzdHlsZSh7b3BhY2l0eTogMX0pKVxuICAgICAgXSlcbiAgICBdKVxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250YWluZXIgW2xhenlJbWFnZV09XCJzcmNcIlxuICAgICAgICAgICAgICAgICAgKHByb2dyZXNzKT1cIm9uUHJvZ3Jlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAobG9hZGVkKT1cIm9uTG9hZGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGVycm9yKT1cIm9uRXJyb3IoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbbmdTd2l0Y2hdPVwic3RhdGUgfCBhc3luY1wiPlxuXG4gICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInc3VjY2VzcydcIlxuICAgICAgICAgICBAZmFkZUluXG4gICAgICAgICAgIGNsYXNzPVwiZy1pbWFnZS1pdGVtXCJcbiAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRJbWFnZV09XCJpbWFnZVVybFwiPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidmYWlsZWQnXCJcbiAgICAgICAgICAgY2xhc3M9XCJnLWltYWdlLWVycm9yLW1lc3NhZ2VcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImVycm9yVGVtcGxhdGU7IGVsc2UgZGVmYXVsdEVycm9yXCJcbiAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImVycm9yVGVtcGxhdGVcIj48L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0RXJyb3I+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVGh1bWJuYWlsOyBlbHNlIGlzTGFyZ2VcIj5cbiAgICAgICAgICAgIDxoND7imqA8L2g0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNMYXJnZT5cbiAgICAgICAgICAgIDxoMj7imqA8L2gyPlxuICAgICAgICAgICAgPHA+VW5hYmxlIHRvIGxvYWQgdGhlIGltYWdlITwvcD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidsb2FkaW5nJ1wiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibG9hZGVyVGVtcGxhdGU7IGVsc2UgZGVmYXVsdExvYWRlclwiXG4gICAgICAgICAgICAgY2xhc3M9XCJnLWxvYWRpbmdcIlxuICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwibG9hZGVyVGVtcGxhdGVcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdExvYWRlcj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNUaHVtYm5haWxcIiBjbGFzcz1cImctdGh1bWItbG9hZGluZ1wiPjwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIGBcbn0pXG5cbmV4cG9ydCBjbGFzcyBHYWxsZXJ5SW1hZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqIFN0cmVhbSB0aGF0IGVtaXRzIHRoZSBzdGF0ZSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8J2xvYWRpbmcnIHwgJ3N1Y2Nlc3MnIHwgJ2ZhaWxlZCc+KCdsb2FkaW5nJyk7XG4gIHJlYWRvbmx5IHN0YXRlID0gdGhpcy5fc3RhdGUuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLyoqIFByb2dyZXNzIHZhbHVlICovXG4gIHByb2dyZXNzID0gMDtcblxuICAvKiogSXMgdGh1bWJuYWlsICovXG4gIEBJbnB1dCgpIGlzVGh1bWJuYWlsOiBib29sZWFuO1xuXG4gIC8qKiBJbWFnZSBzb3VyY2UgVVJMICovXG4gIEBJbnB1dCgpIHNyYzogc3RyaW5nO1xuICAvKiogTG9hZGVkIGltYWdlIFVSTCAqL1xuICBpbWFnZVVybDogU2FmZVN0eWxlO1xuXG4gIC8qKiBDdXN0b20gbG9hZGVyIHRlbXBsYXRlICovXG4gIEBJbnB1dCgpIGxvYWRpbmdJY29uOiBzdHJpbmc7XG4gIC8qKiBDdXN0b20gbG9hZGVyIHNhZmUgdGVtcGxhdGUgKi9cbiAgbG9hZGVyVGVtcGxhdGU6IFNhZmVIdG1sO1xuXG4gIC8qKiBDdXN0b20gZXJyb3IgdGVtcGxhdGUgKi9cbiAgQElucHV0KCkgbG9hZGluZ0Vycm9yOiBzdHJpbmc7XG4gIC8qKiBDdXN0b20gZXJyb3Igc2FmZSB0ZW1wbGF0ZSAqL1xuICBlcnJvclRlbXBsYXRlOiBTYWZlSHRtbDtcblxuICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBhbiBlcnJvciBvY2N1cnMgKi9cbiAgQE91dHB1dCgpIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxFcnJvcj4oKTtcbiAgLyoqIGxvYWRpbmcgZXJyb3IgKi9cbiAgbG9hZEVycm9yOiBFcnJvcjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmctaW1hZ2UtbG9hZGVkJykgZ2V0IGltYWdlTG9hZFN1Y2Nlc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5pbWFnZVVybDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZy1pbWFnZS1lcnJvcicpIGdldCBpbWFnZUxvYWRGYWlsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5sb2FkRXJyb3I7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZ0ljb24pIHtcbiAgICAgIHRoaXMubG9hZGVyVGVtcGxhdGUgPSB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodGhpcy5sb2FkaW5nSWNvbik7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvYWRpbmdFcnJvcikge1xuICAgICAgdGhpcy5lcnJvclRlbXBsYXRlID0gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRoaXMubG9hZGluZ0Vycm9yKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdGF0ZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25Qcm9ncmVzcyh7bG9hZGVkLCB0b3RhbH06IHsgbG9hZGVkOiBudW1iZXIsIHRvdGFsOiBudW1iZXIgfSkge1xuICAgIHRoaXMucHJvZ3Jlc3MgPSBsb2FkZWQgKiAxMDAgLyB0b3RhbDtcbiAgfVxuXG4gIG9uTG9hZGVkKGJsb2JVcmw6IHN0cmluZykge1xuICAgIHRoaXMuaW1hZ2VVcmwgPSB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGB1cmwoJHtibG9iVXJsfSlgKTtcbiAgICB0aGlzLl9zdGF0ZS5uZXh0KCdzdWNjZXNzJyk7XG4gIH1cblxuICBvbkVycm9yKGVycjogRXJyb3IpIHtcbiAgICB0aGlzLmxvYWRFcnJvciA9IGVycjtcbiAgICB0aGlzLl9zdGF0ZS5uZXh0KCdmYWlsZWQnKTtcbiAgICB0aGlzLmVycm9yLmVtaXQoZXJyKTtcbiAgfVxuXG59XG4iXX0=