multiple-date-picker-v2
Version:
Add support angular 1.5 and highe, range select was added original source https://arca-computing.github.io/MultipleDatePicker/
1 lines • 5.37 kB
JavaScript
angular.module("multipleDatePicker",[]).factory("multipleDatePickerBroadcast",["$rootScope",function(a){var b={};return b.calendarId=null,b.message="",b.resetOrder=function(a){this.message="reset",this.calendarId=a,this.broadcastItem()},b.broadcastItem=function(){a.$broadcast("handleMultipleDatePickerBroadcast")},b}]).directive("multipleDatePicker",["$log","multipleDatePickerBroadcast",function(a,b){"use strict";return{restrict:"AE",scope:{calendarId:"=?",dayClick:"=?",dayHover:"=?",month:"=?",monthChanged:"=?",daysSelected:"=?",weekDaysOff:"=?",highlightDays:"=?",allDaysOff:"=?",sundayFirstDay:"=?",disallowBackPastMonths:"=?",disallowGoFuturMonths:"=?",showDaysOfSurroundingMonths:"=?",cssDaysOfSurroundingMonths:"=?",fireEventsForDaysOfSurroundingMonths:"=?",disableDaysBefore:"=?",disableDaysAfter:"=?"},template:'<div class="multiple-date-picker"><div class="picker-top-row"><div class="text-center picker-navigate picker-navigate-left-arrow" ng-class="{\'disabled\':disableBackButton}" ng-click="previousMonth()"><</div><div class="text-center picker-month">{{month.format(\'MMMM YYYY\')}}</div><div class="text-center picker-navigate picker-navigate-right-arrow" ng-class="{\'disabled\':disableNextButton}" ng-click="nextMonth()">></div></div><div class="picker-days-week-row"><div class="text-center" ng-repeat="day in daysOfWeek">{{day}}</div></div><div class="picker-days-row">'+"<div class=\"text-center picker-day {{!day.otherMonth || showDaysOfSurroundingMonths ? day.css : ''}} {{day.otherMonth ? cssDaysOfSurroundingMonths : ''}}\" title=\"{{day.title}}\" ng-repeat=\"day in days\" ng-click=\"toggleDay($event, day)\" ng-mouseover=\"hoverDay($event, day)\" ng-mouseleave=\"dayHover($event, day)\" ng-class=\"{'picker-selected':day.selected, 'picker-off':!day.selectable, 'today':day.today,'past':day.past,'future':day.future, 'picker-other-month':day.otherMonth}\">{{day ? day.otherMonth && !showDaysOfSurroundingMonths ? ' ' : day.format('D') : ''}}</div></div></div>",link:function(a){var c=function(){var b=moment(),c=moment(a.month).subtract(1,"month"),d=moment(a.month).add(1,"month");a.disableBackButton=a.disallowBackPastMonths&&b.isAfter(c,"month"),a.disableNextButton=a.disallowGoFuturMonths&&b.isBefore(d,"month")},d=function(){for(var b=moment().localeData()._weekdaysMin,c=[],d=1;7>d;d++)c.push(b[d]);return a.sundayFirstDay?c.splice(0,0,b[0]):c.push(b[0]),c},e=function(){var b=a.daysSelected||[],c=[];b.map(function(a){c.push(moment(a))}),a.convertedDaysSelected=c,a.generate()};a.$on("handleMultipleDatePickerBroadcast",function(){"reset"!==b.message||b.calendarId&&b.calendarId!==a.calendarId||e()}),a.$watch("daysSelected",function(a){a&&e()},!0),a.$watch("weekDaysOff",function(){a.generate()},!0),a.$watch("highlightDays",function(){a.generate()},!0),a.$watch("allDaysOff",function(){a.generate()},!0),a.month=a.month||moment().startOf("day"),a.days=[],a.convertedDaysSelected=a.convertedDaysSelected||[],a.weekDaysOff=a.weekDaysOff||[],a.daysOff=a.daysOff||[],a.disableBackButton=!1,a.disableNextButton=!1,a.daysOfWeek=d(),a.cssDaysOfSurroundingMonths=a.cssDaysOfSurroundingMonths||"picker-empty",a.toggleDay=function(b,c){if(b.preventDefault(),!c.otherMonth||a.fireEventsForDaysOfSurroundingMonths){var d=!1;b.preventDefault=function(){d=!0},"function"==typeof a.dayClick&&a.dayClick(b,c),c.selectable&&!d&&(c.selected=!c.selected,c.selected?a.convertedDaysSelected.push(c):a.convertedDaysSelected=a.convertedDaysSelected.filter(function(a){return a.valueOf()!==c.valueOf()}))}},a.hoverDay=function(b,c){b.preventDefault();var d=!1;b.preventDefault=function(){d=!0},"function"==typeof a.dayHover&&a.dayHover(b,c),d||(c.hover="mouseover"===b.type?!0:!1)},a.previousMonth=function(){if(!a.disableBackButton){var b=moment(a.month);a.month=a.month.subtract(1,"month"),"function"==typeof a.monthChanged&&a.monthChanged(a.month,b),a.generate()}},a.nextMonth=function(){if(!a.disableNextButton){var b=moment(a.month);a.month=a.month.add(1,"month"),"function"==typeof a.monthChanged&&a.monthChanged(a.month,b),a.generate()}},a.isDayOff=function(a,b){return a.allDaysOff||!!a.disableDaysBefore&&moment(b).isBefore(a.disableDaysBefore,"day")||!!a.disableDaysAfter&&moment(b).isAfter(a.disableDaysAfter,"day")||angular.isArray(a.weekDaysOff)&&a.weekDaysOff.some(function(a){return b.day()===a})||angular.isArray(a.daysOff)&&a.daysOff.some(function(a){return b.isSame(a,"day")})||angular.isArray(a.highlightDays)&&a.highlightDays.some(function(a){return b.isSame(a.date,"day")&&!a.selectable})},a.isSelected=function(a,b){return a.convertedDaysSelected.some(function(a){return b.isSame(a,"day")})},a.generate=function(){var b=moment(a.month).date(0).day(a.sundayFirstDay?0:1).subtract(1,"days"),d=moment(a.month).date(1),e=[],f=moment(),g=moment(d).endOf("month"),h=function(){var c=moment(b.add(1,"days"));if(angular.isArray(a.highlightDays)){var d=a.highlightDays.filter(function(a){return c.isSame(a.date,"day")});c.css=d.length>0?d[0].css:"",c.title=d.length>0?d[0].title:""}return c.selectable=!a.isDayOff(a,c),c.selected=a.isSelected(a,c),c.today=c.isSame(f,"day"),c.past=c.isBefore(f,"day"),c.future=c.isAfter(f,"day"),c.isSame(a.month,"month")||(c.otherMonth=!0),c},i=g.diff(b,"days"),j=a.sundayFirstDay?6:0;g.day()!==j&&(i+=(a.sundayFirstDay?6:7)-g.day());for(var k=0;i>k;k++)e.push(h());a.days=e,c()},a.generate()}}}]);