- Add separate column for message status icon (#1486665)

release-0.6
alecpl 14 years ago
parent 4c6a61a684
commit 4438d66760

@ -31,6 +31,7 @@ CHANGELOG Roundcube Webmail
- Fix double e-mail filed in identity form (#1487054) - Fix double e-mail filed in identity form (#1487054)
- Display IMAP errors for LIST/THREAD/SEARCH commands (#1486905) - Display IMAP errors for LIST/THREAD/SEARCH commands (#1486905)
- Add LITERAL+ (IMAP4 non-synchronizing literals) support (RFC2088) - Add LITERAL+ (IMAP4 non-synchronizing literals) support (RFC2088)
- Add separate column for message status icon (#1486665)
RELEASE 0.4.2 RELEASE 0.4.2
------------- -------------

@ -293,8 +293,8 @@ $rcmail_config['message_sort_col'] = '';
$rcmail_config['message_sort_order'] = 'DESC'; $rcmail_config['message_sort_order'] = 'DESC';
// These cols are shown in the message list. Available cols are: // These cols are shown in the message list. Available cols are:
// subject, from, to, cc, replyto, date, size, flag, attachment // subject, from, to, cc, replyto, date, size, status, flag, attachment
$rcmail_config['list_cols'] = array('subject', 'from', 'date', 'size', 'flag', 'attachment'); $rcmail_config['list_cols'] = array('subject', 'status', 'from', 'date', 'size', 'flag', 'attachment');
// the default locale setting (leave empty for auto-detection) // the default locale setting (leave empty for auto-detection)
// RFC1766 formatted language name like en_US, de_DE, de_CH, fr_FR, pt_BR // RFC1766 formatted language name like en_US, de_DE, de_CH, fr_FR, pt_BR

@ -1550,8 +1550,10 @@ function rcube_webmail()
if (uid && this.env.messages[uid]) if (uid && this.env.messages[uid])
$.extend(row, this.env.messages[uid]); $.extend(row, this.env.messages[uid]);
// set eventhandler to message icon row.msgicon = document.getElementById('msgicn'+row.uid);
if (this.env.subject_col != null && (row.icon = document.getElementById('msgicn'+row.uid))) {
// set eventhandler to message status icon
if (row.icon = document.getElementById('statusicn'+row.uid)) {
row.icon._row = row.obj; row.icon._row = row.obj;
row.icon.onmousedown = function(e) { self.command('toggle_status', this); rcube_event.cancel(e); }; row.icon.onmousedown = function(e) { self.command('toggle_status', this); rcube_event.cancel(e); };
} }
@ -1618,20 +1620,14 @@ function rcube_webmail()
row.id = 'rcmrow'+uid; row.id = 'rcmrow'+uid;
row.className = css_class; row.className = css_class;
// message status icon // message status icons
css_class = 'msgicon'; css_class = 'msgicon';
if (!flags.unread && flags.unread_children > 0) if (!flags.unread && flags.unread_children > 0)
css_class += ' unreadchildren'; css_class += ' unreadchildren';
if (flags.deleted) if (flags.replied)
css_class += ' deleted'; css_class += ' replied';
else if (flags.replied || flags.forwarded) { if (flags.forwarded)
if (flags.replied) css_class += ' forwarded';
css_class += ' replied';
if (flags.forwarded)
css_class += ' forwarded';
}
else if (flags.unread)
css_class += ' unread';
// update selection // update selection
if (message.selected && !list.in_selection(uid)) if (message.selected && !list.in_selection(uid))
@ -1693,6 +1689,15 @@ function rcube_webmail()
else else
html = ' '; html = ' ';
} }
else if (c == 'status') {
if (flags.deleted)
css_class = 'deleted';
else if (flags.unread)
css_class = 'unread';
else
css_class = 'msgicon';
html = '<span id="statusicn'+uid+'" class="'+css_class+'">&nbsp;</span>';
}
else if (c == 'threads') else if (c == 'threads')
html = expando; html = expando;
else if (c == 'subject') else if (c == 'subject')
@ -2221,23 +2226,28 @@ function rcube_webmail()
return false; return false;
if (rows[uid].icon) { if (rows[uid].icon) {
css_class = 'msgicon';
if (!rows[uid].unread && rows[uid].unread_children)
css_class += ' unreadchildren';
if (rows[uid].deleted) if (rows[uid].deleted)
css_class += ' deleted'; css_class = 'deleted';
else if (rows[uid].replied || rows[uid].forwarded) {
if (rows[uid].replied)
css_class += ' replied';
if (rows[uid].forwarded)
css_class += ' forwarded';
}
else if (rows[uid].unread) else if (rows[uid].unread)
css_class += ' unread'; css_class = 'unread';
else
css_class = 'msgicon';
rows[uid].icon.className = css_class; rows[uid].icon.className = css_class;
} }
if (rows[uid].msgicon) {
css_class = 'msgicon';
if (!rows[uid].unread && rows[uid].unread_children)
css_class += ' unreadchildren';
if (rows[uid].replied)
css_class += ' replied';
if (rows[uid].forwarded)
css_class += ' forwarded';
rows[uid].msgicon.className = css_class;
}
if (rows[uid].flagged_icon) { if (rows[uid].flagged_icon) {
css_class = (rows[uid].flagged ? 'flagged' : 'unflagged'); css_class = (rows[uid].flagged ? 'flagged' : 'unflagged');
rows[uid].flagged_icon.className = css_class; rows[uid].flagged_icon.className = css_class;

@ -52,6 +52,7 @@ $labels['date'] = 'Date';
$labels['size'] = 'Size'; $labels['size'] = 'Size';
$labels['priority'] = 'Priority'; $labels['priority'] = 'Priority';
$labels['organization'] = 'Organization'; $labels['organization'] = 'Organization';
$labels['readstatus'] = 'Read status';
// aliases // aliases
$labels['reply-to'] = $labels['replyto']; $labels['reply-to'] = $labels['replyto'];

@ -45,6 +45,7 @@ $labels['bcc'] = 'Ukryta kopia';
$labels['replyto'] = 'Odp. do'; $labels['replyto'] = 'Odp. do';
$labels['date'] = 'Data'; $labels['date'] = 'Data';
$labels['size'] = 'Rozmiar'; $labels['size'] = 'Rozmiar';
$labels['readstatus'] = 'Przeczytano';
$labels['priority'] = 'Priorytet'; $labels['priority'] = 'Priorytet';
$labels['organization'] = 'Organizacja'; $labels['organization'] = 'Organizacja';
$labels['reply-to'] = 'Odpowiedz do'; $labels['reply-to'] = 'Odpowiedz do';

@ -255,17 +255,14 @@ function rcmail_js_message_list($a_headers, $insert_top=FALSE, $a_show_cols=null
if (empty($a_headers)) if (empty($a_headers))
return; return;
// remove 'threads', 'attachment', 'flag' columns, we don't need them here // remove 'threads', 'attachment', 'flag', 'status' columns, we don't need them here
if (($key = array_search('attachment', $a_show_cols)) !== FALSE) foreach (array('threads', 'attachment', 'flag', 'status') as $col) {
unset($a_show_cols[$key]); if (($key = array_search($col, $a_show_cols)) !== FALSE)
if (($key = array_search('flag', $a_show_cols)) !== FALSE) unset($a_show_cols[$key]);
unset($a_show_cols[$key]); }
if (($key = array_search('threads', $a_show_cols)) !== FALSE)
unset($a_show_cols[$key]);
// loop through message headers
foreach ($a_headers as $n => $header) // loop through message headers
{ foreach ($a_headers as $n => $header) {
if (empty($header)) if (empty($header))
continue; continue;
@ -275,16 +272,14 @@ function rcmail_js_message_list($a_headers, $insert_top=FALSE, $a_show_cols=null
$IMAP->set_charset(!empty($header->charset) ? $header->charset : $CONFIG['default_charset']); $IMAP->set_charset(!empty($header->charset) ? $header->charset : $CONFIG['default_charset']);
// format each col; similar as in rcmail_message_list() // format each col; similar as in rcmail_message_list()
foreach ($a_show_cols as $col) foreach ($a_show_cols as $col) {
{
if (in_array($col, array('from', 'to', 'cc', 'replyto'))) if (in_array($col, array('from', 'to', 'cc', 'replyto')))
$cont = Q(rcmail_address_string($header->$col, 3), 'show'); $cont = Q(rcmail_address_string($header->$col, 3), 'show');
else if ($col=='subject') else if ($col=='subject') {
{
$cont = abbreviate_string(trim($IMAP->decode_header($header->$col)), 160); $cont = abbreviate_string(trim($IMAP->decode_header($header->$col)), 160);
if (!$cont) $cont = rcube_label('nosubject'); if (!$cont) $cont = rcube_label('nosubject');
$cont = Q($cont); $cont = Q($cont);
} }
else if ($col=='size') else if ($col=='size')
$cont = show_bytes($header->$col); $cont = show_bytes($header->$col);
else if ($col=='date') else if ($col=='date')
@ -293,7 +288,7 @@ function rcmail_js_message_list($a_headers, $insert_top=FALSE, $a_show_cols=null
$cont = Q($header->$col); $cont = Q($header->$col);
$a_msg_cols[$col] = $cont; $a_msg_cols[$col] = $cont;
} }
if ($header->depth) if ($header->depth)
$a_msg_flags['depth'] = $header->depth; $a_msg_flags['depth'] = $header->depth;
@ -332,11 +327,11 @@ function rcmail_js_message_list($a_headers, $insert_top=FALSE, $a_show_cols=null
$a_msg_cols, $a_msg_cols,
$a_msg_flags, $a_msg_flags,
$insert_top); $insert_top);
} }
if ($IMAP->threading) { if ($IMAP->threading) {
$OUTPUT->command('init_threads', (array) $roots); $OUTPUT->command('init_threads', (array) $roots);
} }
} }
@ -380,7 +375,8 @@ function rcmail_message_list_head($attrib, $a_show_cols)
$col_name = '<span class="flagged">&nbsp;</span>'; $col_name = '<span class="flagged">&nbsp;</span>';
break; break;
case 'attachment': case 'attachment':
$col_name = '<span class="attachment">&nbsp;</span>'; case 'status':
$col_name = '<span class="' . $col .'">&nbsp;</span>';
break; break;
case 'threads': case 'threads':
$col_name = $list_menu; $col_name = $list_menu;

@ -128,11 +128,13 @@ ul.toolbarmenu li.separator_below
#messagelist tr td.attachment span.report, #messagelist tr td.attachment span.report,
#messagelist tr td.flag span.flagged, #messagelist tr td.flag span.flagged,
#messagelist tr td.flag span.unflagged:hover, #messagelist tr td.flag span.unflagged:hover,
#messagelist tr td.status span.status,
#messagelist tr td.status span.msgicon,
#messagelist tr td.status span.unread,
#messagelist tr td.status span.deleted,
#messagelist tr td.subject span.msgicon, #messagelist tr td.subject span.msgicon,
#messagelist tr td.subject span.msgicon.replied, #messagelist tr td.subject span.msgicon.replied,
#messagelist tr td.subject span.msgicon.forwarded, #messagelist tr td.subject span.msgicon.forwarded,
#messagelist tr td.subject span.msgicon.deleted,
#messagelist tr td.subject span.msgicon.unread,
#messagelist tr td.subject span.msgicon.unreadchildren #messagelist tr td.subject span.msgicon.unreadchildren
{ {
background-image: url(images/messageicons.gif); background-image: url(images/messageicons.gif);

@ -701,12 +701,14 @@ body.messagelist
display: inline-block; display: inline-block;
} }
#messagelist tbody tr td.flag #messagelist tbody tr td.flag,
#messagelist tbody tr td.status
{ {
cursor: pointer; cursor: pointer;
} }
#messagelist tr td.flag span, #messagelist tr td.flag span,
#messagelist tr td.status span,
#messagelist tr td.attachment span #messagelist tr td.attachment span
{ {
width: 15px; width: 15px;
@ -719,11 +721,13 @@ body.messagelist
#messagelist tr td.attachment span.report, #messagelist tr td.attachment span.report,
#messagelist tr td.flag span.flagged, #messagelist tr td.flag span.flagged,
#messagelist tr td.flag span.unflagged:hover, #messagelist tr td.flag span.unflagged:hover,
#messagelist tr td.status span.status,
#messagelist tr td.status span.msgicon,
#messagelist tr td.status span.deleted,
#messagelist tr td.status span.unread,
#messagelist tr td.subject span.msgicon, #messagelist tr td.subject span.msgicon,
#messagelist tr td.subject span.msgicon.replied, #messagelist tr td.subject span.msgicon.replied,
#messagelist tr td.subject span.msgicon.forwarded, #messagelist tr td.subject span.msgicon.forwarded,
#messagelist tr td.subject span.msgicon.deleted,
#messagelist tr td.subject span.msgicon.unread,
#messagelist tr td.subject span.msgicon.unreadchildren #messagelist tr td.subject span.msgicon.unreadchildren
{ {
vertical-align: middle; vertical-align: middle;
@ -757,7 +761,6 @@ body.messagelist
{ {
background-position: 0 -51px; background-position: 0 -51px;
margin: 0 2px; margin: 0 2px;
cursor: pointer;
} }
#messagelist tr td.subject span.msgicon.replied #messagelist tr td.subject span.msgicon.replied
@ -775,12 +778,18 @@ body.messagelist
background-position: 0 -102px; background-position: 0 -102px;
} }
#messagelist tr td.subject span.msgicon.deleted #messagelist tr td.status span.msgicon
{
background-position: 0 -51px;
}
#messagelist tr td.status span.deleted
{ {
background-position: 0 -187px; background-position: 0 -187px;
} }
#messagelist tr td.subject span.msgicon.unread #messagelist tr td.status span.status,
#messagelist tr td.status span.unread
{ {
background-position: 0 -119px; background-position: 0 -119px;
} }
@ -821,10 +830,11 @@ body.messagelist
#messagelist tr td.attachment, #messagelist tr td.attachment,
#messagelist tr td.threads, #messagelist tr td.threads,
#messagelist tr td.status,
#messagelist tr td.flag #messagelist tr td.flag
{ {
width: 19px; width: 17px;
padding: 0 2px; padding: 0 0 0 2px;
} }
#messagelist tr td.size #messagelist tr td.size

@ -189,6 +189,7 @@
<li><input type="checkbox" name="list_col[]" value="cc" id="cols_cc" /><label for="cols_cc"><roundcube:label name="cc" /></label></li> <li><input type="checkbox" name="list_col[]" value="cc" id="cols_cc" /><label for="cols_cc"><roundcube:label name="cc" /></label></li>
<li><input type="checkbox" name="list_col[]" value="date" id="cols_date" /><label for="cols_date"><roundcube:label name="date" /></label></li> <li><input type="checkbox" name="list_col[]" value="date" id="cols_date" /><label for="cols_date"><roundcube:label name="date" /></label></li>
<li><input type="checkbox" name="list_col[]" value="size" id="cols_size" /><label for="cols_size"><roundcube:label name="size" /></label></li> <li><input type="checkbox" name="list_col[]" value="size" id="cols_size" /><label for="cols_size"><roundcube:label name="size" /></label></li>
<li><input type="checkbox" name="list_col[]" value="status" id="cols_status" /><label for="cols_status"><roundcube:label name="readstatus" /></label></li>
<li><input type="checkbox" name="list_col[]" value="attachment" id="cols_attachment" /><label for="cols_attachment"><roundcube:label name="attachment" /></label></li> <li><input type="checkbox" name="list_col[]" value="attachment" id="cols_attachment" /><label for="cols_attachment"><roundcube:label name="attachment" /></label></li>
<li><input type="checkbox" name="list_col[]" value="flag" id="cols_flag" /><label for="cols_flag"><roundcube:label name="flag" /></label></li> <li><input type="checkbox" name="list_col[]" value="flag" id="cols_flag" /><label for="cols_flag"><roundcube:label name="flag" /></label></li>
</ul> </ul>

Loading…
Cancel
Save