Aleksander Machniak
2012-11-11 77de23fa939338546a3e049459ffd29edd9058c2
program/js/app.js
@@ -424,12 +424,14 @@
          $('#rcmloginpwd').focus();
        // detect client timezone
        var dt = new Date(),
          tz = dt.getTimezoneOffset() / -60,
          stdtz = dt.getStdTimezoneOffset() / -60;
        $('#rcmlogintz').val(stdtz);
        $('#rcmlogindst').val(tz > stdtz ? 1 : 0);
        if (window.jstz && !bw.ie6) {
          var timezone = jstz.determine();
          if (timezone.name())
            $('#rcmlogintz').val(timezone.name());
        }
        else {
          $('#rcmlogintz').val(new Date().getStdTimezoneOffset() / -60);
        }
        // display 'loading' message on form submit, lock submit button
        $('form').submit(function () {
@@ -480,7 +482,8 @@
        this.onloads[i]();
      }
    // start keep-alive interval
    // start keep-alive and refresh intervals
    this.start_refresh();
    this.start_keepalive();
  };
@@ -878,10 +881,6 @@
          this.show_message(this.env.first_uid);
        break;
      case 'checkmail':
        this.check_for_recent(true);
        break;
      case 'compose':
        url = {};
@@ -949,9 +948,6 @@
          this.auto_save_start();
          break;
        }
        // re-set keep-alive timeout
        this.start_keepalive();
        this.submit_messageform(true);
        break;
@@ -2062,6 +2058,15 @@
    }
  };
  // sends request to check for recent messages
  this.checkmail = function()
  {
    var lock = this.set_busy(true, 'checkingmail'),
      params = this.check_recent_params();
    this.http_request('check-recent', params, lock);
  };
  // list messages of a specific mailbox using filter
  this.filter_mailbox = function(filter)
  {
@@ -3016,10 +3021,13 @@
    var url = this.url('mail/compose', p);
    // open new compose window
    if (this.env.compose_extwin)
    if (this.env.compose_extwin && !this.env.extwin) {
      this.open_window(url, 1150, 900);
    else
    }
    else {
      this.redirect(url);
      window.resizeTo(Math.max(1150, $(window).width()), Math.max(900, $(window).height()));
    }
  };
  // init message compose form: set focus and eventhandlers
@@ -3039,6 +3047,7 @@
    // close compose step in opener
    if (window.opener && opener.rcmail && opener.rcmail.env.action == 'compose') {
      setTimeout(function(){ opener.history.back(); }, 100);
      this.env.opened_extwin = true;
    }
    // configure parallel autocompletion
@@ -3059,7 +3068,7 @@
      this.set_caret_pos(input_message, this.env.top_posting ? 0 : $(input_message).val().length);
      // add signature according to selected identity
      // if we have HTML editor, signature is added in callback
      if (input_from.prop('type') == 'select-one') {
      if (input_from.prop('type') == 'select-one' && !this.env.opened_extwin) {
        this.change_identity(input_from[0]);
      }
    }
@@ -6039,10 +6048,18 @@
    if (lock || lock === null)
      this.set_busy(true);
    if (this.is_framed())
    if (this.is_framed()) {
      parent.rcmail.redirect(url, lock);
    else
    }
    else {
      if (this.env.extwin) {
        if (typeof url == 'string')
          url += (url.indexOf('?') < 0 ? '?' : '&') + '_extwin=1';
        else
          url._extwin = 1;
      }
      this.location_href(url, window);
    }
  };
  this.goto_url = function(action, query, lock)
@@ -6063,6 +6080,9 @@
      $('<a>').attr('href', url).appendTo(document.body).get(0).click();
    else
      target.location.href = url;
    // reset keep-alive interval
    this.start_keepalive();
  };
  // send a http request to the server
@@ -6091,6 +6111,9 @@
      success: function(data){ ref.http_response(data); },
      error: function(o, status, err) { ref.http_error(o, status, err, lock, action); }
    });
    // reset keep-alive interval
    this.start_keepalive();
  };
  // send a http POST request to the server
