var mouseDownEvent = null;
var exitedMouseDown = false;
-var is_shift_pressed = false;
-var is_ctrl_pressed = false;
-
var originalMarkedRow = null;
var previousFinish = 0;
var markedFrom = 0;
var nummsgs = 0;
var startmsg = 0;
+var newmsgs = 0;
+
+function refreshMessageCounter() {
+ var templStr = document.getElementById("nummsgs_template").innerHTML;
+ templStr = templStr.replace(/UNREADMSGS/, newmsgs);
+ templStr = templStr.replace(/TOTALMSGS/, nummsgs);
+ document.getElementById("nummsgs").innerHTML = templStr;
+}
function createMessageView() {
message_view = document.getElementById("message_list_body");
mlh_date.observe('click',ApplySort);
mlh_subject.observe('click',ApplySort);
mlh_from.observe('click',ApplySort);
- $(document).observe('keydown',CtdlMessageListKeyDown,false);
$(document).observe('keyup',CtdlMessageListKeyUp,false);
$('resize_msglist').observe('mousedown', CtdlResizeMouseDown);
$('m_refresh').observe('click', getMessages);
alert("Message loading failed");
}
nummsgs = data['nummsgs'];
+ newmsgs = data['newmsgs'];
msgs = data['msgs'];
var length = msgs.length;
rowArray = new Array(length); // store so they can be sorted
- WCLog("Row array length: "+rowArray.length);
+ wCLog("Row array length: "+rowArray.length);
} catch (e) {
//window.alert(e+"|"+e.description);
}
loadingMsg.parentNode.removeChild(loadingMsg);
}
sizePreviewPane();
+ refreshMessageCounter();
}
function resortAndDisplay(sortMode) {
- WCLog("Begin resortAndDisplay");
+ wCLog("Begin resortAndDisplay");
/* We used to try and clear out the message_view element,
but stupid IE doesn't even do that properly */
msgs.sort(sortMode);
}
} catch (e) {
- WCLog("Sort error: " + e);
+ wCLog("Sort error: " + e);
}
var endSort = new Date();
- WCLog("Sort rowArray in " + (endSort-startSort));
+ wCLog("Sort rowArray in " + (endSort-startSort));
var start = new Date();
var length = msgs.length;
var compiled = new Array(length+2);
var i = x+1;
compiled[i] = trTemplate.join("");
} catch (e) {
- WCLog("Exception on row " + x + ":" + e);
+ wCLog("Exception on row " + x + ":" + e);
}
}
compiled[length+2] = "</table>";
var end = new Date();
- WCLog("iterate: " + (end-start));
+ wCLog("iterate: " + (end-start));
var compile = compiled.join("");
start = new Date();
$(message_view_parent).update(compile);
- message_view_parent.onclick = CtdlMessageListClick;
+ message_view_parent.observe('click', CtdlMessageListClick);
message_view = message_view_parent.firstChild;
end = new Date();
var delta = end.getTime() - start.getTime();
- WCLog("append: " + delta);
+ wCLog("append: " + delta);
ApplySorterToggle();
normalizeHeaderTable();
}
return strcmp(fromTwo, fromOne);
};
function CtdlMessageListClick(evt) {
- /* Since element.onload is used here, test to see if evt is defined */
- var event = evt ? evt : window.event;
- var target = event.target ? event.target: event.srcElement; // and again..
- var parent = target.parentNode;
- var msgId = parent.getAttribute("citadel:msgid");
- // If the ctrl key modifier wasn't used, unmark all rows and load the message
- if (!is_shift_pressed && !is_ctrl_pressed) {
- previousFinish = 0;
- markedFrom = 0;
- unmarkAllRows();
- markedRowIndex = parent.rowIndex;
- originalMarkedRow = parent;
- document.getElementById("preview_pane").innerHTML = "";
- new Ajax.Updater('preview_pane', 'msg/'+msgId, {method: 'get'});
- markRow(parent);
- var p = encodeURI('g_cmd=SEEN ' + msgId + '|1');
- new Ajax.Request('ajax_servcmd', {
- method: 'post',
- parameters: p,
- onComplete: CtdlMarkRowAsRead(parent)
- });
- // If the shift key modifier is used, mark a range...
- } else if (event.button != 2 && is_shift_pressed) {
- if (originalMarkedRow == null) {
- originalMarkedRow = parent;
- markRow(parent);
- } else {
- unmarkAllRows();
- markRow(parent);
- markRow(originalMarkedRow);
- }
- var rowIndex = parent.rowIndex;
- if (markedFrom == 0) {
- markedFrom = rowIndex;
- }
- var startMarkingFrom = 0;
- var finish = 0;
- if (rowIndex > markedRowIndex) {
- startMarkingFrom = markedRowIndex+1;
- finish = rowIndex;
- } else if (rowIndex < markedRowIndex) {
- startMarkingFrom = rowIndex+1;
- finish = markedRowIndex;
- }
- previousFinish = finish;
- WCLog('startMarkingFrom=' + startMarkingFrom + ', finish=' + finish);
- for(var x = startMarkingFrom; x<finish; x++) {
- WCLog("Marking row " + x);
- markRow(parent.parentNode.rows[x]);
- }
- // If the ctrl key modifier is used, toggle one message
- } else if (event.button != 2 && is_ctrl_pressed) {
- if (parent.getAttribute("citadel:marked")) {
- unmarkRow(parent);
- }
- else {
- markRow(parent);
- }
+ /* Since element.onload is used here, test to see if evt is defined */
+ var event = evt ? evt : window.event;
+ var target = event.target ? event.target: event.srcElement; // and again..
+ var parent = target.parentNode;
+ var msgId = parent.getAttribute("citadel:msgid");
+ var is_shift_pressed = event.shiftKey;
+ var is_ctrl_pressed = event.ctrlKey;
+ var rowclass = parent.getAttribute("class");
+ var msgUnseen = rowclass.search("new_message") >= 0;
+
+ /* debugging
+ str = '.';
+ if (is_shift_pressed) {
+ str = str + 'S';
+ }
+ str = str + '.';
+ if (is_ctrl_pressed) {
+ str = str + 'C';
+ }
+ str = str + '.';
+ $('ib_summary').innerHTML = str;
+ */
+
+ // If the ctrl key modifier wasn't used, unmark all rows and load the message
+ if (!is_shift_pressed && !is_ctrl_pressed) {
+ previousFinish = 0;
+ markedFrom = 0;
+ unmarkAllRows();
+ markedRowIndex = parent.rowIndex;
+ originalMarkedRow = parent;
+ document.getElementById("preview_pane").innerHTML = "";
+ new Ajax.Updater('preview_pane', 'msg/'+msgId, {method: 'get'});
+ markRow(parent);
+
+ if (msgUnseen) {
+ var p = encodeURI('g_cmd=SEEN ' + msgId + '|1');
+ new Ajax.Request('ajax_servcmd', {
+ method: 'post',
+ parameters: p,
+ onComplete: CtdlMarkRowAsRead(parent)
+ });
}
+ // If the shift key modifier is used, mark a range...
+ } else if (event.button != 2 && is_shift_pressed) {
+ if (originalMarkedRow == null) {
+ originalMarkedRow = parent;
+ markRow(parent);
+ } else {
+ unmarkAllRows();
+ markRow(parent);
+ markRow(originalMarkedRow);
+ }
+ var rowIndex = parent.rowIndex;
+ if (markedFrom == 0) {
+ markedFrom = rowIndex;
+ }
+ var startMarkingFrom = 0;
+ var finish = 0;
+ if (markedRowIndex === null) {
+ startMarkingFrom = 0;
+ finish = rowIndex;
+ }
+ else if (rowIndex > markedRowIndex) {
+ startMarkingFrom = markedRowIndex+1;
+ finish = rowIndex;
+ } else if (rowIndex < markedRowIndex) {
+ startMarkingFrom = rowIndex+1;
+ finish = markedRowIndex;
+ }
+ previousFinish = finish;
+ wCLog('startMarkingFrom=' + startMarkingFrom + ', finish=' + finish);
+ for(var x = startMarkingFrom; x<finish; x++) {
+ wCLog("Marking row " + x);
+ markRow(parent.parentNode.rows[x]);
+ }
+ // If the ctrl key modifier is used, toggle one message
+ } else if (event.button != 2 && is_ctrl_pressed) {
+ if (parent.getAttribute("citadel:marked")) {
+ unmarkRow(parent);
+ }
+ else {
+ markRow(parent);
+ }
+ }
}
function CtdlMarkRowAsRead(rowElement) {
var classes = rowElement.className;
classes = classes.replace("new_message","");
rowElement.className = classes;
+ newmsgs--;
+ refreshMessageCounter();
}
function ApplySort(event) {
var target = event.target;
function deleteAllMarkedRows() {
for(msgId in currentlyMarkedRows) {
var row = currentlyMarkedRows[msgId];
+ var rowclass = row.getAttribute("class");
+ var msgUnseen = rowclass.search("new_message") >= 0;
+
var rowArrayId = row.getAttribute("citadel:ctdlrowid");
row.parentNode.removeChild(row);
delete currentlyMarkedRows[msgId];
delete msgs[rowArrayId];
+ if (msgUnseen)
+ newmsgs--;
+ nummsgs--;
}
// Now we have to reconstruct rowarray as the array length has changed */
var newMsgs = new Array(msgs.length-1);
}
msgs = newMsgs;
resortAndDisplay(null);
+ refreshMessageCounter();
}
function deleteAllSelectedMessages() {
var mvCommand = "";
parameters: mvCommand,
method: 'post',
onSuccess: function(transport) {
- WCLog(transport.responseText);
+ wCLog(transport.responseText);
}
});
msgIds = "";
parameters: mvCommand,
method: 'post',
onSuccess: function(transport) {
- WCLog(transport.responseText);
+ wCLog(transport.responseText);
}
});
deleteAllMarkedRows();
}
-function CtdlMessageListKeyDown(event) {
- var key = event.which || event.keyCode;
-
- if (key == 16) { /* SHIFT */
- is_shift_pressed = true;
- $('ib_summary').innerHTML = 'SHIFT';
- }
- else if ( (key == 17) || (key == 18) ) { /* CTRL or ALT */
- $('ib_summary').innerHTML = 'CTRL';
- is_ctrl_pressed = true;
- }
-}
function CtdlMessageListKeyUp(event) {
var key = event.which || event.keyCode;
- if (key == 16) { /* SHIFT */
- is_shift_pressed = false;
- $('ib_summary').innerHTML = ' ';
- }
- else if ( (key == 17) || (key == 18) ) { /* CTRL or ALT */
- is_ctrl_pressed = false;
- $('ib_summary').innerHTML = ' ';
- }
- else if (key == 46) { /* DELETE */
+ if (key == 46) { /* DELETE */
deleteAllSelectedMessages();
}
}
var select_page = document.getElementById("selectpage");
summpage.innerHTML = "";
if (is_safe_mode) {
- WCLog("unhiding parent page");
+ wCLog("unhiding parent page");
select_page.className = "";
} else {
return;