From 08ed0e36c32d0d65df3fb21be6c9780775a0fb3b Mon Sep 17 00:00:00 2001 From: Jp Chavat Date: Sat, 10 Jun 2017 21:58:12 -0300 Subject: [PATCH] Added date-enabled-dates as an option similar to date-disabled-dates. --- .gitignore | 1 + README.md | 3 ++- src/js/angular-datepicker.js | 29 +++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index c8aea3c..3353a52 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules/ bower_components/ npm-debug.log +**/.idea \ No newline at end of file diff --git a/README.md b/README.md index 74fdc3e..a4b9a4c 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,8 @@ date-format="" | String | String(new Date()) | Set the date format you want to u date-min-limit="" | String | false | Set a minimum date limit - you can use all the accepted date formats by the javascript `new Date()` date-max-limit="" | String | false | Set a maximum date limit - you can use all the accepted date formats by the javascript `new Date()` date-set-hidden="" | String(Boolean) | false | Set the default date to be shown only in calendar and not in the input field -date-disabled-dates="" | String([Date(), Date(), ...]) | false | Disable specific dates using an _Array_ of dates +date-disabled-dates="" | String([Date(), Date(), ...]) | false | Disable specific dates using an _Array_ of dates. +date-enabled-dates="" | String([Date(), Date(), ...]) | false | Enable only the specific dates using an _Array_ of dates. date-disabled-weekdays="" | String(1, 5, ...]) | false | Disable specific weekdays using an _Array_ of weeks number date-refocus="" | String(Boolean) | false | Set the datepicker to re-focus the input after selecting a date date-typer="" | String(Boolean) | false | Set the datepicker to update calendar date when user is typing a date, see validation [tips](#date-validation) diff --git a/src/js/angular-datepicker.js b/src/js/angular-datepicker.js index acd7c43..34eb75d 100644 --- a/src/js/angular-datepicker.js +++ b/src/js/angular-datepicker.js @@ -157,6 +157,7 @@ //, dateMinLimit //, dateMaxLimit , dateDisabledDates = $scope.$eval($scope.dateDisabledDates) + , dateEnabledDates = $scope.$eval($scope.dateEnabledDates) , dateDisabledWeekdays = $scope.$eval($scope.dateDisabledWeekdays) , date = new Date() , isMouseOn = false @@ -483,6 +484,17 @@ if (newValue) { dateDisabledDates = $scope.$eval(newValue); + if (!$scope.isSelectableDate($scope.monthNumber, $scope.year, $scope.day)) { + thisInput.val(''); + thisInput.triggerHandler('input'); + thisInput.triggerHandler('change');//just to be sure; + } + } + }) + , unregisterDateEnabledDatesWatcher = $scope.$watch('dateEnabledDates', function dateEnabledDatesWatcher(newValue) { + if (newValue) { + dateEnabledDates = $scope.$eval(newValue); + if (!$scope.isSelectableDate($scope.monthNumber, $scope.year, $scope.day)) { thisInput.val(''); thisInput.triggerHandler('input'); @@ -788,6 +800,21 @@ } } } + + if (dateEnabledDates && + dateEnabledDates.length > 0) { + + for (i; i <= dateEnabledDates.length; i += 1) { + + if (new Date(dateEnabledDates[i]).getTime() === new Date(monthNumber + '/' + day + '/' + year).getTime()) { + + return true; + } + } + + return false; + } + return true; }; @@ -973,6 +1000,7 @@ unregisterDateMaxLimitWatcher(); unregisterDateFormatWatcher(); unregisterDateDisabledDatesWatcher(); + unregisterDateEnabledDatesWatcher(); thisInput.off('focus click focusout blur'); angular.element(theCalendar).off('mouseenter mouseleave focusin'); angular.element($window).off('click focus focusin', onClickOnWindow); @@ -990,6 +1018,7 @@ 'buttonNextTitle': '@', 'buttonPrevTitle': '@', 'dateDisabledDates': '@', + 'dateEnabledDates': '@', 'dateDisabledWeekdays': '@', 'dateSetHidden': '@', 'dateTyper': '@',