thomascube
2012-03-20 4cf42fde05ff891f6961ba60dbb1c2e4c91c39c6
program/js/app.js
@@ -175,7 +175,7 @@
    }
    // enable general commands
    this.enable_command('logout', 'mail', 'addressbook', 'settings', 'save-pref', 'compose', 'undo', 'about', true);
    this.enable_command('logout', 'mail', 'addressbook', 'settings', 'save-pref', 'compose', 'undo', 'about', 'switch-task', true);
    if (this.env.permaurl)
      this.enable_command('permaurl', true);
@@ -261,31 +261,15 @@
          $.merge(this.env.compose_commands, ['add-recipient', 'firstpage', 'previouspage', 'nextpage', 'lastpage']);
          if (this.env.spellcheck) {
            this.env.spellcheck.spelling_state_observer = function(s){ ref.set_spellcheck_state(s); };
            this.env.spellcheck.spelling_state_observer = function(s) { ref.spellcheck_state(); };
            this.env.compose_commands.push('spellcheck')
            this.set_spellcheck_state('ready');
            if ($("input[name='_is_html']").val() == '1')
              this.display_spellcheck_controls(false);
            this.enable_command('spellcheck', true);
          }
          document.onmouseup = function(e){ return p.doc_mouse_up(e); };
          // init message compose form
          this.init_messageform();
          // init address book widget
          if (this.gui_objects.contactslist) {
            this.contact_list = new rcube_list_widget(this.gui_objects.contactslist,
              { multiselect:true, draggable:false, keyboard:false });
            this.contact_list.addEventListener('select', function(o){ ref.compose_recipeint_select(o); });
            this.contact_list.addEventListener('dblclick', function(o){ ref.compose_add_recipient('to'); });
            this.contact_list.init();
          }
          if (this.gui_objects.adressbookslist) {
            this.gui_objects.folderlist = this.gui_objects.adressbookslist;
            this.enable_command('list-adresses', true);
          }
        }
        // show printing dialog
        else if (this.env.action == 'print' && this.env.uid)
@@ -299,6 +283,20 @@
          this.env.unread_counts = {};
          this.gui_objects.folderlist = this.gui_objects.mailboxlist;
          this.http_request('getunread', '');
        }
        // init address book widget
        if (this.gui_objects.contactslist) {
          this.contact_list = new rcube_list_widget(this.gui_objects.contactslist,
            { multiselect:true, draggable:false, keyboard:false });
          this.contact_list.addEventListener('select', function(o){ ref.compose_recipient_select(o); });
          this.contact_list.addEventListener('dblclick', function(o){ ref.compose_add_recipient('to'); });
          this.contact_list.init();
        }
        if (this.gui_objects.addressbookslist) {
          this.gui_objects.folderlist = this.gui_objects.addressbookslist;
          this.enable_command('list-adresses', true);
        }
        // ask user to send MDN
@@ -431,6 +429,7 @@
        // display 'loading' message on form submit, lock submit button
        $('form').submit(function () {
          $('input[type=submit]', this).prop('disabled', true);
          rcmail.clear_messages();
          rcmail.display_message('', 'loading');
        });
@@ -897,13 +896,18 @@
        break;
      case 'spellcheck':
        if (window.tinyMCE && tinyMCE.get(this.env.composebody)) {
          tinyMCE.execCommand('mceSpellCheck', true);
        if (this.spellcheck_state()) {
          this.stop_spellchecking();
        }
        else if (this.env.spellcheck && this.env.spellcheck.spellCheck && this.spellcheck_ready) {
          this.env.spellcheck.spellCheck();
          this.set_spellcheck_state('checking');
        else {
          if (window.tinyMCE && tinyMCE.get(this.env.composebody)) {
            tinyMCE.execCommand('mceSpellCheck', true);
          }
          else if (this.env.spellcheck && this.env.spellcheck.spellCheck) {
            this.env.spellcheck.spellCheck();
          }
        }
        this.spellcheck_state();
        break;
      case 'savedraft':
@@ -2998,7 +3002,7 @@
      .attr('autocomplete', 'off');
  };
  
  this.compose_recipeint_select = function(list)
  this.compose_recipient_select = function(list)
  {
    this.enable_command('add-recipient', list.selection.length > 0);
  };
@@ -3115,8 +3119,9 @@
  this.toggle_editor = function(props)
  {
    this.stop_spellchecking();
    if (props.mode == 'html') {
      this.display_spellcheck_controls(false);
      this.plain2html($('#'+props.id).val(), props.id);
      tinyMCE.execCommand('mceAddControl', false, props.id);
@@ -3127,8 +3132,6 @@
    }
    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'))) {
@@ -3137,7 +3140,6 @@
        this.html2plain(existingHtml, props.id);
      }
      tinyMCE.execCommand('mceRemoveControl', false, props.id);
      this.display_spellcheck_controls(true);
    }
    return true;
