Monotone-Parent: 193a5a57ea7d1546117692d503f3ce03fe33c2bc

Monotone-Revision: b3b9ea929f0cb02f9d9bb56d19e9b402d520e39e

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2010-08-06T15:45:25
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau 2010-08-06 15:45:25 +00:00
parent 5899c2d41b
commit 397e3ed3a2
2 changed files with 232 additions and 163 deletions

View file

@ -1,5 +1,27 @@
2010-08-06 Wolfgang Sourdeau <wsourdeau@inverse.ca> 2010-08-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/WebServerResources/MailerUI.js: (dropAction): ensure that the
destination mailbox is in the same mail account as the message
being dragged.
(getMenus): arranged menu descriptions as as single statement.
Added "prepareVisibility" callbacks for the "messageListMenu",
"messagesListMenu" and "messageContentMenu" (move/copy ops) and
"inboxIconMenu", "trashIconMenu", "mailboxIconMenu" menus (folder
sharing).
(onMessageListMenuPrepareVisibility): new vis. callback designed
to attach the right folder submenu to the copy and move ops.
(onFolderMenuPrepareVisibility): new vis. cb for disabling the
share of folders for auxiliary accounts.
(updateMailboxMenus): simplified method by removing the first
level of submenus, where the account names used to be.
(openInbox): "openMailbox" only takes 3 parameters. Using "null"
instead of "false" was also pretty lame.
(updateStatusFolders): take the mailbox name as parameter and
arranged for multiple mail accounts. In particular, "unseenCount"
is now a class identifier rather than an element id.
(markMailInWindow): make use of
MailerUIdTreeExtension.getMailboxNode.
* UI/WebServerResources/ContactsUI.js * UI/WebServerResources/ContactsUI.js
(onToolbarDeleteSelectedContacts): use translated labels. (onToolbarDeleteSelectedContacts): use translated labels.

View file

