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
JavaScript
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">
★
</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">
★
</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">
★
</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">
★
</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==