Skip to content

Commit 6ba815e

Browse files
authored
fix(calendar): fire onchange only when date selection is complete
This PR allow to fire onChange only when a date selection if complete. For a datetime for example, onChange is called when a date is selected, then when a hour is selected, and again when minutes are selected... which is IMHO is a complete nonsense. If I apply a method when a date is changed, i'd prefer trigger this change only when i have finished to select my date...
1 parent 1986ea2 commit 6ba815e

File tree

1 file changed

+35
-29
lines changed

1 file changed

+35
-29
lines changed

src/definitions/modules/calendar.js

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -202,33 +202,38 @@ $.fn.calendar = function(parameters) {
202202
calendar: function () {
203203
var i, r, c, p, row, cell, pageGrid;
204204

205-
var mode = module.get.mode();
206-
var today = new Date();
207-
var date = module.get.date();
208-
var focusDate = module.get.focusDate();
209-
var display = focusDate || date || settings.initialDate || today;
210-
display = module.helper.dateInRange(display);
205+
var
206+
mode = module.get.mode(),
207+
today = new Date(),
208+
date = module.get.date(),
209+
focusDate = module.get.focusDate(),
210+
display = module.helper.dateInRange(focusDate || date || settings.initialDate || today)
211+
;
211212

212213
if (!focusDate) {
213214
focusDate = display;
214215
module.set.focusDate(focusDate, false, false);
215216
}
216217

217-
var isYear = mode === 'year';
218-
var isMonth = mode === 'month';
219-
var isDay = mode === 'day';
220-
var isHour = mode === 'hour';
221-
var isMinute = mode === 'minute';
222-
var isTimeOnly = settings.type === 'time';
218+
var
219+
isYear = mode === 'year',
220+
isMonth = mode === 'month',
221+
isDay = mode === 'day',
222+
isHour = mode === 'hour',
223+
isMinute = mode === 'minute',
224+
isTimeOnly = settings.type === 'time'
225+
;
223226

224227
var multiMonth = Math.max(settings.multiMonth, 1);
225228
var monthOffset = !isDay ? 0 : module.get.monthOffset();
226229

227-
var minute = display.getMinutes();
228-
var hour = display.getHours();
229-
var day = display.getDate();
230-
var startMonth = display.getMonth() + monthOffset;
231-
var year = display.getFullYear();
230+
var
231+
minute = display.getMinutes(),
232+
hour = display.getHours(),
233+
day = display.getDate(),
234+
startMonth = display.getMonth() + monthOffset,
235+
year = display.getFullYear()
236+
;
232237

233238
var columns = isDay ? settings.showWeekNumbers ? 8 : 7 : isHour ? 4 : timeGap['column'];
234239
var rows = isDay || isHour ? 6 : timeGap['row'];
@@ -254,17 +259,18 @@ $.fn.calendar = function(parameters) {
254259
rows = Math.ceil(requiredCells / 7);
255260
}
256261

257-
var yearChange = isYear ? 10 : isMonth ? 1 : 0;
258-
var monthChange = isDay ? 1 : 0;
259-
var dayChange = isHour || isMinute ? 1 : 0;
260-
var prevNextDay = isHour || isMinute ? day : 1;
261-
var prevDate = new Date(year - yearChange, month - monthChange, prevNextDay - dayChange, hour);
262-
var nextDate = new Date(year + yearChange, month + monthChange, prevNextDay + dayChange, hour);
263-
264-
var prevLast = isYear ? new Date(Math.ceil(year / 10) * 10 - 9, 0, 0) :
265-
isMonth ? new Date(year, 0, 0) : isDay ? new Date(year, month, 0) : new Date(year, month, day, -1);
266-
var nextFirst = isYear ? new Date(Math.ceil(year / 10) * 10 + 1, 0, 1) :
267-
isMonth ? new Date(year + 1, 0, 1) : isDay ? new Date(year, month + 1, 1) : new Date(year, month, day + 1);
262+
var
263+
yearChange = isYear ? 10 : isMonth ? 1 : 0,
264+
monthChange = isDay ? 1 : 0,
265+
dayChange = isHour || isMinute ? 1 : 0,
266+
prevNextDay = isHour || isMinute ? day : 1,
267+
prevDate = new Date(year - yearChange, month - monthChange, prevNextDay - dayChange, hour),
268+
nextDate = new Date(year + yearChange, month + monthChange, prevNextDay + dayChange, hour),
269+
prevLast = isYear ? new Date(Math.ceil(year / 10) * 10 - 9, 0, 0) :
270+
isMonth ? new Date(year, 0, 0) : isDay ? new Date(year, month, 0) : new Date(year, month, day, -1),
271+
nextFirst = isYear ? new Date(Math.ceil(year / 10) * 10 + 1, 0, 1) :
272+
isMonth ? new Date(year + 1, 0, 1) : isDay ? new Date(year, month + 1, 1) : new Date(year, month, day + 1)
273+
;
268274

269275
var tempMode = mode;
270276
if (isDay && settings.showWeekNumbers){
@@ -809,7 +815,7 @@ $.fn.calendar = function(parameters) {
809815
module.set.mode(newMode);
810816
if (mode === 'hour' || (mode === 'day' && module.get.date())) {
811817
//the user has chosen enough to consider a valid date/time has been chosen
812-
module.set.date(date);
818+
module.set.date(date, true, false);
813819
} else {
814820
module.set.focusDate(date);
815821
}

0 commit comments

Comments
 (0)