@ -28,7 +28,7 @@ var Mailer = {
var usersRightsWindowHeight = 320; var usersRightsWindowHeight = 320;
var usersRightsWindowWidth = 400; var usersRightsWindowWidth = 400;
var pageContent; var pageContent = $("pageContent");
var deleteMessageRequestCount = 0; var deleteMessageRequestCount = 0;
@ -164,11 +164,12 @@ function markMailInWindow(win, msguid, markread) {
} }
if (unseenCount != 0) { if (unseenCount != 0) {
// Update unseen count only if it's the inbox if (Mailer.currentMailboxType == "inbox") {
for (var i = 0; i < mailboxTree.aNodes.length; i++) var node = mailboxTree.getMailboxNode(Mailer.currentMailbox);
if (mailboxTree.aNodes[i].datatype == "inbox") break; if (node) {
if (i != mailboxTree.aNodes.length && Mailer.currentMailbox == mailboxTree.aNodes[i].dataname) updateStatusFolders(node, unseenCount, true);
updateStatusFolders(unseenCount, true); }
}
} }
} }
@ -361,11 +362,12 @@ function deleteSelectedMessages(sender) {
messageList.deselectAll(); messageList.deselectAll();
updateMessageListCounter(0 - rows.length, true); updateMessageListCounter(0 - rows.length, true);
if (unseenCount < 0) { if (unseenCount < 0) {
// Update unseen count only if it's the inbox if (Mailer.currentMailboxType == "inbox") {
for (var i = 0; i < mailboxTree.aNodes.length; i++) var node = mailboxTree.getMailboxNode(Mailer.currentMailbox);
if (mailboxTree.aNodes[i].datatype == "inbox") break; if (node) {
if (i != mailboxTree.aNodes.length && Mailer.currentMailbox == mailboxTree.aNodes[i].dataname) updateStatusFolders(node, unseenCount, true);
updateStatusFolders(unseenCount, true); }
}
} }
var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/batchDelete"; var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/batchDelete";
var parameters = "uid=" + uids.join(","); var parameters = "uid=" + uids.join(",");
@ -749,7 +751,9 @@ function getStatusFolders() {
document.statusFoldersAjaxRequest.aborted = true; document.statusFoldersAjaxRequest.aborted = true;
document.statusFoldersAjaxRequest.abort(); document.statusFoldersAjaxRequest.abort();
} }
document.statusFoldersAjaxRequest = triggerAjaxRequest(url, statusFoldersCallback); document.statusFoldersAjaxRequest = triggerAjaxRequest(url,
statusFoldersCallback,
Mailer.currentMailbox);
} }
function statusFoldersCallback(http) { function statusFoldersCallback(http) {
@ -759,30 +763,48 @@ function statusFoldersCallback(http) {
if (http.status == 200) { if (http.status == 200) {
document.statusFoldersAjaxRequest = null; document.statusFoldersAjaxRequest = null;
var data = http.responseText.evalJSON(true); var data = http.responseText.evalJSON(true);
updateStatusFolders(data.unseen, false); var node = mailboxTree.getMailboxNode(http.callbackData);
if (node) {
updateStatusFolders(node, data.unseen, false);
}
} }
} }
function updateStatusFolders(count, isDelta) { function updateStatusFolders(node, count, isDelta) {
var span = $("unseenCount"); var unseenSpan = null;
var counter = null; var counterSpan = null;
if (span) var spans = node.select("SPAN.unseenCount");
counter = span.select("SPAN").first(); if (spans.length > 0) {
counterSpan = spans[0];
unseenSpan = counterSpan.parentNode;
}
if (counter && span) { if (counterSpan) {
if (typeof count == "undefined") if (typeof(count) == "undefined" || isDelta) {
count = parseInt(counter.innerHTML); if (typeof(count) == "undefined") {
else if (isDelta) count = 0;
count += parseInt(counter.innerHTML); }
counter.update(count); var content = "";
for (var i = 0; i < counterSpan.childNodes.length; i++) {
var cNode = counterSpan.childNodes[i];
if (cNode.nodeType == 3) {
content += cNode.nodeValue;
}
}
count += parseInt(content.replace(/[()]/, "", "g"));
}
while (counterSpan.firstChild) {
counterSpan.removeChild(counterSpan.firstChild);
}
counterSpan.appendChild(document.createTextNode(" (" + count + ")"));
if (count > 0) { if (count > 0) {
span.setStyle({ display: "inline" }); counterSpan.setStyle({ display: "inline" });
span.up("SPAN").addClassName("unseen"); unseenSpan.addClassName("unseen");
} }
else { else {
span.setStyle({ display: "none" }); counterSpan.setStyle({ display: "none" });
span.up("SPAN").removeClassName("unseen"); unseenSpan.removeClassName("unseen");
} }
} }
} }
@ -1406,14 +1428,9 @@ function processMailboxMenuAction(mailbox) {
&& !currentNode.hasAttribute('mailboxaction')) && !currentNode.hasAttribute('mailboxaction'))
currentNode = currentNode.parentNode.parentNode.parentMenuItem; currentNode = currentNode.parentNode.parentNode.parentMenuItem;
if (currentNode) if (currentNode) {
{ action = currentNode.getAttribute('mailboxaction');
action = currentNode.getAttribute('mailboxaction'); }
// var rows = collectSelectedRows();
// var rString = rows.join(', ');
// alert("performing '" + action + "' on " + rString
// + " to " + mailboxName);
}
} }
var rowSelectionCount = 0; var rowSelectionCount = 0;
@ -1655,7 +1672,7 @@ function refreshContacts() {
function openInbox(node) { function openInbox(node) {
var done = false; var done = false;
openMailbox(node.parentNode.getAttribute("dataname"), null, null, false); openMailbox(node.parentNode.getAttribute("dataname"), false, false);
var tree = $("mailboxTree"); var tree = $("mailboxTree");
tree.selectedEntry = node; tree.selectedEntry = node;
node.selectElement(); node.selectElement();
@ -1886,8 +1903,7 @@ function generateMenuForMailbox(mailbox, prefix, callback) {
var newNode; var newNode;
for (var i = 0; i < mailbox.children.length; i++) { for (var i = 0; i < mailbox.children.length; i++) {
if (menu.offsetHeight > windowHeight-offset) { if (menu.offsetHeight > windowHeight-offset) {
var menuWidth = parseInt(menu.offsetWidth) + 15 var menuWidth = (parseInt(menu.offsetWidth) + 15) + "px";
menuWidth = menuWidth + "px";
menu.style.width = menuWidth; menu.style.width = menuWidth;
menu = document.createElement("ul"); menu = document.createElement("ul");
menu.style.cssFloat="left"; menu.style.cssFloat="left";
@ -1920,32 +1936,12 @@ function updateMailboxMenus() {
var mailboxActions = { move: onMailboxMenuMove, var mailboxActions = { move: onMailboxMenuMove,
copy: onMailboxMenuCopy }; copy: onMailboxMenuCopy };
for (key in mailboxActions) { for (var key in mailboxActions) {
var menuId = key + "MailboxMenu";
var menuDIV = $(menuId);
if (menuDIV)
menuDIV.parentNode.removeChild(menuDIV);
menuDIV = document.createElement("div");
pageContent = $("pageContent");
pageContent.appendChild(menuDIV);
var menu = document.createElement("ul");
menuDIV.appendChild(menu);
$(menuDIV).addClassName("menu");
menuDIV.setAttribute("id", menuId);
var submenuIds = new Array();
for (var i = 0; i < mailAccounts.length; i++) { for (var i = 0; i < mailAccounts.length; i++) {
var menuEntry = mailboxMenuNode("account", mailAccounts[i]);
menu.appendChild(menuEntry);
var mailbox = accounts[i]; var mailbox = accounts[i];
var newSubmenuId = generateMenuForMailbox(mailbox, generateMenuForMailbox(mailbox, key + "-" + i,
key, mailboxActions[key]); mailboxActions[key]);
submenuIds.push(newSubmenuId);
} }
initMenu(menuDIV, submenuIds);
} }
} }
@ -1962,31 +1958,15 @@ function onLoadMailboxesCallback(http) {
if (!mailboxTree.pendingRequests) { if (!mailboxTree.pendingRequests) {
updateMailboxTreeInPage(); updateMailboxTreeInPage();
updateMailboxMenus(); updateMailboxMenus();
getStatusFolders();
checkAjaxRequestsState(); checkAjaxRequestsState();
getFoldersState(); getFoldersState();
updateStatusFolders();
configureDroppables(); configureDroppables();
} }
} }
else else
log ("onLoadMailboxesCallback " + http.status); log ("onLoadMailboxesCallback " + http.status);
} }
// var tree = $("mailboxTree");
// var treeNodes = document.getElementsByClassName("dTreeNode", tree);
// var i = 0;
// while (i < treeNodes.length
// && treeNodes[i].getAttribute("dataname") != Mailer.currentMailbox)
// i++;
// if (i < treeNodes.length) {
// // log("found mailbox");
// var links = document.getElementsByClassName("node", treeNodes[i]);
// if (tree.selectedEntry)
// tree.selectedEntry.deselect();
// links[0].selectElement();
// tree.selectedEntry = links[0];
// expandUpperTree(links[0]);
// }
} }
function buildMailboxes(accountIdx, encoded) { function buildMailboxes(accountIdx, encoded) {
@ -2293,6 +2273,49 @@ function messageFlagCallback(http) {
} }
} }
function onMessageListMenuPrepareVisibility() {
/* This method attaches the right mailbox-menu to the generic message list
menu. */
var indexes = { "messageListMenu": 7,
"messagesListMenu": 2,
"messageContentMenu": 4 };
if (document.menuTarget) {
var mbx = document.menuTarget.getAttribute("dataname");
if (mbx) {
var lis = this.getElementsByTagName("li");
var idx = indexes[this.id];
var parts = mbx.split("/");
var acctNbr = parseInt(parts[1]);
lis[idx].submenu = "move-" + acctNbr + "Submenu";
lis[idx+1].submenu = "copy-" + acctNbr + "Submenu";
}
}
return true;
}
function onFolderMenuPrepareVisibility() {
/* This methods disables or enables the "Sharing" menu option on
mailboxes. */
if (document.menuTarget) {
var mbx = document.menuTarget.getAttribute("dataname");
if (mbx) {
var lis = this.getElementsByTagName("li");
var li = lis[lis.length - 1];
var parts = mbx.split("/");
var acctNbr = parseInt(parts[1]);
if (acctNbr > 0) {
li.addClassName("disabled");
}
else {
li.removeClassName("disabled");
}
}
}
return true;
}
function onLabelMenuPrepareVisibility() { function onLabelMenuPrepareVisibility() {
var messageList = $("messageListBody"); var messageList = $("messageListBody");
var flags = {}; var flags = {};
@ -2353,70 +2376,89 @@ function onMenuArchiveFolder(event) {
} }
function getMenus() { function getMenus() {
var menus = {} var menus = {
menus["accountIconMenu"] = new Array(null, null, onMenuCreateFolder, null, accountIconMenu: [ null, null, onMenuCreateFolder, null, null, null ],
null, null); inboxIconMenu: [ null, null, null, "-", null,
menus["inboxIconMenu"] = new Array(null, null, null, "-", null, onMenuCreateFolder, onMenuExpungeFolder,
onMenuCreateFolder, onMenuExpungeFolder, onMenuArchiveFolder, "-", null,
onMenuArchiveFolder, "-", null, onMenuSharing ],
onMenuSharing); trashIconMenu: [ null, null, null, "-", null,
menus["trashIconMenu"] = new Array(null, null, null, "-", null, onMenuCreateFolder, onMenuExpungeFolder,
onMenuCreateFolder, onMenuExpungeFolder, onMenuArchiveFolder, onMenuEmptyTrash,
onMenuArchiveFolder, onMenuEmptyTrash, "-", null,
"-", null, onMenuSharing ],
onMenuSharing); mailboxIconMenu: [ null, null, null, "-", null,
menus["mailboxIconMenu"] = new Array(null, null, null, "-", null, onMenuCreateFolder,
onMenuCreateFolder, onMenuRenameFolder,
onMenuRenameFolder, onMenuExpungeFolder,
onMenuExpungeFolder, onMenuArchiveFolder,
onMenuArchiveFolder, onMenuDeleteFolder,
onMenuDeleteFolder, "folderTypeMenu",
"folderTypeMenu", "-", null,
"-", null, onMenuSharing ],
onMenuSharing); addressMenu: [ newContactFromEmail, newEmailTo, null ],
menus["addressMenu"] = new Array(newContactFromEmail, newEmailTo, null); messageListMenu: [ onMenuOpenMessage, "-",
menus["messageListMenu"] = new Array(onMenuOpenMessage, "-", onMenuReplyToSender,
onMenuReplyToSender, onMenuReplyToAll,
onMenuReplyToAll, onMenuForwardMessage, null,
onMenuForwardMessage, null, "-", "moveMailboxMenu",
"-", "moveMailboxMenu", "copyMailboxMenu", "label-menu",
"copyMailboxMenu", "label-menu", "mark-menu", "-", saveAs,
"mark-menu", "-", saveAs, onMenuViewMessageSource, null,
onMenuViewMessageSource, null, null, onMenuDeleteMessage ],
null, onMenuDeleteMessage); messagesListMenu: [ onMenuForwardMessage,
menus["messagesListMenu"] = new Array(onMenuForwardMessage, "-", "moveMailboxMenu",
"-", "moveMailboxMenu", "copyMailboxMenu", "label-menu",
"copyMailboxMenu", "label-menu", "mark-menu", "-",
"mark-menu", "-", saveAs, null,
saveAs, null, onMenuDeleteMessage ],
onMenuDeleteMessage); imageMenu: [ saveImage ],
menus["imageMenu"] = new Array(saveImage); attachmentMenu: [ saveAttachment ],
menus["attachmentMenu"] = new Array (saveAttachment); messageContentMenu: [ onMenuReplyToSender,
menus["messageContentMenu"] = new Array(onMenuReplyToSender, onMenuReplyToAll,
onMenuReplyToAll, onMenuForwardMessage,
onMenuForwardMessage, null, "moveMailboxMenu",
null, "moveMailboxMenu", "copyMailboxMenu",
"copyMailboxMenu", "-", "label-menu", "mark-menu",
"-", "label-menu", "mark-menu", "-",
"-", saveAs, onMenuViewMessageSource,
saveAs, onMenuViewMessageSource, null, onPrintCurrentMessage,
null, onPrintCurrentMessage, onMenuDeleteMessage ],
onMenuDeleteMessage); folderTypeMenu: [ onMenuChangeToSentFolder,
menus["folderTypeMenu"] = new Array(onMenuChangeToSentFolder, onMenuChangeToDraftsFolder,
onMenuChangeToDraftsFolder, onMenuChangeToTrashFolder ],
onMenuChangeToTrashFolder);
"label-menu": [ onMenuLabelNone, "-", onMenuLabelFlag1,
onMenuLabelFlag2, onMenuLabelFlag3,
onMenuLabelFlag4, onMenuLabelFlag5 ],
"mark-menu": [ null, null, null, null, "-", null, "-",
null, null, null ],
searchMenu: [ setSearchCriteria, setSearchCriteria,
setSearchCriteria, setSearchCriteria,
setSearchCriteria ]
};
menus["label-menu"] = new Array(onMenuLabelNone, "-", onMenuLabelFlag1,
onMenuLabelFlag2, onMenuLabelFlag3,
onMenuLabelFlag4, onMenuLabelFlag5);
menus["mark-menu"] = new Array(null, null, null, null, "-", null, "-",
null, null, null);
menus["searchMenu"] = new Array(setSearchCriteria, setSearchCriteria,
setSearchCriteria, setSearchCriteria,
setSearchCriteria);
var labelMenu = $("label-menu"); var labelMenu = $("label-menu");
if (labelMenu) if (labelMenu) {
labelMenu.prepareVisibility = onLabelMenuPrepareVisibility; labelMenu.prepareVisibility = onLabelMenuPrepareVisibility;
}
var listMenus = [ "messageListMenu", "messagesListMenu", "messageContentMenu" ];
for (var i = 0; i < listMenus.length; i++) {
var menu = $(listMenus[i]);
if (menu) {
menu.prepareVisibility = onMessageListMenuPrepareVisibility;
}
}
var folderMenus = [ "inboxIconMenu", "trashIconMenu", "mailboxIconMenu" ];
for (var i = 0; i < folderMenus.length; i++) {
var menu = $(folderMenus[i]);
if (menu) {
menu.prepareVisibility = onFolderMenuPrepareVisibility;
}
}
return menus; return menus;
} }
@ -2502,12 +2544,12 @@ function configureDroppables () {
var drops = $$("div#dmailboxTree1 div.dTreeNode a.node span.nodeName"); var drops = $$("div#dmailboxTree1 div.dTreeNode a.node span.nodeName");
Droppables.empty (); Droppables.empty ();
drops.each (function (drop) { drops.each(function (drop) {
drop.identify () drop.identify();
Droppables.add (drop.id, Droppables.add(drop.id,
{ hoverclass: "genericHoverClass", { hoverclass: "genericHoverClass",
onDrop: dropAction }); onDrop: dropAction });
}); });
} }
function startDragging (itm, e) { function startDragging (itm, e) {
@ -2519,8 +2561,9 @@ function startDragging (itm, e) {
var count = $("messageListBody").getSelectedRowsId().length; var count = $("messageListBody").getSelectedRowsId().length;
handle.update (count); handle.update (count);
if (e.shiftKey) if (e.shiftKey) {
handle.addClassName ("copy"); handle.addClassName("copy");
}
handle.show(); handle.show();
} }
@ -2528,31 +2571,35 @@ function whileDragging (itm, e) {
if (e) { if (e) {
var handle = $("dragDropVisual"); var handle = $("dragDropVisual");
if (e.shiftKey) if (e.shiftKey)
handle.addClassName ("copy"); handle.addClassName("copy");
else if (handle.hasClassName ("copy")) else if (handle.hasClassName("copy"))
handle.removeClassName ("copy"); handle.removeClassName("copy");
} }
} }
function stopDragging () { function stopDragging () {
var handle = $("dragDropVisual"); var handle = $("dragDropVisual");
handle.hide(); handle.hide();
if (handle.hasClassName ("copy")) if (handle.hasClassName("copy"))
handle.removeClassName ("copy"); handle.removeClassName("copy");
} }
function dropAction (dropped, zone, e) { function dropAction (dropped, zone, e) {
var destination = zone.up("div.dTreeNode"); var destination = zone.up("div.dTreeNode");
var f;
if ($("dragDropVisual").hasClassName("copy")) { var sourceAct = Mailer.currentMailbox.split("/")[1];
// Message(s) copied var destAct = destination.getAttribute("dataname").split("/")[1];
f = onMailboxMenuCopy.bind(destination); if (sourceAct == destAct) {
} var f;
else { if ($("dragDropVisual").hasClassName("copy")) {
// Message(s) moved // Message(s) copied
f = onMailboxMenuMove.bind(destination); f = onMailboxMenuCopy.bind(destination);
} }
else {
// Message(s) moved
f = onMailboxMenuMove.bind(destination);
}
f(); f();
}
} }