alecpl
2010-08-12 1a2f8375ded7563964ea24c44c7874a92e6f7b77
program/js/app.js
@@ -225,7 +225,7 @@
          }
        }
        else if (this.env.action == 'compose') {
          this.enable_command('add-attachment', 'send-attachment', 'remove-attachment', 'send', true);
          this.enable_command('send-attachment', 'remove-attachment', 'send', 'toggle-editor', true);
          if (this.env.spellcheck) {
            this.env.spellcheck.spelling_state_observer = function(s){ ref.set_spellcheck_state(s); };
@@ -321,7 +321,7 @@
        }
        else if (this.env.action=='edit-identity' || this.env.action=='add-identity') {
          this.enable_command('add', this.env.identities_level < 2);
          this.enable_command('save', 'delete', 'edit', true);
          this.enable_command('save', 'delete', 'edit', 'toggle-editor', true);
        }
        else if (this.env.action=='folders')
          this.enable_command('subscribe', 'unsubscribe', 'create-folder', 'rename-folder', 'delete-folder', 'enable-threading', 'disable-threading', true);
@@ -484,10 +484,9 @@
        }
        break;
      // misc list commands
      case 'list':
        if (this.task=='mail') {
          if (this.env.search_request<0 || (props != '' && (this.env.search_request && props != this.env.mailbox)))
          if (!this.env.search_request || (props && props != this.env.mailbox))
            this.reset_qsearch();
          this.list_mailbox(props);
@@ -496,7 +495,7 @@
            this.set_alttext('delete', this.env.mailbox != this.env.trash_mailbox ? 'movemessagetotrash' : 'deletemessage');
        }
        else if (this.task=='addressbook') {
          if (this.env.search_request<0 || (this.env.search_request && props != this.env.source))
          if (!this.env.search_request || (props != this.env.source))
            this.reset_qsearch();
          this.list_contacts(props);
@@ -504,16 +503,9 @@
        }
        break;
      case 'listgroup':
        this.list_contacts(props.source, props.id);
        break;
      case 'load-headers':
        this.load_headers(obj);
        break;
      case 'sort':
        var sort_order, sort_col = props;
@@ -557,7 +549,6 @@
          this.purge_mailbox(this.env.mailbox);
        break;
      // common commands used in multiple tasks
      case 'show':
        if (this.task=='mail') {
@@ -597,7 +588,6 @@
        }
        break;
      case 'save-identity':
      case 'save':
        if (this.gui_objects.editform) {
          var input_pagesize = $("input[name='_pagesize']");
@@ -872,18 +862,11 @@
        clearTimeout(this.request_timer);
        break;
      case 'add-attachment':
        this.show_attachment_form(true);
      case 'send-attachment':
        // Reset the auto-save timer
        self.clearTimeout(this.save_timer);
        this.upload_file(props)
        break;
      case 'remove-attachment':
        this.remove_attachment(props);
        break;
      case 'insert-sig':
@@ -930,10 +913,6 @@
          this.goto_url('viewsource', '&_uid='+uid+'&_mbox='+urlencode(this.env.mailbox)+'&_save=1');
        break;
      case 'add-contact':
        this.add_contact(props);
        break;
      // quicksearch
      case 'search':
        if (!props && this.gui_objects.qsearchbox)
@@ -954,16 +933,8 @@
          this.list_contacts(this.env.source, this.env.group);
        break;
      case 'group-create':
        this.add_contact_group(props)
        break;
      case 'group-rename':
        this.rename_contact_group();
        break;
      case 'group-delete':
        this.delete_contact_group();
      case 'listgroup':
        this.list_contacts(props.source, props.id);
        break;
      case 'import':
@@ -991,12 +962,6 @@
        }
        break;
      // collapse/expand folder
      case 'collapse-folder':
        if (props)
          this.collapse_folder(props);
        break;
      // user settings commands
      case 'preferences':
        this.goto_url('');
@@ -1006,41 +971,16 @@
        this.goto_url('identities');
        break;
      case 'delete-identity':
        this.delete_identity();
      case 'folders':
        this.goto_url('folders');
        break;
      case 'subscribe':
        this.subscribe_folder(props);
      // unified command call (command name == function name)
      default:
        var func = command.replace(/-/g, '_');
        if (this[func] && typeof this[func] == 'function')
          this[func](props);
        break;
      case 'unsubscribe':
        this.unsubscribe_folder(props);
        break;
      case 'enable-threading':
        this.enable_threading(props);
        break;
      case 'disable-threading':
        this.disable_threading(props);
        break;
      case 'create-folder':
        this.create_folder(props);
        break;
      case 'rename-folder':
        this.rename_folder(props);
        break;
      case 'delete-folder':
        this.delete_folder(props);
        break;
    }
    this.triggerEvent('after'+command, props);
@@ -1078,9 +1018,10 @@
      if (msg == message)
        msg = 'Loading...';
      this.display_message(msg, 'loading', true);
      if (this.gui_objects.message && this.gui_objects.message.__type != 'error')
        this.display_message(msg, 'loading', true);
    }
    else if (!a)
    else if (!a && this.gui_objects.message && this.gui_objects.message.__type != 'error')
      this.hide_message();
    this.busy = a;
