diff --git a/src/gitlab_service.js b/src/gitlab_service.js
index 7ab0a5c9b9c1924f7d2b58c4f05914f03f21d2c3..86a0bcdd39f42b8bba159344f7ebc9a29afc247a 100644
--- a/src/gitlab_service.js
+++ b/src/gitlab_service.js
@@ -386,6 +386,29 @@ async function fetchDiscussions(issuable) {
return discussions;
}
+// TODO: Remove project fetch
+async function renderMarkdown(markdown) {
+ let rendered = { html: markdown };
+ const [ major ] = version.split('.');
+
+ if (parseInt(major, 10) < 11) {
+ return markdown;
+ }
+
+ try {
+ const project = await fetchCurrentProject();
+ rendered = await fetch('/markdown', 'POST', {
+ text: markdown,
+ project: project.path_with_namespace,
+ gfm: 'true', // Needs to be a string for the API
+ });
+ } catch(e) {
+ return markdown;
+ }
+
+ return rendered.html;
+};
+
exports.fetchUser = fetchUser;
exports.fetchIssuesAssignedToMe = fetchIssuesAssignedToMe;
exports.fetchIssuesCreatedByMe = fetchIssuesCreatedByMe;
@@ -404,3 +427,4 @@ exports.createSnippet = createSnippet;
exports.validateCIConfig = validateCIConfig;
exports.fetchVersion = fetchVersion;
exports.fetchDiscussions = fetchDiscussions;
+exports.renderMarkdown = renderMarkdown;
diff --git a/src/webview/src/App.vue b/src/webview/src/App.vue
index 0bc2ce261d736fefe3e9eff85d0616a770908faf..1117b480e7fcd2e6245547e00bf9536b8287943d 100644
--- a/src/webview/src/App.vue
+++ b/src/webview/src/App.vue
@@ -2,6 +2,8 @@
import IssuableDetails from './components/IssuableDetails';
import IssuableDiscussions from './components/IssuableDiscussions';
+const vscode = acquireVsCodeApi();
+
export default {
name: 'app',
data() {
@@ -15,12 +17,36 @@ export default {
IssuableDetails,
IssuableDiscussions,
},
+ computed: {
+ notesById() {
+ const notes = {}
+
+ this.discussions.forEach((d) => {
+ d.notes.forEach((n) => {
+ notes[n.id] = n;
+ });
+ });
+
+ notes[this.issuable.id] = this.issuable;
+ return notes;
+ },
+ },
created() {
+ window.vsCodeApi = vscode;
this.isLoading = true;
window.addEventListener('message', event => {
- this.issuable = event.data.issuable;
- this.isLoading = false;
+ if (event.data.type === 'issuableFetch') {
+ this.issuable = event.data.issuable;
+ this.discussions = event.data.discussions;
+ this.isLoading = false;
+ } else if (event.data.type === 'markdownRendered') {
+ const { ref, key, markdown } = event.data;
+ const note = this.notesById[ref] || {};
+
+ note[key] = markdown;
+ note.markdownRenderedOnServer = true;
+ }
});
},
}
@@ -35,6 +61,3 @@ export default {
-
-
diff --git a/src/webview/src/components/IssuableDetails.vue b/src/webview/src/components/IssuableDetails.vue
index 7949a63cbb257dd22b2690a982f26781bf71251d..9ebfb7511fdff52b195e0e735ebf8455abeedf12 100644
--- a/src/webview/src/components/IssuableDetails.vue
+++ b/src/webview/src/components/IssuableDetails.vue
@@ -1,5 +1,6 @@
@@ -51,7 +64,7 @@ export default {
{{ createdAgo }}
by
-
+
View in GitLab
diff --git a/src/webview/src/components/IssuableDiscussions.vue b/src/webview/src/components/IssuableDiscussions.vue
index 519a79b9e8d2d469087fee62c889b108210f0a78..46e928250bd03e64d3914c82cb6a47c2bdf3f91a 100644
--- a/src/webview/src/components/IssuableDiscussions.vue
+++ b/src/webview/src/components/IssuableDiscussions.vue
@@ -1,6 +1,6 @@
diff --git a/src/webview/src/components/Note.vue b/src/webview/src/components/Note.vue
new file mode 100644
index 0000000000000000000000000000000000000000..695f81f4a2bda0ee2dc1dad2b48c59d75abf489c
--- /dev/null
+++ b/src/webview/src/components/Note.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
diff --git a/src/webview/src/components/NoteBody.vue b/src/webview/src/components/NoteBody.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7d48619d18104da324f68e307376a1a65d830c41
--- /dev/null
+++ b/src/webview/src/components/NoteBody.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
diff --git a/src/webview/src/components/SystemNote.vue b/src/webview/src/components/SystemNote.vue
new file mode 100644
index 0000000000000000000000000000000000000000..58da38a0f900f6618d19936a5491df97f9ed12a6
--- /dev/null
+++ b/src/webview/src/components/SystemNote.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/webview/src/components/UserAvatar.vue b/src/webview/src/components/UserAvatar.vue
index 05a1bb0641daa4070998279021e39d93427d659c..ca8f86284312c79028e8c089086c17d2613fbf60 100644
--- a/src/webview/src/components/UserAvatar.vue
+++ b/src/webview/src/components/UserAvatar.vue
@@ -1,7 +1,7 @@