diff --git a/src/main/java/ui/PreviewPanel.java b/src/main/java/ui/PreviewPanel.java index c91500a..ec4246b 100644 --- a/src/main/java/ui/PreviewPanel.java +++ b/src/main/java/ui/PreviewPanel.java @@ -244,6 +244,9 @@ private void updatePreview(String markdown, boolean addToHistory) { String html = htmlRenderer.render(markdownParser.parse(body)); + // ── Checkboxes : convertir [ ] et [x] en éléments checkbox HTML + html = processCheckboxes(html); + // ── Images : injecter les attributs width/height if (!imageSizes.isEmpty()) { html = applyImageSizes(html, imageSizes); @@ -298,6 +301,11 @@ private void updatePreview(String markdown, boolean addToHistory) { th, td { border: 1px solid #888; padding: 6px 12px; text-align: left; } th { background: rgba(128,128,128,0.15); font-weight: bold; } tr:nth-child(even) { background: rgba(128,128,128,0.06); } + /* Checkboxes (task list) */ + input[type="checkbox"] { width: 1.1em; height: 1.1em; margin-right: 0.4em; + vertical-align: middle; cursor: default; + accent-color: #0078d7; } + li:has(input[type="checkbox"]) { list-style: none; margin-left: -1.2em; } /* Front Matter metadata */ .front-matter { background: rgba(128,128,128,0.08); border: 1px solid rgba(128,128,128,0.25); border-radius: 6px; padding: 0.6em 1em; margin-bottom: 1.2em; @@ -397,6 +405,32 @@ function renderMath(el) { this.currentHtml = htmlPage; } + /** + * Convertit les marqueurs de checkbox Markdown ([ ] et [x]) en éléments HTML checkbox. + * + *

Patterns reconnus :

+ * + * + * @param html le HTML généré par Flexmark + * @return le HTML avec les checkboxes converties + */ + private String processCheckboxes(String html) { + // Remplacer [ ] par une checkbox non cochée + html = html.replaceAll( + "\\[ \\]", + "" + ); + // Remplacer [x] ou [X] par une checkbox cochée + html = html.replaceAll( + "\\[[xX]\\]", + "" + ); + return html; + } + /** * Remplace les blocs {@code
...}
      * par des balises {@code } (serveur en ligne) ou par des placeholders