diff options
| author | Aleksander Machniak <alec@alec.pl> | 2015-04-16 10:55:32 +0200 | 
|---|---|---|
| committer | Aleksander Machniak <alec@alec.pl> | 2015-04-16 10:55:32 +0200 | 
| commit | 09225a41ec7135031a4c0304b8dcdccd45904939 (patch) | |
| tree | d751cfdae71b8c43bee39f785b890ead89f8d812 /program/js | |
| parent | 489409f30f2495a1dff43ead9d201a4b28cdbe82 (diff) | |
Add option to place signature at bottom of the quoted text even in top-posting mode [sig_below]
Diffstat (limited to 'program/js')
| -rw-r--r-- | program/js/app.js | 6 | ||||
| -rw-r--r-- | program/js/editor.js | 51 | 
2 files changed, 29 insertions, 28 deletions
diff --git a/program/js/app.js b/program/js/app.js index 64fd548c9..b6b4d319c 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -3384,14 +3384,16 @@ function rcube_webmail()      if (!html_mode) {        pos = this.env.top_posting ? 0 : input_message.value.length; -      this.set_caret_pos(input_message, pos);        // add signature according to selected identity -      // if we have HTML editor, signature is added in callback +      // if we have HTML editor, signature is added in a callback        if (input_from.prop('type') == 'select-one') {          this.change_identity(input_from[0]);        } +      // set initial cursor position +      this.set_caret_pos(input_message, pos); +        // scroll to the bottom of the textarea (#1490114)        if (pos) {          $(input_message).scrollTop(input_message.scrollHeight); 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();          }        }  | 
