alecpl
2009-12-03 3815e050e0e0ddafb919741426f3c36ebdadb9a8
program/js/app.js
@@ -472,7 +472,7 @@
    this.init_address_input_events(input_to);
    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);
@@ -481,6 +481,8 @@
        && !html_mode) {  // if we have HTML editor, signature is added in callback
      this.change_identity(input_from[0]);
    }
    else if (!html_mode)
      this.set_caret_pos(input_message, this.env.top_posting ? 0 : $(input_message).val().length);
    if (input_to.val() == '')
      input_to.focus();
@@ -975,10 +977,6 @@
        clearTimeout(this.request_timer);
        break;
      case 'insert-sig':
        this.change_identity($("[name='_from']")[0], true);
        break;
      case 'add-attachment':
        this.show_attachment_form(true);
        
@@ -991,6 +989,10 @@
      
      case 'remove-attachment':
        this.remove_attachment(props);
        break;
      case 'insert-sig':
        this.change_identity($("[name='_from']")[0], true);
        break;
      case 'reply-all':
@@ -2303,7 +2305,7 @@
    };
    
  this.change_identity = function(obj, show_sig)
    {
  {
    if (!obj || !obj.options)
      return false;
@@ -2311,150 +2313,122 @@
      show_sig = this.env.show_sig;
    var id = obj.options[obj.selectedIndex].value;
    var input_message = $("[name='_message']");
    var message = input_message.val();
    var is_html = ($("input[name='_is_html']").val() == '1');
    var sig;
    // enable manual signature insert
    if (this.env.signatures && this.env.signatures[id])
      this.enable_command('insert-sig', true);
    else {
      this.enable_command('insert-sig', false);
      if (!this.env.signatures)
        return true;
      }
    var sig, cursor_pos, p = -1;
    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;
    // enable manual signature insert
    if (this.env.signatures && this.env.signatures[id])
      this.enable_command('insert-sig', true);
    else
      this.enable_command('insert-sig', false);
    if (!is_html) {
      // remove the 'old' signature
      if (this.env.identity && 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 (show_sig && this.env.identity && this.env.signatures && this.env.signatures[this.env.identity]) {
        sig = this.env.signatures[this.env.identity].is_html ? this.env.signatures[this.env.identity].plain_text : this.env.signatures[this.env.identity].text;
        if (sig.indexOf('-- ') != 0)
          sig = '-- \n'+sig;
   if (this.env.top_posting)
          p = message.indexOf(sig);
        else {
     if (sig.indexOf('-- ')!=0)
            sig = '-- \n'+sig;
          p = message.lastIndexOf(sig);
     }
        if (p>=0)
        p = this.env.sig_above ? message.indexOf(sig) : message.lastIndexOf(sig);
        if (p >= 0)
          message = message.substring(0, p) + message.substring(p+sig.length, message.length);
   }
      input_message.get(0).focus();
      }
      // add the new signature string
      if (this.env.signatures[id])
        {
        if (this.env.signatures[id]['is_html'])
          sig = this.env.signatures[id]['plain_text'];
   else
          sig = this.env.signatures[id]['text'];
      if (show_sig && this.env.signatures && this.env.signatures[id]) {
        sig = this.env.signatures[id]['is_html'] ? this.env.signatures[id]['plain_text'] : this.env.signatures[id]['text'];
        if (sig.indexOf('-- ') != 0)
          sig = '-- \n'+sig;
   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;
     }
        if (this.env.sig_above) {
          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\n' + message.substring(pos, message.length);
            cursor_pos = pos;
          }
          else { // on top
            cursor_pos = 0;
            message = '\n\n' + sig + '\n\n' + message.replace(/^[\r\n]+/, '');
          }
        }
        else {
          message = message.replace(/[\r\n]+$/, '');
          cursor_pos = !this.env.top_posting && message.length ? message.length+1 : 0;
          message += '\n\n' + sig;
        }
      }
      else
        cursor_pos = this.env.top_posting ? 0 : message.length;
      input_message.val(message);
      // move cursor before the signature
      if (typeof(cursor_pos) != 'undefined')
        this.set_caret_pos(input_message.get(0), cursor_pos);
      }
    // html
    else
      {
      this.set_caret_pos(input_message.get(0), cursor_pos);
    }
    else if (is_html && this.env.signatures) {  // html
      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');
        var body = editor.getBody();
        var doc = editor.getDoc();
        sigElem = doc.createElement('div');
        sigElem.setAttribute('id', '_rc_sig');
        if (this.env.top_posting) {
        if (this.env.sig_above) {
          // 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
          if (bw.ie)  // add empty line before signature on IE
            body.appendChild(doc.createElement('br'));
          body.appendChild(sigElem);
          }
   }
      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>';
          }
        sigElem.innerHTML = sig;
        }
      }
      if (this.env.signatures[id]) {
        if (this.env.signatures[id].is_html) {
          sig = this.env.signatures[id].text;
          if (this.env.signatures[id].plain_text.indexOf('-- ') != 0)
            sig = '-- <br />' + sig;
        }
        else {
          sig = this.env.signatures[id].text;
          if (sig.indexOf('-- ') != 0)
            sig = '-- \n' + sig;
          sig = '<pre>' + sig + '</pre>';
        }
        sigElem.innerHTML = sig;
      }
    }
    this.env.identity = id;
    return true;
    };
  };
  this.show_attachment_form = function(a)
    {
@@ -3859,7 +3833,7 @@
        cell.id = 'rcm'+col;
        }
      else if (col == 'subject' && this.message_list)
        this.message_list.subject_col = n+1;
        this.message_list.subject_col = n;
      }
  };