From 0687f830e21052d52be0ce19ad732afda257e786 Mon Sep 17 00:00:00 2001 From: Barbara Post Date: Fri, 2 Jun 2017 13:27:05 +0200 Subject: [PATCH] Working on #7: refactoring to distinguish between available months and month names. Work in progress (month selection is empty). --- README.md | 1 + dist/ionic-datepicker.bundle.min.js | 2 +- src/ionic-datepicker.provider.js | 22 ++++++++-------------- src/ionic-datepicker.service.js | 18 ++++++++++++------ 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index e358419..1f3a436 100755 --- a/README.md +++ b/README.md @@ -258,6 +258,7 @@ Since some bug fixes were added that conflicted with my changes, work again on i Swapped "Set" and "Close" buttons position, from user suggestion. ### 5) v1.6.0 +Fixed correct limitation of pickable day with any "from"/"to" dates configuration. [Issue#7](https://github.com/OSAMES/ionic-datepicker/issues/7) ##License: diff --git a/dist/ionic-datepicker.bundle.min.js b/dist/ionic-datepicker.bundle.min.js index f955b95..b3f9e1a 100755 --- a/dist/ionic-datepicker.bundle.min.js +++ b/dist/ionic-datepicker.bundle.min.js @@ -1 +1 @@ -!function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,"/**/\n.padding_zero {\n padding: 0;\n}\n\n.ionic_datepicker_popup .font_bold {\n font-weight: bold;\n}\n\n.ionic_datepicker_popup .padding_top_zero {\n padding-top: 0;\n}\n\n.ionic_datepicker_popup .padding_left_5px {\n padding-left: 5px;\n}\n\n.ionic_datepicker_popup .padding_right_5px {\n padding-right: 5px;\n}\n\n.ionic_datepicker_popup .month_year_section {\n padding: 5px 0;\n}\n\n.ionic_datepicker_popup .calendar_grid {\n height: 215px;\n}\n\n.ionic_datepicker_popup .calendar_grid .weeks_row {\n padding: 0;\n}\n\n.ionic_datepicker_popup .today {\n border: 1px solid #009688;\n border-radius: 50%;\n}\n\n.ionic_datepicker_popup .selected_date {\n background-color: #009688;\n border-radius: 50%;\n color: #ffffff;\n font-weight: bold;\n}\n\n.ionic_datepicker_popup .popup-head {\n background-color: #009688;\n display: none;\n}\n\n.ionic_datepicker_popup .popup-head .popup-title {\n color: #ffffff;\n}\n\n.ionic_datepicker_popup .popup-head .popup-sub-title {\n color: #ffffff;\n}\n\n.ionic_datepicker_popup .popup-body {\n background-color: #ffffff;\n}\n\n.ionic_datepicker_popup .popup-body .selected_date_full {\n background-color: #009688;\n margin: -10px -10px 0 -10px;\n height: 45px;\n text-align: center;\n font-weight: bold;\n color: #ffffff;\n line-height: 45px;\n font-size: 18px;\n}\n\n.ionic_datepicker_popup .popup-body .select_section {\n padding: 1px 5px;\n}\n\n.ionic_datepicker_popup .popup-body .pointer_events_none {\n pointer-events: none;\n color: #aaaaaa !important;\n}\n\n.ionic_datepicker_popup .popup-body .month_select, .ionic_datepicker_popup .popup-body .year_select {\n border: none;\n border-bottom: 1px solid #009688;\n padding: 0;\n}\n\n.ionic_datepicker_popup .popup-body .month_select .input-label, .ionic_datepicker_popup .popup-body .year_select .input-label {\n padding: 2px 0;\n width: 0;\n}\n\n.ionic_datepicker_popup .popup-body .month_select select, .ionic_datepicker_popup .popup-body .year_select select {\n left: 10px;\n border: none;\n padding: 0;\n}\n\n.ionic_datepicker_popup .popup-body .month_select:after, .ionic_datepicker_popup .popup-body .year_select:after {\n right: 5px;\n color: #009688;\n}\n\n.ionic_datepicker_popup .popup-body .show_nav {\n padding: 5px 0 0 0;\n}\n\n.ionic_datepicker_popup .popup-body .show_nav .prev_btn_section {\n padding: 5px 0;\n text-align: left;\n}\n\n.ionic_datepicker_popup .popup-body .show_nav .prev_btn_section button {\n padding: 0;\n}\n\n.ionic_datepicker_popup .popup-body .show_nav .next_btn_section {\n padding: 5px 0;\n text-align: right;\n}\n\n.ionic_datepicker_popup .popup-body .show_nav .next_btn_section button {\n padding: 0;\n}\n\n.ionic_datepicker_popup .popup-body .button-clear {\n color: #009688;\n}\n\n.ionic_datepicker_popup .popup-buttons {\n padding: 0;\n min-height: 45px;\n}\n\n.ionic_datepicker_popup .popup-buttons button {\n background-color: #009688;\n border-radius: 0;\n margin-right: 1px;\n color: #ffffff;\n}\n\n.ionic_datepicker_popup .row + .row {\n padding: 0;\n}\n\n.ionic_datepicker_modal .header, .ionic_datepicker_modal .footer {\n background-color: #009688;\n}\n\n.ionic_datepicker_modal .header .title, .ionic_datepicker_modal .header .button, .ionic_datepicker_modal .footer .title, .ionic_datepicker_modal .footer .button {\n color: #ffffff;\n}\n\n.ionic_datepicker_modal .footer .button-block {\n margin: 0;\n}\n\n.ionic_datepicker_modal .today {\n border: 1px solid #009688;\n}\n\n.ionic_datepicker_modal .selected_date {\n background-color: #009688;\n color: #ffffff;\n font-weight: bold;\n}\n\n.ionic_datepicker_modal .pointer_events_none {\n pointer-events: none;\n color: #aaaaaa !important;\n}\n\n.ionic_datepicker_modal .select_section {\n padding: 1px 5px;\n}\n\n.ionic_datepicker_modal .button-clear {\n color: #009688;\n}\n\n.ionic_datepicker_modal .month_select, .ionic_datepicker_modal .year_select {\n border: none;\n border-bottom: 1px solid #009688;\n padding: 0;\n}\n\n.ionic_datepicker_modal .month_select .input-label, .ionic_datepicker_modal .year_select .input-label {\n padding: 2px 0;\n width: 0;\n}\n\n.ionic_datepicker_modal .month_select select, .ionic_datepicker_modal .year_select select {\n left: 10px;\n border: none;\n padding: 0 10px;\n}\n\n.ionic_datepicker_modal .month_select:after, .ionic_datepicker_modal .year_select:after {\n right: 5px;\n color: #009688;\n}\n\n.ionic_datepicker_modal .padding_left_5px {\n padding-left: 5px;\n}\n\n.ionic_datepicker_modal .padding_right_5px {\n padding-right: 5px;\n}\n\n.ionic_datepicker_modal .date_col {\n height: 50px;\n line-height: 50px;\n}\n\n.ionic_datepicker_modal .font_bold {\n font-weight: bold;\n}\n\n.ionic_datepicker_modal .font_22px {\n font-size: 22px;\n}\n\n.platform-android .ionic_datepicker_modal .bar .title.title-left {\n text-align: center;\n}\n\n.platform-android .ionic_datepicker_modal select {\n left: 25%;\n}\n\n.platform-ios .ionic_datepicker_modal select {\n left: 5%;\n}\n\n.date_col {\n cursor: pointer;\n}"),function(e){try{e=angular.module("ionic-datepicker.templates")}catch(t){e=angular.module("ionic-datepicker.templates",[])}e.run(["$templateCache",function(e){e.put("ionic-datepicker-modal.html",'

