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