diff --git a/web/src/utils/markdown-manipulation.ts b/web/src/utils/markdown-manipulation.ts index 53eb15333..e02dae474 100644 --- a/web/src/utils/markdown-manipulation.ts +++ b/web/src/utils/markdown-manipulation.ts @@ -24,6 +24,39 @@ export function toggleTaskAtLine(markdown: string, lineNumber: number, checked: return lines.join("\n"); } +export function isInsideCodeBlock(lines :string [] , index : number):boolean{ + let inside = false; + for(let i = 0 ; i <= index ; i++){ + if(lines[i].startsWith("```")){ + inside = !inside; + } + } + return inside; +} +export function toggleTaskAtIndex(markdown: string, taskIndex: number, checked: boolean): string { + const lines = markdown.split("\n"); + const taskPattern = /^(\s*[-*+]\s+)\[([ xX])\](\s+.*)$/; + + let currentTaskIndex = 0; + + for (let i = 0; i < lines.length; i++) { + if (isInsideCodeBlock(lines, i)) continue; + const line = lines[i]; + const match = line.match(taskPattern); + + if (match) { + if (currentTaskIndex === taskIndex) { + const [, prefix, , suffix] = match; + const newCheckmark = checked ? "x" : " "; + lines[i] = `${prefix}[${newCheckmark}]${suffix}`; + break; + } + currentTaskIndex++; + } + } + + return lines.join("\n"); +} export function removeCompletedTasks(markdown: string): string { const lines = markdown.split("\n");