UNPKG

ngx-pluto

Version:
229 lines 19.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewEncapsulation, Input, ElementRef, ViewChild, Output, EventEmitter } from "@angular/core"; import * as moment_ from 'moment'; /** @type {?} */ var moment = moment_; import { NpDatePickerService } from "../date-picker.service"; import { NotifyService } from "../../shared/services/notify.service"; /** * @ignore */ var NpTimePickerPanel = /** @class */ (function () { function NpTimePickerPanel(datePickerService, notifyService) { this.datePickerService = datePickerService; this.notifyService = notifyService; this.onTimeClicked = new EventEmitter(); this.onConfirmClicked = new EventEmitter(); this.hours = []; this.minutes = []; this.seconds = []; this.selectedHour = ''; this.selectedMinute = ''; this.selectedSecond = ''; } /** * @return {?} */ NpTimePickerPanel.prototype.ngOnInit = /** * @return {?} */ function () { this.buildData(); }; /** * @param {?} changes * @return {?} */ NpTimePickerPanel.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { /** @type {?} */ var time = (/** @type {?} */ (changes['time'].currentValue)); }; /** * @param {?} hour * @return {?} */ NpTimePickerPanel.prototype.onHourClicked = /** * @param {?} hour * @return {?} */ function (hour) { this.selectedHour = hour; this.buildSelectedTime(); this.onTimeClicked.emit(this.time); }; /** * @param {?} minute * @return {?} */ NpTimePickerPanel.prototype.onMinuteClicked = /** * @param {?} minute * @return {?} */ function (minute) { this.selectedMinute = minute; this.buildSelectedTime(); this.onTimeClicked.emit(this.time); }; /** * @param {?} second * @return {?} */ NpTimePickerPanel.prototype.onSecondClicked = /** * @param {?} second * @return {?} */ function (second) { this.selectedSecond = second; this.buildSelectedTime(); this.onTimeClicked.emit(this.time); }; /** * @return {?} */ NpTimePickerPanel.prototype.onConfirmButtonClicked = /** * @return {?} */ function () { this.onConfirmClicked.emit(this.time); }; /** * 根据传入时间滚动到指定时间位置 * @param time 当前传入时间,格式为@link TIME_FORMAT */ /** * 根据传入时间滚动到指定时间位置 * @param {?} time 当前传入时间,格式为\@link TIME_FORMAT * @return {?} */ NpTimePickerPanel.prototype.scrollTo = /** * 根据传入时间滚动到指定时间位置 * @param {?} time 当前传入时间,格式为\@link TIME_FORMAT * @return {?} */ function (time) { /** @type {?} */ var itemHeight = 28; this.selectedHour = time.split(':')[0]; this.selectedMinute = time.split(':')[1]; this.selectedSecond = time.split(':')[2]; this.hoursElementRef.nativeElement.scrollTo({ top: +this.selectedHour * itemHeight }); this.minutesElementRef.nativeElement.scrollTo({ top: +this.selectedMinute * itemHeight }); this.secondsElementRef.nativeElement.scrollTo({ top: +this.selectedSecond * itemHeight }); }; /** * @private * @return {?} */ NpTimePickerPanel.prototype.buildData = /** * @private * @return {?} */ function () { for (var i = 0; i < 24; i++) { this.hours.push((i + '').padStart(2, '0')); } for (var i = 0; i < 60; i++) { this.minutes.push((i + '').padStart(2, '0')); } for (var i = 0; i < 60; i++) { this.seconds.push((i + '').padStart(2, '0')); } }; /** * @private * @return {?} */ NpTimePickerPanel.prototype.buildSelectedTime = /** * @private * @return {?} */ function () { this.time = this.selectedHour; if (this.selectedMinute) { this.time += ':' + this.selectedMinute; } if (this.selectedSecond) { this.time += ':' + this.selectedSecond; } this.scrollTo(this.time); }; NpTimePickerPanel.decorators = [ { type: Component, args: [{ selector: "np-time-picker-panel", template: "<div class=\"np-time-picker-panel flex-wrap col-flex\">\r\n <div class=\"time-picker-header\">{{ time }}</div>\r\n <div class=\"time-picker-body flex-wrap row-flex\">\r\n <div #hoursElementRef class=\"hours flex-wrap col-flex\">\r\n <span *ngFor=\"let hour of hours\" [ngClass]=\"{'selected-item': selectedHour === hour}\"\r\n (click)=\"onHourClicked(hour)\">{{ hour }}</span>\r\n </div>\r\n <div #minutesElementRef class=\"minutes flex-wrap col-flex\">\r\n <span *ngFor=\"let minute of minutes\" [ngClass]=\"{'selected-item': selectedMinute === minute}\"\r\n (click)=\"onMinuteClicked(minute)\">{{ minute }}</span>\r\n </div>\r\n <div #secondsElementRef class=\"seconds flex-wrap col-flex\">\r\n <span *ngFor=\"let second of seconds\" [ngClass]=\"{'selected-item': selectedSecond === second}\"\r\n (click)=\"onSecondClicked(second)\">{{ second }}</span>\r\n </div>\r\n </div>\r\n <div class=\"time-picker-footer flex-wrap col-flex\">\r\n <np-button *ngIf=\"confirmButtonText\" (click)=\"onConfirmButtonClicked()\">{{ confirmButtonText }}</np-button>\r\n </div>\r\n</div>\r\n", encapsulation: ViewEncapsulation.None, styles: [".np-time-picker-panel{width:169px}.np-time-picker-panel .time-picker-header{height:41px;line-height:41px;text-align:center;font-weight:500}.np-time-picker-panel .time-picker-body{height:232px;justify-content:space-between}.np-time-picker-panel .time-picker-body .hours,.np-time-picker-panel .time-picker-body .minutes,.np-time-picker-panel .time-picker-body .seconds{width:56px;flex-wrap:nowrap;overflow:hidden;padding-bottom:204px;scroll-behavior:smooth}.np-time-picker-panel .time-picker-body .hours:hover,.np-time-picker-panel .time-picker-body .minutes:hover,.np-time-picker-panel .time-picker-body .seconds:hover{overflow-y:auto}.np-time-picker-panel .time-picker-body .hours:hover>span,.np-time-picker-panel .time-picker-body .minutes:hover>span,.np-time-picker-panel .time-picker-body .seconds:hover>span{margin-left:-8.5px}.np-time-picker-panel .time-picker-body .hours>span,.np-time-picker-panel .time-picker-body .minutes>span,.np-time-picker-panel .time-picker-body .seconds>span{width:56px;height:28px;text-align:center;line-height:28px}.np-time-picker-panel .time-picker-footer{height:41px;justify-content:center;align-items:flex-end}.np-time-picker-panel .time-picker-footer .np-button-wrapper{width:auto;letter-spacing:initial;font-size:13px;line-height:16px}"] }] } ]; /** @nocollapse */ NpTimePickerPanel.ctorParameters = function () { return [ { type: NpDatePickerService }, { type: NotifyService } ]; }; NpTimePickerPanel.propDecorators = { time: [{ type: Input }], confirmButtonText: [{ type: Input }], onTimeClicked: [{ type: Output }], onConfirmClicked: [{ type: Output }], hoursElementRef: [{ type: ViewChild, args: ['hoursElementRef',] }], minutesElementRef: [{ type: ViewChild, args: ['minutesElementRef',] }], secondsElementRef: [{ type: ViewChild, args: ['secondsElementRef',] }] }; return NpTimePickerPanel; }()); export { NpTimePickerPanel }; if (false) { /** * 传入time,格式为‘HH:mm:ss,如23:59:59’ * @type {?} */ NpTimePickerPanel.prototype.time; /** @type {?} */ NpTimePickerPanel.prototype.confirmButtonText; /** @type {?} */ NpTimePickerPanel.prototype.onTimeClicked; /** @type {?} */ NpTimePickerPanel.prototype.onConfirmClicked; /** @type {?} */ NpTimePickerPanel.prototype.hoursElementRef; /** @type {?} */ NpTimePickerPanel.prototype.minutesElementRef; /** @type {?} */ NpTimePickerPanel.prototype.secondsElementRef; /** @type {?} */ NpTimePickerPanel.prototype.hours; /** @type {?} */ NpTimePickerPanel.prototype.minutes; /** @type {?} */ NpTimePickerPanel.prototype.seconds; /** @type {?} */ NpTimePickerPanel.prototype.selectedHour; /** @type {?} */ NpTimePickerPanel.prototype.selectedMinute; /** @type {?} */ NpTimePickerPanel.prototype.selectedSecond; /** * @type {?} * @private */ NpTimePickerPanel.prototype.datePickerService; /** * @type {?} * @private */ NpTimePickerPanel.prototype.notifyService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXItcGFuZWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtcGx1dG8vIiwic291cmNlcyI6WyJsaWIvZGF0ZS1waWNrZXIvY29tcG9uZW50cy90aW1lLXBpY2tlci1wYW5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBVSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBaUIsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SSxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQzs7SUFBTyxNQUFNLEdBQUcsT0FBTztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7QUFLckU7SUF5QkksMkJBQW9CLGlCQUFzQyxFQUM5QyxhQUE0QjtRQURwQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXFCO1FBQzlDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBZjlCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMzQyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBTXhELFVBQUssR0FBa0IsRUFBRSxDQUFDO1FBQzFCLFlBQU8sR0FBa0IsRUFBRSxDQUFDO1FBQzVCLFlBQU8sR0FBa0IsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLG1CQUFjLEdBQVcsRUFBRSxDQUFDO0lBR2dCLENBQUM7Ozs7SUFFN0Msb0NBQVE7OztJQUFSO1FBQ0ksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7Ozs7O0lBRUQsdUNBQVc7Ozs7SUFBWCxVQUFZLE9BQXNCOztZQUN4QixJQUFJLEdBQVcsbUJBQUEsT0FBTyxDQUFDLE1BQU0sQ0FBQyxD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ImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIE9uSW5pdCwgSW5wdXQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgU2ltcGxlQ2hhbmdlcywgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgKiBhcyBtb21lbnRfIGZyb20gJ21vbWVudCc7IGNvbnN0IG1vbWVudCA9IG1vbWVudF9cclxuaW1wb3J0IHsgTnBEYXRlUGlja2VyU2VydmljZSB9IGZyb20gXCIuLi9kYXRlLXBpY2tlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE5vdGlmeVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3NlcnZpY2VzL25vdGlmeS5zZXJ2aWNlXCI7XHJcblxyXG4vKipcclxuICogQGlnbm9yZVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogYG5wLXRpbWUtcGlja2VyLXBhbmVsYCxcclxuICAgIHRlbXBsYXRlVXJsOiAndGltZS1waWNrZXItcGFuZWwuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsndGltZS1waWNrZXItcGFuZWwuc2NzcyddLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTnBUaW1lUGlja2VyUGFuZWwgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgLyoq5Lyg5YWldGltZe+8jOagvOW8j+S4uuKAmEhIOm1tOnNz77yM5aaCMjM6NTk6NTnigJkgKi9cclxuICAgIEBJbnB1dCgpIHRpbWU6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGNvbmZpcm1CdXR0b25UZXh0OiBzdHJpbmc7XHJcblxyXG4gICAgQE91dHB1dCgpIG9uVGltZUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkNvbmZpcm1DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnaG91cnNFbGVtZW50UmVmJykgaG91cnNFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICAgIEBWaWV3Q2hpbGQoJ21pbnV0ZXNFbGVtZW50UmVmJykgbWludXRlc0VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gICAgQFZpZXdDaGlsZCgnc2Vjb25kc0VsZW1lbnRSZWYnKSBzZWNvbmRzRWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gICAgaG91cnM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgIG1pbnV0ZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgIHNlY29uZHM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgIHNlbGVjdGVkSG91cjogc3RyaW5nID0gJyc7XHJcbiAgICBzZWxlY3RlZE1pbnV0ZTogc3RyaW5nID0gJyc7XHJcbiAgICBzZWxlY3RlZFNlY29uZDogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlUGlja2VyU2VydmljZTogTnBEYXRlUGlja2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5vdGlmeVNlcnZpY2U6IE5vdGlmeVNlcnZpY2UpIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuYnVpbGREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGNvbnN0IHRpbWU6IHN0cmluZyA9IGNoYW5nZXNbJ3RpbWUnXS5jdXJyZW50VmFsdWUgYXMgc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIG9uSG91ckNsaWNrZWQoaG91cjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBob3VyO1xyXG4gICAgICAgIHRoaXMuYnVpbGRTZWxlY3RlZFRpbWUoKTtcclxuICAgICAgICB0aGlzLm9uVGltZUNsaWNrZWQuZW1pdCh0aGlzLnRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTWludXRlQ2xpY2tlZChtaW51dGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtaW51dGU7XHJcbiAgICAgICAgdGhpcy5idWlsZFNlbGVjdGVkVGltZSgpO1xyXG4gICAgICAgIHRoaXMub25UaW1lQ2xpY2tlZC5lbWl0KHRoaXMudGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWNvbmRDbGlja2VkKHNlY29uZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZCA9IHNlY29uZDtcclxuICAgICAgICB0aGlzLmJ1aWxkU2VsZWN0ZWRUaW1lKCk7XHJcbiAgICAgICAgdGhpcy5vblRpbWVDbGlja2VkLmVtaXQodGhpcy50aW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNvbmZpcm1CdXR0b25DbGlja2VkKCkge1xyXG4gICAgICAgIHRoaXMub25Db25maXJtQ2xpY2tlZC5lbWl0KHRoaXMudGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmoLnmja7kvKDlhaXml7bpl7Tmu5rliqjliLDmjIflrprml7bpl7TkvY3nva5cclxuICAgICAqIEBwYXJhbSB0aW1lIOW9k+WJjeS8oOWFpeaXtumXtO+8jOagvOW8j+S4ukBsaW5rIFRJTUVfRk9STUFUXHJcbiAgICAgKi9cclxuICAgIHNjcm9sbFRvKHRpbWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSAyODsgICAvLyBlYWNoIGl0ZW0gaGVpZ2h0IGlzIDI4cHhcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRpbWUuc3BsaXQoJzonKVswXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdGltZS5zcGxpdCgnOicpWzFdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWNvbmQgPSB0aW1lLnNwbGl0KCc6JylbMl07XHJcblxyXG4gICAgICAgIHRoaXMuaG91cnNFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICB0b3A6ICt0aGlzLnNlbGVjdGVkSG91ciAqIGl0ZW1IZWlnaHRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5taW51dGVzRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHtcclxuICAgICAgICAgICAgdG9wOiArdGhpcy5zZWxlY3RlZE1pbnV0ZSAqIGl0ZW1IZWlnaHRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWNvbmRzRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHtcclxuICAgICAgICAgICAgdG9wOiArdGhpcy5zZWxlY3RlZFNlY29uZCAqIGl0ZW1IZWlnaHRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkRGF0YSgpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI0OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5ob3Vycy5wdXNoKChpICsgJycpLnBhZFN0YXJ0KDIsICcwJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2MDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWludXRlcy5wdXNoKChpICsgJycpLnBhZFN0YXJ0KDIsICcwJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2MDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kcy5wdXNoKChpICsgJycpLnBhZFN0YXJ0KDIsICcwJykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkU2VsZWN0ZWRUaW1lKCkge1xyXG4gICAgICAgIHRoaXMudGltZSA9IHRoaXMuc2VsZWN0ZWRIb3VyO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWludXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZSArPSAnOicgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWNvbmQpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lICs9ICc6JyArIHRoaXMuc2VsZWN0ZWRTZWNvbmQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbFRvKHRoaXMudGltZSk7XHJcbiAgICB9XHJcbn0iXX0=