Aleksander Machniak
2016-05-22 87cf0a3fb158b5ffaa54a79997d7b01492d39b74
program/js/app.js
@@ -339,8 +339,15 @@
          // init message compose form
          this.init_messageform();
        }
        else if (this.env.action == 'get')
        else if (this.env.action == 'get') {
          this.enable_command('download', 'print', true);
          if (this.env.is_message) {
            this.enable_command('reply', 'reply-all', 'edit', 'viewsource',
              'forward', 'forward-inline', 'forward-attachment', true);
            if (this.env.list_post)
              this.enable_command('reply-list', true);
          }
        }
        // show printing dialog
        else if (this.env.action == 'print' && this.env.uid
          && !this.env.is_pgp_content && !this.env.pgp_mime_part
@@ -1211,13 +1218,13 @@
            this.open_window(this.env.comm_path + url, true, true);
          }
        }
        else if (this.env.action == 'get') {
        else if (this.env.action == 'get' && !this.env.is_message) {
          this.gui_objects.messagepartframe.contentWindow.print();
        }
        else if (uid = this.get_single_uid()) {
          url = this.url('print', this.params_from_uid(uid, {_safe: this.env.safemode ? 1 : 0}));
          if (this.open_window(url, true, true)) {
            if (this.env.action != 'show')
            if (this.env.action != 'show' && this.env.action != 'get')
              this.mark_message('read', uid);
          }
        }
@@ -1362,7 +1369,7 @@
    if (!aborted && this.triggerEvent('after'+command, props) === false)
      ret = false;
    this.triggerEvent('actionafter', { props:props, action:command, aborted:aborted });
    this.triggerEvent('actionafter', { props:props, action:command, aborted:aborted, ret:ret });
    return ret === false ? false : obj ? false : true;
  };
@@ -2031,8 +2038,9 @@
      flagged: flags.flagged?1:0,
      has_children: flags.has_children?1:0,
      depth: flags.depth?flags.depth:0,
      unread_children: flags.unread_children?flags.unread_children:0,
      parent_uid: flags.parent_uid?flags.parent_uid:0,
      unread_children: flags.unread_children || 0,
      flagged_children: flags.flagged_children || 0,
      parent_uid: flags.parent_uid || 0,
      selected: this.select_all_mode || this.message_list.in_selection(uid),
      ml: flags.ml?1:0,
      ctype: flags.ctype,
@@ -2112,6 +2120,9 @@
      if (flags.unread_children && flags.seen && !message.expanded)
        row_class += ' unroot';
      if (flags.flagged_children && !message.expanded)
        row_class += ' flaggedroot';
    }
    tree += '<span id="msgicn'+row.id+'" class="'+css_class+status_class+'" title="'+status_label+'"></span>';
@@ -2149,7 +2160,7 @@
          html = '<span class="attachment" title="'+label+'"></span>';
        else if (/multipart\/report/.test(flags.ctype))
          html = '<span class="report"></span>';
          else
        else
          html = '&nbsp;';
      }
      else if (c == 'status') {
@@ -2570,9 +2581,10 @@
  {
    var row = this.message_list.rows[uid];
    // handle unread_children mark
    // handle unread_children/flagged_children mark
    row.expanded = !row.expanded;
    this.set_unread_children(uid);
    this.set_flagged_children(uid);
    row.expanded = !row.expanded;
    this.message_list.expand_row(e, uid);
@@ -2705,7 +2717,13 @@
    }
    else if (flag == 'unread' && p.has_children) {
      // unread_children may be undefined
      p.unread_children = p.unread_children ? p.unread_children + 1 : 1;
      p.unread_children = (p.unread_children || 0) + 1;
    }
    else if (flag == 'unflagged' && p.flagged_children) {
      p.flagged_children--;
    }
    else if (flag == 'flagged' && p.has_children) {
      p.flagged_children = (p.flagged_children || 0) + 1;
    }
    else {
      return;
@@ -2713,6 +2731,7 @@
    this.set_message_icon(root);
    this.set_unread_children(root);
    this.set_flagged_children(root);
  };
  // update thread indicators for all messages in a thread below the specified message
@@ -2730,11 +2749,19 @@
    if (!row.depth) // root message: decrease roots count
      count--;
    else if (row.unread) {
      // update unread_children for thread root
    // update unread_children for thread root
    if (row.depth && row.unread) {
      parent = this.message_list.find_root(uid);
      rows[parent].unread_children--;
      this.set_unread_children(parent);
    }
    // update unread_children for thread root
    if (row.depth && row.flagged) {
      parent = this.message_list.find_root(uid);
      rows[parent].flagged_children--;
      this.set_flagged_children(parent);
    }
    parent = row.parent_uid;
@@ -2778,9 +2805,11 @@
      row = row.nextSibling;
    }
    // update unread_children for roots
    for (r=0; r<roots.length; r++)
    // update unread_children/flagged_children for roots
    for (r=0; r<roots.length; r++) {
      this.set_unread_children(roots[r].uid);
      this.set_flagged_children(roots[r].uid);
    }
    return count;
  };
@@ -2879,6 +2908,9 @@
      if (row.unread != status)
        this.update_thread_root(uid, status ? 'unread' : 'read');
    }
    else if (flag == 'flagged') {
      this.update_thread_root(uid, status ? 'flagged' : 'unflagged');
    }
    if ($.inArray(flag, ['unread', 'deleted', 'replied', 'forwarded', 'flagged']) > -1)
      row[flag] = status;
@@ -2910,10 +2942,20 @@
    if (row.parent_uid)
      return;
    if (!row.unread && row.unread_children && !row.expanded)
      $(row.obj).addClass('unroot');
    else
      $(row.obj).removeClass('unroot');
    var enable = !row.unread && row.unread_children && !row.expanded;
    $(row.obj)[enable ? 'addClass' : 'removeClass']('unroot');
  };
  // sets flaggedroot (flagged_children) class of parent row
  this.set_flagged_children = function(uid)
  {
    var row = this.message_list.rows[uid];
    if (row.parent_uid)
      return;
    var enable = row.flagged_children && !row.expanded;
    $(row.obj)[enable ? 'addClass' : 'removeClass']('flaggedroot');
  };
  // copy selected messages to the specified mailbox
@@ -3477,6 +3519,12 @@
        // enable encrypted compose toggle
        this.enable_command('compose-encrypted', !is_html);
      }
      // make sure to disable encryption button after toggling editor into HTML mode
      this.addEventListener('actionafter', function(args) {
        if (args.ret && args.action == 'toggle-editor')
          ref.enable_command('compose-encrypted', !args.props.html);
      });
    }
  };
@@ -3571,14 +3619,6 @@
      // list recipients with missing keys
      if (!isvalid && missing_keys.length) {
        // load publickey.js
        if (!$('script#publickeyjs').length) {
          $('<script>')
            .attr('id', 'publickeyjs')
            .attr('src', ref.assets_path('program/js/publickey.js'))
            .appendTo(document.body);
        }
        // display dialog with missing keys
        ref.show_popup_dialog(
          ref.get_label('nopubkeyfor').replace('$email', missing_keys.join(', ')) +
@@ -4294,8 +4334,6 @@
    if (result) {
      // update internal format flag
      $("input[name='_is_html']").val(props.html ? 1 : 0);
      // enable encrypted compose toggle
      this.enable_command('compose-encrypted', !props.html);
    }
    return result;