compose: Fade all relevant messages on the page, not just neighbors.

(imported from commit 69e11a980b9cbd69753754b9a42248ef0f3d5a21)
This commit is contained in:
Tim Abbott
2013-03-06 17:47:32 -05:00
parent 05eec2ae19
commit 012f0566a1

View File

@@ -67,47 +67,36 @@ exports.decorate_stream_bar = function (stream_name) {
.addClass(subs.get_color_class(color)); .addClass(subs.get_color_class(color));
}; };
function neighbors(target_message) { function messages_with_different_recipients(target_message) {
var message_tr = $(rows.get(target_message.id, current_msg_list.table_name)); var all_elts = rows.get_table(current_msg_list.table_name).find(".recipient_row, .messagebox");
var message_neighbors = $(); var i, elts_to_fade = [];
var different_recipient = false;
// Being simplistic about this, the smallest message is 30 px high. This // Note: The below algorithm relies on the fact that all_elts is
// gives you a screen's worth of fade on either side of the target message // sorted as it would be displayed in the message view
// message at worst. for (i = 0; i < all_elts.length; i++) {
var num_neighbors = Math.floor(viewport.height() / 30); var elt = $(all_elts[i]);
var candidates = $.merge(message_tr.prevAll(":not('.bookend_tr'):lt(" + num_neighbors + ")"), if (elt.hasClass("recipient_row")) {
message_tr.nextAll(":not('.bookend_tr'):lt(" + num_neighbors + ")")); if (!util.same_recipient(target_message, current_msg_list.get(rows.id(elt)))) {
elts_to_fade.push(elt);
$.each(candidates, function () { different_recipient = true;
var row = $(this); } else {
if (row.hasClass("recipient_row")) { different_recipient = false;
message_neighbors = message_neighbors.add(row); }
} else { } else if (different_recipient) {
message_neighbors = message_neighbors.add(row.children(".messagebox")[0]); elts_to_fade.push(elt);
} }
}); }
return elts_to_fade;
return message_neighbors;
}
function neighbors_with_different_recipients(target_message) {
return neighbors(target_message).filter(function (index) {
if ($(this).hasClass("recipient_row")) {
// This is a recipient_row.
return !util.same_recipient(target_message, current_msg_list.get(rows.id($(this))));
} else {
// This is a messagebox.
var row = $(this).parent("tr");
return !util.same_recipient(target_message, current_msg_list.get(rows.id(row)));
}
});
} }
function fade_around(reply_message) { function fade_around(reply_message) {
faded_to = reply_message; var i, fade_class = narrow.active() ? "message_reply_fade_narrowed" : "message_reply_fade";
var fade_class = narrow.active() ? "message_reply_fade_narrowed" : "message_reply_fade"; var elts_to_fade = messages_with_different_recipients(reply_message);
neighbors_with_different_recipients(reply_message).addClass(fade_class); faded_to = reply_message;
for (i = 0; i < elts_to_fade.length; i++) {
$(elts_to_fade[i]).addClass(fade_class);
}
ui.disable_floating_recipient_bar(); ui.disable_floating_recipient_bar();
} }
@@ -117,7 +106,7 @@ exports.unfade_messages = function () {
} }
var fade_class = narrow.active() ? "message_reply_fade_narrowed" : "message_reply_fade"; var fade_class = narrow.active() ? "message_reply_fade_narrowed" : "message_reply_fade";
neighbors_with_different_recipients(faded_to).removeClass(fade_class); rows.get_table(current_msg_list.table_name).find(".recipient_row, .messagebox").removeClass(fade_class);
faded_to = undefined; faded_to = undefined;
ui.enable_floating_recipient_bar(); ui.enable_floating_recipient_bar();
}; };