summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Bruederli <thomas@roundcube.net>2012-10-02 14:14:24 +0200
committerThomas Bruederli <thomas@roundcube.net>2012-10-02 19:51:35 +0200
commit98183b39eb6f617dd4666ce86e0bceef0c8a82e9 (patch)
treeae54fc4d33aab57db7248143ce844c1e18698053
parent92de1c8f54359f83faa2e7cb377c62fd8915ef11 (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.js34
-rw-r--r--program/localization/en_US/labels.inc1
-rw-r--r--program/steps/mail/func.inc49
3 files changed, 69 insertions, 15 deletions
diff --git a/program/js/app.js b/program/js/app.js
index 3115690bb..644899166 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -5573,6 +5573,40 @@ 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()
+ {
+ 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)
{
diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc
index 94bae1974..29df25171 100644
--- a/program/localization/en_US/labels.inc
+++ b/program/localization/en_US/labels.inc
@@ -239,6 +239,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 59203bfd9..732719014 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -964,6 +964,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'));
@@ -979,7 +981,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
@@ -989,18 +991,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))
@@ -1009,7 +1011,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,
@@ -1352,7 +1354,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;
@@ -1364,6 +1366,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;
@@ -1371,7 +1374,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'];
@@ -1413,7 +1415,6 @@ function rcmail_address_string($input, $max=null, $linked=false, $addicon=null,
'alt' => "Add contact",
)));
}
- $out .= html::span('adr', $address);
}
else {
$address = '';
@@ -1421,19 +1422,37 @@ function rcmail_address_string($input, $max=null, $linked=false, $addicon=null,
$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;
}