alecpl
2008-04-07 d41d67add6d2bc226544148730928ca31a2c4313
program/js/app.js
@@ -488,7 +488,7 @@
        break;
      case 'logout':
        this.goto_url('logout', true);
        this.goto_url('logout', '', true);
        break;      
      // commands to switch task
@@ -892,7 +892,7 @@
          {
            setTimeout(function(){ ref.printwin.focus(); }, 20);
            if (this.env.action != 'show')
              this.toggle_read_status('read', [uid]);
              this.mark_message('read', uid);
          }
        }
        break;
@@ -1486,6 +1486,7 @@
  this.mark_message = function(flag, uid)
    {
    var a_uids = new Array();
    var r_uids = new Array();
    var selection = this.message_list ? this.message_list.get_selection() : new Array();
    
    if (uid)
@@ -1496,26 +1497,35 @@
      {
      for (var id, n=0; n<selection.length; n++)
        {
        id = selection[n];
        if ((flag=='read' && this.message_list.rows[id].unread) || (flag=='unread' && !this.message_list.rows[id].unread)
            || (flag=='delete' && !this.message_list.rows[id].deleted) || (flag=='undelete' && this.message_list.rows[id].deleted))
          a_uids[a_uids.length] = id;
         a_uids[a_uids.length] = selection[n];
        }
      }
    for (var id, n=0; n<a_uids.length; n++)
      {
        id = a_uids[n];
        if ((flag=='read' && this.message_list.rows[id].unread)
       || (flag=='unread' && !this.message_list.rows[id].unread)
            || (flag=='delete' && !this.message_list.rows[id].deleted)
       || (flag=='undelete' && this.message_list.rows[id].deleted))
     {
       r_uids[r_uids.length] = id;
     }
      }
    
    // nothing to do
    if (!a_uids.length)
    if (!r_uids.length)
      return;
      
    switch (flag)
      {
        case 'read':
        case 'unread':
          this.toggle_read_status(flag, a_uids);
          this.toggle_read_status(flag, r_uids);
          break;
        case 'delete':
        case 'undelete':
          this.toggle_delete_status(a_uids);
          this.toggle_delete_status(r_uids);
          break;
      }
    };
@@ -1525,16 +1535,12 @@
  {
    // mark all message rows as read/unread
    var icn_src;
    var res_uids = new Array();
    var rows = this.message_list.rows;
    for (var i=0; i<a_uids.length; i++)
      {
      uid = a_uids[i];
      // check if flag isn't set yet
      if (rows[uid] && ((flag=='unread' && !rows[uid].unread) || (flag=='read' && rows[uid].unread)))
      if (rows[uid])
        {
        res_uids[res_uids.length] = uid;
        rows[uid].unread = (flag=='unread' ? true : false);
        
        if (rows[uid].classname.indexOf('unread')<0 && rows[uid].unread)
@@ -1561,15 +1567,14 @@
        }
      }
    if (res_uids.length)
      this.http_post('mark', '_uid='+res_uids.join(',')+'&_flag='+flag);
    this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag='+flag);
  };
  
  // mark all message rows as deleted/undeleted
  this.toggle_delete_status = function(a_uids)
  {
    if (this.env.read_when_deleted)
      this.toggle_read_status('read',a_uids);
      this.mark_message('read',a_uids);
    // if deleting message from "view message" don't bother with delete icon
    if (this.env.action == "show")
@@ -2825,59 +2830,17 @@
  this.subscribe_folder = function(folder)
    {
    var form;
    if ((form = this.gui_objects.editform) && form.elements['_unsubscribed'])
      this.change_subscription('_unsubscribed', '_subscribed', 'subscribe');
    else if (folder)
      this.http_post('subscribe', '_mboxes='+urlencode(folder));
    if (folder)
      this.http_post('subscribe', '_mbox='+urlencode(folder));
    };
  this.unsubscribe_folder = function(folder)
    {
    var form;
    if ((form = this.gui_objects.editform) && form.elements['_subscribed'])
      this.change_subscription('_subscribed', '_unsubscribed', 'unsubscribe');
    else if (folder)
      this.http_post('unsubscribe', '_mboxes='+urlencode(folder));
    if (folder)
      this.http_post('unsubscribe', '_mbox='+urlencode(folder));
    };
    
  this.change_subscription = function(from, to, action)
    {
    var form;
    if (form = this.gui_objects.editform)
      {
      var a_folders = new Array();
      var list_from = form.elements[from];
      for (var i=0; list_from && i<list_from.options.length; i++)
        {
        if (list_from.options[i] && list_from.options[i].selected)
          {
          a_folders[a_folders.length] = list_from.options[i].value;
          list_from[i] = null;
          i--;
          }
        }
      // yes, we have some folders selected
      if (a_folders.length)
        {
        var list_to = form.elements[to];
        var index;
        for (var n=0; n<a_folders.length; n++)
          {
          index = list_to.options.length;
          list_to[index] = new Option(a_folders[n]);
          }
        this.http_post(action, '_mboxes='+urlencode(a_folders.join(',')));
        }
      }
    };
  // helper method to find a specific mailbox row ID
  this.get_folder_row_id = function(folder)
@@ -3490,24 +3453,38 @@
    // process the response data according to the sent action
    switch (request_obj.__action)
      {
      case 'delete':
      case 'moveto':
        if (this.env.action=='show')
          this.command('list');
        else if (this.message_list)
          this.message_list.init();
        break;
      case 'purge':
      case 'expunge':
   if (!this.env.messagecount)
         {
       // clear preview pane content
       if (this.env.contentframe)
         this.show_contentframe(false);
       // disable commands useless when mailbox is empty
       this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'mark', 'viewsource',
         'print', 'load-attachment', 'purge', 'expunge', 'select-all', 'select-none', 'sort', false);
     }
   break;
      case 'list':
        if (this.env.messagecount)
     this.enable_command('purge', (this.env.mailbox==this.env.trash_mailbox || this.env.mailbox==this.env.junk_mailbox));
   this.enable_command('sort', (this.env.messagecount > 0));
   this.msglist_select(this.message_list);
      case 'expunge':
        this.enable_command('select-all', 'select-none', 'expunge', this.env.messagecount ? true : false);
        break;
      case 'check-recent':
      case 'getunread':
   this.enable_command('show', 'expunge', 'select-all', 'select-none', 'sort', (this.env.messagecount > 0));
   this.enable_command('purge', (this.env.messagecount && (this.env.mailbox==this.env.trash_mailbox || this.env.mailbox==this.env.junk_mailbox)));
   break;
      }
    request_obj.reset();