| | |
| | | parent.rcmail.env.frame_lock = null; |
| | | } |
| | | |
| | | // Makes that reference to document.activeElement do not throw |
| | | // "unspecified error" in IE9 (#1489008) |
| | | if (this.env.framed && bw.ie) |
| | | document.documentElement.focus(); |
| | | |
| | | // enable general commands |
| | | this.enable_command('close', 'logout', 'mail', 'addressbook', 'settings', 'save-pref', 'compose', 'undo', 'about', 'switch-task', true); |
| | | |
| | |
| | | } |
| | | |
| | | // detect browser capabilities |
| | | if (!this.is_framed()) |
| | | if (!this.is_framed() && !this.env.extwin) |
| | | this.browser_capabilities_check(); |
| | | |
| | | break; |
| | |
| | | |
| | | // open attachment in frame if it's of a supported mimetype |
| | | if (this.env.uid && props.mimetype && this.env.mimetypes && $.inArray(props.mimetype, this.env.mimetypes) >= 0) { |
| | | var attachment_win = window.open(this.env.comm_path+'&_action=get&'+qstring+'&_frame=1', 'rcubemailattachment'+this.env.uid+props.part); |
| | | var attachment_win = window.open(this.env.comm_path+'&_action=get&'+qstring+'&_frame=1', this.html_identifier('rcubemailattachment'+this.env.uid+props.part)); |
| | | if (attachment_win) { |
| | | setTimeout(function(){ attachment_win.focus(); }, 10); |
| | | break; |
| | |
| | | // Reset the auto-save timer |
| | | clearTimeout(this.save_timer); |
| | | |
| | | // compose form did not change |
| | | if (this.cmp_hash == this.compose_field_hash()) { |
| | | // compose form did not change (and draft wasn't saved already) |
| | | if (this.env.draft_id && this.cmp_hash == this.compose_field_hash()) { |
| | | this.auto_save_start(); |
| | | break; |
| | | } |
| | |
| | | l = (screen.width - w) / 2 + (screen.left || 0), |
| | | t = Math.max(0, (screen.height - h) / 2 + (screen.top || 0) - 20), |
| | | wname = 'rcmextwin' + new Date().getTime(), |
| | | extwin = window.open(url + '&_extwin=1', wname, |
| | | extwin = window.open(url + (url.match(/\?/) ? '&' : '?') + '_extwin=1', wname, |
| | | 'width='+w+',height='+h+',top='+t+',left='+l+',resizable=yes,toolbar=no,status=no,location=no'); |
| | | |
| | | // write loading... message to empty windows |
| | |
| | | input_message = $("[name='_message']").get(0), |
| | | html_mode = $("input[name='_is_html']").val() == '1', |
| | | ac_fields = ['cc', 'bcc', 'replyto', 'followupto'], |
| | | ac_props; |
| | | ac_props, opener_rc = this.opener(); |
| | | |
| | | // close compose step in opener |
| | | if (window.opener && !window.opener.closed && opener.rcmail && opener.rcmail.env.action == 'compose') { |
| | | if (opener_rc && opener_rc.env.action == 'compose') { |
| | | setTimeout(function(){ opener.history.back(); }, 100); |
| | | this.env.opened_extwin = true; |
| | | } |
| | |
| | | form._draft.value = draft ? '1' : ''; |
| | | form.action = this.add_url(form.action, '_unlock', msgid); |
| | | form.action = this.add_url(form.action, '_lang', lang); |
| | | |
| | | // register timer to notify about connection timeout |
| | | this.submit_timer = setTimeout(function(){ |
| | | ref.set_busy(false, null, msgid); |
| | | ref.display_message(ref.get_label('requesttimedout'), 'error'); |
| | | }, this.env.request_timeout * 1000); |
| | | |
| | | form.submit(); |
| | | }; |
| | | |
| | |
| | | |
| | | this.set_draft_id = function(id) |
| | | { |
| | | var rc; |
| | | |
| | | if (!this.env.draft_id && id && (rc = this.opener())) { |
| | | // refresh the drafts folder in opener window |
| | | if (rc.env.task == 'mail' && rc.env.action == '' && rc.env.mailbox == this.env.drafts_mailbox) |
| | | rc.command('checkmail'); |
| | | } |
| | | |
| | | this.env.draft_id = id; |
| | | $("input[name='_draft_saveid']").val(id); |
| | | }; |
| | | |
| | |
| | | sig = this.env.signatures[sig].text; |
| | | sig = sig.replace(/\r\n/g, '\n'); |
| | | |
| | | p = this.env.sig_above ? message.indexOf(sig) : message.lastIndexOf(sig); |
| | | p = this.env.top_posting ? message.indexOf(sig) : message.lastIndexOf(sig); |
| | | if (p >= 0) |
| | | message = message.substring(0, p) + message.substring(p+sig.length, message.length); |
| | | } |
| | |
| | | sig = this.env.signatures[id].text; |
| | | sig = sig.replace(/\r\n/g, '\n'); |
| | | |
| | | if (this.env.sig_above) { |
| | | if (this.env.top_posting) { |
| | | if (p >= 0) { // in place of removed signature |
| | | message = message.substring(0, p) + sig + message.substring(p, message.length); |
| | | cursor_pos = p - 1; |
| | |
| | | sigElem = doc.createElement('div'); |
| | | sigElem.setAttribute('id', '_rc_sig'); |
| | | |
| | | if (this.env.sig_above) { |
| | | if (this.env.top_posting) { |
| | | // if no existing sig and top posting then insert at caret pos |
| | | editor.getWin().focus(); // correct focus in IE & Chrome |
| | | |
| | |
| | | this.env.search_id = null; |
| | | }; |
| | | |
| | | this.sent_successfully = function(type, msg) |
| | | this.sent_successfully = function(type, msg, target) |
| | | { |
| | | this.display_message(msg, type); |
| | | |
| | | if (this.env.extwin) { |
| | | var rc = this.opener(); |
| | | this.lock_form(this.gui_objects.messageform); |
| | | if (window.opener && !window.opener.closed && opener.rcmail) |
| | | opener.rcmail.display_message(msg, type); |
| | | if (rc) { |
| | | rc.display_message(msg, type); |
| | | // refresh the folder where sent message was saved |
| | | if (target && rc.env.task == 'mail' && rc.env.action == '' && rc.env.mailbox == target) |
| | | rc.command('checkmail'); |
| | | } |
| | | setTimeout(function(){ window.close() }, 1000); |
| | | } |
| | | else { |
| | |
| | | this.group_member_change('add', cid, dest, to.id); |
| | | else { |
| | | var lock = this.display_message(this.get_label('copyingcontact'), 'loading'), |
| | | post_data = {_cid: cid, _source: source, _to: dest, _togid: to.id, _gid: group}; |
| | | post_data = {_cid: cid, _source: this.env.source, _to: dest, _togid: to.id, _gid: group}; |
| | | |
| | | this.http_post('copy', post_data, lock); |
| | | } |
| | |
| | | // target is an addressbook |
| | | else if (to.id != source) { |
| | | var lock = this.display_message(this.get_label('copyingcontact'), 'loading'), |
| | | post_data = {_cid: cid, _source: source, _to: to.id, _gid: group}; |
| | | post_data = {_cid: cid, _source: this.env.source, _to: to.id, _gid: group}; |
| | | |
| | | this.http_post('copy', post_data, lock); |
| | | } |
| | |
| | | |
| | | // redirect to url specified in location header if not empty |
| | | var location_url = request.getResponseHeader("Location"); |
| | | if (location_url) |
| | | if (location_url && this.env.action != 'compose') // don't redirect on compose screen, contents might get lost (#1488926) |
| | | this.redirect(location_url); |
| | | |
| | | // 403 Forbidden response (CSRF prevention) - reload the page. |
| | | // In case there's a new valid session it will be used, otherwise |
| | | // login form will be presented (#1488960). |
| | | if (request.status == 403) { |
| | | (this.is_framed() ? parent : window).location.reload(); |
| | | return; |
| | | } |
| | | |
| | | // re-send keep-alive requests after 30 seconds |
| | | if (action == 'keep-alive') |
| | | setTimeout(function(){ ref.keep_alive(); ref.start_keepalive(); }, 30000); |
| | | }; |
| | | |
| | | // callback when an iframe finished loading |
| | | this.iframe_loaded = function(unlock) |
| | | { |
| | | this.set_busy(false, null, unlock); |
| | | |
| | | if (this.submit_timer) |
| | | clearTimeout(this.submit_timer); |
| | | }; |
| | | |
| | | // post the given form to a hidden iframe |
| | |
| | | /********* helper methods *********/ |
| | | /********************************************************/ |
| | | |
| | | // get window.opener.rcmail if available |
| | | this.opener = function() |
| | | { |
| | | // catch Error: Permission denied to access property rcmail |
| | | try { |
| | | if (window.opener && !opener.closed && opener.rcmail) |
| | | return opener.rcmail; |
| | | } |
| | | catch (e) {} |
| | | }; |
| | | |
| | | // check if we're in show mode or if we have a unique selection |
| | | // and return the message uid |
| | | this.get_single_uid = function() |