]> code.citadel.org Git - citadel.git/blobdiff - webcit/static/summaryview.js
* add conditional to check room-types
[citadel.git] / webcit / static / summaryview.js
index 038c234ee9b08e428dd6e034e04a6c87eceac84a..1077932787e28d30899c0450cfa10ed9ec6260b7 100644 (file)
@@ -1,7 +1,10 @@
-/** Webcit Summary View v2
-    All comments, flowers and death threats to Mathew McBride
-    <matt@mcbridematt.dhs.org> / <matt@comalies>
-*/
+/**
+ * Webcit Summary View v2
+ *   All comments, flowers and death threats to Mathew McBride
+ *   <matt@mcbridematt.dhs.org> / <matt@comalies>
+ * Copyright 2009 The Citadel Team
+ * Licensed under the GPL V3
+ */
 document.observe("dom:loaded", createMessageView);
 
 var message_view = null;
@@ -21,6 +24,7 @@ var markedRowId = null;
 var mouseDownEvent = null;
 var exitedMouseDown = false;
 
+var currentPage = 0;
 var sortModes = {
   "rdate" : sortRowsByDateDescending,
   "date" : sortRowsByDateAscending,
@@ -76,7 +80,7 @@ roomName = getTextContent(document.getElementById("rmname"));
      var SortBy = currentSortMode[0];
      if (SortBy.charAt(0) == 'r') {
        SortBy = SortBy.substr(1);
-       parameters["SortOrder"] = "2";
+       parameters["SortOrder"] = "0";
      }
      parameters["SortBy"] = SortBy;
    }
