diff options
Diffstat (limited to 'program/js/list.js')
-rw-r--r-- | program/js/list.js | 69 |
1 files changed, 47 insertions, 22 deletions
diff --git a/program/js/list.js b/program/js/list.js index 476edae4b..9b7779c7b 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -107,11 +107,11 @@ init: function() */ init_row: function(row) { + row.uid = this.get_row_uid(row); + // make references in internal array and set event handlers - if (row && String(row.id).match(this.id_regexp)) { - var self = this, - uid = RegExp.$1; - row.uid = uid; + if (row && row.uid) { + var self = this, uid = row.uid; this.rows[uid] = {uid:uid, id:row.id, obj:row}; // set eventhandlers to table row @@ -299,6 +299,7 @@ insert_row: function(row, before) if (row.id) domrow.id = row.id; if (row.className) domrow.className = row.className; if (row.style) $.extend(domrow.style, row.style); + if (row.uid) $(domrow).data('uid', row.uid); for (var domcell, col, i=0; row.cols && i < row.cols.length; i++) { col = row.cols[i]; @@ -390,6 +391,20 @@ blur: function() /** + * Set/unset the given column as hidden + */ +hide_column: function(col, hide) +{ + var method = hide ? 'addClass' : 'removeClass'; + + if (this.fixed_header) + $(this.row_tagname()+' '+this.col_tagname()+'.'+col, this.fixed_header)[method]('hidden'); + + $(this.row_tagname()+' '+this.col_tagname()+'.'+col, this.list)[method]('hidden'); +}, + + +/** * onmousedown-handler of message list column */ drag_column: function(e, col) @@ -583,7 +598,7 @@ expand: function(row) row.expanded = true; depth = row.depth; new_row = row.obj.nextSibling; - this.update_expando(row.uid, true); + this.update_expando(row.id, true); this.triggerEvent('expandcollapse', { uid:row.uid, expanded:row.expanded, obj:row.obj }); } else { @@ -633,7 +648,7 @@ collapse_all: function(row) row.expanded = false; depth = row.depth; new_row = row.obj.nextSibling; - this.update_expando(row.uid); + this.update_expando(row.id); this.triggerEvent('expandcollapse', { uid:row.uid, expanded:row.expanded, obj:row.obj }); // don't collapse sub-root tree in multiexpand mode @@ -655,7 +670,7 @@ collapse_all: function(row) $(new_row).css('display', 'none'); if (r.has_children && r.expanded) { r.expanded = false; - this.update_expando(r.uid, false); + this.update_expando(r.id, false); this.triggerEvent('expandcollapse', { uid:r.uid, expanded:r.expanded, obj:new_row }); } } @@ -677,7 +692,7 @@ expand_all: function(row) row.expanded = true; depth = row.depth; new_row = row.obj.nextSibling; - this.update_expando(row.uid, true); + this.update_expando(row.id, true); this.triggerEvent('expandcollapse', { uid:row.uid, expanded:row.expanded, obj:row.obj }); } else { @@ -694,7 +709,7 @@ expand_all: function(row) $(new_row).css('display', ''); if (r.has_children && !r.expanded) { r.expanded = true; - this.update_expando(r.uid, true); + this.update_expando(r.id, true); this.triggerEvent('expandcollapse', { uid:r.uid, expanded:r.expanded, obj:new_row }); } } @@ -708,13 +723,26 @@ expand_all: function(row) }, -update_expando: function(uid, expanded) +update_expando: function(id, expanded) { - var expando = document.getElementById('rcmexpando' + uid); + var expando = document.getElementById('rcmexpando' + id); if (expando) expando.className = expanded ? 'expanded' : 'collapsed'; }, +get_row_uid: function(row) +{ + if (row && row.uid) + return row.uid; + + var uid; + if (row && (uid = $(row).data('uid'))) + row.uid = uid; + else if (row && String(row.id).match(this.id_regexp)) + row.uid = RegExp.$1; + + return row.uid; +}, /** * get first/next/previous/last rows that are not hidden @@ -750,11 +778,11 @@ get_prev_row: function() get_first_row: function() { if (this.rowcount) { - var i, len, rows = this.tbody.childNodes; + var i, len, uid, rows = this.tbody.childNodes; for (i=0, len=rows.length-1; i<len; i++) - if (rows[i].id && String(rows[i].id).match(this.id_regexp) && this.rows[RegExp.$1] != null) - return RegExp.$1; + if (rows[i].id && (uid = this.get_row_uid(rows[i]))) + return uid; } return null; @@ -763,11 +791,11 @@ get_first_row: function() get_last_row: function() { if (this.rowcount) { - var i, rows = this.tbody.childNodes; + var i, uid, rows = this.tbody.childNodes; for (i=rows.length-1; i>=0; i--) - if (rows[i].id && String(rows[i].id).match(this.id_regexp) && this.rows[RegExp.$1] != null) - return RegExp.$1; + if (rows[i].id && (uid = this.get_row_uid(rows[i]))) + return uid; } return null; @@ -1261,7 +1289,7 @@ use_arrow_key: function(keyCode, mod_key) this.collapse(selected_row); } - this.update_expando(selected_row.uid, selected_row.expanded); + this.update_expando(selected_row.id, selected_row.expanded); return false; } @@ -1340,10 +1368,7 @@ drag_mouse_move: function(e) // get selected rows (in display order), don't use this.selection here $(this.row_tagname() + '.selected', this.tbody).each(function() { - if (!String(this.id).match(self.id_regexp)) - return; - - var uid = RegExp.$1, row = self.rows[uid]; + var uid = self.get_row_uid(this), row = self.rows[uid]; if (!row || $.inArray(uid, selection) > -1) return; |