Monotone-Parent: cb1d74d035f8c46647e14a3dc3710870fa6cb470

Monotone-Revision: ed475bdcf9178f4b14adb2a2ccdb6dce3cd288fd

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2006-07-31T20:24:50
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2006-07-31 20:24:50 +00:00
parent 962b897c47
commit 7532e6a518
2 changed files with 106 additions and 37 deletions

View File

@ -1,5 +1,21 @@
2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/WebServerResources/MailerUI.js:
- message cache: set the max num of cached messages to 20. Limit
the cached message size to 30000 bytes.
- ajax: when a message request is called while one is already
being performed, the latter will be cancelled. Idem when
retrieving the content of a mailbox.
- folder tree: when a mailbox is selected because of the URL
requested (initMailboxSelection), the dtree is expanded throughout
the mailbox entry's parent hierarchy to ensure it is made visible
when the page is being displayed. (new function: expandUpperTree).
- mailbox loading: when loading a mailbox where a message was
previously selected, we invoke its url with the "pageforuid"
parameter correctly specified. During callback processing, we scan
the table for the related row and reselect it.
Also, the message area is set blank before loading any mailbox.
* UI/MailerUI/UIxMailListView.m ([UIxMailListView
-defaultAction]): if the "pageforuid" parameter is passed in the
url, take its value and invoke [self firstMessageOfPageFor:]

View File

