summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2011-07-19 19:26:55 +0000
committerthomascube <thomas@roundcube.net>2011-07-19 19:26:55 +0000
commit71cc6bf630f2a0bc12091515418f6d23e18d2720 (patch)
treefdbcdf0ab81aef21e3f382fd54a3ff5d8427cd9d
parent8d0999f3edbfc11b783752b9023b764bc146afe0 (diff)
Add drop-target for root folder; fix row insertion when moving to a protected folder
-rw-r--r--program/js/app.js46
-rw-r--r--program/steps/settings/folders.inc7
2 files changed, 38 insertions, 15 deletions
diff --git a/program/js/app.js b/program/js/app.js
index 92a47fdcf..2987434f9 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -4460,6 +4460,10 @@ function rcube_webmail()
row.obj.onmouseout = function() { p.unfocus_subscription(row.id); };
};
this.subscription_list.init();
+ $('#mailboxroot')
+ .mouseover(function(){ p.focus_subscription(this.id); })
+ .mouseout(function(){ p.unfocus_subscription(this.id); })
+ .mouseup(function(){ if (p.drag_active) p.subscription_move_folder(); });
};
this.focus_subscription = function(id)
@@ -4479,6 +4483,10 @@ function rcube_webmail()
$(row).addClass('droptarget');
}
}
+ else if (id == 'mailboxroot') {
+ this.set_env('dstfolder', '');
+ $(row).addClass('droptarget');
+ }
else if (this.env.mailbox.match(new RegExp(delim))) {
this.set_env('dstfolder', this.env.delimiter);
$(this.subscription_list.frame).addClass('droptarget');
@@ -4523,11 +4531,13 @@ function rcube_webmail()
(this.env.dstfolder != this.env.mailbox.replace(reg, ''))
) {
reg = new RegExp('[^'+delim+']*['+delim+']', 'g');
- var lock = this.set_busy(true, 'foldermoving'),
- basename = this.env.mailbox.replace(reg, ''),
+ var basename = this.env.mailbox.replace(reg, ''),
newname = this.env.dstfolder==this.env.delimiter ? basename : this.env.dstfolder+this.env.delimiter+basename;
-
- this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.mailbox)+'&_folder_newname='+urlencode(newname), lock);
+
+ if (newname != this.env.mailbox) {
+ this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.mailbox)+'&_folder_newname='+urlencode(newname), this.set_busy(true, 'foldermoving'));
+ this.subscription_list.draglayer.hide();
+ }
}
this.drag_active = false;
this.unfocus_subscription(this.get_folder_row_id(this.env.dstfolder));
@@ -4557,9 +4567,9 @@ function rcube_webmail()
if (!this.gui_objects.subscriptionlist)
return false;
- var row, n, i, tmp, folders, len, list = [], slist = [],
+ var row, n, i, tmp, folders, rowid, list = [], slist = [],
tbody = this.gui_objects.subscriptionlist.tBodies[0],
- refrow = $('tr', tbody).get(0),
+ refrow = $('tr', tbody).get(1),
id = 'rcmrow'+((new Date).getTime());
if (!refrow) {
@@ -4586,7 +4596,10 @@ function rcube_webmail()
this.env.subscriptionrows[id] = [name, display_name, 0];
// sort folders, to find a place where to insert the row
- folders = this.env.subscriptionrows;
+ folders = [];
+ $.each(this.env.subscriptionrows, function(k,v){ folders.push(v) });
+ folders.sort(function(a,b){ return a[0] < b[0] ? -1 : (a[0] > b[0] ? 1 : 0) });
+
for (n in folders) {
// protected folder
if (folders[n][2]) {
@@ -4602,19 +4615,22 @@ function rcube_webmail()
tmp = null;
}
}
- list.sort();
- // make sure protected folders (and their subs) are on top
- list = slist.concat(list);
+
+ // check if subfolder of a protected folder
+ for (n=0; n<slist.length; n++) {
+ if (name.indexOf(slist[n]+this.env.delimiter) == 0)
+ rowid = this.get_folder_row_id(slist[n]);
+ }
// find folder position after sorting
- for (n=0, len=list.length; n<len; n++) {
- if (list[n] == name)
- break;
+ for (n=0; !rowid && n<list.length; n++) {
+ if (n && list[n] == name)
+ rowid = this.get_folder_row_id(list[n-1]);
}
// add row to the table
- if (n && n < len)
- $('#'+this.get_folder_row_id(list[n-1])).after(row);
+ if (rowid)
+ $('#'+rowid).after(row);
else
row.appendTo(tbody);
diff --git a/program/steps/settings/folders.inc b/program/steps/settings/folders.inc
index cc149bc79..982b21a12 100644
--- a/program/steps/settings/folders.inc
+++ b/program/steps/settings/folders.inc
@@ -251,6 +251,13 @@ function rcube_subscription_form($attrib)
unset($seen);
+ // add drop-target representing 'root'
+ $table->add_row(array('id' => 'mailboxroot', 'class' => 'virtual root'));
+ $table->add('name', '&nbsp;');
+ $table->add(null, '&nbsp;');
+
+ $a_js_folders['mailboxroot'] = array('.', '', true);
+
$checkbox_subscribe = new html_checkbox(array(
'name' => '_subscribed[]',
'title' => rcube_label('changesubscription'),