提交 192e15b6 编写于 作者: J Johannes Rieken

remove support for markdown message in tree view, only support plain string

上级 3ff362c0
...@@ -1012,7 +1012,7 @@ declare module 'vscode' { ...@@ -1012,7 +1012,7 @@ declare module 'vscode' {
/** /**
* An optional human-readable message that will be rendered in the view. * An optional human-readable message that will be rendered in the view.
*/ */
message?: string | MarkdownString; message?: string;
} }
......
...@@ -10,7 +10,6 @@ import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers'; ...@@ -10,7 +10,6 @@ import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
import { distinct } from 'vs/base/common/arrays'; import { distinct } from 'vs/base/common/arrays';
import { INotificationService } from 'vs/platform/notification/common/notification'; import { INotificationService } from 'vs/platform/notification/common/notification';
import { isUndefinedOrNull, isNumber } from 'vs/base/common/types'; import { isUndefinedOrNull, isNumber } from 'vs/base/common/types';
import { IMarkdownString } from 'vs/base/common/htmlContent';
import { Registry } from 'vs/platform/registry/common/platform'; import { Registry } from 'vs/platform/registry/common/platform';
@extHostNamedCustomer(MainContext.MainThreadTreeViews) @extHostNamedCustomer(MainContext.MainThreadTreeViews)
...@@ -63,7 +62,7 @@ export class MainThreadTreeViews extends Disposable implements MainThreadTreeVie ...@@ -63,7 +62,7 @@ export class MainThreadTreeViews extends Disposable implements MainThreadTreeVie
return Promise.resolve(); return Promise.resolve();
} }
$setMessage(treeViewId: string, message: string | IMarkdownString): void { $setMessage(treeViewId: string, message: string): void {
const viewer = this.getTreeView(treeViewId); const viewer = this.getTreeView(treeViewId);
if (viewer) { if (viewer) {
viewer.message = message; viewer.message = message;
......
...@@ -245,7 +245,7 @@ export interface MainThreadTreeViewsShape extends IDisposable { ...@@ -245,7 +245,7 @@ export interface MainThreadTreeViewsShape extends IDisposable {
$registerTreeViewDataProvider(treeViewId: string, options: { showCollapseAll: boolean }): void; $registerTreeViewDataProvider(treeViewId: string, options: { showCollapseAll: boolean }): void;
$refresh(treeViewId: string, itemsToRefresh?: { [treeItemHandle: string]: ITreeItem }): Promise<void>; $refresh(treeViewId: string, itemsToRefresh?: { [treeItemHandle: string]: ITreeItem }): Promise<void>;
$reveal(treeViewId: string, treeItem: ITreeItem, parentChain: ITreeItem[], options: IRevealOptions): Promise<void>; $reveal(treeViewId: string, treeItem: ITreeItem, parentChain: ITreeItem[], options: IRevealOptions): Promise<void>;
$setMessage(treeViewId: string, message: string | IMarkdownString): void; $setMessage(treeViewId: string, message: string): void;
} }
export interface MainThreadDownloadServiceShape extends IDisposable { export interface MainThreadDownloadServiceShape extends IDisposable {
......
...@@ -13,7 +13,7 @@ import { ExtHostTreeViewsShape, MainThreadTreeViewsShape } from './extHost.proto ...@@ -13,7 +13,7 @@ import { ExtHostTreeViewsShape, MainThreadTreeViewsShape } from './extHost.proto
import { ITreeItem, TreeViewItemHandleArg, ITreeItemLabel, IRevealOptions } from 'vs/workbench/common/views'; import { ITreeItem, TreeViewItemHandleArg, ITreeItemLabel, IRevealOptions } from 'vs/workbench/common/views';
import { ExtHostCommands, CommandsConverter } from 'vs/workbench/api/common/extHostCommands'; import { ExtHostCommands, CommandsConverter } from 'vs/workbench/api/common/extHostCommands';
import { asPromise } from 'vs/base/common/async'; import { asPromise } from 'vs/base/common/async';
import { TreeItemCollapsibleState, ThemeIcon, MarkdownString } from 'vs/workbench/api/common/extHostTypes'; import { TreeItemCollapsibleState, ThemeIcon } from 'vs/workbench/api/common/extHostTypes';
import { isUndefinedOrNull, isString } from 'vs/base/common/types'; import { isUndefinedOrNull, isString } from 'vs/base/common/types';
import { equals, coalesce } from 'vs/base/common/arrays'; import { equals, coalesce } from 'vs/base/common/arrays';
import { ILogService } from 'vs/platform/log/common/log'; import { ILogService } from 'vs/platform/log/common/log';
...@@ -81,7 +81,10 @@ export class ExtHostTreeViews implements ExtHostTreeViewsShape { ...@@ -81,7 +81,10 @@ export class ExtHostTreeViews implements ExtHostTreeViewsShape {
get visible() { return treeView.visible; }, get visible() { return treeView.visible; },
get onDidChangeVisibility() { return treeView.onDidChangeVisibility; }, get onDidChangeVisibility() { return treeView.onDidChangeVisibility; },
get message() { return treeView.message; }, get message() { return treeView.message; },
set message(message: string | MarkdownString) { checkProposedApiEnabled(extension); treeView.message = message; }, set message(message: string) {
checkProposedApiEnabled(extension);
treeView.message = message;
},
reveal: (element: T, options?: IRevealOptions): Promise<void> => { reveal: (element: T, options?: IRevealOptions): Promise<void> => {
return treeView.reveal(element, options); return treeView.reveal(element, options);
}, },
...@@ -250,12 +253,12 @@ class ExtHostTreeView<T> extends Disposable { ...@@ -250,12 +253,12 @@ class ExtHostTreeView<T> extends Disposable {
.then(treeNode => this.proxy.$reveal(this.viewId, treeNode.item, parentChain.map(p => p.item), { select, focus, expand })), error => this.logService.error(error)); .then(treeNode => this.proxy.$reveal(this.viewId, treeNode.item, parentChain.map(p => p.item), { select, focus, expand })), error => this.logService.error(error));
} }
private _message: string | MarkdownString = ''; private _message: string = '';
get message(): string | MarkdownString { get message(): string {
return this._message; return this._message;
} }
set message(message: string | MarkdownString) { set message(message: string) {
this._message = message; this._message = message;
this._onDidChangeData.fire({ message: true, element: false }); this._onDidChangeData.fire({ message: true, element: false });
} }
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
import 'vs/css!./media/views'; import 'vs/css!./media/views';
import { Event, Emitter } from 'vs/base/common/event'; import { Event, Emitter } from 'vs/base/common/event';
import { IDisposable, Disposable, toDisposable, DisposableStore, MutableDisposable } from 'vs/base/common/lifecycle'; import { IDisposable, Disposable, toDisposable, MutableDisposable } from 'vs/base/common/lifecycle';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IAction, IActionViewItem, ActionRunner, Action } from 'vs/base/common/actions'; import { IAction, IActionViewItem, ActionRunner, Action } from 'vs/base/common/actions';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
...@@ -33,18 +33,14 @@ import { ViewletPanel, IViewletPanelOptions } from 'vs/workbench/browser/parts/v ...@@ -33,18 +33,14 @@ import { ViewletPanel, IViewletPanelOptions } from 'vs/workbench/browser/parts/v
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { timeout } from 'vs/base/common/async'; import { timeout } from 'vs/base/common/async';
import { editorFindMatchHighlight, editorFindMatchHighlightBorder, textLinkForeground, textCodeBlockBackground, focusBorder } from 'vs/platform/theme/common/colorRegistry'; import { editorFindMatchHighlight, editorFindMatchHighlightBorder, textLinkForeground, textCodeBlockBackground, focusBorder } from 'vs/platform/theme/common/colorRegistry';
import { IMarkdownString } from 'vs/base/common/htmlContent';
import { isString } from 'vs/base/common/types'; import { isString } from 'vs/base/common/types';
import { renderMarkdown, RenderOptions } from 'vs/base/browser/htmlContentRenderer';
import { onUnexpectedError } from 'vs/base/common/errors';
import { IOpenerService } from 'vs/platform/opener/common/opener';
import { IMarkdownRenderResult } from 'vs/editor/contrib/markdown/markdownRenderer';
import { ILabelService } from 'vs/platform/label/common/label'; import { ILabelService } from 'vs/platform/label/common/label';
import { Registry } from 'vs/platform/registry/common/platform'; import { Registry } from 'vs/platform/registry/common/platform';
import { IListVirtualDelegate, IIdentityProvider } from 'vs/base/browser/ui/list/list'; import { IListVirtualDelegate, IIdentityProvider } from 'vs/base/browser/ui/list/list';
import { ITreeRenderer, ITreeNode, IAsyncDataSource, ITreeContextMenuEvent } from 'vs/base/browser/ui/tree/tree'; import { ITreeRenderer, ITreeNode, IAsyncDataSource, ITreeContextMenuEvent } from 'vs/base/browser/ui/tree/tree';
import { FuzzyScore, createMatches } from 'vs/base/common/filters'; import { FuzzyScore, createMatches } from 'vs/base/common/filters';
import { CollapseAllAction } from 'vs/base/browser/ui/tree/treeDefaults'; import { CollapseAllAction } from 'vs/base/browser/ui/tree/treeDefaults';
import { isFalsyOrWhitespace } from 'vs/base/common/strings';
export class CustomTreeViewPanel extends ViewletPanel { export class CustomTreeViewPanel extends ViewletPanel {
...@@ -167,7 +163,7 @@ export class CustomTreeView extends Disposable implements ITreeView { ...@@ -167,7 +163,7 @@ export class CustomTreeView extends Disposable implements ITreeView {
private focused: boolean = false; private focused: boolean = false;
private domNode: HTMLElement; private domNode: HTMLElement;
private treeContainer: HTMLElement; private treeContainer: HTMLElement;
private _messageValue: string | IMarkdownString | undefined; private _messageValue: string | undefined;
private messageElement: HTMLDivElement; private messageElement: HTMLDivElement;
private tree: WorkbenchAsyncDataTree<ITreeItem, ITreeItem, FuzzyScore>; private tree: WorkbenchAsyncDataTree<ITreeItem, ITreeItem, FuzzyScore>;
private treeLabels: ResourceLabels; private treeLabels: ResourceLabels;
...@@ -175,9 +171,6 @@ export class CustomTreeView extends Disposable implements ITreeView { ...@@ -175,9 +171,6 @@ export class CustomTreeView extends Disposable implements ITreeView {
private elementsToRefresh: ITreeItem[] = []; private elementsToRefresh: ITreeItem[] = [];
private menus: TitleMenus; private menus: TitleMenus;
private markdownRenderer: MarkdownRenderer;
private markdownResult: IMarkdownRenderResult | null;
private readonly _onDidExpandItem: Emitter<ITreeItem> = this._register(new Emitter<ITreeItem>()); private readonly _onDidExpandItem: Emitter<ITreeItem> = this._register(new Emitter<ITreeItem>());
readonly onDidExpandItem: Event<ITreeItem> = this._onDidExpandItem.event; readonly onDidExpandItem: Event<ITreeItem> = this._onDidExpandItem.event;
...@@ -217,12 +210,6 @@ export class CustomTreeView extends Disposable implements ITreeView { ...@@ -217,12 +210,6 @@ export class CustomTreeView extends Disposable implements ITreeView {
this.doRefresh([this.root]); /** soft refresh **/ this.doRefresh([this.root]); /** soft refresh **/
} }
})); }));
this.markdownRenderer = instantiationService.createInstance(MarkdownRenderer);
this._register(toDisposable(() => {
if (this.markdownResult) {
this.markdownResult.dispose();
}
}));
this._register(Registry.as<IViewsRegistry>(Extensions.ViewsRegistry).onDidChangeContainer(({ views, from, to }) => { this._register(Registry.as<IViewsRegistry>(Extensions.ViewsRegistry).onDidChangeContainer(({ views, from, to }) => {
if (from === this.viewContainer && views.some(v => v.id === this.id)) { if (from === this.viewContainer && views.some(v => v.id === this.id)) {
this.viewContainer = to; this.viewContainer = to;
...@@ -256,12 +243,12 @@ export class CustomTreeView extends Disposable implements ITreeView { ...@@ -256,12 +243,12 @@ export class CustomTreeView extends Disposable implements ITreeView {
} }
} }
private _message: string | IMarkdownString | undefined; private _message: string | undefined;
get message(): string | IMarkdownString | undefined { get message(): string | undefined {
return this._message; return this._message;
} }
set message(message: string | IMarkdownString | undefined) { set message(message: string | undefined) {
this._message = message; this._message = message;
this.updateMessage(); this.updateMessage();
} }
...@@ -470,16 +457,13 @@ export class CustomTreeView extends Disposable implements ITreeView { ...@@ -470,16 +457,13 @@ export class CustomTreeView extends Disposable implements ITreeView {
this.updateContentAreas(); this.updateContentAreas();
} }
private showMessage(message: string | IMarkdownString): void { private showMessage(message: string): void {
DOM.removeClass(this.messageElement, 'hide'); DOM.removeClass(this.messageElement, 'hide');
if (this._messageValue !== message) { if (this._messageValue !== message) {
this.resetMessageElement(); this.resetMessageElement();
this._messageValue = message; this._messageValue = message;
if (isString(this._messageValue)) { if (!isFalsyOrWhitespace(this._message)) {
this.messageElement.textContent = this._messageValue; this.messageElement.textContent = this._messageValue;
} else {
this.markdownResult = this.markdownRenderer.render(this._messageValue);
DOM.append(this.messageElement, this.markdownResult.element);
} }
this.layout(this._height, this._width); this.layout(this._height, this._width);
} }
...@@ -492,10 +476,6 @@ export class CustomTreeView extends Disposable implements ITreeView { ...@@ -492,10 +476,6 @@ export class CustomTreeView extends Disposable implements ITreeView {
} }
private resetMessageElement(): void { private resetMessageElement(): void {
if (this.markdownResult) {
this.markdownResult.dispose();
this.markdownResult = null;
}
DOM.clearNode(this.messageElement); DOM.clearNode(this.messageElement);
} }
...@@ -893,38 +873,3 @@ class TreeMenus extends Disposable implements IDisposable { ...@@ -893,38 +873,3 @@ class TreeMenus extends Disposable implements IDisposable {
} }
} }
class MarkdownRenderer {
constructor(
@IOpenerService private readonly _openerService: IOpenerService
) {
}
private getOptions(disposeables: DisposableStore): RenderOptions {
return {
actionHandler: {
callback: (content) => {
let uri: URI | undefined;
try {
uri = URI.parse(content);
} catch {
// ignore
}
if (uri && this._openerService) {
this._openerService.open(uri).catch(onUnexpectedError);
}
},
disposeables
}
};
}
render(markdown: IMarkdownString): IMarkdownRenderResult {
const disposeables = new DisposableStore();
const element: HTMLElement = markdown ? renderMarkdown(markdown, this.getOptions(disposeables)) : document.createElement('span');
return {
element,
dispose: () => disposeables.dispose()
};
}
}
...@@ -17,7 +17,6 @@ import { values, keys } from 'vs/base/common/map'; ...@@ -17,7 +17,6 @@ import { values, keys } from 'vs/base/common/map';
import { Registry } from 'vs/platform/registry/common/platform'; import { Registry } from 'vs/platform/registry/common/platform';
import { IKeybindings } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { IKeybindings } from 'vs/platform/keybinding/common/keybindingsRegistry';
import { IAction } from 'vs/base/common/actions'; import { IAction } from 'vs/base/common/actions';
import { IMarkdownString } from 'vs/base/common/htmlContent';
import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
export const TEST_VIEW_CONTAINER_ID = 'workbench.view.extension.test'; export const TEST_VIEW_CONTAINER_ID = 'workbench.view.extension.test';
...@@ -305,7 +304,7 @@ export interface ITreeView extends IDisposable { ...@@ -305,7 +304,7 @@ export interface ITreeView extends IDisposable {
showCollapseAllAction: boolean; showCollapseAllAction: boolean;
message?: string | IMarkdownString; message?: string;
readonly visible: boolean; readonly visible: boolean;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册