From 271efe53e084779a8141228c29b5819d1acd2762 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Wed, 17 Oct 2012 22:42:35 +0200 Subject: Add user settings to open message view and compose form in new windows. This natevely implements the compose_newwindow plugin functionslity and more --- program/js/app.js | 144 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 105 insertions(+), 39 deletions(-) (limited to 'program/js') 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= 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); + } }; -- cgit v1.2.3 From 715a39416ec44e0e12b967afabbb17233b85e687 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Wed, 17 Oct 2012 23:32:32 +0200 Subject: Close compose step in opener window --- program/js/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'program/js') diff --git a/program/js/app.js b/program/js/app.js index 7e55a3395..2c0cf6c39 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -3030,9 +3030,9 @@ function rcube_webmail() ac_fields = ['cc', 'bcc', 'replyto', 'followupto'], ac_props; - // copy contents from opener (after opening in a new window) + // close compose step in opener if (window.opener && opener.rcmail && opener.rcmail.env.action == 'compose') { - //opener.history.back(); + opener.history.back(); } // configure parallel autocompletion -- cgit v1.2.3 From 838e4204b161b00b0978038b2dcf42b396e8d400 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Wed, 24 Oct 2012 16:53:10 +0200 Subject: Fix new (empty) window opening on FF and others --- program/js/app.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'program/js') diff --git a/program/js/app.js b/program/js/app.js index 2c0cf6c39..b73148219 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -575,7 +575,7 @@ function rcube_webmail() 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.target = this.open_window('', 1150, 900); this.gui_objects.messageform.submit(); } else { @@ -1672,8 +1672,15 @@ function rcube_webmail() 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 = window.open(url + '&_extwin=1', wname, 'width='+w+',height='+h+',top='+t+',left='+l+',resizable=yes,toolbar=no,status=no'); extwin.moveTo(l,t); + + // write loading... message to empty windows + if (!url && extwin.document) { + extwin.document.write('' + this.get_label('loading') + ''); + } + + // focus window, delayed to bring to front window.setTimeout(function(){ extwin.focus(); }, 10); return wname; -- cgit v1.2.3 From eb514742ecf9ca2fb5331d6ccbe2f1a13accd438 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Wed, 24 Oct 2012 18:14:31 +0200 Subject: Show compose options if they were visible in opener --- program/js/app.js | 2 +- skins/larry/ui.js | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'program/js') diff --git a/program/js/app.js b/program/js/app.js index b73148219..b80422983 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -3039,7 +3039,7 @@ function rcube_webmail() // close compose step in opener if (window.opener && opener.rcmail && opener.rcmail.env.action == 'compose') { - opener.history.back(); + setTimeout(function(){ opener.history.back(); }, 100); } // configure parallel autocompletion diff --git a/skins/larry/ui.js b/skins/larry/ui.js index 12dae3118..da4f2300e 100644 --- a/skins/larry/ui.js +++ b/skins/larry/ui.js @@ -96,6 +96,10 @@ function rcube_mail_ui() return false; }).css('cursor', 'pointer'); + // toggle compose options if opened in new window and they were visible before + if (window.opener && opener.rcmail && opener.rcmail.env.action == 'compose' && $('#composeoptionstoggle', opener.document).hasClass('remove')) + $('#composeoptionstoggle').click(); + new rcube_splitter({ id:'composesplitterv', p1:'#composeview-left', p2:'#composeview-right', orientation:'v', relative:true, start:248, min:170, size:12, render:layout_composeview }).init(); } -- cgit v1.2.3