alecpl
2010-07-26 1fe60e25c91266b44cee5cc5d858367df7929f90
program/js/app.js
@@ -203,7 +203,7 @@
          'open', 'mark', 'edit', 'viewsource', 'download', 'print', 'load-attachment', 'load-headers'];
        if (this.env.action=='show' || this.env.action=='preview') {
          this.enable_command(this.env.message_commands, true);
          this.enable_command(this.env.message_commands, this.env.uid);
          if (this.env.next_uid) {
            this.enable_command('nextmessage', 'lastmessage', true);
@@ -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); };
@@ -243,7 +243,7 @@
          this.init_messageform();
        }
        // show printing dialog
        else if (this.env.action == 'print')
        else if (this.env.action == 'print' && this.env.uid)
          window.print();
        // get unread count for each mailbox
@@ -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);
@@ -1302,7 +1242,7 @@
          this.env.folder_coords[k].on = 0;
        }
      }
      if (layerclass != oldclass && this.contact_list && this.contact_list.draglayer)
        this.contact_list.draglayer.attr('class', layerclass);
    }
@@ -1495,13 +1435,13 @@
    if (this.env.messages[row.uid])
      this.env.messages[row.uid].expanded = row.expanded;
  };
  this.msglist_set_coltypes = function(list)
  {
    var i, found, name, cols = list.list.tHead.rows[0].cells;
    this.env.coltypes = [];
    for (i=0; i<cols.length; i++)
      if (cols[i].id && cols[i].id.match(/^rcm/)) {
        name = cols[i].id.replace(/^rcm/, '');
@@ -1520,7 +1460,7 @@
  this.check_droptarget = function(id)
  {
    var allow = false, copy = false;
    if (this.task == 'mail')
      allow = (this.env.mailboxes[id] && this.env.mailboxes[id].id != this.env.mailbox && !this.env.mailboxes[id].virtual);
    else if (this.task == 'settings')
@@ -1538,7 +1478,7 @@
        }
      }
    }
    return allow ? (copy ? 2 : 1) : 0;
  };
@@ -1594,7 +1534,9 @@
      depth: flags.depth?flags.depth:0,
      unread_children: flags.unread_children?flags.unread_children:0,
      parent_uid: flags.parent_uid?flags.parent_uid:0,
      selected: this.select_all_mode || this.message_list.in_selection(uid)
      selected: this.select_all_mode || this.message_list.in_selection(uid),
      // flags from plugins
      flags: flags.extra_flags
    });
    var c, tree = expando = '',
@@ -1729,7 +1671,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;
@@ -1894,6 +1836,7 @@
      this.env.current_page = page;
      this.select_all_mode = false;
      this.show_contentframe(false);
      this.env.messages = {};
    }
    if (mbox != this.env.mailbox || (mbox == this.env.mailbox && !page && !sort))
@@ -2258,8 +2201,6 @@
      rows[uid].forwarded = status;
    else if (flag == 'flagged')
      rows[uid].flagged = status;
//    this.env.messages[uid] = rows[uid];
  };
  // set message row status, class and icon
@@ -2866,6 +2807,30 @@
    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 = thisMCE.getContent();
      if (existingHtml) {
        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) {
@@ -3067,32 +3032,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)
  {
@@ -3155,8 +3094,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)
@@ -3476,7 +3413,7 @@
      for (i=0; i < a_results.length; i++) {
        text = typeof a_results[i] == 'object' ? a_results[i].name : a_results[i];
        li = document.createElement('LI');
        li.innerHTML = text.replace(new RegExp('('+s_val+')', 'ig'), '##$1%%').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/##([^%]+)%%/g, '<b>$1</b>');
        li.innerHTML = text.replace(new RegExp('('+RegExp.escape(s_val)+')', 'ig'), '##$1%%').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/##([^%]+)%%/g, '<b>$1</b>');
        li.onmouseover = function(){ ref.ksearch_select(this); };
        li.onmouseup = function(){ ref.ksearch_click(this) };
        li._rcm_id = i;
@@ -3726,7 +3663,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;
@@ -3766,14 +3703,14 @@
  };
  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)
@@ -3783,7 +3720,7 @@
    this.name_input.select();
  };
  this.rename_contact_group = function()
  this.group_rename = function()
  {
    if (!this.env.group || !this.gui_objects.folderlist)
      return;
@@ -3791,7 +3728,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');
@@ -3803,7 +3740,7 @@
    this.name_input.select();
  };
  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);
@@ -3825,7 +3762,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);
@@ -3918,9 +3855,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); };
    };
@@ -4287,13 +4224,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));
@@ -4673,7 +4610,7 @@
  this.set_quota = function(content)
  {
    if (content && this.gui_objects.quotadisplay) {
      if (typeof(content) == 'object')
      if (typeof(content) == 'object' && content.type == 'image')
        this.percent_indicator(this.gui_objects.quotadisplay, content);
      else
        $(this.gui_objects.quotadisplay).html(content);
@@ -4824,6 +4761,9 @@
      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;
@@ -4832,6 +4772,9 @@
      quota_width = width;
      quota = 100; 
    }
    if (data.title)
      data.title = this.get_label('quota') + ': ' +  data.title;
    // main div
    var main = $('<div>');
@@ -4863,6 +4806,8 @@
    // replace quota image
    $(obj).html('').append(bar1).append(bar2).append(main);
    // update #quotaimg title
    $('#quotaimg').attr('title', data.title);
  };
  /********************************************************/
@@ -4927,7 +4872,7 @@
    querystring += (querystring ? '&' : '') + '_remote=1';
    var url = this.env.comm_path + '&_action=' + action + '&' + querystring;
    // send request
    console.log('HTTP GET: ' + url);
    $.get(url, { _unlock:(lock?1:0) }, function(data){ ref.http_response(data); }, 'json');
@@ -5022,7 +4967,8 @@
            this.enable_command(this.env.message_commands, 'purge', 'expunge',
              'select-all', 'select-none', 'sort', 'expand-all', 'expand-unread', 'collapse-all', false);
          }
          this.triggerEvent('listupdate', { folder:this.env.mailbox, rowcount:this.message_list.rowcount });
          if (this.message_list)
            this.triggerEvent('listupdate', { folder:this.env.mailbox, rowcount:this.message_list.rowcount });
        }
        break;
@@ -5076,9 +5022,9 @@
    if (this._int)
      clearInterval(this._int);
    if (this.env.keep_alive && !this.env.framed && this.task=='mail' && this.gui_objects.mailboxlist)
    if (this.env.keep_alive && !this.env.framed && this.task == 'mail' && this.gui_objects.mailboxlist)
      this._int = setInterval(function(){ ref.check_for_recent(false); }, this.env.keep_alive * 1000);
    else if (this.env.keep_alive && !this.env.framed && this.task!='login')
    else if (this.env.keep_alive && !this.env.framed && this.task != 'login' && this.env.action != 'print')
      this._int = setInterval(function(){ ref.send_keep_alive(); }, this.env.keep_alive * 1000);
  };
@@ -5193,3 +5139,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;