(sourceDir: string)
| 177 | } |
| 178 | |
| 179 | function findActiveBoardForSourceDir(sourceDir: string): Board | null { |
| 180 | for (const b of boards.values()) { |
| 181 | if (b.sourceDir === sourceDir && b.state !== "done") return b; |
| 182 | } |
| 183 | return null; |
| 184 | } |
| 185 | |
| 186 | function escapeHtml(s: string): string { |
| 187 | return s.replace(/[&<>"']/g, (c) => |