@@ -6108,7 +6131,7 @@
    // trigger plugin hook
    var result = this.triggerEvent('request'+action, postdata);
    if (result !== undefined) {
      // abort if one the handlers returned false
      // abort if one of the handlers returned false
      if (result === false)
        return false;
      else
@@ -6123,6 +6146,9 @@
      success: function(data){ ref.http_response(data); },
      error: function(o, status, err) { ref.http_error(o, status, err, lock, action); }
    });
    // reset keep-alive interval
    this.start_keepalive();
  };
  // aborts ajax request
@@ -6217,6 +6243,7 @@
        }
        break;
      case 'refresh':
      case 'check-recent':
      case 'getunread':
      case 'search':
@@ -6250,6 +6277,9 @@
    this.triggerEvent('responseafter', {response: response});
    this.triggerEvent('responseafter'+response.action, {response: response});
    // reset keep-alive interval
    this.start_keepalive();
  };
  // handle HTTP request errors
@@ -6274,8 +6304,6 @@
    // re-send keep-alive requests after 30 seconds
    if (action == 'keep-alive')
      setTimeout(function(){ ref.keep_alive(); ref.start_keepalive(); }, 30000);
    else if (action == 'check-recent')
      setTimeout(function(){ ref.check_for_recent(false); ref.start_keepalive(); }, 30000);
  };
  // post the given form to a hidden iframe
@@ -6445,20 +6473,28 @@
    }
  };
  // starts interval for keep-alive/check-recent signal
  // starts interval for keep-alive signal
  this.start_keepalive = function()
  {
    if (!this.env.keep_alive || this.env.framed)
    if (!this.env.session_lifetime || this.env.framed || this.env.extwin || this.task == 'login' || this.env.action == 'print')
      return;
    if (this._int)
      clearInterval(this._int);
    if (this._keepalive)
      clearInterval(this._keepalive);
    if (this.task == 'mail' && this.gui_objects.mailboxlist)
      this._int = setInterval(function(){ ref.check_for_recent(false); }, this.env.keep_alive * 1000);
    else if (this.task != 'login' && this.env.action != 'print')
      this._int = setInterval(function(){ ref.keep_alive(); }, this.env.keep_alive * 1000);
    this._keepalive = setInterval(function(){ ref.keep_alive(); }, this.env.session_lifetime * 0.5 * 1000);
  };
  // starts interval for refresh signal
  this.start_refresh = function()
  {
    if (!this.env.keep_alive || this.env.framed || this.env.extwin || this.task == 'login' || this.env.action == 'print')
      return;
    if (this._refresh)
      clearInterval(this._refresh);
    this._refresh = setInterval(function(){ ref.refresh(); }, this.env.keep_alive * 1000);
  };
  // sends keep-alive signal
@@ -6468,29 +6504,39 @@
      this.http_request('keep-alive');
  };
  // sends request to check for recent messages
  this.check_for_recent = function(refresh)
  // sends refresh signal
  this.refresh = function()
  {
    if (this.busy)
    if (this.busy) {
      // try again after 10 seconds
      setTimeout(function(){ ref.refresh(); ref.start_refresh(); }, 10000);
      return;
    var lock, url = {_mbox: this.env.mailbox};
    if (refresh) {
      lock = this.set_busy(true, 'checkingmail');
      url._refresh = 1;
      // reset check-recent interval
      this.start_keepalive();
    }
    if (this.gui_objects.messagelist)
      url._list = 1;
    if (this.gui_objects.quotadisplay)
      url._quota = 1;
    if (this.env.search_request)
      url._search = this.env.search_request;
    var params = {}, lock = this.set_busy(true, 'refreshing');
    this.http_request('check-recent', url, lock);
    if (this.task == 'mail' && this.gui_objects.mailboxlist)
      params = this.check_recent_params();
    // plugins should bind to 'requestrefresh' event to add own params
    this.http_request('refresh', params, lock);
  };
  // returns check-recent request parameters
  this.check_recent_params = function()
  {
    var params = {_mbox: this.env.mailbox};
    if (this.gui_objects.mailboxlist)
      params._folderlist = 1;
    if (this.gui_objects.messagelist)
      params._list = 1;
    if (this.gui_objects.quotadisplay)
      params._quota = 1;
    if (this.env.search_request)
      params._search = this.env.search_request;
    return params;
  };