@@ -3146,43 +3148,53 @@
  this.stop_spellchecking = function()
  {
    var ed;
    if (window.tinyMCE && (ed = tinyMCE.get(this.env.composebody))) {
      if (ed.plugins.spellchecker && ed.plugins.spellchecker.active)
      if (ed.plugins && ed.plugins.spellchecker && ed.plugins.spellchecker.active)
        ed.execCommand('mceSpellCheck');
    }
    else if ((ed = this.env.spellcheck) && !this.spellcheck_ready) {
      $(ed.spell_span).trigger('click');
      this.set_spellcheck_state('ready');
    else if (ed = this.env.spellcheck) {
      if (ed.state && ed.state != 'ready' && ed.state != 'no_error_found')
        $(ed.spell_span).trigger('click');
    }
    this.spellcheck_state();
  };
  this.display_spellcheck_controls = function(vis)
  this.spellcheck_state = function()
  {
    if (this.env.spellcheck) {
      // stop spellchecking process
      if (!vis)
        this.stop_spellchecking();
    var ed, active;
      $(this.env.spellcheck.spell_container)[vis ? 'show' : 'hide']();
    }
  };
    if (window.tinyMCE && (ed = tinyMCE.get(this.env.composebody)) && ed.plugins && ed.plugins.spellchecker)
      active = ed.plugins.spellchecker.active;
    else if ((ed = this.env.spellcheck) && ed.state)
      active = ed.state != 'ready' && ed.state != 'no_error_found';
  this.set_spellcheck_state = function(s)
  {
    this.spellcheck_ready = (s == 'ready' || s == 'no_error_found');
    this.enable_command('spellcheck', this.spellcheck_ready);
    if (rcmail.buttons.spellcheck)
      $('#'+rcmail.buttons.spellcheck[0].id)[active ? 'addClass' : 'removeClass']('selected');
    return active;
  };
  // get selected language
  this.spellcheck_lang = function()
  {
    var ed;
    if (window.tinyMCE && (ed = tinyMCE.get(this.env.composebody)) && ed.plugins.spellchecker) {
    if (window.tinyMCE && (ed = tinyMCE.get(this.env.composebody)) && ed.plugins && ed.plugins.spellchecker)
      return ed.plugins.spellchecker.selectedLang;
    }
    else if (this.env.spellcheck) {
    else if (this.env.spellcheck)
      return GOOGIE_CUR_LANG;
    }
  };
  this.spellcheck_lang_set = function(lang)
  {
    var ed;
    if (window.tinyMCE && (ed = tinyMCE.get(this.env.composebody)) && ed.plugins)
      ed.plugins.spellchecker.selectedLang = lang;
    else if (this.env.spellcheck)
      this.env.spellcheck.setCurrentLanguage(lang);
  };
  // resume spellchecking, highlight provided mispellings without new ajax request
@@ -3201,6 +3213,8 @@
      sp.prepare(false, true);
      sp.processData(data);
    }
    this.spellcheck_state();
  }
  this.set_draft_id = function(id)
@@ -3614,9 +3628,9 @@
      mod = rcube_event.get_modifier(e);
    switch (key) {
      case 38:  // key up
      case 40:  // key down
        if (!this.ksearch_pane)
      case 38:  // arrow up
      case 40:  // arrow down
        if (!this.ksearch_visible())
          break;
        var dir = key==38 ? 1 : 0;
@@ -4215,7 +4229,7 @@
  };
  // add row to contacts list
  this.add_contact_row = function(cid, cols, select)
  this.add_contact_row = function(cid, cols, classes)
  {
    if (!this.gui_objects.contactslist)
      return false;
@@ -4224,7 +4238,7 @@
      row = document.createElement('tr');
    row.id = 'rcmrow'+this.html_identifier(cid);
    row.className = 'contact';
    row.className = 'contact ' + (classes || '');
    if (list.in_selection(cid))
      row.className += ' selected';
@@ -4491,9 +4505,7 @@
    if (!elem)
      elem = $('.ff_' + col);
    elem.focus(function(){ ref.focus_textfield(this); })
      .blur(function(){ ref.blur_textfield(this); })
      .each(function(){ this._placeholder = this.title = (ref.env.coltypes[col].label || ''); ref.blur_textfield(this); });
    elem.placeholder(ref.env.coltypes[col].label);
  };
  this.insert_edit_field = function(col, section, menu)
@@ -5410,22 +5422,6 @@
    }
  };
  this.focus_textfield = function(elem)
  {
    elem._hasfocus = true;
    var $elem = $(elem);
    if ($elem.hasClass('placeholder') || $elem.val() == elem._placeholder)
      $elem.val('').removeClass('placeholder').attr('spellcheck', true);
  };
  this.blur_textfield = function(elem)
  {
    elem._hasfocus = false;
    var $elem = $(elem);
    if (elem._placeholder && (!$elem.val() || $elem.val() == elem._placeholder))
      $elem.addClass('placeholder').attr('spellcheck', false).val(elem._placeholder);
  };
  // write to the document/window title
  this.set_pagetitle = function(title)
  {
@@ -5544,6 +5540,23 @@
    }
  };
  // remove all messages immediately
  this.clear_messages = function()
  {
    // pass command to parent window
    if (this.is_framed())
      return parent.rcmail.clear_messages();
    var k, n, m = this.messages;
    for (k in m)
      for (n in m[k].elements)
        if (m[k].obj)
          m[k].obj.hide();
    this.messages = {};
  };
  // mark a mailbox as selected and set environment variable
  this.select_folder = function(name, prefix, encode)
  {