28 import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughExtension |
28 import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughExtension |
29 import com.vladsch.flexmark.ext.tables.TablesExtension |
29 import com.vladsch.flexmark.ext.tables.TablesExtension |
30 import com.vladsch.flexmark.html.HtmlRenderer |
30 import com.vladsch.flexmark.html.HtmlRenderer |
31 import com.vladsch.flexmark.parser.Parser |
31 import com.vladsch.flexmark.parser.Parser |
32 import com.vladsch.flexmark.util.data.MutableDataSet |
32 import com.vladsch.flexmark.util.data.MutableDataSet |
|
33 import com.vladsch.flexmark.util.data.SharedDataKeys |
33 import de.uapcore.lightpit.entities.* |
34 import de.uapcore.lightpit.entities.* |
34 import de.uapcore.lightpit.types.IssueCategory |
35 import de.uapcore.lightpit.types.IssueCategory |
35 import de.uapcore.lightpit.types.IssueStatus |
36 import de.uapcore.lightpit.types.IssueStatus |
36 import de.uapcore.lightpit.types.IssueStatusPhase |
37 import de.uapcore.lightpit.types.IssueStatusPhase |
37 import de.uapcore.lightpit.types.VersionStatus |
38 import de.uapcore.lightpit.types.VersionStatus |
66 val comments: List<IssueComment>, |
67 val comments: List<IssueComment>, |
67 val project: Project, |
68 val project: Project, |
68 val version: Version? = null, |
69 val version: Version? = null, |
69 val component: Component? = null |
70 val component: Component? = null |
70 ) : View() { |
71 ) : View() { |
|
72 private val parser: Parser |
|
73 private val renderer: HtmlRenderer |
71 |
74 |
72 init { |
75 init { |
73 val options = MutableDataSet() |
76 val options = MutableDataSet() |
74 .set(Parser.EXTENSIONS, listOf(TablesExtension.create(), StrikethroughExtension.create())) |
77 .set(SharedDataKeys.EXTENSIONS, listOf(TablesExtension.create(), StrikethroughExtension.create())) |
75 val parser = Parser.builder(options).build() |
78 parser = Parser.builder(options).build() |
76 val renderer = HtmlRenderer.builder(options).build() |
79 renderer = HtmlRenderer.builder(options |
77 val process = fun(it: String) = renderer.render(parser.parse(it)) |
80 .set(HtmlRenderer.ESCAPE_HTML, true) |
|
81 ).build() |
78 |
82 |
79 issue.description = process(issue.description ?: "") |
83 issue.description = formatMarkdown(issue.description ?: "") |
80 for (comment in comments) { |
84 for (comment in comments) { |
81 comment.commentFormatted = process(comment.comment) |
85 comment.commentFormatted = formatMarkdown(comment.comment) |
82 } |
86 } |
83 } |
87 } |
|
88 |
|
89 private fun formatEmojis(text: String) = text |
|
90 .replace("(/)", "✅") |
|
91 .replace("(x)", "❌") |
|
92 .replace("(!)", "⚡") |
|
93 |
|
94 private fun formatMarkdown(text: String) = |
|
95 renderer.render(parser.parse(formatEmojis(text))) |
84 } |
96 } |
85 |
97 |
86 class IssueEditView( |
98 class IssueEditView( |
87 val issue: Issue, |
99 val issue: Issue, |
88 val versions: List<Version>, |
100 val versions: List<Version>, |