forked from FezVrasta/bootstrap-material-datepicker
-
Notifications
You must be signed in to change notification settings - Fork 118
Expand file tree
/
Copy pathangular-material-datetimepicker.min.js
More file actions
2 lines (2 loc) · 18.6 KB
/
angular-material-datetimepicker.min.js
File metadata and controls
2 lines (2 loc) · 18.6 KB
1
2
!function(){"use strict";var t="ngMaterialDatePicker",e={DATE:0,HOUR:1,MINUTE:2},a=function(t,e){return t=angular.element(t),"getComputedStyle"in window?window.getComputedStyle(t[0])[e]:t.css(e)},i='<md-dialog class="dtp" layout="column" style="width: 300px;"> <md-dialog-content class="dtp-content"> <div class="dtp-date-view"> <header class="dtp-header"> <div class="dtp-actual-day" ng-show="picker.dateMode">{{picker.currentDate.format("dddd")}}</div> <div class="dtp-actual-day" ng-show="picker.timeMode">{{picker.params.shortTime ? picker.currentDate.format("A") : " "}}</div> <div class="dtp-close text-right"> <a href="#" mdc-dtp-noclick ng-click="picker.hide()">×</a> </div> </header> <div class="dtp-date" ng-show="picker.params.date"> <div layout="column"> <div class="dtp-actual-month">{{picker.currentDate.format("MMM") | uppercase}}</div> </div> <div class="dtp-actual-num">{{picker.currentDate.format("DD")}}</div> <div layout="row"> <div ng-click="picker.incrementYear(-1)" class="dtp-year-btn dtp-year-btn-prev" flex="30"><span ng-if="picker.isPreviousYearVisible()" >▲</span></div> <div class="dtp-actual-year" flex>{{picker.currentDate.format("YYYY")}}</div> <div ng-click="picker.incrementYear(1)" class="dtp-year-btn dtp-year-btn-next" flex="30"><span ng-if="picker.isNextYearVisible()" >▼</span></div> </div> </div> <div class="dtp-time" ng-show="picker.params.time && !picker.params.date"> <div class="dtp-actual-maxtime">{{picker.currentNearest5Minute().format(picker.params.shortTime ? "hh:mm" : "HH:mm")}}</div> </div> <div class="dtp-picker"> <mdc-datetime-picker-calendar date="picker.currentDate" picker="picker" class="dtp-picker-calendar" ng-show="picker.currentView === picker.VIEWS.DATE"></mdc-datetime-picker-calendar> <div class="dtp-picker-datetime" ng-cloak ng-if="picker.currentView !== picker.VIEWS.DATE"> <div class="dtp-actual-meridien"> <div class="left p20"> <a id="time-periods-am" href="#" mdc-dtp-noclick class="dtp-meridien-am" ng-class="{selected: picker.meridien == \'AM\'}" ng-click="picker.selectAM()">{{picker.params.amText}}</a> </div> <div ng-show="!picker.timeMode" class="dtp-actual-time p60">{{picker.currentNearest5Minute().format(picker.params.shortTime ? "hh:mm" : "HH:mm")}}</div> <div class="right p20"> <a id="time-periods-pm" href="#" mdc-dtp-noclick class="dtp-meridien-pm" ng-class="{selected: picker.meridien == \'PM\'}" ng-click="picker.selectPM()">{{picker.params.pmText}}</a> </div> <div class="clearfix"></div> </div> <mdc-datetime-picker-clock mode="hours" ng-if="picker.currentView === picker.VIEWS.HOUR"></mdc-datetime-picker-clock> <mdc-datetime-picker-clock mode="minutes" ng-if="picker.currentView === picker.VIEWS.MINUTE"></mdc-datetime-picker-clock> </div> </div> </div> </md-dialog-content> <md-dialog-actions class="dtp-buttons"> <md-button class="dtp-btn-today md-button" ng-click="picker.today()"> {{picker.params.todayText}}</md-button> <md-button class="dtp-btn-cancel md-button" ng-click="picker.cancel()"> {{picker.params.cancelText}}</md-button> <md-button class="dtp-btn-ok md-button" ng-click="picker.ok()"> {{picker.params.okText}}</md-button> </md-dialog-actions></md-dialog>';angular.module(t,["ngMaterial"]).provider("mdcDatetimePickerDefaultLocale",function(){this.locale=window.navigator.userLanguage||window.navigator.language||"en",this.$get=function(){return this},this.setDefaultLocale=function(t){this.locale=t}}).factory("mdcDefaultParams",["mdcDatetimePickerDefaultLocale",function(t){var e={date:!0,time:!0,format:"YYYY-MM-DD",minDate:null,maxDate:null,currentDate:null,lang:t.locale,weekStart:0,shortTime:!1,cancelText:"Cancel",okText:"OK",amText:"AM",pmText:"PM",todayText:"Today",disableDates:[]};return e}]).directive("mdcDatetimePicker",["$mdDialog","$timeout",function(t,e){return{restrict:"A",require:"ngModel",scope:{currentDate:"=ngModel",ngChange:"&",time:"=",date:"=",minDate:"=",maxDate:"=",disableDates:"=",shortTime:"=",weekStart:"=",format:"@",cancelText:"@",okText:"@",lang:"@",amText:"@",pmText:"@",showTodaysDate:"@",todayText:"@"},link:function(a,n,s,c){var o=!1;a.format||(a.date&&a.time?a.format="YYYY-MM-DD HH:mm":a.date?a.format="YYYY-MM-DD":a.format="HH:mm");var l=null;void 0!==a.showTodaysDate&&"false"!==a.showTodaysDate&&(l=moment()),angular.isString(a.currentDate)&&""!==a.currentDate&&(a.currentDate=moment(a.currentDate,a.format)),c&&c.$formatters.push(function(t){if("undefined"!=typeof t){var e=moment(t);return e.isValid()?e.format(a.format):""}}),n.attr("readonly",""),n.on("focus",function(c){if(c.preventDefault(),n.blur(),!o){o=!0;var d={};for(var m in s)a.hasOwnProperty(m)&&!angular.isUndefined(a[m])&&(d[m]=a[m]);d.currentDate=a.currentDate,d.showTodaysDate=l;var u={options:d};t.show({template:i,controller:r,controllerAs:"picker",locals:u,openFrom:n,parent:angular.element(document.body),bindToController:!0,disableParentScroll:!1,hasBackDrop:!1,skipHide:!0}).then(function(t){a.currentDate=t?t._d:t,o=!1,moment(a.currentDate).isSame(d.currentDate)||e(a.ngChange,0),n.blur()},function(){o=!1,n.blur()})}})}}}]).factory("mdcDateTimeDialog",["$mdDialog","$q","mdcDefaultParams",function(t,e,a){var n=Object.keys(a);console.log(n);var s={show:function(s){var c=e.defer(),o=angular.copy(a);for(var l in s)n.indexOf[l]!=-1&&s.hasOwnProperty(l)&&(o=s[l]);var d={options:s};return t.show({template:i,controller:r,controllerAs:"picker",locals:d,parent:angular.element(document.body),bindToController:!0,clickOutsideToClose:!0,disableParentScroll:!1,skipHide:!0}).then(function(t){t?t._d:t;c.resolve(t?t._d:t)},function(){c.reject()}),c.promise}};return s}]);var r=function(t,a,i){this.currentView=e.DATE,this._dialog=a,this._attachedEvents=[],this.VIEWS=e,this.params=i,this.meridien="AM",this.params=angular.extend(this.params,this.options),this.init()};r.$inject=["$scope","$mdDialog","mdcDefaultParams"],r.prototype={init:function(){this.timeMode=this.params.time&&!this.params.date,this.dateMode=this.params.date,this.initDates(),this.start()},currentNearest5Minute:function(){var t=this.currentDate||moment(),e=5*Math.round(t.minute()/5);return e>=60&&(e=55),moment(t).minutes(e)},initDates:function(){var t=this,e=function(e,a){var i=null;if(angular.isDefined(e)&&null!==e&&""!==e)if(angular.isString(e))i="undefined"!=typeof t.params.format&&null!==t.params.format?moment(e,t.params.format).locale(t.params.lang):moment(e).locale(t.params.lang);else if("number"==typeof e)i=moment(e).locale(t.params.lang);else if(angular.isDate(e)){var r=e.getTime();i=moment(r,"x").locale(t.params.lang)}else e._isAMomentObject&&(i=e);else i=a;return i};this.currentDate=e(this.params.currentDate,moment()),this.minDate=e(this.params.minDate),this.maxDate=e(this.params.maxDate),this.disableDates=this.params.disableDates.map(function(t){return moment(t).format("MMMM Do YYYY")}),this.selectDate(this.currentDate)},initDate:function(){this.currentView=e.DATE},initHours:function(){this.currentView=e.HOUR},initMinutes:function(){this.currentView=e.MINUTE},isAfterMinDate:function(t,e,a){var i=!0;if("undefined"!=typeof this.minDate&&null!==this.minDate){var r=moment(this.minDate),n=moment(t);e||a||(r.hour(0),r.minute(0),n.hour(0),n.minute(0)),r.second(0),n.second(0),r.millisecond(0),n.millisecond(0),a?i=parseInt(n.format("X"))>=parseInt(r.format("X")):(n.minute(0),r.minute(0),i=parseInt(n.format("X"))>=parseInt(r.format("X")))}return i},isBeforeMaxDate:function(t,e,a){var i=!0;if("undefined"!=typeof this.maxDate&&null!==this.maxDate){var r=moment(this.maxDate),n=moment(t);e||a||(r.hour(0),r.minute(0),n.hour(0),n.minute(0)),r.second(0),n.second(0),r.millisecond(0),n.millisecond(0),a?i=parseInt(n.format("X"))<=parseInt(r.format("X")):(n.minute(0),r.minute(0),i=parseInt(n.format("X"))<=parseInt(r.format("X")))}return i},isInDisableDates:function(t){var e=t.format("MMMM Do YYYY");return!(this.disableDates.indexOf(e)>-1)},selectDate:function(t){t&&(this.currentDate=moment(t),this.isAfterMinDate(this.currentDate)||(this.currentDate=moment(this.minDate)),this.isBeforeMaxDate(this.currentDate)||(this.currentDate=moment(this.maxDate)),this.currentDate.locale(this.params.lang),this.calendarStart=moment(this.currentDate),this.meridien=this.currentDate.hour()>=12?"PM":"AM")},setName:function(){for(var t="",e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",a=0;a<5;a++)t+=e.charAt(Math.floor(Math.random()*e.length));return t},isPM:function(){return"PM"===this.meridien},incrementYear:function(t){1===t&&this.isNextYearVisible()&&this.selectDate(this.currentDate.add(t,"year")),t===-1&&this.isPreviousYearVisible()&&this.selectDate(this.currentDate.add(t,"year"))},isPreviousMonthVisible:function(){return this.calendarStart&&this.isAfterMinDate(moment(this.calendarStart).startOf("month"),!1,!1)},isNextMonthVisible:function(){return this.calendarStart&&this.isBeforeMaxDate(moment(this.calendarStart).endOf("month"),!1,!1)},isPreviousYearVisible:function(){return this.calendarStart&&this.isAfterMinDate(moment(this.calendarStart).startOf("year"),!1,!1)},isNextYearVisible:function(){return this.calendarStart&&this.isBeforeMaxDate(moment(this.calendarStart).endOf("year"),!1,!1)},isHourAvailable:function(t){var e=moment(this.currentDate);return e.hour(this.convertHours(t)).minute(0).second(0),this.isAfterMinDate(e,!0,!1)&&this.isBeforeMaxDate(e,!0,!1)},isMinuteAvailable:function(t){var e=moment(this.currentDate);return e.minute(t).second(0),this.isAfterMinDate(e,!0,!0)&&this.isBeforeMaxDate(e,!0,!0)},start:function(){this.currentView=e.DATE,this.params.date?this.initDate():this.params.time&&this.initHours()},today:function(){this.selectDate(Date.now())},ok:function(){switch(this.currentView){case e.DATE:this.params.time===!0?this.initHours():this.hide(!0);break;case e.HOUR:this.initMinutes();break;case e.MINUTE:this.hide(!0)}},cancel:function(){if(this.params.time)switch(this.currentView){case e.DATE:this.hide();break;case e.HOUR:this.params.date?this.initDate():this.hide();break;case e.MINUTE:this.initHours()}else this.hide()},selectMonthBefore:function(){this.calendarStart.subtract(1,"months")},selectMonthAfter:function(){this.calendarStart.add(1,"months")},selectYearBefore:function(){this.calendarStart.subtract(1,"years")},selectYearAfter:function(){this.calendarStart.add(1,"years")},selectAM:function(){(this.isHourAvailable(0)||this.isHourAvailable(12))&&(this.currentDate.hour()>=12&&this.selectDate(this.currentDate.subtract(12,"hours")),this.isHourAvailable(this.currentDate.hour())||this.selectDate(this.currentDate.hour(this.minDate.hour())),this.isMinuteAvailable(this.currentDate.minute())||this.selectDate(this.currentDate.minute(this.minDate.minute())))},selectPM:function(){(this.isHourAvailable(13)||this.isHourAvailable(24))&&(this.currentDate.hour()<12&&this.selectDate(this.currentDate.add(12,"hours")),this.isHourAvailable(this.currentDate.hour())||this.selectDate(this.currentDate.hour(this.maxDate.hour())),this.isMinuteAvailable(this.currentDate.minute())||this.selectDate(this.currentDate.minute(this.maxDate.minute())))},convertHours:function(t){var e=t;return t<12&&this.isPM()&&(e+=12),e},hide:function(t){t?this._dialog.hide(this.currentDate):this._dialog.cancel()}},angular.module(t).directive("mdcDatetimePickerCalendar",[function(){for(var t=1920,e=(new Date).getFullYear()+30,a=12*(e-t+1),i=240,r=[],n=0;n<a;n++)r.push(n);var s=function(e,a){a=a?a:0;var i=e.year(),r=e.month();return 12*(i-t)+r-1-a};return{restrict:"E",scope:{picker:"=",date:"="},bindToController:!0,controllerAs:"cal",controller:["$scope",function(e){this.$onInit=function(){for(var i=this,n=this.picker,c=[],o=n.params.weekStart;c.length<7;o++)o>6&&(o=0),c.push(o.toString());if(i.week=c,n.maxDate||n.minDate){var l=n.minDate?s(n.minDate):0,d=n.maxDate?s(n.maxDate)+1:a;i.months=r.slice(l,d)}else i.months=r;i.getItemAtIndex=function(e){var a=(e+1)%12||12,i=t+Math.floor(e/12),r=moment(n.currentDate).year(i).month(a);return m(r)},i.topIndex=s(n.currentDate)-i.months[0],e.$watch(function(){return n.currentDate?n.currentDate.format("YYYY-MM"):""},function(t,e){if(t!=e){var a=moment(t,"YYYY-MM"),r=n.minDate?s(n.minDate):0,c=s(a,r);i.topIndex!=c&&(i.topIndex=c)}});var m=function(t){var e={};if(null!==t){e.name=t.format("MMMM YYYY");var a=moment(t).locale(n.params.lang).startOf("month").hour(t.hour()).minute(t.minute()),r=a.format("d");e.days=[];for(var s=a.date();s<=a.daysInMonth();s++){if(s===a.date()){var c=i.week.indexOf(r.toString());if(c>0)for(var o=0;o<c;o++)e.days.push(0)}e.days.push(moment(a).locale(n.params.lang).date(s))}for(var l=7,d=[],m=Math.ceil(e.days.length/l),u=0;u<m;u++)d.push(e.days.slice(u*l,(u+1)*l));return e.days=d,e}};i.toDay=function(t){return moment(parseInt(t),"d").locale(n.params.lang).format("dd").substring(0,1)},i.isInRange=function(t){return n.isAfterMinDate(moment(t),!1,!1)&&n.isBeforeMaxDate(moment(t),!1,!1)&&n.isInDisableDates(moment(t))},i.selectDate=function(t){if(t){if(i.isSelectedDay(t))return n.ok();n.selectDate(moment(t).hour(i.date.hour()).minute(i.date.minute()))}},i.isSelectedDay=function(t){return t&&i.date.date()===t.date()&&i.date.month()===t.month()&&i.date.year()===t.year()},i.isDateOfTheDay=function(t){var e=i.picker.options.showTodaysDate;return!!e&&(t&&e.date()===t.date()&&e.month()===t.month()&&e.year()===t.year())}}}],template:'<md-virtual-repeat-container md-top-index="cal.topIndex" class="months"><div md-virtual-repeat="idx in ::cal.months" md-auto-shrink md-item-size="'+i+'"> <div mdc-datetime-picker-calendar-month idx="idx"></div></div></md-virtual-repeat-container>'}}]).directive("mdcDatetimePickerCalendarMonth",["$compile",function(t){var e=function(e,a){var i=angular.element(e[0].querySelector("tbody")),r=a.cal,n=a.month,s=[];n.days.forEach(function(t,e){s.push("<tr>"),t.forEach(function(t,a){if(s.push("<td>"),t)if(r.isInRange(t)){var i="month['days']["+e+"]["+a+"]";s.push('<a id="date-'+t.format("YYYY-MM-DD")+'" href="#" mdc-dtp-noclick class="dtp-select-day" ng-class="{selected: cal.isSelectedDay('+i+"), hilite: cal.isDateOfTheDay("+i+')}" ng-click="cal.selectDate('+i+')">'),s.push(t.format("D")),s.push("</a>")}else s.push('<span class="dtp-select-day">'),s.push(t.format("D")),s.push("</span>");s.push("</td>")}),s.push("</tr>")}),i.html(s.join("")),t(i)(a)};return{scope:{idx:"="},require:"^mdcDatetimePickerCalendar",restrict:"AE",template:'<div class="dtp-picker-month">{{month.name}}</div><table class="table dtp-picker-days"> <thead> <tr> <th ng-repeat="day in cal.week track by $index">{{cal.toDay(day)}}</th> </tr> </thead> <tbody> </tbody></table>',link:function(t,a,i,r){t.cal=r,t.month=r.getItemAtIndex(parseInt(t.idx)),e(a,t),t.$watch(function(){return t.idx},function(i,n){i!=n&&(t.month=r.getItemAtIndex(parseInt(t.idx)),e(a,t))})}}}]),angular.module(t).directive("mdcDtpNoclick",function(){return{link:function(t,e){e.on("click",function(t){t.preventDefault()})}}}),angular.module(t).directive("mdcDatetimePickerClock",[function(){var t='<div class="dtp-picker-clock"><span ng-if="!points || points.length < 1"> </span><div ng-repeat="point in points" class="dtp-picker-time" ng-style="point.style"> <a href="#" id="time-{{mode}}-{{point.display}}" mdc-dtp-noclick ng-class="{selected: point.value===currentValue}" class="dtp-select-hour" ng-click="setTime(point.value)" ng-if="pointAvailable(point)">{{point.display}}</a> <a href="#" mdc-dtp-noclick class="disabled dtp-select-hour" ng-if="!pointAvailable(point)">{{point.display}}</a></div><div class="dtp-hand dtp-hour-hand"></div><div class="dtp-hand dtp-minute-hand"></div><div class="dtp-clock-center"></div></div>';return{restrict:"E",template:t,link:function(t,e,i){var r="minutes"===i.mode,n=t.picker,s=document.querySelector("md-dialog.dtp"),c=function(){var c=angular.element(e[0].querySelector(".dtp-picker-clock")),l=angular.element(s.querySelector(".dtp-picker")),m=s.querySelector(".dtp-content").offsetWidth,u=parseInt(a(l,"paddingLeft").replace("px",""))||0,p=parseInt(a(l,"paddingRight").replace("px",""))||0,h=parseInt(a(c,"marginLeft").replace("px",""))||0,f=parseInt(a(c,"marginRight").replace("px",""))||0,D=m-(h+f+u+p);c.css("width",D+"px");for(var v=parseInt(a(l,"paddingLeft").replace("px",""))||0,g=parseInt(a(l,"paddingTop").replace("px",""))||0,k=parseInt(a(c,"marginLeft").replace("px",""))||0,M=parseInt(a(c,"marginTop").replace("px",""))||0,y=D/2,x=y/1.2,b=[],T=0;T<12;++T){var w=x*Math.sin(2*Math.PI*(T/12)),Y=x*Math.cos(2*Math.PI*(T/12)),A=y+w+v/2-(v+k),I=y-Y-M/2-(g+M),S={left:A,top:I,value:r?5*T:T,style:{"margin-left":A+"px","margin-top":I+"px"}};r?S.display=S.value<10?"0"+S.value:S.value:n.params.shortTime?S.display=0===T?12:T:S.display=n.isPM()?T+12:T,b.push(S)}t.points=b,t.mode=i.mode,d(),c.css("height",D+"px");var H=e[0].querySelector(".dtp-clock-center"),P=H.offsetWidth/2||7.5,V=H.offsetHeight/2||7.5,E=y/1.8,O=y/1.5;angular.element(e[0].querySelector(".dtp-hour-hand")).css({left:y+1.5*k+"px",height:E+"px",marginTop:y-E-v+"px"}).addClass(r?"":"on"),angular.element(e[0].querySelector(".dtp-minute-hand")).css({left:y+1.5*k+"px",height:O+"px",marginTop:y-O-v+"px"}).addClass(r?"on":""),angular.element(H).css({left:y+v+k-P+"px",marginTop:y-k/2-V+"px"}),o()},o=function(){var t=n.currentNearest5Minute(),a=t.hour(),i=t.minute();l(angular.element(e[0].querySelector(".dtp-hour-hand")),30*a);var r=6*(5*Math.round(i/5));l(angular.element(e[0].querySelector(".dtp-minute-hand")),r)},l=function(t,e){angular.element(t).css({WebkitTransform:"rotate("+e+"deg)","-moz-transform":"rotate("+e+"deg)","-ms-transform":"rotate("+e+"deg)",transform:"rotate("+e+"deg)"})},d=function(){var e=n.currentNearest5Minute();t.currentValue=r?e.minute():e.hour()%12};t.$watch(function(){var t=n.currentNearest5Minute();return t?t.format("HH:mm"):""},function(){d(),o()});var m=function(t,e){for(var a=0;a<e.length;a++)e[a].display=a,t&&(e[a].display+=12);return e};n.params.shortTime||t.$watch("picker.meridien",function(){if(!r&&t.points){var e=m(n.isPM(),angular.copy(t.points));t.points=e}}),t.setTime=function(e){e===t.currentValue&&n.ok(),r?n.currentDate.minute(e):n.currentDate.hour(n.isPM()?e+12:e),n.currentDate.second(0)},t.pointAvailable=function(t){return r?n.isMinuteAvailable(t.value):n.isHourAvailable(t.value)};var u=t.$watch(function(){return e[0].querySelectorAll("div").length},function(){c(),u()})}}}])}();
//# sourceMappingURL=angular-material-datetimepicker.min.js.map