From bc2cf2045ebc6de07c9f856c93522c8747c0ceb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=9B=8B=E6=80=BB?= Date: Wed, 12 May 2021 14:46:01 +0800 Subject: [PATCH] feat: add comment reactions example --- .../resources/reactions/confused.png | Bin 0 -> 2384 bytes comment-sample/resources/reactions/eyes.png | Bin 0 -> 2768 bytes comment-sample/resources/reactions/heart.png | Bin 0 -> 4190 bytes comment-sample/resources/reactions/hooray.png | Bin 0 -> 4549 bytes comment-sample/resources/reactions/laugh.png | Bin 0 -> 3686 bytes comment-sample/resources/reactions/rocket.png | Bin 0 -> 5298 bytes .../resources/reactions/thumbs_down.png | Bin 0 -> 3500 bytes .../resources/reactions/thumbs_up.png | Bin 0 -> 3566 bytes comment-sample/src/extension.ts | 96 +++++++++++++++++- 9 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 comment-sample/resources/reactions/confused.png create mode 100644 comment-sample/resources/reactions/eyes.png create mode 100644 comment-sample/resources/reactions/heart.png create mode 100644 comment-sample/resources/reactions/hooray.png create mode 100644 comment-sample/resources/reactions/laugh.png create mode 100644 comment-sample/resources/reactions/rocket.png create mode 100644 comment-sample/resources/reactions/thumbs_down.png create mode 100644 comment-sample/resources/reactions/thumbs_up.png diff --git a/comment-sample/resources/reactions/confused.png b/comment-sample/resources/reactions/confused.png new file mode 100644 index 0000000000000000000000000000000000000000..77734d4036e09973b9389efe72e71db6d7528226 GIT binary patch literal 2384 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 QL4(cgG79nW686FW06HD1S^xk5 literal 0 HcmV?d00001 diff --git a/comment-sample/resources/reactions/heart.png b/comment-sample/resources/reactions/heart.png new file mode 100644 index 0000000000000000000000000000000000000000..277e3e8d489fdcc2f30a97a45a268dacced02024 GIT binary patch literal 4190 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 literal 0 HcmV?d00001 diff --git a/comment-sample/resources/reactions/laugh.png b/comment-sample/resources/reactions/laugh.png new file mode 100644 index 0000000000000000000000000000000000000000..a3abe00904ef8edfb49bde4ee85a29d831d56c02 GIT binary patch literal 3686 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 literal 0 HcmV?d00001 diff --git a/comment-sample/resources/reactions/thumbs_up.png b/comment-sample/resources/reactions/thumbs_up.png new file mode 100644 index 0000000000000000000000000000000000000000..bcca0f1ba5d4b913f95ce23b44702f8892650a01 GIT binary patch literal 3566 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 o2Vsrx{cRyfTW6bME8ocf1Bd0%$N&HU literal 0 HcmV?d00001 diff --git a/comment-sample/src/extension.ts b/comment-sample/src/extension.ts index 7936614b7..4780a9653 100644 --- a/comment-sample/src/extension.ts +++ b/comment-sample/src/extension.ts @@ -1,6 +1,65 @@ 'use strict'; import * as vscode from 'vscode'; +import * as path from 'path'; +class Resource { + static icons: any; + + static initialize(context: vscode.ExtensionContext) { + Resource.icons = { + reactions: { + THUMBS_UP: context.asAbsolutePath(path.join('resources', 'reactions', 'thumbs_up.png')), + THUMBS_DOWN: context.asAbsolutePath(path.join('resources', 'reactions', 'thumbs_down.png')), + CONFUSED: context.asAbsolutePath(path.join('resources', 'reactions', 'confused.png')), + EYES: context.asAbsolutePath(path.join('resources', 'reactions', 'eyes.png')), + HEART: context.asAbsolutePath(path.join('resources', 'reactions', 'heart.png')), + HOORAY: context.asAbsolutePath(path.join('resources', 'reactions', 'hooray.png')), + LAUGH: context.asAbsolutePath(path.join('resources', 'reactions', 'laugh.png')), + ROCKET: context.asAbsolutePath(path.join('resources', 'reactions', 'rocket.png')), + } + }; + } +} + +function getReactionGroup(): { title: string; label: string; icon: vscode.Uri }[] { + const ret = [ + { + title: 'CONFUSED', + label: '😕', + icon: Resource.icons.reactions.CONFUSED + }, { + title: 'EYES', + label: '👀', + icon: Resource.icons.reactions.EYES + }, { + title: 'HEART', + label: '❤️', + icon: Resource.icons.reactions.HEART + }, { + title: 'HOORAY', + label: '🎉', + icon: Resource.icons.reactions.HOORAY + }, { + title: 'LAUGH', + label: '😄', + icon: Resource.icons.reactions.LAUGH + }, { + title: 'ROCKET', + label: '🚀', + icon: Resource.icons.reactions.ROCKET + }, { + title: 'THUMBS_DOWN', + label: '👎', + icon: Resource.icons.reactions.THUMBS_DOWN + }, { + title: 'THUMBS_UP', + label: '👍', + icon: Resource.icons.reactions.THUMBS_UP + } + ]; + + return ret; +} let commentId = 1; @@ -11,7 +70,8 @@ class NoteComment implements vscode.Comment { public body: string | vscode.MarkdownString, public mode: vscode.CommentMode, public author: vscode.CommentAuthorInformation, - public parent?: vscode.CommentThread, + public parent: vscode.CommentThread, + public reactions: vscode.CommentReaction[] = [], public contextValue?: string ) { this.id = ++commentId; @@ -19,10 +79,30 @@ class NoteComment implements vscode.Comment { } export function activate(context: vscode.ExtensionContext) { + Resource.initialize(context); // A `CommentController` is able to provide comments for documents. const commentController = vscode.comments.createCommentController('comment-sample', 'Comment API Sample'); context.subscriptions.push(commentController); + commentController.reactionHandler = async (c: vscode.Comment, reaction: vscode.CommentReaction) => { + const comment = c as NoteComment; + if (!comment.parent) { + return; + } + + comment.parent.comments = comment.parent.comments.map(cmt => { + if ((cmt as NoteComment).id === comment.id) { + const index = cmt.reactions!.findIndex(r => r.label === reaction.label); + cmt.reactions!.splice(index, 1, { + ...reaction, + count: reaction.authorHasReacted ? reaction.count - 1 : reaction.count + 1, + authorHasReacted: !reaction.authorHasReacted, + }); + } + + return cmt; + }); + } // A `CommentingRangeProvider` controls where gutter decorations that allow adding comments are shown commentController.commentingRangeProvider = { provideCommentingRanges: (document: vscode.TextDocument, token: vscode.CancellationToken) => { @@ -130,7 +210,19 @@ export function activate(context: vscode.ExtensionContext) { function replyNote(reply: vscode.CommentReply) { const thread = reply.thread; - const newComment = new NoteComment(reply.text, vscode.CommentMode.Preview, { name: 'vscode' }, thread, thread.comments.length ? 'canDelete' : undefined); + const newComment = new NoteComment( + reply.text, + vscode.CommentMode.Preview, + { name: 'vscode' }, + thread, + getReactionGroup().map(reaction => ({ + iconPath: reaction.icon, + label: reaction.label, + count: 0, + authorHasReacted: false, + })), + thread.comments.length ? 'canDelete' : undefined + ); if (thread.contextValue === 'draft') { newComment.label = 'pending'; }