diff --git a/src/vs/workbench/parts/update/electron-browser/releaseNotesEditor.ts b/src/vs/workbench/parts/update/electron-browser/releaseNotesEditor.ts index 21f41aadea201..4ee582ad2d958 100644 --- a/src/vs/workbench/parts/update/electron-browser/releaseNotesEditor.ts +++ b/src/vs/workbench/parts/update/electron-browser/releaseNotesEditor.ts @@ -7,7 +7,7 @@ import { TPromise } from 'vs/base/common/winjs.base'; import { marked } from 'vs/base/common/marked/marked'; -import { IDisposable, dispose } from 'vs/base/common/lifecycle'; +import { IDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle'; import { Builder } from 'vs/base/browser/builder'; import { append, $ } from 'vs/base/browser/dom'; import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor'; @@ -39,9 +39,9 @@ export class ReleaseNotesEditor extends BaseEditor { static ID: string = 'workbench.editor.releaseNotes'; private content: HTMLElement; + private webview: WebView; private contentDisposables: IDisposable[] = []; - private disposables: IDisposable[]; constructor( @ITelemetryService telemetryService: ITelemetryService, @@ -53,7 +53,6 @@ export class ReleaseNotesEditor extends BaseEditor { @IModeService private modeService: IModeService ) { super(ReleaseNotesEditor.ID, telemetryService); - this.disposables = []; } createEditor(parent: Builder): void { @@ -64,6 +63,7 @@ export class ReleaseNotesEditor extends BaseEditor { setInput(input: ReleaseNotesInput, options: EditorOptions): TPromise { const { text } = input; + this.contentDisposables = dispose(this.contentDisposables); this.content.innerHTML = ''; return super.setInput(input, options) @@ -89,18 +89,19 @@ export class ReleaseNotesEditor extends BaseEditor { }) .then(renderBody) .then(body => { - const webview = new WebView( + this.webview = new WebView( this.content, document.querySelector('.monaco-editor-background') ); - webview.baseUrl = `https://code.visualstudio.com/raw/`; - webview.style(this.themeService.getColorTheme()); - webview.contents = [body]; + this.webview.baseUrl = `https://code.visualstudio.com/raw/`; + this.webview.style(this.themeService.getColorTheme()); + this.webview.contents = [body]; - webview.onDidClickLink(link => this.openerService.open(link), null, this.contentDisposables); - this.themeService.onDidColorThemeChange(themeId => webview.style(themeId), null, this.contentDisposables); - this.contentDisposables.push(webview); + this.webview.onDidClickLink(link => this.openerService.open(link), null, this.contentDisposables); + this.themeService.onDidColorThemeChange(themeId => this.webview.style(themeId), null, this.contentDisposables); + this.contentDisposables.push(this.webview); + this.contentDisposables.push(toDisposable(() => this.webview = null)); }); } @@ -108,8 +109,16 @@ export class ReleaseNotesEditor extends BaseEditor { // noop } + focus(): void { + if (!this.webview) { + return; + } + + this.webview.focus(); + } + dispose(): void { - this.disposables = dispose(this.disposables); + this.contentDisposables = dispose(this.contentDisposables); super.dispose(); } }