UNPKG

ng-zorro-antd-mobile

Version:

An enterprise-class mobile UI components based on Ant Design and Angular

271 lines 19.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ElementRef, Input, Output, EventEmitter, HostBinding, ViewEncapsulation } from '@angular/core'; export class SliderMarksComponent { /** * @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((/** * @param {?} a * @param {?} b * @return {?} */ (a, b) => a - b)) .map((/** * @param {?} point * @return {?} */ 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(); } } SliderMarksComponent.decorators = [ { type: Component, args: [{ selector: 'SliderMarks, nzm-slider-marks', template: "<span *ngFor=\"let item of markArray\" [ngClass]=\"item.className\" [ngStyle]=\"item.style\"> </span>\n", encapsulation: ViewEncapsulation.None }] } ]; /** @nocollapse */ SliderMarksComponent.ctorParameters = () => [ { type: ElementRef } ]; SliderMarksComponent.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 {?} */ SliderMarksComponent.prototype.markArray; /** * @type {?} * @private */ SliderMarksComponent.prototype._min; /** * @type {?} * @private */ SliderMarksComponent.prototype._max; /** * @type {?} * @private */ SliderMarksComponent.prototype._marks; /** * @type {?} * @private */ SliderMarksComponent.prototype._included; /** * @type {?} * @private */ SliderMarksComponent.prototype._className; /** * @type {?} * @private */ SliderMarksComponent.prototype._upperBound; /** * @type {?} * @private */ SliderMarksComponent.prototype._lowerBound; /** * @type {?} * @private */ SliderMarksComponent.prototype._range; /** * @type {?} * @private */ SliderMarksComponent.prototype._markWidth; /** @type {?} */ SliderMarksComponent.prototype.onChange; /** @type {?} */ SliderMarksComponent.prototype.onAfterChange; /** * @type {?} * @private */ SliderMarksComponent.prototype._elf; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLW1hcmtzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsic2xpZGVyL3NsaWRlci1tYXJrcy9zbGlkZXItbWFya3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE1BQU0sT0FBTyxvQkFBb0I7Ozs7SUF5RC9CLFlBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUF4RHBDLGNBQVMsR0FBZSxFQUFFLENBQUM7UUFFbkIsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUNqQixTQUFJLEdBQVcsR0FBRyxDQUFDO1FBQ25CLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFDcEIsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQixlQUFVLEdBQVcsZ0JBQWdCLENBQUM7UUF5QzlDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRW5DLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQU9ELENBQUM7Ozs7O0lBNUN4QyxJQUNJLEdBQUcsQ0FBQyxLQUFhO1FBQ25CLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQ25CO0lBQ0gsQ0FBQzs7Ozs7SUFDRCxJQUNJLEdBQUcsQ0FBQyxLQUFhO1FBQ25CLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQ25CO0lBQ0gsQ0FBQzs7Ozs7SUFDRCxJQUNJLEtBQUssQ0FBQyxLQUFhO1FBQ3JCLElBQUks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Ozs7SUFDNUIseUNBQWtDOzs7OztJQUNsQywwQ0FBOEM7Ozs7O0lBQzlDLDJDQUE0Qjs7Ozs7SUFDNUIsMkNBQTRCOzs7OztJQUM1QixzQ0FBdUI7Ozs7O0lBQ3ZCLDBDQUEyQjs7SUFvQzNCLHdDQUNtQzs7SUFDbkMsNkNBQ3dDOzs7OztJQU81QixvQ0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBBZnRlclZpZXdJbml0LFxuICBIb3N0QmluZGluZyxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1NsaWRlck1hcmtzLCBuem0tc2xpZGVyLW1hcmtzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NsaWRlci1tYXJrcy5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU2xpZGVyTWFya3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBtYXJrQXJyYXk6IEFycmF5PGFueT4gPSBbXTtcblxuICBwcml2YXRlIF9taW46IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX21heDogbnVtYmVyID0gMTAwO1xuICBwcml2YXRlIF9tYXJrczogb2JqZWN0ID0ge307XG4gIHByaXZhdGUgX2luY2x1ZGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfY2xhc3NOYW1lOiBzdHJpbmcgPSAnYW0tc2xpZGVyLW1hcmsnO1xuICBwcml2YXRlIF91cHBlckJvdW5kOiBudW1iZXI7XG4gIHByaXZhdGUgX2xvd2VyQm91bmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcmFuZ2U6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWFya1dpZHRoOiBudW1iZXI7XG5cbiAgQElucHV0KClcbiAgc2V0IG1pbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlIDw9IHRoaXMuX21heCkge1xuICAgICAgdGhpcy5fbWluID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBtYXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSA+PSB0aGlzLl9taW4pIHtcbiAgICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbWFya3ModmFsdWU6IG9iamVjdCkge1xuICAgIHRoaXMuX21hcmtzID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGluY2x1ZGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5jbHVkZWQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgdXBwZXJCb3VuZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSB0aGlzLl91cHBlckJvdW5kKSB7XG4gICAgICB0aGlzLl91cHBlckJvdW5kID0gdmFsdWU7XG4gICAgICB0aGlzLnNldEFjdGl2ZUNscygpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbG93ZXJCb3VuZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSB0aGlzLmxvd2VyQm91bmQpIHtcbiAgICAgIHRoaXMuX2xvd2VyQm91bmQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2V0QWN0aXZlQ2xzKCk7XG4gICAgfVxuICB9XG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25BZnRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBIb3N0QmluZGluZygpXG4gIGdldCBjbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xhc3NOYW1lO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxmOiBFbGVtZW50UmVmKSB7fVxuXG4gIGdldE1hcmtzKG1hcmtzS2V5cykge1xuICAgIHRoaXMubWFya0FycmF5ID0gW107XG4gICAgbWFya3NLZXlzXG4gICAgICAubWFwKHBhcnNlRmxvYXQpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYSAtIGIpXG4gICAgICAubWFwKHBvaW50ID0+IHtcbiAgICAgICAgY29uc3QgbWFya0l0ZW0gPSB7XG4gICAgICAgICAgbWFya0xhYmVsOiAnJyxcbiAgICAgICAgICBwb2ludDogJycsXG4gICAgICAgICAgY2xhc3NOYW1lOiB7fSxcbiAgICAgICAgICBzdHlsZToge31cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWFya1BvaW50ID0gdGhpcy5fbWFya3NbcG9pbnRdO1xuICAgICAgICBjb25zdCBtYXJrUG9pbnRJc09iamVjdCA9IHR5cGVvZiBtYXJrUG9pbnQgPT09ICdvYmplY3QnO1xuICAgICAgICBjb25zdCBtYXJrTGFiZWwgPSBtYXJrUG9pbnRJc09iamVjdCA/IG1hcmtQb2ludC5sYWJlbCA6IG1hcmtQb2ludDtcbiAgICAgICAgaWYgKCFtYXJrTGFiZWwgJiYgbWFya0xhYmVsICE9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPVxuICAgICAgICAgICghdGhpcy5faW5jbHVkZWQgJiYgcG9pbnQgPT09IHRoaXMuX3VwcGVyQm91bmQpIHx8XG4gICAgICAgICAgKHRoaXMuX2luY2x1ZGVkICYmIHBvaW50IDw9IHRoaXMuX3VwcGVyQm91bmQgJiYgcG9pbnQgPj0gdGhpcy5fbG93ZXJCb3VuZCk7XG4gICAgICAgIGNvbnN0IG1hcmtDbGFzc05hbWUgPSB7XG4gICAgICAgICAgW2Ake3RoaXMuX2NsYXNzTmFtZX0tdGV4dGBdOiB0cnVlLFxuICAgICAgICAgIFtgJHt0aGlzLl9jbGFzc05hbWV9LXRleHQtYWN0aXZlYF06IGlzQWN0aXZlXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJvdHRvbVN0eWxlID0ge1xuICAgICAgICAgIG1hcmdpbkJvdHRvbTogJy01MCUnLFxuICAgICAgICAgIGJvdHRvbTogYCR7KChwb2ludCAtIHRoaXMuX21pbikgLyB0aGlzLl9yYW5nZSkgKiAxMDB9JWBcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbGVmdFN0eWxlID0ge1xuICAgICAgICAgIHdpZHRoOiBgJHt0aGlzLl9tYXJrV2lkdGh9JWAsXG4gICAgICAgICAgbWFyZ2luTGVmdDogYCR7LXRoaXMuX21hcmtXaWR0aCAvIDJ9JWAsXG4gICAgICAgICAgbGVmdDogYCR7KChwb2ludCAtIHRoaXMuX21pbikgLyB0aGlzLl9yYW5nZSkgKiAxMDB9JWBcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBsZWZ0U3R5bGU7XG4gICAgICAgIGNvbnN0IG1hcmtTdHlsZSA9IG1hcmtQb2ludElzT2JqZWN0ID8geyAuLi5zdHlsZSwgLi4ubWFya1BvaW50LnN0eWxlIH0gOiBzdHlsZTtcbiAgICAgICAgbWFya0l0ZW0ubWFya0xhYmVsID0gbWFya0xhYmVsO1xuICAgICAgICBtYXJrSXRlbS5wb2ludCA9IHBvaW50O1xuICAgICAgICBtYXJrSXRlbS5jbGFzc05hbWUgPSBPYmplY3Qua2V5cyhtYXJrQ2xhc3NOYW1lKS5qb2luKCcgJyk7XG4gICAgICAgIG1hcmtJdGVtLnN0eWxlID0gbWFya1N0eWxlO1xuICAgICAgICB0aGlzLm1hcmtBcnJheS5wdXNoKG1hcmtJdGVtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2V0QWN0aXZlQ2xzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tYXJrQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBvaW50ID0gdGhpcy5tYXJrQXJyYXlbaV0ucG9pbnQ7XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9XG4gICAgICAgICghdGhpcy5faW5jbHVkZWQgJiYgcG9pbnQgPT09IHRoaXMuX3VwcGVyQm91bmQpIHx8XG4gICAgICAgICh0aGlzLl9pbmNsdWRlZCAmJiBwb2ludCA8PSB0aGlzLl91cHBlckJvdW5kICYmIHBvaW50ID49IHRoaXMuX2xvd2VyQm91bmQpO1xuICAgICAgdGhpcy5tYXJrQXJyYXlbaV0uY2xhc3NOYW1lID0ge1xuICAgICAgICBbYCR7dGhpcy5fY2xhc3NOYW1lfS10ZXh0YF06IHRydWUsXG4gICAgICAgIFtgJHt0aGlzLl9jbGFzc05hbWV9LXRleHQtYWN0aXZlYF06IGlzQWN0aXZlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHNldE1hcmtzTGFibGUoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1hcmtBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbWFya0VsZSA9IHRoaXMuX2VsZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5fY2xhc3NOYW1lICsgJy10ZXh0JylbaV07XG4gICAgICBtYXJrRWxlLmlubmVySFRNTCA9IHRoaXMubWFya0FycmF5W2ldLm1hcmtMYWJlbDtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBtYXJrc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLl9tYXJrcyk7XG4gICAgY29uc3QgbWFya3NDb3VudCA9IG1hcmtzS2V5cy5sZW5ndGg7XG4gICAgY29uc3QgdW5pdCA9IG1hcmtzQ291bnQgPiAxID8gMTAwIC8gKG1hcmtzQ291bnQgLSAxKSA6IDEwMDtcbiAgICB0aGlzLl9tYXJrV2lkdGggPSB1bml0ICogMC45O1xuICAgIHRoaXMuX3JhbmdlID0gdGhpcy5fbWF4IC0gdGhpcy5fbWluO1xuICAgIHRoaXMuZ2V0TWFya3MobWFya3NLZXlzKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnNldE1hcmtzTGFibGUoKTtcbiAgfVxufVxuIl19