Aleksander Machniak
2014-07-25 2c0d3e1dd0a3df01c8adea0de5f2826f0bcb9434
program/js/app.js
@@ -3374,63 +3374,7 @@
    }
    // check for locally stored compose data
    if (window.localStorage) {
      var key, formdata, index = this.local_storage_get_item('compose.index', []);
      for (i = 0; i < index.length; i++) {
        key = index[i];
        formdata = this.local_storage_get_item('compose.' + key, null, true);
        if (!formdata) {
          continue;
        }
        // restore saved copy of current compose_id
        if (formdata.changed && key == this.env.compose_id) {
          this.restore_compose_form(key, html_mode);
          break;
        }
        // skip records from 'other' drafts
        if (this.env.draft_id && formdata.draft_id && formdata.draft_id != this.env.draft_id) {
          continue;
        }
        // skip records on reply
        if (this.env.reply_msgid && formdata.reply_msgid != this.env.reply_msgid) {
          continue;
        }
        // show dialog asking to restore the message
        if (formdata.changed && formdata.session != this.env.session_id) {
          this.show_popup_dialog(
            this.get_label('restoresavedcomposedata')
              .replace('$date', new Date(formdata.changed).toLocaleString())
              .replace('$subject', formdata._subject)
              .replace(/\n/g, '<br/>'),
            this.get_label('restoremessage'),
            [{
              text: this.get_label('restore'),
              click: function(){
                ref.restore_compose_form(key, html_mode);
                ref.remove_compose_data(key);  // remove old copy
                ref.save_compose_form_local();  // save under current compose_id
                $(this).dialog('close');
              }
            },
            {
              text: this.get_label('delete'),
              click: function(){
                ref.remove_compose_data(key);
                $(this).dialog('close');
              }
            },
            {
              text: this.get_label('ignore'),
              click: function(){
                $(this).dialog('close');
              }
            }]
          );
          break;
        }
      }
    }
    this.compose_restore_dialog(0, html_mode)
    if (input_to.val() == '')
      input_to.focus();
@@ -3447,6 +3391,72 @@
    // start the auto-save timer
    this.auto_save_start();
  };
  this.compose_restore_dialog = function(j, html_mode)
  {
    var i, key, formdata, index = this.local_storage_get_item('compose.index', []);
    var show_next = function(i) {
      if (++i < index.length)
        ref.compose_restore_dialog(i, html_mode)
    }
    for (i = j || 0; i < index.length; i++) {
      key = index[i];
      formdata = this.local_storage_get_item('compose.' + key, null, true);
      if (!formdata) {
        continue;
      }
      // restore saved copy of current compose_id
      if (formdata.changed && key == this.env.compose_id) {
        this.restore_compose_form(key, html_mode);
        break;
      }
      // skip records from 'other' drafts
      if (this.env.draft_id && formdata.draft_id && formdata.draft_id != this.env.draft_id) {
        continue;
      }
      // skip records on reply
      if (this.env.reply_msgid && formdata.reply_msgid != this.env.reply_msgid) {
        continue;
      }
      // show dialog asking to restore the message
      if (formdata.changed && formdata.session != this.env.session_id) {
        this.show_popup_dialog(
          this.get_label('restoresavedcomposedata')
            .replace('$date', new Date(formdata.changed).toLocaleString())
            .replace('$subject', formdata._subject)
            .replace(/\n/g, '<br/>'),
          this.get_label('restoremessage'),
          [{
            text: this.get_label('restore'),
            click: function(){
              ref.restore_compose_form(key, html_mode);
              ref.remove_compose_data(key);  // remove old copy
              ref.save_compose_form_local();  // save under current compose_id
              $(this).dialog('close');
            }
          },
          {
            text: this.get_label('delete'),
            click: function(){
              ref.remove_compose_data(key);
              $(this).dialog('close');
              show_next(i);
            }
          },
          {
            text: this.get_label('ignore'),
            click: function(){
              $(this).dialog('close');
              show_next(i);
            }
          }]
        );
        break;
      }
    }
  }
  this.init_address_input_events = function(obj, props)
  {
@@ -3888,15 +3898,16 @@
      }
    });
    if (window.localStorage && !empty) {
    if (!empty) {
      var index = this.local_storage_get_item('compose.index', []),
        key = this.env.compose_id;
        if ($.inArray(key, index) < 0) {
          index.push(key);
        }
        this.local_storage_set_item('compose.' + key, formdata, true);
        this.local_storage_set_item('compose.index', index);
      if ($.inArray(key, index) < 0) {
        index.push(key);
      }
      this.local_storage_set_item('compose.' + key, formdata, true);
      this.local_storage_set_item('compose.index', index);
    }
  };
