From d39eecad6db1caee97624b80634587d98a75e701 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Mon, 10 Dec 2007 10:24:33 -0500
Subject: [PATCH] Remove some unused object properties

---
 program/js/list.js |   71 +++++++++++++++++++++++++----------
 1 files changed, 50 insertions(+), 21 deletions(-)

diff --git a/program/js/list.js b/program/js/list.js
index eac19bb..06c3554 100644
--- a/program/js/list.js
+++ b/program/js/list.js
@@ -37,10 +37,12 @@
   this.multiselect = false;
   this.draggable = false;
   this.keyboard = false;
+  this.toggleselect = false;
   
   this.dont_select = false;
   this.drag_active = false;
   this.last_selected = 0;
+  this.shift_start = 0;
   this.in_selection_before = false;
   this.focused = false;
   this.drag_mouse_start = null;
@@ -95,7 +97,7 @@
 init_row: function(row)
 {
   // make references in internal array and set event handlers
-  if (row && String(row.id).match(/rcmrow([0-9]+)/))
+  if (row && String(row.id).match(/rcmrow([a-z0-9\-_=]+)/i))
   {
     var p = this;
     var uid = RegExp.$1;
@@ -117,22 +119,27 @@
 /**
  *
  */
-clear: function()
+clear: function(sel)
 {
   var tbody = document.createElement('TBODY');
   this.list.insertBefore(tbody, this.list.tBodies[0]);
   this.list.removeChild(this.list.tBodies[1]);
-  this.rows = new Array();  
+  this.rows = new Array();
+  
+  if (sel) this.clear_selection();
 },
 
 
 /**
  * 'remove' message row from list (just hide it)
  */
-remove_row: function(uid)
+remove_row: function(uid, sel_next)
 {
   if (this.rows[uid].obj)
     this.rows[uid].obj.style.display = 'none';
+
+  if (sel_next)
+    this.select_next();
 
   this.rows[uid] = null;
 },
@@ -216,7 +223,7 @@
   if (this.draggable && this.selection.length)
   {
     this.drag_start = true;
-	this.drag_mouse_start = rcube_event.get_mouse_pos(e);
+    this.drag_mouse_start = rcube_event.get_mouse_pos(e);
     rcube_event.add_listener({element:document, event:'mousemove', object:this, method:'drag_mouse_move'});
     rcube_event.add_listener({element:document, event:'mouseup', object:this, method:'drag_mouse_up'});
   }
@@ -272,7 +279,7 @@
     return false;
 
   var last_selected_row = this.rows[this.last_selected];
-  var new_row = last_selected_row && last_selected_row.obj.nextSibling;
+  var new_row = last_selected_row ? last_selected_row.obj.nextSibling : null;
   while (new_row && (new_row.nodeType != 1 || new_row.style.display == 'none'))
     new_row = new_row.nextSibling;
 
@@ -285,7 +292,7 @@
     return false;
 
   var last_selected_row = this.rows[this.last_selected];
-  var new_row = last_selected_row && last_selected_row.obj.previousSibling;
+  var new_row = last_selected_row ? last_selected_row.obj.previousSibling : null;
   while (new_row && (new_row.nodeType != 1 || new_row.style.display == 'none'))
     new_row = new_row.previousSibling;
 
@@ -299,6 +306,9 @@
   var select_before = this.selection.join(',');
   if (!this.multiselect)
     mod_key = 0;
+    
+  if (!this.shift_start)
+    this.shift_start = id
 
   if (!mod_key)
   {
@@ -310,13 +320,12 @@
     switch (mod_key)
     {
       case SHIFT_KEY:
-        this.shift_select(id, false); 
+        this.shift_select(id, false);
         break;
 
       case CONTROL_KEY:
-        this.shift_start = id;
         if (!with_mouse)
-          this.highlight_row(id, true); 
+          this.highlight_row(id, true);
         break; 
 
       case CONTROL_SHIFT_KEY:
@@ -324,7 +333,7 @@
         break;
 
       default:
-        this.highlight_row(id, false); 
+        this.highlight_row(id, false);
         break;
     }
   }
@@ -336,8 +345,19 @@
   if (this.last_selected != 0 && this.rows[this.last_selected])
     this.set_classname(this.rows[this.last_selected].obj, 'focused', false);
 
+  // unselect if toggleselect is active and the same row was clicked again
+  if (this.toggleselect && this.last_selected == id)
+  {
+    this.clear_selection();
+    id = null;
+  }
+  else
+    this.set_classname(this.rows[id].obj, 'focused', true);
+
+  if (!this.selection.length)
+    this.shift_start = null;
+
   this.last_selected = id;
-  this.set_classname(this.rows[id].obj, 'focused', true);        
 },
 
 
@@ -414,7 +434,8 @@
   if (!this.rows || !this.rows.length)
     return false;
 
-  // reset selection first
+  // reset but remember selection first
+  var select_before = this.selection.join(',');
   this.clear_selection();
 
   for (var n in this.rows)
@@ -426,7 +447,11 @@
     }
   }
 
-  return true;  
+  // trigger event if selection changed
+  if (this.selection.join(',') != select_before)
+    this.trigger_event('select');
+
+  return true;
 },
 
 
@@ -435,14 +460,18 @@
  */
 clear_selection: function()
 {
-  for(var n=0; n<this.selection.length; n++)
+  var num_select = this.selection.length;
+  for (var n=0; n<this.selection.length; n++)
     if (this.rows[this.selection[n]])
     {
       this.set_classname(this.rows[this.selection[n]].obj, 'selected', false);
       this.set_classname(this.rows[this.selection[n]].obj, 'unfocused', false);
     }
 
-  this.selection = new Array();    
+  this.selection = new Array();
+  
+  if (num_select)
+    this.trigger_event('select');
 },
 
 
@@ -506,8 +535,6 @@
   if (this.focused != true) 
     return true;
 
-  this.shiftkey = e.shiftKey;
-
   var keyCode = document.layers ? e.which : document.all ? event.keyCode : document.getElementById ? e.keyCode : 0;
   var mod_key = rcube_event.get_modifier(e);
   switch (keyCode)
@@ -518,6 +545,7 @@
       break;
 
     default:
+      this.shiftkey = e.shiftKey;
       this.key_pressed = keyCode;
       this.trigger_event('keypress');
   }
@@ -582,7 +610,7 @@
   
     // get subjects of selectedd messages
     var names = '';
-    var c, subject, obj;
+    var c, node, subject, obj;
     for(var n=0; n<this.selection.length; n++)
     {
       if (n>12)  // only show 12 lines
@@ -597,10 +625,11 @@
         subject = '';
 
         for(c=0; c<obj.childNodes.length; c++)
-          if (!subject && obj.childNodes[c].nodeName=='TD' && obj.childNodes[c].firstChild && obj.childNodes[c].firstChild.nodeType==3)
+          if (obj.childNodes[c].nodeName=='TD' && (node = obj.childNodes[c].firstChild) && (node.nodeType==3 || node.nodeName=='A'))
           {
-            subject = obj.childNodes[c].firstChild.data;
+            subject = node.nodeType==3 ? node.data : node.innerHTML;
             names += (subject.length > 50 ? subject.substring(0, 50)+'...' : subject) + '<br />';
+            break;
           }
       }
     }

--
Gitblit v1.9.1