settings: Show rendered markdown folder description.

This commit adds code to show markdown formatted description
in "Channel folders" panel instead of raw text.
This commit is contained in:
Sahil Batra
2025-08-08 12:40:13 +05:30
committed by Tim Abbott
parent 340b6adab4
commit b746bb5fc1
4 changed files with 21 additions and 4 deletions

View File

@@ -11,7 +11,16 @@ export type ChannelFolder = z.infer<typeof channel_folder_schema>;
let channel_folder_name_dict: FoldDict<ChannelFolder>;
let channel_folder_by_id_dict: Map<number, ChannelFolder>;
export function clean_up_description(channel_folder: ChannelFolder): void {
if (channel_folder.rendered_description !== undefined) {
channel_folder.rendered_description = channel_folder.rendered_description
.replace("<p>", "")
.replace("</p>", "");
}
}
export function add(channel_folder: ChannelFolder): void {
clean_up_description(channel_folder);
channel_folder_name_dict.set(channel_folder.name, channel_folder);
channel_folder_by_id_dict.set(channel_folder.id, channel_folder);
}
@@ -65,6 +74,7 @@ export function update(event: ChannelFolderUpdateEvent): void {
channel_folder.description = event.data.description;
assert(event.data.rendered_description !== undefined);
channel_folder.rendered_description = event.data.rendered_description;
clean_up_description(channel_folder);
}
if (event.data.is_archived !== undefined) {

View File

@@ -7,6 +7,7 @@ import * as channel from "./channel.ts";
import * as channel_folders from "./channel_folders.ts";
import * as channel_folders_ui from "./channel_folders_ui.ts";
import * as ListWidget from "./list_widget.ts";
import {postprocess_content} from "./postprocess_content.ts";
import type {ChannelFolderUpdateEvent} from "./server_event_types.ts";
import * as settings_ui from "./settings_ui.ts";
import {current_user} from "./state_data.ts";
@@ -42,7 +43,7 @@ export function do_populate_channel_folders(): void {
modifier_html(folder) {
return render_admin_channel_folder_list_item({
folder_name: folder.name,
folder_description: folder.description,
rendered_description: folder.rendered_description,
id: folder.id,
is_admin: current_user.is_admin,
});
@@ -118,7 +119,10 @@ export function update_folder_row(event: ChannelFolderUpdateEvent): void {
}
if (event.data.description !== undefined) {
$folder_row.find(".channel-folder-description").text(event.data.description);
const folder = channel_folders.get_channel_folder_by_id(folder_id);
$folder_row
.find(".channel-folder-description")
.html(postprocess_content(folder.rendered_description));
}
if (event.data.is_archived) {

View File

@@ -9,7 +9,7 @@
<span class="channel-folder-name">{{folder_name}}</span>
</td>
<td>
<span class="channel-folder-description">{{folder_description}}</span>
<span class="channel-folder-description rendered-markdown">{{rendered_markdown rendered_description}}</span>
</td>
{{#if is_admin}}
<td class="actions">

View File

@@ -578,7 +578,10 @@ run_test("channel_folders", ({override}) => {
assert.equal(folders[0].id, event.channel_folder_id);
assert.equal(folders[0].name, event.data.name);
assert.equal(folders[0].description, event.data.description);
assert.equal(folders[0].rendered_description, event.data.rendered_description);
assert.equal(
folders[0].rendered_description,
event.data.rendered_description.replace("<p>", "").replace("</p>", ""),
);
assert.equal(folders[0].is_archived, event.data.is_archived);
}