Monotone-Parent: d14cdc346d1ed672a7a9922c642a4eeb5cf499ca

Monotone-Revision: fad4af384953bf77b8c1da664d7deab40e8cfdc5

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2008-08-02T23:16:50
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2008-08-02 23:16:50 +00:00
parent 08203c6f40
commit 9963e8f831
2 changed files with 63 additions and 61 deletions

4
NEWS
View File

@ -1,3 +1,7 @@
1.0-200808XX
------------
- fixed a bug that would prevent deleted event and tasks from being removed from the events and tasks list
0.9.0-20080729 (1.0 rc7) 0.9.0-20080729 (1.0 rc7)
------------------------ ------------------------
- work around the situation where Courier IMAP would refuse to rename the current mailbox or move it into the trash - work around the situation where Courier IMAP would refuse to rename the current mailbox or move it into the trash

View File

@ -113,7 +113,8 @@ function _batchDeleteEvents() {
+ "/batchDelete?ids=" + events.join('/')); + "/batchDelete?ids=" + events.join('/'));
document.deleteEventAjaxRequest = triggerAjaxRequest(urlstr, document.deleteEventAjaxRequest = triggerAjaxRequest(urlstr,
deleteEventCallback, deleteEventCallback,
events); { calendar: calendar,
events: events });
} }
function deleteEvent() { function deleteEvent() {
@ -133,12 +134,12 @@ function deleteEvent() {
else { else {
if (confirm(label)) { if (confirm(label)) {
if (document.deleteEventAjaxRequest) { if (document.deleteEventAjaxRequest) {
document.deleteEventAjaxRequest.aborted = true; document.deleteEventAjaxRequest.aborted = true;
document.deleteEventAjaxRequest.abort(); document.deleteEventAjaxRequest.abort();
} }
var sortedNodes = []; var sortedNodes = [];
var calendars = []; var calendars = [];
for (var i = 0; i < nodes.length; i++) { for (var i = 0; i < nodes.length; i++) {
var calendar = nodes[i].calendar; var calendar = nodes[i].calendar;
if (!sortedNodes[calendar]) { if (!sortedNodes[calendar]) {
@ -231,27 +232,59 @@ function modifyEventCallback(http) {
} }
} }
function _deleteCalendarEventBlocks(calendar, cname) {
var events = calendarEvents[calendar];
if (events) {
var occurences = events[cname];
if (occurences)
for (var i = 0; i < occurences.length; i++) {
var nodes = occurences[i].blocks;
for (var j = 0; j < nodes.length; j++) {
var node = nodes[j];
node.parentNode.removeChild(node);
}
}
}
}
function _deleteEventFromTables(basename) {
var tables = [ $("eventsList"), $("tasksList") ];
for (var i = 0; i < 2; i++) {
var table = tables[i];
if (table.tBodies)
rows = table.tBodies[0].rows;
else
rows = $(table).childNodesWithTag("li");
for (var j = rows.length; j > 0; j--) {
var row = $(rows[j - 1]);
var id = row.getAttribute("id");
if (id.indexOf(basename) == 0)
row.parentNode.removeChild(row);
}
}
}
function deleteEventCallback(http) { function deleteEventCallback(http) {
if (http.readyState == 4) { if (http.readyState == 4) {
if (isHttpStatus204(http.status)) { if (isHttpStatus204(http.status)) {
var isTask = false; var isTask = false;
var nodes = http.callbackData; var calendar = http.callbackData.calendar;
for (var i = 0; i < nodes.length; i++) { var events = http.callbackData.events;
var node = $(nodes[i]);
if (node) { // log("calendar: " + calendar + "\n");
isTask = isTask || (node.parentNode.id == 'tasksList'); // log("events: " + events.join(", " ) + "\n");
node.parentNode.removeChild(node); for (var i = 0; i < events.length; i++) {
} var cname = events[i];
_deleteCalendarEventBlocks(calendar, cname);
_deleteEventFromTables(calendar + "-" + cname);
delete calendarEvents[calendar][cname];
} }
if (eventsToDelete.length) if (eventsToDelete.length)
_batchDeleteEvents(); _batchDeleteEvents();
else { else {
document.deleteEventAjaxRequest = null; document.deleteEventAjaxRequest = null;
} }
if (isTask)
deleteTasksFromViews(nodes);
else
deleteEventsFromViews(nodes)
} }
else else
log ("deleteEventCallback Ajax error"); log ("deleteEventCallback Ajax error");
@ -272,31 +305,6 @@ function getEventById(cname, owner) {
return event; return event;
} }
function deleteTasksFromViews(tasks) {
}
function deleteEventsFromViews(events) {
if (calendarEvents) {
for (var i = 0; i < events.length; i++) {
// FIXME cname + !calendar + siblings
var cname = events[i];
var event = calendarEvents[cname];
if (event) {
if (event.siblings) {
for (var j = 0; j < event.siblings.length; j++) {
var eventDiv = event.siblings[j];
eventDiv.parentNode.removeChild(eventDiv);
}
}
delete calendarEvents[cname]
}
var row = $(cname);
if (row)
row.parentNode.removeChild(row);
}
}
}
function _editRecurrenceDialog(eventDiv, method) { function _editRecurrenceDialog(eventDiv, method) {
var targetname = "SOGo_edit_" + eventDiv.cname + eventDiv.recurrenceTime; var targetname = "SOGo_edit_" + eventDiv.cname + eventDiv.recurrenceTime;
var urlstr = (ApplicationBaseURL + eventDiv.calendar + "/" + eventDiv.cname var urlstr = (ApplicationBaseURL + eventDiv.calendar + "/" + eventDiv.cname
@ -351,13 +359,13 @@ function performDeleteEventCallback(http) {
var calendar = nodes[0].calendar; var calendar = nodes[0].calendar;
for (var i = 0; i < nodes.length; i++) { for (var i = 0; i < nodes.length; i++) {
var node = nodes[i]; var node = nodes[i];
log("node: " + node); // log("node: " + node);
node.parentNode.removeChild(node); node.parentNode.removeChild(node);
} }
var basename = calendar + "-" + cname; var basename = calendar + "-" + cname;
if (occurenceTime) { if (occurenceTime) {
var row = $(basename + "-" + occurenceTime); var row = $(basename + "-" + occurenceTime);
log("rowID: " + basename + "-" + occurenceTime); // log("rowID: " + basename + "-" + occurenceTime);
if (row) if (row)
row.parentNode.removeChild(row); row.parentNode.removeChild(row);
@ -371,21 +379,8 @@ function performDeleteEventCallback(http) {
calendarEvents[calendar][cname] = newOccurences; calendarEvents[calendar][cname] = newOccurences;
} }
else { else {
log("basename: " + basename); // log("basename: " + basename);
var tables = [ "eventsList", "tasksList" ]; _deleteEventFromTables(basename);
for (var i = 0; i < 2; i++) {
var table = $(tables[i]);
if (table.tBodies)
rows = table.tBodies[0].rows;
else
rows = $(table).childNodesWithTag("li");
for (var j = rows.length; j > 0; j--) {
var row = $(rows[j - 1]);
var id = row.getAttribute("id");
if (id.indexOf(basename) == 0)
row.parentNode.removeChild(row);
}
}
delete calendarEvents[calendar][cname]; delete calendarEvents[calendar][cname];
} }
} }
@ -566,12 +561,15 @@ function tasksListCallback(http) {
listItem.observe("mousedown", listRowMouseDownHandler); listItem.observe("mousedown", listRowMouseDownHandler);
listItem.observe("click", onRowClick); listItem.observe("click", onRowClick);
listItem.observe("dblclick", editDoubleClickedEvent); listItem.observe("dblclick", editDoubleClickedEvent);
listItem.setAttribute("id", data[i][0]);
var calendar = escape(data[i][1]);
var cname = escape(data[i][0]);
listItem.setAttribute("id", calendar + "-" + cname);
listItem.addClassName(data[i][5]); listItem.addClassName(data[i][5]);
listItem.addClassName(data[i][6]); listItem.addClassName(data[i][6]);
listItem.calendar = data[i][1]; listItem.calendar = calendar;
listItem.addClassName("calendarFolder" + data[i][1]); listItem.addClassName("calendarFolder" + calendar);
listItem.cname = escape(data[i][0]); listItem.cname = cname;
var input = $(document.createElement("input")); var input = $(document.createElement("input"));
input.setAttribute("type", "checkbox"); input.setAttribute("type", "checkbox");
listItem.appendChild(input); listItem.appendChild(input);