thomascube
2005-11-08 583f1c8d80c42195d0ee41f30a885e13d777b79f
program/js/app.js
@@ -6,7 +6,7 @@
 | Copyright (C) 2005, RoundCube Dev, - Switzerland                      |
 | Licensed under the GNU GPL                                            |
 |                                                                       |
 | Modified: 2005/10/26 (roundcube)                                      |
 | Modified: 2005/11/08 (roundcube)                                      |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
@@ -19,6 +19,7 @@
function rcube_webmail()
  {
  this.env = new Object();
  this.labels = new Object();
  this.buttons = new Object();
  this.gui_objects = new Object();
  this.commands = new Object();
@@ -31,7 +32,7 @@
  // webmail client settings
  this.dblclick_time = 600;
  this.message_time = 5000;
  this.request_timeout = 120000;
  this.request_timeout = 180000;
  this.mbox_expression = new RegExp('[^0-9a-z\-_]', 'gi');
  this.env.blank_img = 'skins/default/images/blank.gif';
  
@@ -48,6 +49,14 @@
    //if (!this.busy)
      this.env[name] = value;    
    };
  // add a localized label to the client environment
  this.add_label = function(key, value)
    {
    this.labels[key] = value;
    };
  // add a button to the button list
  this.register_button = function(command, id, type, act, sel, over)
@@ -109,7 +118,7 @@
        
        if (this.env.action=='show')
          {
          this.enable_command('show', 'reply', 'forward', 'moveto', 'delete', 'viewsource', 'print', 'load-attachment', true);
          this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'viewsource', 'print', 'load-attachment', true);
          if (this.env.next_uid)
            this.enable_command('nextmessage', true);
          if (this.env.prev_uid)
@@ -513,7 +522,37 @@
      case 'save-identity':
      case 'save':
        if (this.gui_objects.editform)
          {
          var input_pagesize = rcube_find_object('_pagesize');
          var input_name  = rcube_find_object('_name');
          var input_email = rcube_find_object('_email');
          // user prefs
          if (input_pagesize && isNaN(input_pagesize.value))
            {
            alert(this.get_label('nopagesizewarning'));
            input_pagesize.focus();
            break;
            }
          // contacts/identities
          else
            {
            if (input_name && input_name.value == '')
              {
              alert(this.get_label('nonamewarning'));
              input_name.focus();
              break;
              }
            else if (input_email && !rcube_check_email(input_email.value))
              {
              alert(this.get_label('noemailwarning'));
              input_email.focus();
              break;
              }
            }
          this.gui_objects.editform.submit();
          }
        break;
      case 'delete':
@@ -639,14 +678,46 @@
        var input_to = rcube_find_object('_to');
        var input_subject = rcube_find_object('_subject');
        var input_message = rcube_find_object('_message');
        if (input_to.value!='' && input_message.value!='')
        // check for empty recipient
        if (input_to && !rcube_check_email(input_to.value, true))
          {
          this.set_busy(true, 'sendingmessage');
          var form = this.gui_objects.messageform;
          form.submit();
          alert(this.get_label('norecipientwarning'));
          input_to.focus();
          break;
          }
        // display localized warning for missing subject
        if (input_subject && input_subject.value == '')
          {
          var subject = prompt(this.get_label('nosubjectwarning'), this.get_label('nosubject'));
          // user hit cancel, so don't send
          if (!subject && subject !== '')
            {
            input_subject.focus();
            break;
            }
          else
            {
            input_subject.value = subject ? subject : this.get_label('nosubject');
            }
          }
        // check for empty body
        if (input_message.value=='')
          {
          if (!confirm(this.get_label('nobodywarning')))
            {
            input_message.focus();
            break;
            }
          }
        // all checks passed, send message
        this.set_busy(true, 'sendingmessage');
        var form = this.gui_objects.messageform;
        form.submit();
        break;
      case 'add-attachment':
