UNPKG

ngx-stars-rating

Version:

## Overview Ngx Stars Rating is a straightforward Angular module designed for Angular 14 and above. It offers customizable star icons using Material Icons, Antd Icons, and other options.

123 lines 15.5 kB
import { Component, Input, Output, EventEmitter, ViewEncapsulation } from '@angular/core'; import { DEFAULT_RATING_OPTIONS } from './globals'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class NgxStarsRatingComponent { constructor() { this._rate = 0; this._onRateEvent = new EventEmitter(); this.isHovering = false; this.starItems = []; this._options = DEFAULT_RATING_OPTIONS; } set options($event) { if (!$event) { return; } this._options = $event; } set rate($event) { this._rate = $event; this._calculateStartIndexes(); } get options() { return this._options; } ngOnInit() { this._setStarItems(); } _setStarItems() { const { starsCount } = this._options; this.starItems = Array.from(Array(starsCount)); this._calculateStartIndexes(); } onStarHover(starIndex) { if (!this._options.hoverable) { return; } this.hoveringStarIndex = starIndex; this.isHovering = true; } onMouseLeave() { if (!this._options.hoverable) { return; } this.hoveringStarIndex = -1; this.isHovering = false; } onClickRating(rateIndex) { if (!this._options.clickable) { return; } const rate = rateIndex + 1; this._onRateEvent.emit(rate); } _calculateStartIndexes() { this.activeStarIndex = Math.floor(this._rate) - 1; this.halfStarIndex = Math.ceil(this._rate) - 1; this.starFillPercentage = (this._rate - Math.floor(this._rate)) * 100; if (this.starFillPercentage > 100) { this.starFillPercentage = 100; } } } NgxStarsRatingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxStarsRatingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); NgxStarsRatingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NgxStarsRatingComponent, selector: "ngx-stars-rating", inputs: { options: "options", rate: "rate", starTemplate: "starTemplate" }, outputs: { _onRateEvent: "onRate" }, ngImport: i0, template: ` <div class="rating-wrapper" (mouseleave)="onMouseLeave()"> <div class="stars-container"> <span class="star-item-wrapper" *ngFor="let item of starItems; let ind=index" (click)="onClickRating(ind)"> <span class="star-item" [class.star-item-hoverable]="options.hoverable" [class.active-star]="ind <= activeStarIndex || ind<=hoveringStarIndex" (mouseenter)="onStarHover(ind)"> <ng-container *ngIf="!starTemplate;else starTemplateRef"> &#x2605; </ng-container> <ng-template #starTemplateRef [ngTemplateOutlet]="starTemplate"> </ng-template> </span> <span class="star-item star-item-fill" *ngIf="halfStarIndex === ind && !isHovering" [style.width.%]="starFillPercentage"> <ng-container *ngIf="!starTemplate;else starTemplateRef"> &#x2605; </ng-container> <ng-template #starTemplateRef [ngTemplateOutlet]="starTemplate"> </ng-template> </span> </span> </div> </div> `, isInline: true, styles: [".rating-wrapper{width:150px;position:relative;color:transparent}.rating-wrapper .stars-container{white-space:nowrap;display:flex}.rating-wrapper .star-item-wrapper{position:relative}.rating-wrapper .star-item-wrapper .star-item{font-size:30px;cursor:pointer;white-space:nowrap;overflow:hidden;display:flex;color:#bdbdbd}.rating-wrapper .star-item-wrapper .star-item-hoverable:hover{color:gold}.rating-wrapper .star-item-wrapper .star-item-fill{position:absolute;inset:0;width:0;color:gold}.rating-wrapper .active-star{color:gold!important}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxStarsRatingComponent, decorators: [{ type: Component, args: [{ selector: 'ngx-stars-rating', template: ` <div class="rating-wrapper" (mouseleave)="onMouseLeave()"> <div class="stars-container"> <span class="star-item-wrapper" *ngFor="let item of starItems; let ind=index" (click)="onClickRating(ind)"> <span class="star-item" [class.star-item-hoverable]="options.hoverable" [class.active-star]="ind <= activeStarIndex || ind<=hoveringStarIndex" (mouseenter)="onStarHover(ind)"> <ng-container *ngIf="!starTemplate;else starTemplateRef"> &#x2605; </ng-container> <ng-template #starTemplateRef [ngTemplateOutlet]="starTemplate"> </ng-template> </span> <span class="star-item star-item-fill" *ngIf="halfStarIndex === ind && !isHovering" [style.width.%]="starFillPercentage"> <ng-container *ngIf="!starTemplate;else starTemplateRef"> &#x2605; </ng-container> <ng-template #starTemplateRef [ngTemplateOutlet]="starTemplate"> </ng-template> </span> </span> </div> </div> `, encapsulation: ViewEncapsulation.None, styles: [".rating-wrapper{width:150px;position:relative;color:transparent}.rating-wrapper .stars-container{white-space:nowrap;display:flex}.rating-wrapper .star-item-wrapper{position:relative}.rating-wrapper .star-item-wrapper .star-item{font-size:30px;cursor:pointer;white-space:nowrap;overflow:hidden;display:flex;color:#bdbdbd}.rating-wrapper .star-item-wrapper .star-item-hoverable:hover{color:gold}.rating-wrapper .star-item-wrapper .star-item-fill{position:absolute;inset:0;width:0;color:gold}.rating-wrapper .active-star{color:gold!important}\n"] }] }], ctorParameters: function () { return []; }, propDecorators: { options: [{ type: Input }], rate: [{ type: Input }], starTemplate: [{ type: Input }], _onRateEvent: [{ type: Output, args: ['onRate'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXN0YXJzLXJhdGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3RhcnMtcmF0aW5nL3NyYy9saWIvbmd4LXN0YXJzLXJhdGluZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7OztBQXFFbkQsTUFBTSxPQUFPLHVCQUF1QjtJQTBCbEM7UUF4QlEsVUFBSyxHQUFXLENBQUMsQ0FBQztRQVlBLGlCQUFZLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDbkYsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixjQUFTLEdBQWEsRUFBRSxDQUFDO1FBVzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsc0JBQXNCLENBQUM7SUFDekMsQ0FBQztJQXpCRCxJQUFhLE9BQU8sQ0FBQyxNQUFzQjtRQUN6QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7SUFDekIsQ0FBQztJQUNELElBQWEsSUFBSSxDQUFDLE1BQWM7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDcEIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQVVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBTUQsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sYUFBYTtRQUNuQixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxTQUFpQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDNUIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDNUIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFTSxhQUFhLENBQUMsU0FBaUI7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQzVCLE9BQU87U0FDUjtRQUNELE1BQU0sSUFBSSxHQUFXLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3RFLElBQUksSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQzs7b0hBdkVVLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHlLQWhFeEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQlQ7MkZBMENVLHVCQUF1QjtrQkFsRW5DLFNBQVM7K0JBQ0Usa0JBQWtCLFlBQ2xCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JULGlCQXdDYyxpQkFBaUIsQ0FBQyxJQUFJOzBFQUt4QixPQUFPO3NCQUFuQixLQUFLO2dCQU1PLElBQUk7c0JBQWhCLEtBQUs7Z0JBSVUsWUFBWTtzQkFBM0IsS0FBSztnQkFDb0IsWUFBWTtzQkFBckMsTUFBTTt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBFdmVudEVtaXR0ZXIsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERFRkFVTFRfUkFUSU5HX09QVElPTlMgfSBmcm9tICcuL2dsb2JhbHMnO1xuaW1wb3J0IHsgSVJhdGluZ09wdGlvbnMgfSBmcm9tICcuL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1zdGFycy1yYXRpbmcnLFxuICB0ZW1wbGF0ZTogYFxuICA8ZGl2IGNsYXNzPVwicmF0aW5nLXdyYXBwZXJcIiAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmUoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdGFycy1jb250YWluZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGFyLWl0ZW0td3JhcHBlclwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN0YXJJdGVtczsgbGV0IGluZD1pbmRleFwiIChjbGljayk9XCJvbkNsaWNrUmF0aW5nKGluZClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Rhci1pdGVtXCIgW2NsYXNzLnN0YXItaXRlbS1ob3ZlcmFibGVdPVwib3B0aW9ucy5ob3ZlcmFibGVcIiBbY2xhc3MuYWN0aXZlLXN0YXJdPVwiaW5kIDw9IGFjdGl2ZVN0YXJJbmRleCB8fCBpbmQ8PWhvdmVyaW5nU3RhckluZGV4XCIgKG1vdXNlZW50ZXIpPVwib25TdGFySG92ZXIoaW5kKVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3RhclRlbXBsYXRlO2Vsc2Ugc3RhclRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICAgICAgICAgICYjeDI2MDU7XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdGFyVGVtcGxhdGVSZWYgW25nVGVtcGxhdGVPdXRsZXRdPVwic3RhclRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Rhci1pdGVtIHN0YXItaXRlbS1maWxsXCIgKm5nSWY9XCJoYWxmU3RhckluZGV4ID09PSBpbmQgJiYgIWlzSG92ZXJpbmdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cInN0YXJGaWxsUGVyY2VudGFnZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3RhclRlbXBsYXRlO2Vsc2Ugc3RhclRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICAgICAgICAgICYjeDI2MDU7XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdGFyVGVtcGxhdGVSZWYgW25nVGVtcGxhdGVPdXRsZXRdPVwic3RhclRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgIC5yYXRpbmctd3JhcHBlciB7XG4gICAgICB3aWR0aDogMTUwcHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgfVxuICAgIC5yYXRpbmctd3JhcHBlciAuc3RhcnMtY29udGFpbmVyIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgIH1cbiAgICAucmF0aW5nLXdyYXBwZXIgLnN0YXItaXRlbS13cmFwcGVyIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gICAgLnJhdGluZy13cmFwcGVyIC5zdGFyLWl0ZW0td3JhcHBlciAuc3Rhci1pdGVtIHtcbiAgICAgIGZvbnQtc2l6ZTogMzBweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGNvbG9yOiAjYmRiZGJkO1xuICAgIH1cbiAgICAucmF0aW5nLXdyYXBwZXIgLnN0YXItaXRlbS13cmFwcGVyIC5zdGFyLWl0ZW0taG92ZXJhYmxlOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBnb2xkO1xuICAgIH1cbiAgICAucmF0aW5nLXdyYXBwZXIgLnN0YXItaXRlbS13cmFwcGVyIC5zdGFyLWl0ZW0tZmlsbCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICB0b3A6IDA7XG4gICAgICB3aWR0aDogMDtcbiAgICAgIGNvbG9yOiBnb2xkO1xuICAgIH1cbiAgICAucmF0aW5nLXdyYXBwZXIgLmFjdGl2ZS1zdGFyIHtcbiAgICAgIGNvbG9yOiBnb2xkICFpbXBvcnRhbnQ7XG4gICAgfSAgIFxuICAgIGBcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hTdGFyc1JhdGluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgX29wdGlvbnM6IElSYXRpbmdPcHRpb25zO1xuICBwcml2YXRlIF9yYXRlOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBzZXQgb3B0aW9ucygkZXZlbnQ6IElSYXRpbmdPcHRpb25zKSB7XG4gICAgaWYgKCEkZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fb3B0aW9ucyA9ICRldmVudDtcbiAgfVxuICBASW5wdXQoKSBzZXQgcmF0ZSgkZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMuX3JhdGUgPSAkZXZlbnQ7XG4gICAgdGhpcy5fY2FsY3VsYXRlU3RhcnRJbmRleGVzKCk7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHN0YXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBPdXRwdXQoJ29uUmF0ZScpIHByaXZhdGUgX29uUmF0ZUV2ZW50OiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBwdWJsaWMgaXNIb3ZlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3Rhckl0ZW1zOiBudW1iZXJbXSA9IFtdO1xuICBwdWJsaWMgYWN0aXZlU3RhckluZGV4ITogbnVtYmVyO1xuICBwdWJsaWMgaGFsZlN0YXJJbmRleCE6IG51bWJlcjtcbiAgcHVibGljIHN0YXJGaWxsUGVyY2VudGFnZSE6IG51bWJlcjtcbiAgcHVibGljIGhvdmVyaW5nU3RhckluZGV4ITogbnVtYmVyO1xuXG4gIGdldCBvcHRpb25zKCk6IElSYXRpbmdPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX29wdGlvbnMgPSBERUZBVUxUX1JBVElOR19PUFRJT05TO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0U3Rhckl0ZW1zKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRTdGFySXRlbXMoKTogdm9pZCB7XG4gICAgY29uc3QgeyBzdGFyc0NvdW50IH0gPSB0aGlzLl9vcHRpb25zO1xuICAgIHRoaXMuc3Rhckl0ZW1zID0gQXJyYXkuZnJvbShBcnJheShzdGFyc0NvdW50KSk7XG4gICAgdGhpcy5fY2FsY3VsYXRlU3RhcnRJbmRleGVzKCk7XG4gIH1cblxuICBwdWJsaWMgb25TdGFySG92ZXIoc3RhckluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX29wdGlvbnMuaG92ZXJhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaG92ZXJpbmdTdGFySW5kZXggPSBzdGFySW5kZXg7XG4gICAgdGhpcy5pc0hvdmVyaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdXNlTGVhdmUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9vcHRpb25zLmhvdmVyYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhvdmVyaW5nU3RhckluZGV4ID0gLTE7XG4gICAgdGhpcy5pc0hvdmVyaW5nID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgb25DbGlja1JhdGluZyhyYXRlSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5fb3B0aW9ucy5jbGlja2FibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmF0ZTogbnVtYmVyID0gcmF0ZUluZGV4ICsgMTtcbiAgICB0aGlzLl9vblJhdGVFdmVudC5lbWl0KHJhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2FsY3VsYXRlU3RhcnRJbmRleGVzKCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlU3RhckluZGV4ID0gTWF0aC5mbG9vcih0aGlzLl9yYXRlKSAtIDE7XG4gICAgdGhpcy5oYWxmU3RhckluZGV4ID0gTWF0aC5jZWlsKHRoaXMuX3JhdGUpIC0gMTtcbiAgICB0aGlzLnN0YXJGaWxsUGVyY2VudGFnZSA9ICh0aGlzLl9yYXRlIC0gTWF0aC5mbG9vcih0aGlzLl9yYXRlKSkgKiAxMDA7XG4gICAgaWYgKHRoaXMuc3RhckZpbGxQZXJjZW50YWdlID4gMTAwKSB7XG4gICAgICB0aGlzLnN0YXJGaWxsUGVyY2VudGFnZSA9IDEwMDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==