From 5e2b219d1a3291c9b4d2232fd5af2e1ae7a329d9 Mon Sep 17 00:00:00 2001 From: Rachel Macfarlane Date: Fri, 11 May 2018 15:11:52 -0700 Subject: [PATCH] Don't show reply button for first comment in thread --- .../electron-browser/commentThreadWidget.ts | 56 +++++++++++-------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/src/vs/workbench/parts/comments/electron-browser/commentThreadWidget.ts b/src/vs/workbench/parts/comments/electron-browser/commentThreadWidget.ts index 7b6a303a4fa..65f29bcd0c4 100644 --- a/src/vs/workbench/parts/comments/electron-browser/commentThreadWidget.ts +++ b/src/vs/workbench/parts/comments/electron-browser/commentThreadWidget.ts @@ -68,6 +68,7 @@ export class ReviewZoneWidget extends ZoneWidget { protected _metaHeading: HTMLElement; protected _actionbarWidget: ActionBar; private _bodyElement: HTMLElement; + private _textArea: HTMLTextAreaElement; private _commentsElement: HTMLElement; private _commentElements: CommentNode[]; private _resizeObserver: any; @@ -256,28 +257,34 @@ export class ReviewZoneWidget extends ZoneWidget { if (this._commentThread.reply) { const commentForm = $('.comment-form').appendTo(this._bodyElement).getHTMLElement(); - const reviewThreadReplyButton = $('button.review-thread-reply-button').appendTo(commentForm).getHTMLElement(); - reviewThreadReplyButton.title = 'Reply...'; - reviewThreadReplyButton.textContent = 'Reply...'; - const textArea = $('textarea').appendTo(commentForm).getHTMLElement(); - textArea.placeholder = 'Reply...'; - - // bind click/escape actions for reviewThreadReplyButton and textArea - reviewThreadReplyButton.onclick = () => { - if (!dom.hasClass(commentForm, 'expand')) { - dom.addClass(commentForm, 'expand'); - textArea.focus(); - } - }; + this._textArea = $('textarea').appendTo(commentForm).getHTMLElement(); + const hasExistingComments = this._commentThread.comments.length > 0; + this._textArea.placeholder = hasExistingComments ? 'Reply...' : 'Type a new comment'; + + // Only add the additional step of clicking a reply button to expand the textarea when there are existing comments + if (hasExistingComments) { + const reviewThreadReplyButton = $('button.review-thread-reply-button').appendTo(commentForm).getHTMLElement(); + reviewThreadReplyButton.title = 'Reply...'; + reviewThreadReplyButton.textContent = 'Reply...'; + // bind click/escape actions for reviewThreadReplyButton and textArea + reviewThreadReplyButton.onclick = () => { + if (!dom.hasClass(commentForm, 'expand')) { + dom.addClass(commentForm, 'expand'); + this._textArea.focus(); + } + }; - dom.addDisposableListener(textArea, 'blur', () => { - if (textArea.value === '' && dom.hasClass(commentForm, 'expand')) { - dom.removeClass(commentForm, 'expand'); - } - }); + dom.addDisposableListener(this._textArea, 'blur', () => { + if (this._textArea.value === '' && dom.hasClass(commentForm, 'expand')) { + dom.removeClass(commentForm, 'expand'); + } + }); + } else { + dom.addClass(commentForm, 'expand'); + } - dom.addDisposableListener(textArea, 'keydown', (ev: KeyboardEvent) => { - if (textArea.value === '' && ev.keyCode === 27) { + dom.addDisposableListener(this._textArea, 'keydown', (ev: KeyboardEvent) => { + if (this._textArea.value === '' && ev.keyCode === 27) { if (dom.hasClass(commentForm, 'expand')) { dom.removeClass(commentForm, 'expand'); } @@ -293,9 +300,9 @@ export class ReviewZoneWidget extends ZoneWidget { let newComment = await this.commandService.executeCommand(this._replyCommand.id, this.editor.getModel().uri, { start: { line: lineNumber, column: 1 }, end: { line: lineNumber, column: 1 } - }, this._commentThread, textArea.value); + }, this._commentThread, this._textArea.value); if (newComment) { - textArea.value = ''; + this._textArea.value = ''; this._commentThread.comments.push(newComment); let newCommentNode = new CommentNode(newComment); this._commentElements.push(newCommentNode); @@ -320,6 +327,11 @@ export class ReviewZoneWidget extends ZoneWidget { if (this._commentThread.collapsibleState === modes.CommentThreadCollapsibleState.Expanded) { this.show({ lineNumber: lineNumber, column: 1 }, 2); } + + // If there are no existing comments, place focus on the text area. This must be done after show, which also moves focus. + if (this._commentThread.reply && !this._commentThread.comments.length) { + this._textArea.focus(); + } } private mouseDownInfo: { lineNumber: number, iconClicked: boolean }; -- GitLab