@@ -656,12 +727,13 @@
        this.upload_file(props)      
        break;
      case 'reply-all':
      case 'reply':
        var uid;
        if (uid = this.get_single_uid())
          {
          this.set_busy(true);
          location.href = this.env.comm_path+'&_action=compose&_reply_uid='+uid+'&_mbox='+escape(this.env.mailbox);
          location.href = this.env.comm_path+'&_action=compose&_reply_uid='+uid+'&_mbox='+escape(this.env.mailbox)+(command=='reply-all' ? '&_all=1' : '');
          }
        break;      
@@ -760,7 +832,13 @@
  this.set_busy = function(a, message)
    {
    if (a && message)
      this.display_message('Loading...', 'loading', true);
      {
      var msg = this.get_label(message);
      if (msg==message)
        msg = 'Loading...';
      this.display_message(msg, 'loading', true);
      }
    else if (!a && this.busy)
      this.hide_message();
@@ -780,13 +858,28 @@
    };
  // return a localized string
  this.get_label = function(name)
    {
    if (this.labels[name])
      return this.labels[name];
    else
      return name;
    };
  // switch to another application task
  this.switch_task = function(task)
    {
    if (this.task===task)
    if (this.task===task && task!='mail')
      return;
    var url = this.get_task_url(task);
    if (task=='mail')
      url += '&_mbox=INBOX';
    this.set_busy(true);
    location.href = this.get_task_url(task);
    location.href = url;
    };
@@ -944,7 +1037,7 @@
    // enable/disable commands for message
    if (this.task=='mail')
      {
      this.enable_command('show', 'reply', 'forward', 'print', selected);
      this.enable_command('show', 'reply', 'reply-all', 'forward', 'print', selected);
      this.enable_command('delete', 'moveto', this.selection.length>0 ? true : false);
      }
    else if (this.task=='addressbook')
@@ -1199,16 +1292,15 @@
        if (this.message_rows[uid].classname.indexOf('unread')<0 && this.message_rows[uid].unread)
          {
          this.message_rows[uid].classname += ' unread';
          if (!this.in_selection(uid))
            this.message_rows[uid].obj.className += ' unread';
          this.set_classname(this.message_rows[uid].obj, 'unread', true);
          if (this.env.unreadicon)
            icn_src = this.env.unreadicon;
          }
        else if (!this.message_rows[uid].unread)
          {
          this.message_rows[uid].classname = this.message_rows[uid].classname.replace(/\s*unread/, '');
          if (!this.in_selection(uid))
            this.message_rows[uid].obj.className = this.message_rows[uid].obj.className.replace(/\s*unread/, '');
          this.set_classname(this.message_rows[uid].obj, 'unread', false);
          if (this.message_rows[uid].replied && this.env.repliedicon)
            icn_src = this.env.repliedicon;
@@ -2043,18 +2135,17 @@
    if (this.gui_objects.mailboxlist)
      {
      var item, reg, text_obj;
      var s_current = this.env.mailbox.toLowerCase().replace(this.mbox_expression, '');
      var s_mbox = String(mbox).toLowerCase().replace(this.mbox_expression, '');
      var s_current = this.env.mailbox.toLowerCase().replace(this.mbox_expression, '');
      var nodes = this.gui_objects.mailboxlist.getElementsByTagName('LI');
      
      for (var n=0; n<nodes.length; n++)
        {
        item = nodes[n];
        if (item.className && item.className.indexOf('mailbox '+s_mbox+' ')>=0)
          this.set_classname(item, 'selected', true);
        else if (item.className && item.className.indexOf('mailbox '+s_current)>=0)
          this.set_classname(item, 'selected', false);
        }
      var current_li = document.getElementById('rcmbx'+s_current);
      var mbox_li = document.getElementById('rcmbx'+s_mbox);
      if (current_li)
        this.set_classname(current_li, 'selected', false);
      if (mbox_li)
        this.set_classname(mbox_li, 'selected', true);
      }
    
    this.env.mailbox = mbox;