mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
popover_menus_data: Hide actions user can't take for archived channels.
Hide actions users cannot perform for messages and topics within archived channels.
This commit is contained in:
@@ -110,6 +110,7 @@ const stream_context_properties: (keyof StreamContext)[] = [
|
||||
type TopicContext = {
|
||||
is_topic: boolean;
|
||||
stream_id: number;
|
||||
stream_archived: boolean;
|
||||
topic_name: string;
|
||||
topic_display_name: string;
|
||||
is_empty_string_topic: boolean;
|
||||
@@ -128,6 +129,7 @@ type TopicContext = {
|
||||
const topic_context_properties: (keyof TopicContext)[] = [
|
||||
"is_topic",
|
||||
"stream_id",
|
||||
"stream_archived",
|
||||
"topic_name",
|
||||
"topic_display_name",
|
||||
"is_empty_string_topic",
|
||||
@@ -409,11 +411,18 @@ function update_stream_data(
|
||||
): void {
|
||||
const stream_topics_data = new Map<string, TopicContext>();
|
||||
const stream_data = format_stream(stream_id);
|
||||
const stream_archived = stream_data.is_archived;
|
||||
let stream_post_filter_unread_count = 0;
|
||||
for (const [topic, {topic_count, latest_msg_id}] of topic_dict) {
|
||||
const topic_key = get_topic_key(stream_id, topic);
|
||||
if (topic_count) {
|
||||
const topic_data = format_topic(stream_id, topic, topic_count, latest_msg_id);
|
||||
const topic_data = format_topic(
|
||||
stream_id,
|
||||
stream_archived,
|
||||
topic,
|
||||
topic_count,
|
||||
latest_msg_id,
|
||||
);
|
||||
stream_topics_data.set(topic_key, topic_data);
|
||||
if (!topic_data.is_hidden) {
|
||||
stream_post_filter_unread_count += topic_data.unread_count;
|
||||
@@ -441,6 +450,7 @@ function rerender_stream_inbox_header_if_needed(
|
||||
|
||||
function format_topic(
|
||||
stream_id: number,
|
||||
stream_archived: boolean,
|
||||
topic: string,
|
||||
topic_unread_count: number,
|
||||
latest_msg_id: number,
|
||||
@@ -448,6 +458,7 @@ function format_topic(
|
||||
const context = {
|
||||
is_topic: true,
|
||||
stream_id,
|
||||
stream_archived,
|
||||
topic_name: topic,
|
||||
topic_display_name: util.get_final_topic_display_name(topic),
|
||||
is_empty_string_topic: topic === "",
|
||||
@@ -1307,12 +1318,14 @@ export function update(): void {
|
||||
|
||||
const topic_keys_to_insert: string[] = [];
|
||||
const new_stream_data = format_stream(stream_id);
|
||||
const stream_archived = new_stream_data.is_archived;
|
||||
for (const [topic, {topic_count, latest_msg_id}] of topic_dict) {
|
||||
const topic_key = get_topic_key(stream_id, topic);
|
||||
if (topic_count) {
|
||||
const old_topic_data = stream_topics_data.get(topic_key);
|
||||
const new_topic_data = format_topic(
|
||||
stream_id,
|
||||
stream_archived,
|
||||
topic,
|
||||
topic_count,
|
||||
latest_msg_id,
|
||||
|
@@ -187,6 +187,10 @@ export function is_content_editable(message: Message, edit_limit_seconds_buffer
|
||||
return false;
|
||||
}
|
||||
|
||||
if (message.type === "stream" && stream_data.is_stream_archived(message.stream_id)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (realm.realm_message_content_edit_limit_seconds === null) {
|
||||
return true;
|
||||
}
|
||||
|
@@ -51,6 +51,7 @@ type TopicPopoverContext = {
|
||||
stream_name: string;
|
||||
stream_id: number;
|
||||
stream_muted: boolean;
|
||||
stream_archived: boolean;
|
||||
topic_display_name: string;
|
||||
is_empty_string_topic: boolean;
|
||||
topic_unmuted: boolean;
|
||||
@@ -250,8 +251,10 @@ export function get_topic_popover_content_context({
|
||||
const topic_unmuted = user_topics.is_topic_unmuted(sub.stream_id, topic_name);
|
||||
const has_starred_messages = starred_messages.get_count_in_topic(sub.stream_id, topic_name) > 0;
|
||||
const has_unread_messages = num_unread_for_topic(sub.stream_id, topic_name) > 0;
|
||||
const can_move_topic = settings_data.user_can_move_messages_between_streams();
|
||||
const can_rename_topic = settings_data.user_can_move_messages_to_another_topic();
|
||||
const can_move_topic =
|
||||
!sub.is_archived && settings_data.user_can_move_messages_between_streams();
|
||||
const can_rename_topic =
|
||||
!sub.is_archived && settings_data.user_can_move_messages_to_another_topic();
|
||||
const visibility_policy = user_topics.get_topic_visibility_policy(sub.stream_id, topic_name);
|
||||
const all_visibility_policies = user_topics.all_visibility_policies;
|
||||
const is_spectator = page_params.is_spectator;
|
||||
@@ -260,6 +263,7 @@ export function get_topic_popover_content_context({
|
||||
stream_name: sub.name,
|
||||
stream_id: sub.stream_id,
|
||||
stream_muted: sub.is_muted,
|
||||
stream_archived: sub.is_archived,
|
||||
topic_display_name: util.get_final_topic_display_name(topic_name),
|
||||
is_empty_string_topic: topic_name === "",
|
||||
topic_unmuted,
|
||||
|
@@ -617,6 +617,7 @@ type ConversationContext = {
|
||||
stream_url: string;
|
||||
invite_only: boolean;
|
||||
is_web_public: boolean;
|
||||
is_archived: boolean;
|
||||
topic: string;
|
||||
topic_display_name: string;
|
||||
is_empty_string_topic: boolean;
|
||||
@@ -656,6 +657,7 @@ function format_conversation(conversation_data: ConversationData): ConversationC
|
||||
const stream_url = hash_util.by_stream_url(stream_id);
|
||||
const invite_only = stream_info.invite_only;
|
||||
const is_web_public = stream_info.is_web_public;
|
||||
const is_archived = stream_info.is_archived;
|
||||
// Topic info
|
||||
const topic = last_msg.topic;
|
||||
const topic_display_name = util.get_final_topic_display_name(topic);
|
||||
@@ -685,6 +687,7 @@ function format_conversation(conversation_data: ConversationData): ConversationC
|
||||
stream_url,
|
||||
invite_only,
|
||||
is_web_public,
|
||||
is_archived,
|
||||
topic,
|
||||
topic_display_name,
|
||||
is_empty_string_topic,
|
||||
|
@@ -49,7 +49,7 @@
|
||||
{{#unless is_direct}}
|
||||
<div class="inbox-right-part-wrapper">
|
||||
<div class="inbox-right-part">
|
||||
{{#if is_topic}}
|
||||
{{#if (and is_topic (not stream_archived))}}
|
||||
<span class="visibility-policy-indicator change_visibility_policy hidden-for-spectators{{#if (eq visibility_policy all_visibility_policies.INHERIT)}} inbox-row-visibility-policy-inherit{{/if}}"
|
||||
data-stream-id="{{stream_id}}" data-topic-name="{{topic_name}}" tabindex="0" data-col-index="{{ column_indexes.TOPIC_VISIBILITY }}">
|
||||
{{#if (eq visibility_policy all_visibility_policies.FOLLOWED)}}
|
||||
|
@@ -67,6 +67,7 @@
|
||||
{{/if}}
|
||||
</a>
|
||||
</li>
|
||||
{{#unless stream.is_archived}}
|
||||
<li role="none" class="link-item popover-menu-list-item hidden-for-spectators">
|
||||
<a role="menuitem" class="popover_sub_unsub_button popover-menu-link" tabindex="0">
|
||||
<i class="popover-menu-icon zulip-icon zulip-icon-circle-x" aria-hidden="true"></i>
|
||||
@@ -80,5 +81,6 @@
|
||||
<span class="popover-menu-label">{{t "Change color"}}</span>
|
||||
</a>
|
||||
</li>
|
||||
{{/unless}}
|
||||
</ul>
|
||||
</div>
|
||||
|
@@ -5,30 +5,32 @@
|
||||
</li>
|
||||
{{!-- Group 1 --}}
|
||||
{{#unless is_spectator}}
|
||||
<li role="separator" class="popover-menu-separator"></li>
|
||||
<li role="none" class="popover-menu-list-item">
|
||||
<div role="group" class="tab-picker popover-menu-tab-group" aria-label="{{t 'Topic visibility' }}">
|
||||
<input type="radio" id="sidebar-topic-muted-policy" class="tab-option" name="sidebar-topic-visibility-select" data-visibility-policy="{{all_visibility_policies.MUTED}}" {{#if (eq visibility_policy all_visibility_policies.MUTED)}}checked{{/if}} />
|
||||
<label role="menuitemradio" class="tab-option-content tippy-zulip-delayed-tooltip" for="sidebar-topic-muted-policy" aria-label="{{t 'Mute' }}" data-tippy-content="{{t 'Mute' }}" tabindex="0">
|
||||
<i class="zulip-icon zulip-icon-mute-new" aria-hidden="true"></i>
|
||||
</label>
|
||||
<input type="radio" id="sidebar-topic-inherit-policy" class="tab-option" name="sidebar-topic-visibility-select" data-visibility-policy="{{all_visibility_policies.INHERIT}}" {{#if (eq visibility_policy all_visibility_policies.INHERIT)}}checked{{/if}} />
|
||||
<label role="menuitemradio" class="tab-option-content tippy-zulip-delayed-tooltip" for="sidebar-topic-inherit-policy" aria-label="{{t 'Default' }}" data-tippy-content="{{t 'Default' }}" tabindex="0">
|
||||
<i class="zulip-icon zulip-icon-inherit" aria-hidden="true"></i>
|
||||
</label>
|
||||
{{#if (or stream_muted topic_unmuted)}}
|
||||
<input type="radio" id="sidebar-topic-unmuted-policy" class="tab-option" name="sidebar-topic-visibility-select" data-visibility-policy="{{all_visibility_policies.UNMUTED}}" {{#if (eq visibility_policy all_visibility_policies.UNMUTED)}}checked{{/if}} />
|
||||
<label role="menuitemradio" class="tab-option-content tippy-zulip-delayed-tooltip" for="sidebar-topic-unmuted-policy" aria-label="{{t 'Unmute' }}" data-tippy-content="{{t 'Unmute' }}" tabindex="0">
|
||||
<i class="zulip-icon zulip-icon-unmute-new" aria-hidden="true"></i>
|
||||
</label>
|
||||
{{/if}}
|
||||
<input type="radio" id="sidebar-topic-followed-policy" class="tab-option" name="sidebar-topic-visibility-select" data-visibility-policy="{{all_visibility_policies.FOLLOWED}}" {{#if (eq visibility_policy all_visibility_policies.FOLLOWED)}}checked{{/if}} />
|
||||
<label role="menuitemradio" class="tab-option-content tippy-zulip-delayed-tooltip" for="sidebar-topic-followed-policy" aria-label="{{t 'Follow' }}" data-tippy-content="{{t 'Follow' }}" tabindex="0">
|
||||
<i class="zulip-icon zulip-icon-follow" aria-hidden="true"></i>
|
||||
</label>
|
||||
<span class="slider"></span>
|
||||
</div>
|
||||
</li>
|
||||
{{#unless stream_archived}}
|
||||
<li role="separator" class="popover-menu-separator"></li>
|
||||
<li role="none" class="popover-menu-list-item">
|
||||
<div role="group" class="tab-picker popover-menu-tab-group" aria-label="{{t 'Topic visibility' }}">
|
||||
<input type="radio" id="sidebar-topic-muted-policy" class="tab-option" name="sidebar-topic-visibility-select" data-visibility-policy="{{all_visibility_policies.MUTED}}" {{#if (eq visibility_policy all_visibility_policies.MUTED)}}checked{{/if}} />
|
||||
<label role="menuitemradio" class="tab-option-content tippy-zulip-delayed-tooltip" for="sidebar-topic-muted-policy" aria-label="{{t 'Mute' }}" data-tippy-content="{{t 'Mute' }}" tabindex="0">
|
||||
<i class="zulip-icon zulip-icon-mute-new" aria-hidden="true"></i>
|
||||
</label>
|
||||
<input type="radio" id="sidebar-topic-inherit-policy" class="tab-option" name="sidebar-topic-visibility-select" data-visibility-policy="{{all_visibility_policies.INHERIT}}" {{#if (eq visibility_policy all_visibility_policies.INHERIT)}}checked{{/if}} />
|
||||
<label role="menuitemradio" class="tab-option-content tippy-zulip-delayed-tooltip" for="sidebar-topic-inherit-policy" aria-label="{{t 'Default' }}" data-tippy-content="{{t 'Default' }}" tabindex="0">
|
||||
<i class="zulip-icon zulip-icon-inherit" aria-hidden="true"></i>
|
||||
</label>
|
||||
{{#if (or stream_muted topic_unmuted)}}
|
||||
<input type="radio" id="sidebar-topic-unmuted-policy" class="tab-option" name="sidebar-topic-visibility-select" data-visibility-policy="{{all_visibility_policies.UNMUTED}}" {{#if (eq visibility_policy all_visibility_policies.UNMUTED)}}checked{{/if}} />
|
||||
<label role="menuitemradio" class="tab-option-content tippy-zulip-delayed-tooltip" for="sidebar-topic-unmuted-policy" aria-label="{{t 'Unmute' }}" data-tippy-content="{{t 'Unmute' }}" tabindex="0">
|
||||
<i class="zulip-icon zulip-icon-unmute-new" aria-hidden="true"></i>
|
||||
</label>
|
||||
{{/if}}
|
||||
<input type="radio" id="sidebar-topic-followed-policy" class="tab-option" name="sidebar-topic-visibility-select" data-visibility-policy="{{all_visibility_policies.FOLLOWED}}" {{#if (eq visibility_policy all_visibility_policies.FOLLOWED)}}checked{{/if}} />
|
||||
<label role="menuitemradio" class="tab-option-content tippy-zulip-delayed-tooltip" for="sidebar-topic-followed-policy" aria-label="{{t 'Follow' }}" data-tippy-content="{{t 'Follow' }}" tabindex="0">
|
||||
<i class="zulip-icon zulip-icon-follow" aria-hidden="true"></i>
|
||||
</label>
|
||||
<span class="slider"></span>
|
||||
</div>
|
||||
</li>
|
||||
{{/unless}}
|
||||
{{/unless}}
|
||||
{{#if is_topic_empty}}
|
||||
<li role="separator" class="popover-menu-separator"></li>
|
||||
@@ -77,7 +79,9 @@
|
||||
</li>
|
||||
{{!-- Group 3 --}}
|
||||
{{#if (or can_move_topic can_rename_topic is_realm_admin)}}
|
||||
<li role="separator" class="popover-menu-separator"></li>
|
||||
{{#unless stream_archived}}
|
||||
<li role="separator" class="popover-menu-separator"></li>
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
{{#if can_move_topic}}
|
||||
<li role="none" class="link-item popover-menu-list-item">
|
||||
@@ -107,7 +111,7 @@
|
||||
</a>
|
||||
</li>
|
||||
{{/if}}
|
||||
{{#if is_realm_admin}}
|
||||
{{#if (and is_realm_admin (not stream_archived))}}
|
||||
<li role="none" class="link-item popover-menu-list-item">
|
||||
<a role="menuitem" class="sidebar-popover-delete-topic-messages popover-menu-link" tabindex="0">
|
||||
<i class="popover-menu-icon zulip-icon zulip-icon-trash" aria-hidden="true"></i>
|
||||
|
@@ -62,6 +62,7 @@
|
||||
</div>
|
||||
<div class="recent_topic_actions">
|
||||
<div class="hidden-for-spectators">
|
||||
{{#unless is_archived}}
|
||||
<span class="recent_view_focusable change_visibility_policy hidden-for-spectators" data-stream-id="{{stream_id}}" data-topic-name="{{topic}}" data-col-index="{{ column_indexes.mute }}">
|
||||
{{#if (eq visibility_policy all_visibility_policies.FOLLOWED)}}
|
||||
<i class="zulip-icon zulip-icon-follow recipient_bar_icon visibility-status-icon" tabindex="0" aria-label="{{t 'Topic actions menu' }}" aria-haspopup="true" data-stream-id="{{stream_id}}" data-topic-name="{{topic}}" data-topic-url="{{topic_url}}" data-tippy-content="{{t 'You follow this topic.'}}" role="button"></i>
|
||||
@@ -73,6 +74,7 @@
|
||||
<i class="zulip-icon zulip-icon-more-vertical recent-view-row-topic-menu visibility-status-icon" tabindex="0" aria-label="{{t 'Topic actions menu' }}" aria-haspopup="true" data-stream-id="{{stream_id}}" data-topic-name="{{topic}}" data-topic-url="{{topic_url}}" role="button"></i>
|
||||
{{/if}}
|
||||
</span>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
@@ -59,7 +59,7 @@
|
||||
<div class="toggle_resolve_topic_spinner" style="display: none"></div>
|
||||
{{/if}}
|
||||
|
||||
{{#if is_subscribed}}
|
||||
{{#if (and is_subscribed (not is_archived))}}
|
||||
<span class="change_visibility_policy recipient-bar-control hidden-for-spectators" data-stream-id="{{stream_id}}" data-topic-name="{{topic}}">
|
||||
{{#if (eq visibility_policy all_visibility_policies.FOLLOWED)}}
|
||||
<i class="zulip-icon zulip-icon-follow recipient_bar_icon" data-tippy-content="{{t 'You follow this topic.'}}"
|
||||
|
@@ -225,6 +225,7 @@ for (const stream_id of [stream1, stream2, stream3, stream4, stream6]) {
|
||||
color: "",
|
||||
invite_only: false,
|
||||
is_web_public: true,
|
||||
is_archived: false,
|
||||
subscribed: true,
|
||||
});
|
||||
}
|
||||
@@ -415,6 +416,7 @@ function generate_topic_data(topic_info_array) {
|
||||
invite_only: false,
|
||||
is_web_public: true,
|
||||
is_private: false,
|
||||
is_archived: false,
|
||||
last_msg_time: "Just now",
|
||||
last_msg_url: "https://www.example.com",
|
||||
full_last_msg_date_time: "date at time",
|
||||
|
Reference in New Issue
Block a user