@@ -18,6 +18,7 @@ import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/
1818import { REMOTE_HOST_SCHEME } from 'vs/platform/remote/common/remoteHosts' ;
1919import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService' ;
2020import { Emitter , Event } from 'vs/base/common/event' ;
21+ import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation' ;
2122
2223export abstract class ExtensionWidget extends Disposable implements IExtensionContainer {
2324 private _extension : IExtension ;
@@ -238,27 +239,28 @@ export class RecommendationWidget extends ExtensionWidget {
238239
239240export class RemoteBadgeWidget extends ExtensionWidget {
240241
241- private element : HTMLElement | null ;
242+ private remoteBadge : RemoteBadge | null ;
242243 private disposables : IDisposable [ ] = [ ] ;
243244
245+ private element : HTMLElement ;
246+
244247 constructor (
245- private parent : HTMLElement ,
246- @ILabelService private readonly labelService : ILabelService ,
247- @IThemeService private readonly themeService : IThemeService ,
248+ parent : HTMLElement ,
248249 @IExtensionManagementServerService private readonly extensionManagementServerService : IExtensionManagementServerService ,
249- @IWorkspaceContextService private readonly workspaceContextService : IWorkspaceContextService ,
250- @IWorkbenchEnvironmentService private readonly environmentService : IWorkbenchEnvironmentService
250+ @IInstantiationService private readonly instantiationService : IInstantiationService
251251 ) {
252252 super ( ) ;
253+ this . element = append ( parent , $ ( '.extension-remote-badge-container' ) ) ;
253254 this . render ( ) ;
254255 this . _register ( toDisposable ( ( ) => this . clear ( ) ) ) ;
255256 }
256257
257258 private clear ( ) : void {
258- if ( this . element ) {
259- this . parent . removeChild ( this . element ) ;
259+ if ( this . remoteBadge ) {
260+ this . element . removeChild ( this . remoteBadge . element ) ;
261+ this . remoteBadge . dispose ( ) ;
260262 }
261- this . element = null ;
263+ this . remoteBadge = null ;
262264 this . disposables = dispose ( this . disposables ) ;
263265 }
264266
@@ -268,30 +270,56 @@ export class RemoteBadgeWidget extends ExtensionWidget {
268270 return ;
269271 }
270272 if ( this . extension . server === this . extensionManagementServerService . remoteExtensionManagementServer ) {
271- this . element = append ( this . parent , $ ( 'div.extension-remote-badge' ) ) ;
272- append ( this . element , $ ( 'span.octicon.octicon-remote' ) ) ;
273-
274- const applyBadgeStyle = ( ) => {
275- if ( ! this . element ) {
276- return ;
277- }
278- const bgColor = this . themeService . getTheme ( ) . getColor ( STATUS_BAR_HOST_NAME_BACKGROUND ) ;
279- const fgColor = this . workspaceContextService . getWorkbenchState ( ) === WorkbenchState . EMPTY ? this . themeService . getTheme ( ) . getColor ( STATUS_BAR_NO_FOLDER_FOREGROUND ) : this . themeService . getTheme ( ) . getColor ( STATUS_BAR_FOREGROUND ) ;
280- this . element . style . backgroundColor = bgColor ? bgColor . toString ( ) : '' ;
281- this . element . style . color = fgColor ? fgColor . toString ( ) : '' ;
282- } ;
283- applyBadgeStyle ( ) ;
284- this . themeService . onThemeChange ( applyBadgeStyle , this , this . disposables ) ;
285- this . workspaceContextService . onDidChangeWorkbenchState ( applyBadgeStyle , this , this . disposables ) ;
286-
287- const updateTitle = ( ) => {
288- if ( this . element ) {
289- this . element . title = localize ( 'remote extension title' , "Extension in {0}" , this . labelService . getHostLabel ( REMOTE_HOST_SCHEME , this . environmentService . configuration . remoteAuthority ) ) ;
290- }
291- } ;
292- this . labelService . onDidChangeFormatters ( ( ) => updateTitle ( ) , this , this . disposables ) ;
293- updateTitle ( ) ;
273+ this . remoteBadge = this . instantiationService . createInstance ( RemoteBadge ) ;
274+ append ( this . element , this . remoteBadge . element ) ;
294275 }
295276 }
296277
278+ dispose ( ) : void {
279+ if ( this . remoteBadge ) {
280+ this . remoteBadge . dispose ( ) ;
281+ }
282+ super . dispose ( ) ;
283+ }
297284}
285+
286+ class RemoteBadge extends Disposable {
287+
288+ readonly element : HTMLElement ;
289+
290+ constructor (
291+ @ILabelService private readonly labelService : ILabelService ,
292+ @IThemeService private readonly themeService : IThemeService ,
293+ @IWorkspaceContextService private readonly workspaceContextService : IWorkspaceContextService ,
294+ @IWorkbenchEnvironmentService private readonly environmentService : IWorkbenchEnvironmentService
295+ ) {
296+ super ( ) ;
297+ this . element = $ ( 'div.extension-remote-badge' ) ;
298+ this . render ( ) ;
299+ }
300+
301+ private render ( ) : void {
302+ append ( this . element , $ ( 'span.octicon.octicon-remote' ) ) ;
303+
304+ const applyBadgeStyle = ( ) => {
305+ if ( ! this . element ) {
306+ return ;
307+ }
308+ const bgColor = this . themeService . getTheme ( ) . getColor ( STATUS_BAR_HOST_NAME_BACKGROUND ) ;
309+ const fgColor = this . workspaceContextService . getWorkbenchState ( ) === WorkbenchState . EMPTY ? this . themeService . getTheme ( ) . getColor ( STATUS_BAR_NO_FOLDER_FOREGROUND ) : this . themeService . getTheme ( ) . getColor ( STATUS_BAR_FOREGROUND ) ;
310+ this . element . style . backgroundColor = bgColor ? bgColor . toString ( ) : '' ;
311+ this . element . style . color = fgColor ? fgColor . toString ( ) : '' ;
312+ } ;
313+ applyBadgeStyle ( ) ;
314+ this . _register ( this . themeService . onThemeChange ( ( ) => applyBadgeStyle ( ) ) ) ;
315+ this . _register ( this . workspaceContextService . onDidChangeWorkbenchState ( ( ) => applyBadgeStyle ( ) ) ) ;
316+
317+ const updateTitle = ( ) => {
318+ if ( this . element ) {
319+ this . element . title = localize ( 'remote extension title' , "Extension in {0}" , this . labelService . getHostLabel ( REMOTE_HOST_SCHEME , this . environmentService . configuration . remoteAuthority ) ) ;
320+ }
321+ } ;
322+ this . _register ( this . labelService . onDidChangeFormatters ( ( ) => updateTitle ( ) ) ) ;
323+ updateTitle ( ) ;
324+ }
325+ }
0 commit comments