From 86dfe51d0caa1f95359ca2c00d26215e03c4ea1d Mon Sep 17 00:00:00 2001 From: alexa Date: Sun, 28 Apr 2024 22:10:10 +0200 Subject: [PATCH] md stuff --- ui/js/MarkdownProcessor.mjs | 63 +++++++++++++++++++++++++++++- ui/templates/MarkdownTemplates.mjs | 42 ++++++++++++++++++++ 2 files changed, 104 insertions(+), 1 deletion(-) diff --git a/ui/js/MarkdownProcessor.mjs b/ui/js/MarkdownProcessor.mjs index d4b3dc7..9cca371 100644 --- a/ui/js/MarkdownProcessor.mjs +++ b/ui/js/MarkdownProcessor.mjs @@ -39,12 +39,55 @@ export class MarkdownProcessor { type: 'code', text: line.replace(/```/, '') }); + } else if (line.match(/\*\*(.*?)\*\*/)) { // **bold** text + const text = line.match(/\*\*(.*?)\*\*/)[1]; + elements.push({ + type: 'bold', + text + }); + } else if (line.match(/\*(.*?)\*/)) { // *italic* text + const text = line.match(/\*(.*?)\*/)[1]; + elements.push({ + type: 'italic', + text + }); + } else if (line.match(/\*\*\*(.*?)\*\*\*/)) { // For ***bold and italic*** text + const text = line.match(/\*\*\*(.*?)\*\*\*/)[1]; + elements.push({ + type: 'boldItalic', + text + }); + } else if (line.startsWith('>')) { // For quotes + const level = line.match(/>+/)[0].length; + const text = line.replace(/>+\s*/, ''); + elements.push({ + type: 'quote', + level, + text + }); + } else if (line.startsWith('-')) { // For list item + const level = line.match(/-+/)[0].length; + const text = line.replace(/-+\s*/, ''); + elements.push({ + type: 'listItem', + level, + text + }); + } else if (line.match(/\d\. (.*?)/)) { // For numbered list item + const number = line.match(/\d/)[0]; + const text = line.replace(/\d\. /, ''); + elements.push({ + type: 'numberedList', + number, + text + }); } else { elements.push({ type: 'paragraph', text: line }); } + } return elements; } @@ -68,6 +111,24 @@ export class MarkdownProcessor { case 'code': nodes.push(MarkdownTemplates.code(element.text)); break; + case 'bold': + nodes.push(MarkdownTemplates.bold(element.text)); + break; + case 'italic': + nodes.push(MarkdownTemplates.italic(element.text)); + break; + case 'boldItalic': + nodes.push(MarkdownTemplates.boldItalic(element.text)); + break; + case 'quote': + nodes.push(MarkdownTemplates.quote(element.text)); + break; + case 'listItem': + nodes.push(MarkdownTemplates.listItem(element.text)); + break; + case 'numberedList': + nodes.push(MarkdownTemplates.numberedListItem(element.text, element.number)); + break; default: nodes.push(MarkdownTemplates.paragraph(element.text)); break; @@ -75,4 +136,4 @@ export class MarkdownProcessor { } return nodes; } -} \ No newline at end of file +} diff --git a/ui/templates/MarkdownTemplates.mjs b/ui/templates/MarkdownTemplates.mjs index 8296589..a0e9ee4 100644 --- a/ui/templates/MarkdownTemplates.mjs +++ b/ui/templates/MarkdownTemplates.mjs @@ -38,4 +38,46 @@ export class MarkdownTemplates { .text(text) .build(); } + + static bold(text) { + return create("strong") + .classes("markdown") + .text(text) + .build(); + } + + static italic(text) { + return create("em") + .classes("markdown") + .text(text) + .build(); + } + + static boldItalic(text) { + return create("strong") + .classes("markdown", "italic") + .text(text) + .build(); + } + + static quote(text) { + return create("blockquote") + .classes("markdown") + .text(text) + .build(); + } + + static listItem(text) { + return create("li") + .classes("markdown") + .text(text) + .build(); + } + + static numberedListItem(text, number) { + return create("li") + .classes("markdown") + .text(`${number}. ${text}`) + .build(); + } } \ No newline at end of file