diff --git a/plugins/gitlab/intellij.vcs.gitlab.iml b/plugins/gitlab/intellij.vcs.gitlab.iml index c7dd9b16010e..d75262559102 100644 --- a/plugins/gitlab/intellij.vcs.gitlab.iml +++ b/plugins/gitlab/intellij.vcs.gitlab.iml @@ -57,5 +57,7 @@ + + \ No newline at end of file diff --git a/plugins/gitlab/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineComponentFactory.kt b/plugins/gitlab/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineComponentFactory.kt index 61a1e70722ac..41ee0f5ac305 100644 --- a/plugins/gitlab/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineComponentFactory.kt +++ b/plugins/gitlab/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineComponentFactory.kt @@ -9,6 +9,7 @@ import com.intellij.collaboration.ui.codereview.CodeReviewChatItemUIUtil import com.intellij.collaboration.ui.codereview.timeline.StatusMessageComponentFactory import com.intellij.collaboration.ui.codereview.timeline.StatusMessageType import com.intellij.collaboration.ui.icon.IconsProvider +import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.editor.colors.EditorColorsManager import com.intellij.openapi.util.text.HtmlBuilder import com.intellij.openapi.util.text.HtmlChunk @@ -25,6 +26,7 @@ import org.jetbrains.annotations.Nls import org.jetbrains.plugins.gitlab.api.dto.* import org.jetbrains.plugins.gitlab.mergerequest.data.GitLabMergeRequestTimelineItem import org.jetbrains.plugins.gitlab.mergerequest.ui.timeline.GitLabMergeRequestTimelineViewModel.LoadingState +import org.jetbrains.plugins.gitlab.ui.GitLabUIUtil import org.jetbrains.plugins.gitlab.util.GitLabBundle import java.util.* import javax.swing.JComponent @@ -95,11 +97,27 @@ object GitLabMergeRequestTimelineComponentFactory { private fun createDiscussionContent(item: GitLabMergeRequestTimelineItem.Discussion): JComponent { val firstNote = item.discussion.notes.first() - return if (firstNote.system) { - StatusMessageComponentFactory.create(SimpleHtmlPane(firstNote.body)) + + if (firstNote.system) { + val body = firstNote.body + if (body.contains("Compare with previous version")) { + try { + val lines = body.lines() + val title = lines[0] + val commits = lines[2] + return VerticalListPanel().apply { + add(SimpleHtmlPane(title)) + add(StatusMessageComponentFactory.create(SimpleHtmlPane(commits))) + } + } + catch (e: Exception) { + thisLogger().warn("Error occurred while parsing the note with added commits", e) + } + } + return StatusMessageComponentFactory.create(SimpleHtmlPane(GitLabUIUtil.convertToHtml(body))) } else { - SimpleHtmlPane(firstNote.body) + return SimpleHtmlPane(GitLabUIUtil.convertToHtml(firstNote.body)) } } diff --git a/plugins/gitlab/src/org/jetbrains/plugins/gitlab/ui/GitLabUIUtil.kt b/plugins/gitlab/src/org/jetbrains/plugins/gitlab/ui/GitLabUIUtil.kt new file mode 100644 index 000000000000..b37a1412d936 --- /dev/null +++ b/plugins/gitlab/src/org/jetbrains/plugins/gitlab/ui/GitLabUIUtil.kt @@ -0,0 +1,15 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.plugins.gitlab.ui + +import com.intellij.markdown.utils.MarkdownToHtmlConverter +import com.intellij.openapi.util.NlsSafe +import org.intellij.markdown.flavours.gfm.GFMFlavourDescriptor + +object GitLabUIUtil { + + private val mdConverter = MarkdownToHtmlConverter(GFMFlavourDescriptor()) + + internal fun convertToHtml(markdownSource: String): @NlsSafe String { + return mdConverter.convertMarkdownToHtml(markdownSource) + } +} \ No newline at end of file