diff options
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | config/main.inc.php.dist | 4 | ||||
-rw-r--r-- | program/js/app.js | 58 | ||||
-rw-r--r-- | program/localization/en_US/labels.inc | 1 | ||||
-rw-r--r-- | program/localization/pl_PL/labels.inc | 1 | ||||
-rw-r--r-- | program/steps/mail/func.inc | 38 | ||||
-rw-r--r-- | skins/default/ie6hacks.css | 6 | ||||
-rw-r--r-- | skins/default/mail.css | 26 | ||||
-rw-r--r-- | skins/default/templates/mail.html | 1 |
9 files changed, 79 insertions, 57 deletions
@@ -31,6 +31,7 @@ CHANGELOG Roundcube Webmail - Fix double e-mail filed in identity form (#1487054) - Display IMAP errors for LIST/THREAD/SEARCH commands (#1486905) - Add LITERAL+ (IMAP4 non-synchronizing literals) support (RFC2088) +- Add separate column for message status icon (#1486665) RELEASE 0.4.2 ------------- diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist index 16a61b5c2..4540adc34 100644 --- a/config/main.inc.php.dist +++ b/config/main.inc.php.dist @@ -293,8 +293,8 @@ $rcmail_config['message_sort_col'] = ''; $rcmail_config['message_sort_order'] = 'DESC'; // These cols are shown in the message list. Available cols are: -// subject, from, to, cc, replyto, date, size, flag, attachment -$rcmail_config['list_cols'] = array('subject', 'from', 'date', 'size', 'flag', 'attachment'); +// subject, from, to, cc, replyto, date, size, status, flag, attachment +$rcmail_config['list_cols'] = array('subject', 'status', 'from', 'date', 'size', 'flag', 'attachment'); // the default locale setting (leave empty for auto-detection) // RFC1766 formatted language name like en_US, de_DE, de_CH, fr_FR, pt_BR diff --git a/program/js/app.js b/program/js/app.js index cb94d9597..558a8b8a7 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -1550,8 +1550,10 @@ function rcube_webmail() if (uid && this.env.messages[uid]) $.extend(row, this.env.messages[uid]); - // set eventhandler to message icon - if (this.env.subject_col != null && (row.icon = document.getElementById('msgicn'+row.uid))) { + row.msgicon = 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.onmousedown = function(e) { self.command('toggle_status', this); rcube_event.cancel(e); }; } @@ -1618,20 +1620,14 @@ function rcube_webmail() row.id = 'rcmrow'+uid; row.className = css_class; - // message status icon + // message status icons css_class = 'msgicon'; if (!flags.unread && flags.unread_children > 0) css_class += ' unreadchildren'; - if (flags.deleted) - css_class += ' deleted'; - else if (flags.replied || flags.forwarded) { - if (flags.replied) - css_class += ' replied'; - if (flags.forwarded) - css_class += ' forwarded'; - } - else if (flags.unread) - css_class += ' unread'; + if (flags.replied) + css_class += ' replied'; + if (flags.forwarded) + css_class += ' forwarded'; // update selection if (message.selected && !list.in_selection(uid)) @@ -1693,6 +1689,15 @@ function rcube_webmail() else 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+'"> </span>'; + } else if (c == 'threads') html = expando; else if (c == 'subject') @@ -2221,23 +2226,28 @@ function rcube_webmail() return false; if (rows[uid].icon) { - css_class = 'msgicon'; - if (!rows[uid].unread && rows[uid].unread_children) - css_class += ' unreadchildren'; if (rows[uid].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'; - } + css_class = 'deleted'; else if (rows[uid].unread) - css_class += ' unread'; + css_class = 'unread'; + else + css_class = 'msgicon'; 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) { css_class = (rows[uid].flagged ? 'flagged' : 'unflagged'); rows[uid].flagged_icon.className = css_class; diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc index aace461f5..9a06096e6 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -52,6 +52,7 @@ $labels['date'] = 'Date'; $labels['size'] = 'Size'; $labels['priority'] = 'Priority'; $labels['organization'] = 'Organization'; +$labels['readstatus'] = 'Read status'; // aliases $labels['reply-to'] = $labels['replyto']; diff --git a/program/localization/pl_PL/labels.inc b/program/localization/pl_PL/labels.inc index 804b3d130..534681c65 100644 --- a/program/localization/pl_PL/labels.inc +++ b/program/localization/pl_PL/labels.inc @@ -45,6 +45,7 @@ $labels['bcc'] = 'Ukryta kopia'; $labels['replyto'] = 'Odp. do'; $labels['date'] = 'Data'; $labels['size'] = 'Rozmiar'; +$labels['readstatus'] = 'Przeczytano'; $labels['priority'] = 'Priorytet'; $labels['organization'] = 'Organizacja'; $labels['reply-to'] = 'Odpowiedz do'; diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 678dc0494..668d8c7e5 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -255,17 +255,14 @@ function rcmail_js_message_list($a_headers, $insert_top=FALSE, $a_show_cols=null if (empty($a_headers)) return; - // remove 'threads', 'attachment', 'flag' columns, we don't need them here - if (($key = array_search('attachment', $a_show_cols)) !== FALSE) - unset($a_show_cols[$key]); - if (($key = array_search('flag', $a_show_cols)) !== FALSE) - unset($a_show_cols[$key]); - if (($key = array_search('threads', $a_show_cols)) !== FALSE) - unset($a_show_cols[$key]); - // loop through message headers + // remove 'threads', 'attachment', 'flag', 'status' columns, we don't need them here + foreach (array('threads', 'attachment', 'flag', 'status') as $col) { + if (($key = array_search($col, $a_show_cols)) !== FALSE) + unset($a_show_cols[$key]); + } - foreach ($a_headers as $n => $header) - { + // loop through message headers + foreach ($a_headers as $n => $header) { if (empty($header)) 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']); // 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'))) $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); if (!$cont) $cont = rcube_label('nosubject'); $cont = Q($cont); - } + } else if ($col=='size') $cont = show_bytes($header->$col); 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); $a_msg_cols[$col] = $cont; - } + } if ($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_flags, $insert_top); - } + } - if ($IMAP->threading) { - $OUTPUT->command('init_threads', (array) $roots); - } + if ($IMAP->threading) { + $OUTPUT->command('init_threads', (array) $roots); + } } @@ -380,7 +375,8 @@ function rcmail_message_list_head($attrib, $a_show_cols) $col_name = '<span class="flagged"> </span>'; break; case 'attachment': - $col_name = '<span class="attachment"> </span>'; + case 'status': + $col_name = '<span class="' . $col .'"> </span>'; break; case 'threads': $col_name = $list_menu; diff --git a/skins/default/ie6hacks.css b/skins/default/ie6hacks.css index c2b3de255..d5cdf4537 100644 --- a/skins/default/ie6hacks.css +++ b/skins/default/ie6hacks.css @@ -128,11 +128,13 @@ ul.toolbarmenu li.separator_below #messagelist tr td.attachment span.report, #messagelist tr td.flag span.flagged, #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.replied, #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 { background-image: url(images/messageicons.gif); diff --git a/skins/default/mail.css b/skins/default/mail.css index fe8af465e..5e7ddf26d 100644 --- a/skins/default/mail.css +++ b/skins/default/mail.css @@ -701,12 +701,14 @@ body.messagelist display: inline-block; } -#messagelist tbody tr td.flag +#messagelist tbody tr td.flag, +#messagelist tbody tr td.status { cursor: pointer; } #messagelist tr td.flag span, +#messagelist tr td.status span, #messagelist tr td.attachment span { width: 15px; @@ -719,11 +721,13 @@ body.messagelist #messagelist tr td.attachment span.report, #messagelist tr td.flag span.flagged, #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.replied, #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 { vertical-align: middle; @@ -757,7 +761,6 @@ body.messagelist { background-position: 0 -51px; margin: 0 2px; - cursor: pointer; } #messagelist tr td.subject span.msgicon.replied @@ -775,12 +778,18 @@ body.messagelist 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; } -#messagelist tr td.subject span.msgicon.unread +#messagelist tr td.status span.status, +#messagelist tr td.status span.unread { background-position: 0 -119px; } @@ -821,10 +830,11 @@ body.messagelist #messagelist tr td.attachment, #messagelist tr td.threads, +#messagelist tr td.status, #messagelist tr td.flag { - width: 19px; - padding: 0 2px; + width: 17px; + padding: 0 0 0 2px; } #messagelist tr td.size diff --git a/skins/default/templates/mail.html b/skins/default/templates/mail.html index 1e444f839..08469faa0 100644 --- a/skins/default/templates/mail.html +++ b/skins/default/templates/mail.html @@ -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="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="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="flag" id="cols_flag" /><label for="cols_flag"><roundcube:label name="flag" /></label></li> </ul> |