@ -34,7 +34,7 @@
*/
var currentMessages = new Array();
var maxCachedMessages = 10;
var maxCachedMessages = 20;
var cachedMessages = new Array();
var currentMailbox = '';
/* mail list */
@ -309,7 +309,8 @@ function reopenToRemoveLocationBar() {
/* mail list reply */
function openMessageWindowsForSelection(sender, action) {
function openMessageWindowsForSelection(sender, action)
{
var rows = collectSelectedRows();
var idset = "";
@ -320,7 +321,8 @@ function openMessageWindowsForSelection(sender, action) {
}
}
function mailListMarkMessage(sender, action, msguid, markread) {
function mailListMarkMessage(sender, action, msguid, markread)
{
var url;
var http = createHTTPClient();
@ -443,8 +445,10 @@ function triggerAjaxRequest(url, callback, userdata) {
try {
if (http.readyState == 4
&& activeAjaxRequests > 0) {
http.callbackData = userdata;
callback(http);
if (!http.aborted) {
http.callbackData = userdata;
callback(http);
}
activeAjaxRequests -= 1;
checkAjaxRequestsState();
}
@ -460,8 +464,7 @@ function triggerAjaxRequest(url, callback, userdata) {
http.send("");
}
// window.alert('should open ' + mailbox);
return false;
return http;
}
function checkAjaxRequestsState()
@ -507,14 +510,32 @@ function openMailbox(mailbox)
var mailboxContent = document.getElementById("mailboxContent");
var mailboxDragHandle = document.getElementById("mailboxDragHandle");
var messageContent = document.getElementById("messageContent");
messageContent.innerHTML = '';
if (mailbox.lastIndexOf("/") == 0) {
var url = (ApplicationBaseURL + currentMailbox + "/"
+ "/view?noframe=1");
if (document.messageAjaxRequest) {
document.messageAjaxRequest.aborted = true;
document.messageAjaxRequest.abort();
}
document.messageAjaxRequest
= triggerAjaxRequest(url, messageCallback);
mailboxContent.innerHTML = '';
mailboxContent.style.visibility = "hidden;";
mailboxDragHandle.style.visibility = "hidden;";
messageContent.style.top = "0px;";
var url = (ApplicationBaseURL + currentMailbox + "/"
+ "/view?noframe=1");
triggerAjaxRequest(url, messageCallback);
} else {
if (document.messageListAjaxRequest) {
document.messageListAjaxRequest.aborted = true;
document.messageListAjaxRequest.abort();
}
if (currentMessages[mailbox]) {
loadMessage(currentMessages[mailbox]);
url += '&pageforuid=' + currentMessages[mailbox];
}
document.messageListAjaxRequest
= triggerAjaxRequest(url, messageListCallback,
currentMessages[mailbox]);
if (mailboxContent.style.visibility == "hidden") {
mailboxContent.style.visibility = "visible;";
mailboxDragHandle.style.visibility = "visible;";
@ -522,12 +543,6 @@ function openMailbox(mailbox)
+ mailboxDragHandle.offsetHeight
+ 'px;');
}
triggerAjaxRequest(url, messageListCallback);
if (currentMessages[mailbox]) {
loadMessage(currentMessages[mailbox]);
} else {
messageContent.innerHTML = '';
}
}
}
// triggerAjaxRequest(mailbox, 'toolbar', toolbarCallback);
@ -536,20 +551,28 @@ function openMailbox(mailbox)
function openMailboxAtIndex(element) {
var idx = element.getAttribute("idx");
var url = ApplicationBaseURL + currentMailbox + "/view?noframe=1&idx=" + idx;
log ("url: " + url);
triggerAjaxRequest(url, messageListCallback);
if (document.messageListAjaxRequest) {
document.messageListAjaxRequest.aborted = true;
document.messageListAjaxRequest.abort();
}
document.messageListAjaxRequest
= triggerAjaxRequest(url, messageListCallback);
}
function messageListCallback(http)
{
log ('messageListCallback');
var div = document.getElementById('mailboxContent');
if (http.readyState == 4
&& http.status == 200)
{
log ('displaying result');
div.innerHTML = http.responseText;
&& http.status == 200) {
document.messageListAjaxRequest = null;
div.innerHTML = http.responseText;
var selected = http.callbackData;
if (selected) {
var row = document.getElementById('row_' + selected);
selectNode(row);
}
}
else
log ("ajax fuckage");
}
@ -657,35 +680,43 @@ function loadMessage(idx)
{
var cachedMessage = getCachedMessage(idx);
if (document.messageAjaxRequest) {
document.messageAjaxRequest.aborted = true;
document.messageAjaxRequest.abort();
}
if (cachedMessage == null) {
var url = (ApplicationBaseURL + currentMailbox + "/"
+ idx + "/view?noframe=1");
triggerAjaxRequest(url, messageCallback, idx);
document.messageAjaxRequest
= triggerAjaxRequest(url, messageCallback, idx);
markMailInWindow(window, idx, true);
} else {
var div = document.getElementById('messageContent');
div.innerHTML = cachedMessage['text'];
cachedMessage['time'] = (new Date()).getTime();
document.messageAjaxRequest = null;
}
}
function messageCallback(http)
{
var div = document.getElementById('messageContent');
if (http.readyState == 4
&& http.status == 200)
{
div.innerHTML = http.responseText;
if (http.callbackData)
{
var cachedMessage = new Array();
cachedMessage['idx'] = currentMailbox + '/' + http.callbackData;
cachedMessage['time'] = (new Date()).getTime();
cachedMessage['text'] = http.responseText;
storeCachedMessage(cachedMessage);
}
if (http.readyState == 4
&& http.status == 200) {
document.messageAjaxRequest = null;
div.innerHTML = http.responseText;
if (http.callbackData) {
var cachedMessage = new Array();
cachedMessage['idx'] = currentMailbox + '/' + http.callbackData;
cachedMessage['time'] = (new Date()).getTime();
cachedMessage['text'] = http.responseText;
if (cachedMessage['text'].length < 30000)
storeCachedMessage(cachedMessage);
}
}
else
log ("ajax fuckage");
}
@ -893,7 +924,8 @@ function onMenuOpenMessage(event)
var msgId = node.getAttribute('id').substr(4);
openMessageWindow(null, msgId,
ApplicationBaseURL + currentMailbox + "/" + msgId + "/view");
ApplicationBaseURL + currentMailbox
+ "/" + msgId + "/view");
return false;
}
@ -959,6 +991,26 @@ function newEmailTo(sender) {
return false; /* stop following the link */
}
function expandUpperTree(node)
{
var currentNode = node.parentNode;
while (currentNode.className != "dtree")
{
if (currentNode.className == 'clip')
{
var id = currentNode.getAttribute("id");
var number = parseInt(id.substr(2));
if (number > 0)
{
var cn = d.aNodes[number];
d.nodeStatus(1, number, cn._ls);
}
}
currentNode = currentNode.parentNode;
}
}
function initMailboxSelection(mailboxName)
{
currentMailbox = mailboxName;
@ -975,6 +1027,7 @@ function initMailboxSelection(mailboxName)
deselectNode(tree.selectedEntry);
selectNode(links[0]);
tree.selectedEntry = links[0];
expandUpperTree(links[0]);
}
}