未验证 提交 9676646c 编写于 作者: R Rob Lourens 提交者: GitHub

Merge pull request #108120 from ryanclarke:106737-enumdescriptions-in-settings-ui

Add new property to IConfigurationPropertySchema
......@@ -113,6 +113,7 @@ export interface IConfigurationPropertySchema extends IJSONSchema {
included?: boolean;
tags?: string[];
disallowSyncIgnore?: boolean;
enumItemLabels?: string[];
}
export interface IConfigurationExtensionInfo {
......
......@@ -248,7 +248,8 @@ configurationRegistry.registerConfiguration({
'default': 'utf8',
'description': nls.localize('encoding', "The default character set encoding to use when reading and writing files. This setting can also be configured per language."),
'scope': ConfigurationScope.LANGUAGE_OVERRIDABLE,
'enumDescriptions': Object.keys(SUPPORTED_ENCODINGS).map(key => SUPPORTED_ENCODINGS[key].labelLong)
'enumDescriptions': Object.keys(SUPPORTED_ENCODINGS).map(key => SUPPORTED_ENCODINGS[key].labelLong),
'enumItemLabels': Object.keys(SUPPORTED_ENCODINGS).map(key => SUPPORTED_ENCODINGS[key].labelLong)
},
'files.autoGuessEncoding': {
'type': 'boolean',
......
......@@ -1318,6 +1318,7 @@ export class SettingEnumRenderer extends AbstractSettingRenderer implements ITre
}
protected renderValue(dataElement: SettingsTreeSettingElement, template: ISettingEnumItemTemplate, onChange: (value: string) => void): void {
const enumItemLabels = dataElement.setting.enumItemLabels;
const enumDescriptions = dataElement.setting.enumDescriptions;
const enumDescriptionsAreMarkdown = dataElement.setting.enumDescriptionsAreMarkdown;
......@@ -1327,17 +1328,20 @@ export class SettingEnumRenderer extends AbstractSettingRenderer implements ITre
const displayOptions = dataElement.setting.enum!
.map(String)
.map(escapeInvisibleChars)
.map((data, index) => <ISelectOptionItem>{
text: data,
description: (enumDescriptions && enumDescriptions[index] && (enumDescriptionsAreMarkdown ? fixSettingLinks(enumDescriptions[index], false) : enumDescriptions[index])),
descriptionIsMarkdown: enumDescriptionsAreMarkdown,
descriptionMarkdownActionHandler: {
callback: (content) => {
this._openerService.open(content).catch(onUnexpectedError);
.map((data, index) => {
const description = (enumDescriptions && enumDescriptions[index] && (enumDescriptionsAreMarkdown ? fixSettingLinks(enumDescriptions[index], false) : enumDescriptions[index]));
return <ISelectOptionItem>{
text: enumItemLabels && enumItemLabels[index] ? enumItemLabels[index] : data,
description: enumItemLabels && enumItemLabels[index] ? `[${data}] ${description}` : description,
descriptionIsMarkdown: enumDescriptionsAreMarkdown,
descriptionMarkdownActionHandler: {
callback: (content) => {
this._openerService.open(content).catch(onUnexpectedError);
},
disposeables: disposables
},
disposeables: disposables
},
decoratorRight: (data === dataElement.defaultValue ? localize('settings.Default', "default") : '')
decoratorRight: (data === dataElement.defaultValue ? localize('settings.Default', "default") : '')
};
});
template.selectBox.setOptions(displayOptions);
......
......@@ -76,6 +76,7 @@ export interface ISetting {
disallowSyncIgnore?: boolean;
extensionInfo?: IConfigurationExtensionInfo;
validator?: (value: any) => string | null;
enumItemLabels?: string[];
}
export interface IExtensionSetting extends ISetting {
......
......@@ -646,7 +646,8 @@ export class DefaultSettings extends Disposable {
extensionInfo: extensionInfo,
deprecationMessage: prop.markdownDeprecationMessage || prop.deprecationMessage,
deprecationMessageIsMarkdown: !!prop.markdownDeprecationMessage,
validator: createValidator(prop)
validator: createValidator(prop),
enumItemLabels: prop.enumItemLabels
});
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册