svncommit
2008-08-29 7f9d71bf1fb0f0589f328366984e30d342a08882
program/js/app.js
@@ -151,7 +151,7 @@
          this.set_message_coltypes(this.env.coltypes);
        // enable mail commands
        this.enable_command('list', 'checkmail', 'compose', 'add-contact', 'search', 'reset-search', true);
        this.enable_command('list', 'checkmail', 'compose', 'add-contact', 'search', 'reset-search', 'collapse-folder', true);
        if (this.env.search_text != null && document.getElementById('quicksearchbox') != null)
          document.getElementById('quicksearchbox').value = this.env.search_text;
@@ -982,6 +982,11 @@
          this.list_contacts(this.env.source);
        break;
      // collapse/expand folder
      case 'collapse-folder':
        if (props)
          this.collapse_folder(props);
        break;
      // user settings commands
      case 'preferences':
@@ -1142,6 +1147,34 @@
      this.set_classname(li, 'droptarget', false);
    }
  this.collapse_folder = function(id)
    {
    var div;
    if ((li = this.get_folder_li(id)) &&
        (div = li.getElementsByTagName("div")[0]) &&
        (div.className.match(/collapsed/) || div.className.match(/expanded/)))
      {
      var ul = li.getElementsByTagName("ul")[0];
      if (div.className.match(/collapsed/))
        {
        ul.style.display = '';
        this.set_classname(div, 'collapsed', false);
        this.set_classname(div, 'expanded', true);
        var reg = new RegExp('&'+escape(id)+'&');
        this.set_env('collapsed_folders', this.env.collapsed_folders.replace(reg, ''));
        }
      else
        {
        ul.style.display = 'none';
        this.set_classname(div, 'expanded', false);
        this.set_classname(div, 'collapsed', true);
        this.set_env('collapsed_folders', this.env.collapsed_folders+'&'+escape(id)+'&');
        }
      this.http_post('save-pref', '_name=collapsed_folders&_value='+escape(this.env.collapsed_folders));
      this.set_unread_count_display(id, false);
      }
    }
  // onmouseup handler for folder list item
  this.folder_mouse_up = function(id)
    {
@@ -1189,7 +1222,7 @@
    // start timer for message preview (wait for double click)
    if (selected && this.env.contentframe && !list.multi_selecting)
      this.preview_timer = window.setTimeout(function(){ ref.msglist_get_preview(); }, this.dblclick_time + 10);
      this.preview_timer = window.setTimeout(function(){ ref.msglist_get_preview(); }, 200);
    else if (this.env.contentframe)
      this.show_contentframe(false);
    };
@@ -2002,8 +2035,12 @@
      // remove the 'old' signature
      if (this.env.identity && this.env.signatures && this.env.signatures[this.env.identity])
        {
        sig = this.env.signatures[this.env.identity]['text'];
        if (sig.indexOf('-- ')!=0)
        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);
@@ -2028,24 +2065,30 @@
      {
      var editor = tinyMCE.get('compose-body');
      if (this.env.signatures && this.env.signatures[id])
      if (this.env.signatures)
        {
        // Append the signature as a span within the body
        // Append the signature as a div within the body
        var sigElem = editor.dom.get("_rc_sig");
   var newsig = '';
   var htmlsig = true;
        if (!sigElem)
          {
          sigElem = editor.getDoc().createElement("span");
          sigElem = editor.getDoc().createElement("div");
          sigElem.setAttribute("id", "_rc_sig");
          editor.getBody().appendChild(sigElem);
          }
        if (this.env.signatures[id]['is_html'])
          {
          sigElem.innerHTML = this.env.signatures[id]['text'];
          }
   if (this.env.signatures[id])
     {
     newsig = this.env.signatures[id]['text'];
     htmlsig = this.env.signatures[id]['is_html'];
     }
        if (htmlsig)
          sigElem.innerHTML = newsig;
        else
          {
          sigElem.innerHTML = '<pre>' + this.env.signatures[id]['text'] + '</pre>';
          }
          sigElem.innerHTML = '<pre>' + newsig + '</pre>';
        }
      }
@@ -2460,7 +2503,7 @@
      var id, frame, ref = this;
      if (id = list.get_single_selection())
        this.preview_timer = window.setTimeout(function(){ ref.load_contact(id, 'show'); }, this.dblclick_time + 10);
        this.preview_timer = window.setTimeout(function(){ ref.load_contact(id, 'show'); }, 200);
      else if (this.env.contentframe)
        this.show_contentframe(false);
@@ -3440,9 +3483,30 @@
    var reg, text_obj, item;
    if (item = this.get_folder_li(mbox))
      {
      // set new text
      text_obj = item.firstChild;
      item.setAttribute('count', count);
      this.set_unread_count_display(mbox, set_title);
      }
    }
  // update the mailbox count display
  this.set_unread_count_display = function(mbox, set_title)
    {
    var reg, text_obj, item, count, div, children;
    if (item = this.get_folder_li(mbox))
      {
      count = parseInt(item.getAttribute('count') ? item.getAttribute('count') : 0);
      text_obj = item.getElementsByTagName('a')[0];
      reg = /\s+\([0-9]+\)$/i;
      div = item.getElementsByTagName('div')[0];
      if (div.className.match(/collapsed/))
        {
        // add children's counters
        children = item.getElementsByTagName('li');
        for (var i=0; i<children.length; i++)
          count = count+parseInt(children[i].getAttribute('count') ? children[i].getAttribute('count') : 0);
        }
      if (count && text_obj.innerHTML.match(reg))
        text_obj.innerHTML = text_obj.innerHTML.replace(reg, ' ('+count+')');
@@ -3451,6 +3515,11 @@
      else
        text_obj.innerHTML = text_obj.innerHTML.replace(reg, '');
      // set parent's display
      reg = new RegExp(RegExp.escape(this.env.delimiter) + '[^' + RegExp.escape(this.env.delimiter) + ']+');
      if (mbox.match(reg))
        this.set_unread_count_display(mbox.replace(reg, ''), false);
      // set the right classes
      this.set_classname(item, 'unread', count>0 ? true : false);
      }