mirror of
https://github.com/frappe/air-datepicker.git
synced 2026-01-14 11:01:22 +08:00
add toggleSelected option implementation
This commit is contained in:
parent
7ef2686c3d
commit
807923600e
2
dist/css/datepicker.css
vendored
2
dist/css/datepicker.css
vendored
@ -81,7 +81,7 @@
|
|||||||
color: #fff;
|
color: #fff;
|
||||||
background: skyblue; }
|
background: skyblue; }
|
||||||
|
|
||||||
.datepicker--cell-day.-another-month- {
|
.datepicker--cell-day.-other-month- {
|
||||||
color: #ddd; }
|
color: #ddd; }
|
||||||
|
|
||||||
.datepicker--cell-month {
|
.datepicker--cell-month {
|
||||||
|
|||||||
42
dist/js/datepicker.js
vendored
42
dist/js/datepicker.js
vendored
@ -16,13 +16,17 @@ var Datepicker;
|
|||||||
weekends: [6, 0],
|
weekends: [6, 0],
|
||||||
defaultView: 'days',
|
defaultView: 'days',
|
||||||
dateFormat: 'dd.mm.yyyy',
|
dateFormat: 'dd.mm.yyyy',
|
||||||
|
toggleSelected: true,
|
||||||
|
|
||||||
|
showOtherMonths: '',
|
||||||
|
selectOtherMonths: '',
|
||||||
|
|
||||||
//TODO сделать минимальные, максимальные даты
|
//TODO сделать минимальные, максимальные даты
|
||||||
minDate: '',
|
minDate: '',
|
||||||
maxData: '',
|
maxDate: '',
|
||||||
|
|
||||||
//TODO возможно добавить огрнаичивать число выделяемых дат
|
//TODO возможно добавить огрнаичивать число выделяемых дат
|
||||||
multipleDates: true,
|
multipleDates: false,
|
||||||
multipleDatesSeparator: ',',
|
multipleDatesSeparator: ',',
|
||||||
|
|
||||||
// navigation
|
// navigation
|
||||||
@ -100,6 +104,10 @@ var Datepicker;
|
|||||||
},
|
},
|
||||||
|
|
||||||
_triggerOnChange: function (cellType) {
|
_triggerOnChange: function (cellType) {
|
||||||
|
if (!this.selectedDates.length) {
|
||||||
|
return this.opts.onChange('', '', this);
|
||||||
|
}
|
||||||
|
|
||||||
var selectedDates = this.selectedDates,
|
var selectedDates = this.selectedDates,
|
||||||
parsedSelected = Datepicker.getParsedDate(selectedDates[0]),
|
parsedSelected = Datepicker.getParsedDate(selectedDates[0]),
|
||||||
formattedDates = this.formatDate(this.opts.dateFormat, selectedDates[0]),
|
formattedDates = this.formatDate(this.opts.dateFormat, selectedDates[0]),
|
||||||
@ -187,6 +195,19 @@ var Datepicker;
|
|||||||
this.views[this.currentView]._render()
|
this.views[this.currentView]._render()
|
||||||
},
|
},
|
||||||
|
|
||||||
|
removeDate: function (date) {
|
||||||
|
var selected = this.selectedDates,
|
||||||
|
_this = this;
|
||||||
|
|
||||||
|
return selected.some(function (curDate, i) {
|
||||||
|
if (Datepicker.isSame(curDate, date)) {
|
||||||
|
selected.splice(i, 1);
|
||||||
|
_this.views[_this.currentView]._render();
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
_isSelected: function (checkDate, cellType) {
|
_isSelected: function (checkDate, cellType) {
|
||||||
return this.selectedDates.some(function (date) {
|
return this.selectedDates.some(function (date) {
|
||||||
return Datepicker.isSame(date, checkDate, cellType)
|
return Datepicker.isSame(date, checkDate, cellType)
|
||||||
@ -469,7 +490,7 @@ Datepicker.Cell = function () {
|
|||||||
d = Datepicker.getParsedDate(date);
|
d = Datepicker.getParsedDate(date);
|
||||||
|
|
||||||
if (this.d.isWeekend(d.day)) _class += " -weekend-";
|
if (this.d.isWeekend(d.day)) _class += " -weekend-";
|
||||||
if (d.month != this.d.parsedDate.month) _class += " -another-month-";
|
if (d.month != this.d.parsedDate.month) _class += " -other-month-";
|
||||||
if (Datepicker.isSame(currentDate, date)) _class += ' -current-';
|
if (Datepicker.isSame(currentDate, date)) _class += ' -current-';
|
||||||
if (this.d._isSelected(date, 'day')) _class += ' -selected-';
|
if (this.d._isSelected(date, 'day')) _class += ' -selected-';
|
||||||
|
|
||||||
@ -576,11 +597,20 @@ Datepicker.Cell = function () {
|
|||||||
days: function (el) {
|
days: function (el) {
|
||||||
var date = el.data('date'),
|
var date = el.data('date'),
|
||||||
month = el.data('month'),
|
month = el.data('month'),
|
||||||
d = this.d.parsedDate;
|
d = this.d.parsedDate,
|
||||||
|
selectedDate = new Date(d.year, month, date),
|
||||||
|
alreadySelected = this.d._isSelected(selectedDate, 'day'),
|
||||||
|
triggerOnChange = true;
|
||||||
|
|
||||||
this.d.selectDate(new Date(d.year, month, date));
|
if (!alreadySelected) {
|
||||||
|
this.d.selectDate(selectedDate);
|
||||||
|
} else if (alreadySelected && this.opts.toggleSelected){
|
||||||
|
this.d.removeDate(selectedDate);
|
||||||
|
} else if (alreadySelected && !this.opts.toggleSelected) {
|
||||||
|
triggerOnChange = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.d.opts.onChange) {
|
if (triggerOnChange) {
|
||||||
this.d._triggerOnChange()
|
this.d._triggerOnChange()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -18,7 +18,6 @@
|
|||||||
$('.calendar').datepicker({
|
$('.calendar').datepicker({
|
||||||
onChange: function (dateString, date, inst) {
|
onChange: function (dateString, date, inst) {
|
||||||
console.log(dateString);
|
console.log(dateString);
|
||||||
console.log(date[0].getFullYear());
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -90,7 +90,7 @@
|
|||||||
d = Datepicker.getParsedDate(date);
|
d = Datepicker.getParsedDate(date);
|
||||||
|
|
||||||
if (this.d.isWeekend(d.day)) _class += " -weekend-";
|
if (this.d.isWeekend(d.day)) _class += " -weekend-";
|
||||||
if (d.month != this.d.parsedDate.month) _class += " -another-month-";
|
if (d.month != this.d.parsedDate.month) _class += " -other-month-";
|
||||||
if (Datepicker.isSame(currentDate, date)) _class += ' -current-';
|
if (Datepicker.isSame(currentDate, date)) _class += ' -current-';
|
||||||
if (this.d._isSelected(date, 'day')) _class += ' -selected-';
|
if (this.d._isSelected(date, 'day')) _class += ' -selected-';
|
||||||
|
|
||||||
@ -197,11 +197,20 @@
|
|||||||
days: function (el) {
|
days: function (el) {
|
||||||
var date = el.data('date'),
|
var date = el.data('date'),
|
||||||
month = el.data('month'),
|
month = el.data('month'),
|
||||||
d = this.d.parsedDate;
|
d = this.d.parsedDate,
|
||||||
|
selectedDate = new Date(d.year, month, date),
|
||||||
|
alreadySelected = this.d._isSelected(selectedDate, 'day'),
|
||||||
|
triggerOnChange = true;
|
||||||
|
|
||||||
this.d.selectDate(new Date(d.year, month, date));
|
if (!alreadySelected) {
|
||||||
|
this.d.selectDate(selectedDate);
|
||||||
|
} else if (alreadySelected && this.opts.toggleSelected){
|
||||||
|
this.d.removeDate(selectedDate);
|
||||||
|
} else if (alreadySelected && !this.opts.toggleSelected) {
|
||||||
|
triggerOnChange = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.d.opts.onChange) {
|
if (triggerOnChange) {
|
||||||
this.d._triggerOnChange()
|
this.d._triggerOnChange()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -16,13 +16,17 @@ var Datepicker;
|
|||||||
weekends: [6, 0],
|
weekends: [6, 0],
|
||||||
defaultView: 'days',
|
defaultView: 'days',
|
||||||
dateFormat: 'dd.mm.yyyy',
|
dateFormat: 'dd.mm.yyyy',
|
||||||
|
toggleSelected: true,
|
||||||
|
|
||||||
|
showOtherMonths: '',
|
||||||
|
selectOtherMonths: '',
|
||||||
|
|
||||||
//TODO сделать минимальные, максимальные даты
|
//TODO сделать минимальные, максимальные даты
|
||||||
minDate: '',
|
minDate: '',
|
||||||
maxData: '',
|
maxDate: '',
|
||||||
|
|
||||||
//TODO возможно добавить огрнаичивать число выделяемых дат
|
//TODO возможно добавить огрнаичивать число выделяемых дат
|
||||||
multipleDates: true,
|
multipleDates: false,
|
||||||
multipleDatesSeparator: ',',
|
multipleDatesSeparator: ',',
|
||||||
|
|
||||||
// navigation
|
// navigation
|
||||||
@ -30,7 +34,6 @@ var Datepicker;
|
|||||||
nextHtml: '»',
|
nextHtml: '»',
|
||||||
|
|
||||||
// events
|
// events
|
||||||
// TODO сделать с множественными датами
|
|
||||||
onChange: ''
|
onChange: ''
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -101,6 +104,10 @@ var Datepicker;
|
|||||||
},
|
},
|
||||||
|
|
||||||
_triggerOnChange: function (cellType) {
|
_triggerOnChange: function (cellType) {
|
||||||
|
if (!this.selectedDates.length) {
|
||||||
|
return this.opts.onChange('', '', this);
|
||||||
|
}
|
||||||
|
|
||||||
var selectedDates = this.selectedDates,
|
var selectedDates = this.selectedDates,
|
||||||
parsedSelected = Datepicker.getParsedDate(selectedDates[0]),
|
parsedSelected = Datepicker.getParsedDate(selectedDates[0]),
|
||||||
formattedDates = this.formatDate(this.opts.dateFormat, selectedDates[0]),
|
formattedDates = this.formatDate(this.opts.dateFormat, selectedDates[0]),
|
||||||
@ -188,6 +195,19 @@ var Datepicker;
|
|||||||
this.views[this.currentView]._render()
|
this.views[this.currentView]._render()
|
||||||
},
|
},
|
||||||
|
|
||||||
|
removeDate: function (date) {
|
||||||
|
var selected = this.selectedDates,
|
||||||
|
_this = this;
|
||||||
|
|
||||||
|
return selected.some(function (curDate, i) {
|
||||||
|
if (Datepicker.isSame(curDate, date)) {
|
||||||
|
selected.splice(i, 1);
|
||||||
|
_this.views[_this.currentView]._render();
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
_isSelected: function (checkDate, cellType) {
|
_isSelected: function (checkDate, cellType) {
|
||||||
return this.selectedDates.some(function (date) {
|
return this.selectedDates.some(function (date) {
|
||||||
return Datepicker.isSame(date, checkDate, cellType)
|
return Datepicker.isSame(date, checkDate, cellType)
|
||||||
|
|||||||
@ -43,7 +43,7 @@
|
|||||||
// -------------------------------------------------
|
// -------------------------------------------------
|
||||||
|
|
||||||
.datepicker--cell-day {
|
.datepicker--cell-day {
|
||||||
&.-another-month- {
|
&.-other-month- {
|
||||||
color: $colorAnotherMonth;
|
color: $colorAnotherMonth;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user