@@ -103,6 +107,7 @@ function loadMessages(transport) {
   var msgs = data['msgs'];
   var length = msgs.length;
   rowArray = new Array(); // store so they can be sorted
+  WCLog("Row array length: "+rowArray.length);
   var start = new Date();
   for(var i=0; i<length;i++) {
     var trElement = document.createElement("tr");
@@ -136,7 +141,7 @@ function loadMessages(transport) {
       }
     }
     if (data[5]) {
-      trElement.setAttribute("class", "new_message");
+      trElement.ctdlNewMsg = true;
     }
     trElement.dropEnabled = true;
     trElement.ctdlMarked = false;
@@ -156,7 +161,7 @@ function loadMessages(transport) {
   currentSorterToggle = toggles[sortmode];
   }
   if (!is_safe_mode) {
-  resortAndDisplay(sortRowsByDateDescending);
+  resortAndDisplay(currentSortMode[1]);
   } else {
     setupPageSelector();
     resortAndDisplay(null);
@@ -167,8 +172,17 @@ function loadMessages(transport) {
   sizePreviewPane();
 }
 function resortAndDisplay(sortMode) {
+  WCLog("Begin resortAndDisplay");
   var start = new Date();
-  emptyElement(message_view);
+  /* We used to try and clear out the message_view element,
+     but stupid IE doesn't even do that properly */
+  var message_view_parent = message_view.parentNode;
+  message_view_parent.removeChild(message_view);
+  message_view = document.createElement("tbody");
+  message_view.setAttribute("id","message_list_body");
+  message_view.className="mailbox_summary";
+  message_view_parent.appendChild(message_view);
+  
   var fragment = document.createDocumentFragment();
   if (sortMode != null) {
     rowArray.sort(sortMode);
@@ -177,12 +191,16 @@ function resortAndDisplay(sortMode) {
   for(var x=0; x<length; ++x) {
     try {
       var currentRow = rowArray[x];
-      var className = currentRow.className;
+      currentRow.setAttribute("class","");
+      var className = "";
     if (((x-1) % 2) == 0) {
       className = "table-alt-row";
     } else {
       className = "table-row";
     }
+    if (currentRow.ctdlNewMsg) {
+      className += " new_message";
+    }
     currentRow.className = className;
     /* Using element.onclick is evil, but until IE 
        supports addEventListener, it is much faster
@@ -216,25 +234,25 @@ function sortRowsByDateDescending(a, b) {
 function sortRowsBySubjectAscending(a, b) {
   var subjectOne = getTextContent(a.getElementsByTagName("td")[0]).toLowerCase();
   var subjectTwo = getTextContent(b.getElementsByTagName("td")[0]).toLowerCase();
-  return (subjectOne.charCodeAt(0) - subjectTwo.charCodeAt(0));
+  return strcmp(subjectOne, subjectTwo);
 }
 
 function sortRowsBySubjectDescending(a, b) {
   var subjectOne = getTextContent(a.getElementsByTagName("td")[0]).toLowerCase();
   var subjectTwo = getTextContent(b.getElementsByTagName("td")[0]).toLowerCase();
-  return (subjectTwo.charCodeAt(0) - subjectOne.charCodeAt(0));
+  return strcmp(subjectTwo, subjectOne);
 }
 
 function sortRowsByFromAscending(a, b) {
   var fromOne = getTextContent(a.getElementsByTagName("td")[1]).toLowerCase();
   var fromTwo = getTextContent(b.getElementsByTagName("td")[1]).toLowerCase();
-  return (fromOne.charCodeAt(0) - fromTwo.charCodeAt(0));
+  return strcmp(fromOne, fromTwo);
 }
 
 function sortRowsByFromDescending(a, b) {
   var fromOne = getTextContent(a.getElementsByTagName("td")[1]).toLowerCase();
   var fromTwo = getTextContent(b.getElementsByTagName("td")[1]).toLowerCase();
-  return (fromTwo.charCodeAt(0) - fromOne.charCodeAt(0));
+  return strcmp(fromTwo, fromOne);
 }
 
 function CtdlMessageListClick(evt) {
@@ -314,10 +332,10 @@ function getSortMode(toggleElem) {
 function removeOldSortClass() {
   if (currentSorterToggle) {
     var classes = currentSorterToggle.className;
-    classes = classes.replace("current_sort_mode","");
+    /* classes = classes.replace("current_sort_mode","");
     classes = classes.replace("sort_ascending","");
-    classes = classes.replace("sort_descending","");
-    currentSorterToggle.className = classes;
+    classes = classes.replace("sort_descending",""); */
+    currentSorterToggle.className = "";
   }
 }
 function markRow( row) {
@@ -358,9 +376,8 @@ function deleteAllMarkedRows() {
   rowArray = newRowArray;
   resortAndDisplay(null);
 }
-function CtdlMessageListKeyUp(event) {
-  var key = event.which;
-  if (key == 46) { // DELETE
+
+function deleteAllSelectedMessages() {
     for(msgId in currentlyMarkedRows) {
       if (!room_is_trash) {
       new Ajax.Request('ajax_servcmd', 
@@ -374,7 +391,13 @@ function CtdlMessageListKeyUp(event) {
     }
     document.getElementById("preview_pane").innerHTML = "";
     deleteAllMarkedRows();
-  }
+}
+
+function CtdlMessageListKeyUp(event) {
+       var key = event.which;
+       if (key == 46) { // DELETE
+               deleteAllSelectedMessages();
+       }
 }
 
 function clearMessage(msgId) {
@@ -484,10 +507,11 @@ function normalizeHeaderTable() {
 
 function setupPageSelector() {
   var summpage = document.getElementById("summpage");
-  //var select_page = document.getElementById("selectpage");
+  var select_page = document.getElementById("selectpage");
   summpage.innerHTML = "";
   if (is_safe_mode) {
-    summpage.parentNode.setAttribute("style","display: inline !important"); //override webcit.css
+    WCLog("unhiding parent page");
+    select_page.className = "";
   } else {
     return;
   }
@@ -496,6 +520,9 @@ function setupPageSelector() {
     var opt = document.createElement("option");
     var startmsg = i * 500;
     opt.setAttribute("value",startmsg);
+    if (currentPage == i) {
+      opt.setAttribute("selected","selected");
+    }
     opt.appendChild(document.createTextNode((i+1)));
     summpage.appendChild(opt);
   }
@@ -503,6 +530,7 @@ function setupPageSelector() {
 function getPage(event) {
   var target = event.target;
   startmsg = target.options.item(target.selectedIndex).value;
+  currentPage = target.selectedIndex;
   //query = ""; // We are getting a page from the _entire_ msg list, don't query
   getMessages();
 }