Improve event attendees editor
- Avoid repetitive AJAX queries; - Improve handling of daylight changes.pull/75/merge
parent
cc3652b59b
commit
26d876e67a
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue