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);
      }
@@ -2203,32 +2198,38 @@
  // delete selected messages from the current mailbox
  this.delete_messages = function()
    {
    var selection = this.message_list ? this.message_list.get_selection() : new Array();
  {
    var selection = this.message_list ? $.merge([], this.message_list.get_selection()) : new Array();
    // exit if no mailbox specified or if selection is empty
    if (!this.env.uid && !selection.length)
      return;
    // also select childs of collapsed rows
    for (var uid, i=0; i < selection.length; i++) {
      uid = selection[i];
      if (this.message_list.rows[uid].has_children && !this.message_list.rows[uid].expanded)
        this.message_list.select_childs(uid);
    }
    // if config is set to flag for deletion
    if (this.env.flag_for_deletion) {
      this.mark_message('delete');
      return false;
      }
    }
    // if there isn't a defined trash mailbox or we are in it
    else if (!this.env.trash_mailbox || this.env.mailbox == this.env.trash_mailbox) 
      this.permanently_remove_messages();
    // if there is a trash mailbox defined and we're not currently in it
    else {
      // if shift was pressed delete it immediately
      if (this.message_list && this.message_list.shiftkey)
        {
      if (this.message_list && this.message_list.shiftkey) {
        if (confirm(this.get_label('deletemessagesconfirm')))
          this.permanently_remove_messages();
        }
      }
      else
        this.move_messages(this.env.trash_mailbox);
      }
    }
    return true;
  };
@@ -2248,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;
@@ -2260,7 +2261,7 @@
      for (var n=0; n<selection.length; n++) {
        id = selection[n];
        a_uids[a_uids.length] = id;
   count += this.update_thread(id);
        count += this.update_thread(id);
        this.message_list.remove_row(id, (this.env.display_next && n == selection.length-1));
      }
      // make sure there are no selected rows
@@ -2281,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
@@ -2349,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);
@@ -2362,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
@@ -2406,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 
@@ -2458,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;  
  };
@@ -2466,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         *********/