diff options
Diffstat (limited to 'program/js')
| -rw-r--r-- | program/js/list.js | 24 | 
1 files changed, 15 insertions, 9 deletions
| diff --git a/program/js/list.js b/program/js/list.js index 8b4857d6d..cf62a7c14 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -780,10 +780,16 @@ shift_select: function(id, control)    if (!this.rows[this.shift_start] || !this.selection.length)      this.shift_start = id; -  var n, from_rowIndex = this.rows[this.shift_start].obj.rowIndex, -    to_rowIndex = this.rows[id].obj.rowIndex, -    i = ((from_rowIndex < to_rowIndex)? from_rowIndex : to_rowIndex), -    j = ((from_rowIndex > to_rowIndex)? from_rowIndex : to_rowIndex); +  var n, i, j, to_row = this.rows[id], +    from_rowIndex = this.rows[this.shift_start].obj.rowIndex, +    to_rowIndex = to_row.obj.rowIndex; + +  if (!to_row.expanded && to_row.has_children) +    if (to_row = this.rows[(this.row_children(id)).pop()]) +      to_rowIndex = to_row.obj.rowIndex; + +  i = ((from_rowIndex < to_rowIndex) ? from_rowIndex : to_rowIndex), +  j = ((from_rowIndex > to_rowIndex) ? from_rowIndex : to_rowIndex);    // iterate through the entire message list    for (n in this.rows) { @@ -829,7 +835,7 @@ select_all: function(filter)    for (n in this.rows) {      if (!filter || this.rows[n][filter] == true) {        this.last_selected = n; -      this.highlight_row(n, true); +      this.highlight_row(n, true, true);      }      else {        $(this.rows[n].obj).removeClass('selected').removeClass('unfocused'); @@ -924,7 +930,7 @@ get_single_selection: function()  /**   * Highlight/unhighlight a row   */ -highlight_row: function(id, multiple) +highlight_row: function(id, multiple, norecur)  {    if (!this.rows[id])      return; @@ -940,7 +946,7 @@ highlight_row: function(id, multiple)      if (!this.in_selection(id)) { // select row        this.selection.push(id);        $(this.rows[id].obj).addClass('selected'); -      if (!this.rows[id].expanded) +      if (!norecur && !this.rows[id].expanded)          this.highlight_children(id, true);      }      else { // unselect row @@ -950,7 +956,7 @@ highlight_row: function(id, multiple)        this.selection = a_pre.concat(a_post);        $(this.rows[id].obj).removeClass('selected').removeClass('unfocused'); -      if (!this.rows[id].expanded) +      if (!norecur && !this.rows[id].expanded)          this.highlight_children(id, false);      }    } @@ -968,7 +974,7 @@ highlight_children: function(id, status)    for (i=0; i<len; i++) {      selected = this.in_selection(children[i]);      if ((status && !selected) || (!status && selected)) -      this.highlight_row(children[i], true); +      this.highlight_row(children[i], true, true);    }  }, | 
