forked from subramaniam-s17/angularjs-datetime-picker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathangularjs-datetime-picker.min.js
More file actions
1 lines (1 loc) · 8.17 KB
/
angularjs-datetime-picker.min.js
File metadata and controls
1 lines (1 loc) · 8.17 KB
1
!function(){"use strict";angular.module("angularjs-datetime-picker",[]);var e=function(e){"string"==typeof e&&(e=new Date(e));var t=new Date(e.getFullYear(),0,1),a=new Date(e.getFullYear(),6,1),n=Math.max(t.getTimezoneOffset(),a.getTimezoneOffset()),r=e.getTimezoneOffset()<n,l=r?n-60:n,i=l>=0?"-":"+";return i+("0"+l/60).slice(-2)+":"+("0"+l%60).slice(-2)},t=function(e,t,a){var n=a("DatetimePickerCtrl");return{open:function(e){n.openDatetimePicker(e)},close:function(){n.closeDatetimePicker()}}};t.$inject=["$compile","$document","$controller"],angular.module("angularjs-datetime-picker").factory("DatetimePicker",t);var a=function(e,t){var a,n=this,r=function(e){e&&e.remove(),t[0].body.removeEventListener("click",n.closeDatetimePicker)};this.openDatetimePicker=function(n){this.closeDatetimePicker();var r=angular.element("<div datetime-picker-popup ng-cloak></div>");n.dateFormat&&r.attr("date-format",n.dateFormat),n.ngModel&&r.attr("ng-model",n.ngModel),n.year&&r.attr("year",parseInt(n.year)),n.month&&r.attr("month",parseInt(n.month)),n.day&&r.attr("day",parseInt(n.day)),n.hour&&r.attr("hour",parseInt(n.hour)),n.minute&&r.attr("minute",parseInt(n.minute)),""!==n.dateOnly&&n.dateOnly!==!0||r.attr("date-only","true"),""===n.futureOnly||n.futureOnly===!0?r.attr("future-only","true"):(n.startDate&&r.attr("start-date",n.startDate),n.endDate&&r.attr("end-date",n.endDate)),"false"===n.closeOnSelect&&r.attr("close-on-select","false");var l=n.triggerEl;n.scope=n.scope||angular.element(l).scope(),a=e(r)(n.scope)[0],a.triggerEl=n.triggerEl,t[0].body.appendChild(a);var i=l.getBoundingClientRect();n.scope.$apply();var s=a.getBoundingClientRect();a.style.position="absolute",i.width>s.width?a.style.left=i.left+i.width-s.width+window.scrollX+"px":a.style.left=i.left+window.scrollX+"px",i.top<300||window.innerHeight-i.bottom>300?a.style.top=i.bottom+window.scrollY+"px":a.style.top=i.top-s.height+window.scrollY+"px",t[0].body.addEventListener("click",this.closeDatetimePicker)},this.closeDatetimePicker=function(e){var a=e&&e.target,n=t[0].querySelector("div[datetime-picker-popup]");e&&a?a.hasAttribute("datetime-picker")||n&&n.contains(a)||r(n):r(n)}};a.$inject=["$compile","$document"],angular.module("angularjs-datetime-picker").controller("DatetimePickerCtrl",a);var n=['<div class="angularjs-datetime-picker">',' <div class="adp-month">',' <button type="button" class="adp-prev" ng-click="addMonth(-1)">«</button>',' <span title="{{months[mv.month].fullName}}">{{months[mv.month].shortName}}</span> {{mv.year}}',' <button type="button" class="adp-next" ng-click="addMonth(1)">»</button>'," </div>",' <div class="adp-days" ng-click="setDate($event)">',' <div class="adp-day-of-week" ng-repeat="dayOfWeek in ::daysOfWeek" title="{{dayOfWeek.fullName}}">{{::dayOfWeek.firstLetter}}</div>',' <div class="adp-day" ng-show="mv.leadingDays.length < 7" ng-repeat="day in mv.leadingDays">{{::day}}</div>',' <div class="adp-day" ng-repeat="day in mv.days" '," today=\"{{today}}\" d2=\"{{mv.year + '-' + (mv.month + 1) + '-' + day}}\"",' ng-class="{'," selectable: isDateSelectable(day, mv.month, mv.year),"," selected: (day == selectedDay),"," today: (today == (mv.year + '-' + (mv.month + 1) + '-' + day)),"," weekend: (mv.leadingDays.length + day)%7 == 1 || (mv.leadingDays.length + day)%7 == 0",' }">'," {{::day}}"," </div>",' <div class="adp-day" ng-show="mv.trailingDays.length < 7" ng-repeat="day in mv.trailingDays">{{::day}}</div>'," </div>",' <div class="adp-days" id="adp-time"> ',' <label class="timeLabel">Time:</label> <span class="timeValue">{{("0"+inputHour).slice(-2)}} : {{("0"+inputMinute).slice(-2)}}</span><br/>',' <label class="hourLabel">Hour:</label> <input class="hourInput" type="range" min="0" max="23" ng-model="inputHour" ng-change="updateNgModel(selectedDay)" />',' <label class="minutesLabel">Min:</label> <input class="minutesInput" type="range" min="0" max="59" ng-model="inputMinute" ng-change="updateNgModel(selectedDay)"/> '," </div> ","</div>"].join("\n"),r=function(t,a){var r,l,i,s,o=function(){r=[],l=[],i=[],s=0;for(var e=1;e<=31;e++)r.push(e);for(var e=0;e<12;e++)l.push({fullName:t.DATETIME_FORMATS.MONTH[e],shortName:t.DATETIME_FORMATS.SHORTMONTH[e]});for(var e=0;e<7;e++){var a=t.DATETIME_FORMATS.DAY[(e+s)%7];i.push({fullName:a,firstLetter:a.substr(0,1)})}s=0},d=function(e,t){t>11?e++:t<0&&e--,t=(t+12)%12;var a=new Date(e,t,1),n=new Date(e,t+1,0),l=new Date(e,t,0),i=n.getDate(),o=l.getDate(),d=a.getDay(),c=(d-s+7)%7||7,u=r.slice(0,42-(c+i));return u.length>7&&(u=u.slice(0,u.length-7)),{year:e,month:t,days:r.slice(0,i),leadingDays:r.slice(-c-(31-o),o),trailingDays:u}},c=function(t,n,r,s){o();var c=r.dateFormat||"short";t.months=l,t.daysOfWeek=i,t.inputHour,t.inputMinute,t.dateOnly===!0&&(n[0].querySelector("#adp-time").style.display="none"),t.$applyAsync(function(){if(s.triggerEl=angular.element(n[0].triggerEl),r.ngModel){var l=""+s.triggerEl.scope().$eval(r.ngModel);if(l){l.match(/[0-9]{2}:/)||(l+=" 00:00:00"),l=l.replace(/([0-9]{2}-[0-9]{2})-([0-9]{4})/,"$2-$1"),l=l.replace(/([\/-][0-9]{2,4})\ ([0-9]{2}\:[0-9]{2}\:)/,"$1T$2"),l=l.replace(/EDT|EST|CDT|CST|MDT|PDT|PST|UT|GMT/g,""),l=l.replace(/\s*\(\)\s*/,""),l=l.replace(/[\-\+][0-9]{2}:?[0-9]{2}$/,""),l+=e(l);var i=new Date(l);t.selectedDate=new Date(i.getFullYear(),i.getMonth(),i.getDate(),i.getHours(),i.getMinutes(),i.getSeconds())}}var o=new Date;if(!t.selectedDate||isNaN(t.selectedDate.getTime())){var u=t.year||o.getFullYear(),m=t.month?t.month-1:o.getMonth(),g=t.day||o.getDate(),p=t.hour||0===t.hour?t.hour:o.getHours(),D=t.minute||0===t.minute?t.minute:o.getMinutes();t.selectedDate=new Date(u,m,g,p,D,0)}var y=s.triggerEl.scope(),v=a(y.$eval(r.ngModel),c);t.selectedDate=v?new Date(v):t.selectedDate,t.inputHour=v?new Date(v).getHours():t.selectedDate.getHours(),t.inputMinute=v?new Date(v).getMinutes():t.selectedDate.getMinutes(),t.mv=d(t.selectedDate.getFullYear(),t.selectedDate.getMonth()),t.today=a(o,"yyyy-M-d"),t.mv.year==t.selectedDate.getFullYear()&&t.mv.month==t.selectedDate.getMonth()?t.selectedDay=t.selectedDate.getDate():t.selectedDay=null,t.isDateSelectable=function(e,t,a){var n=new Date(t+1+"-"+e+"-"+a);if(n.setHours(0,0,0,0),r.futureOnly){var l=new Date;return l.setHours(0,0,0,0),n>=l}if(isNaN(Date.parse(r.startDate))||isNaN(Date.parse(r.endDate))){if(!isNaN(Date.parse(r.startDate))&&isNaN(Date.parse(r.endDate))){var i=new Date(r.startDate);return i.setHours(0,0,0,0),i<=n}if(isNaN(Date.parse(r.startDate))&&!isNaN(Date.parse(r.endDate))){var s=new Date(r.endDate);return s.setHours(0,0,0,0),n<=s}return!0}var i=new Date(r.startDate),s=new Date(r.endDate);return i.setHours(0,0,0,0),s.setHours(0,0,0,0),i<=n&&n<=s}}),t.addMonth=function(e){t.mv=d(t.mv.year,t.mv.month+e)},t.setDate=function(e){var a=angular.element(e.target)[0];a.className.indexOf("selectable")!==-1&&(t.updateNgModel(parseInt(a.innerHTML)),t.closeOnSelect!==!1&&s.closeDatetimePicker())},t.updateNgModel=function(e){if(e=e?e:t.selectedDate.getDate(),t.selectedDate=new Date(t.mv.year,t.mv.month,e,t.inputHour,t.inputMinute,0),t.selectedDay=t.selectedDate.getDate(),r.ngModel){var n,l=s.triggerEl.scope();n=l.$eval(r.ngModel)&&"Date"===l.$eval(r.ngModel).constructor.name?new Date(a(t.selectedDate,c)):a(t.selectedDate,c),l.$eval(r.ngModel+"= date",{date:n})}},t.$on("$destroy",s.closeDatetimePicker)};return{restrict:"A",template:n,controller:"DatetimePickerCtrl",replace:!0,scope:{year:"=",month:"=",day:"=",hour:"=",minute:"=",dateOnly:"=",closeOnSelect:"="},link:c}};r.$inject=["$locale","dateFilter"],angular.module("angularjs-datetime-picker").directive("datetimePickerPopup",r);var l=function(e,t){return{require:"ngModel",link:function(e,a,n,r){e.$watch(n.ngModel,function(e){if(e&&""!=e){var t=new Date(e);r.$setValidity("date",!!t);var a=new Date;n.hasOwnProperty("futureOnly")&&r.$setValidity("future-only",!(t<a))}}),a[0].addEventListener("click",function(){t.open({triggerEl:a[0],dateFormat:n.dateFormat,ngModel:n.ngModel,year:n.year,month:n.month,day:n.day,hour:n.hour,minute:n.minute,dateOnly:n.dateOnly,futureOnly:n.futureOnly,startDate:n.startDate,endDate:n.endDate,closeOnSelect:n.closeOnSelect})})}}};l.$inject=["$parse","DatetimePicker"],angular.module("angularjs-datetime-picker").directive("datetimePicker",l)}();