Thomas Bruederli
2012-10-02 98183b39eb6f617dd4666ce86e0bceef0c8a82e9
Let the skin limit the number of visible recipeints and place a link to show them all in a dialog (better fix for #1488590)
3 files modified
84 ■■■■ changed files
program/js/app.js 34 ●●●●● patch | view | raw | blame | history
program/localization/en_US/labels.inc 1 ●●●● patch | view | raw | blame | history
program/steps/mail/func.inc 49 ●●●●● patch | view | raw | blame | history
program/js/app.js
@@ -5573,6 +5573,40 @@
    this.messages = {};
  };
  // open a jquery UI dialog with the given content
  this.show_popup_dialog = function(html, title)
  {
    // forward call to parent window
    if (this.is_framed()) {
      parent.rcmail.show_popup_dialog(html, title);
      return;
    }
    var popup = $('<div class="popup">')
      .html(html)
      .dialog({
        title: title,
        modal: true,
        resizable: true,
        width: 580,
        close: function(event, ui) { $(this).remove() }
      });
      // resize and center popup
      var win = $(window), w = win.width(), h = win.height(),
        width = popup.width(), height = popup.height();
      popup.dialog('option', { height: Math.min(h-40, height+50), width: Math.min(w-20, width+50) })
        .dialog('option', 'position', ['center', 'center']);  // only works in a separate call (!?)
  };
  // enable/disable buttons for page shifting
  this.set_page_buttons = function()
  {
    this.enable_command('nextpage', 'lastpage', (this.env.pagecount > this.env.current_page));
    this.enable_command('previouspage', 'firstpage', (this.env.current_page > 1));
  };
>>>>>>> 765ecb9... Let the skin limit the number of visible recipeints and place a link to show them all in a dialog (better fix for #1488590)
  // mark a mailbox as selected and set environment variable
  this.select_folder = function(name, prefix, encode)
  {
program/localization/en_US/labels.inc
@@ -239,6 +239,7 @@
$labels['showimages'] = 'Display images';
$labels['alwaysshow'] = 'Always show images from $sender';
$labels['isdraft']    = 'This is a draft message.';
$labels['andnmore']   = '$nr more...';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Plain text';
program/steps/mail/func.inc
@@ -964,6 +964,8 @@
    if (in_array($hkey, $exclude_headers))
      continue;
    $header_title = rcube_label(preg_replace('/(^mail-|-)/', '', $hkey));
    if ($hkey == 'date') {
      if ($PRINT_MODE)
        $header_value = format_date($value, $RCMAIL->config->get('date_long', 'x'));
@@ -979,7 +981,7 @@
    }
    else if ($hkey == 'replyto') {
      if ($headers['replyto'] != $headers['from']) {
        $header_value = rcmail_address_string($value, null, true, $attrib['addicon'], $headers['charset']);
        $header_value = rcmail_address_string($value, $attrib['max'], true, $attrib['addicon'], $headers['charset'], $header_title);
        $ishtml = true;
      }
      else
@@ -989,18 +991,18 @@
      if ($headers['mail-replyto'] != $headers['reply-to']
        && $headers['reply-to'] != $headers['from']
      ) {
        $header_value = rcmail_address_string($value, null, true, $attrib['addicon'], $headers['charset']);
        $header_value = rcmail_address_string($value, $attrib['max'], true, $attrib['addicon'], $headers['charset'], $header_title);
        $ishtml = true;
      }
      else
        continue;
    }
    else if ($hkey == 'mail-followup-to') {
      $header_value = rcmail_address_string($value, null, true, $attrib['addicon'], $headers['charset']);
      $header_value = rcmail_address_string($value, $attrib['max'], true, $attrib['addicon'], $headers['charset'], $header_title);
      $ishtml = true;
    }
    else if (in_array($hkey, array('from', 'to', 'cc', 'bcc'))) {
      $header_value = rcmail_address_string($value, $attrib['max'], true, $attrib['addicon'], $headers['charset']);
      $header_value = rcmail_address_string($value, $attrib['max'], true, $attrib['addicon'], $headers['charset'], $header_title);
      $ishtml = true;
    }
    else if ($hkey == 'subject' && empty($value))
@@ -1009,7 +1011,7 @@
      $header_value = trim(rcube_mime::decode_header($value, $headers['charset']));
    $output_headers[$hkey] = array(
        'title' => rcube_label(preg_replace('/(^mail-|-)/', '', $hkey)),
        'title' => $header_title,
        'value' => $header_value,
        'raw' => $value,
        'html' => $ishtml,
@@ -1352,7 +1354,7 @@
/**
 * decode address string and re-format it as HTML links
 */
function rcmail_address_string($input, $max=null, $linked=false, $addicon=null, $default_charset=null)
function rcmail_address_string($input, $max=null, $linked=false, $addicon=null, $default_charset=null, $title=null)
{
  global $RCMAIL, $PRINT_MODE, $CONFIG;
@@ -1364,6 +1366,7 @@
  $c = count($a_parts);
  $j = 0;
  $out = '';
  $allvalues = array();
  if ($addicon && !isset($_SESSION['writeable_abook'])) {
    $_SESSION['writeable_abook'] = $RCMAIL->get_address_sources(true) ? true : false;
@@ -1371,7 +1374,6 @@
  foreach ($a_parts as $part) {
    $j++;
    $name   = $part['name'];
    $mailto = $part['mailto'];
    $string = $part['string'];
@@ -1413,7 +1415,6 @@
            'alt' => "Add contact",
          )));
      }
      $out .= html::span('adr', $address);
    }
    else {
      $address = '';
@@ -1421,19 +1422,37 @@
        $address .= Q($name);
      if ($mailto)
        $address .= (strlen($address) ? ' ' : '') . sprintf('&lt;%s&gt;', Q($mailto));
      $out .= html::span('adr', $address);
    }
    if ($c>$j)
      $out .= ','.($max ? '&nbsp;' : ' ');
    $address = html::span('adr', $address);
    $allvalues[] = $address;
    if ($max && $j==$max && $c>$j) {
      $out .= '...';
      break;
    if (!$moreadrs)
      $out .= ($out ? ', ' : '') . $address;
    if ($max && $j == $max && $c > $j) {
      if ($linked) {
        $moreadrs = $c - $j;
      }
      else {
        $out .= '...';
        break;
      }
    }
  }
  if ($moreadrs) {
      $out .= ' ' . html::a(array(
          'href' => '#more',
          'class' => 'morelink',
          'onclick' => sprintf("return %s.show_popup_dialog('%s','%s')",
            JS_OBJECT_NAME,
            JQ(join(', ', $allvalues)),
            JQ($title))
        ),
        Q(rcube_label(array('name' => 'andnmore', 'vars' => array('nr' => $moreadrs)))));
  }
  return $out;
}