summaryrefslogtreecommitdiff
path: root/program/js/app.js
diff options
context:
space:
mode:
authorThomas Bruederli <thomas@roundcube.net>2012-10-17 22:42:35 +0200
committerThomas Bruederli <thomas@roundcube.net>2012-10-17 22:42:35 +0200
commit271efe53e084779a8141228c29b5819d1acd2762 (patch)
tree9890424f3bb33281a70b91698631ebdfaf5c9f97 /program/js/app.js
parent5f6c71ae36b73e5f94543eec2f61874cf46e9c62 (diff)
Add user settings to open message view and compose form in new windows. This natevely implements the compose_newwindow plugin functionslity and more
Diffstat (limited to 'program/js/app.js')
-rw-r--r--program/js/app.js144
1 files changed, 105 insertions, 39 deletions
diff --git a/program/js/app.js b/program/js/app.js
index 06eb9295c..7e55a3395 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -176,10 +176,10 @@ function rcube_webmail()
}
// enable general commands
- this.enable_command('logout', 'mail', 'addressbook', 'settings', 'save-pref', 'compose', 'undo', 'about', 'switch-task', true);
+ this.enable_command('close', 'logout', 'mail', 'addressbook', 'settings', 'save-pref', 'compose', 'undo', 'about', 'switch-task', true);
if (this.env.permaurl)
- this.enable_command('permaurl', true);
+ this.enable_command('permaurl', 'extwin', true);
switch (this.task) {
@@ -249,7 +249,7 @@ function rcube_webmail()
}
}
else if (this.env.action == 'compose') {
- this.env.compose_commands = ['send-attachment', 'remove-attachment', 'send', 'cancel', 'toggle-editor', 'list-adresses'];
+ this.env.compose_commands = ['send-attachment', 'remove-attachment', 'send', 'cancel', 'toggle-editor', 'list-adresses', 'extwin'];
if (this.env.drafts_mailbox)
this.env.compose_commands.push('savedraft')
@@ -570,6 +570,19 @@ function rcube_webmail()
parent.location.href = this.env.permaurl;
break;
+ case 'extwin':
+ if (this.env.action == 'compose') {
+ var prevstate = this.env.compose_extwin;
+ $("input[name='_action']", this.gui_objects.messageform).val('compose');
+ this.gui_objects.messageform.action = this.url('mail/compose', { _id: this.env.compose_id, _extwin: 1 });
+ this.gui_objects.messageform.target = this.open_window('about:blank', 1150, 900);
+ this.gui_objects.messageform.submit();
+ }
+ else {
+ this.open_window(this.env.permaurl, 1000, 1200);
+ }
+ break;
+
case 'menu-open':
case 'menu-save':
this.triggerEvent(command, {props:props});
@@ -582,10 +595,18 @@ function rcube_webmail()
}
break;
+ case 'close':
+ if (this.env.extwin)
+ window.close();
+ break;
+
case 'list':
if (props && props != '')
this.reset_qsearch();
- if (this.task == 'mail') {
+ if (this.env.action == 'compose' && this.env.extwin) {
+ window.close();
+ }
+ else if (this.task == 'mail') {
this.list_mailbox(props);
this.set_button_titles();
}
@@ -641,7 +662,7 @@ function rcube_webmail()
uid = this.get_single_uid();
if (uid && (!this.env.uid || uid != this.env.uid)) {
if (this.env.mailbox == this.env.drafts_mailbox)
- this.goto_url('compose', { _draft_uid: uid, _mbox: this.env.mailbox }, true);
+ this.open_compose_step({ _draft_uid: uid, _mbox: this.env.mailbox });
else
this.show_message(uid);
}
@@ -670,7 +691,7 @@ function rcube_webmail()
else if (this.task == 'mail' && (cid = this.get_single_uid())) {
url = { _mbox: this.env.mailbox };
url[this.env.mailbox == this.env.drafts_mailbox && props != 'new' ? '_draft_uid' : '_uid'] = cid;
- this.goto_url('compose', url, true);
+ this.open_compose_step(url);
}
break;
@@ -863,47 +884,46 @@ function rcube_webmail()
break;
case 'compose':
- url = this.url('mail/compose');
+ url = {};
if (this.task == 'mail') {
- url += '&_mbox='+urlencode(this.env.mailbox);
+ url._mbox = this.env.mailbox;
if (props)
- url += '&_to='+urlencode(props);
+ url._to = props;
// also send search request so we can go back to search result after message is sent
if (this.env.search_request)
- url += '&_search='+this.env.search_request;
+ url._search = this.env.search_request;
}
// modify url if we're in addressbook
else if (this.task == 'addressbook') {
// switch to mail compose step directly
if (props && props.indexOf('@') > 0) {
- url = this.get_task_url('mail', url);
- this.redirect(url + '&_to='+urlencode(props));
- break;
- }
-
- // use contact_id passed as command parameter
- var n, len, a_cids = [];
- if (props)
- a_cids.push(props);
- // get selected contacts
- else if (this.contact_list) {
- var selection = this.contact_list.get_selection();
- for (n=0, len=selection.length; n<len; n++)
- a_cids.push(selection[n]);
+ url._to = props;
}
+ else {
+ // use contact_id passed as command parameter
+ var n, len, a_cids = [];
+ if (props)
+ a_cids.push(props);
+ // get selected contacts
+ else if (this.contact_list) {
+ var selection = this.contact_list.get_selection();
+ for (n=0, len=selection.length; n<len; n++)
+ a_cids.push(selection[n]);
+ }
- if (a_cids.length)
- this.http_post('mailto', { _cid: a_cids.join(','), _source: this.env.source}, true);
- else if (this.env.group)
- this.http_post('mailto', { _gid: this.env.group, _source: this.env.source}, true);
+ if (a_cids.length)
+ this.http_post('mailto', { _cid: a_cids.join(','), _source: this.env.source, }, true);
+ else if (this.env.group)
+ this.http_post('mailto', { _gid: this.env.group, _source: this.env.source }, true);
- break;
+ break;
+ }
}
else if (props)
- url += '&_to='+urlencode(props);
+ url._to = props;
- this.redirect(url);
+ this.open_compose_step(url);
break;
case 'spellcheck':
@@ -978,7 +998,7 @@ function rcube_webmail()
else if (command == 'reply-list')
url._all = 'list';
- this.goto_url('compose', url, true);
+ this.open_compose_step(url);
}
break;
@@ -988,7 +1008,7 @@ function rcube_webmail()
url = { _forward_uid: uid, _mbox: this.env.mailbox };
if (command == 'forward-attachment' || (!props && this.env.forward_attachment))
url._attachment = 1;
- this.goto_url('compose', url, true);
+ this.open_compose_step(url);
}
break;
@@ -1562,7 +1582,7 @@ function rcube_webmail()
var uid = list.get_single_selection();
if (uid && this.env.mailbox == this.env.drafts_mailbox)
- this.goto_url('compose', { _draft_uid: uid, _mbox: this.env.mailbox }, true);
+ this.open_compose_step({ _draft_uid: uid, _mbox: this.env.mailbox });
else if (uid)
this.show_message(uid, false, false);
};
@@ -1644,6 +1664,21 @@ function rcube_webmail()
return allow ? (copy ? 2 : 1) : 0;
};
+ this.open_window = function(url, width, height)
+ {
+ var w = Math.min(width, screen.width - 10),
+ h = Math.min(height, screen.height - 100),
+ l = (screen.width - w) / 2 + (screen.left || 0),
+ t = Math.max(0, (screen.height - h) / 2 + (screen.top || 0) - 20);
+
+ var wname = 'rcmextwin' + new Date().getTime(),
+ extwin = window.open(url + '&_extwin=1', wname, 'width='+w+',height='+h+',top='+t+',left='+l);
+ extwin.moveTo(l,t);
+ window.setTimeout(function(){ extwin.focus(); }, 10);
+
+ return wname;
+ };
+
/*********************************************************/
/********* (message) list functionality *********/
@@ -1907,7 +1942,7 @@ function rcube_webmail()
this.list_mailbox('', '', sort_col+'_'+sort_order, post_data);
};
- // when user doble-clicks on a row
+ // when user double-clicks on a row
this.show_message = function(id, safe, preview)
{
if (!id)
@@ -1932,10 +1967,17 @@ function rcube_webmail()
// add browser capabilities, so we can properly handle attachments
url += '&_caps='+urlencode(this.browser_capabilities());
- if (preview && String(target.location.href).indexOf(url) >= 0)
+ if (this.env.extwin)
+ url += '&_extwin=1';
+
+ if (preview && String(target.location.href).indexOf(url) >= 0) {
this.show_contentframe(true);
+ }
else {
- this.location_href(this.env.comm_path+url, target, true);
+ if (!preview && this.env.message_extwin && !this.env.extwin)
+ this.open_window(this.env.comm_path+url, 1000, 1200);
+ else
+ this.location_href(this.env.comm_path+url, target, true);
// mark as read and change mbox unread counter
if (preview && this.message_list && this.message_list.rows[id] && this.message_list.rows[id].unread && this.env.preview_pane_mark_read >= 0) {
@@ -2963,6 +3005,17 @@ function rcube_webmail()
/********* message compose methods *********/
/*********************************************************/
+ this.open_compose_step = function(p)
+ {
+ var url = this.url('mail/compose', p);
+
+ // open new compose window
+ if (this.env.compose_extwin)
+ this.open_window(url, 1150, 900);
+ else
+ this.redirect(url);
+ };
+
// init message compose form: set focus and eventhandlers
this.init_messageform = function()
{
@@ -2977,6 +3030,11 @@ function rcube_webmail()
ac_fields = ['cc', 'bcc', 'replyto', 'followupto'],
ac_props;
+ // copy contents from opener (after opening in a new window)
+ if (window.opener && opener.rcmail && opener.rcmail.env.action == 'compose') {
+ //opener.history.back();
+ }
+
// configure parallel autocompletion
if (this.env.autocomplete_threads > 0) {
ac_props = {
@@ -3631,8 +3689,16 @@ function rcube_webmail()
this.sent_successfully = function(type, msg)
{
this.display_message(msg, type);
- // before redirect we need to wait some time for Chrome (#1486177)
- setTimeout(function(){ ref.list_mailbox(); }, 500);
+
+ if (this.env.extwin && window.opener && opener.rcmail) {
+ this.lock_form(this.gui_objects.messageform);
+ opener.rcmail.display_message(msg, type);
+ setTimeout(function(){ window.close() }, 1000);
+ }
+ else {
+ // before redirect we need to wait some time for Chrome (#1486177)
+ setTimeout(function(){ ref.list_mailbox(); }, 500);
+ }
};