|
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