@zulkarnainshah/ng-rating-bar
Version:
Fully customizable rating bar component for Angular based apps
1 lines • 10.1 kB
Source Map (JSON)
{"version":3,"file":"zulkarnainshah-ng-rating-bar.mjs","sources":["../../../projects/ng-rating-bar/src/lib/ng-rating-bar.component.ts","../../../projects/ng-rating-bar/src/lib/ng-rating-bar.component.html","../../../projects/ng-rating-bar/src/lib/ng-rating-bar.module.ts","../../../projects/ng-rating-bar/src/public-api.ts","../../../projects/ng-rating-bar/src/zulkarnainshah-ng-rating-bar.ts"],"sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n@Component({\n selector: 'ng-rating-bar',\n templateUrl: './ng-rating-bar.component.html',\n styleUrls: ['./ng-rating-bar.component.scss'],\n})\nexport class NgRatingBarComponent implements OnInit {\n @Input() rating: number = 0;\n @Input() filledImgSrc?: string = '../../assets/ng-rating-bar/star_filled.png';\n @Input() emptyImgSrc?: string = '../../assets/ng-rating-bar/star_empty.png';\n @Input() halfFilledImgSrc?: string =\n '../../assets/ng-rating-bar/star_half.png';\n @Input() size: string = '15px';\n @Input() totalStars: number = 5;\n @Input() disabled: boolean = false;\n @Input() animateOnHover: boolean = true;\n @Input() gap: string = '3px';\n @Output() ratingChanged = new EventEmitter<number>();\n\n editableRating: number = 0;\n filledStars: number = 0;\n hasFractions: boolean = false;\n emptyStars: number = 5;\n\n constructor() {}\n\n ngOnInit(): void {\n this.editableRating = this.rating;\n this.calculateStars();\n }\n\n private calculateStars() {\n //If totalStars supplied by user is a number with decimal point\n this.totalStars = Math.ceil(this.totalStars);\n if (this.editableRating != null && this.editableRating > this.totalStars) {\n this.editableRating = this.totalStars;\n }\n let tokens = this.editableRating\n ? this.editableRating?.toString().split('.')\n : null;\n if (tokens) {\n var wholeNumbers = tokens[0]\n ? tokens[0]\n : this.editableRating?.toString();\n this.hasFractions = tokens[1] ? true : false;\n this.filledStars = wholeNumbers ? parseInt(wholeNumbers) : 0;\n this.emptyStars = this.totalStars - Math.ceil(this.editableRating!);\n }\n }\n\n mouseEnteredFilledStar(event: any, index: number) {\n this.filledStars = index + 1;\n this.editableRating = this.filledStars;\n this.calculateStars();\n if (this.animateOnHover) {\n event.target.classList.add('hover-animation');\n }\n }\n\n mouseEnteredEmptyStar(event: any, index: number) {\n this.editableRating = this.filledStars + (index + 1);\n this.calculateStars();\n if (this.animateOnHover) {\n event.target.classList.add('hover-animation');\n }\n }\n\n mouseEnteredHalfStar(event: any) {\n if (this.animateOnHover) {\n event.target.classList.add('hover-animation');\n }\n }\n\n mouseLeftFilledStar(event: any, index: number) {\n this.editableRating = this.filledStars - (index - 1);\n this.calculateStars();\n if (this.animateOnHover) {\n event.target.classList.remove('hover-animation');\n }\n }\n\n mouseLeftEmptyStar(event: any) {\n if (this.animateOnHover) {\n event.target.classList.remove('hover-animation');\n }\n }\n\n mouseLeftHalfStar(event: any) {\n if (this.animateOnHover) {\n event.target.classList.remove('hover-animation');\n }\n }\n\n onMouseLeftContainer() {\n this.editableRating = this.rating;\n this.calculateStars();\n }\n\n filledStarClicked(index: number) {\n this.rating = index + 1;\n this.editableRating = this.rating;\n this.calculateStars();\n this.ratingChanged?.emit(this.rating);\n }\n}\n","<div class=\"container\" (mouseleave)=\"onMouseLeftContainer()\">\n <!-- Full-filled stars -->\n <img\n *ngFor=\"let _ of [].constructor(filledStars); let i = index\"\n src=\"{{ filledImgSrc }}\"\n class=\"star\"\n [ngStyle]=\"{ width: size, margin: '0px' + ' ' + gap }\"\n (mouseenter)=\"disabled ? '' : mouseEnteredFilledStar($event, i)\"\n (mouseleave)=\"disabled ? '' : mouseLeftFilledStar($event, i)\"\n (click)=\"disabled ? '' : filledStarClicked(i)\"\n />\n\n <!-- Half-filled stars -->\n <img\n *ngIf=\"hasFractions\"\n src=\"{{ halfFilledImgSrc }}\"\n class=\"star\"\n (mouseenter)=\"disabled ? '' : mouseEnteredHalfStar($event)\"\n (mouseleave)=\"disabled ? '' : mouseLeftHalfStar($event)\"\n [ngStyle]=\"{ width: size, margin: '0px' + ' ' + gap }\"\n />\n\n <!-- Empty stars -->\n <img\n *ngFor=\"let _ of [].constructor(emptyStars); let i = index\"\n src=\"{{ emptyImgSrc }}\"\n class=\"star\"\n [ngStyle]=\"{ width: size, margin: '0px' + ' ' + gap }\"\n (mouseenter)=\"disabled ? '' : mouseEnteredEmptyStar($event, i)\"\n (mouseleave)=\"disabled ? '' : mouseLeftEmptyStar($event)\"\n />\n</div>\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgRatingBarComponent } from './ng-rating-bar.component';\n\n@NgModule({\n declarations: [NgRatingBarComponent],\n imports: [BrowserModule],\n exports: [NgRatingBarComponent],\n})\nexport class NgRatingBarModule {}\n","/*\n * Public API Surface of ng-rating-bar\n */\n\n// export * from './lib/ng-rating-bar.service';\nexport * from './lib/ng-rating-bar.component';\nexport * from './lib/ng-rating-bar.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}