message-edit-history: Show original channel/topic for move only history.

If the organization only allows viewing message move history, in
the message edit history overlay for the initial message, we display
the original topic and channel of the message instead of the original
message content.

This way the overlay content is consistent with the organization
setting for viewing message edit history, and if the message content
has been edited, that original content is not viewable to other
users.
This commit is contained in:
Lauryn Menard
2025-03-14 20:56:57 +01:00
committed by Tim Abbott
parent e6d71cad1f
commit 4fd3bb8aa5
2 changed files with 33 additions and 1 deletions

View File

@@ -28,6 +28,7 @@ import * as ui_report from "./ui_report.ts";
import * as util from "./util.ts"; import * as util from "./util.ts";
type EditHistoryEntry = { type EditHistoryEntry = {
initial_entry_for_move_history: boolean;
edited_at_time: string; edited_at_time: string;
edited_by_notice: string; edited_by_notice: string;
timestamp: number; // require to set data-message-id for overlay message row timestamp: number; // require to set data-message-id for overlay message row
@@ -113,6 +114,9 @@ function hide_loading_indicator(): void {
} }
export function fetch_and_render_message_history(message: Message): void { export function fetch_and_render_message_history(message: Message): void {
const move_history_only =
realm.realm_message_edit_history_visibility_policy ===
message_edit_history_visibility_policy_values.moves_only.code;
$("#message-edit-history-overlay-container").html(render_message_history_overlay()); $("#message-edit-history-overlay-container").html(render_message_history_overlay());
open_overlay(); open_overlay();
show_loading_indicator(); show_loading_indicator();
@@ -149,10 +153,19 @@ export function fetch_and_render_message_history(message: Message): void {
let stream_changed; let stream_changed;
let prev_stream; let prev_stream;
let prev_stream_id; let prev_stream_id;
let initial_entry_for_move_history = false;
if (index === 0) { if (index === 0) {
edited_by_notice = $t({defaultMessage: "Posted by {full_name}"}, {full_name}); edited_by_notice = $t({defaultMessage: "Posted by {full_name}"}, {full_name});
body_to_render = msg.rendered_content; if (move_history_only) {
// If message history is limited to moves only, then we
// display the original topic and channel for the message.
initial_entry_for_move_history = true;
new_topic_display_name = util.get_final_topic_display_name(msg.topic);
} else {
// Otherwise, we display the original message content.
body_to_render = msg.rendered_content;
}
} else if (msg.prev_topic !== undefined && msg.prev_content) { } else if (msg.prev_topic !== undefined && msg.prev_content) {
edited_by_notice = $t({defaultMessage: "Edited by {full_name}"}, {full_name}); edited_by_notice = $t({defaultMessage: "Edited by {full_name}"}, {full_name});
body_to_render = msg.content_html_diff; body_to_render = msg.content_html_diff;
@@ -195,6 +208,7 @@ export function fetch_and_render_message_history(message: Message): void {
body_to_render = msg.content_html_diff; body_to_render = msg.content_html_diff;
} }
const item: EditHistoryEntry = { const item: EditHistoryEntry = {
initial_entry_for_move_history,
edited_at_time, edited_at_time,
edited_by_notice, edited_by_notice,
timestamp: msg.timestamp, timestamp: msg.timestamp,
@@ -228,6 +242,7 @@ export function fetch_and_render_message_history(message: Message): void {
// entries in reverse chronological order. // entries in reverse chronological order.
if (message.is_stream) { if (message.is_stream) {
// Start with the message's current location. // Start with the message's current location.
let stream_display_name: string = get_display_stream_name(message.stream_id);
let stream_color: string = get_color(message.stream_id); let stream_color: string = get_color(message.stream_id);
let recipient_bar_color: string = get_recipient_bar_color(stream_color); let recipient_bar_color: string = get_recipient_bar_color(stream_color);
for (const edit_history_entry of content_edit_history.toReversed()) { for (const edit_history_entry of content_edit_history.toReversed()) {
@@ -238,10 +253,18 @@ export function fetch_and_render_message_history(message: Message): void {
// prior to this event, the message must have been in // prior to this event, the message must have been in
// edit_history_event.prev_stream_id; fetch its color. // edit_history_event.prev_stream_id; fetch its color.
assert(edit_history_entry.prev_stream_id !== undefined); assert(edit_history_entry.prev_stream_id !== undefined);
stream_display_name = get_display_stream_name(
edit_history_entry.prev_stream_id,
);
stream_color = get_color(edit_history_entry.prev_stream_id); stream_color = get_color(edit_history_entry.prev_stream_id);
recipient_bar_color = get_recipient_bar_color(stream_color); recipient_bar_color = get_recipient_bar_color(stream_color);
} }
} }
if (move_history_only) {
// If message history is limited to moves only, then we
// display the original topic and channel for the message.
content_edit_history[0]!.new_stream = stream_display_name;
}
} }
const rendered_list_html = render_message_edit_history({ const rendered_list_html = render_message_edit_history({
edited_messages: content_edit_history, edited_messages: content_edit_history,

View File

@@ -27,6 +27,14 @@
<div class="message_row{{#unless is_stream}} private-message{{/unless}}" role="listitem"> <div class="message_row{{#unless is_stream}} private-message{{/unless}}" role="listitem">
<div class="messagebox"> <div class="messagebox">
<div class="messagebox-content"> <div class="messagebox-content">
{{#if initial_entry_for_move_history}}
<div class="message_content message_edit_history_content">
<p>{{t "Channel" }}: <span class="highlight_text_inserted">{{ new_stream }}</span></p>
<p>{{t "Topic" }}:
<span class="highlight_text_inserted {{#if is_empty_string_new_topic}}empty-topic-display{{/if}}">{{ new_topic_display_name }}</span>
</p>
</div>
{{else}}
{{#if stream_changed}} {{#if stream_changed}}
<div class="message_content message_edit_history_content"> <div class="message_content message_edit_history_content">
<p>{{t "Channel" }}: <span class="highlight_text_inserted">{{ new_stream }}</span> <p>{{t "Channel" }}: <span class="highlight_text_inserted">{{ new_stream }}</span>
@@ -47,6 +55,7 @@
{{ rendered_markdown body_to_render}} {{ rendered_markdown body_to_render}}
</div> </div>
{{/if}} {{/if}}
{{/if}}
</div> </div>
</div> </div>
</div> </div>