diff --git a/UI/WebServerResources/JavascriptAPIExtensions.js b/UI/WebServerResources/JavascriptAPIExtensions.js index d71b92a10..190a8e99b 100644 --- a/UI/WebServerResources/JavascriptAPIExtensions.js +++ b/UI/WebServerResources/JavascriptAPIExtensions.js @@ -218,7 +218,7 @@ Date.prototype.stringWithSeparator = function(separator) { Date.prototype.addDays = function(nbrDays) { var milliSeconds = this.getTime(); - milliSeconds += 86400000 * nbrDays; + milliSeconds += 86400000 * Math.round(nbrDays); this.setTime(milliSeconds); }; diff --git a/UI/WebServerResources/UIxAttendeesEditor.js b/UI/WebServerResources/UIxAttendeesEditor.js index 6d6c77fe5..7ca8e2874 100644 --- a/UI/WebServerResources/UIxAttendeesEditor.js +++ b/UI/WebServerResources/UIxAttendeesEditor.js @@ -896,9 +896,8 @@ _freeBusyCacheEntry.prototype = { if (this.entries.length > offset) { var adjustedEd = ed.beginOfDay(); var nbrDays = adjustedSd.deltaDays(adjustedEd) + 1; - var nbrQu = nbrDays * 96; - var offsetEnd = offset + nbrQu; - if (this.entries.length >= offsetEnd) { + var offsetEnd = offset + (nbrDays * 96); + if (Math.round(this.entries.length/96) >= nbrDays) { entries = this.entries.slice(offset, offsetEnd); } } @@ -912,16 +911,19 @@ _freeBusyCacheEntry.prototype = { var adjustedSd = sd.beginOfDay(); var adjustedEd = ed.beginOfDay(); - var nbrDays = adjustedSd.deltaDays(adjustedEd) + 1; + var start = adjustedSd.clone(); + start.addDays(-7); + var end = adjustedEd.clone(); + end.addDays(7); if (this.startDate) { fetchDates = []; if (adjustedSd.getTime() < this.startDate.getTime()) { // Period extends to before current start - var start = adjustedSd.clone(); - start.addDays(-7); - var end = this.startDate.beginOfDay(); - end.addDays(-1); + if (end.getTime() >= this.startDate.getTime()) { + end = this.startDate.beginOfDay(); + end.addDays(-1); + } fetchDates.push({ start: start, end: end }); } @@ -930,19 +932,18 @@ _freeBusyCacheEntry.prototype = { nextDate.addDays(currentNbrDays); if (adjustedEd.getTime() >= nextDate.getTime()) { // Period extends to after current end - var end = adjustedEd.clone(); - end.addDays(7); - fetchDates.push({ start: nextDate, end: end }); + if (start.getTime() <= nextDate.getTime()) { + start = nextDate.beginOfDay(); + start.addDays(1); + } + fetchDates.push({ start: start, end: end }); } } else { // Initial range - var start = adjustedSd.clone(); - start.addDays(-7); - var end = adjustedEd.clone(); - end.addDays(7); fetchDates = [ { start: start, end: end } ]; } + return fetchDates; }, @@ -960,7 +961,7 @@ _freeBusyCacheEntry.prototype = { } else { days = this.startDate.deltaDays(start); - if (this.entries.length == (days * 96)) { + if (Math.round(this.entries.length/96) == days) { // New period is just after previous period this.entries = this.entries.concat(entries); merged = true; @@ -1204,7 +1205,7 @@ function drawFbData(input, slots) { else { log("inconsistency between freebusy results and" + " the number of cells"); - log(" expecting: " + tds.length + " received: " + slots.length); + log(" expecting: " + (tds.length * 4) + " received: " + slots.length); } } @@ -1685,10 +1686,10 @@ function initTimeWidgets(widgets) { function onAdjustTime(event) { var endDate = window.getEndDate(); var startDate = window.getStartDate(); + var delta = 0; if (this.id.startsWith("start")) { // Start date was changed - var delta = window.getShadowStartDate().valueOf() - - startDate.valueOf(); + delta = window.getShadowStartDate().valueOf() - startDate.valueOf(); var newEndDate = new Date(endDate.valueOf() - delta); window.setEndDate(newEndDate); window.timeWidgets['end']['date'].updateShadowValue(); @@ -1698,20 +1699,27 @@ function onAdjustTime(event) { } else { // End date was changed - var delta = endDate.valueOf() - startDate.valueOf(); - if (delta < 0) { - showAlertDialog(labels.validate_endbeforestart); - var oldEndDate = window.getShadowEndDate(); - window.setEndDate(oldEndDate); - - window.timeWidgets['end']['date'].updateShadowValue(); - window.timeWidgets['end']['time'].updateShadowValue(); - window.timeWidgets['end']['time'].onChange(); // method from SOGoTimePicker + delta = window.getShadowEndDate().valueOf() - endDate.valueOf(); + if (delta != 0) { + var startEndDelta = endDate.valueOf() - startDate.valueOf(); + if (startEndDelta < 0) { + showAlertDialog(labels.validate_endbeforestart); + var oldEndDate = window.getShadowEndDate(); + window.setEndDate(oldEndDate); + window.timeWidgets['end']['date'].updateShadowValue(); + window.timeWidgets['end']['time'].updateShadowValue(); + window.timeWidgets['end']['time'].onChange(); // method from SOGoTimePicker + } + else { + window.timeWidgets['end']['date'].updateShadowValue(); + window.timeWidgets['end']['time'].updateShadowValue(); + } } } - // Specific function for the attendees editor - onTimeDateWidgetChange(); + if ($("freeBusyHeader").getElementsByTagName("th").length == 0 || delta != 0) + // Update freebusy data + onTimeDateWidgetChange(); } function _getDate(which) { @@ -1750,6 +1758,7 @@ function getShadowEndDate() { function _setDate(which, newDate) { window.timeWidgets[which]['date'].setInputAsDate(newDate); + jQuery(window.timeWidgets[which]['date']).closest('.date').datepicker('update'); if (!isAllDay) { window.timeWidgets[which]['time'].value = newDate.getDisplayHoursString(); if (window.timeWidgets[which]['time'].onChange) window.timeWidgets[which]['time'].onChange(); // method from SOGoTimePicker