UNPKG

adm-dtp

Version:
11 lines (10 loc) 30 kB
/* * Picking date & time in AngularJS is easier than ever. * * Demo: http://amirkabirdataminers.github.io/ADM-dateTimePicker * * @version 1.2.0 * * © 2017 Amirkabir Data Miners <info@adm-co.net> - www.adm-co.net */ !function(e){"use strict";e.merge||(e.merge=e.extend),String.prototype.toPersianDigits=function(){var e=["۰","۱","۲","۳","۴","۵","۶","۷","۸","۹"];return this.replace(/[0-9]/g,function(t){return e[+t]})},String.prototype.toEnglishDigits=function(){var e={"۰":"0","۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9"};return this.replace(/[^0-9.]/g,function(t){return e[t]||t})},String.prototype.lZero=function(){return this.length<2?"0"+this:this},Array.prototype.toNumber=function(){return this.map(function(e){return Number(e)})},Array.prototype.dtp_toDate=function(e){var t="-";/invalid/i.test(new Date("1991-9-12"))&&(t="/");var a=this.join(t);return 5==this.length&&(a=this.slice(0,3).join(t)+" "+this.slice(3,5).join(":")),e?(a=new Date(a),"unix"==e?a.getTime():a):a},Number.prototype.lZero=function(){return this<10?"0"+this:this},Date.prototype.dtp_shortDate=function(){return[this.getFullYear(),this.getMonth()+1,this.getDate()].dtp_toDate()};var t=function(){var t={calType:"gregorian",format:"YYYY/MM/DD hh:mm",multiple:!0,autoClose:!1,transition:!0,disabled:[],smartDisabling:!0,minuteStep:1,gregorianStartDay:0,gregorianDic:{title:"Gregorian",monthsNames:["January","February","March","April","May","June","July","August","September","October","November","December"],daysNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],todayBtn:"Today"},jalaliDic:{title:"جلالی",monthsNames:["فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند"],daysNames:["ش","ی","د","س","چ","پ","ج"],todayBtn:"امروز"}},a={getOptions:function(e){var a=e&&t[e]||t;return a}};this.setOptions=function(a,n){return n?void(t[a]=e.merge(t[a]||{},n)):(n=a,void(t=e.merge(t,n)))},this.$get=function(){return a}},a=function(){return function(e,t){return"jalali"==t?String(e).toPersianDigits():e}},n=function(){function e(e){var a=l(e);return a-=226894,t(a)}function t(e){var t=r(e),i=n(e,t),o=a(e,t,i),l={day:o,month:i,year:t};return l}function a(e,t,a){var n=o(t);e-=n+365*(t-1);for(var i=1;i<a;i++)e-=i<=6?31:30;return e}function n(e,t){var a=o(t);e-=a+365*(t-1);for(var n=i(),r=0;r<n.length;r++){if(e<=n[r].count)return n[r].id;e-=n[r].count}return 12}function i(){return[{id:1,count:31},{id:2,count:31},{id:3,count:31},{id:4,count:31},{id:5,count:31},{id:6,count:31},{id:7,count:30},{id:8,count:30},{id:9,count:30},{id:10,count:30},{id:11,count:30},{id:12,count:29}]}function r(e){var t=Math.floor((e-1)/365),a=0;if(t>22){var n=t-22-1,i=t-22,r=Math.floor(n/33),l=i-33*r;l>=28&&(l=28);var s=Math.floor(l/4),c=s+8*r+6,u=Math.floor((e-c)/365);return a=o(u),e-365*u-a-(D(u)?1:0)>0?(u++,u):e-365*u+a<=0?u:u}return a=t<1?0:t>=1&&t<=4?1:t>=5&&t<=8?2:t>=9&&t<=12?3:t>=13&&t<=16?4:t>=17&&t<22?5:6,t=Math.floor((e-a-1)/365),t+1}function o(e){if(e<23)switch(e){case 1:return 0;case 2:case 3:case 4:case 5:return 1;case 6:case 7:case 8:case 9:return 2;case 10:case 11:case 12:case 13:return 3;case 14:case 15:case 16:case 17:return 4;case 18:case 19:case 20:case 21:case 22:return 5}var t=e-22,a=Math.floor((t-1)/33),n=t-33*a;n>28&&(n=28);var i=Math.floor(n/4)+8*a+6;return D(e)&&t-33*a<=28&&i--,i}function l(e){var t=s(),a=u(e.year),n=a,i=c(e.year);n+=365*(e.year-1);for(var r=0;r<e.month-1;r++)i&&r+1==2&&(t[r].count=29),n+=t[r].count;return n+=e.day}function s(){return[{id:1,count:31},{id:2,count:28},{id:3,count:31},{id:4,count:30},{id:5,count:31},{id:6,count:30},{id:7,count:31},{id:8,count:31},{id:9,count:30},{id:10,count:31},{id:11,count:30},{id:12,count:31}]}function c(e){return e%4==0&&(e%100!=0||e%400==0)}function u(e){var t=e-1,a=Math.floor(t/4),n=Math.floor(t/100),i=Math.floor(t/400);return a-n+i}function d(e){var t=Math.floor(e/365),a=u(t),n=Math.floor((e-a)/365),i=e-365*n-a;return 0!=i?n++:c(n+1)&&(n+=a/365),Math.floor(n)}function p(e){var t=d(e),a=u(t);e-=365*(t-1)+a;for(var n=s(),i=0,r=c(t),o=0;o<n.length;o++){if(r&&2==n[o].id&&(n[o].count=29),e<n[o].count)return 0==e&&0!=i||i++,i;e-=n[o].count,i=n[o].id}return i}function g(e){var t=d(e),a=p(e);return m(t,a,e)}function m(e,t,a){for(var n=u(e),i=s(),r=0,o=0;o<i.length;o++)i[o].id<t&&(r+=i[o].count);return c(e)&&t>2&&r++,a-365*(e-1)-n-r}function h(e){var t=e.day;return t+=y(e.month),t+=f(e.year)}function y(e){for(var t=0,a=i(),n=0;n<e-1;n++)t+=a[n].count;return t}function f(e){var t=o(e);return t+=365*(e-1)}function v(e){var t=h(e)+226894,a=g(t),n=p(t),i=d(t);return 0==a&&(a=31,n=12,i--),{day:a,month:n,year:i}}var D=function(e){if(1==e||5==e||9==e||13==e||17==e||22==e)return!0;if(e<22)return!1;var t=e-22,a=Math.floor(t/33);return(t-33*a)%4==0&&(t-33*a)/4!=8},x=function(t,a,n){t=t<=99?2e3+t:t;var i={year:t,month:a,day:n};return i=e(i)},M=function(e,t,a){e=e<=99?1300+e:e;var n=v({day:a,month:t,year:e});return n};return{toJalali:x,toGregorian:M,isLeapJalali:D}},i=function(t){return this.dateFormat=function(e,t,a,n){if(!e.year)return"";for(var i=e.year,r=n?e.year:e.year%100,o=e.month.lZero(),l=e.day.lZero(),s=t.hour.lZero(),c=t.minute.lZero(),u=[{key:"YYYY",value:i},{key:"YY",value:r},{key:"MM",value:o},{key:"DD",value:l},{key:"hh",value:s},{key:"mm",value:c}],d=0,p=u.length;d<p;d++)a=a.replace(u[d].key,u[d].value);return a},this.parseString=function(e,t){var a=[],n={},i=["YY/MM/DD","YY/MM/DD hh:mm","YY-MM-DD","YY-MM-DD hh:mm","MM/DD/YY","MM-DD-YY","MM/DD/YY hh:mm","MM-DD-YY hh:mm"];i.unshift(t);for(var r=0,o=i.length;r<o;r++){var l=new RegExp("^"+i[r].replace(/[a-z]+/gi,function(e){var t=!1;return e.indexOf("YY")!=-1?(a.push("year"),t=!0):e.indexOf("MM")!=-1?(a.push("month"),t=!0):e.indexOf("DD")!=-1?(a.push("day"),t=!0):e.indexOf("hh")!=-1?(a.push("hour"),t=!0):e.indexOf("mm")!=-1&&(a.push("minute"),t=!0),t?"[0-9]+":e}).replace(/[(]/g,"[(]").replace(/[)]/g,"[)]")+"$").test(e);if(l)return a.reverse(),e.replace(/[0-9]+/g,function(e){return n[a.pop()]=Number(e),e}),n.hour=n.hour||0,n.minute=n.minute||0,n}return!1},this.toRegularFormat=function(e,t,a){return!!e&&("string"==typeof e?e=this.parseString(e,a):"number"==typeof e&&(e=this.convertFromUnix(e,t)),!!e&&(e.year<=99&&(e.year="jalali"==t?1300+e.year:2e3+e.year),[e.year,e.month.lZero(),e.day.lZero(),e.hour.lZero(),e.minute.lZero()].dtp_toDate()))},this.isDateEqual=function(e,t){var a=new Date(e)-new Date(t);return 0==a},this.isDateBigger=function(e,t){var a=new Date(e)-new Date(t);return a>=0},this.isMonthBigger=function(e,t){var a=new Date(e.year,e.month)-new Date(t.year,t.month);return a>=0},this.joinTime=function(e,t){return new Date(new Date(new Date(e).setHours(t.hour)).setMinutes(t.minute))},this.removeTime=function(e){return[e.getFullYear(),e.getMonth()+1,e.getDate()].dtp_toDate("date")},this.validateJalaliDateSeparate=function(e,a){if(3!=e.length||2!=a.length)return!1;if(a[0]>23||a[0]<0||a[1]>59||a[1]<0||e[0]<0||e[1]<1||e[1]>12)return!1;if(e[1]>0&&e[1]<7){if(e[2]<1||e[2]>31)return!1}else if(e[1]>6&&e[1]<12){if(e[2]<1||e[2]>30)return!1}else if(12==e[1]){var n=t.isLeapJalali(e[0]);if(n&&(e[2]<1||e[2]>30)||!n&&(e[2]<1||e[2]>29))return!1}return!0},this.validateJalaliDate=function(a,n){var i;if("number"==typeof a){var r=new Date(a);if(/invalid/i.test(r))return!1;var o=this.convertToJalali(r);i=e.merge(o,{hour:r.getHours(),minute:r.getMinutes()})}else"string"==typeof a?i=this.parseString(a,n):a instanceof Object&&(i=a);if(!i)return!1;var l=[i.year,i.month,i.day],s=[i.hour,i.minute];if(this.validateJalaliDateSeparate(l,s)){var c=t.toGregorian(l[0],l[1],l[2]),r=[c.year,c.month,c.day,s[0],s[1]].dtp_toDate("date");return{year:l[0],month:l[1],day:l[2],hour:s[0],minute:s[1],unix:r.getTime(),gDate:r}}return!1},this.convertToUnix=function(e,t,a){if(!e)return null;if("number"==typeof e)return e;if("string"==typeof e)e=this.parseString(e,a);else{if(!(e instanceof Date))return null;e={year:e.getFullYear(),month:e.getMonth()+1,day:e.getDate(),hour:e.getHours(),minute:e.getMinutes()}}if(e.year<=99&&(e.year="jalali"==t?1300+e.year:2e3+e.year),"jalali"==t){var n=this.validateJalaliDate(e,a);return n.unix||null}if("gregorian"==t){var n=new Date(this.toRegularFormat(e,t));return/invalid/i.test(n)?null:n.getTime()}return null},this.convertFromUnix=function(e,t){var a=new Date(e);return"jalali"==t?this.convertToJalali(a):"gregorian"==t?{year:a.getFullYear(),month:a.getMonth()+1,day:a.getDate(),unix:e}:void 0},this.convertToJalali=function(a){if(a instanceof Date){var n={year:a.getFullYear(),month:a.getMonth()+1,day:a.getDate(),unix:a.getTime()};a=n}if(a instanceof Object)return e.merge(t.toJalali(a.year,a.month,a.day),{unix:a.unix})},this.parseDisablePattern=function(e){var t=e.disabled,a=e.smartDisabling,n=e.calType,i=e.format,r=Array.apply(null,Array(7)).map(Number.prototype.valueOf,0),o=Array.apply(null,Array(31)).map(Number.prototype.valueOf,0),l={};if(t instanceof Array)for(var s=0,c=t.length;s<c;s++)if("number"==typeof t[s]){var u=new Date(t[s]);/invalid/i.test(u)||(l[this.removeTime(u).getTime()]=!0)}else if("string"==typeof t[s])if(t[s]=t[s].toLowerCase(),t[s].indexOf("d")==-1&&t[s].indexOf("i")==-1){var d=this.convertToUnix(t[s],n,i);d&&(l[d]=!0)}else{var p=new RegExp("^[!]?(([0-9]?[0-9])?[d]([+][0-9][0-9]?)?)([&]([0-9]?[0-9])?[d]([+][0-9][0-9]?)?)*?$").test(t[s]),g=new RegExp("^[!]?([i]([+][0-9][0-9]?)?)([&][i]([+][0-9][0-9]?)?)*?$").test(t[s]);if(p||g){var m="!"==t[s][0];t[s]=m?t[s].split("!")[1]:t[s];var h=t[s].split("&");if(p){var y={};h.forEach(function(e){var t=e.split(/d[+]?/).map(function(e){return Number(e)});t[0]=t[0]?t[0]:1,t[1]%=31;for(var a=0;a<31;a++)(1!=t[0]&&a%t[0]==t[1]||1==t[0]&&a==t[1])&&(y[a]=1)});for(var f=0;f<31;f++)m?y[f]||(o[f]=1):y[f]&&(o[f]=1)}else if(g){var y={};h.forEach(function(e){var t=e.split(/i[+]?/).map(function(e){return Number(e)});t[1]%=7,y[t[1]]=1});for(var f=0;f<7;f++)m?y[f]||(r[f]=1):y[f]&&(r[f]=1)}}else console.warn(t[s]+" is not valid!")}return{smart:a,calType:n,static:l,inWeek:r,inMonth:o}},this.isDayDisable=function(e,t,a){if(t.static[a.unix])return!0;var n=0;t.smart?"gregorian"==t.calType&&"jalali"==e?n=1:"jalali"==t.calType&&"gregorian"==e&&(n=-1):"gregorian"==t.calType&&"jalali"==e?n=-1:"jalali"==t.calType&&"gregorian"==e&&(n=1);var i=(a.dayName+7+n)%7;return!!t.inMonth[a.day-1]||!!+t.inWeek[i]},{dateFormat:this.dateFormat,parseString:this.parseString,toRegularFormat:this.toRegularFormat,isDateEqual:this.isDateEqual,isDateBigger:this.isDateBigger,isMonthBigger:this.isMonthBigger,joinTime:this.joinTime,removeTime:this.removeTime,validateJalaliDateSeparate:this.validateJalaliDateSeparate,validateJalaliDate:this.validateJalaliDate,convertToUnix:this.convertToUnix,convertFromUnix:this.convertFromUnix,convertToJalali:this.convertToJalali,parseDisablePattern:this.parseDisablePattern,isDayDisable:this.isDayDisable,counter:0}},r=function(t,a,n,i,r){return{restrict:"E",replace:!0,link:function(t,i,o){var l,s=t.api;l=t.dtpValue.unix?new Date(t.dtpValue.fullDate):new Date,"jalali"==t.calType&&(l=n.convertToJalali(l)),s.fillDays(l,!t.option.transition),t.previousMonth=function(e){return"jalali"!=t.calType||e?(1==t.current.month?(t.current.month=12,t.current.year--):t.current.month--,void s.reload()):void t.nextMonth(!0)},t.nextMonth=function(e){return"jalali"!=t.calType||e?(12==t.current.month?(t.current.month=1,t.current.year++):t.current.month++,void s.reload()):void t.previousMonth(!0)},t.previousYear=function(e){if("jalali"==t.calType&&!e)return void t.nextYear(!0);var a=t.generatedYears.shift();t.generatedYears=[];for(var n=1;n<17;n++)t.generatedYears.push(a-17+n)},t.nextYear=function(e){if("jalali"==t.calType&&!e)return void t.previousYear(!0);var a=t.generatedYears.pop();t.generatedYears=[];for(var n=1;n<17;n++)t.generatedYears.push(a+n)},t.selectMonthInit=function(){t.yearSelectStat=!1,t.monthPickerStat=!0},t.selectYearInit=function(){t.yearSelectStat=!0,t.generatedYears=[];for(var e=0;e<16;e++)t.generatedYears.push(t.current.year+e-7)},t.selectMonth=function(e){e+1!=t.current.month&&(t.current.month=e+1,s.reload()),t.monthPickerStat=!1},t.selectYear=function(e){e!=t.current.year&&(t.current.year=e,s.reload()),t.monthPickerStat=!1},t.selectThisDay=function(e){if(0!=e.valid)return t.dtpValue.selected=!1,s.updateMasterValue(e,"day"),t.option.autoClose?void r(function(){t.closeCalendar()},100):void(e.disable?r(function(){n.isMonthBigger(e,t.current)?t.nextMonth(!0):t.previousMonth(!0)},0):e.selected=!0)},t.today=function(){var e=new Date;"jalali"==t.calType&&(e=n.convertToJalali(e)),s.fillDays(e,!t.option.transition)},t.changeTimeValue=function(a,i){i*="minute"==a?t.option.minuteStep:1;var r=(Number(t.time[a])+i+("hour"==a?24:60))%("hour"==a?24:60),o=e.copy(t.time);if(o[a]=r.lZero(),t.dtpValue.unix&&(t.minDate||t.maxDate)){var l=n.joinTime(t.dtpValue.unix,o);if(t.minDate&&!n.isDateBigger(l,t.minDate)||t.maxDate&&!n.isDateBigger(t.maxDate,l))return}t.time[a]=r.lZero(),t.dtpValue.unix&&s.updateMasterValue(!1,"time"),s.reload()},t.modelChanged=function(a){var i=e.isDefined(a)?a:t.dtpValue.formated;if(!i)return void(t.dtpValue.unix&&t.destroy());var r=n.convertToUnix(i,t.calType,t.option.format);if(!r||t.option.freezeInput||t.disable||t.minDate&&!n.isDateBigger(r,t.minDate)||t.maxDate&&!n.isDateBigger(t.maxDate,r))return void s.updateMasterValue(!1);if(r!=t.fullData.unix){t.parseInputValue(i,!1,!0);var o=new Date(r);"jalali"==t.calType&&(o=n.convertToJalali(o)),s.fillDays(o,!0)}},s.modelChanged=t.modelChanged,t.calTypeChanged=function(i){t.calType=i?i:"gregorian"==t.calType?"jalali":"gregorian",t.monthNames=t.option[t.calType+"Dic"].monthsNames,t.daysNames=t.option[t.calType+"Dic"].daysNames;var r,o=e.copy(t.current);"jalali"==t.calType?r=a.toJalali(o.year,o.month,15):(r=a.toGregorian(o.year,o.month,15),r=[r.year,r.month,r.day].dtp_toDate("date")),t.dtpValue.unix&&s.updateMasterValue(n.convertFromUnix(t.dtpValue.unix,t.calType)),s.fillDays(r,!0)}},template:'<div class="ADMdtp-box ADMdtp-calendar-container" ng-class="{rtl: (calType==\'jalali\'), square: monthPickerStat||timePickerStat}"> <div class="dtpNewBox" ng-class="{active: monthPickerStat}"> <i class="calendarIcon" ng-class="{show: monthPickerStat}" ng-click="monthPickerStat = false"> <svg class="dtp-i" viewBox="0 0 24 24"> <use xlink:href="#dtp-i-calendar" /> </svg> </i> <div class="content"> <div class="ADMdtpMonths" ng-class="{onYear: yearSelectStat, rtl: (calType==\'jalali\')}"> <div class="ADMdtpYears"> <svg class="dtp-i dtp-i-180 dtp-trs-3 arrow left" viewBox="0 0 24 24" ng-if="yearSelectStat" ng-click="previousYear()"> <use xlink:href="#dtp-i-right" /> </svg> <p class="dtp-trs-3" ng-click="selectYearInit()">{{current.year | digitType:calType}}</p> <svg class="dtp-i dtp-trs-3 arrow right" viewBox="0 0 24 24" ng-if="yearSelectStat" ng-click="nextYear()"> <use xlink:href="#dtp-i-right" /> </svg> </div> <span ng-repeat="yearName in generatedYears" ng-if="yearSelectStat"><span class="dtp-trs-5" ng-class="{selected: yearName==current.year}" ng-click="selectYear(yearName)">{{yearName | digitType:calType}}</span></span> <span ng-repeat="monthName in monthNames" ng-if="!yearSelectStat"><span class="dtp-trs-5" ng-class="{selected: monthName==current.monthDscr}" ng-click="selectMonth($index)">{{monthName}}</span></span> </div> </div> </div> <div class="dtpNewBox" ng-class="{active: timePickerStat}"> <i class="calendarIcon" ng-class="{show: timePickerStat}" ng-click="timePickerStat = false"> <svg class="dtp-i" viewBox="0 0 24 24"> <use xlink:href="#dtp-i-calendar" /> </svg> </i> <div class="content"> <div class="ADMdtpTime"> <span class="dtpIcon null up" ng-click="changeTimeValue(\'hour\', 1)"><svg class="dtp-i dtp-trs-5 dtp-i-270" viewBox="0 0 24 24"><use xlink:href="#dtp-i-right" /></svg></span><!-- --><span></span><!-- --><span class="dtpIcon null up" ng-click="changeTimeValue(\'minute\', 1)"><svg class="dtp-i dtp-trs-5 dtp-i-270" viewBox="0 0 24 24"><use xlink:href="#dtp-i-right" /></svg></span><!-- --><span>{{time.hour}}</span><!-- --><span class="period">:</span><!-- --><span>{{time.minute}}</span><!-- --><span class="dtpIcon null down" ng-click="changeTimeValue(\'hour\', -1)"><svg class="dtp-i dtp-trs-5 dtp-i-90" viewBox="0 0 24 24"><use xlink:href="#dtp-i-right" /></svg></span><!-- --><span></span><!-- --><span class="dtpIcon null down" ng-click="changeTimeValue(\'minute\', -1)"><svg class="dtp-i dtp-trs-5 dtp-i-90" viewBox="0 0 24 24"><use xlink:href="#dtp-i-right" /></svg></span> </div> </div> </div> <header> <svg class="dtp-i dtp-i-180 dtp-trs-3 arrow left" viewBox="0 0 24 24" ng-click="previousMonth()"> <use xlink:href="#dtp-i-right" /> </svg> <span class="yearMonth" ng-click="selectMonthInit()">{{current.monthDscr}} {{current.year | digitType:calType}}</span> <svg class="dtp-i dtp-trs-3 arrow right" viewBox="0 0 24 24" ng-click="nextMonth()"> <use xlink:href="#dtp-i-right" /> </svg> </header> <div class="daysNames"> <span ng-repeat="dayName in daysNames">{{dayName}}</span> </div> <hr> <div class="ADMdtpDays" ng-class="{loading:loadingDays}"> <span ng-repeat="day in current.days" ng-click="selectThisDay(day)"><span ng-class="[{disable: day.disable||!day.valid, today: day.today, selected: day.selected, valid:(day.valid==2)}, (day.isMin)?((calType==\'jalali\')?\'max\':\'min\'):\'\', (day.isMax)?((calType==\'jalali\')?\'min\':\'max\'):\'\']">{{day.day | digitType:calType}}</span></span> </div> <hr> <footer> <div class="calTypeContainer dtp-trs-3" ng-class="$parent.calType" ng-click="calTypeChanged()" ng-if="option.multiple"> <p class="gregorian">{{option.gregorianDic.title}}</p> <p class="jalali">{{option.jalaliDic.title}}</p> </div> <button type="button" class="today dtp-trs-3" ng-click="today()">{{option[calType + "Dic"].todayBtn}}</button> <svg class="dtp-i dtp-trs-5 timeSelectIcon" viewBox="0 0 24 24" ng-show="option.dtpType != \'date\'" ng-click="timePickerStat = !timePickerStat"> <use xlink:href="#dtp-i-clock" /> </svg> </footer> </div>'}},o=function(t,a,n,i,r,o){return{restrict:"E",replace:!0,transclude:!0,require:["ngModel","admDtp"],scope:{options:"=?",fullData:"=?",name:"=?",ngRequired:"=?",onChange:"&?",onDatechange:"&?",onTimechange:"&?",onOpen:"&?",onClose:"&?"},link:function(a,i,l,s){var c=s[0],u=s[1];a.api=u,a.dtpId="adm-"+ ++n.counter,i.find("ng-transclude").children().length||(a.defaultTemplate=!0,i.find("ng-transclude").remove());var d=a.options;d instanceof Object||(d={}),a.option=e.merge(e.copy(t.getOptions()),d),a.option.minuteStep=Math.max(Math.min(a.option.minuteStep,60),1);var p=e.copy(a.option.gregorianDic.daysNames);a.option.gregorianDic.daysNamesUntouched=p,a.option.gregorianDic.daysNames=p.slice(a.option.gregorianStartDay,7).concat(p.slice(0,a.option.gregorianStartDay)),a.disableDays=n.parseDisablePattern(a.option),a.calType=a.option.calType,a.monthNames=a.option[a.calType+"Dic"].monthsNames,a.daysNames=a.option[a.calType+"Dic"].daysNames,a.timeoutValue=[0,0],a.dtpValue={},a.minDate=a.mindate?new Date(a.mindate):null,a.maxDate=a.maxdate?new Date(a.maxdate):null,a.current={year:"",month:"",monthDscr:"",days:[]},a.updateMasterValue=function(e,t){e||(e=a.dtpValue.unix?a.dtpValue:{}),a.$applyAsync(function(){a.dtpValue=e;var r=Number(a.time.minute);r-=r%a.option.minuteStep,a.time.minute=r.lZero(),a.dtpValue.formated=n.dateFormat(e,a.time,a.option.format),a.dtpValue.fullDate=n.joinTime(e.unix,a.time),a.fullData={formated:a.dtpValue.formated,lDate:a.dtpValue.fullDate.dtp_shortDate(),gDate:a.dtpValue.fullDate,unix:a.dtpValue.fullDate.getTime(),year:e.year,month:e.month,day:e.day,hour:Number(a.time.hour),minute:Number(a.time.minute),minDate:a.minDate,maxDate:a.maxDate,calType:a.calType,format:a.option.format},c.$setViewValue(a.dtpValue.formated),c.$render(),a.hasInputDtp&&(i[0].querySelector("[dtp-input]").value=a.dtpValue.formated),t&&(a.onChange&&a.onChange({date:a.fullData}),"time"==t&&a.onTimechange?a.onTimechange({date:a.fullData}):"day"==t&&a.onDatechange&&a.onDatechange({date:a.fullData}))})},a.parseInputValue=function(e,t,i){"today"==e&&(e=n.removeTime(new Date).getTime());var r=!1;e&&("jalali"==a.calType?r=n.validateJalaliDate(e,a.option.format):("string"==typeof e&&(e=n.toRegularFormat(e,a.calType,a.option.format)),r=new Date(e),r=!/invalid/i.test(r)&&r)),r?(a.dtpValue={year:r.year||r.getFullYear(),month:r.month||r.getMonth()+1,day:r.day||r.getDate(),unix:r.unix||r.getTime(),fullDate:r.gDate||r},a.dtpValue.fullDate=n.removeTime(a.dtpValue.fullDate),a.dtpValue.unix=a.dtpValue.fullDate.getTime(),a.time={hour:(r.getHours?r.getHours():r.hour).lZero(),minute:(r.getMinutes?r.getMinutes():r.minute).lZero()},a.updateMasterValue(!1,i)):t&&(a.time={hour:"00",minute:"00"})},a.parseInputValue(c.$viewValue||a.option.default,!0,!1),c.$formatters.push(function(e){return!e&&a.dtpValue.unix?a.destroy():a.dtpValue&&e==a.dtpValue.formated||a.parseInputValue(e,!1,!0),e}),a.option.watchingOptions&&a.$watch("options",function(i,r){if(i&&"object"==typeof i&&(!r||JSON.stringify(r)!=JSON.stringify(i))){var o=a.option.gregorianDic.daysNamesUntouched;a.option=e.merge(e.copy(t.getOptions()),i),a.option.minuteStep=Math.max(Math.min(a.option.minuteStep,60),1),i.gregorianDic&&i.gregorianDic.daysNames?a.option.gregorianDic.daysNamesUntouched=i.gregorianDic.daysNames:a.option.gregorianDic.daysNamesUntouched=o;var l=e.copy(a.option.gregorianDic.daysNamesUntouched);a.option.gregorianDic.daysNames=l.slice(a.option.gregorianStartDay,7).concat(l.slice(0,a.option.gregorianStartDay)),a.disableDays=n.parseDisablePattern(a.option),a.calTypeChanged&&a.calTypeChanged(a.option.calType)}},!0),l.$observe("disable",function(e){a.$applyAsync(function(){e=a.$eval(e),a.disable=e})}),l.$observe("mindate",function(e){a.$applyAsync(function(){e=a.$eval(e),a.minDate=n.convertToUnix(e,a.calType,a.option.format)})}),l.$observe("maxdate",function(e){a.$applyAsync(function(){e=a.$eval(e),a.maxDate=n.convertToUnix(e,a.calType,a.option.format)})}),a.onKeydown=function(e){9==e.keyCode&&a.closeCalendar()},a.openCalendar=function(){if(!a.showCalendarStat&&!a.disable){a.timeoutValue[0]=0,a.showCalendarStat=!0;var t=e.element('<adm-dtp-calendar id="'+a.dtpId+'" style="opacity:0; z-index: '+a.option.zIndex+';"></adm-dtp-calendar>');e.element(document.body).append(t),a.$applyAsync(function(){r(t)(a)}),o(function(){var t=document.documentElement.scrollTop||document.body.scrollTop,n=document.getElementById(a.dtpId),r=n.getBoundingClientRect(),o=i.children().children()[0],l=o.getBoundingClientRect(),s={x:l.left,y:l.top+l.height},c={width:r.width+s.x,height:r.height+s.y},u={top:"",bottom:"",left:"",right:""};c.height>window.innerHeight?u.top=t+l.top-r.height+"px":u.top=t+l.top+l.height+"px",c.width>window.innerWidth?u.left=s.x+window.innerWidth-c.width-20+"px":u.left=s.x+"px",e.element(n).css({top:u.top,bottom:u.bottom,left:u.left,opacity:1})},70),a.onOpen&&a.onOpen()}},a.closeCalendar=function(){if(a.showCalendarStat){a.$applyAsync(function(){a.monthPickerStat=!1,a.timePickerStat=!1,a.showCalendarStat=!1});var t=document.getElementById(a.dtpId);t&&(e.element(t).remove(),a.onClose&&a.onClose())}},a.toggleCalendar=function(){a.showCalendarStat?a.closeCalendar():a.openCalendar()},a.destroy=function(e){if(!a.disable){a.monthPickerStat=!1,a.timePickerStat=!1,a.current={year:"",month:"",monthDscr:"",days:[]},a.dtpValue={},a.fullData={minDate:a.minDate,maxDate:a.maxDate},a.time={hour:"00",minute:"00"};var t=new Date;"jalali"==a.calType&&(t=n.convertToJalali(t)),c.$setViewValue(""),c.$render(),e||u.fillDays(t,!a.option.transition),a.onChange&&a.onChange({date:a.fullData})}};var g=i[0].querySelector("[dtp-open]")||{};g.onclick=a.openCalendar;var m=i[0].querySelector("[dtp-close]")||{};m.onclick=a.closeCalendar;var h=i[0].querySelector("[dtp-toggle]")||{};h.onclick=a.toggleCalendar;var y=i[0].querySelector("[dtp-destroy]")||{};y.onclick=a.destroy},controller:["$scope",function(t){this.updateMasterValue=function(e,a){t.updateMasterValue(e,a)},this.fillDays=function(i,r){r?t.timeoutValue[0]=0:t.loadingDays=!0;var l=e.copy(i);if("jalali"==t.calType){var s=a.toGregorian(i.year,i.month,29);i=[s.year,s.month,s.day].dtp_toDate("date")}var c={year:i.getFullYear(),month:i.getMonth()+1,day:i.getDate()};t.$applyAsync(function(){var a=l.month||l.getMonth()+1;e.merge(t.current,{year:l.year||l.getFullYear(),month:a,monthDscr:t.monthNames[a-1]})});var u,d=u=t.option.gregorianStartDay;"jalali"==t.calType&&(d=0,u=6);var p=new Date;p=[p.getFullYear(),p.getMonth()+1,p.getDate(),1,0].dtp_toDate("unix");var g,m,h=t.dtpValue.unix||-1,y=[c.year,c.month,c.day,1,0].dtp_toDate("date"),f=new Date(e.copy(y).setDate(1)).getDay(),v=[],D=-1*(f-d+7)%7,x=!0,M=-1;if("jalali"==t.calType){var m=new Date(e.copy(y).setDate(D)),T=a.toJalali(m.getFullYear(),m.getMonth()+1,m.getDate());D-=7*Math.ceil((T.day-1)/7)+1}for(;;){D++;var m=new Date(e.copy(y).setDate(D)),T=!1;"jalali"==t.calType&&(T=a.toJalali(m.getFullYear(),m.getMonth()+1,m.getDate()));var w=T.day||m.getDate();if(1==w&&(x=!x),x&&w<8&&m.getDay()==u)break;var k=!1,S=1;if(t.minDate||t.maxDate){var b=n.joinTime(m,t.time);t.minDate&&!n.isDateBigger(b,t.minDate)||t.maxDate&&!n.isDateBigger(t.maxDate,b)?(S=0,2==M&&(v[v.length-1].isMax=!0)):(S=2,0==M&&(k=!0)),M=S}var V=m.getTime(),Y=m.getDay()+("jalali"==t.calType?1:0),N={day:w,month:T.month||m.getMonth()+1,year:T.year||m.getFullYear(),dayName:Y,fullDate:m,disable:x,today:V==p,selected:V==h,unix:V,valid:S,isMin:k};n.isDayDisable(t.calType,t.disableDays,N)&&(N.valid=0),N.selected&&(g=v.length),v.push(N)}o(function(){t.timeoutValue[0]=500,t.$applyAsync(function(){t.current.days=v,g&&t.updateMasterValue(t.current.days[g]),o(function(){t.loadingDays=!1},t.timeoutValue[1])})},t.timeoutValue[0])},this.reload=function(){var a=e.copy(t.current);a.day=29;var n=[a.year,a.month,8].dtp_toDate("date");"jalali"==t.calType&&(n=a),this.fillDays(n,!t.option.transition)},this.vm=t}],template:'<div class="ADMdtp ADMdtp-container" ng-class="{rtl: (calType==\'jalali\'), touch: option.isDeviceTouch, disable: disable}"> <div class="clickOutContainer" click-out="closeCalendar()" alias="{{dtpId}}"> <ng-transclude></ng-transclude> <div ng-if="defaultTemplate" class="ADMdtpInput masterInput" ng-class="{touch: option.isDeviceTouch, disable: disable, open: showCalendarStat}"> <input type="text" name="{{name}}" ng-model="dtpValue.formated" ng-focus="openCalendar()" ng-click="openCalendar()" ng-readonly="option.freezeInput || option.isDeviceTouch || disable" ng-blur="modelChanged()" ng-keydown="onKeydown($event)" ng-required="ngRequired" > <div class="dtp-ig" ng-click="toggleCalendar()"> <svg class="dtp-i fakeIcon" viewBox="0 0 24 24"> <use xlink:href="#dtp-i-right" /> </svg> <svg class="dtp-i calendarIcon" viewBox="0 0 24 24"> <use xlink:href="#dtp-i-calendar" /> </svg> <svg class="dtp-i closeIcon" viewBox="0 0 24 24"> <use xlink:href="#dtp-i-off" /> </svg> </div> <svg class="removeIcon" viewBox="0 0 24 24" ng-if="dtpValue.formated" ng-click="destroy()"> <use xlink:href="#dtp-i-close" /> </svg> </div> </div> <svg style="display:none;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"> <defs> <g id="dtp-i-calendar"> <path d="M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z"/> <path d="M0 0h24v24H0z" fill="none"/> </g> <g id="dtp-i-clock"> <path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/> <path d="M0 0h24v24H0z" fill="none"/> <path d="M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"/> </g> <g id="dtp-i-right"> <path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/> <path d="M0 0h24v24H0z" fill="none"/> </g> <g id="dtp-i-close"> <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/> <path d="M0 0h24v24H0z" fill="none"/> </g> <g id="dtp-i-off"> <path d="M0 0h24v24H0z" fill="none"/> <path d="M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6.83z"/> </g> </defs> </svg> </div>'}},l=function(){return{require:["^^admDtp","ngModel"],link:function(e,t,a,n){var i=n[0],r=n[1];r.$parsers.push(function(){return r.$modelValue}),i.vm.hasInputDtp=!0,t.on("focus",function(){i.vm.openCalendar()}),t.on("blur",function(){i.vm.modelChanged(t[0].value)})}}},s=function(e){return{restrict:"A",scope:{clickOut:"&"},link:function(t,a,n){void 0==n.id&&n.$set("id","id_"+Math.random()),e.on("click contextmenu",function(e){var a,i=0;if(e.target){var r=void 0!==n.alias?n.alias.replace(", ",",").split(","):[];for(r.push(n.id),a=e.target;a;a=a.parentNode){var o=a.id,l=a.className;if(void 0!==o)for(i=0;i<r.length;i++)if(o.indexOf(r[i])>-1||"string"==typeof l&&l.indexOf(r[i])>-1)return}t.$eval(t.clickOut)}})}}},c=function(e){e.setOptions({isDeviceTouch:"ontouchstart"in window||navigator.maxTouchPoints});var t=document.createElement("style");t.type="text/css";for(var a=function(e){return"-moz-"+e+"-o-"+e+"-webkit-"+e+e},n=1;n<51;n++)t.innerHTML+=".ADMdtpDays>span:nth-child("+n+")>span {"+a("transition: all .5s, transform 0.2s "+.01*n+"s cubic-bezier(0.680, -0.550, 0.265, 1.550); ")+"}";document.getElementsByTagName("head")[0].appendChild(t)};return e.module("ADM-dateTimePicker",[]).constant("constants",{}).provider("ADMdtp",t).filter("digitType",[a]).factory("ADMdtpConvertor",[n]).factory("ADMdtpFactory",["ADMdtpConvertor",i]).directive("admDtp",["ADMdtp","ADMdtpConvertor","ADMdtpFactory","constants","$compile","$timeout",o]).directive("admDtpCalendar",["ADMdtp","ADMdtpConvertor","ADMdtpFactory","constants","$timeout",r]).directive("dtpInput",[l]).directive("clickOut",["$document",s]).config(["ADMdtpProvider",c])}(window.angular);