ngx-bootstrap
Version:
Native Angular Bootstrap Components
16 lines (14 loc) • 18.6 kB
JavaScript
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("@angular/core"),require("@angular/forms"),require("rxjs"),require("ngx-bootstrap/mini-ngrx"),require("@angular/common")):"function"==typeof define&&define.amd?define("ngx-bootstrap/timepicker",["exports","@angular/core","@angular/forms","rxjs","ngx-bootstrap/mini-ngrx","@angular/common"],n):n(((e=e||self)["ngx-bootstrap"]=e["ngx-bootstrap"]||{},e["ngx-bootstrap"].timepicker={}),e.ng.core,e.ng.forms,e.rxjs,e.miniNgrx,e.ng.common)}(this,(function(e,n,t,i,s,o){"use strict";
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */var r=function(e,n){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,n){e.__proto__=n}||function(e,n){for(var t in n)n.hasOwnProperty(t)&&(e[t]=n[t])})(e,n)};var a=function(){function e(){}return e.prototype.writeValue=function(n){return{type:e.WRITE_VALUE,payload:n}},e.prototype.changeHours=function(n){return{type:e.CHANGE_HOURS,payload:n}},e.prototype.changeMinutes=function(n){return{type:e.CHANGE_MINUTES,payload:n}},e.prototype.changeSeconds=function(n){return{type:e.CHANGE_SECONDS,payload:n}},e.prototype.setTime=function(n){return{type:e.SET_TIME_UNIT,payload:n}},e.prototype.updateControls=function(n){return{type:e.UPDATE_CONTROLS,payload:n}},e.WRITE_VALUE="[timepicker] write value from ng model",e.CHANGE_HOURS="[timepicker] change hours",e.CHANGE_MINUTES="[timepicker] change minutes",e.CHANGE_SECONDS="[timepicker] change seconds",e.SET_TIME_UNIT="[timepicker] set time unit",e.UPDATE_CONTROLS="[timepicker] update controls",e.decorators=[{type:n.Injectable}],e}();function c(e){return!!e&&(!(e instanceof Date&&isNaN(e.getHours()))&&("string"!=typeof e||c(new Date(e))))}function u(e,n){return!(e.min&&n<e.min)&&!(e.max&&n>e.max)}function d(e){return"number"==typeof e?e:parseInt(e,10)}function p(e,n){void 0===n&&(n=!1);var t=d(e);return isNaN(t)||t<0||t>(n?12:24)?NaN:t}function l(e){var n=d(e);return isNaN(n)||n<0||n>60?NaN:n}function h(e){var n=d(e);return isNaN(n)||n<0||n>60?NaN:n}function m(e){return"string"==typeof e?new Date(e):e}function f(e,n){if(!e)return f(b(new Date,0,0,0),n);var t=e.getHours(),i=e.getMinutes(),s=e.getSeconds();return n.hour&&(t+=d(n.hour)),n.minute&&(i+=d(n.minute)),n.seconds&&(s+=d(n.seconds)),b(e,t,i,s)}function g(e,n){var t=p(n.hour),i=l(n.minute),s=h(n.seconds)||0;return n.isPM&&12!==t&&(t+=12),e?isNaN(t)||isNaN(i)?e:b(e,t,i,s):isNaN(t)||isNaN(i)?e:b(new Date,t,i,s)}function b(e,n,t,i){var s=new Date(e.getFullYear(),e.getMonth(),e.getDate(),n,t,i,e.getMilliseconds());return s.setFullYear(e.getFullYear()),s.setMonth(e.getMonth()),s.setDate(e.getDate()),s}function y(e){var n=e.toString();return n.length>1?n:"0"+n}function v(e,n){return!isNaN(p(e,n))}function S(e){return!isNaN(l(e))}function w(e){return!isNaN(h(e))}function M(e,n,t,i){return void 0===n&&(n="0"),void 0===t&&(t="0"),v(e,i)&&S(n)&&w(t)}function x(e,n){if(e.readonlyInput||e.disabled)return!1;if(n){if("wheel"===n.source&&!e.mousewheel)return!1;if("key"===n.source&&!e.arrowkeys)return!1}return!0}function I(e){return{hourStep:e.hourStep,minuteStep:e.minuteStep,secondsStep:e.secondsStep,readonlyInput:e.readonlyInput,disabled:e.disabled,mousewheel:e.mousewheel,arrowkeys:e.arrowkeys,showSpinners:e.showSpinners,showMeridian:e.showMeridian,showSeconds:e.showSeconds,meridians:e.meridians,min:e.min,max:e.max}}var k=function(){function e(){this.hourStep=1,this.minuteStep=5,this.secondsStep=10,this.showMeridian=!0,this.meridians=["AM","PM"],this.readonlyInput=!1,this.disabled=!1,this.mousewheel=!0,this.arrowkeys=!0,this.showSpinners=!0,this.showSeconds=!1,this.showMinutes=!0,this.hoursPlaceholder="HH",this.minutesPlaceholder="MM",this.secondsPlaceholder="SS",this.ariaLabelHours="hours",this.ariaLabelMinutes="minutes",this.ariaLabelSeconds="seconds"}return e.decorators=[{type:n.Injectable,args:[{providedIn:"root"}]}],e.ɵprov=n["ɵɵdefineInjectable"]({factory:function(){return new e},token:e,providedIn:"root"}),e}();var _={value:null,config:new k,controls:{canIncrementHours:!0,canIncrementMinutes:!0,canIncrementSeconds:!0,canDecrementHours:!0,canDecrementMinutes:!0,canDecrementSeconds:!0,canToggleMeridian:!0}};function N(e,n){switch(void 0===e&&(e=_),n.type){case a.WRITE_VALUE:return Object.assign({},e,{value:n.payload});case a.CHANGE_HOURS:if(!x(e.config,n.payload)||(o=n.payload,r=e.controls,!o.step||o.step>0&&!r.canIncrementHours||o.step<0&&!r.canDecrementHours))return e;var t=f(e.value,{hour:n.payload.step});return!e.config.max&&!e.config.min||u(e.config,t)?Object.assign({},e,{value:t}):e;case a.CHANGE_MINUTES:if(!x(e.config,n.payload)||!function(e,n){return!!e.step&&(!(e.step>0&&!n.canIncrementMinutes)&&!(e.step<0&&!n.canDecrementMinutes))}(n.payload,e.controls))return e;t=f(e.value,{minute:n.payload.step});return!e.config.max&&!e.config.min||u(e.config,t)?Object.assign({},e,{value:t}):e;case a.CHANGE_SECONDS:if(!x(e.config,n.payload)||!function(e,n){return!!e.step&&(!(e.step>0&&!n.canIncrementSeconds)&&!(e.step<0&&!n.canDecrementSeconds))}(n.payload,e.controls))return e;t=f(e.value,{seconds:n.payload.step});return!e.config.max&&!e.config.min||u(e.config,t)?Object.assign({},e,{value:t}):e;case a.SET_TIME_UNIT:if(!x(e.config))return e;t=g(e.value,n.payload);return Object.assign({},e,{value:t});case a.UPDATE_CONTROLS:var i=function(e,n){var t=n.min,i=n.max,s=n.hourStep,o=n.minuteStep,r=n.secondsStep,a=n.showSeconds,c={canIncrementHours:!0,canIncrementMinutes:!0,canIncrementSeconds:!0,canDecrementHours:!0,canDecrementMinutes:!0,canDecrementSeconds:!0,canToggleMeridian:!0};if(!e)return c;if(i){var u=f(e,{hour:s});if(c.canIncrementHours=i>u&&e.getHours()+s<24,!c.canIncrementHours){var d=f(e,{minute:o});c.canIncrementMinutes=a?i>d:i>=d}if(!c.canIncrementMinutes){var p=f(e,{seconds:r});c.canIncrementSeconds=i>=p}e.getHours()<12&&(c.canToggleMeridian=f(e,{hour:12})<i)}if(t){u=f(e,{hour:-s});if(c.canDecrementHours=t<u,!c.canDecrementHours){d=f(e,{minute:-o});c.canDecrementMinutes=a?t<d:t<=d}if(!c.canDecrementMinutes){p=f(e,{seconds:-r});c.canDecrementSeconds=t<=p}e.getHours()>=12&&(c.canToggleMeridian=f(e,{hour:-12})>t)}return c}(e.value,n.payload),s={value:e.value,config:n.payload,controls:i};return e.config.showMeridian!==s.config.showMeridian&&e.value&&(s.value=new Date(e.value)),Object.assign({},e,s);default:return e}var o,r}var H=function(e){function t(){var n=new i.BehaviorSubject({type:"[mini-ngrx] dispatcher init"}),t=new s.MiniState(_,n,N);return e.call(this,n,N,t)||this}return function(e,n){function t(){this.constructor=e}r(e,n),e.prototype=null===n?Object.create(n):(t.prototype=n.prototype,new t)}(t,e),t.decorators=[{type:n.Injectable}],t.ctorParameters=function(){return[]},t}(s.MiniStore),D={provide:t.NG_VALUE_ACCESSOR,useExisting:n.forwardRef((function(){return E})),multi:!0},E=function(){function e(e,t,i,s){var o=this;this._cd=t,this._store=i,this._timepickerActions=s,this.isValid=new n.EventEmitter,this.invalidHours=!1,this.invalidMinutes=!1,this.invalidSeconds=!1,this.onChange=Function.prototype,this.onTouched=Function.prototype,Object.assign(this,e),this.timepickerSub=i.select((function(e){return e.value})).subscribe((function(e){o._renderTime(e),o.onChange(e),o._store.dispatch(o._timepickerActions.updateControls(I(o)))})),i.select((function(e){return e.controls})).subscribe((function(e){o.isValid.emit(M(o.hours,o.minutes,o.seconds,o.isPM())),Object.assign(o,e),t.markForCheck()}))}return Object.defineProperty(e.prototype,"isSpinnersVisible",{get:function(){return this.showSpinners&&!this.readonlyInput},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isEditable",{get:function(){return!(this.readonlyInput||this.disabled)},enumerable:!0,configurable:!0}),e.prototype.resetValidation=function(){this.invalidHours=!1,this.invalidMinutes=!1,this.invalidSeconds=!1},e.prototype.isPM=function(){return this.showMeridian&&this.meridian===this.meridians[1]},e.prototype.prevDef=function(e){e.preventDefault()},e.prototype.wheelSign=function(e){return-1*Math.sign(e.deltaY)},e.prototype.ngOnChanges=function(e){this._store.dispatch(this._timepickerActions.updateControls(I(this)))},e.prototype.changeHours=function(e,n){void 0===n&&(n=""),this.resetValidation(),this._store.dispatch(this._timepickerActions.changeHours({step:e,source:n}))},e.prototype.changeMinutes=function(e,n){void 0===n&&(n=""),this.resetValidation(),this._store.dispatch(this._timepickerActions.changeMinutes({step:e,source:n}))},e.prototype.changeSeconds=function(e,n){void 0===n&&(n=""),this.resetValidation(),this._store.dispatch(this._timepickerActions.changeSeconds({step:e,source:n}))},e.prototype.updateHours=function(e){if(this.resetValidation(),this.hours=e,!(v(this.hours,this.isPM())&&this.isValidLimit()))return this.invalidHours=!0,this.isValid.emit(!1),void this.onChange(null);this._updateTime()},e.prototype.updateMinutes=function(e){if(this.resetValidation(),this.minutes=e,!(S(this.minutes)&&this.isValidLimit()))return this.invalidMinutes=!0,this.isValid.emit(!1),void this.onChange(null);this._updateTime()},e.prototype.updateSeconds=function(e){if(this.resetValidation(),this.seconds=e,!(w(this.seconds)&&this.isValidLimit()))return this.invalidSeconds=!0,this.isValid.emit(!1),void this.onChange(null);this._updateTime()},e.prototype.isValidLimit=function(){return e={hour:this.hours,minute:this.minutes,seconds:this.seconds,isPM:this.isPM()},n=this.max,t=this.min,i=g(new Date,e),!(n&&i>n||t&&i<t);var e,n,t,i},e.prototype._updateTime=function(){var e=this.showSeconds?this.seconds:void 0,n=this.showMinutes?this.minutes:void 0;if(!M(this.hours,n,e,this.isPM()))return this.isValid.emit(!1),void this.onChange(null);this._store.dispatch(this._timepickerActions.setTime({hour:this.hours,minute:this.minutes,seconds:this.seconds,isPM:this.isPM()}))},e.prototype.toggleMeridian=function(){if(this.showMeridian&&this.isEditable){this._store.dispatch(this._timepickerActions.changeHours({step:12,source:""}))}},e.prototype.writeValue=function(e){c(e)?this._store.dispatch(this._timepickerActions.writeValue(m(e))):null==e&&this._store.dispatch(this._timepickerActions.writeValue(null))},e.prototype.registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this.disabled=e,this._cd.markForCheck()},e.prototype.ngOnDestroy=function(){this.timepickerSub.unsubscribe()},e.prototype._renderTime=function(e){if(!c(e))return this.hours="",this.minutes="",this.seconds="",void(this.meridian=this.meridians[0]);var n=m(e),t=n.getHours();this.showMeridian&&(this.meridian=this.meridians[t>=12?1:0],0===(t%=12)&&(t=12)),this.hours=y(t),this.minutes=y(n.getMinutes()),this.seconds=y(n.getUTCSeconds())},e.decorators=[{type:n.Component,args:[{selector:"timepicker",changeDetection:n.ChangeDetectionStrategy.OnPush,providers:[D,H],template:'<table>\n <tbody>\n <tr class="text-center" [hidden]="!showSpinners">\n \x3c!-- increment hours button--\x3e\n <td>\n <a class="btn btn-link" [class.disabled]="!canIncrementHours || !isEditable"\n (click)="changeHours(hourStep)"\n ><span class="bs-chevron bs-chevron-up"></span></a>\n </td>\n \x3c!-- divider --\x3e\n <td *ngIf="showMinutes"> </td>\n \x3c!-- increment minutes button --\x3e\n <td *ngIf="showMinutes">\n <a class="btn btn-link" [class.disabled]="!canIncrementMinutes || !isEditable"\n (click)="changeMinutes(minuteStep)"\n ><span class="bs-chevron bs-chevron-up"></span></a>\n </td>\n \x3c!-- divider --\x3e\n <td *ngIf="showSeconds"> </td>\n \x3c!-- increment seconds button --\x3e\n <td *ngIf="showSeconds">\n <a class="btn btn-link" [class.disabled]="!canIncrementSeconds || !isEditable"\n (click)="changeSeconds(secondsStep)">\n <span class="bs-chevron bs-chevron-up"></span>\n </a>\n </td>\n \x3c!-- space between --\x3e\n <td *ngIf="showMeridian"> </td>\n \x3c!-- meridian placeholder--\x3e\n <td *ngIf="showMeridian"></td>\n </tr>\n <tr>\n \x3c!-- hours --\x3e\n <td class="form-group" [class.has-error]="invalidHours">\n <input type="text" [class.is-invalid]="invalidHours"\n class="form-control text-center bs-timepicker-field"\n [placeholder]="hoursPlaceholder"\n maxlength="2"\n [readonly]="readonlyInput"\n [disabled]="disabled"\n [value]="hours"\n (wheel)="prevDef($event);changeHours(hourStep * wheelSign($event), \'wheel\')"\n (keydown.ArrowUp)="changeHours(hourStep, \'key\')"\n (keydown.ArrowDown)="changeHours(-hourStep, \'key\')"\n (change)="updateHours($event.target.value)" [attr.aria-label]="labelHours"></td>\n \x3c!-- divider --\x3e\n <td *ngIf="showMinutes"> : </td>\n \x3c!-- minutes --\x3e\n <td class="form-group" *ngIf="showMinutes" [class.has-error]="invalidMinutes">\n <input type="text" [class.is-invalid]="invalidMinutes"\n class="form-control text-center bs-timepicker-field"\n [placeholder]="minutesPlaceholder"\n maxlength="2"\n [readonly]="readonlyInput"\n [disabled]="disabled"\n [value]="minutes"\n (wheel)="prevDef($event);changeMinutes(minuteStep * wheelSign($event), \'wheel\')"\n (keydown.ArrowUp)="changeMinutes(minuteStep, \'key\')"\n (keydown.ArrowDown)="changeMinutes(-minuteStep, \'key\')"\n (change)="updateMinutes($event.target.value)" [attr.aria-label]="labelMinutes">\n </td>\n \x3c!-- divider --\x3e\n <td *ngIf="showSeconds"> : </td>\n \x3c!-- seconds --\x3e\n <td class="form-group" *ngIf="showSeconds" [class.has-error]="invalidSeconds">\n <input type="text" [class.is-invalid]="invalidSeconds"\n class="form-control text-center bs-timepicker-field"\n [placeholder]="secondsPlaceholder"\n maxlength="2"\n [readonly]="readonlyInput"\n [disabled]="disabled"\n [value]="seconds"\n (wheel)="prevDef($event);changeSeconds(secondsStep * wheelSign($event), \'wheel\')"\n (keydown.ArrowUp)="changeSeconds(secondsStep, \'key\')"\n (keydown.ArrowDown)="changeSeconds(-secondsStep, \'key\')"\n (change)="updateSeconds($event.target.value)" [attr.aria-label]="labelSeconds">\n </td>\n \x3c!-- space between --\x3e\n <td *ngIf="showMeridian"> </td>\n \x3c!-- meridian --\x3e\n <td *ngIf="showMeridian">\n <button type="button" class="btn btn-default text-center"\n [disabled]="!isEditable || !canToggleMeridian"\n [class.disabled]="!isEditable || !canToggleMeridian"\n (click)="toggleMeridian()"\n >{{ meridian }}\n </button>\n </td>\n </tr>\n <tr class="text-center" [hidden]="!showSpinners">\n \x3c!-- decrement hours button--\x3e\n <td>\n <a class="btn btn-link" [class.disabled]="!canDecrementHours || !isEditable"\n (click)="changeHours(-hourStep)">\n <span class="bs-chevron bs-chevron-down"></span>\n </a>\n </td>\n \x3c!-- divider --\x3e\n <td *ngIf="showMinutes"> </td>\n \x3c!-- decrement minutes button--\x3e\n <td *ngIf="showMinutes">\n <a class="btn btn-link" [class.disabled]="!canDecrementMinutes || !isEditable"\n (click)="changeMinutes(-minuteStep)">\n <span class="bs-chevron bs-chevron-down"></span>\n </a>\n </td>\n \x3c!-- divider --\x3e\n <td *ngIf="showSeconds"> </td>\n \x3c!-- decrement seconds button--\x3e\n <td *ngIf="showSeconds">\n <a class="btn btn-link" [class.disabled]="!canDecrementSeconds || !isEditable"\n (click)="changeSeconds(-secondsStep)">\n <span class="bs-chevron bs-chevron-down"></span>\n </a>\n </td>\n \x3c!-- space between --\x3e\n <td *ngIf="showMeridian"> </td>\n \x3c!-- meridian placeholder--\x3e\n <td *ngIf="showMeridian"></td>\n </tr>\n </tbody>\n</table>\n',encapsulation:n.ViewEncapsulation.None,styles:["\n .bs-chevron {\n border-style: solid;\n display: block;\n width: 9px;\n height: 9px;\n position: relative;\n border-width: 3px 0px 0 3px;\n }\n\n .bs-chevron-up {\n -webkit-transform: rotate(45deg);\n transform: rotate(45deg);\n top: 2px;\n }\n\n .bs-chevron-down {\n -webkit-transform: rotate(-135deg);\n transform: rotate(-135deg);\n top: -2px;\n }\n\n .bs-timepicker-field {\n width: 50px;\n padding: .375rem .55rem;\n }\n "]}]}],e.ctorParameters=function(){return[{type:k},{type:n.ChangeDetectorRef},{type:H},{type:a}]},e.propDecorators={hourStep:[{type:n.Input}],minuteStep:[{type:n.Input}],secondsStep:[{type:n.Input}],readonlyInput:[{type:n.Input}],disabled:[{type:n.Input}],mousewheel:[{type:n.Input}],arrowkeys:[{type:n.Input}],showSpinners:[{type:n.Input}],showMeridian:[{type:n.Input}],showMinutes:[{type:n.Input}],showSeconds:[{type:n.Input}],meridians:[{type:n.Input}],min:[{type:n.Input}],max:[{type:n.Input}],hoursPlaceholder:[{type:n.Input}],minutesPlaceholder:[{type:n.Input}],secondsPlaceholder:[{type:n.Input}],isValid:[{type:n.Output}]},e}();var T=function(){function e(){}return e.forRoot=function(){return{ngModule:e,providers:[a,H]}},e.decorators=[{type:n.NgModule,args:[{imports:[o.CommonModule],declarations:[E],exports:[E]}]}],e}();e.TimepickerActions=a,e.TimepickerComponent=E,e.TimepickerConfig=k,e.TimepickerModule=T,e.TimepickerStore=H,e.ɵa=D,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=ngx-bootstrap-timepicker.umd.min.js.map