|
|
@ -528,6 +528,7 @@ collapse_all: function(row) |
|
|
|
return false; |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
expand_all: function(row) |
|
|
|
{ |
|
|
|
var depth, new_row, r; |
|
|
@ -563,6 +564,7 @@ expand_all: function(row) |
|
|
|
return false; |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
update_expando: function(uid, expanded) |
|
|
|
{ |
|
|
|
var expando = document.getElementById('rcmexpando' + uid); |
|
|
@ -735,7 +737,7 @@ select_first: function(mod_key) |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Select last row |
|
|
|
* Select last row |
|
|
|
*/ |
|
|
|
select_last: function(mod_key) |
|
|
|
{ |
|
|
@ -756,25 +758,13 @@ select_last: function(mod_key) |
|
|
|
/** |
|
|
|
* Add all childs of the given row to selection |
|
|
|
*/ |
|
|
|
select_childs: function(uid) |
|
|
|
select_children: function(uid) |
|
|
|
{ |
|
|
|
if (!this.rows[uid] || !this.rows[uid].has_children) |
|
|
|
return; |
|
|
|
|
|
|
|
var depth = this.rows[uid].depth, |
|
|
|
row = this.rows[uid].obj.nextSibling; |
|
|
|
var i, children = this.row_children(uid), len = children.length; |
|
|
|
|
|
|
|
while (row) { |
|
|
|
if (row.nodeType == 1) { |
|
|
|
if ((r = this.rows[row.uid])) { |
|
|
|
if (!r.depth || r.depth <= depth) |
|
|
|
break; |
|
|
|
if (!this.in_selection(r.uid)) |
|
|
|
this.select_row(r.uid, CONTROL_KEY); |
|
|
|
} |
|
|
|
} |
|
|
|
row = row.nextSibling; |
|
|
|
} |
|
|
|
for (i=0; i<len; i++) |
|
|
|
if (!this.in_selection(children[i])) |
|
|
|
this.select_row(children[i], CONTROL_KEY); |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
@ -932,17 +922,22 @@ get_single_selection: function() |
|
|
|
*/ |
|
|
|
highlight_row: function(id, multiple) |
|
|
|
{ |
|
|
|
if (this.rows[id] && !multiple) { |
|
|
|
if (!this.rows[id]) |
|
|
|
return; |
|
|
|
|
|
|
|
if (!multiple) { |
|
|
|
if (this.selection.length > 1 || !this.in_selection(id)) { |
|
|
|
this.clear_selection(); |
|
|
|
this.selection[0] = id; |
|
|
|
$(this.rows[id].obj).addClass('selected'); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (this.rows[id]) { |
|
|
|
else { |
|
|
|
if (!this.in_selection(id)) { // select row
|
|
|
|
this.selection[this.selection.length] = id; |
|
|
|
this.selection.push(id); |
|
|
|
$(this.rows[id].obj).addClass('selected'); |
|
|
|
if (!this.rows[id].expanded) |
|
|
|
this.highlight_children(id, true); |
|
|
|
} |
|
|
|
else { // unselect row
|
|
|
|
var p = $.inArray(id, this.selection), |
|
|
@ -951,11 +946,29 @@ 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) |
|
|
|
this.highlight_children(id, false); |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Highlight/unhighlight all childs of the given row |
|
|
|
*/ |
|
|
|
highlight_children: function(id, status) |
|
|
|
{ |
|
|
|
var i, selected, |
|
|
|
children = this.row_children(id), len = children.length; |
|
|
|
|
|
|
|
for (i=0; i<len; i++) { |
|
|
|
selected = this.in_selection(children[i]); |
|
|
|
if ((status && !selected) || (!status && selected)) |
|
|
|
this.highlight_row(children[i], true); |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Handler for keyboard events |
|
|
|
*/ |
|
|
@ -1129,7 +1142,7 @@ drag_mouse_move: function(e) |
|
|
|
else |
|
|
|
return rcube_event.cancel(e); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (this.drag_start) { |
|
|
|
// check mouse movement, of less than 3 pixels, don't start dragging
|
|
|
|
var m = rcube_event.get_mouse_pos(e); |
|
|
@ -1146,8 +1159,8 @@ drag_mouse_move: function(e) |
|
|
|
var n, uid, selection = $.merge([], this.selection); |
|
|
|
for (n in selection) { |
|
|
|
uid = selection[n]; |
|
|
|
if (this.rows[uid].has_children && !this.rows[uid].expanded) |
|
|
|
this.select_childs(uid); |
|
|
|
if (!this.rows[uid].expanded) |
|
|
|
this.select_children(uid); |
|
|
|
} |
|
|
|
|
|
|
|
// reset content
|
|
|
@ -1367,6 +1380,32 @@ column_drag_mouse_up: function(e) |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Returns IDs of all rows in a thread (except root) for specified root |
|
|
|
*/ |
|
|
|
row_children: function(uid) |
|
|
|
{ |
|
|
|
if (!this.rows[uid] || !this.rows[uid].has_children) |
|
|
|
return []; |
|
|
|
|
|
|
|
var res = [], depth = this.rows[uid].depth, |
|
|
|
row = this.rows[uid].obj.nextSibling; |
|
|
|
|
|
|
|
while (row) { |
|
|
|
if (row.nodeType == 1) { |
|
|
|
if ((r = this.rows[row.uid])) { |
|
|
|
if (!r.depth || r.depth <= depth) |
|
|
|
break; |
|
|
|
res.push(r.uid); |
|
|
|
} |
|
|
|
} |
|
|
|
row = row.nextSibling; |
|
|
|
} |
|
|
|
|
|
|
|
return res; |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Creates a layer for drag&drop over iframes |
|
|
|
*/ |
|
|
|