summaryrefslogtreecommitdiff
path: root/program/js/app.js
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2009-11-02 09:58:14 +0000
committerthomascube <thomas@roundcube.net>2009-11-02 09:58:14 +0000
commit0207c45c90818e7c7df64ea52c61050850dee13d (patch)
tree89264d9dde1ca6337c4a5887084f66fb29a1c46b /program/js/app.js
parent31ddb5e5c2dccffea5a8b947eca7b62d79d9c338 (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.js206
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;
};