@@ -1731,7 +1672,7 @@
  {
    var update, add_url = '';
    if (sort_col === null)
    if (typeof sort_col == 'undefined')
      sort_col = this.env.sort_col;
    if (!sort_order)
      sort_order = this.env.sort_order;
@@ -1818,11 +1759,11 @@
  this.show_contentframe = function(show)
  {
    var frm;
    var frm, win;
    if (this.env.contentframe && (frm = $('#'+this.env.contentframe)) && frm.length) {
      if (!show && window.frames[this.env.contentframe]) {
        if (window.frames[this.env.contentframe].location.href.indexOf(this.env.blankpage)<0)
          window.frames[this.env.contentframe].location.href = this.env.blankpage;
      if (!show && (win = window.frames[this.env.contentframe])) {
        if (win.location && win.location.href.indexOf(this.env.blankpage)<0)
          win.location.href = this.env.blankpage;
      }
      else if (!bw.safari && !bw.konq)
        frm[show ? 'show' : 'hide']();
@@ -1895,18 +1836,14 @@
      page = 1;
      this.env.current_page = page;
      this.select_all_mode = false;
      this.show_contentframe(false);
      this.env.messages = {};
    }
    // unselect selected messages and clear the list and message data
    this.clear_message_list();
    if (mbox != this.env.mailbox || (mbox == this.env.mailbox && !page && !sort))
      url += '&_refresh=1';
    // unselect selected messages
    this.last_selected = 0;
    if (this.message_list) {
      this.message_list.clear_selection();
    }
    this.select_folder(mbox, this.env.mailbox);
    this.env.mailbox = mbox;
@@ -1926,6 +1863,16 @@
      this.set_busy(true, 'loading');
      target.location.href = this.env.comm_path+'&_mbox='+urlencode(mbox)+(page ? '&_page='+page : '')+url;
    }
  };
  this.clear_message_list = function()
  {
      this.env.messages = {};
      this.last_selected = 0;
      this.show_contentframe(false);
      if (this.message_list)
        this.message_list.clear(true);
  };
  // send remote request to load message list
@@ -2867,6 +2814,31 @@
    return true;
  };
  this.toggle_editor = function(props)
  {
    if (props.mode == 'html') {
      this.display_spellcheck_controls(false);
      this.plain2html($('#'+props.id).val(), props.id);
      tinyMCE.execCommand('mceAddControl', false, props.id);
    }
    else {
      var thisMCE = tinyMCE.get(props.id), existingHtml;
      if (thisMCE.plugins.spellchecker && thisMCE.plugins.spellchecker.active)
        thisMCE.execCommand('mceSpellCheck', false);
      if (existingHtml = thisMCE.getContent()) {
        if (!confirm(this.get_label('editorwarning'))) {
          return false;
        }
        this.html2plain(existingHtml, props.id);
      }
      tinyMCE.execCommand('mceRemoveControl', false, props.id);
      this.display_spellcheck_controls(true);
    }
    return true;
  };
  this.stop_spellchecking = function()
  {
    if (this.env.spellcheck && !this.spellcheck_ready) {
@@ -3068,32 +3040,6 @@
    return true;
  };
  this.show_attachment_form = function(a)
  {
    if (!this.gui_objects.uploadbox)
      return false;
    var elm, list;
    if (elm = this.gui_objects.uploadbox) {
      if (a && (list = this.gui_objects.attachmentlist)) {
        var pos = $(list).offset();
        elm.style.top = (pos.top + list.offsetHeight + 10) + 'px';
        elm.style.left = pos.left + 'px';
      }
      $(elm).toggle();
    }
    // clear upload form
    try {
      if (!a && this.gui_objects.attachmentform != this.gui_objects.messageform)
        this.gui_objects.attachmentform.reset();
    }
    catch(e){}  // ignore errors
    return true;
  };
  // upload attachment file
  this.upload_file = function(form)
  {
@@ -3156,8 +3102,6 @@
      form.setAttribute('enctype', 'multipart/form-data');
      form.submit();
      // hide upload form
      this.show_attachment_form(false);
      // display upload indicator and cancel button
      var content = this.get_label('uploading');
      if (this.env.loadingicon)
@@ -3245,7 +3189,7 @@
    if (value != '') {
      var addurl = '';
      if (this.message_list) {
        this.message_list.clear();
        this.clear_message_list();
        if (this.env.search_mods) {
          var mods = this.env.search_mods[this.env.mailbox] ? this.env.search_mods[this.env.mailbox] : this.env.search_mods['*'];
          if (mods) {
@@ -3727,7 +3671,7 @@
        this.contact_list.remove_row(cid);
        this.contact_list.init_row(row);
        this.contact_list.selection[0] = newcid;
        ow.style.display = '';
        row.style.display = '';
      }
      return true;
@@ -3767,24 +3711,24 @@
  };
  this.add_contact_group = function()
  this.group_create = function()
  {
    if (!this.gui_objects.folderlist || !this.env.address_sources[this.env.source].groups)
      return;
    if (!this.name_input) {
      this.name_input = $('<input>').attr('type', 'text');
      this.name_input.bind('keypress', function(e){ return rcmail.add_input_keypress(e); });
      this.name_input.bind('keydown', function(e){ return rcmail.add_input_keydown(e); });
      this.name_input_li = $('<li>').addClass('contactgroup').append(this.name_input);
      var li = this.get_folder_li(this.env.source)
      this.name_input_li.insertAfter(li);
    }
    this.name_input.select();
    this.name_input.select().focus();
  };
  this.rename_contact_group = function()
  this.group_rename = function()
  {
    if (!this.env.group || !this.gui_objects.folderlist)
      return;
@@ -3792,7 +3736,7 @@
    if (!this.name_input) {
      this.enable_command('list', 'listgroup', false);
      this.name_input = $('<input>').attr('type', 'text').val(this.env.contactgroups['G'+this.env.source+this.env.group].name);
      this.name_input.bind('keypress', function(e){ return rcmail.add_input_keypress(e); });
      this.name_input.bind('keydown', function(e){ return rcmail.add_input_keydown(e); });
      this.env.group_renaming = true;
      var link, li = this.get_folder_li(this.env.source+this.env.group, 'rcmliG');
@@ -3801,10 +3745,10 @@
      }
    }
    this.name_input.select();
    this.name_input.select().focus();
  };
  this.delete_contact_group = function()
  this.group_delete = function()
  {
    if (this.env.group)
      this.http_post('group-delete', '_source='+urlencode(this.env.source)+'&_gid='+urlencode(this.env.group), true);
@@ -3826,7 +3770,7 @@
  };
  // handler for keyboard events on the input field
  this.add_input_keypress = function(e)
  this.add_input_keydown = function(e)
  {
    var key = rcube_event.get_keycode(e);
@@ -3919,9 +3863,9 @@
    this.subscription_list.row_init = function (row) {
      var anchors = row.obj.getElementsByTagName('a');
      if (anchors[0])
        anchors[0].onclick = function() { p.rename_folder(row.id); return false; };
        anchors[0].onclick = function() { p.command('rename-folder', row.id); return false; };
      if (anchors[1])
        anchors[1].onclick = function() { p.delete_folder(row.id); return false; };
        anchors[1].onclick = function() { p.command('delete-folder', row.id); return false; };
      row.obj.onmouseover = function() { p.focus_subscription(row.id); };
      row.obj.onmouseout = function() { p.unfocus_subscription(row.id); };
    };
@@ -3960,7 +3904,7 @@
    if (action=='edit-identity' && (!id || id==this.env.iid))
      return false;
    var add_url = '',  target = window;
    var add_url = '', target = window;
    if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
      add_url = '&_framed=1';
@@ -4101,7 +4045,7 @@
      reg = new RegExp('['+RegExp.escape(this.env.delimiter)+']?[^'+RegExp.escape(this.env.delimiter)+']+$');
      this.name_input.__parent = this.env.subscriptionrows[id][0].replace(reg, '');
      this.name_input.onkeypress = function(e){ rcmail.name_input_keypress(e); };
      this.name_input.onkeydown = function(e){ rcmail.name_input_keydown(e); };
      row.cells[0].replaceChild(this.name_input, row.cells[0].firstChild);
      this.edit_folder = id;
@@ -4124,7 +4068,7 @@
  };
  // handler for keyboard events on the input field
  this.name_input_keypress = function(e)
  this.name_input_keydown = function(e)
  {
    var key = rcube_event.get_keycode(e);
@@ -4288,13 +4232,13 @@
      form.elements['_folder_newname'].value = '';
  };
  this.subscribe_folder = function(folder)
  this.subscribe = function(folder)
  {
    if (folder)
      this.http_post('subscribe', '_mbox='+urlencode(folder));
  };
  this.unsubscribe_folder = function(folder)
  this.unsubscribe = function(folder)
  {
    if (folder)
      this.http_post('unsubscribe', '_mbox='+urlencode(folder));
@@ -4552,6 +4496,7 @@
      cont = '<div class="'+type+'">'+cont+'</div>';
    var obj = $(this.gui_objects.message).html(cont).show();
    this.gui_objects.message.__type = type;
    if (type!='loading')
      obj.bind('mousedown', function(){ ref.hide_message(); return true; });
@@ -4824,6 +4769,9 @@
      quota = data.percent ? Math.abs(parseInt(data.percent)) : 0,
      quota_width = parseInt(quota / 100 * width),
      pos = $(obj).position();
    // Opera bug?
    pos.top = Math.max(0, pos.top);
    this.env.indicator_width = width;
    this.env.indicator_height = height;
@@ -5200,3 +5148,4 @@
rcube_webmail.prototype.addEventListener = rcube_event_engine.prototype.addEventListener;
rcube_webmail.prototype.removeEventListener = rcube_event_engine.prototype.removeEventListener;
rcube_webmail.prototype.triggerEvent = rcube_event_engine.prototype.triggerEvent;