svncommit
2006-06-29 a894ba5029a09fb9d0453b5cf9c944ce313f8a48
program/js/app.js
@@ -123,7 +123,7 @@
          }
        // enable mail commands
        this.enable_command('list', 'compose', 'add-contact', 'search', 'reset-search', true);
        this.enable_command('list', 'checkmail', 'compose', 'add-contact', 'search', 'reset-search', true);
        
        if (this.env.action=='show')
          {
@@ -143,9 +143,11 @@
        if (this.env.action=='compose')
          {
          this.enable_command('add-attachment', 'send-attachment', 'send', true);
          this.enable_command('add-attachment', 'send-attachment', 'remove-attachment', 'send', true);
          if (this.env.spellcheck)
            this.enable_command('spellcheck', true);
     if (this.env.drafts_mailbox)
       this.enable_command('savedraft', true);
          }
          
        if (this.env.messagecount)
@@ -209,7 +211,7 @@
          this.enable_command('save', true);
          
        if (this.env.action=='folders')
          this.enable_command('subscribe', 'unsubscribe', 'create-folder', 'delete-folder', true);
          this.enable_command('subscribe', 'unsubscribe', 'create-folder', 'rename-folder', 'delete-folder', true);
          
        var identities_list = this.gui_objects.identitieslist;
        if (identities_list)
@@ -611,11 +613,17 @@
          {
          if (this.env.search_request<0 || (this.env.search_request && props != this.env.mailbox))
            this.reset_qsearch();
     // Reset message list header, unless returning from compose/read/etc
     if (this.env.mailbox != props && this.message_rows)
       this.clear_message_list_header();
          this.list_mailbox(props);
          }
        else if (this.task=='addressbook')
          this.list_contacts();
        break;
      case 'sort':
        // get the type of sorting
@@ -676,7 +684,17 @@
          {
          var uid = this.get_single_uid();
          if (uid && (!this.env.uid || uid != this.env.uid))
            this.show_message(uid);
       {
            if (this.env.mailbox==this.env.drafts_mailbox)
              {
              this.set_busy(true);
              location.href = this.env.comm_path+'&_action=compose&_draft_uid='+uid+'&_mbox='+escape(this.env.mailbox);
              }
            else
              {
              this.show_message(uid);
         }
       }
          }
        else if (this.task=='addressbook')
          {
@@ -830,12 +848,20 @@
          //location.href = this.env.comm_path+'&_action=show&_uid='+this.env.prev_uid+'&_mbox='+this.env.mailbox;
        break;
      
      case 'checkmail':
        this.check_for_recent();
        break;
      
      case 'compose':
        var url = this.env.comm_path+'&_action=compose';
        if (this.task=='mail' && this.env.mailbox==this.env.drafts_mailbox)
          {
          var uid = this.get_single_uid();
          url += '&_draft_uid='+uid+'&_mbox='+escape(this.env.mailbox);
          }
        // modify url if we're in addressbook
        if (this.task=='addressbook')
        else if (this.task=='addressbook')
          {
          url = this.get_task_url('mail', url);            
          var a_cids = new Array();
@@ -886,6 +912,19 @@
          this.env.spellcheck.spellCheck(this.env.spellcheck.check_link);
        break;
      case 'savedraft':
        if (!this.gui_objects.messageform)
          break;
   // if saving Drafts is disabled in main.inc.php
   if (!this.env.drafts_mailbox)
     break;
        this.set_busy(true, 'savingmessage');
        var form = this.gui_objects.messageform;
        form.submit();
        break;
      case 'send':
        if (!this.gui_objects.messageform)
          break;
@@ -896,6 +935,7 @@
        // all checks passed, send message
        this.set_busy(true, 'sendingmessage');
        var form = this.gui_objects.messageform;
   form._draft.value='';
        form.submit();
        break;
@@ -904,6 +944,10 @@
        
      case 'send-attachment':
        this.upload_file(props)      
        break;
      case 'remove-attachment':
        this.remove_attachment(props);
        break;
      case 'reply-all':
@@ -1001,6 +1045,10 @@
        
      case 'create-folder':
        this.create_folder(props);
        break;
      case 'rename-folder':
        this.rename_folder(props);
        break;
      case 'delete-folder':
@@ -1171,7 +1219,15 @@
    // row was double clicked
    if (this.task=='mail' && this.list_rows && this.list_rows[id].clicked && this.in_selection(id))
      {
      this.show_message(id);
      if (this.env.mailbox==this.env.drafts_mailbox)
        {
        this.set_busy(true);
        location.href = this.env.comm_path+'&_action=compose&_draft_uid='+id+'&_mbox='+escape(this.env.mailbox);
        }
      else
        {
        this.show_message(id);
        }
      return false;
      }
    else if (this.task=='addressbook')
@@ -1293,8 +1349,16 @@
    // enable/disable commands for message
    if (this.task=='mail')
      {
      this.enable_command('show', 'reply', 'reply-all', 'forward', 'print', selected);
      this.enable_command('delete', 'moveto', this.selection.length>0 ? true : false);
      if (this.env.mailbox==this.env.drafts_mailbox)
   {
   this.enable_command('show', selected);
   this.enable_command('delete', this.selection.length>0 ? true : false);
        }
      else
        {
        this.enable_command('show', 'reply', 'reply-all', 'forward', 'print', selected);
        this.enable_command('delete', 'moveto', this.selection.length>0 ? true : false);
        }
      }
    else if (this.task=='addressbook')
      {
@@ -1505,6 +1569,7 @@
  this.clear_message_list = function()
    {
    var table = this.gui_objects.messagelist;
    var tbody = document.createElement('TBODY');
    table.insertBefore(tbody, table.tBodies[0]);
    table.removeChild(table.tBodies[1]);
@@ -1514,6 +1579,18 @@
    
    };
  this.clear_message_list_header = function()
    {
    var table = this.gui_objects.messagelist;
    var colgroup = document.createElement('COLGROUP');
    table.removeChild(table.colgroup);
    table.insertBefore(colgroup, table.thead);
    var thead = document.createElement('THEAD');
    table.removeChild(table.thead);
    table.insertBefore(thead, table.tBodies[0]);
    };
  this.expunge_mailbox = function(mbox)
    {
@@ -1594,7 +1671,6 @@
      lock = true;
      this.set_busy(true, 'movingmessage');
      }
    // send request to server
    this.http_request('moveto', '_uid='+a_uids.join(',')+'&_mbox='+escape(this.env.mailbox)+'&_target_mbox='+escape(mbox)+'&_from='+(this.env.action ? this.env.action : ''), lock);
    };
@@ -1907,12 +1983,15 @@
    var message = input_message ? input_message.value : '';
    var sig, p;
    if (!this.env.identity)
      this.env.identity = id
    // remove the 'old' signature
    if (this.env.identity && this.env.signatures && this.env.signatures[this.env.identity])
      {
      sig = this.env.signatures[this.env.identity];
      if (sig.indexOf('-- ')!=0)
        sig = '-- \n'+sig;
      if (sig.indexOf('--')!=0)
        sig = '--\n'+sig;
      p = message.lastIndexOf(sig);
      if (p>=0)
@@ -1923,8 +2002,8 @@
    if (this.env.signatures && this.env.signatures[id])
      {
      sig = this.env.signatures[id];
      if (sig.indexOf('-- ')!=0)
        sig = '-- \n'+sig;
      if (sig.indexOf('--')!=0)
        sig = '--\n'+sig;
      message += '\n'+sig;
      }
@@ -2017,17 +2096,36 @@
  // add file name to attachment list
  // called from upload page
  this.add2attachment_list = function(name)
  this.add2attachment_list = function(name,content)
    {
    if (!this.gui_objects.attachmentlist)
      return false;
      
    var li = document.createElement('LI');
    li.innerHTML = name;
    li.id = name;
    li.innerHTML = content;
    this.gui_objects.attachmentlist.appendChild(li);
    return true;
    };
  this.remove_from_attachment_list = function(name)
    {
    if (!this.gui_objects.attachmentlist)
      return false;
    var list = this.gui_objects.attachmentlist.getElementsByTagName("li");
    for (i=0;i<list.length;i++)
      if (list[i].id == name)
   this.gui_objects.attachmentlist.removeChild(list[i]);
    }
  this.remove_attachment = function(name)
    {
    if (name)
      this.http_request('remove-attachment', '_filename='+escape(name));
    return true;
    }
  // send remote request to add a new contact
  this.add_contact = function(value)
@@ -2532,6 +2630,20 @@
      form.elements['_folder_name'].focus();
    };
  this.rename_folder = function(props)
    {
    var form;
    if ((form = this.gui_objects.editform) && form.elements['_folder_oldname'] && form.elements['_folder_newname'])
      {
      oldname = form.elements['_folder_oldname'].value;
      newname = form.elements['_folder_newname'].value;
      }
    if (oldname && newname)
      this.http_request('rename-folder', '_folder_oldname='+escape(oldname)+'&_folder_newname='+escape(newname));
    };
  this.delete_folder = function(folder)
    {
@@ -2551,6 +2663,21 @@
    var row;
    if (id && (row = document.getElementById(id)))
      row.style.display = 'none';    
    // remove folder from rename-folder list
    var form;
    if ((form = this.gui_objects.editform) && form.elements['_folder_oldname'])
      {
      for (var i=0;i<form.elements['_folder_oldname'].options.length;i++)
        {
        if (form.elements['_folder_oldname'].options[i].value == folder)
     {
          form.elements['_folder_oldname'].options[i] = null;
     break;
          }
        }
      }
      form.elements['_folder_newname'].value='';
    };
@@ -2614,16 +2741,25 @@
   // add a new folder to the subscription list by cloning a folder row
   this.add_folder_row = function(name)
     {
     name = name.replace('\\',"");
     if (!this.gui_objects.subscriptionlist)
       return false;
     var tbody = this.gui_objects.subscriptionlist.tBodies[0];
     var id = tbody.childNodes.length+1;
     // clone a table row
     var row = this.clone_table_row(tbody.rows[0]);
     row.id = 'rcmrow'+id;
     tbody.appendChild(row);
     if (!tbody.rows[0])
       {
       // Refresh to create the first table row
       location.href = this.env.comm_path+'&_action=folders';
       }
     else
       {
       // clone a table row if there are existing rows
       var row = this.clone_table_row(tbody.rows[0]);
       row.id = 'rcmrow'+id;
       tbody.appendChild(row);
       }
     // add to folder/row-ID map
     this.env.subscriptionrows[row.id] = name;
@@ -2636,11 +2772,15 @@
       row.cells[1].firstChild.checked = true;
       }
     if (row.cells[2].firstChild.tagName=='A')
       row.cells[2].firstChild.onclick = new Function(this.ref+".command('delete-folder','"+name+"')");
       row.cells[2].firstChild.onclick = new Function(this.ref+".command('delete-folder','"+name.replace('\'','\\\'')+"')");
    var form;
    if ((form = this.gui_objects.editform) && form.elements['_folder_name'])
      form.elements['_folder_name'].value = '';
     var form;
     if ((form = this.gui_objects.editform) && form.elements['_folder_name'])
       form.elements['_folder_name'].value = '';
     // add new folder to rename-folder list
     form.elements['_folder_oldname'].options[form.elements['_folder_oldname'].options.length] = new Option(name,name);
     };
@@ -2743,6 +2883,26 @@
      }
    };
  // mouse down on button
  this.button_sel = function(command, id)
    {
    var a_buttons = this.buttons[command];
    var button, img;
    if(!a_buttons || !a_buttons.length)
      return;
    for(var n=0; n<a_buttons.length; n++)
      {
      button = a_buttons[n];
      if(button.id==id && button.status=='act')
        {
        img = document.getElementById(button.id);
        if (img && button.sel)
          img.src = button.sel;
        }
      }
    };
  // mouse out of button
  this.button_out = function(command, id)
@@ -3129,8 +3289,7 @@
      ctype = ctype_array[0];
    }
    if (request_obj.__lock)
      this.set_busy(false);
    this.set_busy(false);
  console(request_obj.get_text());
@@ -3184,6 +3343,7 @@
  // send periodic request to check for recent messages
  this.check_for_recent = function()
    {
    this.set_busy(true, 'checkingmail');
    var d = new Date();
    this.http_request('check-recent', '_t='+d.getTime());
    };