diff options
author | Thomas Bruederli <thomas@roundcube.net> | 2012-10-02 14:14:24 +0200 |
---|---|---|
committer | Thomas Bruederli <thomas@roundcube.net> | 2012-10-02 14:14:24 +0200 |
commit | 765ecb9fa0eb5089242c0fb6d348dd600c95c39a (patch) | |
tree | cd6e7d0218efeb2c70211af49f42db92451517c7 | |
parent | 2db129813e4b31f2aae08a95b0cd360c5fa2bd48 (diff) |
Let the skin limit the number of visible recipeints and place a link to show them all in a dialog (better fix for #1488590)
-rw-r--r-- | program/js/app.js | 26 | ||||
-rw-r--r-- | program/localization/en_US/labels.inc | 1 | ||||
-rw-r--r-- | program/steps/mail/func.inc | 49 |
3 files changed, 61 insertions, 15 deletions
diff --git a/program/js/app.js b/program/js/app.js index 4d784e532..06eb9295c 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -5624,6 +5624,32 @@ function rcube_webmail() 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() { diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc index 9882c19b5..538333929 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -236,6 +236,7 @@ $labels['nosubject'] = '(no subject)'; $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'; diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index c4791a0ce..88670bd5e 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -969,6 +969,8 @@ function rcmail_message_headers($attrib, $headers=NULL) 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')); @@ -984,7 +986,7 @@ function rcmail_message_headers($attrib, $headers=NULL) } 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 @@ -994,18 +996,18 @@ function rcmail_message_headers($attrib, $headers=NULL) 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)) @@ -1014,7 +1016,7 @@ function rcmail_message_headers($attrib, $headers=NULL) $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, @@ -1405,7 +1407,7 @@ function rcmail_alter_html_link($matches) /** * 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; @@ -1417,6 +1419,7 @@ function rcmail_address_string($input, $max=null, $linked=false, $addicon=null, $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; @@ -1424,7 +1427,6 @@ function rcmail_address_string($input, $max=null, $linked=false, $addicon=null, foreach ($a_parts as $part) { $j++; - $name = $part['name']; $mailto = $part['mailto']; $string = $part['string']; @@ -1466,7 +1468,6 @@ function rcmail_address_string($input, $max=null, $linked=false, $addicon=null, 'alt' => "Add contact", ))); } - $out .= html::span('adr', $address); } else { $address = ''; @@ -1474,19 +1475,37 @@ function rcmail_address_string($input, $max=null, $linked=false, $addicon=null, $address .= Q($name); if ($mailto) $address .= (strlen($address) ? ' ' : '') . sprintf('<%s>', Q($mailto)); - - $out .= html::span('adr', $address); } - if ($c>$j) - $out .= ','.($max ? ' ' : ' '); + $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; } |