From 38e199d5be09bfdeb4a28ebca6c7f24255242fe5 Mon Sep 17 00:00:00 2001 From: t1m0n Date: Tue, 27 Oct 2015 12:20:47 +0300 Subject: [PATCH] add ability to select multiple dates --- dist/js/datepicker.js | 33 +++++++++++++-------------------- js/datepicker/body.js | 19 +------------------ js/datepicker/datepicker.js | 14 ++++++++++++-- 3 files changed, 26 insertions(+), 40 deletions(-) diff --git a/dist/js/datepicker.js b/dist/js/datepicker.js index 77783f9..03d870a 100644 --- a/dist/js/datepicker.js +++ b/dist/js/datepicker.js @@ -21,7 +21,7 @@ var Datepicker; minDate: '', maxData: '', - //TODO сделать множественные даты + //TODO возможно добавить огрнаичивать число выделяемых дат multipleDates: false, // navigation @@ -29,6 +29,7 @@ var Datepicker; nextHtml: '»', // events + // TODO сделать с множественными датами onChange: '' }; @@ -160,7 +161,10 @@ var Datepicker; selectDate: function (date) { if (this.opts.multipleDates) { - // validate, push + if (!this._isSelected(date)) { + console.log('push'); + this.selectedDates.push(date); + } } else { this.selectedDates = [date]; } @@ -168,6 +172,12 @@ var Datepicker; this.views[this.currentView]._render() }, + _isSelected: function (checkDate, cellType) { + return this.selectedDates.some(function (date) { + return Datepicker.isSame(date, checkDate, cellType) + }) + }, + get parsedDate() { return Datepicker.getParsedDate(this.date); }, @@ -446,7 +456,7 @@ Datepicker.Cell = function () { if (this.d.isWeekend(d.day)) _class += " -weekend-"; if (d.month != this.d.parsedDate.month) _class += " -another-month-"; if (Datepicker.isSame(currentDate, date)) _class += ' -current-'; - if (this._isSelected(date, 'day')) _class += ' -selected-'; + if (this.d._isSelected(date, 'day')) _class += ' -selected-'; return '
' + date.getDate() + '
'; }, @@ -534,23 +544,6 @@ Datepicker.Cell = function () { this._renderTypes[this.type].bind(this)() }, - _isSelected: function (cellDate, cellType) { - var selectedDates = this.d.selectedDates, - len = selectedDates.length, - result; - - if (!len) return false; - - for (var i = 0; i < len; i++) { - if (Datepicker.isSame(selectedDates[i], cellDate, cellType)) { - result = true; - break; - } - } - - return result; - }, - show: function () { this.$el.addClass('active'); this.acitve = true; diff --git a/js/datepicker/body.js b/js/datepicker/body.js index ffcd865..e21857e 100644 --- a/js/datepicker/body.js +++ b/js/datepicker/body.js @@ -92,7 +92,7 @@ if (this.d.isWeekend(d.day)) _class += " -weekend-"; if (d.month != this.d.parsedDate.month) _class += " -another-month-"; if (Datepicker.isSame(currentDate, date)) _class += ' -current-'; - if (this._isSelected(date, 'day')) _class += ' -selected-'; + if (this.d._isSelected(date, 'day')) _class += ' -selected-'; return '
' + date.getDate() + '
'; }, @@ -180,23 +180,6 @@ this._renderTypes[this.type].bind(this)() }, - _isSelected: function (cellDate, cellType) { - var selectedDates = this.d.selectedDates, - len = selectedDates.length, - result; - - if (!len) return false; - - for (var i = 0; i < len; i++) { - if (Datepicker.isSame(selectedDates[i], cellDate, cellType)) { - result = true; - break; - } - } - - return result; - }, - show: function () { this.$el.addClass('active'); this.acitve = true; diff --git a/js/datepicker/datepicker.js b/js/datepicker/datepicker.js index a7d8f49..a0537ab 100644 --- a/js/datepicker/datepicker.js +++ b/js/datepicker/datepicker.js @@ -21,7 +21,7 @@ var Datepicker; minDate: '', maxData: '', - //TODO сделать множественные даты + //TODO возможно добавить огрнаичивать число выделяемых дат multipleDates: false, // navigation @@ -29,6 +29,7 @@ var Datepicker; nextHtml: '»', // events + // TODO сделать с множественными датами onChange: '' }; @@ -160,7 +161,10 @@ var Datepicker; selectDate: function (date) { if (this.opts.multipleDates) { - // validate, push + if (!this._isSelected(date)) { + console.log('push'); + this.selectedDates.push(date); + } } else { this.selectedDates = [date]; } @@ -168,6 +172,12 @@ var Datepicker; this.views[this.currentView]._render() }, + _isSelected: function (checkDate, cellType) { + return this.selectedDates.some(function (date) { + return Datepicker.isSame(date, checkDate, cellType) + }) + }, + get parsedDate() { return Datepicker.getParsedDate(this.date); },