diff options
author | thomascube <thomas@roundcube.net> | 2009-11-02 09:58:14 +0000 |
---|---|---|
committer | thomascube <thomas@roundcube.net> | 2009-11-02 09:58:14 +0000 |
commit | 0207c45c90818e7c7df64ea52c61050850dee13d (patch) | |
tree | 89264d9dde1ca6337c4a5887084f66fb29a1c46b /program/js/app.js | |
parent | 31ddb5e5c2dccffea5a8b947eca7b62d79d9c338 (diff) |
More options for top posting feature (#1484272) using patch from Phil Weir
Diffstat (limited to 'program/js/app.js')
-rw-r--r-- | program/js/app.js | 206 |
1 files changed, 89 insertions, 117 deletions
diff --git a/program/js/app.js b/program/js/app.js index 3ada69990..dca295646 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -473,9 +473,6 @@ function rcube_webmail() this.init_address_input_events($("[name='_cc']")); this.init_address_input_events($("[name='_bcc']")); - if (!html_mode) - this.set_caret_pos(input_message, this.env.top_posting ? 0 : $(input_message).val().length); - // add signature according to selected identity if (input_from.attr('type') == 'select-one' && $("input[name='_draft_saveid']").val() == '' && !html_mode) { // if we have HTML editor, signature is added in callback @@ -975,10 +972,6 @@ function rcube_webmail() clearTimeout(this.request_timer); break; - case 'insert-sig': - this.change_identity($("[name='_from']")[0], true); - break; - case 'add-attachment': this.show_attachment_form(true); @@ -993,6 +986,10 @@ function rcube_webmail() this.remove_attachment(props); break; + case 'insert-sig': + this.change_identity($("[name='_from']")[0], true); + break; + case 'reply-all': case 'reply': var uid; @@ -2311,147 +2308,122 @@ function rcube_webmail() show_sig = this.env.show_sig; var id = obj.options[obj.selectedIndex].value; + var input_message = $("[name='_message']"); + var message = input_message.val(); + var new_message = ''; var is_html = ($("input[name='_is_html']").val() == '1'); - var sig; + var sig, p, len = message.length; + if (!this.env.identity) + this.env.identity = id + // enable manual signature insert if (this.env.signatures && this.env.signatures[id]) this.enable_command('insert-sig', true); - else { + else this.enable_command('insert-sig', false); - if (!this.env.signatures) - return true; - } - - if (!this.env.identity) - this.env.identity = id - - if (!show_sig) - return false; - - if (!is_html) - { - var input_message = $("[name='_message']"); - var message = input_message.val(); - var pos, cursor_pos, p = -1; + if (!is_html && show_sig) { // remove the 'old' signature - if (this.env.identity && this.env.signatures[this.env.identity]) - { + if (this.env.identity && this.env.signatures && this.env.signatures[this.env.identity]) { if (this.env.signatures[this.env.identity]['is_html']) sig = this.env.signatures[this.env.identity]['plain_text']; else sig = this.env.signatures[this.env.identity]['text']; + + if (sig.indexOf('-- ') != 0) + sig = '-- \n'+sig; + + p = message.lastIndexOf(sig); + if (p >= 0) { + if (this.env.sig_above) { + new_message = message.substring(0, p-1); + new_message = new_message.replace(/[\r\n]+$/, ''); + message = message.substring(p+sig.length, message.length); + } + else { + message = message.substring(0, p-1) + message.substring(p+sig.length, message.length); + } + } + } - if (this.env.top_posting) - p = message.indexOf(sig); - else { - if (sig.indexOf('-- ')!=0) - sig = '-- \n'+sig; - p = message.lastIndexOf(sig); - } - - if (p>=0) - message = message.substring(0, p) + message.substring(p+sig.length, message.length); - } - - input_message.get(0).focus(); + message = message.replace(/[\r\n]+$/, ''); + len = message.length; // add the new signature string - if (this.env.signatures[id]) - { + if (this.env.signatures && this.env.signatures[id]) { + sig = this.env.signatures[id]['text']; if (this.env.signatures[id]['is_html']) sig = this.env.signatures[id]['plain_text']; - else - sig = this.env.signatures[id]['text']; - - 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; - } - else if (pos = this.get_caret_pos(input_message.get(0))) { // at cursor position - message = message.substring(0, pos) + '\n' + sig + '\n' + message.substring(pos, message.length); - cursor_pos = pos; - } - else { // on top - cursor_pos = 0; - message = '\n\n' + sig + '\n' + message; - } - } - else { - message = message.replace(/[\r\n]+$/, ''); - - if (sig.indexOf('-- ')!=0) - sig = '-- \n'+sig; - cursor_pos = message.length ? message.length+1 : 0; - message += '\n\n' + sig; - } - } - input_message.val(message); + if (sig.indexOf('-- ') != 0) + sig = '-- \n'+sig; - // move cursor before the signature - if (typeof(cursor_pos) != 'undefined') - this.set_caret_pos(input_message.get(0), cursor_pos); + if (this.env.sig_above) { + message = message.replace(/^[\r\n]+/, ''); + message = new_message+'\n\n'+sig+'\n\n'+message; + } + else + message += '\n\n'+sig; + + if (len) + len += 1; + } } - // html - else + else if (show_sig) { var editor = tinyMCE.get(this.env.composebody); - var sigElem = editor.dom.get('_rc_sig'); - - // Append the signature as a div within the body - if (!sigElem) { - var body = editor.getBody(); - var doc = editor.getDoc(); - - sigElem = doc.createElement('div'); - sigElem.setAttribute('id', '_rc_sig'); - - if (this.env.top_posting) { - // if no existing sig and top posting then insert at caret pos - editor.getWin().focus(); // correct focus in IE - - var node = editor.selection.getNode(); - if (node.nodeName == 'BODY') { - // no real focus, insert at start - body.insertBefore(sigElem, body.firstChild); - body.insertBefore(doc.createElement('br'), body.firstChild); - } - else { - body.insertBefore(sigElem, node.nextSibling); - body.insertBefore(doc.createElement('br'), node.nextSibling); - } - } - else { - if (bw.ie) - // add empty line before signature on IE - body.appendChild(doc.createElement('br')); + if (this.env.signatures) + { + // Append the signature as a div within the body + var sigElem = editor.dom.get('_rc_sig'); + var newsig = ''; + var htmlsig = true; - body.appendChild(sigElem); + if (!sigElem) + { + // add empty line before signature on IE + if (bw.ie) + editor.getBody().appendChild(editor.getDoc().createElement('br')); + + sigElem = editor.getDoc().createElement('div'); + sigElem.setAttribute('id', '_rc_sig'); + if (this.env.sig_above) { + editor.getBody().insertBefore(sigElem, editor.getBody().firstChild); + editor.getBody().insertBefore(editor.getDoc().createElement('br'), editor.getBody().firstChild); + editor.getBody().insertBefore(editor.getDoc().createElement('br'), editor.getBody().firstChild); + } + else + editor.getBody().appendChild(sigElem); } - } - if (this.env.signatures[id]) + if (this.env.signatures[id]) { - if (this.env.signatures[id]['is_html']) { - sig = this.env.signatures[id]['text']; - if (!this.env.top_posting && this.env.signatures[id]['plain_text'].indexOf('-- ')!=0) - sig = '-- <br />' + sig; - } - else { - sig = this.env.signatures[id]['text']; - if (!this.env.top_posting && sig.indexOf('-- ')!=0) - sig = '-- \n' + sig; - sig = '<pre>' + sig + '</pre>'; + newsig = this.env.signatures[id]['text']; + htmlsig = this.env.signatures[id]['is_html']; + + if (newsig && !this.env.sig_above) { + if (htmlsig && this.env.signatures[id]['plain_text'].indexOf('-- ')!=0) + newsig = '<p>-- </p>' + newsig; + else if (!htmlsig && newsig.indexOf('-- ')!=0) + newsig = '-- \n' + newsig; } - - sigElem.innerHTML = sig; + } + + if (htmlsig) + sigElem.innerHTML = newsig; + else + sigElem.innerHTML = '<pre>' + newsig + '</pre>'; } } + input_message.val(message); + + // move cursor before the signature + if (!is_html) + this.set_caret_pos(input_message.get(0), (this.env.top_posting ? 0 : len)); + this.env.identity = id; return true; }; |