Change:
Due to being appended to it !
this looks like a good place to start off, is this something I can help with?
:+1: it's marked help wanted which probably means won't get to it any time soon.
Go for it, this is a great issue to start contributing to Code. Let me know if you need any help.
Awesome, I am on it! :)
Please review :) Couldn't find any unit tests for this, did I miss it?

Discussion:
export interface IFeedbackService { submitFeedback(feedback: IFeedback): void; <ins> getCharacterLimit(sentiment: number): number; </ins> } export interface IFeedbackDropdownOptions {

} export class FeedbackDropdown extends Dropdown { <del> protected static MAX_FEEDBACK_CHARS: number = 140; </del> <ins> protected maxFeedbackCharacters: number; </ins> protected feedback: string; protected sentiment: number;

protected smileyInput: Builder; protected frownyInput: Builder; protected sendButton: Builder; <ins> protected remainingCharacterCount: Builder; </ins> protected requestFeatureLink: string; protected reportIssueLink: string;

this.feedback = ''; this.sentiment = 1; <ins> this.maxFeedbackCharacters = this.feedbackService.getCharacterLimit(this.sentiment); </ins> this.feedbackForm = null; this.feedbackDescriptionInput = null;

$('div').append($('a').attr('target', '_blank').attr('href', this.requestFeatureLink).text(nls.localize("request a missing feature", "Request a missing feature")).attr('tabindex', '0')) .appendTo($contactUsContainer); <del> let $charCounter = $('span.char-counter').text(this.getCharCountText(0)); </del> <ins> this.remainingCharacterCount = $('span.char-counter').text(this.getCharCountText(0)); </ins> $('h3').text(nls.localize("tell us why?", "Tell us why?")) <del> .append($charCounter) </del> <ins> .append(this.remainingCharacterCount) </ins> .appendTo($form); this.feedbackDescriptionInput = <HTMLTextAreaElement>$('textarea.feedback-description').attr({ rows: 3, <del> maxlength: FeedbackDropdown.MAX_FEEDBACK_CHARS, </del> <ins> maxlength: this.maxFeedbackCharacters, </ins> 'aria-label': nls.localize("commentsHeader", "Comments") }) .text(this.feedback).attr('required', 'required') .on('keyup', () => { <del> $charCounter.text(this.getCharCountText(this.feedbackDescriptionInput.value.length)); this.feedbackDescriptionInput.value ? this.sendButton.removeAttribute('disabled') : this.sendButton.attr('disabled', ''); </del> <ins> this.updateCharCountText(); </ins> }) .appendTo($form).domFocus().getHTMLElement();

} private getCharCountText(charCount: number): string { <del> let remaining = FeedbackDropdown.MAX_FEEDBACK_CHARS - charCount; </del> <ins> let remaining = this.maxFeedbackCharacters - charCount; </ins> let text = (remaining === 1) ? nls.localize("character left", "character left") : nls.localize("characters left", "characters left");

return '(' + remaining + ' ' + text + ')'; } <ins> private updateCharCountText(): void { this.remainingCharacterCount.text(this.getCharCountText(this.feedbackDescriptionInput.value.length)); this.feedbackDescriptionInput.value ? this.sendButton.removeAttribute('disabled') : this.sendButton.attr('disabled', ''); } </ins> protected setSentiment(smile: boolean): void { if (smile) { this.smileyInput.addClass('checked');

this.smileyInput.attr('aria-checked', 'false'); } this.sentiment = smile ? 1 : 0; <ins> this.maxFeedbackCharacters = this.feedbackService.getCharacterLimit(this.sentiment); this.updateCharCountText(); </ins> } protected invoke(element: Builder, callback: () => void): Builder {

this.feedbackDescriptionInput.value = ''; } this.sentiment = 1; <ins> this.maxFeedbackCharacters = this.feedbackService.getCharacterLimit(this.sentiment); </ins> this.aliasEnabled = false; } }

class TwitterFeedbackService implements IFeedbackService { private static TWITTER_URL: string = 'https://twitter.com/intent/tweet'; <ins> private static VIA_NAME: string = 'code'; private static HASHTAGS: string[]  = ['HappyCoding']; private combineHashTagsAsString() : string { return TwitterFeedbackService.HASHTAGS.join(','); } </ins> public submitFeedback(feedback: IFeedback): void { <del> var queryString = `?${feedback.sentiment === 1 ? 'hashtags=HappyCoding&' : null}ref_src=twsrc%5Etfw&related=twitterapi%2Ctwitter&text=${feedback.feedback}&tw_p=tweetbutton&via=code`; </del> <ins> var queryString = `?${feedback.sentiment === 1 ? `hashtags=${this.combineHashTagsAsString()}&` : null}ref_src=twsrc%5Etfw&related=twitterapi%2Ctwitter&text=${feedback.feedback}&tw_p=tweetbutton&via=${TwitterFeedbackService.VIA_NAME}`; </ins> var url = TwitterFeedbackService.TWITTER_URL + queryString; shell.openExternal(url); } <ins> public getCharacterLimit(sentiment: number): number { let length : number = 0; if (sentiment === 1) { TwitterFeedbackService.HASHTAGS.forEach(element => { length += element.length + 2; }); } if (TwitterFeedbackService.VIA_NAME) { length += ` via @${TwitterFeedbackService.VIA_NAME}`.length; } return 140 - length; } </ins> } export class FeedbackStatusbarItem implements IStatusbarItem {