|  | 
| 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-_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