{{mainObj.titleLabel || selctedDateEpoch | date : mainObj.dateFormat}}

{{dayList[row + col].date}}
')}])}(),function(e){try{e=angular.module("ionic-datepicker.templates")}catch(t){e=angular.module("ionic-datepicker.templates",[])}e.run(["$templateCache",function(e){e.put("ionic-datepicker-popup.html",'
{{mainObj.titleLabel || selctedDateEpoch | date : mainObj.dateFormat}}
{{dayList[row + col].date}}
')}])}(),angular.module("ionic-datepicker",["ionic","ionic-datepicker.service","ionic-datepicker.provider","ionic-datepicker.templates"]),angular.module("ionic-datepicker.provider",[]).provider("ionicDatePicker",function(){var e={titleLabel:null,setLabel:"Set",todayLabel:"Today",closeLabel:"Close",inputDate:new Date,mondayFirst:!0,weeksList:["S","M","T","W","T","F","S"],monthsList:["Jan","Feb","March","April","May","June","July","Aug","Sept","Oct","Nov","Dec"],templateType:"popup",showTodayButton:!1,closeOnSelect:!1,disableWeekdays:[],selectMode:"day"};this.configDatePicker=function(t){angular.extend(e,t)},this.$get=["$rootScope","$ionicPopup","$ionicModal","IonicDatepickerService",function(t,n,a,o){function i(e){return e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0),e}function c(e){e.disabledDates&&0!==e.disabledDates.length?(u.disabledDates=[],angular.forEach(e.disabledDates,function(e,t){e=i(new Date(e)),u.disabledDates.push(e.getTime())})):u.disabledDates=[]}function d(e){e=i(e),u.currentDate=angular.copy(e);var t=new Date(e.getFullYear(),e.getMonth(),1).getDate(),n=new Date(e.getFullYear(),e.getMonth()+1,0).getDate();u.monthsList=[],console.info("config ",u.mainObj.monthsList),u.mainObj.monthsList&&12===u.mainObj.monthsList.length?u.monthsList=u.mainObj.monthsList:u.monthsList=o.getMonthsList(u.mainObj.from,u.mainObj.to),console.info("months list ",u.monthsList),u.yearsList=o.getYearsList(u.mainObj.from,u.mainObj.to),u.dayList=[];var a,c;u.firstDayEpoch=i(new Date(e.getFullYear(),e.getMonth(),t)).getTime(),u.lastDayEpoch=i(new Date(e.getFullYear(),e.getMonth(),n)).getTime();for(var d=t;d<=n;d++)a=new Date(e.getFullYear(),e.getMonth(),d),c=a.getTime()u.toDate||u.mainObj.disableWeekdays.indexOf(a.getDay())>=0,u.dayList.push({date:a.getDate(),month:a.getMonth(),year:a.getFullYear(),day:a.getDay(),epoch:a.getTime(),disabled:c});var l=u.dayList[0].day-u.mainObj.mondayFirst;l=l<0?6:l;for(var r=0;ra.getFullYear()||n.getFullYear()==a.getFullYear()&&n.getMonth()>a.getMonth()||(n.getFullYear()==a.getFullYear()&&n.getMonth()==a.getMonth()&&n.getDate()>a.getDate()&&n.setDate(a.getDate()),u.currentDate=n,u.data.currentMonth=u.mainObj.monthsList[u.currentDate.getMonth()],u.data.currentYear=u.currentDate.getFullYear(),u.adjustSelctedDateEpoch(u.currentDate,!0),d(u.currentDate))};var g=function(e,t,n){var a=new Date(n,t+1,0).getDate();return e>a&&(e=a),e};return u.dateSelected=function(e){e&&0!==Object.keys(e).length&&(u.adjustSelctedDateEpoch(e,!1),u.mainObj.closeOnSelect&&(u.mainObj.callback("day"==u.mainObj.selectMode?u.selctedDateEpoch:{start:u.selctedDateEpoch,end:u.selctedDateEpochEndWeek}),"popup"==u.mainObj.templateType.toLowerCase()?u.popup.close():p()))},u.setIonicDatePickerTodayDate=function(){var e=i(new Date);u.adjustSelctedDateEpoch(e,!0),d(e)},u.setIonicDatePickerDate=function(){u.mainObj.callback("day"==u.mainObj.selectMode?u.selctedDateEpoch:{start:u.selctedDateEpoch,end:u.selctedDateEpochEndWeek}),p()},u.adjustSelctedDateEpoch=function(e,t){var n,a=t?e.getTime():e.epoch;if("week"==u.mainObj.selectMode)n=new Date(a),u.mainObj.mondayFirst?n.setDate(n.getDate()-new Date(a).getDay()+1):n.setDate(n.getDate()-new Date(a).getDay()),a=n.getTime(),n.setDate(n.getDate()+6),u.selctedDateEpochEndWeek=n.getTime();else if("month"==u.mainObj.selectMode){n=new Date(a),n.setDate(1),a=n.getTime();var o=new Date(n.getYear(),n.getMonth()+1,0).getDate();n=new Date(n.getFullYear(),n.getMonth(),o),u.selctedDateEpochEndWeek=n.getTime()}u.selctedDateEpoch=a},u.monthChanged=function(e){var t=u.monthsList.indexOf(e),n=new Date(u.selctedDateEpoch),a=g(n.getDate(),t,n.getFullYear());u.currentDate=i(new Date(u.currentDate.getFullYear(),t,a)),u.adjustSelctedDateEpoch(u.currentDate,!0),d(u.currentDate)},u.yearChanged=function(e){var t=new Date(u.selctedDateEpoch),n=g(t.getDate(),t.getMonth(),e);u.currentDate=i(new Date(e,u.currentDate.getMonth(),n)),u.adjustSelctedDateEpoch(u.currentDate,!0),d(u.currentDate)},a.fromTemplateUrl("ionic-datepicker-modal.html",{scope:u,animation:"slide-in-up"}).then(function(e){u.modal=e}),u.$on("$destroy",function(){u.modal.remove()}),u.closeIonicDatePickerModal=function(){p()},s.openDatePicker=function(t){var a=[];delete u.fromDate,delete u.toDate,u.mainObj=angular.extend({},e,t),u.mainObj.from&&(u.fromDate=i(new Date(u.mainObj.from)).getTime()),u.mainObj.to&&(u.toDate=i(new Date(u.mainObj.to)).getTime()),t.disableWeekdays&&e.disableWeekdays&&(u.mainObj.disableWeekdays=t.disableWeekdays.concat(e.disableWeekdays)),l(u.mainObj),a=[{text:u.mainObj.closeLabel,type:"button_close",onTap:function(e){console.log("ionic-datepicker popup closed.")}}],u.mainObj.showTodayButton&&a.push({text:u.mainObj.todayLabel,type:"button_today",onTap:function(e){var t=i(new Date);u.adjustSelctedDateEpoch(t,!0),d(t),e.preventDefault()}}),u.mainObj.closeOnSelect||a.push({text:u.mainObj.setLabel,type:"button_set",onTap:function(e){u.mainObj.callback("day"==u.mainObj.selectMode?u.selctedDateEpoch:{start:u.selctedDateEpoch,end:u.selctedDateEpochEndWeek})}}),"popup"==u.mainObj.templateType.toLowerCase()?u.popup=n.show({templateUrl:"ionic-datepicker-popup.html",scope:u,cssClass:"ionic_datepicker_popup",buttons:a}):r()},s}]}),angular.module("ionic-datepicker.service",[]).service("IonicDatepickerService",function(){this.monthsList=["January","February","March","April","May","June","July","August","September","October","November","December"],this.getYearsList=function(e,t){var n=[],a=1900,o=2100;a=e?new Date(e).getFullYear():a,o=t?new Date(t).getFullYear():o;for(var i=a;i<=o;i++)n.push(i);return n},this.getMonthsList=function(e,t){var n=[],a=0,o=11;a=e?new Date(e).getMonth():a,o=t?new Date(t).getMonth():o;for(var i=a;i<=o;i++)n.push(i);return n}}); \ No newline at end of file +!function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,"/**/\n.padding_zero {\n padding: 0;\n}\n\n.ionic_datepicker_popup .font_bold {\n font-weight: bold;\n}\n\n.ionic_datepicker_popup .padding_top_zero {\n padding-top: 0;\n}\n\n.ionic_datepicker_popup .padding_left_5px {\n padding-left: 5px;\n}\n\n.ionic_datepicker_popup .padding_right_5px {\n padding-right: 5px;\n}\n\n.ionic_datepicker_popup .month_year_section {\n padding: 5px 0;\n}\n\n.ionic_datepicker_popup .calendar_grid {\n height: 215px;\n}\n\n.ionic_datepicker_popup .calendar_grid .weeks_row {\n padding: 0;\n}\n\n.ionic_datepicker_popup .today {\n border: 1px solid #009688;\n border-radius: 50%;\n}\n\n.ionic_datepicker_popup .selected_date {\n background-color: #009688;\n border-radius: 50%;\n color: #ffffff;\n font-weight: bold;\n}\n\n.ionic_datepicker_popup .popup-head {\n background-color: #009688;\n display: none;\n}\n\n.ionic_datepicker_popup .popup-head .popup-title {\n color: #ffffff;\n}\n\n.ionic_datepicker_popup .popup-head .popup-sub-title {\n color: #ffffff;\n}\n\n.ionic_datepicker_popup .popup-body {\n background-color: #ffffff;\n}\n\n.ionic_datepicker_popup .popup-body .selected_date_full {\n background-color: #009688;\n margin: -10px -10px 0 -10px;\n height: 45px;\n text-align: center;\n font-weight: bold;\n color: #ffffff;\n line-height: 45px;\n font-size: 18px;\n}\n\n.ionic_datepicker_popup .popup-body .select_section {\n padding: 1px 5px;\n}\n\n.ionic_datepicker_popup .popup-body .pointer_events_none {\n pointer-events: none;\n color: #aaaaaa !important;\n}\n\n.ionic_datepicker_popup .popup-body .month_select, .ionic_datepicker_popup .popup-body .year_select {\n border: none;\n border-bottom: 1px solid #009688;\n padding: 0;\n}\n\n.ionic_datepicker_popup .popup-body .month_select .input-label, .ionic_datepicker_popup .popup-body .year_select .input-label {\n padding: 2px 0;\n width: 0;\n}\n\n.ionic_datepicker_popup .popup-body .month_select select, .ionic_datepicker_popup .popup-body .year_select select {\n left: 10px;\n border: none;\n padding: 0;\n}\n\n.ionic_datepicker_popup .popup-body .month_select:after, .ionic_datepicker_popup .popup-body .year_select:after {\n right: 5px;\n color: #009688;\n}\n\n.ionic_datepicker_popup .popup-body .show_nav {\n padding: 5px 0 0 0;\n}\n\n.ionic_datepicker_popup .popup-body .show_nav .prev_btn_section {\n padding: 5px 0;\n text-align: left;\n}\n\n.ionic_datepicker_popup .popup-body .show_nav .prev_btn_section button {\n padding: 0;\n}\n\n.ionic_datepicker_popup .popup-body .show_nav .next_btn_section {\n padding: 5px 0;\n text-align: right;\n}\n\n.ionic_datepicker_popup .popup-body .show_nav .next_btn_section button {\n padding: 0;\n}\n\n.ionic_datepicker_popup .popup-body .button-clear {\n color: #009688;\n}\n\n.ionic_datepicker_popup .popup-buttons {\n padding: 0;\n min-height: 45px;\n}\n\n.ionic_datepicker_popup .popup-buttons button {\n background-color: #009688;\n border-radius: 0;\n margin-right: 1px;\n color: #ffffff;\n}\n\n.ionic_datepicker_popup .row + .row {\n padding: 0;\n}\n\n.ionic_datepicker_modal .header, .ionic_datepicker_modal .footer {\n background-color: #009688;\n}\n\n.ionic_datepicker_modal .header .title, .ionic_datepicker_modal .header .button, .ionic_datepicker_modal .footer .title, .ionic_datepicker_modal .footer .button {\n color: #ffffff;\n}\n\n.ionic_datepicker_modal .footer .button-block {\n margin: 0;\n}\n\n.ionic_datepicker_modal .today {\n border: 1px solid #009688;\n}\n\n.ionic_datepicker_modal .selected_date {\n background-color: #009688;\n color: #ffffff;\n font-weight: bold;\n}\n\n.ionic_datepicker_modal .pointer_events_none {\n pointer-events: none;\n color: #aaaaaa !important;\n}\n\n.ionic_datepicker_modal .select_section {\n padding: 1px 5px;\n}\n\n.ionic_datepicker_modal .button-clear {\n color: #009688;\n}\n\n.ionic_datepicker_modal .month_select, .ionic_datepicker_modal .year_select {\n border: none;\n border-bottom: 1px solid #009688;\n padding: 0;\n}\n\n.ionic_datepicker_modal .month_select .input-label, .ionic_datepicker_modal .year_select .input-label {\n padding: 2px 0;\n width: 0;\n}\n\n.ionic_datepicker_modal .month_select select, .ionic_datepicker_modal .year_select select {\n left: 10px;\n border: none;\n padding: 0 10px;\n}\n\n.ionic_datepicker_modal .month_select:after, .ionic_datepicker_modal .year_select:after {\n right: 5px;\n color: #009688;\n}\n\n.ionic_datepicker_modal .padding_left_5px {\n padding-left: 5px;\n}\n\n.ionic_datepicker_modal .padding_right_5px {\n padding-right: 5px;\n}\n\n.ionic_datepicker_modal .date_col {\n height: 50px;\n line-height: 50px;\n}\n\n.ionic_datepicker_modal .font_bold {\n font-weight: bold;\n}\n\n.ionic_datepicker_modal .font_22px {\n font-size: 22px;\n}\n\n.platform-android .ionic_datepicker_modal .bar .title.title-left {\n text-align: center;\n}\n\n.platform-android .ionic_datepicker_modal select {\n left: 25%;\n}\n\n.platform-ios .ionic_datepicker_modal select {\n left: 5%;\n}\n\n.date_col {\n cursor: pointer;\n}"),function(e){try{e=angular.module("ionic-datepicker.templates")}catch(t){e=angular.module("ionic-datepicker.templates",[])}e.run(["$templateCache",function(e){e.put("ionic-datepicker-modal.html",'

