Monotone-Parent: 53a9a0c604dc0d44347247cc86a74a8d746c3c4b

Monotone-Revision: 69f4dab4873454f7a95f8824f9f72c5a71f8d3d7

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2006-11-10T22:59:39
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau
2006-11-10 22:59:39 +00:00
parent bfc1f9012b
commit eb1a16bc87
2 changed files with 133 additions and 18 deletions

View File

@@ -1,5 +1,9 @@
2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/WebServerResources/MailerUI.js: added code to handle the
possible drag and drop events to manager in the mail module.
Moving messages, opening parent folders, ...
* UI/WebServerResources/SOGoDragAndDrop.js: new file containing
the drag and drop manager as well as the interface to HTMLElement
to trigger drag and drop events.

View File

@@ -313,17 +313,23 @@ function uixDeleteSelectedMessages(sender) {
var url, http;
/* send AJAX request (synchronously) */
url = (ApplicationBaseURL + currentMailbox + "/"
+ rows[i].getAttribute("id").substr(4)
+ "/trash?jsonly=1");
var messageId = currentMailbox + "/" + rowIds[i];
url = ApplicationBaseURL + messageId + "/trash?jsonly=1";
http = createHTTPClient();
http.open("POST", url, false /* not async */);
http.open("GET", url, false /* not async */);
http.send("");
if (http.status != 200) { /* request failed */
failCount++;
http = null;
continue;
} else {
deleteCachedMessage(messageId);
if (currentMessages[currentMailbox] == rowIds[i]) {
var div = $('messageContent');
div.innerHTML = "";
currentMessages[currentMailbox] = null;
}
}
http = null;
@@ -339,6 +345,43 @@ function uixDeleteSelectedMessages(sender) {
return false;
}
function moveMessages(rowIds, folder) {
var failCount = 0;
for (var i = 0; i < rowIds.length; i++) {
var url, http;
/* send AJAX request (synchronously) */
var messageId = currentMailbox + "/" + rowIds[i];
url = ApplicationBaseURL + messageId + "/move?jsonly=1&tofolder=" + folder;
http = createHTTPClient();
http.open("GET", url, false /* not async */);
http.send("");
if (http.status == 200) {
var row = $("row_" + rowIds[i]);
row.parentNode.removeChild(row);
deleteCachedMessage(messageId);
if (currentMessages[currentMailbox] == rowIds[i]) {
var div = $('messageContent');
div.innerHTML = "";
currentMessages[currentMailbox] = null;
}
}
else /* request failed */
failCount++;
/* remove from page */
/* line-through would be nicer, but hiding is OK too */
}
if (failCount > 0)
alert("Could not move " + failCount + " messages!");
return failCount;
}
function onMenuDeleteMessage(event) {
uixDeleteSelectedMessages();
event.preventDefault();
@@ -507,6 +550,21 @@ function onFolderMenuHide(event)
selectNode(topNode.selectedEntry);
}
function deleteCachedMessage(messageId) {
var done = false;
var counter = 0;
while (counter < cachedMessages.length
&& !done)
if (cachedMessages[counter]
&& cachedMessages[counter]['idx'] == messageId) {
cachedMessages.splice(counter, 1);
done = true;
}
else
counter++;
}
function getCachedMessage(idx)
{
var message = null;
@@ -787,6 +845,39 @@ var mailboxSpanExit = function() {
this.removeClassName("_dragOver");
}
var mailboxSpanDrop = function(data) {
var success = false;
if (data) {
var folder = this.parentNode.parentNode.getAttribute("dataname");
if (folder != currentMailbox)
success = (moveMessages(data, folder) == 0);
}
else
success = false;
return success;
}
var plusSignEnter = function() {
var nodeNr = parseInt(this.id.substr(2));
if (!d.aNodes[nodeNr]._io)
this.plusSignTimer = setTimeout("openPlusSign('" + nodeNr + "');", 1000);
}
var plusSignExit = function() {
if (this.plusSignTimer) {
clearTimeout(this.plusSignTimer);
this.plusSignTimer = null;
}
}
function openPlusSign(nodeNr) {
d.nodeStatus(1, nodeNr, d.aNodes[nodeNr]._ls);
d.aNodes[nodeNr]._io = 1;
this.plusSignTimer = null;
}
var messageListGhost = function () {
var newDiv = document.createElement("div");
// newDiv.style.width = "25px;";
@@ -805,6 +896,15 @@ var messageListGhost = function () {
return newDiv;
}
var messageListData = function(type) {
var rows = this.getSelectedRowsId();
var msgIds = new Array();
for (var i = 0; i < rows.length; i++)
msgIds.push(rows[i].substr(4));
return msgIds;
}
function configureMessageListEvents() {
var messageList = $("messageList");
if (messageList) {
@@ -816,11 +916,11 @@ function configureMessageListEvents() {
|| rows[start].cells[0].hasClassName("tbtv_navcell"))
start++;
for (var i = start; i < rows.length; i++) {
rows[i].addEventListener("click", onRowClick, false);
rows[i].addEventListener("mousedown", onRowClick, false);
rows[i].addEventListener("contextmenu", onMessageContextMenu, false);
for (var j = 0; j < rows[i].cells.length; j++) {
var cell = rows[i].cells[j];
cell.addEventListener("mousedown", listRowMouseDownHandler, true);
cell.addEventListener("mousedown", listRowMouseDownHandler, false);
if (j == 2 || j == 3 || j == 5)
cell.addEventListener("dblclick", onMessageDoubleClick, false);
else if (j == 4) {
@@ -829,6 +929,11 @@ function configureMessageListEvents() {
}
}
}
messageList.dndTypes = function() { return new Array("mailRow"); };
messageList.dndGhost = messageListGhost;
messageList.dndDataForType = messageListData;
document.DNDManager.registerSource(messageList);
}
}
@@ -851,19 +956,25 @@ function configureDragHandles() {
/* dnd */
function initDnd() {
log ("MailerUI initDnd");
var msgList = $("messageList");
if (msgList) {
msgList.workAroundDragGesture();
msgList.dndTypes = function() { return new Array("mailRow"); };
msgList.dndGhost = messageListGhost;
document.DNDManager.registerSource(msgList);
var nodes = document.getElementsByClassName("leaf", $("d"));
var tree = $("d");
if (tree) {
var images = tree.getElementsByTagName("img");
for (var i = 0; i < images.length; i++) {
if (images[i].id[0] == 'j') {
images[i].dndAcceptType = mailboxSpanAcceptType;
images[i].dndEnter = plusSignEnter;
images[i].dndExit = plusSignExit;
document.DNDManager.registerDestination(images[i]);
}
}
var nodes = document.getElementsByClassName("leaf", tree);
for (var i = 0; i < nodes.length; i++) {
nodes[i].dndAcceptType = this.mailboxSpanAcceptType;
nodes[i].dndEnter = this.mailboxSpanEnter;
nodes[i].dndExit = this.mailboxSpanExit;
document.DNDManager.registerDestination(nodes[i]);
nodes[i].dndAcceptType = mailboxSpanAcceptType;
nodes[i].dndEnter = mailboxSpanEnter;
nodes[i].dndExit = mailboxSpanExit;
nodes[i].dndDrop = mailboxSpanDrop;
document.DNDManager.registerDestination(nodes[i]);
}
}
}