From b746bb5fc15e9e8e5fe43974c5b4e20be5696fdc Mon Sep 17 00:00:00 2001 From: Sahil Batra Date: Fri, 8 Aug 2025 12:40:13 +0530 Subject: [PATCH] settings: Show rendered markdown folder description. This commit adds code to show markdown formatted description in "Channel folders" panel instead of raw text. --- web/src/channel_folders.ts | 10 ++++++++++ web/src/settings_folders.ts | 8 ++++++-- .../settings/admin_channel_folder_list_item.hbs | 2 +- web/tests/dispatch.test.cjs | 5 ++++- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/web/src/channel_folders.ts b/web/src/channel_folders.ts index 0351a4e001..8af8865088 100644 --- a/web/src/channel_folders.ts +++ b/web/src/channel_folders.ts @@ -11,7 +11,16 @@ export type ChannelFolder = z.infer; let channel_folder_name_dict: FoldDict; let channel_folder_by_id_dict: Map; +export function clean_up_description(channel_folder: ChannelFolder): void { + if (channel_folder.rendered_description !== undefined) { + channel_folder.rendered_description = channel_folder.rendered_description + .replace("

", "") + .replace("

", ""); + } +} + 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) { diff --git a/web/src/settings_folders.ts b/web/src/settings_folders.ts index f19e3200a0..581d13be59 100644 --- a/web/src/settings_folders.ts +++ b/web/src/settings_folders.ts @@ -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) { diff --git a/web/templates/settings/admin_channel_folder_list_item.hbs b/web/templates/settings/admin_channel_folder_list_item.hbs index e0f70acff8..8381ce9527 100644 --- a/web/templates/settings/admin_channel_folder_list_item.hbs +++ b/web/templates/settings/admin_channel_folder_list_item.hbs @@ -9,7 +9,7 @@ {{folder_name}} - {{folder_description}} + {{rendered_markdown rendered_description}} {{#if is_admin}} diff --git a/web/tests/dispatch.test.cjs b/web/tests/dispatch.test.cjs index fabff8b5a3..290cc12a2c 100644 --- a/web/tests/dispatch.test.cjs +++ b/web/tests/dispatch.test.cjs @@ -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("

", "").replace("

", ""), + ); assert.equal(folders[0].is_archived, event.data.is_archived); }