UNPKG

ang-rating

Version:

This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.3.18.

211 lines 17.3 kB
/** * @fileoverview added by tsickle * Generated from: lib/ang-rating.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, forwardRef, Input, Output, EventEmitter, Renderer2, ElementRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; /** @type {?} */ const customValueProvider = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ () => AngRatingComponent)), multi: true }; export class AngRatingComponent { /** * @param {?} _renderer * @param {?} _elementRef */ constructor(_renderer, _elementRef) { this._renderer = _renderer; this._elementRef = _elementRef; this._value = ''; this.propagateChange = (/** * @return {?} */ () => { }); this.max = 25; this.min = 5; this.step = 5; this.icon = 'star'; this.type = 'icon'; this.color = ['green']; this.input = false; this.rateChange = new EventEmitter(true); this.items = []; } ; /** * @return {?} */ ngOnInit() { this.type = !this.type ? 'icon' : this.type; this.max = !this.max ? 25 : this.max; this.min = !this.min ? 5 : this.min; this.step = !this.step ? 5 : this.step; this.icon = !this.icon ? 'star' : this.icon; this.color = !this.color || !this.color.length ? ['green'] : this.color; this.createRating(); } /** * @param {?} value * @return {?} */ writeValue(value) { if (value != undefined) { this._value = value; this.indxValue = this.items.indexOf(value); /** @type {?} */ let indx = this.items.indexOf(value); /** @type {?} */ let percentage = ((indx + 1) / this.items.length) * 100; /** @type {?} */ let minRateColor = 100 / this.color.length; /** @type {?} */ let rateArray = []; for (let i = minRateColor; i < 101; i += minRateColor) { rateArray.push(i); } for (let i = 0; i < this.color.length; i++) { if (rateArray[0] >= percentage) { this.rateColor = this.color[0]; } if (rateArray[i] < percentage && percentage <= rateArray[i + 1]) { this.rateColor = this.color[i + 1]; } } } } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this.propagateChange = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { } /** * @return {?} */ createRating() { if (this.min < this.max) { for (let i = this.min; i <= this.max; i += this.step) { this.items.push(i); } } else { for (let i = this.min; i >= this.max; i -= this.step) { this.items.push(i); } } } /** * @param {?} event * @param {?} id * @return {?} */ update(event, id) { this._value = id; this.rateChange.emit(id); } } AngRatingComponent.decorators = [ { type: Component, args: [{ selector: 'ang-rating', template: "<mat-card>\r\n <mat-card-content>\r\n <mat-card-title>{{type }}</mat-card-title>\r\n <div *ngIf=\"type == 'dropdown'\" class=\"dropdown-block\">\r\n <mat-select placeholder=\"Select rating\" [(ngModel)]=\"_value\" (ngModelChange)=\"update($event,_value)\" [ngClass]=\"{'disabled': !input}\">\r\n <mat-option *ngFor=\"let item of items\" [value]=\"item\">\r\n {{item}} {{title}}\r\n </mat-option>\r\n </mat-select>\r\n </div>\r\n <div *ngIf=\"type == 'number'\" class=\"number-block\">\r\n <ul class=\"rating-list\">\r\n <li *ngFor=\"let item of items; let i = index\" (click)=\"update($event,item)\" [ngClass]=\"{'disabled': !input}\">\r\n <span class=\"rating-icon\" [style.background-color]=\"indxValue >= i ? rateColor : ''\">\r\n <!-- <div class=\"rating-number\">{{item | positivenumber}}</div> -->\r\n <div class=\"rating-number\">{{item}}</div>\r\n </span>\r\n </li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"type != 'number' && type != 'dropdown'\" class=\"icon-block\">\r\n <ul class=\"rating-list\">\r\n <li *ngFor=\"let item of items; let i = index\" (click)=\"update($event,item)\" [ngClass]=\"{'disabled': !input}\">\r\n <span class=\"rating-icon\" [style.color]=\"indxValue >= i ? rateColor : ''\">\r\n <i class=\"material-icons\">{{type}}</i>\r\n </span>\r\n </li>\r\n </ul>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>", providers: [customValueProvider], styles: [".number-block ul.rating-list li{list-style-type:none;display:inline-block}.number-block ul.rating-list li .rating-icon{width:33px;display:inline-block;border:1px solid #ccc;border-radius:50%;height:33px;margin-right:10px;cursor:pointer;background-color:#ccc;color:#fff}.number-block ul.rating-list li .rating-icon .rating-number{margin:4px auto 0;display:table}.icon-block ul.rating-list li{list-style-type:none;display:inline-block}.icon-block ul.rating-list li .rating-icon{height:33px;margin-right:10px;color:gray;cursor:pointer}.icon-block ul.rating-list li .rating-icon .rating-number{margin:4px auto 0;display:table}.disabled{pointer-events:none;opacity:.6}"] }] } ]; /** @nocollapse */ AngRatingComponent.ctorParameters = () => [ { type: Renderer2 }, { type: ElementRef } ]; AngRatingComponent.propDecorators = { ratingObject: [{ type: Input }], max: [{ type: Input }], min: [{ type: Input }], step: [{ type: Input }], icon: [{ type: Input }], type: [{ type: Input }], title: [{ type: Input }], color: [{ type: Input }], input: [{ type: Input }], rateChange: [{ type: Output }] }; if (false) { /** @type {?} */ AngRatingComponent.prototype.indxValue; /** @type {?} */ AngRatingComponent.prototype._value; /** @type {?} */ AngRatingComponent.prototype.propagateChange; /** @type {?} */ AngRatingComponent.prototype.ratingObject; /** @type {?} */ AngRatingComponent.prototype.max; /** @type {?} */ AngRatingComponent.prototype.min; /** @type {?} */ AngRatingComponent.prototype.step; /** @type {?} */ AngRatingComponent.prototype.icon; /** @type {?} */ AngRatingComponent.prototype.type; /** @type {?} */ AngRatingComponent.prototype.title; /** @type {?} */ AngRatingComponent.prototype.color; /** @type {?} */ AngRatingComponent.prototype.input; /** @type {?} */ AngRatingComponent.prototype.rateChange; /** @type {?} */ AngRatingComponent.prototype.items; /** @type {?} */ AngRatingComponent.prototype.rateColor; /** * @type {?} * @private */ AngRatingComponent.prototype._renderer; /** * @type {?} * @private */ AngRatingComponent.prototype._elementRef; /* Skipping unhandled member: ;*/ } /** * @record */ export function RatingFieldConfig() { } if (false) { /** @type {?|undefined} */ RatingFieldConfig.prototype.type; /** @type {?} */ RatingFieldConfig.prototype.value; /** @type {?|undefined} */ RatingFieldConfig.prototype.min; /** @type {?|undefined} */ RatingFieldConfig.prototype.max; /** @type {?|undefined} */ RatingFieldConfig.prototype.steps; /** @type {?|undefined} */ RatingFieldConfig.prototype.title; /** @type {?|undefined} */ RatingFieldConfig.prototype.icon; /** @type {?|undefined} */ RatingFieldConfig.prototype.input; /** @type {?|undefined} */ RatingFieldConfig.prototype.color; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5nLXJhdGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmctcmF0aW5nLyIsInNvdXJjZXMiOlsibGliL2FuZy1yYXRpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O01BQ25FLG1CQUFtQixHQUFHO0lBQzFCLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFDO0lBQ2pELEtBQUssRUFBRSxJQUFJO0NBQ1o7QUFVRCxNQUFNLE9BQU8sa0JBQWtCOzs7OztJQW9CN0IsWUFBb0IsU0FBb0IsRUFBVSxXQUF1QjtRQUFyRCxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFoQnpFLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFDWixvQkFBZTs7O1FBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFDO1FBRXhCLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxRQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULFNBQUksR0FBRyxNQUFNLENBQUE7UUFDYixTQUFJLEdBQUcsTUFBTSxDQUFDO1FBRWQsVUFBSyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNiLGVBQVUsR0FBRyxJQUFJLFlBQVksQ0FBUyxJQUFJLENBQUMsQ0FBQztRQUN0RCxVQUFLLEdBQWEsRUFBRSxDQUFDO0lBSXdELENBQUM7SUFUdkQsQ0FBQzs7OztJQVd4QixRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM1QyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDeEUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7Ozs7O0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxLQUFLLElBQUksU0FBUyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7O2dCQUN2QyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFD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NEI7Ozs7O0lBQUUseUNBQStCOzs7Ozs7QUEyRDNFLHVDQVVDOzs7SUFUQyxpQ0FBYzs7SUFDZCxrQ0FBYzs7SUFDZCxnQ0FBYTs7SUFDYixnQ0FBYTs7SUFDYixrQ0FBZTs7SUFDZixrQ0FBZTs7SUFDZixpQ0FBYzs7SUFDZCxrQ0FBZ0I7O0lBQ2hCLGtDQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBmb3J3YXJkUmVmLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFJlbmRlcmVyMiwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuY29uc3QgY3VzdG9tVmFsdWVQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFuZ1JhdGluZ0NvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhbmctcmF0aW5nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FuZy1yYXRpbmcuY29tcG9uZW50Lmh0bWwnLFxuICAvLyBzdHlsZXM6IFtdLFxuICBzdHlsZVVybHM6IFsnLi9hbmctcmF0aW5nLmNvbXBvbmVudC5zY3NzJ10sXG5cbiAgcHJvdmlkZXJzOiBbY3VzdG9tVmFsdWVQcm92aWRlcl1cbn0pXG5leHBvcnQgY2xhc3MgQW5nUmF0aW5nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cblxuICBpbmR4VmFsdWU6IG51bWJlcjtcbiAgX3ZhbHVlID0gJyc7XG4gIHByb3BhZ2F0ZUNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xuICBASW5wdXQoKSByYXRpbmdPYmplY3Q6IGFueTtcbiAgQElucHV0KCkgbWF4ID0gMjU7XG4gIEBJbnB1dCgpIG1pbiA9IDU7XG4gIEBJbnB1dCgpIHN0ZXAgPSA1O1xuICBASW5wdXQoKSBpY29uID0gJ3N0YXInXG4gIEBJbnB1dCgpIHR5cGUgPSAnaWNvbic7O1xuICBASW5wdXQoKSB0aXRsZTtcbiAgQElucHV0KCkgY29sb3IgPSBbJ2dyZWVuJ107XG4gIEBJbnB1dCgpIGlucHV0ID0gZmFsc2U7XG4gIEBPdXRwdXQoKSByYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KHRydWUpO1xuICBpdGVtczogbnVtYmVyW10gPSBbXTtcbiAgcmF0ZUNvbG9yOiBTdHJpbmdcblxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudHlwZSA9ICF0aGlzLnR5cGUgPyAnaWNvbicgOiB0aGlzLnR5cGU7XG4gICAgdGhpcy5tYXggPSAhdGhpcy5tYXggPyAyNSA6IHRoaXMubWF4O1xuICAgIHRoaXMubWluID0gIXRoaXMubWluID8gNSA6IHRoaXMubWluO1xuICAgIHRoaXMuc3RlcCA9ICF0aGlzLnN0ZXAgPyA1IDogdGhpcy5zdGVwO1xuICAgIHRoaXMuaWNvbiA9ICF0aGlzLmljb24gPyAnc3RhcicgOiB0aGlzLmljb247XG4gICAgdGhpcy5jb2xvciA9ICF0aGlzLmNvbG9yIHx8ICF0aGlzLmNvbG9yLmxlbmd0aCA/IFsnZ3JlZW4nXSA6IHRoaXMuY29sb3I7XG4gICAgdGhpcy5jcmVhdGVSYXRpbmcoKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLmluZHhWYWx1ZSA9IHRoaXMuaXRlbXMuaW5kZXhPZih2YWx1ZSk7XG4gICAgICBsZXQgaW5keCA9IHRoaXMuaXRlbXMuaW5kZXhPZih2YWx1ZSk7XG4gICAgICBsZXQgcGVyY2VudGFnZSA9ICgoaW5keCArIDEpIC8gdGhpcy5pdGVtcy5sZW5ndGgpICogMTAwO1xuICAgICAgbGV0IG1pblJhdGVDb2xvciA9IDEwMCAvIHRoaXMuY29sb3IubGVuZ3RoO1xuICAgICAgbGV0IHJhdGVBcnJheSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IG1pblJhdGVDb2xvcjsgaSA8IDEwMTsgaSArPSBtaW5SYXRlQ29sb3IpIHtcbiAgICAgICAgcmF0ZUFycmF5LnB1c2goaSk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sb3IubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJhdGVBcnJheVswXSA+PSBwZXJjZW50YWdlKSB7XG4gICAgICAgICAgdGhpcy5yYXRlQ29sb3IgPSB0aGlzLmNvbG9yWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyYXRlQXJyYXlbaV0gPCBwZXJjZW50YWdlICYmIHBlcmNlbnRhZ2UgPD0gcmF0ZUFycmF5W2kgKyAxXSkge1xuICAgICAgICAgIHRoaXMucmF0ZUNvbG9yID0gdGhpcy5jb2xvcltpICsgMV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuKSB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7IH1cblxuICBjcmVhdGVSYXRpbmcoKSB7XG4gICAgaWYgKHRoaXMubWluIDwgdGhpcy5tYXgpIHtcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLm1pbjsgaSA8PSB0aGlzLm1heDsgaSArPSB0aGlzLnN0ZXApIHtcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGkpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLm1pbjsgaSA+PSB0aGlzLm1heDsgaSAtPSB0aGlzLnN0ZXApIHtcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZShldmVudCwgaWQpIHtcbiAgICB0aGlzLl92YWx1ZSA9IGlkO1xuICAgIHRoaXMucmF0ZUNoYW5nZS5lbWl0KGlkKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhdGluZ0ZpZWxkQ29uZmlnIHtcbiAgdHlwZT86IFN0cmluZyxcbiAgdmFsdWU6IE51bWJlcixcbiAgbWluPzogTnVtYmVyLFxuICBtYXg/OiBOdW1iZXIsXG4gIHN0ZXBzPzogTnVtYmVyLFxuICB0aXRsZT86IFN0cmluZyxcbiAgaWNvbj86IFN0cmluZyxcbiAgaW5wdXQ/OiBCb29sZWFuLFxuICBjb2xvcj86IFN0cmluZ1tdXG59Il19