UNPKG

ang-rating

Version:

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

232 lines 18.2 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 {?} */ var customValueProvider = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return AngRatingComponent; })), multi: true }; var AngRatingComponent = /** @class */ (function () { function AngRatingComponent(_renderer, _elementRef) { this._renderer = _renderer; this._elementRef = _elementRef; this._value = ''; this.propagateChange = (/** * @return {?} */ function () { }); 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 {?} */ AngRatingComponent.prototype.ngOnInit = /** * @return {?} */ function () { 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 {?} */ AngRatingComponent.prototype.writeValue = /** * @param {?} value * @return {?} */ function (value) { if (value != undefined) { this._value = value; this.indxValue = this.items.indexOf(value); /** @type {?} */ var indx = this.items.indexOf(value); /** @type {?} */ var percentage = ((indx + 1) / this.items.length) * 100; /** @type {?} */ var minRateColor = 100 / this.color.length; /** @type {?} */ var rateArray = []; for (var i = minRateColor; i < 101; i += minRateColor) { rateArray.push(i); } for (var 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 {?} */ AngRatingComponent.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this.propagateChange = fn; }; /** * @param {?} fn * @return {?} */ AngRatingComponent.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { }; /** * @return {?} */ AngRatingComponent.prototype.createRating = /** * @return {?} */ function () { if (this.min < this.max) { for (var i = this.min; i <= this.max; i += this.step) { this.items.push(i); } } else { for (var i = this.min; i >= this.max; i -= this.step) { this.items.push(i); } } }; /** * @param {?} event * @param {?} id * @return {?} */ AngRatingComponent.prototype.update = /** * @param {?} event * @param {?} id * @return {?} */ function (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 = function () { return [ { 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 }] }; return AngRatingComponent; }()); export { AngRatingComponent }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5nLXJhdGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmctcmF0aW5nLyIsInNvdXJjZXMiOlsibGliL2FuZy1yYXRpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0lBQ25FLG1CQUFtQixHQUFHO0lBQzFCLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLGNBQU0sT0FBQSxrQkFBa0IsRUFBbEIsQ0FBa0IsRUFBQztJQUNqRCxLQUFLLEVBQUUsSUFBSTtDQUNaO0FBRUQ7SUE0QkUsNEJBQW9CLFNBQW9CLEVBQVUsV0FBdUI7UUFBckQsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBaEJ6RSxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osb0JBQWU7OztRQUFRLGNBQVEsQ0FBQyxFQUFDO1FBRXhCLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxRQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULFNBQUksR0FBRyxNQUFNLENBQUE7UUFDYixTQUFJLEdBQUcsTUFBTSxDQUFDO1FBRWQsVUFBSyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNiLGVBQVUsR0FBRyxJQUFJLFlBQVksQ0FBUyxJQUFJLENBQUMsQ0FBQztRQUN0RCxVQUFLLEdBQWEsRUFBRSxDQUFDO0lBSXdELENBQUM7SUFUdkQsQ0FBQzs7OztJQVd4QixxQ0FBUTs7O0lBQVI7UUFDRSxJQUFJLENBQUMsSUFBSSxHQUFHLENB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LG1DQUEyQjs7SUFDM0IsbUNBQXVCOztJQUN2Qix3Q0FBc0Q7O0lBQ3RELG1DQUFxQjs7SUFDckIsdUNBQWlCOzs7OztJQUdMLHVDQUE0Qjs7Ozs7SUFBRSx5Q0FBK0I7Ozs7OztBQTJEM0UsdUNBVUM7OztJQVRDLGlDQUFjOztJQUNkLGtDQUFjOztJQUNkLGdDQUFhOztJQUNiLGdDQUFhOztJQUNiLGtDQUFlOztJQUNmLGtDQUFlOztJQUNmLGlDQUFjOztJQUNkLGtDQUFnQjs7SUFDaEIsa0NBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIGZvcndhcmRSZWYsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgUmVuZGVyZXIyLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5jb25zdCBjdXN0b21WYWx1ZVByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQW5nUmF0aW5nQ29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FuZy1yYXRpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vYW5nLXJhdGluZy5jb21wb25lbnQuaHRtbCcsXG4gIC8vIHN0eWxlczogW10sXG4gIHN0eWxlVXJsczogWycuL2FuZy1yYXRpbmcuY29tcG9uZW50LnNjc3MnXSxcblxuICBwcm92aWRlcnM6IFtjdXN0b21WYWx1ZVByb3ZpZGVyXVxufSlcbmV4cG9ydCBjbGFzcyBBbmdSYXRpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuXG4gIGluZHhWYWx1ZTogbnVtYmVyO1xuICBfdmFsdWUgPSAnJztcbiAgcHJvcGFnYXRlQ2hhbmdlOiBhbnkgPSAoKSA9PiB7IH07XG4gIEBJbnB1dCgpIHJhdGluZ09iamVjdDogYW55O1xuICBASW5wdXQoKSBtYXggPSAyNTtcbiAgQElucHV0KCkgbWluID0gNTtcbiAgQElucHV0KCkgc3RlcCA9IDU7XG4gIEBJbnB1dCgpIGljb24gPSAnc3RhcidcbiAgQElucHV0KCkgdHlwZSA9ICdpY29uJzs7XG4gIEBJbnB1dCgpIHRpdGxlO1xuICBASW5wdXQoKSBjb2xvciA9IFsnZ3JlZW4nXTtcbiAgQElucHV0KCkgaW5wdXQgPSBmYWxzZTtcbiAgQE91dHB1dCgpIHJhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4odHJ1ZSk7XG4gIGl0ZW1zOiBudW1iZXJbXSA9IFtdO1xuICByYXRlQ29sb3I6IFN0cmluZ1xuXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy50eXBlID0gIXRoaXMudHlwZSA/ICdpY29uJyA6IHRoaXMudHlwZTtcbiAgICB0aGlzLm1heCA9ICF0aGlzLm1heCA/IDI1IDogdGhpcy5tYXg7XG4gICAgdGhpcy5taW4gPSAhdGhpcy5taW4gPyA1IDogdGhpcy5taW47XG4gICAgdGhpcy5zdGVwID0gIXRoaXMuc3RlcCA/IDUgOiB0aGlzLnN0ZXA7XG4gICAgdGhpcy5pY29uID0gIXRoaXMuaWNvbiA/ICdzdGFyJyA6IHRoaXMuaWNvbjtcbiAgICB0aGlzLmNvbG9yID0gIXRoaXMuY29sb3IgfHwgIXRoaXMuY29sb3IubGVuZ3RoID8gWydncmVlbiddIDogdGhpcy5jb2xvcjtcbiAgICB0aGlzLmNyZWF0ZVJhdGluZygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaW5keFZhbHVlID0gdGhpcy5pdGVtcy5pbmRleE9mKHZhbHVlKTtcbiAgICAgIGxldCBpbmR4ID0gdGhpcy5pdGVtcy5pbmRleE9mKHZhbHVlKTtcbiAgICAgIGxldCBwZXJjZW50YWdlID0gKChpbmR4ICsgMSkgLyB0aGlzLml0ZW1zLmxlbmd0aCkgKiAxMDA7XG4gICAgICBsZXQgbWluUmF0ZUNvbG9yID0gMTAwIC8gdGhpcy5jb2xvci5sZW5ndGg7XG4gICAgICBsZXQgcmF0ZUFycmF5ID0gW107XG4gICAgICBmb3IgKGxldCBpID0gbWluUmF0ZUNvbG9yOyBpIDwgMTAxOyBpICs9IG1pblJhdGVDb2xvcikge1xuICAgICAgICByYXRlQXJyYXkucHVzaChpKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2xvci5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocmF0ZUFycmF5WzBdID49IHBlcmNlbnRhZ2UpIHtcbiAgICAgICAgICB0aGlzLnJhdGVDb2xvciA9IHRoaXMuY29sb3JbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJhdGVBcnJheVtpXSA8IHBlcmNlbnRhZ2UgJiYgcGVyY2VudGFnZSA8PSByYXRlQXJyYXlbaSArIDFdKSB7XG4gICAgICAgICAgdGhpcy5yYXRlQ29sb3IgPSB0aGlzLmNvbG9yW2kgKyAxXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHsgfVxuXG4gIGNyZWF0ZVJhdGluZygpIHtcbiAgICBpZiAodGhpcy5taW4gPCB0aGlzLm1heCkge1xuICAgICAgZm9yIChsZXQgaSA9IHRoaXMubWluOyBpIDw9IHRoaXMubWF4OyBpICs9IHRoaXMuc3RlcCkge1xuICAgICAgICB0aGlzLml0ZW1zLnB1c2goaSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IHRoaXMubWluOyBpID49IHRoaXMubWF4OyBpIC09IHRoaXMuc3RlcCkge1xuICAgICAgICB0aGlzLml0ZW1zLnB1c2goaSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlKGV2ZW50LCBpZCkge1xuICAgIHRoaXMuX3ZhbHVlID0gaWQ7XG4gICAgdGhpcy5yYXRlQ2hhbmdlLmVtaXQoaWQpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmF0aW5nRmllbGRDb25maWcge1xuICB0eXBlPzogU3RyaW5nLFxuICB2YWx1ZTogTnVtYmVyLFxuICBtaW4/OiBOdW1iZXIsXG4gIG1heD86IE51bWJlcixcbiAgc3RlcHM/OiBOdW1iZXIsXG4gIHRpdGxlPzogU3RyaW5nLFxuICBpY29uPzogU3RyaW5nLFxuICBpbnB1dD86IEJvb2xlYW4sXG4gIGNvbG9yPzogU3RyaW5nW11cbn0iXX0=