diff --git a/dist/js/datepicker.js b/dist/js/datepicker.js index 03d870a..1deae39 100644 --- a/dist/js/datepicker.js +++ b/dist/js/datepicker.js @@ -22,14 +22,14 @@ var Datepicker; maxData: '', //TODO возможно добавить огрнаичивать число выделяемых дат - multipleDates: false, + multipleDates: true, + multipleDatesSeparator: ',', // navigation prevHtml: '«', nextHtml: '»', // events - // TODO сделать с множественными датами onChange: '' }; @@ -81,7 +81,7 @@ var Datepicker; _buildDatepickersContainer: function () { this.containerBuilt = true; - $body.append('
') + $body.append('
'); $datepickersContainer = $('#datepickers-container'); }, @@ -100,9 +100,25 @@ var Datepicker; }, _triggerOnChange: function (cellType) { - var dateString = this.formatDate(this.opts.dateFormat, this.date); + var selectedDates = this.selectedDates, + parsedSelected = Datepicker.getParsedDate(selectedDates[0]), + formattedDates = this.formatDate(this.opts.dateFormat, selectedDates[0]), + _this = this, + dates = new Date(parsedSelected.year, parsedSelected.month, parsedSelected.date); - this.opts.onChange(dateString, this.date, this); + if (this.opts.multipleDates) { + formattedDates = selectedDates.map(function (date) { + return _this.formatDate(_this.opts.dateFormat, date) + }).join(this.opts.multipleDatesSeparator); + + // Create new dates array, to separate it from original selectedDates + dates = selectedDates.map(function(date) { + var parsedDate = Datepicker.getParsedDate(date); + return new Date(parsedDate.year, parsedDate.month, parsedDate.date) + }) + } + + this.opts.onChange(formattedDates, dates, this); }, next: function () { @@ -137,7 +153,7 @@ var Datepicker; formatDate: function (string, date) { var result = string, - d = this.parsedDate; + d = Datepicker.getParsedDate(date); switch (true) { case /dd/.test(result): @@ -162,7 +178,6 @@ var Datepicker; selectDate: function (date) { if (this.opts.multipleDates) { if (!this._isSelected(date)) { - console.log('push'); this.selectedDates.push(date); } } else { @@ -458,7 +473,7 @@ Datepicker.Cell = function () { if (Datepicker.isSame(currentDate, date)) _class += ' -current-'; if (this.d._isSelected(date, 'day')) _class += ' -selected-'; - return '
' + date.getDate() + '
'; + return '
' + date.getDate() + '
'; }, /** @@ -560,10 +575,10 @@ Datepicker.Cell = function () { _handleClick: { days: function (el) { var date = el.data('date'), + month = el.data('month'), d = this.d.parsedDate; - this.d.date = new Date(d.year, d.month, date); - this.d.selectDate(this.d.date); + this.d.selectDate(new Date(d.year, month, date)); if (this.d.opts.onChange) { this.d._triggerOnChange() diff --git a/index.html b/index.html index 9327235..d958177 100644 --- a/index.html +++ b/index.html @@ -17,7 +17,8 @@ diff --git a/js/datepicker/body.js b/js/datepicker/body.js index e21857e..1b283ef 100644 --- a/js/datepicker/body.js +++ b/js/datepicker/body.js @@ -94,7 +94,7 @@ if (Datepicker.isSame(currentDate, date)) _class += ' -current-'; if (this.d._isSelected(date, 'day')) _class += ' -selected-'; - return '
' + date.getDate() + '
'; + return '
' + date.getDate() + '
'; }, /** @@ -196,10 +196,10 @@ _handleClick: { days: function (el) { var date = el.data('date'), + month = el.data('month'), d = this.d.parsedDate; - this.d.date = new Date(d.year, d.month, date); - this.d.selectDate(this.d.date); + this.d.selectDate(new Date(d.year, month, date)); if (this.d.opts.onChange) { this.d._triggerOnChange() diff --git a/js/datepicker/datepicker.js b/js/datepicker/datepicker.js index a0537ab..274bc1e 100644 --- a/js/datepicker/datepicker.js +++ b/js/datepicker/datepicker.js @@ -22,7 +22,8 @@ var Datepicker; maxData: '', //TODO возможно добавить огрнаичивать число выделяемых дат - multipleDates: false, + multipleDates: true, + multipleDatesSeparator: ',', // navigation prevHtml: '«', @@ -81,7 +82,7 @@ var Datepicker; _buildDatepickersContainer: function () { this.containerBuilt = true; - $body.append('
') + $body.append('
'); $datepickersContainer = $('#datepickers-container'); }, @@ -100,9 +101,25 @@ var Datepicker; }, _triggerOnChange: function (cellType) { - var dateString = this.formatDate(this.opts.dateFormat, this.date); + var selectedDates = this.selectedDates, + parsedSelected = Datepicker.getParsedDate(selectedDates[0]), + formattedDates = this.formatDate(this.opts.dateFormat, selectedDates[0]), + _this = this, + dates = new Date(parsedSelected.year, parsedSelected.month, parsedSelected.date); - this.opts.onChange(dateString, this.date, this); + if (this.opts.multipleDates) { + formattedDates = selectedDates.map(function (date) { + return _this.formatDate(_this.opts.dateFormat, date) + }).join(this.opts.multipleDatesSeparator); + + // Create new dates array, to separate it from original selectedDates + dates = selectedDates.map(function(date) { + var parsedDate = Datepicker.getParsedDate(date); + return new Date(parsedDate.year, parsedDate.month, parsedDate.date) + }) + } + + this.opts.onChange(formattedDates, dates, this); }, next: function () { @@ -137,7 +154,7 @@ var Datepicker; formatDate: function (string, date) { var result = string, - d = this.parsedDate; + d = Datepicker.getParsedDate(date); switch (true) { case /dd/.test(result): @@ -162,7 +179,6 @@ var Datepicker; selectDate: function (date) { if (this.opts.multipleDates) { if (!this._isSelected(date)) { - console.log('push'); this.selectedDates.push(date); } } else {