@@ -3928,27 +3939,24 @@
  // remove stored compose data from localStorage
  this.remove_compose_data = function(key)
  {
    if (window.localStorage) {
      var index = this.local_storage_get_item('compose.index', []);
    var index = this.local_storage_get_item('compose.index', []);
      if ($.inArray(key, index) >= 0) {
        this.local_storage_remove_item('compose.' + key);
        this.local_storage_set_item('compose.index', $.grep(index, function(val,i) { return val != key; }));
      }
    if ($.inArray(key, index) >= 0) {
      this.local_storage_remove_item('compose.' + key);
      this.local_storage_set_item('compose.index', $.grep(index, function(val,i) { return val != key; }));
    }
  };
  // clear all stored compose data of this user
  this.clear_compose_data = function()
  {
    if (window.localStorage) {
      var i, index = this.local_storage_get_item('compose.index', []);
    var i, index = this.local_storage_get_item('compose.index', []);
      for (i=0; i < index.length; i++) {
        this.local_storage_remove_item('compose.' + index[i]);
      }
      this.local_storage_remove_item('compose.index');
    for (i=0; i < index.length; i++) {
      this.local_storage_remove_item('compose.' + index[i]);
    }
    this.local_storage_remove_item('compose.index');
  };
@@ -3969,18 +3977,16 @@
        return;
    }
    var i, rx,
      id = obj.options[obj.selectedIndex].value,
    var id = obj.options[obj.selectedIndex].value,
      sig = this.env.identity,
      delim = this.env.recipients_separator,
      rx_delim = RegExp.escape(delim),
      headers = ['replyto', 'bcc'];
      rx_delim = RegExp.escape(delim);
    // update reply-to/bcc fields with addresses defined in identities
    for (i in headers) {
      var key = headers[i],
        old_val = sig && this.env.identities[sig] ? this.env.identities[sig][key] : '',
        new_val = id && this.env.identities[id] ? this.env.identities[id][key] : '',
    $.each(['replyto', 'bcc'], function() {
      var rx, key = this,
        old_val = sig && ref.env.identities[sig] ? ref.env.identities[sig][key] : '',
        new_val = id && ref.env.identities[id] ? ref.env.identities[id][key] : '',
        input = $('[name="_'+key+'"]'), input_val = input.val();
      // remove old address(es)
@@ -4007,7 +4013,7 @@
      if (old_val || new_val)
        input.val(input_val).change();
    }
    });
    // enable manual signature insert
    if (this.env.signatures && this.env.signatures[id]) {
@@ -5884,6 +5890,9 @@
  {
    if (!this.gui_objects.subscriptionlist)
      return false;
    // disable drag-n-drop temporarily
    this.subscription_list.draggable('destroy').droppable('destroy');
    var row, n, tmp, tmp_name, rowid, collator, pos, p, parent = '',
      folders = [], list = [], slist = [],
@@ -8020,22 +8029,43 @@
  // wrapper for localStorage.getItem(key)
  this.local_storage_get_item = function(key, deflt, encrypted)
  {
    var item;
    // TODO: add encryption
    var item = localStorage.getItem(this.get_local_storage_prefix() + key);
    try {
      item = localStorage.getItem(this.get_local_storage_prefix() + key);
    }
    catch (e) { }
    return item !== null ? JSON.parse(item) : (deflt || null);
  };
  // wrapper for localStorage.setItem(key, data)
  this.local_storage_set_item = function(key, data, encrypted)
  {
    // TODO: add encryption
    return localStorage.setItem(this.get_local_storage_prefix() + key, JSON.stringify(data));
    // try/catch to handle no localStorage support, but also error
    // in Safari-in-private-browsing-mode where localStorage exists
    // but can't be used (#1489996)
    try {
      // TODO: add encryption
      localStorage.setItem(this.get_local_storage_prefix() + key, JSON.stringify(data));
      return true;
    }
    catch (e) {
      return false;
    }
  };
  // wrapper for localStorage.removeItem(key)
  this.local_storage_remove_item = function(key)
  {
    return localStorage.removeItem(this.get_local_storage_prefix() + key);
    try {
      localStorage.removeItem(this.get_local_storage_prefix() + key);
      return true;
    }
    catch (e) {
      return false;
    }
  };
}  // end object rcube_webmail