{{mainObj.titleLabel || selctedDateEpoch | date : mainObj.dateFormat}}

{{dayList[row + col].date}}
')}])}(),function(e){try{e=angular.module("ionic-datepicker.templates")}catch(t){e=angular.module("ionic-datepicker.templates",[])}e.run(["$templateCache",function(e){e.put("ionic-datepicker-popup.html",'
{{mainObj.titleLabel || selctedDateEpoch | date : mainObj.dateFormat}}
{{dayList[row + col].date}}
')}])}(),angular.module("ionic-datepicker",["ionic","ionic-datepicker.service","ionic-datepicker.provider","ionic-datepicker.templates"]),angular.module("ionic-datepicker.provider",[]).provider("ionicDatePicker",function(){var e={titleLabel:null,setLabel:"Set",todayLabel:"Today",closeLabel:"Close",inputDate:new Date,mondayFirst:!0,weeksList:["S","M","T","W","T","F","S"],monthsList:["Jan","Feb","March","April","May","June","July","Aug","Sept","Oct","Nov","Dec"],templateType:"popup",showTodayButton:!1,closeOnSelect:!1,disableWeekdays:[],selectMode:"day"};this.configDatePicker=function(t){angular.extend(e,t)},this.$get=["$rootScope","$ionicPopup","$ionicModal","IonicDatepickerService",function(t,n,a,o){function i(e){return e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0),e}function c(e){e.disabledDates&&0!==e.disabledDates.length?(u.disabledDates=[],angular.forEach(e.disabledDates,function(e,t){e=i(new Date(e)),u.disabledDates.push(e.getTime())})):u.disabledDates=[]}function d(e){e=i(e),u.currentDate=angular.copy(e);var t=new Date(e.getFullYear(),e.getMonth(),1).getDate(),n=new Date(e.getFullYear(),e.getMonth()+1,0).getDate();u.monthsList=o.getMonthsList(u.mainObj.from,u.mainObj.to),u.monthsNames=o.getMonthsNames(u.mainObj.monthsList),u.yearsList=o.getYearsList(u.mainObj.from,u.mainObj.to),u.dayList=[];var a,c;u.firstDayEpoch=i(new Date(e.getFullYear(),e.getMonth(),t)).getTime(),u.lastDayEpoch=i(new Date(e.getFullYear(),e.getMonth(),n)).getTime();for(var d=t;d<=n;d++)a=new Date(e.getFullYear(),e.getMonth(),d),c=a.getTime()u.toDate||u.mainObj.disableWeekdays.indexOf(a.getDay())>=0,u.dayList.push({date:a.getDate(),month:a.getMonth(),year:a.getFullYear(),day:a.getDay(),epoch:a.getTime(),disabled:c});var l=u.dayList[0].day-u.mainObj.mondayFirst;l=l<0?6:l;for(var r=0;ra.getFullYear()||n.getFullYear()==a.getFullYear()&&n.getMonth()>a.getMonth()||(n.getFullYear()==a.getFullYear()&&n.getMonth()==a.getMonth()&&n.getDate()>a.getDate()&&n.setDate(a.getDate()),u.currentDate=n,u.data.currentMonth=u.monthsNames[u.currentDate.getMonth()],u.data.currentYear=u.currentDate.getFullYear(),u.adjustSelctedDateEpoch(u.currentDate,!0),d(u.currentDate))};var g=function(e,t,n){var a=new Date(n,t+1,0).getDate();return e>a&&(e=a),e};return u.dateSelected=function(e){e&&0!==Object.keys(e).length&&(u.adjustSelctedDateEpoch(e,!1),u.mainObj.closeOnSelect&&(u.mainObj.callback("day"==u.mainObj.selectMode?u.selctedDateEpoch:{start:u.selctedDateEpoch,end:u.selctedDateEpochEndWeek}),"popup"==u.mainObj.templateType.toLowerCase()?u.popup.close():p()))},u.setIonicDatePickerTodayDate=function(){var e=i(new Date);u.adjustSelctedDateEpoch(e,!0),d(e)},u.setIonicDatePickerDate=function(){u.mainObj.callback("day"==u.mainObj.selectMode?u.selctedDateEpoch:{start:u.selctedDateEpoch,end:u.selctedDateEpochEndWeek}),p()},u.adjustSelctedDateEpoch=function(e,t){var n,a=t?e.getTime():e.epoch;if("week"==u.mainObj.selectMode)n=new Date(a),u.mainObj.mondayFirst?n.setDate(n.getDate()-new Date(a).getDay()+1):n.setDate(n.getDate()-new Date(a).getDay()),a=n.getTime(),n.setDate(n.getDate()+6),u.selctedDateEpochEndWeek=n.getTime();else if("month"==u.mainObj.selectMode){n=new Date(a),n.setDate(1),a=n.getTime();var o=new Date(n.getYear(),n.getMonth()+1,0).getDate();n=new Date(n.getFullYear(),n.getMonth(),o),u.selctedDateEpochEndWeek=n.getTime()}u.selctedDateEpoch=a},u.monthChanged=function(e){var t=u.monthsNames.indexOf(e),n=new Date(u.selctedDateEpoch),a=g(n.getDate(),t,n.getFullYear());u.currentDate=i(new Date(u.currentDate.getFullYear(),t,a)),u.adjustSelctedDateEpoch(u.currentDate,!0),d(u.currentDate)},u.yearChanged=function(e){var t=new Date(u.selctedDateEpoch),n=g(t.getDate(),t.getMonth(),e);u.currentDate=i(new Date(e,u.currentDate.getMonth(),n)),u.adjustSelctedDateEpoch(u.currentDate,!0),d(u.currentDate)},a.fromTemplateUrl("ionic-datepicker-modal.html",{scope:u,animation:"slide-in-up"}).then(function(e){u.modal=e}),u.$on("$destroy",function(){u.modal.remove()}),u.closeIonicDatePickerModal=function(){p()},s.openDatePicker=function(t){var a=[];delete u.fromDate,delete u.toDate,u.mainObj=angular.extend({},e,t),u.mainObj.from&&(u.fromDate=i(new Date(u.mainObj.from)).getTime()),u.mainObj.to&&(u.toDate=i(new Date(u.mainObj.to)).getTime()),t.disableWeekdays&&e.disableWeekdays&&(u.mainObj.disableWeekdays=t.disableWeekdays.concat(e.disableWeekdays)),l(u.mainObj),a=[{text:u.mainObj.closeLabel,type:"button_close",onTap:function(e){console.log("ionic-datepicker popup closed.")}}],u.mainObj.showTodayButton&&a.push({text:u.mainObj.todayLabel,type:"button_today",onTap:function(e){var t=i(new Date);u.adjustSelctedDateEpoch(t,!0),d(t),e.preventDefault()}}),u.mainObj.closeOnSelect||a.push({text:u.mainObj.setLabel,type:"button_set",onTap:function(e){u.mainObj.callback("day"==u.mainObj.selectMode?u.selctedDateEpoch:{start:u.selctedDateEpoch,end:u.selctedDateEpochEndWeek})}}),"popup"==u.mainObj.templateType.toLowerCase()?u.popup=n.show({templateUrl:"ionic-datepicker-popup.html",scope:u,cssClass:"ionic_datepicker_popup",buttons:a}):r()},s}]}),angular.module("ionic-datepicker.service",[]).service("IonicDatepickerService",function(){this.getYearsList=function(e,t){var n=[],a=1900,o=2100;a=e?new Date(e).getFullYear():a,o=t?new Date(t).getFullYear():o;for(var i=a;i<=o;i++)n.push(i);return n},this.getMonthsList=function(e,t){var n=[],a=0,o=11;a=e?new Date(e).getMonth():a,o=t?new Date(t).getMonth():o;for(var i=0;i<=11;i++)n.push(io?null:i);return n},this.getMonthsNames=function(e){return e&&12===e.length?e:["January","February","March","April","May","June","July","August","September","October","November","December"]}}); \ No newline at end of file diff --git a/src/ionic-datepicker.provider.js b/src/ionic-datepicker.provider.js index 4e3d88c..1e995c9 100644 --- a/src/ionic-datepicker.provider.js +++ b/src/ionic-datepicker.provider.js @@ -61,7 +61,7 @@ angular.module('ionic-datepicker.provider', []) } $scope.currentDate = newDate; - $scope.data.currentMonth = $scope.mainObj.monthsList[$scope.currentDate.getMonth()]; + $scope.data.currentMonth = $scope.monthsNames[$scope.currentDate.getMonth()]; $scope.data.currentYear = $scope.currentDate.getFullYear(); $scope.adjustSelctedDateEpoch($scope.currentDate, true); refreshDateList($scope.currentDate); @@ -88,7 +88,7 @@ angular.module('ionic-datepicker.provider', []) } $scope.currentDate = newDate; - $scope.data.currentMonth = $scope.mainObj.monthsList[$scope.currentDate.getMonth()]; + $scope.data.currentMonth = $scope.monthsNames[$scope.currentDate.getMonth()]; $scope.data.currentYear = $scope.currentDate.getFullYear(); $scope.adjustSelctedDateEpoch($scope.currentDate, true); refreshDateList($scope.currentDate); @@ -185,16 +185,10 @@ angular.module('ionic-datepicker.provider', []) var firstDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1).getDate(); var lastDay = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0).getDate(); - $scope.monthsList = []; - console.info("config ", $scope.mainObj.monthsList); - if ($scope.mainObj.monthsList && $scope.mainObj.monthsList.length === 12) { - $scope.monthsList = $scope.mainObj.monthsList; - } else { - $scope.monthsList = IonicDatepickerService.getMonthsList($scope.mainObj.from, $scope.mainObj.to); - } - - console.info("months list ", $scope.monthsList); - + // available months + $scope.monthsList = IonicDatepickerService.getMonthsList($scope.mainObj.from, $scope.mainObj.to); + // all month name + $scope.monthsNames = IonicDatepickerService.getMonthsNames($scope.mainObj.monthsList); $scope.yearsList = IonicDatepickerService.getYearsList($scope.mainObj.from, $scope.mainObj.to); $scope.dayList = []; @@ -228,7 +222,7 @@ angular.module('ionic-datepicker.provider', []) $scope.rows = [0, 7, 14, 21, 28, 35]; $scope.cols = [0, 1, 2, 3, 4, 5, 6]; - $scope.data.currentMonth = $scope.mainObj.monthsList[currentDate.getMonth()]; + $scope.data.currentMonth = $scope.monthsNames[currentDate.getMonth()]; $scope.data.currentYear = currentDate.getFullYear(); $scope.data.currentMonthSelected = angular.copy($scope.data.currentMonth); $scope.currentYearSelected = angular.copy($scope.data.currentYear); @@ -237,7 +231,7 @@ angular.module('ionic-datepicker.provider', []) //Month changed $scope.monthChanged = function (month) { - var monthNumber = $scope.monthsList.indexOf(month); + var monthNumber = $scope.monthsNames.indexOf(month); var selectedDate = new Date($scope.selctedDateEpoch); var newDay = getAcceptableDay(selectedDate.getDate(), monthNumber, diff --git a/src/ionic-datepicker.service.js b/src/ionic-datepicker.service.js index 7f08330..15a2995 100644 --- a/src/ionic-datepicker.service.js +++ b/src/ionic-datepicker.service.js @@ -2,8 +2,6 @@ angular.module('ionic-datepicker.service', []) .service('IonicDatepickerService', function () { - this.monthsList = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; - this.getYearsList = function (from, to) { var yearsList = []; var minYear = 1900; @@ -19,7 +17,8 @@ angular.module('ionic-datepicker.service', []) return yearsList; }; - this.getMonthsList = function (from, to) { + // 12 items, not available months are null + this.getMonthsList = function (from, to) { var monthsList = []; var minMonth = 0; var maxMonth = 11; @@ -27,10 +26,17 @@ angular.module('ionic-datepicker.service', []) minMonth = from ? new Date(from).getMonth() : minMonth; maxMonth = to ? new Date(to).getMonth() : maxMonth; - for (var i = minMonth; i <= maxMonth; i++) { - monthsList.push(i); + for (var i = 0; i <= 11; i++) { + monthsList.push(i < minMonth || i > maxMonth ? null : i); } return monthsList; - }; + }; + + this.getMonthsNames = function (configNames) { + if (configNames && configNames.length === 12) { + return configNames; + } + return ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + }; });