Skip to content
This repository was archived by the owner on Feb 18, 2022. It is now read-only.

Commit 763db6a

Browse files
committed
Add option to disable weekdays
1 parent 1fd010d commit 763db6a

File tree

5 files changed

+46
-9
lines changed

5 files changed

+46
-9
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ date-min-limit="" | String | false | Set a minimum date limit - you can use all
8686
date-max-limit="" | String | false | Set a maximum date limit - you can use all the accepted date formats by the javascript `new Date()`
8787
date-set-hidden="" | String(Boolean) | false | Set the default date to be shown only in calendar and not in the input field
8888
date-disabled-dates="" | String([Date(), Date(), ...]) | false | Disable specific dates using an _Array_ of dates
89+
date-disabled-weekdays="" | String(1, 5, ...]) | false | Disable specific weekdays using an _Array_ of weeks number
8990
date-refocus="" | String(Boolean) | false | Set the datepicker to re-focus the input after selecting a date
9091
date-typer="" | String(Boolean) | false | Set the datepicker to update calendar date when user is typing a date, see validation [tips](#date-validation)
9192
date-week-start-day="" | String(Number) | 0 | Set the first day of the week. Must be an integer between 0 (Sunday) and 6 (Saturday). (e.g. 1 for Monday)

dist/angular-datepicker.js

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
'<div class="_720kb-datepicker-calendar-header">',
3232
'<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-mobile-item _720kb-datepicker-calendar-month">',
3333
'<select ng-model="month" title="{{ dateMonthTitle }}" ng-change="selectedMonthHandle(month)">',
34-
'<option ng-repeat="item in months" ng-selected="item === month" ng-disabled=\'!isSelectableMaxDate($index + 1 + " " + day + ", " + year) || !isSelectableMinDate($index + 1 + " " + day + ", " + year)\' ng-value="$index + 1" value="$index + 1">',
34+
'<option ng-repeat="item in months" ng-selected="item === month" ng-disabled=\'!isSelectableMaxDate(item + " " + day + ", " + year) || !isSelectableMinDate(item + " " + day + ", " + year)\' ng-value="$index + 1" value="$index + 1">',
3535
'{{ item }}',
3636
'</option>',
3737
'</select>',
@@ -110,7 +110,7 @@
110110
'<a href="javascript:void(0)" ng-repeat="px in prevMonthDays" class="_720kb-datepicker-calendar-day _720kb-datepicker-disabled">',
111111
'{{px}}',
112112
'</a>',
113-
'<a href="javascript:void(0)" ng-repeat="item in days" ng-click="setDatepickerDay(item)" ng-class="{\'_720kb-datepicker-active\': selectedDay === item && selectedMonth === monthNumber && selectedYear === year, \'_720kb-datepicker-disabled\': !isSelectableMinDate(year + \'/\' + monthNumber + \'/\' + item ) || !isSelectableMaxDate(year + \'/\' + monthNumber + \'/\' + item) || !isSelectableDate(monthNumber, year, item),\'_720kb-datepicker-today\': item === today.getDate() && monthNumber === (today.getMonth() + 1) && year === today.getFullYear() && !selectedDay}" class="_720kb-datepicker-calendar-day">',
113+
'<a href="javascript:void(0)" ng-repeat="item in days" ng-click="setDatepickerDay(item)" ng-class="{\'_720kb-datepicker-active\': selectedDay === item && selectedMonth === monthNumber && selectedYear === year, \'_720kb-datepicker-disabled\': !isSelectableMinDate(year + \'/\' + monthNumber + \'/\' + item ) || !isSelectableMaxDate(year + \'/\' + monthNumber + \'/\' + item) || !isSelectableDate(monthNumber, year, item) || !isSelectableDay(monthNumber, year, item),\'_720kb-datepicker-today\': item === today.getDate() && monthNumber === (today.getMonth() + 1) && year === today.getFullYear() && !selectedDay}" class="_720kb-datepicker-calendar-day">',
114114
'{{item}}',
115115
'</a>',
116116
'<a href="javascript:void(0)" ng-repeat="nx in nextMonthDays" class="_720kb-datepicker-calendar-day _720kb-datepicker-disabled">',
@@ -157,6 +157,7 @@
157157
//, dateMinLimit
158158
//, dateMaxLimit
159159
, dateDisabledDates = $scope.$eval($scope.dateDisabledDates)
160+
, dateDisabledWeekdays = $scope.$eval($scope.dateDisabledWeekdays)
160161
, date = new Date()
161162
, dateString
162163
, isMouseOn = false
@@ -629,7 +630,8 @@
629630

630631
$scope.setDatepickerDay = function setDatepickerDay(day) {
631632

632-
if ($scope.isSelectableDate($scope.monthNumber, $scope.year, day) &&
633+
if ($scope.isSelectableDay($scope.monthNumber, $scope.year, day) &&
634+
$scope.isSelectableDate($scope.monthNumber, $scope.year, day) &&
633635
$scope.isSelectableMaxDate($scope.year + '/' + $scope.monthNumber + '/' + day) &&
634636
$scope.isSelectableMinDate($scope.year + '/' + $scope.monthNumber + '/' + day)) {
635637

@@ -695,6 +697,7 @@
695697
if (date.getFullYear() &&
696698
!isNaN(date.getDay()) &&
697699
!isNaN(date.getMonth()) &&
700+
$scope.isSelectableDay(date) &&
698701
$scope.isSelectableDate(date) &&
699702
$scope.isSelectableMaxDate(date) &&
700703
$scope.isSelectableMinDate(date)) {
@@ -744,6 +747,20 @@
744747
$scope.paginationYears = theNewYears;
745748
};
746749

750+
$scope.isSelectableDay = function isSelectableDay(monthNumber, year, day) {
751+
var i = 0;
752+
753+
if (dateDisabledWeekdays && dateDisabledWeekdays.length > 0) {
754+
for (i; i <= dateDisabledWeekdays.length; i += 1) {
755+
if (dateDisabledWeekdays[i] === new Date(monthNumber + '/' + day + '/' + year).getDay()) {
756+
return false;
757+
}
758+
}
759+
}
760+
761+
return true;
762+
};
763+
747764
$scope.isSelectableDate = function isSelectableDate(monthNumber, year, day) {
748765
var i = 0;
749766

@@ -959,6 +976,7 @@
959976
'buttonNextTitle': '@',
960977
'buttonPrevTitle': '@',
961978
'dateDisabledDates': '@',
979+
'dateDisabledWeekdays': '@',
962980
'dateSetHidden': '@',
963981
'dateTyper': '@',
964982
'dateWeekStartDay': '@',

0 commit comments

Comments
 (0)