Aleksander Machniak
2014-04-13 db3a14b405c926e14ffb36d73fb3759fce35fe61
program/js/app.js
@@ -3,8 +3,8 @@
 | Roundcube Webmail Client Script                                       |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2013, The Roundcube Dev Team                       |
 | Copyright (C) 2011-2013, Kolab Systems AG                             |
 | Copyright (C) 2005-2014, The Roundcube Dev Team                       |
 | Copyright (C) 2011-2014, Kolab Systems AG                             |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -143,7 +143,7 @@
    this.task = this.env.task;
    // check browser
    if (!bw.dom || !bw.xmlhttp_test() || (bw.mz && bw.vendver < 1.9)) {
    if (!bw.dom || !bw.xmlhttp_test() || (bw.mz && bw.vendver < 1.9) || (bw.ie && bw.vendver < 7)) {
      this.goto_url('error', '_code=0x199');
      return;
    }
@@ -222,7 +222,7 @@
          this.gui_objects.messagelist.parentNode.onmousedown = function(e){ return p.click_on_list(e); };
          this.enable_command('toggle_status', 'toggle_flag', 'sort', true);
          this.enable_command('set-listmode', this.env.threads && !this.env.search_request);
          this.enable_command('set-listmode', this.env.threads && !this.is_multifolder_listing());
          // load messages
          this.command('list');
@@ -473,7 +473,7 @@
          $('#rcmloginpwd').focus();
        // detect client timezone
        if (window.jstz && !bw.ie6) {
        if (window.jstz) {
          var timezone = jstz.determine();
          if (timezone.name())
            $('#rcmlogintz').val(timezone.name());
@@ -1715,7 +1715,7 @@
      case 'mail':
        return (this.env.mailboxes[id]
            && !this.env.mailboxes[id].virtual
            && (this.env.mailboxes[id].id != this.env.mailbox || this.is_multifolder_search())) ? 1 : 0;
            && (this.env.mailboxes[id].id != this.env.mailbox || this.is_multifolder_listing())) ? 1 : 0;
      case 'settings':
        return id != this.env.mailbox ? 1 : 0;
@@ -1947,7 +1947,9 @@
        html = '<span id="flagicn'+row.id+'" class="'+css_class+'">&nbsp;</span>';
      }
      else if (c == 'attachment') {
        if (/application\/|multipart\/(m|signed)/.test(flags.ctype))
        if (flags.attachmentClass)
          html = '<span class="'+flags.attachmentClass+'">&nbsp;</span>';
        else if (/application\/|multipart\/(m|signed)/.test(flags.ctype))
          html = '<span class="attachment">&nbsp;</span>';
        else if (/multipart\/report/.test(flags.ctype))
          html = '<span class="report">&nbsp;</span>';
@@ -2698,7 +2700,7 @@
      return this.folder_selector(obj, function(folder) { ref.command('move', folder); });
    // exit if current or no mailbox specified
    if (!mbox || (mbox == this.env.mailbox && !this.is_multifolder_search()))
    if (!mbox || (mbox == this.env.mailbox && !this.is_multifolder_listing()))
      return;
    var lock = false, post_data = this.selection_post_data({_target_mbox: mbox});
@@ -2767,7 +2769,7 @@
  this._with_selected_messages = function(action, post_data, lock)
  {
    var count = 0, msg,
      remove = (action == 'delete' || !this.is_multifolder_search());
      remove = (action == 'delete' || !this.is_multifolder_listing());
    // update the list (remove rows, clear selection)
    if (this.message_list) {
@@ -3014,7 +3016,8 @@
    var icn_src, uid, i, len,
      rows = this.message_list ? this.message_list.rows : {};
    uids = String(uids).split(',');
    if (typeof uids == 'string')
      uids = String(uids).split(',');
    for (i=0, len=uids.length; i<len; i++) {
      uid = uids[i];
@@ -3027,7 +3030,7 @@
  // with select_all mode checking
  this.uids_to_list = function(uids)
  {
    return this.select_all_mode ? '*' : uids.join(',');
    return this.select_all_mode ? '*' : (uids.length <= 1 ? uids.join(',') : uids);
  };
  // Sets title of the delete button
@@ -3678,9 +3681,12 @@
      $("input[name='_draft_saveid']").val(id);
      // reset history of hidden iframe used for saving draft (#1489643)
      if (window.frames['savetarget'] && window.frames['savetarget'].history) {
      // but don't do this on timer-triggered draft-autosaving (#1489789)
      if (window.frames['savetarget'] && window.frames['savetarget'].history && !this.draft_autosave_submit) {
        window.frames['savetarget'].history.back();
      }
      this.draft_autosave_submit = false;
    }
    // always remove local copy upon saving as draft
@@ -3690,7 +3696,11 @@
  this.auto_save_start = function()
  {
    if (this.env.draft_autosave)
      this.save_timer = setTimeout(function(){ ref.command("savedraft"); }, this.env.draft_autosave * 1000);
      this.draft_autosave_submit = false;
      this.save_timer = setTimeout(function(){
          ref.draft_autosave_submit = true;  // set auto-saved flag (#1489789)
          ref.command("savedraft");
      }, this.env.draft_autosave * 1000);
    // save compose form content to local storage every 5 seconds
    if (!this.local_save_timer && window.localStorage) {
@@ -4273,9 +4283,10 @@
    this.env.search_mods[mbox] = mods;
  };
  this.is_multifolder_search = function()
  this.is_multifolder_listing = function()
  {
    return this.env.search_request && (this.env.search_scope || 'base') != 'base';
    return typeof this.env.multifolder_listing != 'undefined' ? this.env.multifolder_listing :
      (this.env.search_request && (this.env.search_scope || 'base') != 'base');
  }
  this.sent_successfully = function(type, msg, folders)
@@ -6818,13 +6829,13 @@
    if (action)
      query._action = action;
    else
    else if (this.env.action)
      query._action = this.env.action;
    var base = this.env.comm_path, k, param = {};
    // overwrite task name
    if (query._action.match(/([a-z0-9_-]+)\/([a-z0-9-_.]+)/)) {
    if (action && action.match(/([a-z0-9_-]+)\/([a-z0-9-_.]+)/)) {
      query._action = RegExp.$2;
      base = base.replace(/\_task=[a-z0-9_-]+/, '_task='+RegExp.$1);
    }
@@ -6859,7 +6870,7 @@
  this.goto_url = function(action, query, lock)
  {
    this.redirect(this.url(action, query));
    this.redirect(this.url(action, query), lock);
  };
  this.location_href = function(url, target, frame)
@@ -7060,6 +7071,7 @@
          this.enable_command('expunge', this.env.exists);
          this.enable_command('purge', this.purge_mailbox_test());
          this.enable_command('expand-all', 'expand-unread', 'collapse-all', this.env.threading && this.env.messagecount);
          this.enable_command('set-listmode', this.env.threads && !this.is_multifolder_listing());
          if ((response.action == 'list' || response.action == 'search') && this.message_list) {
            this.msglist_select(this.message_list);