Automatically condense long messages

Addresses Trac #747.

(imported from commit 057f08f2fcef43070b0838a600f6a89c479b4ee8)
This commit is contained in:
Jeff Arnold 2013-03-13 17:47:38 -04:00
parent fb2b3ae21a
commit 33c8368734
4 changed files with 48 additions and 2 deletions

View File

@ -396,6 +396,18 @@ MessageList.prototype = {
}}); }});
} }
$.each(rendered_elems, function (index, elem) {
var row = $(elem);
var content = $(elem).find(".message_content")[0];
if (content !== undefined) {
if( content.offsetHeight < content.scrollHeight ||
content.offsetWidth < content.scrollWidth) {
$(elem).find(".message_expander").show();
}
}
});
// Re-add the fading of messages that is lost when we re-render. // Re-add the fading of messages that is lost when we re-render.
compose.update_faded_messages(); compose.update_faded_messages();

View File

@ -877,7 +877,8 @@ $(function () {
$("#main_div").on("click", ".messagebox", function (e) { $("#main_div").on("click", ".messagebox", function (e) {
var target = $(e.target); var target = $(e.target);
if (target.is("a") || target.is("img.message_inline_image") || target.is("img.twitter-avatar")) { if (target.is("a") || target.is("img.message_inline_image") || target.is("img.twitter-avatar") ||
target.is("div.message_length_controller")) {
// If this click came from a hyperlink, don't trigger the // If this click came from a hyperlink, don't trigger the
// reply action. The simple way of doing this is simply // reply action. The simple way of doing this is simply
// to call e.stopPropagation() from within the link's // to call e.stopPropagation() from within the link's
@ -933,6 +934,20 @@ $(function () {
toggle_star(rows.id($(this).closest(".message_row"))); toggle_star(rows.id($(this).closest(".message_row")));
}); });
$("#home").on("click", ".message_expander", function (e) {
var row = $(this).closest(".message_row");
row.find(".message_content").addClass("expanded");
$(this).hide();
row.find(".message_collapser").show();
});
$("#home").on("click", ".message_collapser", function (e) {
var row = $(this).closest(".message_row");
row.find(".message_content").removeClass("expanded");
$(this).hide();
row.find(".message_expander").show();
});
$("#home").on("click", ".narrows_by_recipient", function (e) { $("#home").on("click", ".narrows_by_recipient", function (e) {
var nearest = current_msg_list.get(rows.id($(this).closest(".recipient_row"))); var nearest = current_msg_list.get(rows.id($(this).closest(".recipient_row")));
var selected = current_msg_list.selected_message(); var selected = current_msg_list.selected_message();

View File

@ -432,6 +432,9 @@ table.focused_table {
.message_content { .message_content {
margin-left: 5px; margin-left: 5px;
margin-right: 35px; /* size of the timestamp */ margin-right: 35px; /* size of the timestamp */
line-height: 1.5em;
max-height: 9.0em;
overflow: hidden;
} }
@media (max-width: 480px) { @media (max-width: 480px) {
.message_content { .message_content {
@ -439,6 +442,20 @@ table.focused_table {
} }
} }
.message_content.expanded {
max-height: none;
}
.message_length_controller {
display: none;
text-align: center;
color: #0088CC;
}
.message_length_controller:hover {
text-decoration: underline;
}
blockquote { blockquote {
margin-bottom: 6px; margin-bottom: 6px;
} }

View File

@ -85,6 +85,8 @@
</div> </div>
</div> </div>
<div class="message_content">{{{content}}}</div> <div class="message_content">{{{content}}}</div>
<div class="message_expander message_length_controller" title="See the rest of this message">[More...]</div>
<div class="message_collapser message_length_controller" title="Make this message take up less space on the screen">[Collapse this message]</div>
</td> </td>
</tr> </tr>
{{/with}} {{/with}}