|
31 | 31 | '<div class="_720kb-datepicker-calendar-header">', |
32 | 32 | '<div class="_720kb-datepicker-calendar-header-middle _720kb-datepicker-mobile-item _720kb-datepicker-calendar-month">', |
33 | 33 | '<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">', |
35 | 35 | '{{ item }}', |
36 | 36 | '</option>', |
37 | 37 | '</select>', |
|
110 | 110 | '<a href="javascript:void(0)" ng-repeat="px in prevMonthDays" class="_720kb-datepicker-calendar-day _720kb-datepicker-disabled">', |
111 | 111 | '{{px}}', |
112 | 112 | '</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">', |
114 | 114 | '{{item}}', |
115 | 115 | '</a>', |
116 | 116 | '<a href="javascript:void(0)" ng-repeat="nx in nextMonthDays" class="_720kb-datepicker-calendar-day _720kb-datepicker-disabled">', |
|
157 | 157 | //, dateMinLimit |
158 | 158 | //, dateMaxLimit |
159 | 159 | , dateDisabledDates = $scope.$eval($scope.dateDisabledDates) |
| 160 | + , dateDisabledWeekdays = $scope.$eval($scope.dateDisabledWeekdays) |
160 | 161 | , date = new Date() |
161 | 162 | , isMouseOn = false |
162 | 163 | , isMouseOnInput = false |
|
477 | 478 | if (newValue) { |
478 | 479 | setInputValue(); |
479 | 480 | } |
| 481 | + }) |
| 482 | + , unregisterDateDisabledDatesWatcher = $scope.$watch('dateDisabledDates', function dateDisabledDatesWatcher(newValue) { |
| 483 | + if (newValue) { |
| 484 | + dateDisabledDates = $scope.$eval(newValue); |
| 485 | + |
| 486 | + if (!$scope.isSelectableDate($scope.monthNumber, $scope.year, $scope.day)) { |
| 487 | + thisInput.val(''); |
| 488 | + thisInput.triggerHandler('input'); |
| 489 | + thisInput.triggerHandler('change');//just to be sure; |
| 490 | + } |
| 491 | + } |
480 | 492 | }); |
481 | 493 |
|
482 | 494 | $scope.nextMonth = function nextMonth() { |
|
631 | 643 |
|
632 | 644 | $scope.setDatepickerDay = function setDatepickerDay(day) { |
633 | 645 |
|
634 | | - if ($scope.isSelectableDate($scope.monthNumber, $scope.year, day) && |
| 646 | + if ($scope.isSelectableDay($scope.monthNumber, $scope.year, day) && |
| 647 | + $scope.isSelectableDate($scope.monthNumber, $scope.year, day) && |
635 | 648 | $scope.isSelectableMaxDate($scope.year + '/' + $scope.monthNumber + '/' + day) && |
636 | 649 | $scope.isSelectableMinDate($scope.year + '/' + $scope.monthNumber + '/' + day)) { |
637 | 650 |
|
|
697 | 710 | if (date.getFullYear() && |
698 | 711 | !isNaN(date.getDay()) && |
699 | 712 | !isNaN(date.getMonth()) && |
700 | | - $scope.isSelectableDate(date) && |
| 713 | + $scope.isSelectableDay(date.getMonth(), date.getFullYear(), date.getDay()) && |
| 714 | + $scope.isSelectableDate(date.getMonth(), date.getFullYear(), date.getDay()) && |
701 | 715 | $scope.isSelectableMaxDate(date) && |
702 | 716 | $scope.isSelectableMinDate(date)) { |
703 | 717 |
|
|
746 | 760 | $scope.paginationYears = theNewYears; |
747 | 761 | }; |
748 | 762 |
|
| 763 | + $scope.isSelectableDay = function isSelectableDay(monthNumber, year, day) { |
| 764 | + var i = 0; |
| 765 | + |
| 766 | + if (dateDisabledWeekdays && dateDisabledWeekdays.length > 0) { |
| 767 | + for (i; i <= dateDisabledWeekdays.length; i += 1) { |
| 768 | + if (dateDisabledWeekdays[i] === new Date(monthNumber + '/' + day + '/' + year).getDay()) { |
| 769 | + return false; |
| 770 | + } |
| 771 | + } |
| 772 | + } |
| 773 | + |
| 774 | + return true; |
| 775 | + }; |
| 776 | + |
749 | 777 | $scope.isSelectableDate = function isSelectableDate(monthNumber, year, day) { |
750 | 778 | var i = 0; |
751 | 779 |
|
|
944 | 972 | unregisterDateMinLimitWatcher(); |
945 | 973 | unregisterDateMaxLimitWatcher(); |
946 | 974 | unregisterDateFormatWatcher(); |
| 975 | + unregisterDateDisabledDatesWatcher(); |
947 | 976 | thisInput.off('focus click focusout blur'); |
948 | 977 | angular.element(theCalendar).off('mouseenter mouseleave focusin'); |
949 | 978 | angular.element($window).off('click focus focusin', onClickOnWindow); |
|
961 | 990 | 'buttonNextTitle': '@', |
962 | 991 | 'buttonPrevTitle': '@', |
963 | 992 | 'dateDisabledDates': '@', |
| 993 | + 'dateDisabledWeekdays': '@', |
964 | 994 | 'dateSetHidden': '@', |
965 | 995 | 'dateTyper': '@', |
966 | 996 | 'dateWeekStartDay': '@', |
|
0 commit comments