compose_ui: Refactor cursor_inside_code_block.

Renamed the function to position_inside_code_block and changed the
parameters to accept a string and number (index), and check if the
position in the string is inside a code block (as per previous logic).

Preparation for #28626.
This commit is contained in:
Kislay Verma
2024-04-10 16:14:46 +05:30
committed by Tim Abbott
parent 7beea02660
commit ecac0d6c80

View File

@@ -433,15 +433,17 @@ export function cursor_inside_code_block($textarea: JQuery<HTMLTextAreaElement>)
const cursor_position = $textarea.caret(); const cursor_position = $textarea.caret();
const current_content = $textarea.val()!; const current_content = $textarea.val()!;
return position_inside_code_block(current_content, cursor_position);
}
export function position_inside_code_block(content: string, position: number): boolean {
let unique_insert = "UNIQUEINSERT:" + Math.random(); let unique_insert = "UNIQUEINSERT:" + Math.random();
while (current_content.includes(unique_insert)) { while (content.includes(unique_insert)) {
unique_insert = "UNIQUEINSERT:" + Math.random(); unique_insert = "UNIQUEINSERT:" + Math.random();
} }
const content = const unique_insert_content =
current_content.slice(0, cursor_position) + content.slice(0, position) + unique_insert + content.slice(position);
unique_insert + const rendered_content = markdown.parse_non_message(unique_insert_content);
current_content.slice(cursor_position);
const rendered_content = markdown.parse_non_message(content);
const rendered_html = new DOMParser().parseFromString(rendered_content, "text/html"); const rendered_html = new DOMParser().parseFromString(rendered_content, "text/html");
const code_blocks = rendered_html.querySelectorAll("pre > code"); const code_blocks = rendered_html.querySelectorAll("pre > code");
return [...code_blocks].some((code_block) => code_block?.textContent?.includes(unique_insert)); return [...code_blocks].some((code_block) => code_block?.textContent?.includes(unique_insert));