ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
219 lines (218 loc) • 15.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, ElementRef, Input, HostBinding, ViewEncapsulation } from '@angular/core';
export class SliderSteps {
/**
* @param {?} _elf
*/
constructor(_elf) {
this._elf = _elf;
this.prefixCls = 'am-slider';
this.stepArray = [];
this._min = 0;
this._max = 100;
this._marks = {};
this._included = true;
this._dots = false;
}
/**
* @param {?} value
* @return {?}
*/
set min(value) {
if (value && value <= this._max) {
this._min = value;
}
}
/**
* @param {?} value
* @return {?}
*/
set max(value) {
if (value && value >= this._min) {
this._max = value;
}
}
/**
* @param {?} value
* @return {?}
*/
set marks(value) {
this._marks = value;
}
/**
* @param {?} value
* @return {?}
*/
set step(value) {
this._step = value;
}
/**
* @param {?} value
* @return {?}
*/
set included(value) {
this._included = value;
}
/**
* @param {?} value
* @return {?}
*/
set dots(value) {
this._dots = value;
}
/**
* @param {?} value
* @return {?}
*/
set upperBound(value) {
if (value !== undefined && value !== this._upperBound) {
this._upperBound = value;
this.setActiveCls();
}
}
/**
* @param {?} value
* @return {?}
*/
set lowerBound(value) {
if (value !== undefined && value !== this.lowerBound) {
this._lowerBound = value;
this.setActiveCls();
}
}
/**
* @return {?}
*/
get class() {
return 'am-slider-step';
}
/**
* @return {?}
*/
calPoints() {
/** @type {?} */
const points = Object.keys(this._marks).map(parseFloat);
if (this._dots) {
for (let i = this._min; i <= this._max; i = i + this._step) {
if (points.indexOf(i) < 0) {
points.push(i);
}
}
}
return points;
}
/**
* @param {?} points
* @return {?}
*/
getSteps(points) {
/** @type {?} */
const range = this._max - this._min;
this.stepArray = [];
points.map(point => {
/** @type {?} */
const stepItem = {
stepStyle: {},
stepClass: {},
point: null
};
/** @type {?} */
const offset = `${(Math.abs(point - this._min) / range) * 100}%`;
/** @type {?} */
const isActived = (!this._included && point === this._upperBound) ||
(this._included && point <= this._upperBound && point >= this._lowerBound);
/** @type {?} */
let style = Object.assign({ left: offset }, this._dotStyle);
if (isActived) {
style = Object.assign({}, style, this._activeDotStyle);
}
/** @type {?} */
const pointClassName = {
[`${this.prefixCls}-dot`]: true,
[`${this.prefixCls}-dot-active`]: isActived
};
stepItem.point = point;
stepItem.stepStyle = style;
stepItem.stepClass = pointClassName;
this.stepArray.push(stepItem);
});
}
/**
* @return {?}
*/
setActiveCls() {
for (let i = 0; i < this.stepArray.length; i++) {
/** @type {?} */
const point = this.stepArray[i].point;
/** @type {?} */
const isActived = (!this._included && point === this._upperBound) ||
(this._included && point <= this._upperBound && point >= this._lowerBound);
this.stepArray[i].stepClass = {
[`${this.prefixCls}-dot`]: true,
[`${this.prefixCls}-dot-active`]: isActived
};
}
}
/**
* @return {?}
*/
ngOnInit() {
/** @type {?} */
const points = this.calPoints();
this.getSteps(points);
}
}
SliderSteps.decorators = [
{ type: Component, args: [{
selector: 'SliderSteps, nzm-slider-steps',
template: "<span *ngFor=\"let item of stepArray\"\n [ngClass]=\"item.stepClass\"\n [ngStyle]=\"item.stepStyle\">\n</span>",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
SliderSteps.ctorParameters = () => [
{ type: ElementRef }
];
SliderSteps.propDecorators = {
min: [{ type: Input }],
max: [{ type: Input }],
marks: [{ type: Input }],
step: [{ type: Input }],
included: [{ type: Input }],
dots: [{ type: Input }],
upperBound: [{ type: Input }],
lowerBound: [{ type: Input }],
class: [{ type: HostBinding }]
};
if (false) {
/** @type {?} */
SliderSteps.prototype.prefixCls;
/** @type {?} */
SliderSteps.prototype.stepArray;
/** @type {?} */
SliderSteps.prototype._min;
/** @type {?} */
SliderSteps.prototype._max;
/** @type {?} */
SliderSteps.prototype._step;
/** @type {?} */
SliderSteps.prototype._marks;
/** @type {?} */
SliderSteps.prototype._included;
/** @type {?} */
SliderSteps.prototype._upperBound;
/** @type {?} */
SliderSteps.prototype._lowerBound;
/** @type {?} */
SliderSteps.prototype._dots;
/** @type {?} */
SliderSteps.prototype._dotStyle;
/** @type {?} */
SliderSteps.prototype._activeDotStyle;
/** @type {?} */
SliderSteps.prototype._elf;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLXN0ZXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsic2xpZGVyL3NsaWRlci1zdGVwcy9zbGlkZXItc3RlcHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT3JHLE1BQU07Ozs7SUErREosWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTt5QkE5RHhCLFdBQVc7eUJBQ1gsRUFBRTtvQkFFUyxDQUFDO29CQUNELEdBQUc7c0JBRUQsRUFBRTt5QkFDRSxJQUFJO3FCQUdSLEtBQUs7S0FvRFU7Ozs7O0lBaER4QyxJQUNJLEdBQUcsQ0FBQyxLQUFhO1FBQ25CLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQ25CO0tBQ0Y7Ozs7O0lBQ0QsSUFDSSxHQUFHLENBQUMsS0FBYTtRQUNuQixJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUNuQjtLQUNGOzs7OztJQUNELElBQ0ksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7S0FDckI7Ozs7O0lBQ0QsSUFDSSxJQUFJLENBQUMsS0FBYTtRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUNwQjs7Ozs7SUFDRCxJQUNJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0tBQ3hCOzs7OztJQUNELElBQ0ksSUFBSSxDQUFDLEtBQWM7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b25lbnQsIE9uSW5pdCwgRWxlbWVudFJlZiwgSW5wdXQsIEhvc3RCaW5kaW5nLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdTbGlkZXJTdGVwcywgbnptLXNsaWRlci1zdGVwcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zbGlkZXItc3RlcHMuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFNsaWRlclN0ZXBzIGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJlZml4Q2xzID0gJ2FtLXNsaWRlcic7XG4gIHN0ZXBBcnJheSA9IFtdO1xuXG4gIHByaXZhdGUgX21pbjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfbWF4OiBudW1iZXIgPSAxMDA7XG4gIHByaXZhdGUgX3N0ZXA6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWFya3M6IG9iamVjdCA9IHt9O1xuICBwcml2YXRlIF9pbmNsdWRlZDogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgX3VwcGVyQm91bmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbG93ZXJCb3VuZDogbnVtYmVyO1xuICBwcml2YXRlIF9kb3RzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2RvdFN0eWxlOiBvYmplY3Q7XG4gIHByaXZhdGUgX2FjdGl2ZURvdFN0eWxlOiBvYmplY3Q7XG5cbiAgQElucHV0KClcbiAgc2V0IG1pbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlIDw9IHRoaXMuX21heCkge1xuICAgICAgdGhpcy5fbWluID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBtYXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSA+PSB0aGlzLl9taW4pIHtcbiAgICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbWFya3ModmFsdWU6IG9iamVjdCkge1xuICAgIHRoaXMuX21hcmtzID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHN0ZXAodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0ZXAgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgaW5jbHVkZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pbmNsdWRlZCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBkb3RzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZG90cyA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB1cHBlckJvdW5kKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gdGhpcy5fdXBwZXJCb3VuZCkge1xuICAgICAgdGhpcy5fdXBwZXJCb3VuZCA9IHZhbHVlO1xuICAgICAgdGhpcy5zZXRBY3RpdmVDbHMoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGxvd2VyQm91bmQodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSB0aGlzLmxvd2VyQm91bmQpIHtcbiAgICAgIHRoaXMuX2xvd2VyQm91bmQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2V0QWN0aXZlQ2xzKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RCaW5kaW5nKClcbiAgZ2V0IGNsYXNzKCkge1xuICAgIHJldHVybiAnYW0tc2xpZGVyLXN0ZXAnO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxmOiBFbGVtZW50UmVmKSB7fVxuXG4gIGNhbFBvaW50cygpIHtcbiAgICBjb25zdCBwb2ludHMgPSBPYmplY3Qua2V5cyh0aGlzLl9tYXJrcykubWFwKHBhcnNlRmxvYXQpO1xuICAgIGlmICh0aGlzLl9kb3RzKSB7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5fbWluOyBpIDw9IHRoaXMuX21heDsgaSA9IGkgKyB0aGlzLl9zdGVwKSB7XG4gICAgICAgIGlmIChwb2ludHMuaW5kZXhPZihpKSA8IDApIHtcbiAgICAgICAgICBwb2ludHMucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcG9pbnRzO1xuICB9XG5cbiAgZ2V0U3RlcHMocG9pbnRzKSB7XG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLl9tYXggLSB0aGlzLl9taW47XG4gICAgdGhpcy5zdGVwQXJyYXkgPSBbXTtcbiAgICBwb2ludHMubWFwKHBvaW50ID0+IHtcbiAgICAgIGNvbnN0IHN0ZXBJdGVtID0ge1xuICAgICAgICBzdGVwU3R5bGU6IHt9LFxuICAgICAgICBzdGVwQ2xhc3M6IHt9LFxuICAgICAgICBwb2ludDogbnVsbFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG9mZnNldCA9IGAkeyhNYXRoLmFicyhwb2ludCAtIHRoaXMuX21pbikgLyByYW5nZSkgKiAxMDB9JWA7XG4gICAgICBjb25zdCBpc0FjdGl2ZWQgPVxuICAgICAgICAoIXRoaXMuX2luY2x1ZGVkICYmIHBvaW50ID09PSB0aGlzLl91cHBlckJvdW5kKSB8fFxuICAgICAgICAodGhpcy5faW5jbHVkZWQgJiYgcG9pbnQgPD0gdGhpcy5fdXBwZXJCb3VuZCAmJiBwb2ludCA+PSB0aGlzLl9sb3dlckJvdW5kKTtcbiAgICAgIGxldCBzdHlsZSA9IHsgbGVmdDogb2Zmc2V0LCAuLi50aGlzLl9kb3RTdHlsZSB9O1xuICAgICAgaWYgKGlzQWN0aXZlZCkge1xuICAgICAgICBzdHlsZSA9IHsgLi4uc3R5bGUsIC4uLnRoaXMuX2FjdGl2ZURvdFN0eWxlIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBvaW50Q2xhc3NOYW1lID0ge1xuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWRvdGBdOiB0cnVlLFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWRvdC1hY3RpdmVgXTogaXNBY3RpdmVkXG4gICAgICB9O1xuICAgICAgc3RlcEl0ZW0ucG9pbnQgPSBwb2ludDtcbiAgICAgIHN0ZXBJdGVtLnN0ZXBTdHlsZSA9IHN0eWxlO1xuICAgICAgc3RlcEl0ZW0uc3RlcENsYXNzID0gcG9pbnRDbGFzc05hbWU7XG4gICAgICB0aGlzLnN0ZXBBcnJheS5wdXNoKHN0ZXBJdGVtKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldEFjdGl2ZUNscygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3RlcEFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwb2ludCA9IHRoaXMuc3RlcEFycmF5W2ldLnBvaW50O1xuICAgICAgY29uc3QgaXNBY3RpdmVkID1cbiAgICAgICAgKCF0aGlzLl9pbmNsdWRlZCAmJiBwb2ludCA9PT0gdGhpcy5fdXBwZXJCb3VuZCkgfHxcbiAgICAgICAgKHRoaXMuX2luY2x1ZGVkICYmIHBvaW50IDw9IHRoaXMuX3VwcGVyQm91bmQgJiYgcG9pbnQgPj0gdGhpcy5fbG93ZXJCb3VuZCk7XG4gICAgICB0aGlzLnN0ZXBBcnJheVtpXS5zdGVwQ2xhc3MgPSB7XG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tZG90YF06IHRydWUsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tZG90LWFjdGl2ZWBdOiBpc0FjdGl2ZWRcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgcG9pbnRzID0gdGhpcy5jYWxQb2ludHMoKTtcbiAgICB0aGlzLmdldFN0ZXBzKHBvaW50cyk7XG4gIH1cbn1cbiJdfQ==