mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 13:33:24 +00:00
We now have specific HTML/CSS classes for message fading and user fading. They currently both have the same effect, changing opacity, but we can now more easily treat them differently. This change also removes "faded" attributes in compose-fade, which avoids some confusion related to landing pages having a "faded" class as well.
105 lines
3.3 KiB
JavaScript
105 lines
3.3 KiB
JavaScript
var floating_recipient_bar = (function () {
|
|
|
|
var exports = {};
|
|
|
|
|
|
var is_floating_recipient_bar_showing = false;
|
|
|
|
function show_floating_recipient_bar() {
|
|
if (!is_floating_recipient_bar_showing) {
|
|
$("#floating_recipient_bar").css('visibility', 'visible');
|
|
is_floating_recipient_bar_showing = true;
|
|
}
|
|
}
|
|
|
|
var old_label;
|
|
function replace_floating_recipient_bar(desired_label) {
|
|
var new_label;
|
|
var other_label;
|
|
var header;
|
|
if (desired_label !== old_label) {
|
|
if (desired_label.children(".message_header_stream").length !== 0) {
|
|
new_label = $("#current_label_stream");
|
|
other_label = $("#current_label_private_message");
|
|
header = desired_label.children(".message_header_stream");
|
|
} else {
|
|
new_label = $("#current_label_private_message");
|
|
other_label = $("#current_label_stream");
|
|
header = desired_label.children(".message_header_private_message");
|
|
}
|
|
new_label.find(".message_header").replaceWith(header.clone());
|
|
other_label.css('display', 'none');
|
|
new_label.css('display', 'block');
|
|
new_label.attr("zid", rows.id(rows.first_message_in_group(desired_label)));
|
|
|
|
new_label.toggleClass('message-fade', desired_label.hasClass('message-fade'));
|
|
old_label = desired_label;
|
|
}
|
|
show_floating_recipient_bar();
|
|
}
|
|
|
|
exports.hide = function () {
|
|
if (is_floating_recipient_bar_showing) {
|
|
$("#floating_recipient_bar").css('visibility', 'hidden');
|
|
is_floating_recipient_bar_showing = false;
|
|
}
|
|
};
|
|
|
|
exports.update = function () {
|
|
var floating_recipient_bar = $("#floating_recipient_bar");
|
|
var floating_recipient_bar_top = floating_recipient_bar.offset().top;
|
|
var floating_recipient_bar_bottom =
|
|
floating_recipient_bar_top + floating_recipient_bar.outerHeight();
|
|
|
|
// Find the last message where the top of the recipient
|
|
// row is at least partially occluded by our box.
|
|
// Start with the pointer's current location.
|
|
var selected_row = current_msg_list.selected_row();
|
|
|
|
if (selected_row === undefined || selected_row.length === 0) {
|
|
return;
|
|
}
|
|
|
|
var candidate = rows.get_message_recipient_row(selected_row);
|
|
if (candidate === undefined) {
|
|
return;
|
|
}
|
|
while (true) {
|
|
if (candidate.length === 0) {
|
|
// We're at the top of the page and no labels are above us.
|
|
exports.hide();
|
|
return;
|
|
}
|
|
if (candidate.is(".recipient_row")) {
|
|
if (candidate.offset().top < floating_recipient_bar_bottom) {
|
|
break;
|
|
}
|
|
}
|
|
candidate = candidate.prev();
|
|
}
|
|
var current_label = candidate;
|
|
|
|
// We now know what the floating stream/subject bar should say.
|
|
// Do we show it?
|
|
|
|
// Hide if the bottom of our floating stream/subject label is not
|
|
// lower than the bottom of current_label (since that means we're
|
|
// covering up a label that already exists).
|
|
var header_height = $(current_label).find('.message_header').outerHeight();
|
|
if (floating_recipient_bar_bottom <=
|
|
(current_label.offset().top + header_height)) {
|
|
exports.hide();
|
|
return;
|
|
}
|
|
|
|
replace_floating_recipient_bar(current_label);
|
|
};
|
|
|
|
|
|
return exports;
|
|
}());
|
|
|
|
if (typeof module !== 'undefined') {
|
|
module.exports = floating_recipient_bar;
|
|
}
|