<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[BuddyPress][12073] trunk/src/bp-templates/bp-nouveau: BP Nouveau - Messages UI: Improve a11y in message boxes.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="http://buddypress.trac.wordpress.org/changeset/12073">12073</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://buddypress.trac.wordpress.org/changeset/12073","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>imath</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2018-05-10 06:23:58 +0000 (Thu, 10 May 2018)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>BP Nouveau - Messages UI: Improve a11y in message boxes.

Message boxes are listing messages (inbox, starbox, sentbox). Using screen reader softwares or the keyboard, it is now a better experience to navigate in these lists. Pressing the Tab key makes you navigate from the Message Checkbox, to the sender/recipients link and finally to the Message title. Once on a Message title, pressing the enter key activates the message and updates the preview box. Pressing on the enter key another time opens the full conversation.

Huge Props mercime

Fixes <a href="http://buddypress.trac.wordpress.org/ticket/7731">#7731</a></pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcbptemplatesbpnouveaubuddypresscommonjstemplatesmessagesindexphp">trunk/src/bp-templates/bp-nouveau/buddypress/common/js-templates/messages/index.php</a></li>
<li><a href="#trunksrcbptemplatesbpnouveaucssbuddypressrtlcss">trunk/src/bp-templates/bp-nouveau/css/buddypress-rtl.css</a></li>
<li><a href="#trunksrcbptemplatesbpnouveaucssbuddypresscss">trunk/src/bp-templates/bp-nouveau/css/buddypress.css</a></li>
<li><a href="#trunksrcbptemplatesbpnouveauincludesmessagesfunctionsphp">trunk/src/bp-templates/bp-nouveau/includes/messages/functions.php</a></li>
<li><a href="#trunksrcbptemplatesbpnouveaujsbuddypressmessagesjs">trunk/src/bp-templates/bp-nouveau/js/buddypress-messages.js</a></li>
<li><a href="#trunksrcbptemplatesbpnouveausass_nouveau_messagesscss">trunk/src/bp-templates/bp-nouveau/sass/_nouveau_messages.scss</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcbptemplatesbpnouveaubuddypresscommonjstemplatesmessagesindexphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-templates/bp-nouveau/buddypress/common/js-templates/messages/index.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-templates/bp-nouveau/buddypress/common/js-templates/messages/index.php       2018-05-09 21:30:39 UTC (rev 12072)
+++ trunk/src/bp-templates/bp-nouveau/buddypress/common/js-templates/messages/index.php 2018-05-10 06:23:58 UTC (rev 12073)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -122,20 +122,39 @@
</span><span class="cx" style="display: block; padding: 0 10px"> <script type="text/html" id="tmpl-bp-messages-thread">
</span><span class="cx" style="display: block; padding: 0 10px">        <div class="thread-cb">
</span><span class="cx" style="display: block; padding: 0 10px">                <input class="message-check" type="checkbox" name="message_ids[]" id="bp-message-thread-{{data.id}}" value="{{data.id}}">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                <label for="bp-message-thread-{{data.id}}" class="bp-screen-reader-text"><?php esc_html_e( 'Select this message', 'buddypress' ); ?></label>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         <label for="bp-message-thread-{{data.id}}" class="bp-screen-reader-text"><?php esc_html_e( 'Select message:', 'buddypress' ); ?> {{data.subject}}</label>
</ins><span class="cx" style="display: block; padding: 0 10px">         </div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        <div class="thread-from">
-               <a class="user-link" href="{{data.sender_link}}">
-                       <img class="avatar" src="{{data.sender_avatar}}" alt="" />
-                       <span class="user-name">{{data.sender_name}}</span>
-               </a>
-       </div>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       <# if ( ! data.recipientsCount ) { #>
+               <div class="thread-from">
+                       <a class="user-link" href="{{data.sender_link}}">
+                               <img class="avatar" src="{{data.sender_avatar}}" alt="" />
+                               <span class="bp-screen-reader-text"><?php esc_html_e( 'From:', 'buddypress' ); ?></span>
+                               <span class="user-name">{{data.sender_name}}</span>
+                       </a>
+               </div>
+       <# } else {
+               var recipient = _.first( data.recipients );
+               #>
+               <div class="thread-to">
+                       <a class="user-link" href="{{recipient.user_link}}">
+                               <img class="avatar" src="{{recipient.avatar}}" alt="" />
+                               <span class="bp-screen-reader-text"><?php esc_html_e( 'To:', 'buddypress' ); ?></span>
+                               <span class="user-name">{{recipient.user_name}}</span>
+                       </a>
+
+                       <# if ( data.toOthers ) { #>
+                               <span class="num-recipients">{{data.toOthers}}</span>
+                       <# } #>
+               </div>
+       <# } #>
+
</ins><span class="cx" style="display: block; padding: 0 10px">         <div class="thread-content" data-thread-id="{{data.id}}">
</span><span class="cx" style="display: block; padding: 0 10px">                <div class="thread-subject">
</span><span class="cx" style="display: block; padding: 0 10px">                        <span class="thread-count">({{data.count}})</span>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        <span class="subject"><# print( data.subject ); #></span>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 <a class="subject" href="#view/{{data.id}}">{{data.subject}}</a>
</ins><span class="cx" style="display: block; padding: 0 10px">                 </div>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                <p class="excerpt"><# print( data.excerpt ); #></p>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         <p class="excerpt">{{data.excerpt}}</p>
</ins><span class="cx" style="display: block; padding: 0 10px">         </div>
</span><span class="cx" style="display: block; padding: 0 10px">        <div class="thread-date">
</span><span class="cx" style="display: block; padding: 0 10px">                <time datetime="{{data.date.toISOString()}}">{{data.display_date}}</time>
</span></span></pre></div>
<a id="trunksrcbptemplatesbpnouveaucssbuddypressrtlcss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-templates/bp-nouveau/css/buddypress-rtl.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-templates/bp-nouveau/css/buddypress-rtl.css  2018-05-09 21:30:39 UTC (rev 12072)
+++ trunk/src/bp-templates/bp-nouveau/css/buddypress-rtl.css    2018-05-10 06:23:58 UTC (rev 12073)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2963,7 +2963,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">        flex: 1 2 5%;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#message-threads li .thread-from {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+#message-threads li .thread-from,
+#message-threads li .thread-to {
</ins><span class="cx" style="display: block; padding: 0 10px">         -webkit-flex: 1 2 20%;
</span><span class="cx" style="display: block; padding: 0 10px">        -moz-flex: 1 2 20%;
</span><span class="cx" style="display: block; padding: 0 10px">        -ms-flex: 1 2 20%;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2971,16 +2972,26 @@
</span><span class="cx" style="display: block; padding: 0 10px">        flex: 1 2 20%;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#message-threads li .thread-from img.avatar {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+#message-threads li .thread-from img.avatar,
+#message-threads li .thread-to img.avatar {
</ins><span class="cx" style="display: block; padding: 0 10px">         float: right;
</span><span class="cx" style="display: block; padding: 0 10px">        margin: 0 0 0 10px;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#message-threads li .thread-from .user-name {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+#message-threads li .thread-from .user-name,
+#message-threads li .thread-to .user-name {
</ins><span class="cx" style="display: block; padding: 0 10px">         display: inline-block;
</span><span class="cx" style="display: block; padding: 0 10px">        line-height: 1.1;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+#message-threads li .thread-from .num-recipients,
+#message-threads li .thread-to .num-recipients {
+       color: #737373;
+       font-weight: 400;
+       font-size: 12px;
+       margin: 0;
+}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> #message-threads li .thread-content {
</span><span class="cx" style="display: block; padding: 0 10px">        -webkit-flex: 1 2 60%;
</span><span class="cx" style="display: block; padding: 0 10px">        -moz-flex: 1 2 60%;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3005,8 +3016,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">        color: #5087e5;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#message-threads li .thread-content {
-       cursor: pointer;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+#message-threads li.unread {
+       font-weight: 700;
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> #message-threads li .thread-content .excerpt {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3016,6 +3027,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> #message-threads li .thread-content .thread-from,
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+#message-threads li .thread-content .thread-to,
</ins><span class="cx" style="display: block; padding: 0 10px"> #message-threads li .thread-content .thread-subject {
</span><span class="cx" style="display: block; padding: 0 10px">        font-size: 13px;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3022,6 +3034,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> @media screen and (min-width: 46.8em) {
</span><span class="cx" style="display: block; padding: 0 10px">        #message-threads li .thread-content .thread-from,
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        #message-threads li .thread-content .thread-to,
</ins><span class="cx" style="display: block; padding: 0 10px">         #message-threads li .thread-content .thread-subject {
</span><span class="cx" style="display: block; padding: 0 10px">                font-size: 16px;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span></span></pre></div>
<a id="trunksrcbptemplatesbpnouveaucssbuddypresscss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-templates/bp-nouveau/css/buddypress.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-templates/bp-nouveau/css/buddypress.css      2018-05-09 21:30:39 UTC (rev 12072)
+++ trunk/src/bp-templates/bp-nouveau/css/buddypress.css        2018-05-10 06:23:58 UTC (rev 12073)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2963,7 +2963,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">        flex: 1 2 5%;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#message-threads li .thread-from {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+#message-threads li .thread-from,
+#message-threads li .thread-to {
</ins><span class="cx" style="display: block; padding: 0 10px">         -webkit-flex: 1 2 20%;
</span><span class="cx" style="display: block; padding: 0 10px">        -moz-flex: 1 2 20%;
</span><span class="cx" style="display: block; padding: 0 10px">        -ms-flex: 1 2 20%;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2971,16 +2972,26 @@
</span><span class="cx" style="display: block; padding: 0 10px">        flex: 1 2 20%;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#message-threads li .thread-from img.avatar {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+#message-threads li .thread-from img.avatar,
+#message-threads li .thread-to img.avatar {
</ins><span class="cx" style="display: block; padding: 0 10px">         float: left;
</span><span class="cx" style="display: block; padding: 0 10px">        margin: 0 10px 0 0;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#message-threads li .thread-from .user-name {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+#message-threads li .thread-from .user-name,
+#message-threads li .thread-to .user-name {
</ins><span class="cx" style="display: block; padding: 0 10px">         display: inline-block;
</span><span class="cx" style="display: block; padding: 0 10px">        line-height: 1.1;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+#message-threads li .thread-from .num-recipients,
+#message-threads li .thread-to .num-recipients {
+       color: #737373;
+       font-weight: 400;
+       font-size: 12px;
+       margin: 0;
+}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> #message-threads li .thread-content {
</span><span class="cx" style="display: block; padding: 0 10px">        -webkit-flex: 1 2 60%;
</span><span class="cx" style="display: block; padding: 0 10px">        -moz-flex: 1 2 60%;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3005,8 +3016,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">        color: #5087e5;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-#message-threads li .thread-content {
-       cursor: pointer;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+#message-threads li.unread {
+       font-weight: 700;
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> #message-threads li .thread-content .excerpt {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3016,6 +3027,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> #message-threads li .thread-content .thread-from,
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+#message-threads li .thread-content .thread-to,
</ins><span class="cx" style="display: block; padding: 0 10px"> #message-threads li .thread-content .thread-subject {
</span><span class="cx" style="display: block; padding: 0 10px">        font-size: 13px;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3022,6 +3034,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> @media screen and (min-width: 46.8em) {
</span><span class="cx" style="display: block; padding: 0 10px">        #message-threads li .thread-content .thread-from,
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        #message-threads li .thread-content .thread-to,
</ins><span class="cx" style="display: block; padding: 0 10px">         #message-threads li .thread-content .thread-subject {
</span><span class="cx" style="display: block; padding: 0 10px">                font-size: 16px;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span></span></pre></div>
<a id="trunksrcbptemplatesbpnouveauincludesmessagesfunctionsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-templates/bp-nouveau/includes/messages/functions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-templates/bp-nouveau/includes/messages/functions.php 2018-05-09 21:30:39 UTC (rev 12072)
+++ trunk/src/bp-templates/bp-nouveau/includes/messages/functions.php   2018-05-10 06:23:58 UTC (rev 12073)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -107,6 +107,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        'unstar' => __( 'Unstarring message(s). Please wait.', 'buddypress' ),
</span><span class="cx" style="display: block; padding: 0 10px">                ),
</span><span class="cx" style="display: block; padding: 0 10px">                'bulk_actions'  => bp_nouveau_messages_get_bulk_actions(),
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                'howto'         => __( 'Click on the message title to preview it in the Active conversation box below.', 'buddypress' ),
+               'howtoBulk'     => __( 'Use the select box to define your bulk action and click on the &#10003; button to apply.', 'buddypress' ),
+               'toOthers'      => array(
+                       'one'  => __( '(and 1 other)', 'buddypress' ),
+                       'more' => __( '(and %d others)', 'buddypress' ),
+               ),
</ins><span class="cx" style="display: block; padding: 0 10px">         );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // Star private messages.
</span></span></pre></div>
<a id="trunksrcbptemplatesbpnouveaujsbuddypressmessagesjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-templates/bp-nouveau/js/buddypress-messages.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-templates/bp-nouveau/js/buddypress-messages.js       2018-05-09 21:30:39 UTC (rev 12072)
+++ trunk/src/bp-templates/bp-nouveau/js/buddypress-messages.js 2018-05-10 06:23:58 UTC (rev 12073)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -634,8 +634,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                tagName   : 'div',
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                events: {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        'click .thread-content'       : 'changePreview',
-                       'dblclick .thread-content'    : 'loadSingleView'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 'click .subject' : 'changePreview'
</ins><span class="cx" style="display: block; padding: 0 10px">                 },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                initialize: function() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -666,6 +665,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                threadsFetched: function() {
</span><span class="cx" style="display: block; padding: 0 10px">                        bp.Nouveau.Messages.removeFeedback();
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+                       // Inform the user about how to use the UI.
+                       bp.Nouveau.Messages.displayFeedback( BP_Nouveau.messages.howto, 'info' );
</ins><span class="cx" style="display: block; padding: 0 10px">                 },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                threadsFetchError: function( collection, response ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -688,23 +690,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        this.views.add( '#message-threads', new bp.Views.userThread( { model: thread } ) );
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                changePreview: function( event ) {
-                       var target = $( event.currentTarget );
-
-                       if ( ! target.hasClass( 'thread-content' ) || $( event.target ).hasClass( 'user-link' ) ) {
-                               return event;
-                       }
-
-                       event.preventDefault();
-
-                       if ( target.parent( 'li' ).hasClass( 'selected' ) ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         setActiveThread: function( active ) {
+                       if ( ! active ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 return;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var selected = target.data( 'thread-id' );
-
</del><span class="cx" style="display: block; padding: 0 10px">                         _.each( this.collection.models, function( thread ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if ( thread.id === selected ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         if ( thread.id === active ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         thread.set( 'active', true );
</span><span class="cx" style="display: block; padding: 0 10px">                                } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                        thread.unset( 'active' );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -712,18 +704,31 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        }, this );
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                loadSingleView: function( event ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         changePreview: function( event ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         var target = $( event.currentTarget );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if ( ! target.hasClass( 'thread-content' ) || $( event.target ).hasClass( 'user-link' ) ) {
-                               return event;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 event.preventDefault();
+                       bp.Nouveau.Messages.removeFeedback();
+
+                       // If the click is done on an active conversation, open it.
+                       if ( $( event.currentTarget ).closest( '.thread-item' ).hasClass( 'selected' ) ) {
+                               this.loadSingleView( event );
+
+                       // Otherwise activate the conversation and display its preview.
+                       } else {
+                               this.setActiveThread( target.closest( '.thread-content' ).data( 'thread-id' ) );
+
+                               $( '.message-action-view' ).focus();
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                },
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                loadSingleView: function( event ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         event.preventDefault();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var id = target.data( 'thread-id' );
-
-                       bp.Nouveau.Messages.router.navigate( 'view/' + id, { trigger: true } );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 bp.Nouveau.Messages.router.navigate(
+                               'view/' + $( event.currentTarget ).closest( '.thread-content' ).data( 'thread-id' ),
+                               { trigger: true }
+                       );
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">        } );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -745,6 +750,23 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                this.el.className += ' unread';
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        if ( 'sentbox' === bp.Nouveau.Messages.box ) {
+                               var recipientsCount = this.model.get( 'recipients' ).length, toOthers = '';
+
+                               if ( 2 === recipientsCount ) {
+                                       toOthers = BP_Nouveau.messages.toOthers.one;
+                               } else if ( 2 < recipientsCount ) {
+                                       toOthers = BP_Nouveau.messages.toOthers.more.replace( '%d', Number( recipientsCount - 1 ) );
+                               }
+
+                               this.model.set( {
+                                       recipientsCount: recipientsCount,
+                                       toOthers: toOthers
+                               }, { silent: true } );
+                       } else if ( this.model.get( 'recipientsCount' )  ) {
+                               this.model.unset( 'recipientsCount', { silent: true } );
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         this.model.on( 'change:active', this.toggleClass, this );
</span><span class="cx" style="display: block; padding: 0 10px">                        this.model.on( 'change:unread', this.updateReadState, this );
</span><span class="cx" style="display: block; padding: 0 10px">                        this.model.on( 'change:checked', this.bulkSelect, this );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -789,8 +811,13 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( hasChecked ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $( '#user-messages-bulk-actions' ).closest( '.bulk-actions-wrap' ).removeClass( 'bp-hide' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+                               // Inform the user about how to use the bulk actions.
+                               bp.Nouveau.Messages.displayFeedback( BP_Nouveau.messages.howtoBulk, 'info' );
</ins><span class="cx" style="display: block; padding: 0 10px">                         } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                $( '#user-messages-bulk-actions' ).closest( '.bulk-actions-wrap' ).addClass( 'bp-hide' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+                               bp.Nouveau.Messages.removeFeedback();
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -931,8 +958,13 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( isChecked ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $( this.el ).find( '.bulk-actions-wrap' ).removeClass( 'bp-hide' ).addClass( 'bp-show' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+                               // Inform the user about how to use the bulk actions.
+                               bp.Nouveau.Messages.displayFeedback( BP_Nouveau.messages.howtoBulk, 'info' );
</ins><span class="cx" style="display: block; padding: 0 10px">                         } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                $( this.el ).find( '.bulk-actions-wrap' ).addClass( 'bp-hide' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+                               bp.Nouveau.Messages.removeFeedback();
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        _.each( this.collection.models, function( model ) {
</span></span></pre></div>
<a id="trunksrcbptemplatesbpnouveausass_nouveau_messagesscss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-templates/bp-nouveau/sass/_nouveau_messages.scss</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-templates/bp-nouveau/sass/_nouveau_messages.scss     2018-05-09 21:30:39 UTC (rev 12072)
+++ trunk/src/bp-templates/bp-nouveau/sass/_nouveau_messages.scss       2018-05-10 06:23:58 UTC (rev 12073)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -96,7 +96,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        @include box-item-size(1, 2, 5%);
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                .thread-from {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         .thread-from,
+               .thread-to {
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        @include box-item-size(1, 2, 20%);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -109,6 +110,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                display: inline-block;
</span><span class="cx" style="display: block; padding: 0 10px">                                line-height: 1.1;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+                       .num-recipients {
+                               color: $meta-text;
+                               font-weight: 400;
+
+                               @include font-size(12);
+                               margin: 0;
+                       }
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                .thread-content {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -133,8 +142,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                // the unread parent li
+               &.unread {
+                       font-weight: 700;
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 .thread-content {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        cursor: pointer;
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        .excerpt {
</span><span class="cx" style="display: block; padding: 0 10px">                                color: $meta-text;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -144,6 +157,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        .thread-from,
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        .thread-to,
</ins><span class="cx" style="display: block; padding: 0 10px">                         .thread-subject {
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                @include responsive-font(16);
</span></span></pre>
</div>
</div>

</body>
</html>