UNPKG

ng-rating-bar

Version:
179 lines 17.2 kB
import { Component, Input, Output, EventEmitter } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class NgRatingBarComponent { constructor() { this.ratingCount = 7; this.colorActive = '#edb867'; this.colorDefault = '#d2d2d2'; this.disabled = false; this.resetAble = false; this.styles = { fontSize: '28px', backgroundColor: '', margin: '5px', padding: '0' }; this.value = 5; this.valueChange = new EventEmitter(); this.hoverChange = new EventEmitter(); this.symbol = '&#9733;'; this.numbers = []; this.hoverIndex = -1; this.selectedValue = 0; this.halfValue = 0; this.halfIndex = -1; this.isHovered = false; } ; ngOnInit() { this.ratingCount = this.ratingCount || 5; this.colorActive = this.colorActive || '#edb867'; this.colorDefault = this.colorDefault || '#d2d2d2'; if (!this.styles) { this.styles = { fontSize: '28px', backgroundColor: '', margin: '5px', padding: '0' }; } } ngOnChanges(changes) { if (changes['value'] || this.control) { this.initNumbers(); this.calculateHalfValue(); } } initNumbers() { this.numbers = Array(this.ratingCount) .fill(0) .map((x, i) => i); if (this.control) { this.selectedValue = this.control.value || 0; } else { this.selectedValue = this.value; } this.hoverIndex = this.selectedValue - 1; } enter(i) { if (this.disabled) { return; } this.isHovered = true; this.hoverIndex = i; this.hoverChange.emit(1 + i); } leave(i) { if (this.disabled) { return; } this.isHovered = false; this.hoverIndex = this.selectedValue - 1; } setSelected(i) { if (this.disabled) { return; } // set/unset selected value on same value click if (this.resetAble && this.selectedValue === i + 1) { this.selectedValue = 0; } else { this.selectedValue = i + 1; } if (this.control) { this.control.setValue(this.selectedValue || null); this.control.markAsTouched(); } else { this.valueChange.emit(this.selectedValue); } this.isHovered = false; this.calculateHalfValue(); } calculateHalfValue() { this.halfValue = Math.round(100 * (this.selectedValue - Math.floor(this.selectedValue))); this.halfIndex = Math.ceil(this.selectedValue) - 1; } } NgRatingBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: NgRatingBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); NgRatingBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: NgRatingBarComponent, selector: "ng-rating-bar", inputs: { ratingCount: "ratingCount", colorActive: "colorActive", colorDefault: "colorDefault", disabled: "disabled", resetAble: "resetAble", control: "control", styles: "styles", value: "value", symbol: "symbol" }, outputs: { valueChange: "valueChange", hoverChange: "hoverChange" }, usesOnChanges: true, ngImport: i0, template: ` <ng-container *ngFor="let item of numbers; let i = index"> <span class="star" (mouseenter)="enter(i)" (mouseleave)="leave(i)" (click)="setSelected(i)" [ngStyle]="{'color': (i <= hoverIndex) ? colorActive : colorDefault}" [style.fontSize]="styles.fontSize" [style.backgroundColor]="styles.backgroundColor" [style.marginRight]="styles.margin" [style.padding]="styles.padding" > <span [innerHTML]="symbol"></span> <span class="star half" *ngIf="!isHovered && i == halfIndex" [style.width.%]="halfValue" [style.color]="colorActive" [innerHTML]="symbol" [style.padding]="styles.padding" > </span> </span> </ng-container> `, isInline: true, styles: [".star{position:relative}.star:not(.half){min-height:20px;min-width:20px;cursor:pointer;display:inline-block}.star.active{color:inherit}.star.half{height:inherit;font-size:inherit;cursor:pointer;position:absolute;left:0;top:0;display:inline-block;overflow:hidden}\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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: NgRatingBarComponent, decorators: [{ type: Component, args: [{ selector: 'ng-rating-bar', template: ` <ng-container *ngFor="let item of numbers; let i = index"> <span class="star" (mouseenter)="enter(i)" (mouseleave)="leave(i)" (click)="setSelected(i)" [ngStyle]="{'color': (i <= hoverIndex) ? colorActive : colorDefault}" [style.fontSize]="styles.fontSize" [style.backgroundColor]="styles.backgroundColor" [style.marginRight]="styles.margin" [style.padding]="styles.padding" > <span [innerHTML]="symbol"></span> <span class="star half" *ngIf="!isHovered && i == halfIndex" [style.width.%]="halfValue" [style.color]="colorActive" [innerHTML]="symbol" [style.padding]="styles.padding" > </span> </span> </ng-container> `, styles: [".star{position:relative}.star:not(.half){min-height:20px;min-width:20px;cursor:pointer;display:inline-block}.star.active{color:inherit}.star.half{height:inherit;font-size:inherit;cursor:pointer;position:absolute;left:0;top:0;display:inline-block;overflow:hidden}\n"] }] }], ctorParameters: function () { return []; }, propDecorators: { ratingCount: [{ type: Input }], colorActive: [{ type: Input }], colorDefault: [{ type: Input }], disabled: [{ type: Input }], resetAble: [{ type: Input }], control: [{ type: Input }], styles: [{ type: Input }], value: [{ type: Input }], valueChange: [{ type: Output }], hoverChange: [{ type: Output }], symbol: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcmF0aW5nLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1yYXRpbmctYmFyL3NyYy9saWIvbmctcmF0aW5nLWJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFHYixNQUFNLGVBQWUsQ0FBQzs7O0FBb0V2QixNQUFNLE9BQU8sb0JBQW9CO0lBMkIvQjtRQTFCUyxnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUN4QixnQkFBVyxHQUFXLFNBQVMsQ0FBQztRQUNoQyxpQkFBWSxHQUFXLFNBQVMsQ0FBQztRQUNqQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFJbEIsV0FBTSxHQUFXO1lBQ3hCLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLGVBQWUsRUFBRSxFQUFFO1lBQ25CLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFLEdBQUc7U0FDYixDQUFDO1FBRU8sVUFBSyxHQUFXLENBQUMsQ0FBQztRQUNqQixnQkFBVyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQy9ELGdCQUFXLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDaEUsV0FBTSxHQUFHLFNBQVMsQ0FBQztRQUU1QixZQUFPLEdBQWtCLEVBQUUsQ0FBQztRQUM1QixlQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNmLGNBQVMsR0FBRyxLQUFLLENBQUM7SUFDSCxDQUFDO0lBYmQsQ0FBQztJQWVILFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDO1FBQ3pD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QUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUUsQ0FBQztRQUMxRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxDQUFDOztpSEE1R1Usb0JBQW9CO3FHQUFwQixvQkFBb0IsdVdBeERyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCVDsyRkErQlUsb0JBQW9CO2tCQTFEaEMsU0FBUzsrQkFDRSxlQUFlLFlBQ2Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5QlQ7MEVBZ0NRLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQU9HLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0UsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmludGVyZmFjZSBTdHlsZXMge1xuICBmb250U2l6ZT86IHN0cmluZztcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBtYXJnaW4/OiBzdHJpbmc7XG4gIHBhZGRpbmc/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nLXJhdGluZy1iYXInLFxuICB0ZW1wbGF0ZTogYFxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG51bWJlcnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJzdGFyXCJcbiAgICAgIChtb3VzZWVudGVyKT1cImVudGVyKGkpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cImxlYXZlKGkpXCJcbiAgICAgIChjbGljayk9XCJzZXRTZWxlY3RlZChpKVwiXG4gICAgICBbbmdTdHlsZV09XCJ7J2NvbG9yJzogKGkgPD0gaG92ZXJJbmRleCkgPyBjb2xvckFjdGl2ZSA6IGNvbG9yRGVmYXVsdH1cIlxuICAgICAgW3N0eWxlLmZvbnRTaXplXT1cInN0eWxlcy5mb250U2l6ZVwiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cInN0eWxlcy5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgW3N0eWxlLm1hcmdpblJpZ2h0XT1cInN0eWxlcy5tYXJnaW5cIlxuICAgICAgW3N0eWxlLnBhZGRpbmddPVwic3R5bGVzLnBhZGRpbmdcIlxuICAgID5cbiAgICA8c3BhbiBbaW5uZXJIVE1MXT1cInN5bWJvbFwiPjwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJzdGFyIGhhbGZcIlxuICAgICAgKm5nSWY9XCIhaXNIb3ZlcmVkICYmIGkgPT0gaGFsZkluZGV4XCJcbiAgICAgIFtzdHlsZS53aWR0aC4lXT1cImhhbGZWYWx1ZVwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiY29sb3JBY3RpdmVcIlxuICAgICAgW2lubmVySFRNTF09XCJzeW1ib2xcIlxuICAgICAgW3N0eWxlLnBhZGRpbmddPVwic3R5bGVzLnBhZGRpbmdcIlxuICAgID5cbiAgPC9zcGFuPlxuPC9zcGFuPlxuPC9uZy1jb250YWluZXI+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgIC5zdGFyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cbiAgLnN0YXI6bm90KC5oYWxmKSB7XG4gICAgbWluLWhlaWdodDogMjBweDtcbiAgICBtaW4td2lkdGg6IDIwcHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxuXG4gIC5zdGFyLmFjdGl2ZSB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cblxuICAuc3Rhci5oYWxmIHtcbiAgICAgIGhlaWdodDogaW5oZXJpdDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDA7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIH1cblxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ1JhdGluZ0JhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgcmF0aW5nQ291bnQ6IG51bWJlciA9IDc7XG4gIEBJbnB1dCgpIGNvbG9yQWN0aXZlOiBzdHJpbmcgPSAnI2VkYjg2Nyc7XG4gIEBJbnB1dCgpIGNvbG9yRGVmYXVsdDogc3RyaW5nID0gJyNkMmQyZDInO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSByZXNldEFibGUgPSBmYWxzZTtcblxuICBASW5wdXQoKSBjb250cm9sPzogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XG5cbiAgQElucHV0KCkgc3R5bGVzOiBTdHlsZXMgPSB7XG4gICAgZm9udFNpemU6ICcyOHB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcnLFxuICAgIG1hcmdpbjogJzVweCcsXG4gICAgcGFkZGluZzogJzAnXG4gIH07O1xuXG4gIEBJbnB1dCgpIHZhbHVlOiBudW1iZXIgPSA1O1xuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBob3ZlckNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQElucHV0KCkgc3ltYm9sID0gJyYjOTczMzsnO1xuXG4gIG51bWJlcnM6IEFycmF5PG51bWJlcj4gPSBbXTtcbiAgaG92ZXJJbmRleCA9IC0xO1xuICBzZWxlY3RlZFZhbHVlID0gMDtcbiAgaGFsZlZhbHVlID0gMDtcbiAgaGFsZkluZGV4ID0gLTE7XG4gIGlzSG92ZXJlZCA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yYXRpbmdDb3VudCA9IHRoaXMucmF0aW5nQ291bnQgfHwgNTtcbiAgICB0aGlzLmNvbG9yQWN0aXZlID0gdGhpcy5jb2xvckFjdGl2ZSB8fCAnI2VkYjg2Nyc7XG4gICAgdGhpcy5jb2xvckRlZmF1bHQgPSB0aGlzLmNvbG9yRGVmYXVsdCB8fCAnI2QyZDJkMic7XG5cblxuICAgIGlmICghdGhpcy5zdHlsZXMpIHtcbiAgICAgIHRoaXMuc3R5bGVzID0ge1xuICAgICAgICBmb250U2l6ZTogJzI4cHgnLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcnLFxuICAgICAgICBtYXJnaW46ICc1cHgnLFxuICAgICAgICBwYWRkaW5nOiAnMCdcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddIHx8IHRoaXMuY29udHJvbCkge1xuICAgICAgdGhpcy5pbml0TnVtYmVycygpO1xuICAgICAgdGhpcy5jYWxjdWxhdGVIYWxmVmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICBpbml0TnVtYmVycygpIHtcbiAgICB0aGlzLm51bWJlcnMgPSBBcnJheSh0aGlzLnJhdGluZ0NvdW50KVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKHgsIGkpID0+IGkpO1xuICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuY29udHJvbC52YWx1ZSB8fCAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuaG92ZXJJbmRleCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZSAtIDE7XG4gIH1cblxuICBlbnRlcihpOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzSG92ZXJlZCA9IHRydWU7XG4gICAgdGhpcy5ob3ZlckluZGV4ID0gaTtcbiAgICB0aGlzLmhvdmVyQ2hhbmdlLmVtaXQoMSArIGkpO1xuXG5cbiAgfVxuICBsZWF2ZShpOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzSG92ZXJlZCA9IGZhbHNlO1xuICAgIHRoaXMuaG92ZXJJbmRleCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZSAtIDE7XG4gIH1cblxuICBzZXRTZWxlY3RlZChpOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHNldC91bnNldCAgc2VsZWN0ZWQgdmFsdWUgb24gc2FtZSB2YWx1ZSBjbGlja1xuICAgIGlmICh0aGlzLnJlc2V0QWJsZSAmJiB0aGlzLnNlbGVjdGVkVmFsdWUgPT09IGkgKyAxKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBpICsgMTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlIHx8IG51bGwpO1xuICAgICAgdGhpcy5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuaXNIb3ZlcmVkID0gZmFsc2U7XG4gICAgdGhpcy5jYWxjdWxhdGVIYWxmVmFsdWUoKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZUhhbGZWYWx1ZSgpIHtcbiAgICB0aGlzLmhhbGZWYWx1ZSA9IE1hdGgucm91bmQoMTAwICogKHRoaXMuc2VsZWN0ZWRWYWx1ZSAtIE1hdGguZmxvb3IodGhpcy5zZWxlY3RlZFZhbHVlKSkgKTtcbiAgICB0aGlzLmhhbGZJbmRleCA9IE1hdGguY2VpbCh0aGlzLnNlbGVjdGVkVmFsdWUpIC0gMTtcbiAgfVxuXG59XG4iXX0=