alecpl
2010-03-25 33e2e42321ef70c772ee180ed9e35397e922abac
program/js/app.js
@@ -489,8 +489,8 @@
      case 'menu-open':
      case 'menu-save':
   this.triggerEvent(command, {props:props});
   return false;
       this.triggerEvent(command, {props:props});
       return false;
        break;
      case 'open':
@@ -753,10 +753,11 @@
        break;
        
      case 'select-all':
        this.select_all_mode = props ? false : true;
        if (props == 'invert')
          this.message_list.invert_selection();
        else
          this.message_list.select_all(props);
          this.message_list.select_all(props == 'page' ? '' : props);
        break;
      case 'select-none':
@@ -1455,6 +1456,10 @@
      this.command('delete');
    else if (list.key_pressed == list.BACKSPACE_KEY)
      this.command('delete');
    else if (list.key_pressed == 33)
      this.command('previouspage');
    else if (list.key_pressed == 34)
      this.command('nextpage');
    else
      list.shiftkey = false;
    };
@@ -1833,9 +1838,10 @@
    // unselect selected messages
    this.last_selected = 0;
    if (this.message_list)
    if (this.message_list) {
      this.message_list.clear_selection();
      this.select_all_mode = false;
    }
    this.select_folder(mbox, this.env.mailbox);
    this.env.mailbox = mbox;
@@ -1925,7 +1931,7 @@
    if (!this.env.threading)
      return;
    var root = this.find_thread_root(uid);
    var root = this.message_list.find_root(uid);
    
    if (uid == root)
      return;
@@ -1945,17 +1951,6 @@
    this.set_unread_children(root);
  };
  // finds root message for specified thread
  this.find_thread_root = function(uid)
  {
    var r = this.message_list.rows[uid];
    if (r.parent_uid)
      return this.find_thread_root(r.parent_uid);
    else
      return uid;
  }
  // update thread indicators for all messages in a thread below the specified message
  // return number of removed/added root level messages
  this.update_thread = function (uid)
@@ -1973,7 +1968,7 @@
      count--;
    else if (row.unread) {
      // update unread_children for thread root
      var parent = this.find_thread_root(uid);
      var parent = this.message_list.find_root(uid);
      rows[parent].unread_children--;
      this.set_unread_children(parent);
      }
@@ -2254,8 +2249,8 @@
  // @private
  this._with_selected_messages = function(action, lock, add_url)
  {
    var a_uids = new Array();
    var count = 0;
    var a_uids = new Array(),
      count = 0;
    if (this.env.uid)
      a_uids[0] = this.env.uid;
@@ -2287,8 +2282,10 @@
      // remove threads from the end of the list
      this.delete_excessive_thread_rows();
    add_url += '&_uid='+this.uids_to_list(a_uids);
    // send request to server
    this.http_post(action, '_uid='+a_uids.join(',')+'&_mbox='+urlencode(this.env.mailbox)+add_url, lock);
    this.http_post(action, '_mbox='+urlencode(this.env.mailbox)+add_url, lock);
  };
  // set a specific flag to one or more messages
@@ -2355,7 +2352,7 @@
    for (var i=0; i<a_uids.length; i++)
      this.set_message(a_uids[i], 'unread', (flag=='unread' ? true : false));
    this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag='+flag);
    this.http_post('mark', '_uid='+this.uids_to_list(a_uids)+'&_flag='+flag);
    for (var i=0; i<a_uids.length; i++)
      this.update_thread_root(a_uids[i], flag);
@@ -2368,7 +2365,7 @@
    for (var i=0; i<a_uids.length; i++)
      this.set_message(a_uids[i], 'flagged', (flag=='flagged' ? true : false));
    this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag='+flag);
    this.http_post('mark', '_uid='+this.uids_to_list(a_uids)+'&_flag='+flag);
  };
  
  // mark all message rows as deleted/undeleted
@@ -2412,49 +2409,48 @@
    for (var i=0; i<a_uids.length; i++)
      this.set_message(a_uids[i], 'deleted', false);
    this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag=undelete');
    this.http_post('mark', '_uid='+this.uids_to_list(a_uids)+'&_flag=undelete');
    return true;
  };
  this.flag_as_deleted = function(a_uids)
  {
    var add_url = '';
    var r_uids = new Array();
    var rows = this.message_list ? this.message_list.rows : new Array();
    var count = 0;
    var add_url = '',
      r_uids = new Array(),
      rows = this.message_list ? this.message_list.rows : new Array(),
      count = 0;
    for (var i=0; i<a_uids.length; i++)
      {
    for (var i=0; i<a_uids.length; i++) {
      uid = a_uids[i];
      if (rows[uid])
        {
      if (rows[uid]) {
        if (rows[uid].unread)
          r_uids[r_uids.length] = uid;
   if (this.env.skip_deleted) {
     count += this.update_thread(uid);
       if (this.env.skip_deleted) {
         count += this.update_thread(uid);
          this.message_list.remove_row(uid, (this.env.display_next && i == this.message_list.selection.length-1));
     }
   else
     this.set_message(uid, 'deleted', true);
        }
       }
       else
         this.set_message(uid, 'deleted', true);
      }
    }
    // make sure there are no selected rows
    if (this.env.skip_deleted && this.message_list) {
      if(!this.env.display_next)
      this.message_list.clear_selection();
        this.message_list.clear_selection();
      if (count < 0)
        add_url += '&_count='+(count*-1);
      else if (count > 0) 
        // remove threads from the end of the list
        this.delete_excessive_thread_rows();
      }
    }
    add_url = '&_from='+(this.env.action ? this.env.action : '');
    
    // ??
    if (r_uids.length)
      add_url += '&_ruid='+r_uids.join(',');
      add_url += '&_ruid='+this.uids_to_list(r_uids);
    if (this.env.skip_deleted) {
      // also send search request to get the right messages 
@@ -2464,7 +2460,7 @@
        add_url += '&_next_uid='+this.env.next_uid;
    }
    
    this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag=delete'+add_url);
    this.http_post('mark', '_uid='+this.uids_to_list(a_uids)+'&_flag=delete'+add_url);
    return true;  
  };
@@ -2472,21 +2468,25 @@
  // argument should be a coma-separated list of uids
  this.flag_deleted_as_read = function(uids)
  {
    var icn_src;
    var rows = this.message_list ? this.message_list.rows : new Array();
    var str = String(uids);
    var a_uids = new Array();
    var icn_src, uid,
      rows = this.message_list ? this.message_list.rows : new Array(),
      str = String(uids),
      a_uids = str.split(',');
    a_uids = str.split(',');
    for (var uid, i=0; i<a_uids.length; i++)
      {
    for (var i=0; i<a_uids.length; i++) {
      uid = a_uids[i];
      if (rows[uid])
        this.set_message(uid, 'unread', false);
      }
  };
  // Converts array of message UIDs to comma-separated list for use in URL
  // with select_all mode checking
  this.uids_to_list = function(uids)
  {
    return this.select_all_mode ? '*' : uids.join(',');
  };
  /*********************************************************/
  /*********       mailbox folders methods         *********/