ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
233 lines (232 loc) • 18.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, ElementRef, Input, Output, EventEmitter, HostBinding, ViewEncapsulation } from '@angular/core';
export class SliderMarks {
/**
* @param {?} _elf
*/
constructor(_elf) {
this._elf = _elf;
this.markArray = [];
this._min = 0;
this._max = 100;
this._marks = {};
this._included = true;
this._className = 'am-slider-mark';
this.onChange = new EventEmitter();
this.onAfterChange = new EventEmitter();
}
/**
* @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 included(value) {
this._included = value;
}
/**
* @param {?} value
* @return {?}
*/
set upperBound(value) {
if (value && value !== this._upperBound) {
this._upperBound = value;
this.setActiveCls();
}
}
/**
* @param {?} value
* @return {?}
*/
set lowerBound(value) {
if (value && value !== this.lowerBound) {
this._lowerBound = value;
this.setActiveCls();
}
}
/**
* @return {?}
*/
get class() {
return this._className;
}
/**
* @param {?} marksKeys
* @return {?}
*/
getMarks(marksKeys) {
this.markArray = [];
marksKeys
.map(parseFloat)
.sort((a, b) => a - b)
.map(point => {
/** @type {?} */
const markItem = {
markLabel: '',
point: '',
className: {},
style: {}
};
/** @type {?} */
const markPoint = this._marks[point];
/** @type {?} */
const markPointIsObject = typeof markPoint === 'object';
/** @type {?} */
const markLabel = markPointIsObject ? markPoint.label : markPoint;
if (!markLabel && markLabel !== 0) {
return null;
}
/** @type {?} */
const isActive = (!this._included && point === this._upperBound) ||
(this._included && point <= this._upperBound && point >= this._lowerBound);
/** @type {?} */
const markClassName = {
[`${this._className}-text`]: true,
[`${this._className}-text-active`]: isActive
};
/** @type {?} */
const bottomStyle = {
marginBottom: '-50%',
bottom: `${((point - this._min) / this._range) * 100}%`
};
/** @type {?} */
const leftStyle = {
width: `${this._markWidth}%`,
marginLeft: `${-this._markWidth / 2}%`,
left: `${((point - this._min) / this._range) * 100}%`
};
/** @type {?} */
const style = leftStyle;
/** @type {?} */
const markStyle = markPointIsObject ? Object.assign({}, style, markPoint.style) : style;
markItem.markLabel = markLabel;
markItem.point = point;
markItem.className = Object.keys(markClassName).join(' ');
markItem.style = markStyle;
this.markArray.push(markItem);
});
}
/**
* @return {?}
*/
setActiveCls() {
for (let i = 0; i < this.markArray.length; i++) {
/** @type {?} */
const point = this.markArray[i].point;
/** @type {?} */
const isActive = (!this._included && point === this._upperBound) ||
(this._included && point <= this._upperBound && point >= this._lowerBound);
this.markArray[i].className = {
[`${this._className}-text`]: true,
[`${this._className}-text-active`]: isActive
};
}
}
/**
* @return {?}
*/
setMarksLable() {
for (let i = 0; i < this.markArray.length; i++) {
/** @type {?} */
const markEle = this._elf.nativeElement.getElementsByClassName(this._className + '-text')[i];
markEle.innerHTML = this.markArray[i].markLabel;
}
}
/**
* @return {?}
*/
ngOnInit() {
/** @type {?} */
const marksKeys = Object.keys(this._marks);
/** @type {?} */
const marksCount = marksKeys.length;
/** @type {?} */
const unit = marksCount > 1 ? 100 / (marksCount - 1) : 100;
this._markWidth = unit * 0.9;
this._range = this._max - this._min;
this.getMarks(marksKeys);
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.setMarksLable();
}
}
SliderMarks.decorators = [
{ type: Component, args: [{
selector: 'SliderMarks, nzm-slider-marks',
template: "<span *ngFor=\"let item of markArray\"\n [ngClass]=\"item.className\"\n [ngStyle]=\"item.style\"\n (onMouseDown)=\"onClickLabel($event, point)\"\n (onTouchStart)=\"onClickLabel($events, point)\">\n</span>",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
SliderMarks.ctorParameters = () => [
{ type: ElementRef }
];
SliderMarks.propDecorators = {
min: [{ type: Input }],
max: [{ type: Input }],
marks: [{ type: Input }],
included: [{ type: Input }],
upperBound: [{ type: Input }],
lowerBound: [{ type: Input }],
onChange: [{ type: Output }],
onAfterChange: [{ type: Output }],
class: [{ type: HostBinding }]
};
if (false) {
/** @type {?} */
SliderMarks.prototype.markArray;
/** @type {?} */
SliderMarks.prototype._min;
/** @type {?} */
SliderMarks.prototype._max;
/** @type {?} */
SliderMarks.prototype._marks;
/** @type {?} */
SliderMarks.prototype._included;
/** @type {?} */
SliderMarks.prototype._className;
/** @type {?} */
SliderMarks.prototype._upperBound;
/** @type {?} */
SliderMarks.prototype._lowerBound;
/** @type {?} */
SliderMarks.prototype._range;
/** @type {?} */
SliderMarks.prototype._markWidth;
/** @type {?} */
SliderMarks.prototype.onChange;
/** @type {?} */
SliderMarks.prototype.onAfterChange;
/** @type {?} */
SliderMarks.prototype._elf;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLW1hcmtzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsic2xpZGVyL3NsaWRlci1tYXJrcy9zbGlkZXItbWFya3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE1BQU07Ozs7SUF5REosWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTt5QkF4RFosRUFBRTtvQkFFSCxDQUFDO29CQUNELEdBQUc7c0JBQ0QsRUFBRTt5QkFDRSxJQUFJOzBCQUNKLGdCQUFnQjt3QkF5Q2xDLElBQUksWUFBWSxFQUFPOzZCQUVsQixJQUFJLFlBQVksRUFBTztLQU9DOzs7OztJQTVDeEMsSUFDSSxHQUFHLENBQUMsS0FBYTtRQUNuQixJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUNuQjtLQUNGOzs7OztJQUNELElBQ0ksR0FBRyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDbkI7S0FDRjs7Ozs7SUFDRCxJQUNJLEtBQUssQ0FBQyxLQUFhO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0tBQ3JCOzs7OztJQUNELElBQ0ksUUFBUSxDQUFDLEtBQWM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7S0FDeEI7Ozs7O0lBQ0QsSUFDSSxVQUFVLENBQUMsS0FBYTtRQUMxQixJQUFJLEtBQUss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VSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdGLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDakQ7S0FDRjs7OztJQUVELFFBQVE7O1FBQ04sTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7O1FBQzNDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7O1FBQ3BDLE1BQU0sSUFBSSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQzNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzFCOzs7O0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztLQUN0Qjs7O1lBM0lGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsK0JBQStCO2dCQUN6Qyw0T0FBNEM7Z0JBQzVDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7O1lBYkMsVUFBVTs7O2tCQTJCVCxLQUFLO2tCQU1MLEtBQUs7b0JBTUwsS0FBSzt1QkFJTCxLQUFLO3lCQUlMLEtBQUs7eUJBT0wsS0FBSzt1QkFPTCxNQUFNOzRCQUVOLE1BQU07b0JBR04sV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEFmdGVyVmlld0luaXQsXG4gIEhvc3RCaW5kaW5nLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnU2xpZGVyTWFya3MsIG56bS1zbGlkZXItbWFya3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2xpZGVyLW1hcmtzLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJNYXJrcyBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIG1hcmtBcnJheTogQXJyYXk8YW55PiA9IFtdO1xuXG4gIHByaXZhdGUgX21pbjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfbWF4OiBudW1iZXIgPSAxMDA7XG4gIHByaXZhdGUgX21hcmtzOiBvYmplY3QgPSB7fTtcbiAgcHJpdmF0ZSBfaW5jbHVkZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIF9jbGFzc05hbWU6IHN0cmluZyA9ICdhbS1zbGlkZXItbWFyayc7XG4gIHByaXZhdGUgX3VwcGVyQm91bmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbG93ZXJCb3VuZDogbnVtYmVyO1xuICBwcml2YXRlIF9yYW5nZTogbnVtYmVyO1xuICBwcml2YXRlIF9tYXJrV2lkdGg6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBzZXQgbWluKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUgPD0gdGhpcy5fbWF4KSB7XG4gICAgICB0aGlzLl9taW4gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG1heCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlID49IHRoaXMuX21pbikge1xuICAgICAgdGhpcy5fbWF4ID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBtYXJrcyh2YWx1ZTogb2JqZWN0KSB7XG4gICAgdGhpcy5fbWFya3MgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgaW5jbHVkZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pbmNsdWRlZCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB1cHBlckJvdW5kKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUgIT09IHRoaXMuX3VwcGVyQm91bmQpIHtcbiAgICAgIHRoaXMuX3VwcGVyQm91bmQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2V0QWN0aXZlQ2xzKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBsb3dlckJvdW5kKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUgIT09IHRoaXMubG93ZXJCb3VuZCkge1xuICAgICAgdGhpcy5fbG93ZXJCb3VuZCA9IHZhbHVlO1xuICAgICAgdGhpcy5zZXRBY3RpdmVDbHMoKTtcbiAgICB9XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkFmdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKClcbiAgZ2V0IGNsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgZ2V0TWFya3MobWFya3NLZXlzKSB7XG4gICAgdGhpcy5tYXJrQXJyYXkgPSBbXTtcbiAgICBtYXJrc0tleXNcbiAgICAgIC5tYXAocGFyc2VGbG9hdClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhIC0gYilcbiAgICAgIC5tYXAocG9pbnQgPT4ge1xuICAgICAgICBjb25zdCBtYXJrSXRlbSA9IHtcbiAgICAgICAgICBtYXJrTGFiZWw6ICcnLFxuICAgICAgICAgIHBvaW50OiAnJyxcbiAgICAgICAgICBjbGFzc05hbWU6IHt9LFxuICAgICAgICAgIHN0eWxlOiB7fVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtYXJrUG9pbnQgPSB0aGlzLl9tYXJrc1twb2ludF07XG4gICAgICAgIGNvbnN0IG1hcmtQb2ludElzT2JqZWN0ID0gdHlwZW9mIG1hcmtQb2ludCA9PT0gJ29iamVjdCc7XG4gICAgICAgIGNvbnN0IG1hcmtMYWJlbCA9IG1hcmtQb2ludElzT2JqZWN0ID8gbWFya1BvaW50LmxhYmVsIDogbWFya1BvaW50O1xuICAgICAgICBpZiAoIW1hcmtMYWJlbCAmJiBtYXJrTGFiZWwgIT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0FjdGl2ZSA9XG4gICAgICAgICAgKCF0aGlzLl9pbmNsdWRlZCAmJiBwb2ludCA9PT0gdGhpcy5fdXBwZXJCb3VuZCkgfHxcbiAgICAgICAgICAodGhpcy5faW5jbHVkZWQgJiYgcG9pbnQgPD0gdGhpcy5fdXBwZXJCb3VuZCAmJiBwb2ludCA+PSB0aGlzLl9sb3dlckJvdW5kKTtcbiAgICAgICAgY29uc3QgbWFya0NsYXNzTmFtZSA9IHtcbiAgICAgICAgICBbYCR7dGhpcy5fY2xhc3NOYW1lfS10ZXh0YF06IHRydWUsXG4gICAgICAgICAgW2Ake3RoaXMuX2NsYXNzTmFtZX0tdGV4dC1hY3RpdmVgXTogaXNBY3RpdmVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYm90dG9tU3R5bGUgPSB7XG4gICAgICAgICAgbWFyZ2luQm90dG9tOiAnLTUwJScsXG4gICAgICAgICAgYm90dG9tOiBgJHsoKHBvaW50IC0gdGhpcy5fbWluKSAvIHRoaXMuX3JhbmdlKSAqIDEwMH0lYFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsZWZ0U3R5bGUgPSB7XG4gICAgICAgICAgd2lkdGg6IGAke3RoaXMuX21hcmtXaWR0aH0lYCxcbiAgICAgICAgICBtYXJnaW5MZWZ0OiBgJHstdGhpcy5fbWFya1dpZHRoIC8gMn0lYCxcbiAgICAgICAgICBsZWZ0OiBgJHsoKHBvaW50IC0gdGhpcy5fbWluKSAvIHRoaXMuX3JhbmdlKSAqIDEwMH0lYFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzdHlsZSA9IGxlZnRTdHlsZTtcbiAgICAgICAgY29uc3QgbWFya1N0eWxlID0gbWFya1BvaW50SXNPYmplY3QgPyB7IC4uLnN0eWxlLCAuLi5tYXJrUG9pbnQuc3R5bGUgfSA6IHN0eWxlO1xuICAgICAgICBtYXJrSXRlbS5tYXJrTGFiZWwgPSBtYXJrTGFiZWw7XG4gICAgICAgIG1hcmtJdGVtLnBvaW50ID0gcG9pbnQ7XG4gICAgICAgIG1hcmtJdGVtLmNsYXNzTmFtZSA9IE9iamVjdC5rZXlzKG1hcmtDbGFzc05hbWUpLmpvaW4oJyAnKTtcbiAgICAgICAgbWFya0l0ZW0uc3R5bGUgPSBtYXJrU3R5bGU7XG4gICAgICAgIHRoaXMubWFya0FycmF5LnB1c2gobWFya0l0ZW0pO1xuICAgICAgfSk7XG4gIH1cblxuICBzZXRBY3RpdmVDbHMoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1hcmtBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcG9pbnQgPSB0aGlzLm1hcmtBcnJheVtpXS5wb2ludDtcbiAgICAgIGNvbnN0IGlzQWN0aXZlID1cbiAgICAgICAgKCF0aGlzLl9pbmNsdWRlZCAmJiBwb2ludCA9PT0gdGhpcy5fdXBwZXJCb3VuZCkgfHxcbiAgICAgICAgKHRoaXMuX2luY2x1ZGVkICYmIHBvaW50IDw9IHRoaXMuX3VwcGVyQm91bmQgJiYgcG9pbnQgPj0gdGhpcy5fbG93ZXJCb3VuZCk7XG4gICAgICB0aGlzLm1hcmtBcnJheVtpXS5jbGFzc05hbWUgPSB7XG4gICAgICAgIFtgJHt0aGlzLl9jbGFzc05hbWV9LXRleHRgXTogdHJ1ZSxcbiAgICAgICAgW2Ake3RoaXMuX2NsYXNzTmFtZX0tdGV4dC1hY3RpdmVgXTogaXNBY3RpdmVcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgc2V0TWFya3NMYWJsZSgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWFya0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtYXJrRWxlID0gdGhpcy5fZWxmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLl9jbGFzc05hbWUgKyAnLXRleHQnKVtpXTtcbiAgICAgIG1hcmtFbGUuaW5uZXJIVE1MID0gdGhpcy5tYXJrQXJyYXlbaV0ubWFya0xhYmVsO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IG1hcmtzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX21hcmtzKTtcbiAgICBjb25zdCBtYXJrc0NvdW50ID0gbWFya3NLZXlzLmxlbmd0aDtcbiAgICBjb25zdCB1bml0ID0gbWFya3NDb3VudCA+IDEgPyAxMDAgLyAobWFya3NDb3VudCAtIDEpIDogMTAwO1xuICAgIHRoaXMuX21hcmtXaWR0aCA9IHVuaXQgKiAwLjk7XG4gICAgdGhpcy5fcmFuZ2UgPSB0aGlzLl9tYXggLSB0aGlzLl9taW47XG4gICAgdGhpcy5nZXRNYXJrcyhtYXJrc0tleXMpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuc2V0TWFya3NMYWJsZSgpO1xuICB9XG59XG4iXX0=