summaryrefslogtreecommitdiff
path: root/program/js/editor.js
diff options
context:
space:
mode:
Diffstat (limited to 'program/js/editor.js')
-rw-r--r--program/js/editor.js51
1 files changed, 25 insertions, 26 deletions
diff --git a/program/js/editor.js b/program/js/editor.js
index 296a161ca..abd800ca3 100644
--- a/program/js/editor.js
+++ b/program/js/editor.js
@@ -485,32 +485,37 @@ function rcube_text_editor(config, id)
sig = rcmail.env.signatures[id].text;
sig = sig.replace(/\r\n/g, '\n');
- if (rcmail.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 (!message) { // empty message
- cursor_pos = 0;
- message = '\n\n' + sig;
- }
- else if (pos = rcmail.get_caret_pos(input_message.get(0))) { // at cursor position
+ // in place of removed signature
+ if (p >= 0) {
+ message = message.substring(0, p) + sig + message.substring(p, message.length);
+ cursor_pos = p - 1;
+ }
+ // empty message
+ else if (!message) {
+ message = '\n\n' + sig;
+ cursor_pos = 0;
+ }
+ else if (rcmail.env.top_posting && !rcmail.env.sig_below) {
+ // at cursor position
+ if (pos = rcmail.get_caret_pos(input_message.get(0))) {
message = message.substring(0, pos) + '\n' + sig + '\n\n' + message.substring(pos, message.length);
cursor_pos = pos;
}
- else { // on top
- cursor_pos = 0;
+ // on top
+ else {
message = '\n\n' + sig + '\n\n' + message.replace(/^[\r\n]+/, '');
+ cursor_pos = 0;
}
}
else {
message = message.replace(/[\r\n]+$/, '');
- cursor_pos = !rcmail.env.top_posting && message.length ? message.length+1 : 0;
+ cursor_pos = !rcmail.env.top_posting && message.length ? message.length + 1 : 0;
message += '\n\n' + sig;
}
}
- else
+ else {
cursor_pos = rcmail.env.top_posting ? 0 : message.length;
+ }
input_message.val(message);
@@ -528,24 +533,18 @@ function rcube_text_editor(config, id)
sigElem = doc.createElement('div');
sigElem.setAttribute('id', '_rc_sig');
- if (rcmail.env.top_posting) {
- // if no existing sig and top posting then insert at caret pos
+ if (rcmail.env.top_posting && !rcmail.env.sig_below) {
this.editor.getWin().focus(); // correct focus in IE & Chrome
var node = this.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);
- }
+
+ // insert at start or at cursor position if found
+ body.insertBefore(sigElem, node.nodeName == 'BODY' ? body.firstChild : node.nextSibling);
+ body.insertBefore(doc.createElement('p'), sigElem);
}
else {
body.appendChild(sigElem);
- position_element = $(sigElem).prev();
+ position_element = rcmail.env.top_posting ? body.firstChild : $(sigElem).prev();
}
}