X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=webcit%2Fstatic%2Fsummaryview.js;h=109b3fd46d69e2c131df08778cce21d5d5d99fa6;hp=6fd338c770eb17aa75f80ed840d161a2e839b2f2;hb=8a31ae37cda10b701d6db0f3a6935eec0eb2d5ab;hpb=e332478f3508f58169c269dcece262bb1be99d16 diff --git a/webcit/static/summaryview.js b/webcit/static/summaryview.js index 6fd338c77..109b3fd46 100644 --- a/webcit/static/summaryview.js +++ b/webcit/static/summaryview.js @@ -62,6 +62,14 @@ var toggles = {}; 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"); @@ -148,10 +156,11 @@ function loadMessages(transport) { 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); } @@ -172,9 +181,10 @@ function loadMessages(transport) { 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 */ @@ -186,10 +196,10 @@ function resortAndDisplay(sortMode) { 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); @@ -216,20 +226,20 @@ function resortAndDisplay(sortMode) { 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] = ""; 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(); } @@ -264,68 +274,97 @@ function sortRowsByFromDescending(a, b) { 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 (!event.shiftKey && !event.ctrlKey && !event.altKey) { - 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); - new Ajax.Request('ajax_servcmd', { - method: 'post', - parameters: 'g_cmd=SEEN ' + msgId + '|1', - onComplete: CtdlMarkRowAsRead(parent)}); - // If the shift key modifier is used, mark a range... - } else if (event.button != 2 && event.shiftKey) { - 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= 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= 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); @@ -405,27 +450,55 @@ function deleteAllMarkedRows() { } msgs = newMsgs; resortAndDisplay(null); + refreshMessageCounter(); } - function deleteAllSelectedMessages() { - for(msgId in currentlyMarkedRows) { - if (!room_is_trash) { - new Ajax.Request('ajax_servcmd', - {method: 'post', - parameters: 'g_cmd=MOVE ' + msgId + '|_TRASH_|0' - }); - } else { - new Ajax.Request('ajax_servcmd', {method: 'post', - parameters: 'g_cmd=DELE '+msgId}); + var mvCommand = ""; + var msgIds = ""; + for(msgId in currentlyMarkedRows) { + msgIds += ","+msgId; + + if (msgIds.length > 800) { + if (!room_is_trash) { + mvCommand = encodeURI("g_cmd=MOVE " + msgIds + "|_TRASH_|0"); + } + else { + mvCommand = encodeURI("g_cmd=DELE " + msgIds); + } + new Ajax.Request("ajax_servcmd", { + parameters: mvCommand, + method: 'post', + onSuccess: function(transport) { + wCLog(transport.responseText); } + }); + msgIds = ""; } - document.getElementById("preview_pane").innerHTML = ""; - deleteAllMarkedRows(); + } + + if (!room_is_trash) { + mvCommand = encodeURI("g_cmd=MOVE " + msgIds + "|_TRASH_|0"); + } + else { + mvCommand = encodeURI("g_cmd=DELE " + msgIds); + } + new Ajax.Request("ajax_servcmd", { + parameters: mvCommand, + method: 'post', + onSuccess: function(transport) { + wCLog(transport.responseText); + } + }); + + document.getElementById("preview_pane").innerHTML = ""; + deleteAllMarkedRows(); } + function CtdlMessageListKeyUp(event) { - var key = event.which; - if (key == 46) { // DELETE + var key = event.which || event.keyCode; + + if (key == 46) { /* DELETE */ deleteAllSelectedMessages(); } } @@ -476,7 +549,7 @@ function sizePreviewPane() { var heightOfViewPort = document.viewport.getHeight() // prototypejs method var bannerHeight = banner.offsetHeight; var contentViewPortHeight = heightOfViewPort-banner.offsetHeight-message_list_hdr.offsetHeight; - contentViewPortHeight = 0.98 * contentViewPortHeight; // leave some error + contentViewPortHeight = 0.95 * contentViewPortHeight; // leave some error (especially for FF3!!) // Set summary_view to 20%; var summary_height = ctdlLocalPrefs.readPref("svheight"); if (summary_height == null) { @@ -541,7 +614,7 @@ function setupPageSelector() { 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;