mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 15:03:34 +00:00
Fixes zulip#19759 Before grid, there was overlap of action buttons and text (photo 1). With grid, there was just very little space for messages (photo 2). With this commit, the message gets a bit more space (photo 3). This helps us add more width to the content column of message on narrow widths. Note that it will still always be less than before grid, since we are explicitly preventing overlap.
121 lines
5.1 KiB
JavaScript
121 lines
5.1 KiB
JavaScript
/* This module provides relevant data to render popovers that require multiple args.
|
|
This helps keep the popovers code small and keep it focused on rendering side of things. */
|
|
|
|
import * as feature_flags from "./feature_flags";
|
|
import * as hash_util from "./hash_util";
|
|
import {$t} from "./i18n";
|
|
import * as message_edit from "./message_edit";
|
|
import * as message_lists from "./message_lists";
|
|
import * as muted_users from "./muted_users";
|
|
import * as narrow_state from "./narrow_state";
|
|
import {page_params} from "./page_params";
|
|
import * as stream_data from "./stream_data";
|
|
|
|
export function get_actions_popover_content_context(message_id) {
|
|
const message = message_lists.current.get(message_id);
|
|
const message_container = message_lists.current.view.message_containers.get(message.id);
|
|
const not_spectator = !page_params.is_spectator;
|
|
const should_display_hide_option =
|
|
muted_users.is_user_muted(message.sender_id) &&
|
|
!message_container.is_hidden &&
|
|
not_spectator;
|
|
const is_content_editable = message_edit.is_content_editable(message);
|
|
const can_move_message = message_edit.can_move_message(message);
|
|
|
|
let editability_menu_item;
|
|
let move_message_menu_item;
|
|
let view_source_menu_item;
|
|
|
|
if (is_content_editable) {
|
|
editability_menu_item = $t({defaultMessage: "Edit message"});
|
|
} else {
|
|
view_source_menu_item = $t({defaultMessage: "View message source"});
|
|
}
|
|
|
|
if (can_move_message) {
|
|
move_message_menu_item = $t({defaultMessage: "Move messages"});
|
|
}
|
|
|
|
// We do not offer "Mark as unread" on messages in streams
|
|
// that the user is not currently subscribed to. Zulip has an
|
|
// invariant that all unread messages must be in streams the
|
|
// user is subscribed to, and so the server will ignore any
|
|
// messages in such streams; it's better to hint this is not
|
|
// useful by not offering the option.
|
|
//
|
|
// We also require that the message is currently marked as
|
|
// read. Theoretically, it could be useful to offer this even
|
|
// for a message that is already unread, so you can mark those
|
|
// below it as unread; but that's an unlikely situation, and
|
|
// showing it can be a confusing source of clutter. We may
|
|
// want to revise this algorithm specifically in the context
|
|
// of interleaved views.
|
|
//
|
|
// To work around #22893, we also only offer the option if the
|
|
// fetch_status data structure means we'll be able to mark
|
|
// everything below the current message as read correctly.
|
|
const not_stream_message = message.type !== "stream";
|
|
const subscribed_to_stream =
|
|
message.type === "stream" && stream_data.is_subscribed(message.stream_id);
|
|
const should_display_mark_as_unread =
|
|
!message.unread && not_spectator && (not_stream_message || subscribed_to_stream);
|
|
|
|
const should_display_edit_history_option =
|
|
message.edit_history &&
|
|
message.edit_history.some(
|
|
(entry) =>
|
|
entry.prev_content !== undefined ||
|
|
entry.prev_stream !== undefined ||
|
|
entry.prev_topic !== undefined,
|
|
) &&
|
|
page_params.realm_allow_edit_history &&
|
|
not_spectator;
|
|
|
|
// Disabling this for /me messages is a temporary workaround
|
|
// for the fact that we don't have a styling for how that
|
|
// should look. See also condense.js.
|
|
const should_display_collapse =
|
|
!message.locally_echoed && !message.is_me_message && !message.collapsed && not_spectator;
|
|
const should_display_uncollapse =
|
|
!message.locally_echoed && !message.is_me_message && message.collapsed;
|
|
|
|
const should_display_quote_and_reply = message.content !== "<p>(deleted)</p>" && not_spectator;
|
|
|
|
const conversation_time_uri = hash_util.by_conversation_and_time_url(message);
|
|
|
|
const should_display_delete_option = message_edit.get_deletability(message) && not_spectator;
|
|
const should_display_read_receipts_option =
|
|
page_params.realm_enable_read_receipts && not_spectator;
|
|
|
|
function is_add_reaction_icon_visible() {
|
|
const $message_row = message_lists.current.get_row(message_id);
|
|
return $message_row.find(".message_controls.reaction_button").is(":visible");
|
|
}
|
|
|
|
// Since we only display msg actions and star icons on windows smaller than
|
|
// `media_breakpoints.sm_min`, we need to include the reaction button in the
|
|
// popover if it is not displayed.
|
|
const should_display_add_reaction_option =
|
|
!message.is_me_message && !is_add_reaction_icon_visible();
|
|
|
|
return {
|
|
message_id: message.id,
|
|
stream_id: message.stream_id,
|
|
editability_menu_item,
|
|
move_message_menu_item,
|
|
should_display_mark_as_unread,
|
|
view_source_menu_item,
|
|
should_display_collapse,
|
|
should_display_uncollapse,
|
|
should_display_add_reaction_option,
|
|
should_display_edit_history_option,
|
|
should_display_hide_option,
|
|
conversation_time_uri,
|
|
narrowed: narrow_state.active(),
|
|
should_display_delete_option,
|
|
should_display_read_receipts_option,
|
|
should_display_reminder_option: feature_flags.reminders_in_message_action_menu,
|
|
should_display_quote_and_reply,
|
|
};
|
|
}
|