mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-31 09:10:30 -04:00
Merge from vscode c58aaab8a1cc22a7139b761166a0d4f37d41e998 (#7880)
* Merge from vscode c58aaab8a1cc22a7139b761166a0d4f37d41e998 * fix pipelines * fix strict-null-checks * add missing files
This commit is contained in:
@@ -59,6 +59,9 @@ export class KeybindingsSearchWidget extends SearchWidget {
|
||||
super(parent, options, contextViewService, instantiationService, themeService);
|
||||
this._register(attachInputBoxStyler(this.inputBox, themeService));
|
||||
this._register(toDisposable(() => this.stopRecordingKeys()));
|
||||
this._firstPart = null;
|
||||
this._chordPart = null;
|
||||
this._inputValue = '';
|
||||
|
||||
this._reset();
|
||||
}
|
||||
@@ -166,7 +169,45 @@ export class DefineKeybindingWidget extends Widget {
|
||||
@IThemeService private readonly themeService: IThemeService
|
||||
) {
|
||||
super();
|
||||
this.create();
|
||||
|
||||
this._domNode = createFastDomNode(document.createElement('div'));
|
||||
this._domNode.setDisplay('none');
|
||||
this._domNode.setClassName('defineKeybindingWidget');
|
||||
this._domNode.setWidth(DefineKeybindingWidget.WIDTH);
|
||||
this._domNode.setHeight(DefineKeybindingWidget.HEIGHT);
|
||||
|
||||
const message = nls.localize('defineKeybinding.initial', "Press desired key combination and then press ENTER.");
|
||||
dom.append(this._domNode.domNode, dom.$('.message', undefined, message));
|
||||
|
||||
this._register(attachStylerCallback(this.themeService, { editorWidgetBackground, editorWidgetForeground, widgetShadow }, colors => {
|
||||
if (colors.editorWidgetBackground) {
|
||||
this._domNode.domNode.style.backgroundColor = colors.editorWidgetBackground.toString();
|
||||
} else {
|
||||
this._domNode.domNode.style.backgroundColor = '';
|
||||
}
|
||||
if (colors.editorWidgetForeground) {
|
||||
this._domNode.domNode.style.color = colors.editorWidgetForeground.toString();
|
||||
} else {
|
||||
this._domNode.domNode.style.color = null;
|
||||
}
|
||||
|
||||
if (colors.widgetShadow) {
|
||||
this._domNode.domNode.style.boxShadow = `0 2px 8px ${colors.widgetShadow}`;
|
||||
} else {
|
||||
this._domNode.domNode.style.boxShadow = '';
|
||||
}
|
||||
}));
|
||||
|
||||
this._keybindingInputWidget = this._register(this.instantiationService.createInstance(KeybindingsSearchWidget, this._domNode.domNode, { ariaLabel: message }));
|
||||
this._keybindingInputWidget.startRecordingKeys();
|
||||
this._register(this._keybindingInputWidget.onKeybinding(keybinding => this.onKeybinding(keybinding)));
|
||||
this._register(this._keybindingInputWidget.onEnter(() => this.hide()));
|
||||
this._register(this._keybindingInputWidget.onEscape(() => this.onCancel()));
|
||||
this._register(this._keybindingInputWidget.onBlur(() => this.onCancel()));
|
||||
|
||||
this._outputNode = dom.append(this._domNode.domNode, dom.$('.output'));
|
||||
this._showExistingKeybindingsNode = dom.append(this._domNode.domNode, dom.$('.existing'));
|
||||
|
||||
if (parent) {
|
||||
dom.append(parent, this._domNode.domNode);
|
||||
}
|
||||
@@ -217,46 +258,6 @@ export class DefineKeybindingWidget extends Widget {
|
||||
}
|
||||
}
|
||||
|
||||
private create(): void {
|
||||
this._domNode = createFastDomNode(document.createElement('div'));
|
||||
this._domNode.setDisplay('none');
|
||||
this._domNode.setClassName('defineKeybindingWidget');
|
||||
this._domNode.setWidth(DefineKeybindingWidget.WIDTH);
|
||||
this._domNode.setHeight(DefineKeybindingWidget.HEIGHT);
|
||||
|
||||
const message = nls.localize('defineKeybinding.initial', "Press desired key combination and then press ENTER.");
|
||||
dom.append(this._domNode.domNode, dom.$('.message', undefined, message));
|
||||
|
||||
this._register(attachStylerCallback(this.themeService, { editorWidgetBackground, editorWidgetForeground, widgetShadow }, colors => {
|
||||
if (colors.editorWidgetBackground) {
|
||||
this._domNode.domNode.style.backgroundColor = colors.editorWidgetBackground.toString();
|
||||
} else {
|
||||
this._domNode.domNode.style.backgroundColor = null;
|
||||
}
|
||||
if (colors.editorWidgetForeground) {
|
||||
this._domNode.domNode.style.color = colors.editorWidgetForeground.toString();
|
||||
} else {
|
||||
this._domNode.domNode.style.color = null;
|
||||
}
|
||||
|
||||
if (colors.widgetShadow) {
|
||||
this._domNode.domNode.style.boxShadow = `0 2px 8px ${colors.widgetShadow}`;
|
||||
} else {
|
||||
this._domNode.domNode.style.boxShadow = null;
|
||||
}
|
||||
}));
|
||||
|
||||
this._keybindingInputWidget = this._register(this.instantiationService.createInstance(KeybindingsSearchWidget, this._domNode.domNode, { ariaLabel: message }));
|
||||
this._keybindingInputWidget.startRecordingKeys();
|
||||
this._register(this._keybindingInputWidget.onKeybinding(keybinding => this.onKeybinding(keybinding)));
|
||||
this._register(this._keybindingInputWidget.onEnter(() => this.hide()));
|
||||
this._register(this._keybindingInputWidget.onEscape(() => this.onCancel()));
|
||||
this._register(this._keybindingInputWidget.onBlur(() => this.onCancel()));
|
||||
|
||||
this._outputNode = dom.append(this._domNode.domNode, dom.$('.output'));
|
||||
this._showExistingKeybindingsNode = dom.append(this._domNode.domNode, dom.$('.existing'));
|
||||
}
|
||||
|
||||
private onKeybinding(keybinding: [ResolvedKeybinding | null, ResolvedKeybinding | null]): void {
|
||||
const [firstPart, chordPart] = keybinding;
|
||||
this._firstPart = firstPart;
|
||||
|
||||
@@ -29,7 +29,6 @@ import {
|
||||
} from 'vs/workbench/contrib/preferences/common/preferences';
|
||||
import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||
import { IKeybindingEditingService } from 'vs/workbench/services/keybinding/common/keybindingEditing';
|
||||
import { List } from 'vs/base/browser/ui/list/listWidget';
|
||||
import { IListVirtualDelegate, IListRenderer, IListContextMenuEvent, IListEvent } from 'vs/base/browser/ui/list/list';
|
||||
import { IThemeService, registerThemingParticipant, ITheme, ICssStyleCollector } from 'vs/platform/theme/common/themeService';
|
||||
import { IContextKeyService, IContextKey, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
|
||||
@@ -79,7 +78,7 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
|
||||
private keybindingsListContainer: HTMLElement;
|
||||
private unAssignedKeybindingItemToRevealAndFocus: IKeybindingItemEntry | null;
|
||||
private listEntries: IListEntry[];
|
||||
private keybindingsList: List<IListEntry>;
|
||||
private keybindingsList: WorkbenchList<IListEntry>;
|
||||
|
||||
private dimension: DOM.Dimension;
|
||||
private delayedFiltering: Delayer<void>;
|
||||
@@ -402,13 +401,13 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
|
||||
const recordingBadge = DOM.append(container, DOM.$('.recording-badge.disabled'));
|
||||
recordingBadge.textContent = localize('recording', "Recording Keys");
|
||||
this._register(attachStylerCallback(this.themeService, { badgeBackground, contrastBorder, badgeForeground }, colors => {
|
||||
const background = colors.badgeBackground ? colors.badgeBackground.toString() : null;
|
||||
const border = colors.contrastBorder ? colors.contrastBorder.toString() : null;
|
||||
const color = colors.badgeForeground ? colors.badgeForeground.toString() : null;
|
||||
const background = colors.badgeBackground ? colors.badgeBackground.toString() : '';
|
||||
const border = colors.contrastBorder ? colors.contrastBorder.toString() : '';
|
||||
const color = colors.badgeForeground ? colors.badgeForeground.toString() : '';
|
||||
|
||||
recordingBadge.style.backgroundColor = background;
|
||||
recordingBadge.style.borderWidth = border ? '1px' : null;
|
||||
recordingBadge.style.borderStyle = border ? 'solid' : null;
|
||||
recordingBadge.style.borderWidth = border ? '1px' : '';
|
||||
recordingBadge.style.borderStyle = border ? 'solid' : '';
|
||||
recordingBadge.style.borderColor = border;
|
||||
recordingBadge.style.color = color ? color.toString() : null;
|
||||
}));
|
||||
|
||||
@@ -23,14 +23,13 @@ import { parseTree, Node } from 'vs/base/common/json';
|
||||
import { ScanCodeBinding } from 'vs/base/common/scanCode';
|
||||
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
|
||||
import { WindowsNativeResolvedKeybinding } from 'vs/workbench/services/keybinding/common/windowsKeyboardMapper';
|
||||
import { themeColorFromId, ThemeColor, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
|
||||
import { themeColorFromId, ThemeColor } from 'vs/platform/theme/common/themeService';
|
||||
import { overviewRulerInfo, overviewRulerError } from 'vs/editor/common/view/editorColorRegistry';
|
||||
import { IModelDeltaDecoration, ITextModel, TrackedRangeStickiness, OverviewRulerLane } from 'vs/editor/common/model';
|
||||
import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
|
||||
import { KeybindingParser } from 'vs/base/common/keybindingParser';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
import { SeverityIcon } from 'vs/platform/severityIcon/common/severityIcon';
|
||||
import { EditorOption } from 'vs/editor/common/config/editorOptions';
|
||||
import { equals } from 'vs/base/common/arrays';
|
||||
|
||||
const NLS_LAUNCH_MESSAGE = nls.localize('defineKeybinding.start', "Define Keybinding");
|
||||
const NLS_KB_LAYOUT_ERROR_MESSAGE = nls.localize('defineKeybinding.kbLayoutErrorMessage', "You won't be able to produce this key combination under your current keyboard layout.");
|
||||
@@ -39,7 +38,7 @@ const INTERESTING_FILE = /keybindings\.json$/;
|
||||
|
||||
export class DefineKeybindingController extends Disposable implements editorCommon.IEditorContribution {
|
||||
|
||||
private static readonly ID = 'editor.contrib.defineKeybinding';
|
||||
public static readonly ID = 'editor.contrib.defineKeybinding';
|
||||
|
||||
static get(editor: ICodeEditor): DefineKeybindingController {
|
||||
return editor.getContribution<DefineKeybindingController>(DefineKeybindingController.ID);
|
||||
@@ -58,10 +57,6 @@ export class DefineKeybindingController extends Disposable implements editorComm
|
||||
this._update();
|
||||
}
|
||||
|
||||
getId(): string {
|
||||
return DefineKeybindingController.ID;
|
||||
}
|
||||
|
||||
get keybindingWidgetRenderer(): KeybindingWidgetRenderer | undefined {
|
||||
return this._keybindingWidgetRenderer;
|
||||
}
|
||||
@@ -267,18 +262,7 @@ export class KeybindingEditorDecorationsRenderer extends Disposable {
|
||||
|
||||
const aParts = KeybindingParser.parseUserBinding(a);
|
||||
const bParts = KeybindingParser.parseUserBinding(b);
|
||||
|
||||
if (aParts.length !== bParts.length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (let i = 0, len = aParts.length; i < len; i++) {
|
||||
if (!this._userBindingEquals(aParts[i], bParts[i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
return equals(aParts, bParts, (a, b) => this._userBindingEquals(a, b));
|
||||
}
|
||||
|
||||
private static _userBindingEquals(a: SimpleKeybinding | ScanCodeBinding, b: SimpleKeybinding | ScanCodeBinding): boolean {
|
||||
@@ -397,10 +381,5 @@ function isInterestingEditorModel(editor: ICodeEditor): boolean {
|
||||
return INTERESTING_FILE.test(url);
|
||||
}
|
||||
|
||||
registerEditorContribution(DefineKeybindingController);
|
||||
registerEditorContribution(DefineKeybindingController.ID, DefineKeybindingController);
|
||||
registerEditorCommand(new DefineKeybindingCommand());
|
||||
|
||||
registerThemingParticipant((theme, collector) => {
|
||||
collector.addRule(`.monaco-editor .inlineKeybindingInfo:before { background: url("data:image/svg+xml,${SeverityIcon.getSVGData(Severity.Info, theme)}") -0.1em -0.2em no-repeat; }`);
|
||||
collector.addRule(`.monaco-editor .inlineKeybindingError:before { background: url("data:image/svg+xml,${SeverityIcon.getSVGData(Severity.Error, theme)}") -0.1em -0.2em no-repeat; }`);
|
||||
});
|
||||
|
||||
@@ -273,7 +273,7 @@
|
||||
max-width: 1000px;
|
||||
margin: auto;
|
||||
box-sizing: border-box;
|
||||
padding-left: 217px;
|
||||
padding-left: 219px;
|
||||
padding-right: 20px;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Action } from 'vs/base/common/actions';
|
||||
import { dispose, IDisposable, DisposableStore } from 'vs/base/common/lifecycle';
|
||||
import { DisposableStore } from 'vs/base/common/lifecycle';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { getIconClasses } from 'vs/editor/common/services/getIconClasses';
|
||||
import { IModelService } from 'vs/editor/common/services/modelService';
|
||||
@@ -198,9 +198,6 @@ export class OpenFolderSettingsAction extends Action {
|
||||
static readonly ID = 'workbench.action.openFolderSettings';
|
||||
static readonly LABEL = OPEN_FOLDER_SETTINGS_LABEL;
|
||||
|
||||
private disposables: IDisposable[] = [];
|
||||
|
||||
|
||||
constructor(
|
||||
id: string,
|
||||
label: string,
|
||||
@@ -210,8 +207,8 @@ export class OpenFolderSettingsAction extends Action {
|
||||
) {
|
||||
super(id, label);
|
||||
this.update();
|
||||
this.workspaceContextService.onDidChangeWorkbenchState(() => this.update(), this, this.disposables);
|
||||
this.workspaceContextService.onDidChangeWorkspaceFolders(() => this.update(), this, this.disposables);
|
||||
this._register(this.workspaceContextService.onDidChangeWorkbenchState(() => this.update(), this));
|
||||
this._register(this.workspaceContextService.onDidChangeWorkspaceFolders(() => this.update(), this));
|
||||
}
|
||||
|
||||
private update(): void {
|
||||
@@ -228,11 +225,6 @@ export class OpenFolderSettingsAction extends Action {
|
||||
return undefined;
|
||||
});
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
this.disposables = dispose(this.disposables);
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
export class ConfigureLanguageBasedSettingsAction extends Action {
|
||||
|
||||
@@ -17,7 +17,7 @@ import { Disposable, dispose, IDisposable } from 'vs/base/common/lifecycle';
|
||||
import * as strings from 'vs/base/common/strings';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
|
||||
import { EditorExtensionsRegistry, IEditorContributionCtor, registerEditorContribution } from 'vs/editor/browser/editorExtensions';
|
||||
import { EditorExtensionsRegistry, registerEditorContribution, IEditorContributionDescription } from 'vs/editor/browser/editorExtensions';
|
||||
import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
|
||||
import { IEditorOptions } from 'vs/editor/common/config/editorOptions';
|
||||
import * as editorCommon from 'vs/editor/common/editorCommon';
|
||||
@@ -54,7 +54,7 @@ import { DefaultPreferencesEditorInput, PreferencesEditorInput } from 'vs/workbe
|
||||
import { DefaultSettingsEditorModel, SettingsEditorModel } from 'vs/workbench/services/preferences/common/preferencesModels';
|
||||
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
|
||||
import { IHostService } from 'vs/workbench/services/host/browser/host';
|
||||
import { withNullAsUndefined, withUndefinedAsNull } from 'vs/base/common/types';
|
||||
import { withNullAsUndefined, withUndefinedAsNull, assertIsDefined } from 'vs/base/common/types';
|
||||
|
||||
export class PreferencesEditor extends BaseEditor {
|
||||
|
||||
@@ -683,7 +683,7 @@ class PreferencesRenderersController extends Disposable {
|
||||
}
|
||||
|
||||
private _updatePreference(key: string, value: any, source: ISetting, fromEditableSettings?: boolean): void {
|
||||
const data: { [key: string]: any } = {
|
||||
const data: { [key: string]: any; } = {
|
||||
userConfigurationKeys: [key]
|
||||
};
|
||||
|
||||
@@ -718,7 +718,7 @@ class PreferencesRenderersController extends Disposable {
|
||||
this.telemetryService.publicLog('defaultSettingsActions.copySetting', data);
|
||||
}
|
||||
|
||||
private _findSetting(filterResult: IFilterResult, key: string): { groupIdx: number, settingIdx: number, overallSettingIdx: number } | undefined {
|
||||
private _findSetting(filterResult: IFilterResult, key: string): { groupIdx: number, settingIdx: number, overallSettingIdx: number; } | undefined {
|
||||
let overallSettingIdx = 0;
|
||||
|
||||
for (let groupIdx = 0; groupIdx < filterResult.filteredGroups.length; groupIdx++) {
|
||||
@@ -826,11 +826,7 @@ class SideBySidePreferencesWidget extends Widget {
|
||||
this._register(attachStylerCallback(this.themeService, { scrollbarShadow }, colors => {
|
||||
const shadow = colors.scrollbarShadow ? colors.scrollbarShadow.toString() : null;
|
||||
|
||||
if (shadow) {
|
||||
this.editablePreferencesEditorContainer.style.boxShadow = `-6px 0 5px -5px ${shadow}`;
|
||||
} else {
|
||||
this.editablePreferencesEditorContainer.style.boxShadow = null;
|
||||
}
|
||||
this.editablePreferencesEditorContainer.style.boxShadow = shadow ? `-6px 0 5px -5px ${shadow}` : '';
|
||||
}));
|
||||
|
||||
this.splitview.addView({
|
||||
@@ -845,7 +841,7 @@ class SideBySidePreferencesWidget extends Widget {
|
||||
this._register(focusTracker.onDidFocus(() => this._onFocus.fire()));
|
||||
}
|
||||
|
||||
setInput(defaultPreferencesEditorInput: DefaultPreferencesEditorInput, editablePreferencesEditorInput: EditorInput, options: EditorOptions | undefined, token: CancellationToken): Promise<{ defaultPreferencesRenderer?: IPreferencesRenderer<ISetting>, editablePreferencesRenderer?: IPreferencesRenderer<ISetting> }> {
|
||||
setInput(defaultPreferencesEditorInput: DefaultPreferencesEditorInput, editablePreferencesEditorInput: EditorInput, options: EditorOptions | undefined, token: CancellationToken): Promise<{ defaultPreferencesRenderer?: IPreferencesRenderer<ISetting>, editablePreferencesRenderer?: IPreferencesRenderer<ISetting>; }> {
|
||||
this.getOrCreateEditablePreferencesEditor(editablePreferencesEditorInput);
|
||||
this.settingsTargetsWidget.settingsTarget = this.getSettingsTarget(editablePreferencesEditorInput.getResource()!);
|
||||
return Promise.all([
|
||||
@@ -990,10 +986,10 @@ export class DefaultPreferencesEditor extends BaseTextEditor {
|
||||
super(DefaultPreferencesEditor.ID, telemetryService, instantiationService, storageService, configurationService, themeService, textFileService, editorService, editorGroupService, hostService);
|
||||
}
|
||||
|
||||
private static _getContributions(): IEditorContributionCtor[] {
|
||||
const skipContributions = [FoldingController.prototype, SelectionHighlighter.prototype, FindController.prototype];
|
||||
const contributions = EditorExtensionsRegistry.getEditorContributions().filter(c => skipContributions.indexOf(c.prototype) === -1);
|
||||
contributions.push(DefaultSettingsEditorContribution);
|
||||
private static _getContributions(): IEditorContributionDescription[] {
|
||||
const skipContributions = [FoldingController.ID, SelectionHighlighter.ID, FindController.ID];
|
||||
const contributions = EditorExtensionsRegistry.getEditorContributions().filter(c => skipContributions.indexOf(c.id) === -1);
|
||||
contributions.push({ id: DefaultSettingsEditorContribution.ID, ctor: DefaultSettingsEditorContribution });
|
||||
return contributions;
|
||||
}
|
||||
|
||||
@@ -1049,20 +1045,25 @@ export class DefaultPreferencesEditor extends BaseTextEditor {
|
||||
return;
|
||||
}
|
||||
|
||||
this.getControl().setModel((<ResourceEditorModel>editorModel).textEditorModel);
|
||||
const editor = assertIsDefined(this.getControl());
|
||||
editor.setModel((<ResourceEditorModel>editorModel).textEditorModel);
|
||||
}));
|
||||
}
|
||||
|
||||
clearInput(): void {
|
||||
// Clear Model
|
||||
this.getControl().setModel(null);
|
||||
const editor = this.getControl();
|
||||
if (editor) {
|
||||
editor.setModel(null);
|
||||
}
|
||||
|
||||
// Pass to super
|
||||
super.clearInput();
|
||||
}
|
||||
|
||||
layout(dimension: DOM.Dimension) {
|
||||
this.getControl().layout(dimension);
|
||||
const editor = assertIsDefined(this.getControl());
|
||||
editor.layout(dimension);
|
||||
}
|
||||
|
||||
protected getAriaLabel(): string {
|
||||
@@ -1157,17 +1158,12 @@ abstract class AbstractSettingsEditorContribution extends Disposable implements
|
||||
}
|
||||
|
||||
protected abstract _createPreferencesRenderer(): Promise<IPreferencesRenderer<ISetting> | null> | null;
|
||||
abstract getId(): string;
|
||||
}
|
||||
|
||||
export class DefaultSettingsEditorContribution extends AbstractSettingsEditorContribution implements ISettingsEditorContribution {
|
||||
|
||||
static readonly ID: string = 'editor.contrib.defaultsettings';
|
||||
|
||||
getId(): string {
|
||||
return DefaultSettingsEditorContribution.ID;
|
||||
}
|
||||
|
||||
protected _createPreferencesRenderer(): Promise<IPreferencesRenderer<ISetting> | null> | null {
|
||||
return this.preferencesService.createPreferencesEditorModel(this.editor.getModel()!.uri)
|
||||
.then<any>(editorModel => {
|
||||
@@ -1194,10 +1190,6 @@ class SettingsEditorContribution extends AbstractSettingsEditorContribution impl
|
||||
this._register(this.workspaceContextService.onDidChangeWorkbenchState(() => this._onModelChanged()));
|
||||
}
|
||||
|
||||
getId(): string {
|
||||
return SettingsEditorContribution.ID;
|
||||
}
|
||||
|
||||
protected _createPreferencesRenderer(): Promise<IPreferencesRenderer<ISetting> | null> | null {
|
||||
const model = this.editor.getModel();
|
||||
if (model) {
|
||||
@@ -1227,4 +1219,4 @@ class SettingsEditorContribution extends AbstractSettingsEditorContribution impl
|
||||
}
|
||||
}
|
||||
|
||||
registerEditorContribution(SettingsEditorContribution);
|
||||
registerEditorContribution(SettingsEditorContribution.ID, SettingsEditorContribution);
|
||||
|
||||
@@ -32,6 +32,7 @@ import { DefaultSettingsEditorModel, SettingsEditorModel, WorkspaceConfiguration
|
||||
import { IMarkerService, IMarkerData, MarkerSeverity, MarkerTag } from 'vs/platform/markers/common/markers';
|
||||
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
|
||||
import { EditorOption } from 'vs/editor/common/config/editorOptions';
|
||||
import { find } from 'vs/base/common/arrays';
|
||||
|
||||
export interface IPreferencesRenderer<T> extends IDisposable {
|
||||
readonly preferencesModel: IPreferencesEditorModel<T>;
|
||||
@@ -258,7 +259,7 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR
|
||||
this.settingsGroupTitleRenderer = this._register(instantiationService.createInstance(SettingsGroupTitleRenderer, editor));
|
||||
this.filteredMatchesRenderer = this._register(instantiationService.createInstance(FilteredMatchesRenderer, editor));
|
||||
this.editSettingActionRenderer = this._register(instantiationService.createInstance(EditSettingRenderer, editor, preferencesModel, this.settingHighlighter));
|
||||
this.bracesHidingRenderer = this._register(instantiationService.createInstance(BracesHidingRenderer, editor, preferencesModel));
|
||||
this.bracesHidingRenderer = this._register(instantiationService.createInstance(BracesHidingRenderer, editor));
|
||||
this.hiddenAreasRenderer = this._register(instantiationService.createInstance(HiddenAreasRenderer, editor, [this.settingsGroupTitleRenderer, this.filteredMatchesRenderer, this.bracesHidingRenderer]));
|
||||
|
||||
this._register(this.editSettingActionRenderer.onUpdateSetting(e => this._onUpdatePreference.fire(e)));
|
||||
@@ -321,12 +322,7 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR
|
||||
const { key, overrideOf } = setting;
|
||||
if (overrideOf) {
|
||||
const setting = this.getSetting(overrideOf);
|
||||
for (const override of setting!.overrides!) {
|
||||
if (override.key === key) {
|
||||
return override;
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
return find(setting!.overrides!, override => override.key === key);
|
||||
}
|
||||
const settingsGroups = this.filterResult ? this.filterResult.filteredGroups : this.preferencesModel.settingsGroups;
|
||||
return this.getPreference(key, settingsGroups);
|
||||
|
||||
@@ -34,6 +34,7 @@ import { PANEL_ACTIVE_TITLE_BORDER, PANEL_ACTIVE_TITLE_FOREGROUND, PANEL_INACTIV
|
||||
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
|
||||
import { ISettingsGroup } from 'vs/workbench/services/preferences/common/preferences';
|
||||
import { EditorOption } from 'vs/editor/common/config/editorOptions';
|
||||
import { isEqual } from 'vs/base/common/resources';
|
||||
|
||||
export class SettingsHeaderWidget extends Widget implements IViewZone {
|
||||
|
||||
@@ -341,7 +342,7 @@ export class FolderSettingsActionViewItem extends BaseActionViewItem {
|
||||
this.container = container;
|
||||
this.labelElement = DOM.$('.action-title');
|
||||
this.detailsElement = DOM.$('.action-details');
|
||||
this.dropDownElement = DOM.$('.dropdown-icon.octicon.octicon-triangle-down.hide');
|
||||
this.dropDownElement = DOM.$('.dropdown-icon.codicon.codicon-triangle-down.hide');
|
||||
this.anchorElement = DOM.$('a.action-label.folder-settings', {
|
||||
role: 'button',
|
||||
'aria-haspopup': 'true',
|
||||
@@ -387,7 +388,7 @@ export class FolderSettingsActionViewItem extends BaseActionViewItem {
|
||||
const oldFolder = this._folder;
|
||||
const workspace = this.contextService.getWorkspace();
|
||||
if (oldFolder) {
|
||||
this._folder = workspace.folders.filter(folder => folder.uri.toString() === oldFolder.uri.toString())[0] || workspace.folders[0];
|
||||
this._folder = workspace.folders.filter(folder => isEqual(folder.uri, oldFolder.uri))[0] || workspace.folders[0];
|
||||
}
|
||||
this._folder = this._folder ? this._folder : workspace.folders.length === 1 ? workspace.folders[0] : null;
|
||||
|
||||
@@ -440,7 +441,7 @@ export class FolderSettingsActionViewItem extends BaseActionViewItem {
|
||||
return <IAction>{
|
||||
id: 'folderSettingsTarget' + index,
|
||||
label: this.labelWithCount(folder.name, folderCount),
|
||||
checked: this.folder && this.folder.uri.toString() === folder.uri.toString(),
|
||||
checked: this.folder && isEqual(this.folder.uri, folder.uri),
|
||||
enabled: true,
|
||||
run: () => this._action.run(folder)
|
||||
};
|
||||
@@ -574,7 +575,7 @@ export class SettingsTargetsWidget extends Widget {
|
||||
const isSameTarget = this.settingsTarget === settingsTarget ||
|
||||
settingsTarget instanceof URI &&
|
||||
this.settingsTarget instanceof URI &&
|
||||
this.settingsTarget.toString() === settingsTarget.toString();
|
||||
isEqual(this.settingsTarget, settingsTarget);
|
||||
|
||||
if (!isSameTarget) {
|
||||
this.settingsTarget = settingsTarget;
|
||||
@@ -632,13 +633,13 @@ export class SearchWidget extends Widget {
|
||||
if (this.options.showResultCount) {
|
||||
this.countElement = DOM.append(this.controlsDiv, DOM.$('.settings-count-widget'));
|
||||
this._register(attachStylerCallback(this.themeService, { badgeBackground, contrastBorder }, colors => {
|
||||
const background = colors.badgeBackground ? colors.badgeBackground.toString() : null;
|
||||
const border = colors.contrastBorder ? colors.contrastBorder.toString() : null;
|
||||
const background = colors.badgeBackground ? colors.badgeBackground.toString() : '';
|
||||
const border = colors.contrastBorder ? colors.contrastBorder.toString() : '';
|
||||
|
||||
this.countElement.style.backgroundColor = background;
|
||||
|
||||
this.countElement.style.borderWidth = border ? '1px' : null;
|
||||
this.countElement.style.borderStyle = border ? 'solid' : null;
|
||||
this.countElement.style.borderWidth = border ? '1px' : '';
|
||||
this.countElement.style.borderStyle = border ? 'solid' : '';
|
||||
this.countElement.style.borderColor = border;
|
||||
|
||||
const color = this.themeService.getTheme().getColor(badgeForeground);
|
||||
|
||||
@@ -12,7 +12,7 @@ import * as collections from 'vs/base/common/collections';
|
||||
import { getErrorMessage, isPromiseCanceledError } from 'vs/base/common/errors';
|
||||
import { Iterator } from 'vs/base/common/iterator';
|
||||
import * as strings from 'vs/base/common/strings';
|
||||
import { isArray, withNullAsUndefined } from 'vs/base/common/types';
|
||||
import { isArray, withNullAsUndefined, withUndefinedAsNull } from 'vs/base/common/types';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import 'vs/css!./media/settingsEditor2';
|
||||
import { localize } from 'vs/nls';
|
||||
@@ -71,6 +71,7 @@ export class SettingsEditor2 extends BaseEditor {
|
||||
private static NUM_INSTANCES: number = 0;
|
||||
private static SETTING_UPDATE_FAST_DEBOUNCE: number = 200;
|
||||
private static SETTING_UPDATE_SLOW_DEBOUNCE: number = 1000;
|
||||
private static CONFIG_SCHEMA_UPDATE_DELAYER = 500;
|
||||
|
||||
private static readonly SUGGESTIONS: string[] = [
|
||||
`@${MODIFIED_SETTING_TAG}`, '@tag:usesOnlineServices', `@${EXTENSION_SETTING_TAG}`
|
||||
@@ -115,6 +116,8 @@ export class SettingsEditor2 extends BaseEditor {
|
||||
private remoteSearchThrottle: ThrottledDelayer<void>;
|
||||
private searchInProgress: CancellationTokenSource | null = null;
|
||||
|
||||
private updatedConfigSchemaDelayer: Delayer<void>;
|
||||
|
||||
private settingFastUpdateDelayer: Delayer<void>;
|
||||
private settingSlowUpdateDelayer: Delayer<void>;
|
||||
private pendingSettingUpdate: { key: string, value: any } | null = null;
|
||||
@@ -161,6 +164,8 @@ export class SettingsEditor2 extends BaseEditor {
|
||||
this.settingFastUpdateDelayer = new Delayer<void>(SettingsEditor2.SETTING_UPDATE_FAST_DEBOUNCE);
|
||||
this.settingSlowUpdateDelayer = new Delayer<void>(SettingsEditor2.SETTING_UPDATE_SLOW_DEBOUNCE);
|
||||
|
||||
this.updatedConfigSchemaDelayer = new Delayer<void>(SettingsEditor2.CONFIG_SCHEMA_UPDATE_DELAYER);
|
||||
|
||||
this.inSettingsEditorContextKey = CONTEXT_SETTINGS_EDITOR.bindTo(contextKeyService);
|
||||
this.searchFocusContextKey = CONTEXT_SETTINGS_SEARCH_FOCUS.bindTo(contextKeyService);
|
||||
this.tocRowFocused = CONTEXT_TOC_ROW_FOCUS.bindTo(contextKeyService);
|
||||
@@ -216,31 +221,29 @@ export class SettingsEditor2 extends BaseEditor {
|
||||
return super.setInput(input, options, token)
|
||||
.then(() => timeout(0)) // Force setInput to be async
|
||||
.then(() => {
|
||||
return this.render(token);
|
||||
})
|
||||
.then(() => {
|
||||
options = options || SettingsEditorOptions.create({});
|
||||
// Don't block setInput on render (which can trigger an async search)
|
||||
this.render(token).then(() => {
|
||||
options = options || SettingsEditorOptions.create({});
|
||||
|
||||
if (!this.viewState.settingsTarget) {
|
||||
if (!options.target) {
|
||||
options.target = ConfigurationTarget.USER_LOCAL;
|
||||
if (!this.viewState.settingsTarget) {
|
||||
if (!options.target) {
|
||||
options.target = ConfigurationTarget.USER_LOCAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this._setOptions(options);
|
||||
this._setOptions(options);
|
||||
|
||||
this._register(input.onDispose(() => {
|
||||
this.searchWidget.setValue('');
|
||||
}));
|
||||
this._register(input.onDispose(() => {
|
||||
this.searchWidget.setValue('');
|
||||
}));
|
||||
|
||||
// Init TOC selection
|
||||
this.updateTreeScrollSync();
|
||||
|
||||
this.restoreCachedState();
|
||||
// Init TOC selection
|
||||
this.updateTreeScrollSync();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
private restoreCachedState(): void {
|
||||
private restoreCachedState(): ISettingsEditor2State | null {
|
||||
const cachedState = this.group && this.input && this.editorMemento.loadEditorState(this.group, this.input);
|
||||
if (cachedState && typeof cachedState.target === 'object') {
|
||||
cachedState.target = URI.revive(cachedState.target);
|
||||
@@ -249,9 +252,15 @@ export class SettingsEditor2 extends BaseEditor {
|
||||
if (cachedState) {
|
||||
const settingsTarget = cachedState.target;
|
||||
this.settingsTargetsWidget.settingsTarget = settingsTarget;
|
||||
this.onDidSettingsTargetChange(settingsTarget);
|
||||
this.viewState.settingsTarget = settingsTarget;
|
||||
this.searchWidget.setValue(cachedState.searchQuery);
|
||||
}
|
||||
|
||||
if (this.input) {
|
||||
this.editorMemento.clearEditorState(this.input, this.group);
|
||||
}
|
||||
|
||||
return withUndefinedAsNull(cachedState);
|
||||
}
|
||||
|
||||
setOptions(options: SettingsEditorOptions | undefined): void {
|
||||
@@ -281,10 +290,6 @@ export class SettingsEditor2 extends BaseEditor {
|
||||
|
||||
clearInput(): void {
|
||||
this.inSettingsEditorContextKey.set(false);
|
||||
if (this.input) {
|
||||
this.editorMemento.clearEditorState(this.input, this.group);
|
||||
}
|
||||
|
||||
super.clearInput();
|
||||
}
|
||||
|
||||
@@ -408,15 +413,15 @@ export class SettingsEditor2 extends BaseEditor {
|
||||
|
||||
this.countElement = DOM.append(searchContainer, DOM.$('.settings-count-widget'));
|
||||
this._register(attachStylerCallback(this.themeService, { badgeBackground, contrastBorder, badgeForeground }, colors => {
|
||||
const background = colors.badgeBackground ? colors.badgeBackground.toString() : null;
|
||||
const border = colors.contrastBorder ? colors.contrastBorder.toString() : null;
|
||||
const foreground = colors.badgeForeground ? colors.badgeForeground.toString() : null;
|
||||
const background = colors.badgeBackground ? colors.badgeBackground.toString() : '';
|
||||
const border = colors.contrastBorder ? colors.contrastBorder.toString() : '';
|
||||
const foreground = colors.badgeForeground ? colors.badgeForeground.toString() : '';
|
||||
|
||||
this.countElement.style.backgroundColor = background;
|
||||
this.countElement.style.color = foreground;
|
||||
|
||||
this.countElement.style.borderWidth = border ? '1px' : null;
|
||||
this.countElement.style.borderStyle = border ? 'solid' : null;
|
||||
this.countElement.style.borderWidth = border ? '1px' : '';
|
||||
this.countElement.style.borderStyle = border ? 'solid' : '';
|
||||
this.countElement.style.borderColor = border;
|
||||
}));
|
||||
|
||||
@@ -855,7 +860,11 @@ export class SettingsEditor2 extends BaseEditor {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
this._register(model.onDidChangeGroups(() => this.onConfigUpdate()));
|
||||
this._register(model.onDidChangeGroups(() => {
|
||||
this.updatedConfigSchemaDelayer.trigger(() => {
|
||||
this.onConfigUpdate(undefined, undefined, true);
|
||||
});
|
||||
}));
|
||||
this.defaultSettingsEditorModel = model;
|
||||
return this.onConfigUpdate(undefined, true);
|
||||
});
|
||||
@@ -889,7 +898,7 @@ export class SettingsEditor2 extends BaseEditor {
|
||||
});
|
||||
}
|
||||
|
||||
private onConfigUpdate(keys?: string[], forceRefresh = false): void {
|
||||
private async onConfigUpdate(keys?: string[], forceRefresh = false, schemaChange = false): Promise<void> {
|
||||
if (keys && this.settingsTreeModel) {
|
||||
return this.updateElementsByKey(keys);
|
||||
}
|
||||
@@ -922,23 +931,26 @@ export class SettingsEditor2 extends BaseEditor {
|
||||
if (this.settingsTreeModel) {
|
||||
this.settingsTreeModel.update(resolvedSettingsRoot);
|
||||
|
||||
// Make sure that all extensions' settings are included in search results
|
||||
const cachedState = this.group && this.input && this.editorMemento.loadEditorState(this.group, this.input);
|
||||
if (cachedState && cachedState.searchQuery) {
|
||||
this.triggerSearch(cachedState.searchQuery);
|
||||
} else {
|
||||
this.renderTree(undefined, forceRefresh);
|
||||
this.refreshTOCTree();
|
||||
if (schemaChange && !!this.searchResultModel) {
|
||||
// If an extension's settings were just loaded and a search is active, retrigger the search so it shows up
|
||||
return await this.onSearchInputChanged();
|
||||
}
|
||||
|
||||
this.refreshTOCTree();
|
||||
this.renderTree(undefined, forceRefresh);
|
||||
} else {
|
||||
this.settingsTreeModel = this.instantiationService.createInstance(SettingsTreeModel, this.viewState);
|
||||
this.settingsTreeModel.update(resolvedSettingsRoot);
|
||||
this.tocTreeModel.settingsTreeRoot = this.settingsTreeModel.root as SettingsTreeGroupElement;
|
||||
|
||||
this.refreshTOCTree();
|
||||
this.refreshTree();
|
||||
|
||||
this.tocTree.collapseAll();
|
||||
const cachedState = this.restoreCachedState();
|
||||
if (cachedState && cachedState.searchQuery) {
|
||||
await this.onSearchInputChanged();
|
||||
} else {
|
||||
this.refreshTOCTree();
|
||||
this.refreshTree();
|
||||
this.tocTree.collapseAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1045,14 +1057,14 @@ export class SettingsEditor2 extends BaseEditor {
|
||||
}
|
||||
}
|
||||
|
||||
private onSearchInputChanged(): void {
|
||||
private async onSearchInputChanged(): Promise<void> {
|
||||
const query = this.searchWidget.getValue().trim();
|
||||
this.delayedFilterLogging.cancel();
|
||||
this.triggerSearch(query.replace(/›/g, ' ')).then(() => {
|
||||
if (query && this.searchResultModel) {
|
||||
this.delayedFilterLogging.trigger(() => this.reportFilteringUsed(query, this.searchResultModel!.getUniqueResults()));
|
||||
}
|
||||
});
|
||||
await this.triggerSearch(query.replace(/›/g, ' '));
|
||||
|
||||
if (query && this.searchResultModel) {
|
||||
this.delayedFilterLogging.trigger(() => this.reportFilteringUsed(query, this.searchResultModel!.getUniqueResults()));
|
||||
}
|
||||
}
|
||||
|
||||
private parseSettingFromJSON(query: string): string | null {
|
||||
@@ -1097,16 +1109,16 @@ export class SettingsEditor2 extends BaseEditor {
|
||||
// Added a filter model
|
||||
this.tocTree.setSelection([]);
|
||||
this.tocTree.expandAll();
|
||||
this.refreshTOCTree();
|
||||
this.renderResultCountMessages();
|
||||
this.refreshTree();
|
||||
} else {
|
||||
// Leaving search mode
|
||||
this.tocTree.collapseAll();
|
||||
this.refreshTOCTree();
|
||||
this.renderResultCountMessages();
|
||||
this.refreshTree();
|
||||
}
|
||||
|
||||
this.refreshTOCTree();
|
||||
}
|
||||
|
||||
return Promise.resolve();
|
||||
@@ -1235,8 +1247,8 @@ export class SettingsEditor2 extends BaseEditor {
|
||||
this.viewState.filterToCategory = undefined;
|
||||
this.tocTree.expandAll();
|
||||
|
||||
this.renderTree(undefined, true);
|
||||
this.refreshTOCTree();
|
||||
this.renderTree(undefined, true);
|
||||
return result;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -132,7 +132,7 @@ export const tocData: ITOCEntry = {
|
||||
{
|
||||
id: 'features/search',
|
||||
label: localize('search', "Search"),
|
||||
settings: ['search.*', 'searchRipgrep.*']
|
||||
settings: ['search.*']
|
||||
}
|
||||
,
|
||||
{
|
||||
@@ -155,6 +155,11 @@ export const tocData: ITOCEntry = {
|
||||
label: localize('terminal', "Terminal"),
|
||||
settings: ['terminal.*']
|
||||
},
|
||||
{
|
||||
id: 'features/task',
|
||||
label: localize('task', "Task"),
|
||||
settings: ['task.*']
|
||||
},
|
||||
{
|
||||
id: 'features/problems',
|
||||
label: localize('problems', "Problems"),
|
||||
|
||||
@@ -12,7 +12,7 @@ import { alert as ariaAlert } from 'vs/base/browser/ui/aria/aria';
|
||||
import { Button } from 'vs/base/browser/ui/button/button';
|
||||
import { Checkbox } from 'vs/base/browser/ui/checkbox/checkbox';
|
||||
import { InputBox } from 'vs/base/browser/ui/inputbox/inputBox';
|
||||
import { IListVirtualDelegate, ListAriaRootRole } from 'vs/base/browser/ui/list/list';
|
||||
import { ListAriaRootRole, CachedListVirtualDelegate } from 'vs/base/browser/ui/list/list';
|
||||
import { DefaultStyleController } from 'vs/base/browser/ui/list/listWidget';
|
||||
import { ISelectOptionItem, SelectBox } from 'vs/base/browser/ui/selectBox/selectBox';
|
||||
import { ToolBar } from 'vs/base/browser/ui/toolbar/toolbar';
|
||||
@@ -1379,29 +1379,7 @@ export class SettingsTreeFilter implements ITreeFilter<SettingsTreeElement> {
|
||||
}
|
||||
}
|
||||
|
||||
class SettingsTreeDelegate implements IListVirtualDelegate<SettingsTreeGroupChild> {
|
||||
|
||||
private heightCache = new WeakMap<SettingsTreeGroupChild, number>();
|
||||
|
||||
getHeight(element: SettingsTreeGroupChild): number {
|
||||
const cachedHeight = this.heightCache.get(element);
|
||||
|
||||
if (typeof cachedHeight === 'number') {
|
||||
return cachedHeight;
|
||||
}
|
||||
|
||||
if (element instanceof SettingsTreeGroupElement) {
|
||||
if (element.isFirstGroup) {
|
||||
return 31;
|
||||
}
|
||||
|
||||
return 40 + (7 * element.level);
|
||||
}
|
||||
|
||||
return element instanceof SettingsTreeSettingElement && element.valueType === SettingValueType.Boolean ?
|
||||
78 :
|
||||
104;
|
||||
}
|
||||
class SettingsTreeDelegate extends CachedListVirtualDelegate<SettingsTreeGroupChild> {
|
||||
|
||||
getTemplateId(element: SettingsTreeGroupElement | SettingsTreeSettingElement | SettingsTreeNewExtensionsElement): string {
|
||||
if (element instanceof SettingsTreeGroupElement) {
|
||||
@@ -1447,8 +1425,16 @@ class SettingsTreeDelegate implements IListVirtualDelegate<SettingsTreeGroupChil
|
||||
return !(element instanceof SettingsTreeGroupElement);
|
||||
}
|
||||
|
||||
setDynamicHeight(element: SettingsTreeGroupChild, height: number): void {
|
||||
this.heightCache.set(element, height);
|
||||
protected estimateHeight(element: SettingsTreeGroupChild): number {
|
||||
if (element instanceof SettingsTreeGroupElement) {
|
||||
if (element.isFirstGroup) {
|
||||
return 31;
|
||||
}
|
||||
|
||||
return 40 + (7 * element.level);
|
||||
}
|
||||
|
||||
return element instanceof SettingsTreeSettingElement && element.valueType === SettingValueType.Boolean ? 78 : 104;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1488,8 +1474,8 @@ export class SettingsTree extends ObjectTree<SettingsTreeElement> {
|
||||
filter: instantiationService.createInstance(SettingsTreeFilter, viewState)
|
||||
});
|
||||
|
||||
this.disposables = [];
|
||||
this.disposables.push(registerThemingParticipant((theme: ITheme, collector: ICssStyleCollector) => {
|
||||
this.disposables.clear();
|
||||
this.disposables.add(registerThemingParticipant((theme: ITheme, collector: ICssStyleCollector) => {
|
||||
const activeBorderColor = theme.getColor(focusBorder);
|
||||
if (activeBorderColor) {
|
||||
// TODO@rob - why isn't this applied when added to the stylesheet from tocTree.ts? Seems like a chromium glitch.
|
||||
@@ -1539,7 +1525,7 @@ export class SettingsTree extends ObjectTree<SettingsTreeElement> {
|
||||
|
||||
this.getHTMLElement().classList.add(treeClass);
|
||||
|
||||
this.disposables.push(attachStyler(themeService, {
|
||||
this.disposables.add(attachStyler(themeService, {
|
||||
listActiveSelectionBackground: transparent(Color.white, 0),
|
||||
listActiveSelectionForeground: foreground,
|
||||
listFocusAndSelectionBackground: transparent(Color.white, 0),
|
||||
|
||||
@@ -90,7 +90,7 @@ export class SettingsTreeNewExtensionsElement extends SettingsTreeElement {
|
||||
}
|
||||
|
||||
export class SettingsTreeSettingElement extends SettingsTreeElement {
|
||||
private static MAX_DESC_LINES = 20;
|
||||
private static readonly MAX_DESC_LINES = 20;
|
||||
|
||||
setting: ISetting;
|
||||
|
||||
@@ -273,13 +273,7 @@ export class SettingsTreeSettingElement extends SettingsTreeElement {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (let extensionId of extensionFilters) {
|
||||
if (extensionId.toLowerCase() === this.setting.extensionInfo.id.toLowerCase()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return Array.from(extensionFilters).some(extensionId => extensionId.toLowerCase() === this.setting.extensionInfo!.id.toLowerCase());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -409,7 +403,7 @@ function sanitizeId(id: string): string {
|
||||
return id.replace(/[\.\/]/, '_');
|
||||
}
|
||||
|
||||
export function settingKeyToDisplayFormat(key: string, groupId = ''): { category: string, label: string } {
|
||||
export function settingKeyToDisplayFormat(key: string, groupId = ''): { category: string, label: string; } {
|
||||
const lastDotIdx = key.lastIndexOf('.');
|
||||
let category = '';
|
||||
if (lastDotIdx >= 0) {
|
||||
@@ -542,12 +536,18 @@ export class SearchResultModel extends SettingsTreeModel {
|
||||
|
||||
setResult(order: SearchResultIdx, result: ISearchResult | null): void {
|
||||
this.cachedUniqueSearchResults = null;
|
||||
this.newExtensionSearchResults = null;
|
||||
|
||||
this.rawSearchResults = this.rawSearchResults || [];
|
||||
if (!result) {
|
||||
delete this.rawSearchResults[order];
|
||||
return;
|
||||
}
|
||||
|
||||
if (result.exactMatch) {
|
||||
this.rawSearchResults = [];
|
||||
}
|
||||
|
||||
this.rawSearchResults[order] = result;
|
||||
this.updateChildren();
|
||||
}
|
||||
|
||||
@@ -57,6 +57,11 @@ registerThemingParticipant((theme: ITheme, collector: ICssStyleCollector) => {
|
||||
collector.addRule(`.settings-editor > .settings-body > .settings-tree-container .setting-item-bool .setting-value-checkbox { background-color: ${checkboxBackgroundColor} !important; }`);
|
||||
}
|
||||
|
||||
const checkboxForegroundColor = theme.getColor(settingsCheckboxForeground);
|
||||
if (checkboxForegroundColor) {
|
||||
collector.addRule(`.settings-editor > .settings-body > .settings-tree-container .setting-item-bool .setting-value-checkbox { color: ${checkboxForegroundColor} !important; }`);
|
||||
}
|
||||
|
||||
const checkboxBorderColor = theme.getColor(settingsCheckboxBorder);
|
||||
if (checkboxBorderColor) {
|
||||
collector.addRule(`.settings-editor > .settings-body > .settings-tree-container .setting-item-bool .setting-value-checkbox { border-color: ${checkboxBorderColor} !important; }`);
|
||||
|
||||
@@ -211,7 +211,7 @@ export class TOCTree extends ObjectTree<SettingsTreeGroupElement> {
|
||||
|
||||
this.getHTMLElement().classList.add(treeClass);
|
||||
|
||||
this.disposables.push(attachStyler(themeService, {
|
||||
this.disposables.add(attachStyler(themeService, {
|
||||
listActiveSelectionBackground: editorBackground,
|
||||
listActiveSelectionForeground: settingsHeaderForeground,
|
||||
listFocusAndSelectionBackground: editorBackground,
|
||||
|
||||
Reference in New Issue
Block a user