summaryrefslogtreecommitdiff
path: root/program/js
diff options
context:
space:
mode:
Diffstat (limited to 'program/js')
-rw-r--r--program/js/app.js129
1 files changed, 64 insertions, 65 deletions
diff --git a/program/js/app.js b/program/js/app.js
index 55e38bfda..434f1f45b 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -28,9 +28,10 @@ function rcube_webmail()
this.commands = new Object();
this.onloads = new Array();
- // create public reference to myself
+ // create protected reference to myself
rcube_webmail_client = this;
this.ref = 'rcube_webmail_client';
+ var ref = this;
// webmail client settings
this.dblclick_time = 500;
@@ -315,9 +316,9 @@ function rcube_webmail()
this.start_keepalive = function()
{
if (this.env.keep_alive && !this.env.framed && this.task=='mail' && this.gui_objects.messagelist)
- this._int = setInterval(this.ref+'.check_for_recent()', this.env.keep_alive * 1000);
+ this._int = setInterval(function(){ ref.check_for_recent(); }, this.env.keep_alive * 1000);
else if (this.env.keep_alive && !this.env.framed && this.task!='login')
- this._int = setInterval(this.ref+'.send_keep_alive()', this.env.keep_alive * 1000);
+ this._int = setInterval(function(){ ref.send_keep_alive(); }, this.env.keep_alive * 1000);
}
@@ -669,10 +670,12 @@ function rcube_webmail()
// open attachment in frame if it's of a supported mimetype
if (this.env.uid && props.mimetype && find_in_array(props.mimetype, this.mimetypes)>=0)
{
+ if (props.mimetype == 'text/html')
+ qstring += '&safe=1';
this.attachment_win = window.open(this.env.comm_path+'&_action=get&'+qstring+'&_frame=1', 'rcubemailattachment');
if (this.attachment_win)
{
- setTimeout(this.ref+'.attachment_win.focus()', 10);
+ setTimeout(function(){ ref.attachment_win.focus(); }, 10);
break;
}
}
@@ -849,19 +852,19 @@ function rcube_webmail()
var uid;
if (uid = this.get_single_uid())
{
- this.printwin = window.open(this.env.comm_path+'&_action=print&_uid='+uid+'&_mbox='+urlencode(this.env.mailbox)+(this.env.safemode ? '&_safe=1' : ''));
+ ref.printwin = window.open(this.env.comm_path+'&_action=print&_uid='+uid+'&_mbox='+urlencode(this.env.mailbox)+(this.env.safemode ? '&_safe=1' : ''));
if (this.printwin)
- setTimeout(this.ref+'.printwin.focus()', 20);
+ setTimeout(function(){ ref.printwin.focus(); }, 20);
}
break;
case 'viewsource':
var uid;
if (uid = this.get_single_uid())
- {
- this.sourcewin = window.open(this.env.comm_path+'&_action=viewsource&_uid='+this.env.uid+'&_mbox='+urlencode(this.env.mailbox));
+ {
+ ref.sourcewin = window.open(this.env.comm_path+'&_action=viewsource&_uid='+this.env.uid+'&_mbox='+urlencode(this.env.mailbox));
if (this.sourcewin)
- setTimeout(this.ref+'.sourcewin.focus()', 20);
+ setTimeout(function(){ ref.sourcewin.focus(); }, 20);
}
break;
@@ -983,7 +986,7 @@ function rcube_webmail()
// set timer for requests
if (a && this.env.request_timeout)
- this.request_timer = setTimeout(this.ref+'.request_timed_out()', this.env.request_timeout * 1000);
+ this.request_timer = setTimeout(function(){ ref.request_timed_out(); }, this.env.request_timeout * 1000);
};
@@ -1091,7 +1094,7 @@ function rcube_webmail()
// start timer for message preview (wait for double click)
if (selected && this.env.contentframe)
- this.preview_timer = setTimeout(this.ref+'.msglist_get_preview()', this.dblclick_time + 10);
+ this.preview_timer = setTimeout(function(){ ref.msglist_get_preview(); }, this.dblclick_time + 10);
else if (this.env.contentframe)
this.show_messageframe(false);
}
@@ -1333,24 +1336,8 @@ function rcube_webmail()
return;
}
- var a_uids = new Array();
-
- if (this.env.uid)
- a_uids[a_uids.length] = this.env.uid;
- else
- {
- var selection = this.message_list.get_selection();
- for (var n=0, id; n<selection.length; n++)
- {
- id = selection[n];
- a_uids[a_uids.length] = id;
- this.message_list.remove_row(id);
- }
-
- this.show_messageframe(false);
- }
-
var lock = false;
+ var add_url = '&_target_mbox='+urlencode(mbox)+'&_from='+(this.env.action ? this.env.action : '');
// show wait message
if (this.env.action=='show')
@@ -1358,43 +1345,12 @@ function rcube_webmail()
lock = true;
this.set_busy(true, 'movingmessage');
}
+ else
+ this.show_messageframe(false);
- // send request to server
- this.http_request('moveto', '_uid='+a_uids.join(',')+'&_mbox='+urlencode(this.env.mailbox)+'&_target_mbox='+urlencode(mbox)+'&_from='+(this.env.action ? this.env.action : ''), lock);
+ this._with_selected_messages('moveto', lock, add_url);
};
- this.permanently_remove_messages = function()
- {
- // exit if no mailbox specified or if selection is empty
- if (!this.env.uid)
- {
- if (!this.message_list || !this.message_list.get_selection().length)
- return;
- }
-
- var a_uids = new Array();
-
- if (this.env.uid)
- a_uids[a_uids.length] = this.env.uid;
- else
- {
- var selection = this.message_list.get_selection();
- var id;
- for (var n=0; n<selection.length; n++)
- {
- id = selection[n];
- a_uids[a_uids.length] = id;
- this.message_list.remove_row(id);
- }
-
- this.message_list.select_next();
- }
-
- // send request to server
- this.http_request('delete', '_uid='+a_uids.join(',')+'&_mbox='+urlencode(this.env.mailbox)+'&_from='+(this.env.action ? this.env.action : ''));
- }
-
-
// delete selected messages from the current mailbox
this.delete_messages = function()
{
@@ -1407,6 +1363,7 @@ function rcube_webmail()
// if there is a trash mailbox defined and we're not currently in it:
if (this.env.trash_mailbox && String(this.env.mailbox).toLowerCase()!=String(this.env.trash_mailbox).toLowerCase())
+ {
// if shift was pressed delete it immediately
if (this.message_list && this.message_list.shiftkey)
{
@@ -1415,6 +1372,7 @@ function rcube_webmail()
}
else
this.move_messages(this.env.trash_mailbox);
+ }
// if there is a trash mailbox defined but we *are* in it:
else if (this.env.trash_mailbox && String(this.env.mailbox).toLowerCase() == String(this.env.trash_mailbox).toLowerCase())
this.permanently_remove_messages();
@@ -1434,6 +1392,47 @@ function rcube_webmail()
};
+ // delete the selected messages permanently
+ this.permanently_remove_messages = function()
+ {
+ // exit if no mailbox specified or if selection is empty
+ if (!this.env.uid && (!this.message_list || !this.message_list.get_selection().length))
+ return;
+
+ this.show_messageframe(false);
+ this._with_selected_messages('delete', false, '&_from='+(this.env.action ? this.env.action : ''));
+ };
+
+ // Send a specifc request with UIDs of all selected messages
+ // @private
+ this._with_selected_messages = function(action, lock, add_url)
+ {
+ var a_uids = new Array();
+ if (this.env.uid)
+ a_uids[a_uids.length] = this.env.uid;
+ else
+ {
+ var selection = this.message_list.get_selection();
+ var id;
+ for (var n=0; n<selection.length; n++)
+ {
+ id = selection[n];
+ a_uids[a_uids.length] = id;
+ this.message_list.remove_row(id);
+ }
+
+ this.message_list.select_next();
+ }
+
+ // also send search request to get the right messages
+ if (this.env.search_request)
+ add_url += '&_search='+this.env.search_request;
+
+ // send request to server
+ this.http_request(action, '_uid='+a_uids.join(',')+'&_mbox='+urlencode(this.env.mailbox)+add_url, lock);
+ };
+
+
// set a specific flag to one or more messages
this.mark_message = function(flag, uid)
{
@@ -1686,7 +1685,7 @@ function rcube_webmail()
this.auto_save_start = function()
{
if (this.env.draft_autosave)
- this.save_timer = self.setTimeout(this.ref+'.command("savedraft")', this.env.draft_autosave * 1000);
+ this.save_timer = self.setTimeout(function(){ ref.command("savedraft"); }, this.env.draft_autosave * 1000);
};
@@ -2037,7 +2036,7 @@ function rcube_webmail()
}
// start timer
- this.ksearch_timer = setTimeout(this.ref+'.ksearch_get_results()', 200);
+ this.ksearch_timer = setTimeout(function(){ ref.ksearch_get_results(); }, 200);
this.ksearch_input = obj;
return true;
@@ -2901,7 +2900,7 @@ function rcube_webmail()
this.gui_objects.message.onmousedown = function(){ this._rcube.hide_message(); return true; };
if (!hold)
- this.message_timer = setTimeout(this.ref+'.hide_message()', this.message_time);
+ this.message_timer = setTimeout(function(){ ref.hide_message(); }, this.message_time);
};