mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-24 01:25:37 -05:00
Merge vscode source through release 1.79.2 (#23482)
* log when an editor action doesn't run because of enablement * notebooks create/dispose editors. this means controllers must be created eagerly (😢) and that notebooks need a custom way of plugging comparision keys for session. works unless creating another session for the same cell of a duplicated editor * Set offSide to sql lang configuration to true (#183461) * Fixes #181764 (#183550) * fix typo * Always scroll down and focus the input (#183557) * Fixes #180386 (#183561) * cli: ensure ordering of rpc server messages (#183558) * cli: ensure ordering of rpc server messages Sending lots of messages to a stream would block them around the async tokio mutex, which is "fair" so doesn't preserve ordering. Instead, use the write_loop approach I introduced to the server_multiplexer for the same reason some time ago. * fix clippy * update for May endgame * testing: allow invalidateTestResults to take an array (#183569) * Document `ShareProvider` API proposal (#183568) * Document `ShareProvider` API proposal * Remove mention of VS Code from JSDoc * Add support for rendering svg and md in welcome message (#183580) * Remove toggle setting more eagerly (#183584) * rm message abt macOS * Change text (#183589) * Change text * Accidentally changed the wrong file * cli: improve output for code tunnel status (#183571) * testing: allow invalidateTestResults to take an array * cli: improve output for code tunnel status Fixes #183570 * [json/css/html] update services (#183595) * Add experimental setting to enable this dialog * Fix exporting chat model to JSON before it is initialized (#183597) * minimum scrolling to reveal the next cell on shift+enter (#183600) do minimum scrolling to reveal the next cell on Execute cell and select next * Fixing Jupyter notebook issue 13263 (#183527) fix for the issue, still need to understand why there is strange focusing * Tweak proposed API JSDoc (#183590) * Tweak proposed API JSDoc * workbench -> workspace * fix ? operator * Use active editor and show progress when sharing (#183603) Use active editor and show progress * use scroll setting variable correctly * Schedule welcome widget to show once between typing. (#183606) * Schedule dialog to show once between typing * Don't re-render if already displayed once * Add F10 keybinding for debugger step, even on Web. (#183510) Fixes #181792. Previously, for Web the keyboard shortcut was Alt-F10, because it was believed that F10 could not be bound on browsers. This turned out to be incorrect, so we make the shortcut consistent (F10) with desktop VSCode which is also what many other debuggers use. We keep Alt-F10 on web as a secondary keybinding to keep the experience some web users may have gotten used to by now. * Also pass process.env * Restore missing chat clear commands (#183651) * chore: update electron@22.5.4 (#183716) * Show remote indicator in web when remoteAuthority is set (#183728) * feat: .vuerc as json file (#153017) Co-authored-by: Martin Aeschlimann <martinae@microsoft.com> * Delete --compatibility=1.63 code from the server (#183738) * Copy vscode.dev link to tunnel generates an invalid link when an untitled workspace is open (#183739) * Recent devcontainer display string corrupted on Get Started page (#183740) * Improve "next codeblock" navigation (#183744) * Improve "next codeblock" navigation Operate on the current focused response, or the last one, and scroll to the selected item * Normalize command title * Git - run git status if similarityThreshold changes (#183762) * fix aria-label issue in kb editor fixes A11y_GradeB_VSCode_Keyboard shortcut reads words together - Blind: Arrow key navigation to row Find the binding keys and "when" cell data are read together resulting in a word " CTRL + FeditorFocus instead of CTRL + F editorFocus" #182490 * Status - fix compact padding (#183768) * Remove angle brackets from VB brackets (#183782) Fixes #183359 * Update language config schema with more details about brackets. (#183779) * fix comment (#183812) * Support for `Notebook` CodeAction Kind (#183457) * nb kind support -- wip * allow notebook codeactions around single cell edit check * move notebook code action type out of editor --------- Co-authored-by: rebornix <penn.lv@gmail.com> * cli: fix connection default being applied (#183827) * cli: bump to openssl 1.1.1u (#183828) * Implement "delete" action for chat history (#183609) * Use desired file name when generating new md pasted file paths (#183861) Fixes #183851 * Default to filename for markdown new file if empty (#183864) Fixes #183848 * Fix small typo (#183865) Fixes #183819 * Noop when moving a symbol into the file it is already in (#183866) Fixes #183793 * Adjust codeAction validation to account for notebook kind (#183859) * Make JS/TS `go to configuration` commands work on non-`file:` file systems (#183688) Make `go to project` commands work on non-`file:` file systems Fixes #183685 * Can't do regex search after opening notebook (#183884) Fixes #183858 * Default to current dir for `move to file` select (#183875) Fixes #183870 `showOpenDialog` seems to ignore `defaultUri` if the file doesn't exist * Use `<...>` style markdown links when needed (#183876) Fixes #183849 * Remove check for context keys * Update xterm package * Enable updating a chat model without triggering incremental typing (#183894) * Enable chat "move" commands on empty sessions (#183895) * Enable chat "move" commands on empty sessions and also imported sessions * Fix command name * Fix some chat keybindings on windows (#183896) * "Revert File" on inactive editors are ignored (fix #177557) (#183903) * Empty reason while switching profile (fix #183775) (#183904) * fix https://github.com/microsoft/vscode-internalbacklog/issues/4278 (#183910) * fix https://github.com/microsoft/vscode/issues/183770 (#183914) * code --status displays a lot of errors before actual status output (fix #183787) (#183915) * joh/icy manatee (#183917) * Use idle value for widget of interactive editor controller https://github.com/microsoft/vscode/issues/183820 * also make preview editors idle values https://github.com/microsoft/vscode/issues/183820 * Fix #183777 (#183929) * Fix #182309 (#183925) * Tree checkbox item -> items (#183931) Fixes #183826 * Fixes #183909 (#183940) * Fix #183837 (#183943) fix #183837 * Git - fix #183941 (#183944) * Update xterm.css Fixes #181242 * chore: add @ulugbekna and @aiday-mar to my-endgame notebook (#183946) * Revert "When snippet mode is active, make `Tab` not accept suggestion but advance placeholder" This reverts commit 50a80cdb61511343996ff1d41d0b676c3d329f48. * revert not focusing completion list when quick suggest happens during snippet * change `snippetsPreventQuickSuggestions` default to false * Fix #181446 (#183956) * fix https://github.com/microsoft/vscode-internalbacklog/issues/4298 (#183957) * fix: remove extraneous incorrect context keys (#183959) These were actually getting added in getTestItemContextOverlay, and the test ID was using the extended ID which extensions do not know about. Fixes #183612 * Fixes https://github.com/microsoft/monaco-editor/issues/3920 (#183960) * fix https://github.com/microsoft/vscode-internalbacklog/issues/4324 (#183961) * fix #183030 * fix #180826 (#183962) * make message more generic for interactive editor help * . * fix #183968 * Keep codeblock toolbar visible when focused * Fix when clause on "Run in terminal" command * add important info to help menu * fix #183970 * Set `isRefactoring` for all TS refactoring edits (#183982) * consolidate * Disable move to file in TS versions < 5.2 (#183992) There are still a few key bugs with refactoring. We will ship this as a preview for TS 5.2+ instead of for 5.1 * Polish query accepting (#183995) We shouldn't send the same request to Copilot if the query hasn't changed. So if the query is the same, we short circut. Fixes https://github.com/microsoft/vscode-internalbacklog/issues/4286 Also, when we open in chat, we should use the last accepted query, not what's in the input box. Fixes https://github.com/microsoft/vscode-internalbacklog/issues/4280 * Allow widget to have focus (#184000) So that selecting non-code text works. Fixes https://github.com/microsoft/vscode-internalbacklog/issues/4294 * Fix microsoft/vscode-internalbacklog#4257. Mitigate zindex for zone widgets. (#184001) * Change welcome dialog contribution to Eventually * Misc fixes * Workspace folder picker entry descriptions are suboptimal for some filesystems (fix #183418) (#184018) * cli - ignore std error unless verbose (#183787) (#184031) * joh/inquisitive meerkat (#184034) * only stash sessions that are none empty https://github.com/microsoft/vscode-internalbacklog/issues/4281 * only unstash a session once - unless new exchanges are made, https://github.com/microsoft/vscode-internalbacklog/issues/4281 * account for all exchange types * Improve declared components (#184039) * make sure to read setting (#184040) d'oh, related to https://github.com/microsoft/vscode/issues/173387#issuecomment-1571696644 * [html] update service (#184049) [html] update service. FIxes #181176 * reset context keys on reset/hide (#184042) fixes https://github.com/microsoft/vscode-internalbacklog/issues/4330 * use `Lazy`, not `IdleValue` for the IE widget held by the eager controller (#184048) https://github.com/microsoft/vscode/issues/183820 * fix https://github.com/microsoft/vscode-internalbacklog/issues/4333 (#184067) * use undo-loop instead of undo-edit when discarding chat session (#184063) * use undo-loop instead of undo-edit when discarding chat session fixes https://github.com/microsoft/vscode-internalbacklog/issues/4118 * fix tests, wait for correct state * Add logging to node download (#184070) Add logging to node download. For #182951 * re-enable default zone widget revealing when showing (#184072) fixes https://github.com/microsoft/vscode-internalbacklog/issues/4332, also fixes https://github.com/microsoft/vscode-internalbacklog/issues/3784 * fix #178202 * Allow APIs in stable (#184062) * Fix microsoft/vscode-internalbacklog#4206. Override List view whitespace css for monaco editor (#184087) * Fix JSDoc grammatical error (#184090) * Pick up TS 5.1.3 (#184091) Fixes #182931 * Misc fixes * update distro (#184097) * chore: update electron@22.5.5 (#184116) * Extension host veto is registered multiple times on restart (fix #183778) (#184127) Extension host veto is registered multiple times on restart (#183778) * Do not auto start the local web worker extension host (#184137) * Allow embedders to intercept trustedTypes.createPolicy calls (#184136) Allow embedders to intercept trustedTypes.createPolicy calls (#184100) * fix: reading from console output for --status on windows and linux (#184138) fix: reading from console output for --status on windows and linux (#184118) * Misc fixes * code --status displays a lot of errors before actual status output (fix #183787) (#184200) fix 183787 * (cherry-pick to 1.79 from main) Handle galleryExtension failure in featuredExtensionService (#184205) Handle galleryExtension failure in featuredExtensionService (#184198) Handle galleryExtension failure * Fix #184183. Multiple output height updates are skipped. (#184188) * Post merge init fixes * Misc build issues * disable toggle inline diff of `alt` down https://github.com/microsoft/vscode-internalbacklog/issues/4342 * Take into account already activated extensions when computing running locations (#184303) Take into account already activated extensions when computing running locations (fixes #184180) * Avoid `extensionService.getExtension` and use `ActivationKind.Immediate` to allow that URI handling works while resolving (#184310) Avoid `extensionService.getExtension` and use `ActivationKind.Immediate` to allow that URI handling works while resolving (fixes #182217) * WIP * rm fish auto injection * More breaks * Fix Port Attributes constructor (#184412) * WIP * WIP * Allow extensions to get at the exports of other extensions during resolving (#184487) Allow extensions to get at the exports of other extensions during resolving (fixes #184472) * do not auto finish session when inline chat widgets have focus re https://github.com/microsoft/vscode-internalbacklog/issues/4354 * fix compile errors caused by new base method * WIP * WIP * WIP * WIP * Build errors * unc - fix path traversal bypass * Bump version * cherry-pick prod changes from main * Disable sandbox * Build break from merge * bump version * Merge pull request #184739 from max06/max06/issue184659 Restore ShellIntegration for fish (#184659) * Git - only add --find-renames if the value is not the default one (#185053) Git - only add --find-renames if the value is not the default one (#184992) * Cherry-pick: Revert changes to render featured extensions when available (#184747) Revert changes to render featured extensions when available. (#184573) * Lower timeouts for experimentation and gallery service * Revert changes to render extensions when available * Add audio cues * fix: disable app sandbox when --no-sandbox is present (#184913) * fix: disable app sandbox when --no-sandbox is present (#184897) * fix: loading minimist in packaged builds * Runtime errors * UNC allow list checks cannot be disabled in extension host (fix #184989) (#185085) * UNC allow list checks cannot be disabled in extension host (#184989) * Update src/vs/base/node/unc.js Co-authored-by: Robo <hop2deep@gmail.com> --------- Co-authored-by: Robo <hop2deep@gmail.com> * Add notebook extension * Fix mangling issues * Fix mangling issues * npm install * npm install * Issues blocking bundle * Fix build folder compile errors * Fix windows bundle build * Linting fixes * Fix sqllint issues * Update yarn.lock files * Fix unit tests * Fix a couple breaks from test fixes * Bump distro * redo the checkbox style * Update linux build container dockerfile * Bump build image tag * Bump native watch dog package * Bump node-pty * Bump distro * Fix documnetation error * Update distro * redo the button styles * Update datasource TS * Add missing yarn.lock files * Windows setup fix * Turn off extension unit tests while investigating * color box style * Remove appx * Turn off test log upload * update dropdownlist style * fix universal app build error (#23488) * Skip flaky bufferContext vscode test --------- Co-authored-by: Johannes <johannes.rieken@gmail.com> Co-authored-by: Henning Dieterichs <hdieterichs@microsoft.com> Co-authored-by: Julien Richard <jairbubbles@hotmail.com> Co-authored-by: Charles Gagnon <chgagnon@microsoft.com> Co-authored-by: Megan Rogge <merogge@microsoft.com> Co-authored-by: meganrogge <megan.rogge@microsoft.com> Co-authored-by: Rob Lourens <roblourens@gmail.com> Co-authored-by: Connor Peet <connor@peet.io> Co-authored-by: Joyce Er <joyce.er@microsoft.com> Co-authored-by: Bhavya U <bhavyau@microsoft.com> Co-authored-by: Raymond Zhao <7199958+rzhao271@users.noreply.github.com> Co-authored-by: Martin Aeschlimann <martinae@microsoft.com> Co-authored-by: Aaron Munger <aamunger@microsoft.com> Co-authored-by: Aiday Marlen Kyzy <amarlenkyzy@microsoft.com> Co-authored-by: rebornix <penn.lv@gmail.com> Co-authored-by: Ole <oler@google.com> Co-authored-by: Jean Pierre <jeanp413@hotmail.com> Co-authored-by: Robo <hop2deep@gmail.com> Co-authored-by: Yash Singh <saiansh2525@gmail.com> Co-authored-by: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com> Co-authored-by: Ulugbek Abdullaev <ulugbekna@gmail.com> Co-authored-by: Alex Ross <alros@microsoft.com> Co-authored-by: Michael Lively <milively@microsoft.com> Co-authored-by: Matt Bierner <matb@microsoft.com> Co-authored-by: Andrea Mah <31675041+andreamah@users.noreply.github.com> Co-authored-by: Benjamin Pasero <benjamin.pasero@microsoft.com> Co-authored-by: Sandeep Somavarapu <sasomava@microsoft.com> Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Co-authored-by: Tyler James Leonhardt <me@tylerleonhardt.com> Co-authored-by: Alexandru Dima <alexdima@microsoft.com> Co-authored-by: Joao Moreno <Joao.Moreno@microsoft.com> Co-authored-by: Alan Ren <alanren@microsoft.com>
This commit is contained in:
@@ -9,7 +9,7 @@ import * as vscode from 'vscode';
|
||||
import { ExtHostModelViewTreeViewsShape, MainThreadModelViewShape } from 'sql/workbench/api/common/sqlExtHost.protocol';
|
||||
import { ITreeComponentItem } from 'sql/workbench/common/views';
|
||||
import { CommandsConverter } from 'vs/workbench/api/common/extHostCommands';
|
||||
import { IMainContext } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { CheckboxUpdate, IMainContext } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import * as azdata from 'azdata';
|
||||
import * as vsTreeExt from 'vs/workbench/api/common/extHostTreeViews';
|
||||
import { Emitter } from 'vs/base/common/event';
|
||||
@@ -93,6 +93,12 @@ export class ExtHostModelViewTreeViews implements ExtHostModelViewTreeViewsShape
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
|
||||
$setFocus(treeViewId: string, treeItemHandle: string): void {
|
||||
}
|
||||
|
||||
$changeCheckboxState(treeViewId: string, checkboxUpdates: CheckboxUpdate[]): void {
|
||||
}
|
||||
|
||||
private createExtHostTreeViewer<T>(handle: number, id: string, dataProvider: azdata.TreeComponentDataProvider<T>, extension: IExtensionDescription, logService: ILogService): ExtHostTreeView<T> {
|
||||
const treeView = new ExtHostTreeView<T>(handle, id, dataProvider, this._proxy, undefined, extension, logService);
|
||||
this.treeViews.set(`${handle}-${id}`, treeView);
|
||||
|
||||
@@ -21,7 +21,7 @@ import {
|
||||
ISerializationManagerDetails,
|
||||
IErrorDialogOptions
|
||||
} from 'sql/workbench/api/common/sqlExtHostTypes';
|
||||
import { IUndoStopOptions } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { CheckboxUpdate, IUndoStopOptions } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
|
||||
import { EditorViewColumn } from 'vs/workbench/api/common/shared/editor';
|
||||
import { ITelemetryEventProperties } from 'sql/platform/telemetry/common/telemetry';
|
||||
@@ -811,6 +811,8 @@ export interface ExtHostModelViewTreeViewsShape {
|
||||
$setVisible(treeViewId: string, visible: boolean): void;
|
||||
$hasResolve(treeViewId: string): Promise<boolean>;
|
||||
$resolve(treeViewId: string, treeItemHandle: string): Promise<ITreeComponentItem | undefined>;
|
||||
$setFocus(treeViewId: string, treeItemHandle: string): void;
|
||||
$changeCheckboxState(treeViewId: string, checkboxUpdates: CheckboxUpdate[]): void;
|
||||
}
|
||||
|
||||
export interface ExtHostBackgroundTaskManagementShape {
|
||||
|
||||
@@ -120,7 +120,7 @@ export enum AlertType {
|
||||
}
|
||||
|
||||
export enum FrequencyTypes {
|
||||
Unknown,
|
||||
Unknown = 0,
|
||||
OneTime = 1 << 1,
|
||||
Daily = 1 << 2,
|
||||
Weekly = 1 << 3,
|
||||
|
||||
@@ -3,39 +3,43 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Action } from 'vs/base/common/actions';
|
||||
import { Action2 } from 'vs/platform/actions/common/actions';
|
||||
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IKeybindingRule } from 'vs/platform/keybinding/common/keybindingsRegistry';
|
||||
import { FocusedViewContext } from 'vs/workbench/common/contextkeys';
|
||||
import { IViewDescriptorService, IViewsService, ViewContainerLocation } from 'vs/workbench/common/views';
|
||||
import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService';
|
||||
|
||||
// --- Toggle View with Command
|
||||
export abstract class ToggleViewAction extends Action {
|
||||
|
||||
constructor(
|
||||
id: string,
|
||||
label: string,
|
||||
private readonly viewId: string,
|
||||
protected viewsService: IViewsService,
|
||||
protected viewDescriptorService: IViewDescriptorService,
|
||||
protected contextKeyService: IContextKeyService,
|
||||
private layoutService: IWorkbenchLayoutService,
|
||||
cssClass?: string
|
||||
) {
|
||||
super(id, label, cssClass);
|
||||
export abstract class ToggleViewAction extends Action2 {
|
||||
private viewId: string;
|
||||
constructor(id: string, labelOrg: string, label: string, keybinding?: Omit<IKeybindingRule, 'id'>) {
|
||||
super({
|
||||
id: id,
|
||||
title: { value: label, original: labelOrg },
|
||||
category: 'View',
|
||||
f1: true,
|
||||
keybinding: keybinding,
|
||||
});
|
||||
this.viewId = id;
|
||||
}
|
||||
|
||||
override async run(): Promise<void> {
|
||||
const focusedViewId = FocusedViewContext.getValue(this.contextKeyService);
|
||||
run(accessor: ServicesAccessor): void {
|
||||
const contextKeyService = accessor.get(IContextKeyService);
|
||||
const viewDescriptorService = accessor.get(IViewDescriptorService);
|
||||
const viewsService = accessor.get(IViewsService);
|
||||
const layoutService = accessor.get(IWorkbenchLayoutService);
|
||||
const focusedViewId = FocusedViewContext.getValue(contextKeyService);
|
||||
|
||||
if (focusedViewId === this.viewId) {
|
||||
if (this.viewDescriptorService.getViewLocationById(this.viewId) === ViewContainerLocation.Sidebar) {
|
||||
this.layoutService.setPartHidden(true, Parts.SIDEBAR_PART);
|
||||
if (viewDescriptorService.getViewLocationById(this.viewId) === ViewContainerLocation.Sidebar) {
|
||||
layoutService.setPartHidden(true, Parts.SIDEBAR_PART);
|
||||
} else {
|
||||
this.layoutService.setPartHidden(true, Parts.PANEL_PART);
|
||||
layoutService.setPartHidden(true, Parts.PANEL_PART);
|
||||
}
|
||||
} else {
|
||||
this.viewsService.openView(this.viewId, true);
|
||||
viewsService.openView(this.viewId, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,8 +17,7 @@ import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
|
||||
import { IInputBoxStyles, InputBox } from 'sql/base/browser/ui/inputBox/inputBox';
|
||||
import 'vs/css!./media/designer';
|
||||
import { ITableStyles } from 'sql/base/browser/ui/table/interfaces';
|
||||
import { IThemable } from 'vs/base/common/styler';
|
||||
import { Checkbox, ICheckboxStyles } from 'sql/base/browser/ui/checkbox/checkbox';
|
||||
import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox';
|
||||
import { Table } from 'sql/base/browser/ui/table/table';
|
||||
import { ISelectBoxStyles, SelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
|
||||
import { TableDataView } from 'sql/base/browser/ui/table/tableDataView';
|
||||
@@ -27,7 +26,6 @@ import { TableCellEditorFactory } from 'sql/base/browser/ui/table/tableCellEdito
|
||||
import { CheckBoxColumn } from 'sql/base/browser/ui/table/plugins/checkboxColumn.plugin';
|
||||
import { DesignerTabPanelView } from 'sql/workbench/browser/designer/designerTabPanelView';
|
||||
import { DesignerPropertiesPane } from 'sql/workbench/browser/designer/designerPropertiesPane';
|
||||
import { Button, IButtonStyles } from 'sql/base/browser/ui/button/button';
|
||||
import { ButtonColumn } from 'sql/base/browser/ui/table/plugins/buttonColumn.plugin';
|
||||
import { Codicon } from 'vs/base/common/codicons';
|
||||
import { Color } from 'vs/base/common/color';
|
||||
@@ -56,14 +54,15 @@ import { onUnexpectedError } from 'vs/base/common/errors';
|
||||
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
|
||||
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
|
||||
import { IComponentContextService } from 'sql/workbench/services/componentContext/browser/componentContextService';
|
||||
import { defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
import { ThemeIcon } from 'vs/base/common/themables';
|
||||
import { defaultCheckboxStyles } from 'sql/platform/theme/browser/defaultStyles';
|
||||
|
||||
export interface IDesignerStyle {
|
||||
tabbedPanelStyles?: ITabbedPanelStyles;
|
||||
inputBoxStyles?: IInputBoxStyles;
|
||||
tableStyles?: ITableStyles;
|
||||
selectBoxStyles?: ISelectBoxStyles;
|
||||
checkboxStyles?: ICheckboxStyles;
|
||||
buttonStyles?: IButtonStyles;
|
||||
dropdownStyles?: IListStyles & IInputBoxStyles & IDropdownStyles;
|
||||
paneSeparator?: Color;
|
||||
groupHeaderBackground?: Color;
|
||||
@@ -82,7 +81,7 @@ interface DesignerTableCellContext {
|
||||
const ScriptTabId = 'scripts';
|
||||
const IssuesTabId = 'issues';
|
||||
|
||||
export class Designer extends Disposable implements IThemable {
|
||||
export class Designer extends Disposable {
|
||||
private _loadingSpinner: LoadingSpinner;
|
||||
private _horizontalSplitViewContainer: HTMLElement;
|
||||
private _verticalSplitViewContainer: HTMLElement;
|
||||
@@ -217,18 +216,15 @@ export class Designer extends Disposable implements IThemable {
|
||||
}, this._instantiationService);
|
||||
}
|
||||
|
||||
private styleComponent(component: TabbedPanel | InputBox | Checkbox | Table<Slick.SlickData> | SelectBox | Button | Dropdown): void {
|
||||
private styleComponent(component: TabbedPanel | InputBox | Checkbox | Table<Slick.SlickData> | SelectBox | Dropdown): void {
|
||||
if (component instanceof InputBox) {
|
||||
component.style(this._styles.inputBoxStyles);
|
||||
} else if (component instanceof Checkbox) {
|
||||
component.style(this._styles.checkboxStyles);
|
||||
} else if (component instanceof TabbedPanel) {
|
||||
component.style(this._styles.tabbedPanelStyles);
|
||||
} else if (component instanceof Table) {
|
||||
this.removeTableSelectionStyles();
|
||||
component.style(this._styles.tableStyles);
|
||||
} else if (component instanceof Button) {
|
||||
component.style(this._styles.buttonStyles);
|
||||
} else if (component instanceof Dropdown) {
|
||||
component.style(this._styles.dropdownStyles);
|
||||
} else {
|
||||
@@ -256,8 +252,10 @@ export class Designer extends Disposable implements IThemable {
|
||||
public style(styles: IDesignerStyle): void {
|
||||
this._styles = styles;
|
||||
this._componentMap.forEach((value, key, map) => {
|
||||
if (value.component.style) {
|
||||
this.styleComponent(value.component);
|
||||
if (!(value.component instanceof Checkbox)) {
|
||||
if (value.component.style) {
|
||||
this.styleComponent(value.component);
|
||||
}
|
||||
}
|
||||
});
|
||||
this._propertiesPane.componentMap.forEach((value) => {
|
||||
@@ -765,7 +763,8 @@ export class Designer extends Disposable implements IThemable {
|
||||
const input = new InputBox(inputContainer, this._contextViewProvider, {
|
||||
ariaLabel: inputProperties.title,
|
||||
type: inputProperties.inputType,
|
||||
ariaDescription: componentDefinition.description
|
||||
ariaDescription: componentDefinition.description,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
});
|
||||
input.onLoseFocus((args) => {
|
||||
if (args.hasChanged) {
|
||||
@@ -829,7 +828,7 @@ export class Designer extends Disposable implements IThemable {
|
||||
container.appendChild(DOM.$('')).appendChild(DOM.$('span.component-label')).innerText = componentDefinition.componentProperties?.title ?? '';
|
||||
const checkboxContainer = container.appendChild(DOM.$(''));
|
||||
const checkboxProperties = componentDefinition.componentProperties as CheckBoxProperties;
|
||||
const checkbox = new Checkbox(checkboxContainer, { label: '', ariaLabel: checkboxProperties.title, ariaDescription: componentDefinition.description });
|
||||
const checkbox = new Checkbox(checkboxContainer, { ...defaultCheckboxStyles, label: '', ariaLabel: checkboxProperties.title, ariaDescription: componentDefinition.description });
|
||||
checkbox.onChange((newValue) => {
|
||||
this.handleEdit({ type: DesignerEditType.Update, path: propertyPath, value: newValue, source: view });
|
||||
});
|
||||
@@ -876,7 +875,7 @@ export class Designer extends Disposable implements IThemable {
|
||||
const moveRowsPlugin = new RowMoveManager({
|
||||
cancelEditOnDrag: true,
|
||||
id: 'moveRow',
|
||||
iconCssClass: Codicon.grabber.classNames,
|
||||
iconCssClass: ThemeIcon.asClassName(Codicon.grabber),
|
||||
name: localize('designer.moveRowText', 'Move'),
|
||||
width: 50,
|
||||
resizable: true,
|
||||
@@ -946,7 +945,7 @@ export class Designer extends Disposable implements IThemable {
|
||||
const removeText = localize('designer.removeRowText', "Remove");
|
||||
const deleteRowColumn = new ButtonColumn({
|
||||
id: 'deleteRow',
|
||||
iconCssClass: Codicon.trash.classNames,
|
||||
iconCssClass: ThemeIcon.asClassName(Codicon.trash),
|
||||
name: removeText,
|
||||
title: removeText,
|
||||
width: 60,
|
||||
@@ -978,7 +977,7 @@ export class Designer extends Disposable implements IThemable {
|
||||
const moreActionsText = localize('designer.actions', "More Actions");
|
||||
const actionsColumn = new ButtonColumn({
|
||||
id: 'actions',
|
||||
iconCssClass: Codicon.ellipsis.classNames,
|
||||
iconCssClass: ThemeIcon.asClassName(Codicon.ellipsis),
|
||||
name: moreActionsText,
|
||||
title: moreActionsText,
|
||||
width: 100,
|
||||
|
||||
@@ -12,11 +12,12 @@ import { IListAccessibilityProvider, List } from 'vs/base/browser/ui/list/listWi
|
||||
import { IListRenderer, IListVirtualDelegate } from 'vs/base/browser/ui/list/list';
|
||||
import { localize } from 'vs/nls';
|
||||
import { IColorTheme, ICssStyleCollector, IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
|
||||
import { attachListStyler } from 'vs/platform/theme/common/styler';
|
||||
import { attachListStyler } from 'sql/platform/theme/common/vsstyler';
|
||||
import { problemsErrorIconForeground, problemsInfoIconForeground, problemsWarningIconForeground } from 'vs/platform/theme/common/colorRegistry';
|
||||
import { Codicon } from 'vs/base/common/codicons';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { Link } from 'vs/platform/opener/browser/link';
|
||||
import { ThemeIcon } from 'vs/base/common/themables';
|
||||
|
||||
export class DesignerIssuesTabPanelView extends Disposable implements IPanelView {
|
||||
private _container: HTMLElement;
|
||||
@@ -116,13 +117,13 @@ class TableFilterListRenderer implements IListRenderer<DesignerIssue, DesignerIs
|
||||
let iconClass;
|
||||
switch (element.severity) {
|
||||
case 'warning':
|
||||
iconClass = Codicon.warning.classNames;
|
||||
iconClass = ThemeIcon.asClassName(Codicon.warning);
|
||||
break;
|
||||
case 'information':
|
||||
iconClass = Codicon.info.classNames;
|
||||
iconClass = ThemeIcon.asClassName(Codicon.info);
|
||||
break;
|
||||
default:
|
||||
iconClass = Codicon.error.classNames;
|
||||
iconClass = ThemeIcon.asClassName(Codicon.error);
|
||||
break;
|
||||
}
|
||||
templateData.issueIcon.className = `issue-icon ${iconClass}`;
|
||||
|
||||
@@ -71,7 +71,7 @@ export class DesignerScriptEditor extends AbstractTextCodeEditor<editorCommon.IC
|
||||
});
|
||||
}
|
||||
|
||||
public override createEditorControl(parent: HTMLElement, configuration: IEditorOptions): editorCommon.IEditor {
|
||||
protected override createEditorControl(parent: HTMLElement, configuration: IEditorOptions): editorCommon.IEditor {
|
||||
this.editorControl = this.instantiationService.createInstance(DesignerCodeEditor, parent, configuration, {});
|
||||
|
||||
return this.editorControl;
|
||||
|
||||
@@ -14,10 +14,10 @@ import Severity from 'vs/base/common/severity';
|
||||
import { EditDataResultsInput } from 'sql/workbench/browser/editData/editDataResultsInput';
|
||||
import { IEditorViewState } from 'vs/editor/common/editorCommon';
|
||||
import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput';
|
||||
import { IResolvedTextEditorModel } from 'vs/editor/common/services/resolverService';
|
||||
import { IUntitledTextEditorModel, UntitledTextEditorModel } from 'vs/workbench/services/untitled/common/untitledTextEditorModel';
|
||||
import { UntitledTextEditorModel } from 'vs/workbench/services/untitled/common/untitledTextEditorModel';
|
||||
import { EncodingMode } from 'vs/workbench/services/textfile/common/textfiles';
|
||||
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
|
||||
import { IEditorModel, IEditorOptions } from 'vs/platform/editor/common/editor';
|
||||
|
||||
/**
|
||||
* Input for the EditDataEditor.
|
||||
@@ -222,7 +222,10 @@ export class EditDataInput extends EditorInput implements IConnectableInput {
|
||||
return this._connectionManagementService.getTabColorForUri(this.uri);
|
||||
}
|
||||
|
||||
public override resolve(refresh?: boolean): Promise<IUntitledTextEditorModel & IResolvedTextEditorModel> { return this._sql.resolve(); }
|
||||
public override async resolve(options?: IEditorOptions): Promise<IEditorModel | null> {
|
||||
return this._sql.resolve();
|
||||
}
|
||||
|
||||
public getEncoding(): string | undefined { return this._sql.getEncoding(); }
|
||||
public override getName(): string { return this._sql.getName(); }
|
||||
public get hasAssociatedFilePath(): boolean { return this._sql.model.hasAssociatedFilePath; }
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
|
||||
import { Emitter } from 'vs/base/common/event';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { IEditorModel, IEditorOptions } from 'vs/platform/editor/common/editor';
|
||||
|
||||
export interface IGridPanel {
|
||||
readonly onRefreshComplete: Promise<void>;
|
||||
@@ -57,7 +58,7 @@ export class EditDataResultsInput extends EditorInput {
|
||||
return false;
|
||||
}
|
||||
|
||||
override resolve(refresh?: boolean): Promise<any> {
|
||||
override async resolve(options?: IEditorOptions): Promise<IEditorModel | null> {
|
||||
return Promise.resolve(null);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import * as types from 'vs/base/common/types';
|
||||
import * as azdata from 'azdata';
|
||||
import { wrapStringWithNewLine } from 'sql/workbench/common/sqlWorkbenchUtils';
|
||||
import { RequiredIndicatorClassName } from 'sql/base/browser/ui/label/label';
|
||||
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
export function appendRow(container: HTMLElement, label: string, labelClass: string, cellContainerClass: string, rowContainerClass?: string | Array<string>, showRequiredIndicator: boolean = false, title?: string, titleMaxWidth?: number): HTMLElement {
|
||||
let rowContainer = append(container, $('tr'));
|
||||
@@ -41,7 +42,7 @@ export function appendRowLink(container: HTMLElement, label: string, labelClass:
|
||||
let rowContainer = append(container, $('tr'));
|
||||
append(append(rowContainer, $(`td.${labelClass}`)), $('div')).innerText = label;
|
||||
let buttonContainer = append(append(rowContainer, $(`td.${cellContainerClass}`)), $('div'));
|
||||
let rowButton = new Button(buttonContainer);
|
||||
let rowButton = new Button(buttonContainer, defaultButtonStyles);
|
||||
|
||||
return rowButton.element;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ import { KeyCode } from 'vs/base/common/keyCodes';
|
||||
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
|
||||
import { Schemas } from 'vs/base/common/network';
|
||||
import { mixin } from 'vs/base/common/objects';
|
||||
import { IThemable } from 'vs/base/common/styler';
|
||||
import { isUndefinedOrNull } from 'vs/base/common/types';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { generateUuid } from 'vs/base/common/uuid';
|
||||
@@ -26,10 +25,12 @@ import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService
|
||||
import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { ILayoutService } from 'vs/platform/layout/browser/layoutService';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { attachButtonStyler } from 'vs/platform/theme/common/styler';
|
||||
import { IThemable } from 'sql/platform/theme/common/vsstyler';
|
||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
import { Emitter } from 'vs/base/common/event';
|
||||
import { ITextResourcePropertiesService } from 'vs/editor/common/services/textResourceConfiguration';
|
||||
import { defaultButtonStyles, getButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
import { SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme';
|
||||
|
||||
export enum MessageLevel {
|
||||
Error = 0,
|
||||
@@ -269,10 +270,13 @@ export abstract class Modal extends Disposable implements IThemable {
|
||||
this._modalHeaderSection = DOM.append(this._modalContent, DOM.$('.modal-header'));
|
||||
if (this._modalOptions.hasBackButton) {
|
||||
const container = DOM.append(this._modalHeaderSection, DOM.$('.modal-go-back'));
|
||||
this._backButton = new Button(container, { secondary: true });
|
||||
this._backButton.icon = {
|
||||
id: 'backButtonIcon'
|
||||
};
|
||||
this._backButton = new Button(container,
|
||||
getButtonStyles({
|
||||
buttonBackground: SIDE_BAR_BACKGROUND,
|
||||
buttonHoverBackground: SIDE_BAR_BACKGROUND
|
||||
})
|
||||
);
|
||||
this._backButton.icon = 'backButtonIcon';
|
||||
this._backButton.title = localize('modal.back', "Back");
|
||||
}
|
||||
|
||||
@@ -291,31 +295,21 @@ export abstract class Modal extends Disposable implements IThemable {
|
||||
this._messageIcon = DOM.append(headerContainer, DOM.$('.dialog-message-icon'));
|
||||
this._messageSeverity = DOM.append(headerContainer, DOM.$('.dialog-message-severity'));
|
||||
this._detailsButtonContainer = DOM.append(headerContainer, DOM.$('.dialog-message-button'));
|
||||
this._toggleMessageDetailButton = new Button(this._detailsButtonContainer);
|
||||
this._toggleMessageDetailButton.icon = {
|
||||
id: 'message-details-icon'
|
||||
};
|
||||
this._toggleMessageDetailButton = new Button(this._detailsButtonContainer, defaultButtonStyles);
|
||||
this._toggleMessageDetailButton.icon = 'message-details-icon';
|
||||
this._toggleMessageDetailButton.label = SHOW_DETAILS_TEXT;
|
||||
this._register(this._toggleMessageDetailButton.onDidClick(() => this.toggleMessageDetail()));
|
||||
const copyMessageButtonContainer = DOM.append(headerContainer, DOM.$('.dialog-message-button'));
|
||||
this._copyMessageButton = new Button(copyMessageButtonContainer);
|
||||
this._copyMessageButton.icon = {
|
||||
id: 'copy-message-icon'
|
||||
};
|
||||
this._copyMessageButton = new Button(copyMessageButtonContainer, defaultButtonStyles);
|
||||
this._copyMessageButton.icon = 'copy-message-icon';
|
||||
this._copyMessageButton.label = COPY_TEXT;
|
||||
this._register(this._copyMessageButton.onDidClick(() => this._clipboardService.writeText(this.getTextForClipboard())));
|
||||
const closeMessageButtonContainer = DOM.append(headerContainer, DOM.$('.dialog-message-button'));
|
||||
this._closeMessageButton = new Button(closeMessageButtonContainer);
|
||||
this._closeMessageButton.icon = {
|
||||
id: 'close-message-icon'
|
||||
};
|
||||
this._closeMessageButton = new Button(closeMessageButtonContainer, defaultButtonStyles);
|
||||
this._closeMessageButton.icon = 'close-message-icon';
|
||||
this._closeMessageButton.label = CLOSE_TEXT;
|
||||
this._register(this._closeMessageButton.onDidClick(() => this.setError(undefined)));
|
||||
|
||||
this._register(attachButtonStyler(this._toggleMessageDetailButton, this._themeService));
|
||||
this._register(attachButtonStyler(this._copyMessageButton, this._themeService));
|
||||
this._register(attachButtonStyler(this._closeMessageButton, this._themeService));
|
||||
|
||||
this._messageBody = DOM.append(this._messageElement, DOM.$('.dialog-message-body'));
|
||||
this._messageSummary = DOM.append(this._messageBody, DOM.$('.dialog-message-summary'));
|
||||
this._register(DOM.addDisposableListener(this._messageSummary, DOM.EventType.CLICK, () => this.toggleMessageDetail()));
|
||||
@@ -538,7 +532,7 @@ export abstract class Modal extends Disposable implements IThemable {
|
||||
*/
|
||||
protected addFooterButton(label: string, onSelect: () => void, position: 'left' | 'right' = 'right', isSecondary: boolean = false, index?: number): Button {
|
||||
let footerButton = DOM.$('.footer-button');
|
||||
let button = this._register(new Button(footerButton, { secondary: isSecondary }));
|
||||
let button = this._register(new Button(footerButton, { secondary: isSecondary, ...defaultButtonStyles }));
|
||||
button.label = label;
|
||||
button.onDidClick(() => onSelect()); // @todo this should be registered to dispose but that brakes some dialogs
|
||||
const container = position === 'left' ? this._leftFooter! : this._rightFooter!;
|
||||
@@ -549,7 +543,6 @@ export abstract class Modal extends Disposable implements IThemable {
|
||||
} else {
|
||||
DOM.append(container, footerButton);
|
||||
}
|
||||
attachButtonStyler(button, this._themeService);
|
||||
this._footerButtons.push(button);
|
||||
return button;
|
||||
}
|
||||
|
||||
@@ -12,12 +12,12 @@ import * as OptionsDialogHelper from './optionsDialogHelper';
|
||||
import * as azdata from 'azdata';
|
||||
|
||||
import { Event, Emitter } from 'vs/base/common/event';
|
||||
import { SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme';
|
||||
//import { SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme';
|
||||
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||
import { localize } from 'vs/nls';
|
||||
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { contrastBorder } from 'vs/platform/theme/common/colorRegistry';
|
||||
import * as styler from 'vs/platform/theme/common/styler';
|
||||
//import * as styler from 'sql/platform/theme/common/vsstyler';
|
||||
import { InputBox } from 'vs/base/browser/ui/inputbox/inputBox';
|
||||
import { Widget } from 'vs/base/browser/ui/widget';
|
||||
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
|
||||
@@ -75,13 +75,16 @@ export class OptionsDialog extends Modal {
|
||||
attachModalDialogStyler(this, this._themeService);
|
||||
if (this.backButton) {
|
||||
this.backButton.onDidClick(() => this.cancel());
|
||||
styler.attachButtonStyler(this.backButton, this._themeService, { buttonBackground: SIDE_BAR_BACKGROUND, buttonHoverBackground: SIDE_BAR_BACKGROUND });
|
||||
//styler.attachButtonStyler(this.backButton, this._themeService, { buttonBackground: SIDE_BAR_BACKGROUND, buttonHoverBackground: SIDE_BAR_BACKGROUND });
|
||||
}
|
||||
let okButton = this.addFooterButton(localize('optionsDialog.ok', "OK"), () => this.ok());
|
||||
let closeButton = this.addFooterButton(this.options.cancelLabel || localize('optionsDialog.cancel', "Cancel"), () => this.cancel(), 'right', true);
|
||||
// {{SQL CARBON TODO}} - theming
|
||||
this.addFooterButton(localize('optionsDialog.ok', "OK"), () => this.ok());
|
||||
this.addFooterButton(this.options.cancelLabel || localize('optionsDialog.cancel', "Cancel"), () => this.cancel(), 'right', true);
|
||||
// let okButton = this.addFooterButton(localize('optionsDialog.ok', "OK"), () => this.ok());
|
||||
// let closeButton = this.addFooterButton(this.options.cancelLabel || localize('optionsDialog.cancel', "Cancel"), () => this.cancel(), 'right', true);
|
||||
// Theme styler
|
||||
styler.attachButtonStyler(okButton, this._themeService);
|
||||
styler.attachButtonStyler(closeButton, this._themeService);
|
||||
//styler.attachButtonStyler(okButton, this._themeService);
|
||||
//styler.attachButtonStyler(closeButton, this._themeService);
|
||||
this._register(this._themeService.onDidColorThemeChange(e => this.updateTheme(e)));
|
||||
this.updateTheme(this._themeService.getColorTheme());
|
||||
}
|
||||
@@ -135,17 +138,18 @@ export class OptionsDialog extends Modal {
|
||||
private registerStyling(): void {
|
||||
// Theme styler
|
||||
for (let optionName in this._optionElements) {
|
||||
let widget: Widget = this._optionElements[optionName].optionWidget;
|
||||
// {{SQL CARBON TODO}} - styling
|
||||
//let widget: Widget = this._optionElements[optionName].optionWidget;
|
||||
let option = this._optionElements[optionName].option;
|
||||
switch (option.valueType) {
|
||||
case ServiceOptionType.category:
|
||||
case ServiceOptionType.boolean:
|
||||
this.disposableStore.add(styler.attachSelectBoxStyler(<SelectBox>widget, this._themeService));
|
||||
//this.disposableStore.add(styler.attachSelectBoxStyler(<SelectBox>widget, this._themeService));
|
||||
break;
|
||||
case ServiceOptionType.string:
|
||||
case ServiceOptionType.password:
|
||||
case ServiceOptionType.number:
|
||||
this.disposableStore.add(styler.attachInputBoxStyler(<InputBox>widget, this._themeService));
|
||||
//this.disposableStore.add(styler.attachInputBoxStyler(<InputBox>widget, this._themeService));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import * as types from 'vs/base/common/types';
|
||||
import * as azdata from 'azdata';
|
||||
import { localize } from 'vs/nls';
|
||||
import { ServiceOptionType } from 'sql/platform/connection/common/interfaces';
|
||||
import { defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
export interface IOptionElement {
|
||||
optionWidget: any;
|
||||
@@ -42,7 +43,8 @@ export function createOptionElement(option: azdata.ServiceOption, rowContainer:
|
||||
}
|
||||
},
|
||||
ariaLabel: option.displayName,
|
||||
placeholder: option.placeholder
|
||||
placeholder: option.placeholder,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
}, option.name);
|
||||
optionWidget.value = optionValue;
|
||||
inputElement = findElement(rowContainer, 'input');
|
||||
@@ -56,7 +58,8 @@ export function createOptionElement(option: azdata.ServiceOption, rowContainer:
|
||||
validation: (value: string) => (!value && option.isRequired) ? ({ type: MessageType.ERROR, content: option.displayName + missingErrorMessage }) : null
|
||||
},
|
||||
ariaLabel: option.displayName,
|
||||
placeholder: option.placeholder
|
||||
placeholder: option.placeholder,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
}, option.name);
|
||||
optionWidget.value = optionValue;
|
||||
if (option.valueType === ServiceOptionType.password) {
|
||||
|
||||
@@ -10,13 +10,11 @@ import { convertSize } from 'sql/base/browser/dom';
|
||||
import { Button } from 'sql/base/browser/ui/button/button';
|
||||
import { InfoButton } from 'sql/base/browser/ui/infoButton/infoButton';
|
||||
import { ComponentEventType, IComponent, IComponentDescriptor, IModelStore } from 'sql/platform/dashboard/browser/interfaces';
|
||||
import { attachInfoButtonStyler } from 'sql/platform/theme/common/styler';
|
||||
import { ComponentWithIconBase } from 'sql/workbench/browser/modelComponents/componentWithIconBase';
|
||||
import { createIconCssClass } from 'sql/workbench/browser/modelComponents/iconUtils';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { attachButtonStyler } from 'vs/platform/theme/common/styler';
|
||||
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
||||
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
import { defaultInfoButtonStyles } from 'sql/platform/theme/browser/defaultStyles';
|
||||
|
||||
enum ButtonType {
|
||||
File = 'File',
|
||||
@@ -46,7 +44,6 @@ export default class ButtonComponent extends ComponentWithIconBase<azdata.Button
|
||||
private _button: Button | InfoButton;
|
||||
public fileType: string = '.sql';
|
||||
private _currentButtonType?: ButtonType = undefined;
|
||||
private _buttonStyler: IDisposable | undefined = undefined;
|
||||
|
||||
@ViewChild('input', { read: ElementRef }) private _inputContainer: ElementRef;
|
||||
@ViewChild('fileInput', { read: ElementRef }) private _fileInputContainer: ElementRef;
|
||||
@@ -54,7 +51,6 @@ export default class ButtonComponent extends ComponentWithIconBase<azdata.Button
|
||||
|
||||
constructor(
|
||||
@Inject(forwardRef(() => ChangeDetectorRef)) changeRef: ChangeDetectorRef,
|
||||
@Inject(IWorkbenchThemeService) private themeService: IWorkbenchThemeService,
|
||||
@Inject(forwardRef(() => ElementRef)) el: ElementRef,
|
||||
@Inject(ILogService) logService: ILogService
|
||||
) {
|
||||
@@ -77,9 +73,9 @@ export default class ButtonComponent extends ComponentWithIconBase<azdata.Button
|
||||
this._currentButtonType = this.buttonType;
|
||||
const elementToRemove = this._button?.element;
|
||||
if (this._inputContainer) {
|
||||
this._button = new Button(this._inputContainer.nativeElement, { secondary: this.secondary });
|
||||
this._button = new Button(this._inputContainer.nativeElement, { secondary: this.secondary, ...defaultButtonStyles });
|
||||
} else if (this._infoButtonContainer) {
|
||||
this._button = new InfoButton(this._infoButtonContainer.nativeElement);
|
||||
this._button = new InfoButton(this._infoButtonContainer.nativeElement, defaultInfoButtonStyles);
|
||||
}
|
||||
|
||||
// remove the previously created element if any.
|
||||
@@ -89,7 +85,6 @@ export default class ButtonComponent extends ComponentWithIconBase<azdata.Button
|
||||
}
|
||||
|
||||
this._register(this._button);
|
||||
this.updateStyler();
|
||||
this._register(this._button.onDidClick(e => {
|
||||
if (this._fileInputContainer) {
|
||||
const self = this;
|
||||
@@ -176,27 +171,10 @@ export default class ButtonComponent extends ComponentWithIconBase<azdata.Button
|
||||
if (this.iconPath) {
|
||||
if (!this._iconClass) {
|
||||
super.updateIcon();
|
||||
this._button.icon = {
|
||||
id: this._iconClass + ' icon'
|
||||
};
|
||||
this.updateStyler();
|
||||
this._button.icon = this._iconClass + ' icon';
|
||||
} else {
|
||||
super.updateIcon();
|
||||
}
|
||||
} else {
|
||||
this.updateStyler();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the styler for this button based on whether it has an icon or not
|
||||
*/
|
||||
private updateStyler(): void {
|
||||
this._buttonStyler?.dispose();
|
||||
if (this.buttonType === ButtonType.Informational) {
|
||||
this._buttonStyler = this._register(attachInfoButtonStyler(this._button, this.themeService));
|
||||
} else {
|
||||
this._buttonStyler = this._register(attachButtonStyler(this._button, this.themeService));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,13 +12,12 @@ import * as azdata from 'azdata';
|
||||
|
||||
import { ComponentBase } from 'sql/workbench/browser/modelComponents/componentBase';
|
||||
import { Checkbox, ICheckboxOptions } from 'sql/base/browser/ui/checkbox/checkbox';
|
||||
import { attachCheckboxStyler } from 'sql/platform/theme/common/styler';
|
||||
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
||||
import { IComponent, IComponentDescriptor, IModelStore, ComponentEventType } from 'sql/platform/dashboard/browser/interfaces';
|
||||
import { isNumber } from 'vs/base/common/types';
|
||||
import { convertSize } from 'sql/base/browser/dom';
|
||||
import { onUnexpectedError } from 'vs/base/common/errors';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { defaultCheckboxStyles } from 'sql/platform/theme/browser/defaultStyles';
|
||||
|
||||
@Component({
|
||||
selector: 'modelview-checkbox',
|
||||
@@ -34,7 +33,6 @@ export default class CheckBoxComponent extends ComponentBase<azdata.CheckBoxProp
|
||||
@ViewChild('input', { read: ElementRef }) private _inputContainer: ElementRef;
|
||||
constructor(
|
||||
@Inject(forwardRef(() => ChangeDetectorRef)) changeRef: ChangeDetectorRef,
|
||||
@Inject(IWorkbenchThemeService) private themeService: IWorkbenchThemeService,
|
||||
@Inject(ILogService) logService: ILogService,
|
||||
@Inject(forwardRef(() => ElementRef)) el: ElementRef) {
|
||||
super(changeRef, el, logService);
|
||||
@@ -43,6 +41,7 @@ export default class CheckBoxComponent extends ComponentBase<azdata.CheckBoxProp
|
||||
ngAfterViewInit(): void {
|
||||
if (this._inputContainer) {
|
||||
let inputOptions: ICheckboxOptions = {
|
||||
...defaultCheckboxStyles,
|
||||
label: ''
|
||||
};
|
||||
|
||||
@@ -57,7 +56,6 @@ export default class CheckBoxComponent extends ComponentBase<azdata.CheckBoxProp
|
||||
args: e
|
||||
});
|
||||
}));
|
||||
this._register(attachCheckboxStyler(this._input, this.themeService));
|
||||
this._validations.push(() => !this.required || this.checked);
|
||||
}
|
||||
this.baseInit();
|
||||
|
||||
@@ -153,9 +153,10 @@ export default class DiffEditorComponent extends ComponentBase<azdata.DiffEditor
|
||||
private updateLanguageMode() {
|
||||
if (this._editorModel && this._editor) {
|
||||
this._languageMode = this.languageMode;
|
||||
let languageSelection = this._modeService.createById(this._languageMode);
|
||||
this._modelService.setMode(this._editorModel.originalModel.textEditorModel, languageSelection);
|
||||
this._modelService.setMode(this._editorModel.modifiedModel.textEditorModel, languageSelection);
|
||||
// {{SQL CARBON TODO}} - set mode?
|
||||
// let languageSelection = this._modeService.createById(this._languageMode);
|
||||
// this._modelService.setMode(this._editorModel.originalModel.textEditorModel, languageSelection);
|
||||
// this._modelService.setMode(this._editorModel.modifiedModel.textEditorModel, languageSelection);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ import * as azdata from 'azdata';
|
||||
import { ComponentBase } from 'sql/workbench/browser/modelComponents/componentBase';
|
||||
import { SelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
|
||||
import { attachEditableDropdownStyler } from 'sql/platform/theme/common/styler';
|
||||
import { attachSelectBoxStyler } from 'vs/platform/theme/common/styler';
|
||||
import { attachSelectBoxStyler } from 'sql/platform/theme/common/vsstyler';
|
||||
|
||||
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
||||
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||
|
||||
@@ -25,7 +25,7 @@ import { IComponent, IComponentDescriptor, IModelStore, ComponentEventType } fro
|
||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { convertSizeToNumber } from 'sql/base/browser/dom';
|
||||
import { IModelService } from 'vs/editor/common/services/model';
|
||||
import { ILanguageService } from 'vs/editor/common/languages/language';
|
||||
// import { ILanguageService } from 'vs/editor/common/languages/language';
|
||||
|
||||
@Component({
|
||||
template: '',
|
||||
@@ -48,7 +48,7 @@ export default class EditorComponent extends ComponentBase<azdata.EditorProperti
|
||||
@Inject(forwardRef(() => ElementRef)) el: ElementRef,
|
||||
@Inject(IInstantiationService) private _instantiationService: IInstantiationService,
|
||||
@Inject(IModelService) private _modelService: IModelService,
|
||||
@Inject(ILanguageService) private _languageService: ILanguageService,
|
||||
// @Inject(ILanguageService) private _languageService: ILanguageService,
|
||||
@Inject(ILogService) private _logService: ILogService,
|
||||
@Inject(IEditorService) private readonly editorService: IEditorService,
|
||||
@Inject(ILogService) logService: ILogService
|
||||
@@ -141,8 +141,9 @@ export default class EditorComponent extends ComponentBase<azdata.EditorProperti
|
||||
private updateLanguageMode() {
|
||||
if (this._editorModel && this._editor) {
|
||||
this._languageMode = this.languageMode;
|
||||
let languageSelection = this._languageService.createById(this._languageMode);
|
||||
this._modelService.setMode(this._editorModel, languageSelection);
|
||||
// {{SQL CARBON TODO}} - call set mode
|
||||
// let languageSelection = this._languageService.createById(this._languageMode);
|
||||
//this._modelService.setMode(this._editorModel, languageSelection);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ import { isNumber } from 'vs/base/common/types';
|
||||
import { convertSize, convertSizeToNumber } from 'sql/base/browser/dom';
|
||||
import { onUnexpectedError } from 'vs/base/common/errors';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
@Component({
|
||||
selector: 'modelview-inputBox',
|
||||
@@ -69,7 +70,8 @@ export default class InputBoxComponent extends ComponentBase<azdata.InputBoxProp
|
||||
}
|
||||
}
|
||||
},
|
||||
useDefaultValidation: true
|
||||
useDefaultValidation: true,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
};
|
||||
if (this._inputContainer) {
|
||||
inputOptions.requireForceValidations = true; // Non-text area input boxes handle our own validations when the text changes so don't run the base ones
|
||||
|
||||
@@ -16,7 +16,7 @@ import 'vs/css!./media/listView';
|
||||
import { IComponent, IComponentDescriptor, IModelStore, ComponentEventType } from 'sql/platform/dashboard/browser/interfaces';
|
||||
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
||||
import { IListRenderer, IListVirtualDelegate } from 'vs/base/browser/ui/list/list';
|
||||
import { attachListStyler } from 'vs/platform/theme/common/styler';
|
||||
import { attachListStyler } from 'sql/platform/theme/common/vsstyler';
|
||||
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { createIconCssClass } from 'sql/workbench/browser/modelComponents/iconUtils';
|
||||
|
||||
@@ -5,4 +5,4 @@
|
||||
|
||||
.flexContainer {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ export class ModelViewEditor extends EditorPane {
|
||||
/**
|
||||
* Called to create the editor in the parent element.
|
||||
*/
|
||||
public createEditor(parent: HTMLElement): void {
|
||||
protected createEditor(parent: HTMLElement): void {
|
||||
this._editorFrame = parent;
|
||||
this._content = document.createElement('div');
|
||||
parent.appendChild(this._content);
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import * as azdata from 'azdata';
|
||||
|
||||
import { IEditorModel } from 'vs/platform/editor/common/editor';
|
||||
import { IEditorModel, IEditorOptions } from 'vs/platform/editor/common/editor';
|
||||
import * as DOM from 'vs/base/browser/dom';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
|
||||
@@ -82,7 +82,7 @@ export class ModelViewInput extends EditorInput {
|
||||
return 'ModelViewEditorInput';
|
||||
}
|
||||
|
||||
public override resolve(refresh?: boolean): Promise<IEditorModel> {
|
||||
public override async resolve(options?: IEditorOptions): Promise<IEditorModel | null> {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ export class QueryTextEditor extends AbstractTextCodeEditor<editorCommon.ICodeEd
|
||||
configurationService, themeService, editorService, editorGroupService, fileService);
|
||||
}
|
||||
|
||||
public override createEditorControl(parent: HTMLElement, configuration: IEditorOptions): editorCommon.IEditor {
|
||||
protected override createEditorControl(parent: HTMLElement, configuration: IEditorOptions): editorCommon.IEditor {
|
||||
this.editorControl = this.instantiationService.createInstance(CodeEditorWidget, parent, configuration, {});
|
||||
|
||||
return this.editorControl;
|
||||
|
||||
@@ -109,7 +109,7 @@ export default class TabbedPanelComponent extends ContainerBase<TabConfig> imple
|
||||
return this._tabs;
|
||||
}
|
||||
|
||||
override onItemsUpdated(): void {
|
||||
protected override onItemsUpdated(): void {
|
||||
if (this.items.length === 0) {
|
||||
this._itemIndexToProcess = 0;
|
||||
this._tabs = [];
|
||||
@@ -121,7 +121,7 @@ export default class TabbedPanelComponent extends ContainerBase<TabConfig> imple
|
||||
}
|
||||
}
|
||||
|
||||
override onItemLayoutUpdated(item: ItemDescriptor<TabConfig>): void {
|
||||
protected override onItemLayoutUpdated(item: ItemDescriptor<TabConfig>): void {
|
||||
this._panel.updateTab(item.config.id, { title: item.config.title, iconClass: item.config.icon ? createIconCssClass(item.config.icon) : undefined });
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ import { IAccessibilityService } from 'vs/platform/accessibility/common/accessib
|
||||
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
|
||||
import { IComponentContextService } from 'sql/workbench/services/componentContext/browser/componentContextService';
|
||||
import { deepClone, equals } from 'vs/base/common/objects';
|
||||
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
export enum ColumnSizingMode {
|
||||
ForceFit = 0, // all columns will be sized to fit in viewable space, no horiz scroll bar
|
||||
@@ -606,7 +607,7 @@ export default class TableComponent extends ComponentBase<azdata.TableComponentP
|
||||
|
||||
|
||||
private registerFilterPlugin() {
|
||||
const filterPlugin = new HeaderFilter<Slick.SlickData>(this.contextViewService);
|
||||
const filterPlugin = new HeaderFilter<Slick.SlickData>({ buttonStyles: defaultButtonStyles }, this.contextViewService);
|
||||
this._register(attachTableFilterStyler(filterPlugin, this.themeService));
|
||||
this._filterPlugin = filterPlugin;
|
||||
this._filterPlugin.onFilterApplied.subscribe((e, args) => {
|
||||
|
||||
@@ -15,7 +15,7 @@ import { ComponentBase } from 'sql/workbench/browser/modelComponents/componentBa
|
||||
import { Tree } from 'sql/base/parts/tree/browser/treeImpl';
|
||||
import { TreeComponentRenderer } from 'sql/workbench/browser/modelComponents/treeComponentRenderer';
|
||||
import { TreeComponentDataSource } from 'sql/workbench/browser/modelComponents/treeDataSource';
|
||||
import { attachListStyler } from 'vs/platform/theme/common/styler';
|
||||
import { attachListStyler } from 'sql/platform/theme/common/vsstyler';
|
||||
import { DefaultFilter, DefaultAccessibilityProvider, DefaultController } from 'sql/base/parts/tree/browser/treeDefaults';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { ITreeComponentItem } from 'sql/workbench/common/views';
|
||||
|
||||
@@ -3,12 +3,9 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
// eslint-disable-next-line code-import-patterns
|
||||
import { ExtHostModelViewTreeViewsShape } from 'sql/workbench/api/common/sqlExtHost.protocol';
|
||||
// eslint-disable-next-line code-import-patterns
|
||||
import { IModelViewTreeViewDataProvider, ITreeComponentItem } from 'sql/workbench/common/views';
|
||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||
// eslint-disable-next-line code-import-patterns
|
||||
import * as vsTreeView from 'vs/workbench/api/browser/mainThreadTreeViews';
|
||||
import { ResolvableTreeItem } from 'vs/workbench/common/views';
|
||||
import { deepClone } from 'vs/base/common/objects';
|
||||
|
||||
@@ -29,7 +29,8 @@ export class AccountsActionViewItem extends ActivityActionViewItem {
|
||||
@IConfigurationService configurationService: IConfigurationService,
|
||||
@IKeybindingService keybindingService: IKeybindingService,
|
||||
) {
|
||||
super(action, { draggable: false, colors, icon: true, hoverOptions: hoverOptions }, themeService, hoverService, configurationService, keybindingService);
|
||||
super(action, { draggable: false, colors, icon: true, hoverOptions: hoverOptions },
|
||||
(/*badgesEnabledForCompositeId*/) => false, themeService, hoverService, configurationService, keybindingService);
|
||||
}
|
||||
|
||||
override render(container: HTMLElement): void {
|
||||
|
||||
@@ -7,7 +7,6 @@ import 'vs/css!./media/infoBox';
|
||||
import * as azdata from 'azdata';
|
||||
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
|
||||
import { alert, status } from 'vs/base/browser/ui/aria/aria';
|
||||
import { IThemable } from 'vs/base/common/styler';
|
||||
import { Color } from 'vs/base/common/color';
|
||||
import * as DOM from 'vs/base/browser/dom';
|
||||
import { Event, Emitter } from 'vs/base/common/event';
|
||||
@@ -16,6 +15,7 @@ import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||
import { KeyCode } from 'vs/base/common/keyCodes';
|
||||
import { IOpenerService } from 'vs/platform/opener/common/opener';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { ThemeIcon } from 'vs/base/common/themables';
|
||||
|
||||
export interface IInfoBoxStyles {
|
||||
informationBackground?: Color;
|
||||
@@ -35,7 +35,7 @@ export interface InfoBoxOptions {
|
||||
clickableButtonAriaLabel?: string;
|
||||
}
|
||||
|
||||
export class InfoBox extends Disposable implements IThemable {
|
||||
export class InfoBox extends Disposable {
|
||||
private _imageElement: HTMLDivElement;
|
||||
private _textElement: HTMLDivElement;
|
||||
private _infoBoxElement: HTMLDivElement;
|
||||
@@ -72,7 +72,7 @@ export class InfoBox extends Disposable implements IThemable {
|
||||
this._infoBoxElement.appendChild(this._imageElement);
|
||||
this._infoBoxElement.appendChild(this._textElement);
|
||||
this._clickableIndicator = DOM.$('a');
|
||||
this._clickableIndicator.classList.add('infobox-clickable-arrow', ...Codicon.arrowRight.classNamesArray);
|
||||
this._clickableIndicator.classList.add('infobox-clickable-arrow', ...ThemeIcon.asClassNameArray(Codicon.arrowRight));
|
||||
this._infoBoxElement.appendChild(this._clickableIndicator);
|
||||
|
||||
if (options) {
|
||||
|
||||
@@ -185,7 +185,7 @@ export abstract class QueryEditorInput extends EditorInput implements IConnectab
|
||||
}));
|
||||
|
||||
this._register(this.configurationService.onDidChangeConfiguration(e => {
|
||||
if (e.affectedKeys.indexOf('queryEditor') > -1) {
|
||||
if (e.affectedKeys.has('queryEditor')) {
|
||||
this._onDidChangeLabel.fire();
|
||||
}
|
||||
}));
|
||||
|
||||
@@ -13,6 +13,7 @@ import { GridPanelState } from 'sql/workbench/common/editor/query/gridTableState
|
||||
import { QueryModelViewState } from 'sql/workbench/common/editor/query/modelViewState';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { ExecutionPlanState } from 'sql/workbench/common/editor/query/executionPlanState';
|
||||
import { IEditorModel, IEditorOptions } from 'vs/platform/editor/common/editor';
|
||||
|
||||
export class ResultsViewState {
|
||||
public readonly gridPanelState: GridPanelState = new GridPanelState();
|
||||
@@ -68,7 +69,7 @@ export class QueryResultsInput extends EditorInput {
|
||||
return false;
|
||||
}
|
||||
|
||||
override resolve(refresh?: boolean): Promise<any> {
|
||||
override async resolve(options?: IEditorOptions): Promise<IEditorModel | null> {
|
||||
return Promise.resolve(null);
|
||||
}
|
||||
|
||||
|
||||
@@ -7,8 +7,7 @@ import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import * as cr from 'vs/platform/theme/common/colorRegistry';
|
||||
import * as sqlcr from 'sql/platform/theme/common/colorRegistry';
|
||||
import { IThemable } from 'vs/base/common/styler';
|
||||
import { attachStyler, IStyleOverrides } from 'vs/platform/theme/common/styler';
|
||||
import { IThemable, attachStyler, IStyleOverrides } from 'sql/platform/theme/common/vsstyler';
|
||||
import {
|
||||
SIDE_BAR_SECTION_HEADER_FOREGROUND, SIDE_BAR_BACKGROUND, SIDE_BAR_SECTION_HEADER_BACKGROUND, SIDE_BAR_DRAG_AND_DROP_BACKGROUND,
|
||||
PANEL_ACTIVE_TITLE_BORDER, PANEL_ACTIVE_TITLE_FOREGROUND, PANEL_INACTIVE_TITLE_FOREGROUND
|
||||
|
||||
@@ -51,6 +51,7 @@ import { DASHBOARD_BORDER } from 'sql/workbench/common/theme';
|
||||
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
|
||||
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
|
||||
import { IComponentContextService } from 'sql/workbench/services/componentContext/browser/componentContextService';
|
||||
import { defaultButtonStyles, defaultListStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
export const ASMTRESULTSVIEW_SELECTOR: string = 'asmt-results-view-component';
|
||||
export const ROW_HEIGHT: number = 25;
|
||||
@@ -325,7 +326,7 @@ export class AsmtResultsViewComponent extends TabChild implements IAssessmentCom
|
||||
columnDef.formatter = (row, cell, value, columnDef, dataContext) => this.detailSelectionFormatter(row, cell, value, columnDef, dataContext as ExtendedItem<Slick.SlickData>);
|
||||
columns.unshift(columnDef);
|
||||
|
||||
let filterPlugin = new HeaderFilter<Slick.SlickData>(this._contextViewService);
|
||||
let filterPlugin = new HeaderFilter<Slick.SlickData>({ buttonStyles: defaultButtonStyles }, this._contextViewService);
|
||||
this._register(attachTableFilterStyler(filterPlugin, this._themeService));
|
||||
this.filterPlugin = filterPlugin;
|
||||
this.filterPlugin.onFilterApplied.subscribe((e, args) => {
|
||||
@@ -596,8 +597,10 @@ export class AsmtResultsViewComponent extends TabChild implements IAssessmentCom
|
||||
|
||||
private _updateStyles(theme: IColorTheme): void {
|
||||
this.actionBarContainer.nativeElement.style.borderTopColor = theme.getColor(DASHBOARD_BORDER, true).toString();
|
||||
// {{SQL CARBON TODO}} - do defaultListStyles work here?
|
||||
let tableStyle: ITableStyles = {
|
||||
tableHeaderBackground: theme.getColor(themeColors.PANEL_BACKGROUND)
|
||||
tableHeaderBackground: theme.getColor(themeColors.PANEL_BACKGROUND),
|
||||
...defaultListStyles
|
||||
};
|
||||
this._table.style(tableStyle);
|
||||
const rowExclSelector = '.asmtview-grid > .monaco-table .slick-viewport > .grid-canvas > .ui-widget-content.slick-row';
|
||||
|
||||
@@ -251,7 +251,8 @@ suite('Assessment Actions', () => {
|
||||
resource: fileUri,
|
||||
size: 42,
|
||||
readonly: false,
|
||||
children: []
|
||||
children: [],
|
||||
locked: false
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox';
|
||||
import { InputBox } from 'sql/base/browser/ui/inputBox/inputBox';
|
||||
import { ListBox } from 'sql/base/browser/ui/listBox/listBox';
|
||||
import { SelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
|
||||
import { attachListBoxStyler, attachInputBoxStyler, attachSelectBoxStyler, attachCheckboxStyler } from 'sql/platform/theme/common/styler';
|
||||
import { attachListBoxStyler, attachInputBoxStyler, attachSelectBoxStyler } from 'sql/platform/theme/common/styler';
|
||||
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||
import * as BackupConstants from 'sql/workbench/contrib/backup/common/constants';
|
||||
import { IBackupService, TaskExecutionMode } from 'sql/platform/backup/common/backupService';
|
||||
@@ -34,10 +34,11 @@ import { AngularDisposable } from 'sql/base/browser/lifecycle';
|
||||
import { SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme';
|
||||
import { fileFiltersSet } from 'sql/workbench/services/restore/common/constants';
|
||||
import { IColorTheme } from 'vs/platform/theme/common/themeService';
|
||||
import { attachButtonStyler } from 'vs/platform/theme/common/styler';
|
||||
|
||||
import { DatabaseEngineEdition } from 'sql/workbench/api/common/sqlExtHostTypes';
|
||||
import { IBackupRestoreUrlBrowserDialogService } from 'sql/workbench/services/backupRestoreUrlBrowser/common/urlBrowserDialogService';
|
||||
import { defaultButtonStyles, defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
import { defaultCheckboxStyles } from 'sql/platform/theme/browser/defaultStyles';
|
||||
|
||||
export const BACKUP_SELECTOR: string = 'backup-component';
|
||||
|
||||
@@ -236,7 +237,8 @@ export class BackupComponent extends AngularDisposable {
|
||||
|
||||
this.recoveryBox = this._register(new InputBox(this.recoveryModelElement!.nativeElement, this.contextViewService, {
|
||||
placeholder: this.recoveryModel,
|
||||
ariaLabel: LocalizedStrings.RECOVERY_MODEL
|
||||
ariaLabel: LocalizedStrings.RECOVERY_MODEL,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
}));
|
||||
// Set backup type
|
||||
this.backupTypeSelectBox = this._register(new SelectBox([], '', this.contextViewService, undefined, { ariaLabel: this.localizedStrings.BACKUP_TYPE }));
|
||||
@@ -244,6 +246,7 @@ export class BackupComponent extends AngularDisposable {
|
||||
|
||||
// Set copy-only check box
|
||||
this.copyOnlyCheckBox = this._register(new Checkbox(this.copyOnlyElement!.nativeElement, {
|
||||
...defaultCheckboxStyles,
|
||||
label: LocalizedStrings.COPY_ONLY,
|
||||
checked: false,
|
||||
onChange: (viaKeyboard) => { },
|
||||
@@ -252,6 +255,7 @@ export class BackupComponent extends AngularDisposable {
|
||||
|
||||
// Set to url check box
|
||||
this.toUrlCheckBox = this._register(new Checkbox(this.toUrlElement!.nativeElement, {
|
||||
...defaultCheckboxStyles,
|
||||
label: LocalizedStrings.TO_URL,
|
||||
checked: false,
|
||||
onChange: () => this.onChangeToUrl(),
|
||||
@@ -260,6 +264,7 @@ export class BackupComponent extends AngularDisposable {
|
||||
|
||||
// Encryption checkbox
|
||||
this.encryptCheckBox = this._register(new Checkbox(this.encryptElement!.nativeElement, {
|
||||
...defaultCheckboxStyles,
|
||||
label: LocalizedStrings.ENCRYPTION,
|
||||
checked: false,
|
||||
onChange: () => this.onChangeEncrypt(),
|
||||
@@ -268,6 +273,7 @@ export class BackupComponent extends AngularDisposable {
|
||||
|
||||
// Verify backup checkbox
|
||||
this.verifyCheckBox = this._register(new Checkbox(this.verifyElement!.nativeElement, {
|
||||
...defaultCheckboxStyles,
|
||||
label: LocalizedStrings.VERIFY_CONTAINER,
|
||||
checked: false,
|
||||
onChange: () => { },
|
||||
@@ -276,6 +282,7 @@ export class BackupComponent extends AngularDisposable {
|
||||
|
||||
// Perform checksum checkbox
|
||||
this.checksumCheckBox = this._register(new Checkbox(this.checksumElement!.nativeElement, {
|
||||
...defaultCheckboxStyles,
|
||||
label: LocalizedStrings.CHECKSUM_CONTAINER,
|
||||
checked: false,
|
||||
onChange: () => { },
|
||||
@@ -284,6 +291,7 @@ export class BackupComponent extends AngularDisposable {
|
||||
|
||||
// Continue on error checkbox
|
||||
this.continueOnErrorCheckBox = this._register(new Checkbox(this.continueOnErrorElement!.nativeElement, {
|
||||
...defaultCheckboxStyles,
|
||||
label: LocalizedStrings.CONTINUE_ON_ERROR_CONTAINER,
|
||||
checked: false,
|
||||
onChange: () => { },
|
||||
@@ -292,12 +300,14 @@ export class BackupComponent extends AngularDisposable {
|
||||
|
||||
// Set backup name
|
||||
this.backupNameBox = this._register(new InputBox(this.backupNameElement!.nativeElement, this.contextViewService, {
|
||||
ariaLabel: LocalizedStrings.BACKUP_NAME
|
||||
ariaLabel: LocalizedStrings.BACKUP_NAME,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
}));
|
||||
|
||||
// Set backup path list
|
||||
this.urlInputBox = this._register(new InputBox(this.urlPathElement!.nativeElement, this.contextViewService, {
|
||||
ariaLabel: LocalizedStrings.BACKUP_URL
|
||||
ariaLabel: LocalizedStrings.BACKUP_URL,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
}));
|
||||
this._register(this.urlInputBox.onDidChange((value) => this.onUrlInputBoxChanged(value)));
|
||||
|
||||
@@ -324,13 +334,13 @@ export class BackupComponent extends AngularDisposable {
|
||||
this.pathListBox.render(this.filePathElement!.nativeElement);
|
||||
|
||||
// Set backup path add/remove buttons
|
||||
this.addUrlPathButton = this._register(new Button(this.addUrlPathElement!.nativeElement, { secondary: true }));
|
||||
this.addUrlPathButton = this._register(new Button(this.addUrlPathElement!.nativeElement, { secondary: true, ...defaultButtonStyles }));
|
||||
this.addUrlPathButton.label = localize('backupBrowseButton', "Browse");
|
||||
this.addUrlPathButton.title = localize('addUrl', "Add URL");
|
||||
this.addFilePathButton = this._register(new Button(this.addFilePathElement!.nativeElement, { secondary: true }));
|
||||
this.addFilePathButton = this._register(new Button(this.addFilePathElement!.nativeElement, { secondary: true, ...defaultButtonStyles }));
|
||||
this.addFilePathButton.label = '+';
|
||||
this.addFilePathButton.title = localize('addFile', "Add File");
|
||||
this.removeFilePathButton = this._register(new Button(this.removeFilePathElement!.nativeElement, { secondary: true }));
|
||||
this.removeFilePathButton = this._register(new Button(this.removeFilePathElement!.nativeElement, { secondary: true, ...defaultButtonStyles }));
|
||||
this.removeFilePathButton.label = '-';
|
||||
this.removeFilePathButton.title = localize('removeFile', "Remove files");
|
||||
|
||||
@@ -351,12 +361,14 @@ export class BackupComponent extends AngularDisposable {
|
||||
validationOptions: {
|
||||
validation: (value: string) => !value ? ({ type: MessageType.ERROR, content: LocalizedStrings.MEDIA_NAME_REQUIRED_ERROR }) : null
|
||||
},
|
||||
ariaLabel: LocalizedStrings.NEW_MEDIA_SET_NAME
|
||||
ariaLabel: LocalizedStrings.NEW_MEDIA_SET_NAME,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
}
|
||||
));
|
||||
|
||||
this.mediaDescriptionBox = this._register(new InputBox(this.mediaDescriptionElement!.nativeElement, this.contextViewService, {
|
||||
ariaLabel: LocalizedStrings.NEW_MEDIA_SET_DESCRIPTION
|
||||
ariaLabel: LocalizedStrings.NEW_MEDIA_SET_DESCRIPTION,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
}));
|
||||
|
||||
// Set backup retain days
|
||||
@@ -376,7 +388,8 @@ export class BackupComponent extends AngularDisposable {
|
||||
}
|
||||
}
|
||||
},
|
||||
ariaLabel: LocalizedStrings.SET_BACKUP_RETAIN_DAYS
|
||||
ariaLabel: LocalizedStrings.SET_BACKUP_RETAIN_DAYS,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
}));
|
||||
|
||||
// Disable elements
|
||||
@@ -441,24 +454,24 @@ export class BackupComponent extends AngularDisposable {
|
||||
|
||||
private addFooterButtons(): void {
|
||||
// Set script footer button
|
||||
this.scriptButton = this._register(new Button(this.scriptButtonElement!.nativeElement, { secondary: true }));
|
||||
this.scriptButton = this._register(new Button(this.scriptButtonElement!.nativeElement, { secondary: true, ...defaultButtonStyles }));
|
||||
this.scriptButton.label = localize('backupComponent.script', "Script");
|
||||
this._register(this.scriptButton.onDidClick(() => this.onScript()));
|
||||
this._register(attachButtonStyler(this.scriptButton, this.themeService));
|
||||
this._register(this.scriptButton);
|
||||
this.scriptButton.enabled = false;
|
||||
|
||||
// Set backup footer button
|
||||
this.backupButton = this._register(new Button(this.backupButtonElement!.nativeElement));
|
||||
this.backupButton = this._register(new Button(this.backupButtonElement!.nativeElement, defaultButtonStyles));
|
||||
this.backupButton.label = localize('backupComponent.backup', "Backup");
|
||||
this._register(this.backupButton.onDidClick(() => this.onOk()));
|
||||
this._register(attachButtonStyler(this.backupButton, this.themeService));
|
||||
this._register(this.backupButton);
|
||||
this.backupEnabled = false;
|
||||
|
||||
// Set cancel footer button
|
||||
this.cancelButton = this._register(new Button(this.cancelButtonElement!.nativeElement, { secondary: true }));
|
||||
this.cancelButton = this._register(new Button(this.cancelButtonElement!.nativeElement, { secondary: true, ...defaultButtonStyles }));
|
||||
this.cancelButton.label = localize('backupComponent.cancel', "Cancel");
|
||||
this._register(this.cancelButton.onDidClick(() => this.onCancel()));
|
||||
this._register(attachButtonStyler(this.cancelButton, this.themeService));
|
||||
this._register(this.cancelButton);
|
||||
}
|
||||
|
||||
private initialize(isMetadataPopulated: boolean): void {
|
||||
@@ -586,9 +599,9 @@ export class BackupComponent extends AngularDisposable {
|
||||
this.urlInputBox!.value = '';
|
||||
this.pathListBox!.setValidation(true);
|
||||
|
||||
this.cancelButton!.applyStyles();
|
||||
this.scriptButton!.applyStyles();
|
||||
this.backupButton!.applyStyles();
|
||||
// this.cancelButton!.applyStyles();
|
||||
// this.scriptButton!.applyStyles();
|
||||
// this.backupButton!.applyStyles();
|
||||
}
|
||||
|
||||
private registerListeners(): void {
|
||||
@@ -597,9 +610,6 @@ export class BackupComponent extends AngularDisposable {
|
||||
this._register(attachInputBoxStyler(this.recoveryBox!, this.themeService));
|
||||
this._register(attachSelectBoxStyler(this.backupTypeSelectBox!, this.themeService));
|
||||
this._register(attachListBoxStyler(this.pathListBox!, this.themeService));
|
||||
this._register(attachButtonStyler(this.addUrlPathButton!, this.themeService));
|
||||
this._register(attachButtonStyler(this.addFilePathButton!, this.themeService));
|
||||
this._register(attachButtonStyler(this.removeFilePathButton!, this.themeService));
|
||||
this._register(attachSelectBoxStyler(this.compressionSelectBox!, this.themeService));
|
||||
this._register(attachSelectBoxStyler(this.algorithmSelectBox!, this.themeService));
|
||||
this._register(attachSelectBoxStyler(this.encryptorSelectBox!, this.themeService));
|
||||
@@ -607,12 +617,6 @@ export class BackupComponent extends AngularDisposable {
|
||||
this._register(attachInputBoxStyler(this.urlInputBox!, this.themeService));
|
||||
this._register(attachInputBoxStyler(this.mediaDescriptionBox!, this.themeService));
|
||||
this._register(attachInputBoxStyler(this.backupRetainDaysBox!, this.themeService));
|
||||
this._register(attachCheckboxStyler(this.copyOnlyCheckBox!, this.themeService));
|
||||
this._register(attachCheckboxStyler(this.toUrlCheckBox!, this.themeService));
|
||||
this._register(attachCheckboxStyler(this.encryptCheckBox!, this.themeService));
|
||||
this._register(attachCheckboxStyler(this.verifyCheckBox!, this.themeService));
|
||||
this._register(attachCheckboxStyler(this.checksumCheckBox!, this.themeService));
|
||||
this._register(attachCheckboxStyler(this.continueOnErrorCheckBox!, this.themeService));
|
||||
|
||||
this._register(this.backupTypeSelectBox!.onDidSelect(selected => this.onBackupTypeChanged()));
|
||||
this._register(this.addUrlPathButton!.onDidClick(() => this.onAddUrlClick()));
|
||||
|
||||
@@ -25,10 +25,11 @@ import { IContextViewService } from 'vs/platform/contextview/browser/contextView
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { attachInputBoxStyler, attachSelectBoxStyler } from 'vs/platform/theme/common/styler';
|
||||
import { attachInputBoxStyler, attachSelectBoxStyler } from 'sql/platform/theme/common/vsstyler';
|
||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
import { ChartOptions, ControlType, IChartOption } from './chartOptions';
|
||||
import { Insight } from './insight';
|
||||
import { defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
|
||||
const insightRegistry = Registry.as<IInsightRegistry>(Extensions.InsightContribution);
|
||||
@@ -366,8 +367,10 @@ export class ChartView extends Disposable implements IPanelView {
|
||||
this.optionDisposables.push(attachSelectBoxStyler(dropdown, this._themeService));
|
||||
break;
|
||||
case ControlType.input:
|
||||
let input = new InputBox(optionInput, this._contextViewService);
|
||||
input.setAriaLabel(option.label);
|
||||
let input = new InputBox(optionInput, this._contextViewService, {
|
||||
ariaLabel: option.label,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
});
|
||||
input.value = value || '';
|
||||
input.onDidChange(e => {
|
||||
if (this._options[entry] !== e) {
|
||||
@@ -385,8 +388,11 @@ export class ChartView extends Disposable implements IPanelView {
|
||||
this.optionDisposables.push(attachInputBoxStyler(input, this._themeService));
|
||||
break;
|
||||
case ControlType.numberInput:
|
||||
let numberInput = new InputBox(optionInput, this._contextViewService, { type: 'number' });
|
||||
numberInput.setAriaLabel(option.label);
|
||||
let numberInput = new InputBox(optionInput, this._contextViewService, {
|
||||
type: 'number',
|
||||
ariaLabel: option.label,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
});
|
||||
numberInput.value = value || '';
|
||||
numberInput.onDidChange(e => {
|
||||
if (this._options[entry] !== e) {
|
||||
@@ -405,8 +411,12 @@ export class ChartView extends Disposable implements IPanelView {
|
||||
this.optionDisposables.push(attachInputBoxStyler(numberInput, this._themeService));
|
||||
break;
|
||||
case ControlType.dateInput:
|
||||
let dateInput = new InputBox(optionInput, this._contextViewService, { type: 'datetime-local' });
|
||||
dateInput.setAriaLabel(option.label);
|
||||
let dateInput = new InputBox(optionInput, this._contextViewService, {
|
||||
type: 'datetime-local',
|
||||
ariaLabel: option.label,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
});
|
||||
|
||||
dateInput.value = value || '';
|
||||
dateInput.onDidChange(e => {
|
||||
if (this._options[entry] !== e) {
|
||||
|
||||
@@ -14,7 +14,6 @@ import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { ITextResourcePropertiesService } from 'vs/editor/common/services/textResourceConfiguration';
|
||||
import { attachModalDialogStyler } from 'sql/workbench/common/styler';
|
||||
import { attachButtonStyler } from 'vs/platform/theme/common/styler';
|
||||
|
||||
export class ConfigureChartDialog extends Modal {
|
||||
constructor(
|
||||
@@ -39,9 +38,7 @@ export class ConfigureChartDialog extends Modal {
|
||||
public override render() {
|
||||
super.render();
|
||||
attachModalDialogStyler(this, this._themeService);
|
||||
|
||||
let closeButton = this.addFooterButton(localize('configureChartDialog.close', "Close"), () => this.close());
|
||||
attachButtonStyler(closeButton, this._themeService);
|
||||
this.addFooterButton(localize('configureChartDialog.close', "Close"), () => this.close());
|
||||
}
|
||||
|
||||
protected renderBody(container: HTMLElement) {
|
||||
|
||||
@@ -20,7 +20,7 @@ export interface IPointDataSet {
|
||||
export function customMixin(destination: any, source: any, overwrite?: boolean): any {
|
||||
if (types.isObject(source)) {
|
||||
mixin(destination, source, overwrite, customMixin);
|
||||
} else if (types.isArray(source)) {
|
||||
} else if (Array.isArray(source)) {
|
||||
for (let i = 0; i < source.length; i++) {
|
||||
if (destination[i]) {
|
||||
mixin(destination[i], source[i], overwrite, customMixin);
|
||||
|
||||
@@ -80,7 +80,7 @@ class TestParsedArgs implements NativeParsedArgs {
|
||||
'install-source'?: string;
|
||||
'list-extensions'?: boolean;
|
||||
locale?: string;
|
||||
log?: string;
|
||||
log?: string[];
|
||||
logExtensionHostCommunication?: boolean;
|
||||
'max-memory'?: string;
|
||||
'new-window'?: boolean;
|
||||
|
||||
@@ -7,8 +7,7 @@ import { IConfigurationRegistry, Extensions as ConfigExtensions } from 'vs/platf
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { ClearRecentConnectionsAction, GetCurrentConnectionStringAction } from 'sql/workbench/services/connection/browser/connectionActions';
|
||||
import * as azdata from 'azdata';
|
||||
import { IWorkbenchActionRegistry, Extensions } from 'vs/workbench/common/actions';
|
||||
import { Action2, MenuId, MenuRegistry, SyncActionDescriptor, registerAction2 } from 'vs/platform/actions/common/actions';
|
||||
import { Action2, MenuId, MenuRegistry, registerAction2 } from 'vs/platform/actions/common/actions';
|
||||
import { localize } from 'vs/nls';
|
||||
import { ConnectionStatusbarItem } from 'sql/workbench/contrib/connection/browser/connectionStatus';
|
||||
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
|
||||
@@ -35,44 +34,16 @@ import { ServicesAccessor } from 'vs/editor/browser/editorExtensions';
|
||||
|
||||
// Connection Dashboard registration
|
||||
|
||||
const actionRegistry = <IWorkbenchActionRegistry>Registry.as(Extensions.WorkbenchActions);
|
||||
|
||||
// Connection Actions
|
||||
actionRegistry.registerWorkbenchAction(
|
||||
SyncActionDescriptor.create(
|
||||
ClearRecentConnectionsAction,
|
||||
ClearRecentConnectionsAction.ID,
|
||||
ClearRecentConnectionsAction.LABEL
|
||||
),
|
||||
ClearRecentConnectionsAction.LABEL
|
||||
);
|
||||
|
||||
actionRegistry.registerWorkbenchAction(
|
||||
SyncActionDescriptor.create(
|
||||
AddServerGroupAction,
|
||||
AddServerGroupAction.ID,
|
||||
AddServerGroupAction.LABEL
|
||||
),
|
||||
AddServerGroupAction.LABEL
|
||||
);
|
||||
registerAction2(ClearRecentConnectionsAction);
|
||||
|
||||
actionRegistry.registerWorkbenchAction(
|
||||
SyncActionDescriptor.create(
|
||||
ActiveConnectionsFilterAction,
|
||||
ActiveConnectionsFilterAction.ID,
|
||||
ActiveConnectionsFilterAction.SHOW_ACTIVE_CONNECTIONS_LABEL
|
||||
),
|
||||
ActiveConnectionsFilterAction.SHOW_ACTIVE_CONNECTIONS_LABEL
|
||||
);
|
||||
registerAction2(AddServerGroupAction);
|
||||
|
||||
actionRegistry.registerWorkbenchAction(
|
||||
SyncActionDescriptor.create(
|
||||
AddServerAction,
|
||||
AddServerAction.ID,
|
||||
AddServerAction.LABEL
|
||||
),
|
||||
AddServerAction.LABEL
|
||||
);
|
||||
registerAction2(ActiveConnectionsFilterAction);
|
||||
|
||||
registerAction2(AddServerAction);
|
||||
|
||||
MenuRegistry.appendMenuItem(MenuId.ViewTitle, {
|
||||
group: 'navigation',
|
||||
@@ -182,14 +153,7 @@ CommandsRegistry.registerCommand('azdata.connect',
|
||||
}
|
||||
});
|
||||
|
||||
actionRegistry.registerWorkbenchAction(
|
||||
SyncActionDescriptor.create(
|
||||
GetCurrentConnectionStringAction,
|
||||
GetCurrentConnectionStringAction.ID,
|
||||
GetCurrentConnectionStringAction.LABEL
|
||||
),
|
||||
GetCurrentConnectionStringAction.LABEL
|
||||
);
|
||||
registerAction2(GetCurrentConnectionStringAction);
|
||||
|
||||
const configurationRegistry = <IConfigurationRegistry>Registry.as(ConfigExtensions.Configuration);
|
||||
configurationRegistry.registerConfiguration({
|
||||
|
||||
@@ -13,7 +13,6 @@ import { ConnectionProviderProperties, ICapabilitiesService } from 'sql/platform
|
||||
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from 'vs/workbench/common/contributions';
|
||||
import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle';
|
||||
import type { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { isArray } from 'vs/base/common/types';
|
||||
|
||||
const ConnectionProviderContrib: IJSONSchema = {
|
||||
type: 'object',
|
||||
@@ -170,7 +169,7 @@ class ConnectionProviderHandler implements IWorkbenchContribution {
|
||||
|
||||
delta.added.forEach(added => {
|
||||
resolveIconPath(added);
|
||||
if (isArray(added.value)) {
|
||||
if (Array.isArray(added.value)) {
|
||||
for (const provider of added.value) {
|
||||
this.disposables.set(provider, handleProvider(provider));
|
||||
}
|
||||
@@ -179,7 +178,7 @@ class ConnectionProviderHandler implements IWorkbenchContribution {
|
||||
}
|
||||
});
|
||||
delta.removed.forEach(removed => {
|
||||
if (isArray(removed.value)) {
|
||||
if (Array.isArray(removed.value)) {
|
||||
for (const provider of removed.value) {
|
||||
this.disposables.get(provider)!.dispose();
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import { IConnectionTreeDescriptor, IConnectionTreeService } from 'sql/workbench/services/connection/common/connectionTreeService';
|
||||
import { IJSONSchema } from 'vs/base/common/jsonSchema';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { isArray, isString } from 'vs/base/common/types';
|
||||
import { isString } from 'vs/base/common/types';
|
||||
import { localize } from 'vs/nls';
|
||||
import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
@@ -44,7 +44,7 @@ class ConnectionTreeProviderHandle implements IWorkbenchContribution {
|
||||
|
||||
delta.added.forEach(added => {
|
||||
// resolveIconPath(added);
|
||||
if (!isArray(added.value)) {
|
||||
if (!Array.isArray(added.value)) {
|
||||
added.collector.error('Value must be array');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ export class WebviewContent extends AngularDisposable implements OnInit, IDashbo
|
||||
public setHtml(html: string): void {
|
||||
this._html = html;
|
||||
if (this._webview) {
|
||||
this._webview.html = html;
|
||||
this._webview.setHtml(html);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,7 +99,8 @@ export class WebviewContent extends AngularDisposable implements OnInit, IDashbo
|
||||
}
|
||||
|
||||
this._webview = this.webviewService.createWebviewElement({
|
||||
id: this.id,
|
||||
providedViewType: this.id,
|
||||
title: this.id,
|
||||
contentOptions: {
|
||||
allowScripts: true,
|
||||
},
|
||||
@@ -113,7 +114,7 @@ export class WebviewContent extends AngularDisposable implements OnInit, IDashbo
|
||||
this._onMessage.fire(e.message);
|
||||
});
|
||||
if (this._html) {
|
||||
this._webview.html = this._html;
|
||||
this._webview.setHtml(this._html);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -182,7 +182,7 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
|
||||
let secondary: IAction[] = [];
|
||||
const menu = this.menuService.createMenu(MenuId.DashboardToolbar, this.contextKeyService);
|
||||
let groups = menu.getActions({ arg: this.connectionManagementService.connectionInfo.connectionProfile.toIConnectionProfile(), shouldForwardArgs: true });
|
||||
fillInActions(groups, { primary, secondary }, false, g => g === '', Number.MAX_SAFE_INTEGER, (action: SubmenuAction, group: string, groupSize: number) => group === undefined || group === '');
|
||||
fillInActions(groups, { primary, secondary }, false, g => g === '', (action: SubmenuAction, group: string, groupSize: number) => group === undefined || group === '');
|
||||
|
||||
primary.forEach(a => {
|
||||
if (a instanceof MenuItemAction) {
|
||||
@@ -219,7 +219,7 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
|
||||
const toolbarTasks = this.tabToolbarActionsConfig.get(tabId);
|
||||
let tasks = TaskRegistry.getTasks();
|
||||
let content = [];
|
||||
if (types.isArray(toolbarTasks.actions) && toolbarTasks.actions.length > 0) {
|
||||
if (Array.isArray(toolbarTasks.actions) && toolbarTasks.actions.length > 0) {
|
||||
tasks = toolbarTasks.actions.map(i => {
|
||||
if (types.isString(i)) {
|
||||
if (tasks.some(x => x === i)) {
|
||||
@@ -514,7 +514,7 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
|
||||
return properties ? [this.propertiesWidget] : [];
|
||||
} else if (types.isString(properties) && properties === 'collapsed') {
|
||||
return [this.propertiesWidget];
|
||||
} else if (types.isArray(properties)) {
|
||||
} else if (Array.isArray(properties)) {
|
||||
return properties.map((item) => {
|
||||
const retVal = Object.assign({}, this.propertiesWidget);
|
||||
retVal.edition = item.edition;
|
||||
|
||||
@@ -52,7 +52,7 @@ export class DashboardEditor extends EditorPane {
|
||||
/**
|
||||
* Called to create the editor in the parent element.
|
||||
*/
|
||||
public createEditor(parent: HTMLElement): void {
|
||||
protected createEditor(parent: HTMLElement): void {
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
import { ManageAction, ManageActionContext } from 'sql/workbench/browser/actions';
|
||||
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||
import { IAngularEventingService } from 'sql/platform/angularEventing/browser/angularEventingService';
|
||||
import { ExecuteCommandAction } from 'vs/workbench/browser/parts/editor/editorActions';
|
||||
|
||||
export class ExplorerManageAction extends ManageAction {
|
||||
public static override readonly ID = 'explorerwidget.manage';
|
||||
@@ -22,11 +21,3 @@ export class ExplorerManageAction extends ManageAction {
|
||||
await super.run(actionContext);
|
||||
}
|
||||
}
|
||||
|
||||
export class CustomExecuteCommandAction extends ExecuteCommandAction {
|
||||
override run(): Promise<any> {
|
||||
// {{SQL CARBON TODO}}
|
||||
//return super.run(context.profile);
|
||||
return super.run();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,13 +27,14 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { IEditorProgressService } from 'vs/platform/progress/common/progress';
|
||||
import { attachInputBoxStyler } from 'vs/platform/theme/common/styler';
|
||||
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
||||
import { getFlavor } from 'sql/workbench/contrib/dashboard/browser/dashboardRegistry';
|
||||
import { IDashboardService } from 'sql/platform/dashboard/browser/dashboardService';
|
||||
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
|
||||
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
|
||||
import { IComponentContextService } from 'sql/workbench/services/componentContext/browser/componentContextService';
|
||||
import { getInputBoxStyle } from 'vs/platform/theme/browser/defaultStyles';
|
||||
import { settingsTextInputBackground, settingsTextInputBorder, settingsTextInputForeground } from 'vs/workbench/contrib/preferences/common/settingsEditorColorRegistry';
|
||||
|
||||
@Component({
|
||||
selector: 'explorer-widget',
|
||||
@@ -84,7 +85,12 @@ export class ExplorerWidget extends DashboardWidget implements IDashboardWidget,
|
||||
|
||||
const inputOptions: IInputOptions = {
|
||||
placeholder: placeholderLabel,
|
||||
ariaLabel: placeholderLabel
|
||||
ariaLabel: placeholderLabel,
|
||||
inputBoxStyles: getInputBoxStyle({
|
||||
inputBackground: settingsTextInputBackground,
|
||||
inputForeground: settingsTextInputForeground,
|
||||
inputBorder: settingsTextInputBorder
|
||||
})
|
||||
};
|
||||
this._input = new InputBox(this._inputContainer.nativeElement, this.contextViewService, inputOptions);
|
||||
this._table = new ExplorerTable(this._tableContainer.nativeElement,
|
||||
@@ -103,7 +109,6 @@ export class ExplorerWidget extends DashboardWidget implements IDashboardWidget,
|
||||
this.quickInputService,
|
||||
this.componentContextService);
|
||||
this._register(this._input);
|
||||
this._register(attachInputBoxStyler(this._input, this.themeService));
|
||||
this._register(this._table);
|
||||
this._register(this._input.onDidChange(e => {
|
||||
this._filterDelayer.trigger(async () => {
|
||||
|
||||
@@ -61,7 +61,7 @@ export class WebviewWidget extends DashboardWidget implements IDashboardWidget,
|
||||
public setHtml(html: string): void {
|
||||
this._html = html;
|
||||
if (this._webview) {
|
||||
this._webview.html = html;
|
||||
this._webview.setHtml(html);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,8 +99,10 @@ export class WebviewWidget extends DashboardWidget implements IDashboardWidget,
|
||||
this._onMessageDisposable.dispose();
|
||||
}
|
||||
|
||||
// {{SQL CARBON TODO}} - are the id & title values correct with new createWebviewElement API
|
||||
this._webview = this.webviewService.createWebviewElement({
|
||||
id: this.id,
|
||||
providedViewType: this.id,
|
||||
title: this.id,
|
||||
contentOptions: {
|
||||
allowScripts: true,
|
||||
},
|
||||
@@ -113,7 +115,7 @@ export class WebviewWidget extends DashboardWidget implements IDashboardWidget,
|
||||
this._onMessage.fire(e.message);
|
||||
});
|
||||
if (this._html) {
|
||||
this._webview.html = this._html;
|
||||
this._webview.setHtml(this._html);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,11 +55,11 @@ export class ConnectionViewletPanel extends ViewPane {
|
||||
super.renderHeader(container);
|
||||
}
|
||||
|
||||
override renderHeaderTitle(container: HTMLElement): void {
|
||||
protected override renderHeaderTitle(container: HTMLElement): void {
|
||||
super.renderHeaderTitle(container, this.options.title);
|
||||
}
|
||||
|
||||
override renderBody(container: HTMLElement): void {
|
||||
protected override renderBody(container: HTMLElement): void {
|
||||
const viewletContainer = DOM.append(container, DOM.$('div.server-explorer-viewlet'));
|
||||
const viewContainer = DOM.append(viewletContainer, DOM.$('div.object-explorer-view'));
|
||||
this._serverTreeView.renderBody(viewContainer).then(undefined, error => {
|
||||
@@ -72,7 +72,7 @@ export class ConnectionViewletPanel extends ViewPane {
|
||||
return this._serverTreeView.tree;
|
||||
}
|
||||
|
||||
override layoutBody(size: number): void {
|
||||
protected override layoutBody(size: number): void {
|
||||
this._serverTreeView.layout(size);
|
||||
this._root!.classList.toggle('narrow', this._root!.clientWidth < 300);
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import * as dom from 'vs/base/browser/dom';
|
||||
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
import { attachSelectBoxStyler } from 'vs/platform/theme/common/styler';
|
||||
import { attachSelectBoxStyler } from 'sql/platform/theme/common/vsstyler';
|
||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
import { IActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar';
|
||||
const $ = dom.$;
|
||||
|
||||
@@ -213,7 +213,7 @@ export class EditDataEditor extends EditorPane {
|
||||
/**
|
||||
* Sets this editor and the sub-editors to visible.
|
||||
*/
|
||||
public override setEditorVisible(visible: boolean, group: IEditorGroup): void {
|
||||
protected override setEditorVisible(visible: boolean, group: IEditorGroup): void {
|
||||
if (this._resultsEditor) {
|
||||
this._resultsEditor.setVisible(visible, group);
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ export class EditDataResultsEditor extends EditorPane {
|
||||
return this._input;
|
||||
}
|
||||
|
||||
public createEditor(parent: HTMLElement): void {
|
||||
protected createEditor(parent: HTMLElement): void {
|
||||
parent.appendChild(this.styleSheet);
|
||||
}
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ export class AzdataGraphView extends Disposable {
|
||||
this.initializeGraphEvents();
|
||||
|
||||
configurationService.onDidChangeConfiguration(e => {
|
||||
if (e.affectedKeys.includes('executionPlan.tooltips.enableOnHoverTooltips')) {
|
||||
if (e.affectedKeys.has('executionPlan.tooltips.enableOnHoverTooltips')) {
|
||||
const enableHoverOnTooltip = configurationService.getValue<boolean>('executionPlan.tooltips.enableOnHoverTooltips');
|
||||
if (this._diagram) {
|
||||
this._diagram.setShowTooltipOnClick(!enableHoverOnTooltip);
|
||||
|
||||
@@ -33,8 +33,8 @@ import { IAdsTelemetryService } from 'sql/platform/telemetry/common/telemetry';
|
||||
import { ExecutionPlanWidgetController } from 'sql/workbench/contrib/executionPlan/browser/executionPlanWidgetController';
|
||||
import { NodeSearchWidget } from 'sql/workbench/contrib/executionPlan/browser/widgets/nodeSearchWidget';
|
||||
import { Button } from 'sql/base/browser/ui/button/button';
|
||||
import { attachButtonStyler } from 'vs/platform/theme/common/styler';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
const ADD_EXECUTION_PLAN_STRING = localize('epCompare.addExecutionPlanLabel', 'Add execution plan');
|
||||
|
||||
@@ -214,8 +214,7 @@ export class ExecutionPlanComparisonEditorView extends Disposable {
|
||||
|
||||
this._placeholderInfoboxContainer = DOM.$('.placeholder-infobox');
|
||||
|
||||
this._placeholderButton = this._register(new Button(this._placeholderInfoboxContainer, { secondary: true }));
|
||||
this._register(attachButtonStyler(this._placeholderButton, this.themeService));
|
||||
this._placeholderButton = this._register(new Button(this._placeholderInfoboxContainer, { secondary: true, ...defaultButtonStyles }));
|
||||
this._placeholderButton.label = ADD_EXECUTION_PLAN_STRING;
|
||||
this._placeholderButton.ariaLabel = ADD_EXECUTION_PLAN_STRING;
|
||||
this._placeholderButton.enabled = true;
|
||||
|
||||
@@ -21,6 +21,7 @@ import { deepClone } from 'vs/base/common/objects';
|
||||
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
|
||||
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
|
||||
import { IComponentContextService } from 'sql/workbench/services/componentContext/browser/componentContextService';
|
||||
import { ThemeIcon } from 'vs/base/common/themables';
|
||||
|
||||
export enum ExecutionPlanCompareOrientation {
|
||||
Horizontal = 'horizontal',
|
||||
@@ -391,8 +392,8 @@ export class ExecutionPlanComparisonPropertiesView extends ExecutionPlanProperti
|
||||
diffIcon.iconClass = executionPlanComparisonPropertiesDifferent;
|
||||
} else {
|
||||
diffIcon = (parseFloat(v.primaryProp.displayValue) > parseFloat(v.secondaryProp.displayValue))
|
||||
? { iconClass: Codicon.chevronRight.classNames, title: greaterThanTitle }
|
||||
: { iconClass: Codicon.chevronLeft.classNames, title: lessThanTitle };
|
||||
? { iconClass: ThemeIcon.asClassName(Codicon.chevronRight), title: greaterThanTitle }
|
||||
: { iconClass: ThemeIcon.asClassName(Codicon.chevronLeft), title: lessThanTitle };
|
||||
}
|
||||
break;
|
||||
case sqlExtHostType.executionPlan.ExecutionPlanGraphElementPropertyDataType.String:
|
||||
|
||||
@@ -39,7 +39,7 @@ export class ExecutionPlanEditor extends EditorPane {
|
||||
/**
|
||||
* Called to create the editor in the parent element.
|
||||
*/
|
||||
public createEditor(parent: HTMLElement): void {
|
||||
protected createEditor(parent: HTMLElement): void {
|
||||
this._parentContainer = parent;
|
||||
//Enable scrollbars when drawing area is larger than viewport
|
||||
parent.style.overflow = 'auto';
|
||||
|
||||
@@ -7,11 +7,11 @@ import * as path from 'vs/base/common/path';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { localize } from 'vs/nls';
|
||||
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
|
||||
import { EditorModel } from 'vs/workbench/common/editor/editorModel';
|
||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
|
||||
import * as azdata from 'azdata';
|
||||
import { ExecutionPlanEditor } from 'sql/workbench/contrib/executionPlan/browser/executionPlanEditor';
|
||||
import { IEditorModel, IEditorOptions } from 'vs/platform/editor/common/editor';
|
||||
|
||||
export class ExecutionPlanInput extends EditorInput {
|
||||
|
||||
@@ -86,7 +86,7 @@ export class ExecutionPlanInput extends EditorInput {
|
||||
return false;
|
||||
}
|
||||
|
||||
public override async resolve(refresh?: boolean): Promise<EditorModel | undefined> {
|
||||
public override async resolve(options?: IEditorOptions): Promise<IEditorModel | null> {
|
||||
if (!this.executionPlanGraphinfo.graphFileContent) {
|
||||
this.executionPlanGraphinfo.graphFileContent = (await this._fileService.read(this._uri, { acceptTextOnly: true })).value;
|
||||
}
|
||||
|
||||
@@ -28,6 +28,8 @@ import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
|
||||
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
|
||||
import { IComponentContextService } from 'sql/workbench/services/componentContext/browser/componentContextService';
|
||||
import { defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
import { ThemeIcon } from 'vs/base/common/themables';
|
||||
|
||||
export abstract class ExecutionPlanPropertiesViewBase extends Disposable implements IVerticalSashLayoutProvider {
|
||||
// Title bar with close button action
|
||||
@@ -143,7 +145,8 @@ export abstract class ExecutionPlanPropertiesViewBase extends Disposable impleme
|
||||
|
||||
this._propertiesSearchInput = this._register(new InputBox(this._propertiesSearchInputContainer, this._contextViewService, {
|
||||
ariaDescription: propertiesSearchDescription,
|
||||
placeholder: searchPlaceholder
|
||||
placeholder: searchPlaceholder,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
}));
|
||||
|
||||
this._register(attachInputBoxStyler(this._propertiesSearchInput, this._themeService));
|
||||
@@ -403,7 +406,7 @@ export class ClosePropertyViewAction extends Action {
|
||||
public static LABEL = localize('executionPlanPropertyViewClose', "Close");
|
||||
|
||||
constructor() {
|
||||
super(ClosePropertyViewAction.ID, ClosePropertyViewAction.LABEL, Codicon.close.classNames);
|
||||
super(ClosePropertyViewAction.ID, ClosePropertyViewAction.LABEL, ThemeIcon.asClassName(Codicon.close));
|
||||
}
|
||||
|
||||
public override async run(context: ExecutionPlanPropertiesViewBase): Promise<void> {
|
||||
@@ -465,7 +468,7 @@ export class ExpandAllPropertiesAction extends Action {
|
||||
public static LABEL = localize('executionPlanExpandAllProperties', 'Expand All');
|
||||
|
||||
constructor() {
|
||||
super(ExpandAllPropertiesAction.ID, ExpandAllPropertiesAction.LABEL, Codicon.expandAll.classNames);
|
||||
super(ExpandAllPropertiesAction.ID, ExpandAllPropertiesAction.LABEL, ThemeIcon.asClassName(Codicon.expandAll));
|
||||
}
|
||||
|
||||
public override async run(context: ExecutionPlanPropertiesViewBase): Promise<void> {
|
||||
@@ -478,7 +481,7 @@ export class CollapseAllPropertiesAction extends Action {
|
||||
public static LABEL = localize('executionPlanCollapseAllProperties', 'Collapse All');
|
||||
|
||||
constructor() {
|
||||
super(CollapseAllPropertiesAction.ID, CollapseAllPropertiesAction.LABEL, Codicon.collapseAll.classNames);
|
||||
super(CollapseAllPropertiesAction.ID, CollapseAllPropertiesAction.LABEL, ThemeIcon.asClassName(Codicon.collapseAll));
|
||||
}
|
||||
|
||||
public override async run(context: ExecutionPlanPropertiesViewBase): Promise<void> {
|
||||
|
||||
@@ -171,12 +171,12 @@ export class ExecutionPlanView extends Disposable implements IHorizontalSashLayo
|
||||
this._register(this._instantiationService.createInstance(SavePlanFile)),
|
||||
this._register(new OpenPlanFile()),
|
||||
this._register(this._instantiationService.createInstance(OpenQueryAction, 'ActionBar')),
|
||||
this._register(new Separator()),
|
||||
new Separator(),
|
||||
this._register(this._instantiationService.createInstance(ZoomInAction, 'ActionBar')),
|
||||
this._register(this._instantiationService.createInstance(ZoomOutAction, 'ActionBar')),
|
||||
this._register(this._instantiationService.createInstance(ZoomToFitAction, 'ActionBar')),
|
||||
this._register(this._instantiationService.createInstance(CustomZoomAction, 'ActionBar')),
|
||||
this._register(new Separator()),
|
||||
new Separator(),
|
||||
this._register(this._instantiationService.createInstance(SearchNodeAction, 'ActionBar')),
|
||||
this._register(this._instantiationService.createInstance(PropertiesAction, 'ActionBar')),
|
||||
this._register(this._instantiationService.createInstance(CompareExecutionPlanAction, 'ActionBar')),
|
||||
@@ -189,18 +189,18 @@ export class ExecutionPlanView extends Disposable implements IHorizontalSashLayo
|
||||
this._register(this._instantiationService.createInstance(SavePlanFile)),
|
||||
this._register(new OpenPlanFile()),
|
||||
this._register(this._instantiationService.createInstance(OpenQueryAction, 'ContextMenu')),
|
||||
this._register(new Separator()),
|
||||
new Separator(),
|
||||
this._register(this._instantiationService.createInstance(ZoomInAction, 'ContextMenu')),
|
||||
this._register(this._instantiationService.createInstance(ZoomOutAction, 'ContextMenu')),
|
||||
this._register(this._instantiationService.createInstance(ZoomToFitAction, 'ContextMenu')),
|
||||
this._register(this._instantiationService.createInstance(CustomZoomAction, 'ContextMenu')),
|
||||
this._register(new Separator()),
|
||||
new Separator(),
|
||||
this._register(this._instantiationService.createInstance(SearchNodeAction, 'ContextMenu')),
|
||||
this._register(this._instantiationService.createInstance(PropertiesAction, 'ContextMenu')),
|
||||
this._register(this._instantiationService.createInstance(CompareExecutionPlanAction, 'ContextMenu')),
|
||||
this._register(this._instantiationService.createInstance(HighlightExpensiveOperationAction, 'ContextMenu')),
|
||||
this.contextMenuToggleTooltipAction,
|
||||
this._register(new Separator()),
|
||||
new Separator(),
|
||||
];
|
||||
|
||||
if (this._queryResultsView) {
|
||||
|
||||
@@ -12,6 +12,7 @@ import { RunQueryOnConnectionMode } from 'sql/platform/connection/common/connect
|
||||
import { Button } from 'sql/base/browser/ui/button/button';
|
||||
import { removeLineBreaks } from 'sql/base/common/strings';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
export class ExecutionPlanViewHeader extends Disposable {
|
||||
|
||||
@@ -106,6 +107,7 @@ export class ExecutionPlanViewHeader extends Disposable {
|
||||
const link = this._register(new Button(this._recommendationsContainer, {
|
||||
title: r.displayString,
|
||||
secondary: true,
|
||||
...defaultButtonStyles
|
||||
}));
|
||||
|
||||
link.label = r.displayString;
|
||||
|
||||
@@ -33,6 +33,7 @@ import { filterIconClassNames, searchPlaceholder, topOperationsSearchDescription
|
||||
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
|
||||
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
|
||||
import { IComponentContextService } from 'sql/workbench/services/componentContext/browser/componentContextService';
|
||||
import { defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
const TABLE_SORT_COLUMN_KEY = 'tableCostColumnForSorting';
|
||||
|
||||
@@ -182,7 +183,8 @@ export class TopOperationsTabView extends Disposable implements IPanelView {
|
||||
|
||||
const topOperationsSearchInput = this._register(new InputBox(headerSearchBarContainer, this._contextViewService, {
|
||||
ariaDescription: topOperationsSearchDescription,
|
||||
placeholder: searchPlaceholder
|
||||
placeholder: searchPlaceholder,
|
||||
inputBoxStyles: defaultInputBoxStyles,
|
||||
}));
|
||||
this._register(attachInputBoxStyler(topOperationsSearchInput, this._themeService));
|
||||
topOperationsSearchInput.element.classList.add('codicon', filterIconClassNames);
|
||||
|
||||
@@ -18,6 +18,8 @@ import { zoomIconClassNames } from 'sql/workbench/contrib/executionPlan/browser/
|
||||
import { Button } from 'sql/base/browser/ui/button/button';
|
||||
import { AzdataGraphView } from 'sql/workbench/contrib/executionPlan/browser/azdataGraphView';
|
||||
import { ExecutionPlanWidgetController } from 'sql/workbench/contrib/executionPlan/browser/executionPlanWidgetController';
|
||||
import { defaultButtonStyles, defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
import { ThemeIcon } from 'vs/base/common/themables';
|
||||
|
||||
export class CustomZoomWidget extends ExecutionPlanWidgetBase {
|
||||
private _actionBar: ActionBar;
|
||||
@@ -38,7 +40,8 @@ export class CustomZoomWidget extends ExecutionPlanWidgetBase {
|
||||
this.customZoomInputBox = this._register(new InputBox(this.container, this.contextViewService, {
|
||||
type: 'number',
|
||||
ariaLabel: zoomValueLabel,
|
||||
flexibleWidth: false
|
||||
flexibleWidth: false,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
}));
|
||||
this._register(attachInputBoxStyler(this.customZoomInputBox, this.themeService));
|
||||
|
||||
@@ -58,7 +61,8 @@ export class CustomZoomWidget extends ExecutionPlanWidgetBase {
|
||||
}));
|
||||
|
||||
const applyButton = this._register(new Button(this.container, {
|
||||
title: localize('customZoomApplyButtonTitle', "Apply Zoom")
|
||||
title: localize('customZoomApplyButtonTitle', "Apply Zoom"),
|
||||
...defaultButtonStyles
|
||||
}));
|
||||
applyButton.setWidth('60px');
|
||||
applyButton.label = localize('customZoomApplyButton', "Apply");
|
||||
@@ -105,12 +109,10 @@ export class CancelZoom extends Action {
|
||||
public static LABEL = localize('cancelCustomZoomAction', "Close");
|
||||
|
||||
constructor() {
|
||||
super(CancelZoom.ID, CancelZoom.LABEL, Codicon.chromeClose.classNames);
|
||||
super(CancelZoom.ID, CancelZoom.LABEL, ThemeIcon.asClassName(Codicon.chromeClose));
|
||||
}
|
||||
|
||||
public override async run(context: CustomZoomWidget): Promise<void> {
|
||||
context.widgetController.removeWidget(context);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -21,6 +21,8 @@ import { Button } from 'sql/base/browser/ui/button/button';
|
||||
import { searchIconClassNames } from 'sql/workbench/contrib/executionPlan/browser/constants';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
|
||||
import { ThemeIcon } from 'vs/base/common/themables';
|
||||
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
const SELECT_EXPENSE_METRIC_TITLE = localize('executionPlanSelectExpenseMetricTitle', 'Select expense metric');
|
||||
|
||||
@@ -125,7 +127,8 @@ export class HighlightExpensiveOperationWidget extends ExecutionPlanWidgetBase {
|
||||
|
||||
const self = this;
|
||||
const applyButton = this._register(new Button(this.container, {
|
||||
title: localize('highlightExpensiveOperationButtonTitle', 'Highlight Expensive Operation')
|
||||
title: localize('highlightExpensiveOperationButtonTitle', 'Highlight Expensive Operation'),
|
||||
...defaultButtonStyles
|
||||
}));
|
||||
|
||||
applyButton.label = localize('highlightExpensiveOperationApplyButton', 'Apply');
|
||||
@@ -326,7 +329,7 @@ export class CancelHIghlightExpensiveOperationAction extends Action {
|
||||
public static LABEL = localize('cancelExpensiveOperationAction', 'Close');
|
||||
|
||||
constructor() {
|
||||
super(CancelHIghlightExpensiveOperationAction.ID, CancelHIghlightExpensiveOperationAction.LABEL, Codicon.chromeClose.classNames);
|
||||
super(CancelHIghlightExpensiveOperationAction.ID, CancelHIghlightExpensiveOperationAction.LABEL, ThemeIcon.asClassName(Codicon.chromeClose));
|
||||
}
|
||||
|
||||
public override async run(context: HighlightExpensiveOperationWidget): Promise<void> {
|
||||
|
||||
@@ -17,6 +17,8 @@ import { SelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
|
||||
import { InputBox } from 'sql/base/browser/ui/inputBox/inputBox';
|
||||
import { AzdataGraphView, SearchType } from 'sql/workbench/contrib/executionPlan/browser/azdataGraphView';
|
||||
import { ExecutionPlanWidgetController } from 'sql/workbench/contrib/executionPlan/browser/executionPlanWidgetController';
|
||||
import { defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
import { ThemeIcon } from 'vs/base/common/themables';
|
||||
|
||||
const SELECT_PROPERTY_TITLE = localize('executionPlanSelectPropertyTitle', 'Select property');
|
||||
const SELECT_SEARCH_TYPE_TITLE = localize('executionPlanSelectSearchTypeTitle', 'Select search type');
|
||||
@@ -123,7 +125,10 @@ export class NodeSearchWidget extends ExecutionPlanWidgetBase {
|
||||
}));
|
||||
|
||||
// search text input box
|
||||
this._searchTextInputBox = this._register(new InputBox(this.container, this.contextViewService, {}));
|
||||
this._searchTextInputBox = this._register(new InputBox(this.container, this.contextViewService,
|
||||
{
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
}));
|
||||
this._searchTextInputBox.setAriaLabel(ENTER_SEARCH_VALUE_TITLE);
|
||||
this._searchTextInputBox.element.style.marginLeft = '5px';
|
||||
this._register(attachInputBoxStyler(this._searchTextInputBox, this.themeService));
|
||||
@@ -204,7 +209,7 @@ export class GoToNextMatchAction extends Action {
|
||||
public static LABEL = localize('nextSearchItemAction', "Next Match");
|
||||
|
||||
constructor() {
|
||||
super(GoToNextMatchAction.ID, GoToNextMatchAction.LABEL, Codicon.arrowDown.classNames);
|
||||
super(GoToNextMatchAction.ID, GoToNextMatchAction.LABEL, ThemeIcon.asClassName(Codicon.arrowDown));
|
||||
}
|
||||
|
||||
public override async run(context: NodeSearchWidget): Promise<void> {
|
||||
@@ -217,7 +222,7 @@ export class GoToPreviousMatchAction extends Action {
|
||||
public static LABEL = localize('previousSearchItemAction', "Previous Match");
|
||||
|
||||
constructor() {
|
||||
super(GoToPreviousMatchAction.ID, GoToPreviousMatchAction.LABEL, Codicon.arrowUp.classNames);
|
||||
super(GoToPreviousMatchAction.ID, GoToPreviousMatchAction.LABEL, ThemeIcon.asClassName(Codicon.arrowUp));
|
||||
}
|
||||
|
||||
public override async run(context: NodeSearchWidget): Promise<void> {
|
||||
@@ -230,7 +235,7 @@ export class CancelSearch extends Action {
|
||||
public static LABEL = localize('cancelSearchAction', "Close");
|
||||
|
||||
constructor() {
|
||||
super(CancelSearch.ID, CancelSearch.LABEL, Codicon.chromeClose.classNames);
|
||||
super(CancelSearch.ID, CancelSearch.LABEL, ThemeIcon.asClassName(Codicon.chromeClose));
|
||||
}
|
||||
|
||||
public override async run(context: NodeSearchWidget): Promise<void> {
|
||||
|
||||
@@ -4,18 +4,17 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands';
|
||||
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { IWorkbenchActionRegistry, Extensions as WorkbenchActionExtensions } from 'vs/workbench/common/actions';
|
||||
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
|
||||
import { ExtensionsLabel, IExtensionGalleryService, IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IExtensionGalleryService, IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { OpenExtensionAuthoringDocsAction } from 'sql/workbench/contrib/extensions/browser/extensionsActions';
|
||||
import { localize } from 'vs/nls';
|
||||
import { deepClone } from 'vs/base/common/objects';
|
||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
import { registerAction2 } from 'vs/platform/actions/common/actions';
|
||||
|
||||
// Global Actions
|
||||
const actionRegistry = Registry.as<IWorkbenchActionRegistry>(WorkbenchActionExtensions.WorkbenchActions);
|
||||
actionRegistry.registerWorkbenchAction(SyncActionDescriptor.from(OpenExtensionAuthoringDocsAction), 'Extensions: Author an Extension...', ExtensionsLabel);
|
||||
|
||||
|
||||
registerAction2(OpenExtensionAuthoringDocsAction);
|
||||
|
||||
// Register Commands
|
||||
CommandsRegistry.registerCommand('azdata.extension.open', (accessor: ServicesAccessor, extension: { id: string }) => {
|
||||
|
||||
@@ -13,6 +13,8 @@ import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
import { PagedModel } from 'vs/base/common/paging';
|
||||
import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite';
|
||||
import { ViewContainerLocation } from 'vs/workbench/common/views';
|
||||
import { Action2 } from 'vs/platform/actions/common/actions';
|
||||
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||
|
||||
function getScenarioID(scenarioType: string) {
|
||||
return 'workbench.extensions.action.show' + scenarioType;
|
||||
@@ -68,21 +70,23 @@ export class InstallRecommendedExtensionsByScenarioAction extends Action {
|
||||
}
|
||||
}
|
||||
|
||||
export class OpenExtensionAuthoringDocsAction extends Action {
|
||||
export class OpenExtensionAuthoringDocsAction extends Action2 {
|
||||
|
||||
static readonly ID = 'workbench.extensions.action.openExtensionAuthoringDocs';
|
||||
static readonly LABEL_ORG = "Author an Extension...";
|
||||
static readonly LABEL = localize('openExtensionAuthoringDocs', "Author an Extension...");
|
||||
private static readonly extensionAuthoringDocsURI = 'https://docs.microsoft.com/sql/azure-data-studio/extension-authoring';
|
||||
|
||||
constructor(
|
||||
id: string = OpenExtensionAuthoringDocsAction.ID,
|
||||
label: string = OpenExtensionAuthoringDocsAction.LABEL,
|
||||
@IOpenerService private readonly openerService: IOpenerService,
|
||||
) {
|
||||
super(id, label);
|
||||
constructor() {
|
||||
super({
|
||||
id: OpenExtensionAuthoringDocsAction.ID,
|
||||
title: { value: OpenExtensionAuthoringDocsAction.LABEL, original: OpenExtensionAuthoringDocsAction.LABEL_ORG },
|
||||
f1: true,
|
||||
});
|
||||
}
|
||||
|
||||
override async run(): Promise<void> {
|
||||
await this.openerService.open(URI.parse(OpenExtensionAuthoringDocsAction.extensionAuthoringDocsURI));
|
||||
override async run(accessor: ServicesAccessor): Promise<void> {
|
||||
const openerService = accessor.get(IOpenerService);
|
||||
await openerService.open(URI.parse(OpenExtensionAuthoringDocsAction.extensionAuthoringDocsURI));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ import {
|
||||
} from 'sql/workbench/contrib/jobManagement/browser/jobHistoryTree';
|
||||
import { JobStepsViewRow } from 'sql/workbench/contrib/jobManagement/browser/jobStepsViewTree';
|
||||
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
||||
import { attachListStyler } from 'vs/platform/theme/common/styler';
|
||||
import { attachListStyler } from 'sql/platform/theme/common/vsstyler';
|
||||
import { Tree } from 'sql/base/parts/tree/browser/treeImpl';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
|
||||
|
||||
@@ -7,7 +7,7 @@ import 'vs/css!./media/jobStepsView';
|
||||
import * as nls from 'vs/nls';
|
||||
import * as dom from 'vs/base/browser/dom';
|
||||
import { OnInit, Component, Inject, forwardRef, ElementRef, ViewChild, AfterContentChecked } from '@angular/core';
|
||||
import { attachListStyler } from 'vs/platform/theme/common/styler';
|
||||
import { attachListStyler } from 'sql/platform/theme/common/vsstyler';
|
||||
import { Tree } from 'sql/base/parts/tree/browser/treeImpl';
|
||||
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
|
||||
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
||||
|
||||
@@ -37,6 +37,7 @@ import { attachTableFilterStyler } from 'sql/platform/theme/common/styler';
|
||||
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
|
||||
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
|
||||
import { IComponentContextService } from 'sql/workbench/services/componentContext/browser/componentContextService';
|
||||
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
export const JOBSVIEW_SELECTOR: string = 'jobsview-component';
|
||||
export const ROW_HEIGHT: number = 45;
|
||||
@@ -188,7 +189,7 @@ export class JobsViewComponent extends JobManagementView implements OnInit, OnDe
|
||||
});
|
||||
this.rowDetail = rowDetail;
|
||||
columns.unshift(this.rowDetail.getColumnDefinition());
|
||||
let filterPlugin = new HeaderFilter<IItem>(this._contextViewService);
|
||||
let filterPlugin = new HeaderFilter<IItem>({ buttonStyles: defaultButtonStyles }, this._contextViewService);
|
||||
this._register(attachTableFilterStyler(filterPlugin, this._themeService));
|
||||
this.filterPlugin = filterPlugin;
|
||||
jQuery(this._gridEl.nativeElement).empty();
|
||||
|
||||
@@ -38,6 +38,7 @@ import { attachTableFilterStyler } from 'sql/platform/theme/common/styler';
|
||||
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
|
||||
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
|
||||
import { IComponentContextService } from 'sql/workbench/services/componentContext/browser/componentContextService';
|
||||
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
|
||||
export const NOTEBOOKSVIEW_SELECTOR: string = 'notebooksview-component';
|
||||
@@ -187,7 +188,7 @@ export class NotebooksViewComponent extends JobManagementView implements OnInit,
|
||||
});
|
||||
this.rowDetail = rowDetail;
|
||||
columns.unshift(this.rowDetail.getColumnDefinition());
|
||||
let filterPlugin = new HeaderFilter<IItem>(this._contextViewService);
|
||||
let filterPlugin = new HeaderFilter<IItem>({ buttonStyles: defaultButtonStyles }, this._contextViewService);
|
||||
this._register(attachTableFilterStyler(filterPlugin, this._themeService));
|
||||
this.filterPlugin = filterPlugin;
|
||||
jQuery(this._gridEl.nativeElement).empty();
|
||||
|
||||
@@ -74,7 +74,8 @@ export default class WebViewComponent extends ComponentBase<WebViewProperties> i
|
||||
|
||||
private _createWebview(): void {
|
||||
this._webview = this.webviewService.createWebviewElement({
|
||||
id: this.id,
|
||||
providedViewType: this.id,
|
||||
title: this.id,
|
||||
contentOptions: {
|
||||
allowScripts: true,
|
||||
},
|
||||
@@ -117,7 +118,7 @@ export default class WebViewComponent extends ComponentBase<WebViewProperties> i
|
||||
private setHtml(): void {
|
||||
if (this._webview && this.html) {
|
||||
this._renderedHtml = this.html;
|
||||
this._webview.html = this._renderedHtml;
|
||||
this._webview.setHtml(this._renderedHtml);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
|
||||
import 'vs/css!./media/imageCalloutDialog';
|
||||
import * as DOM from 'vs/base/browser/dom';
|
||||
import * as styler from 'vs/platform/theme/common/styler';
|
||||
import * as TelemetryKeys from 'sql/platform/telemetry/common/telemetryKeys';
|
||||
import * as constants from 'sql/workbench/contrib/notebook/browser/calloutDialog/common/constants';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
@@ -27,6 +26,7 @@ import { attachCalloutDialogStyler } from 'sql/workbench/common/styler';
|
||||
import * as path from 'vs/base/common/path';
|
||||
import { unquoteText } from 'sql/workbench/contrib/notebook/browser/calloutDialog/common/utils';
|
||||
import { ITextResourcePropertiesService } from 'vs/editor/common/services/textResourceConfiguration';
|
||||
import { defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
export interface IImageCalloutDialogOptions {
|
||||
insertTitle?: string,
|
||||
@@ -149,7 +149,8 @@ export class ImageCalloutDialog extends Modal {
|
||||
this._contextViewService,
|
||||
{
|
||||
placeholder: constants.pathPlaceholder,
|
||||
ariaLabel: constants.pathInputLabel
|
||||
ariaLabel: constants.pathInputLabel,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
});
|
||||
let browseButtonContainer = DOM.$('.button-icon');
|
||||
this._imageBrowseButton = DOM.$('a.codicon.masked-icon.browse-local');
|
||||
@@ -194,8 +195,9 @@ export class ImageCalloutDialog extends Modal {
|
||||
}
|
||||
|
||||
private registerListeners(): void {
|
||||
this._register(styler.attachInputBoxStyler(this._imageUrlInputBox, this._themeService));
|
||||
this._register(styler.attachToggleStyler(this._imageEmbedCheckbox, this._themeService));
|
||||
// {{SQL CARBON TODO}} - attach styles?
|
||||
// this._register(styler.attachInputBoxStyler(this._imageUrlInputBox, this._themeService));
|
||||
// this._register(styler.attachToggleStyler(this._imageEmbedCheckbox, this._themeService));
|
||||
}
|
||||
|
||||
public insert(): void {
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
|
||||
import 'vs/css!./media/linkCalloutDialog';
|
||||
import * as DOM from 'vs/base/browser/dom';
|
||||
import * as styler from 'vs/platform/theme/common/styler';
|
||||
import * as constants from 'sql/workbench/contrib/notebook/browser/calloutDialog/common/constants';
|
||||
import * as TelemetryKeys from 'sql/platform/telemetry/common/telemetryKeys';
|
||||
import { Modal, IDialogProperties, DialogPosition, DialogWidth } from 'sql/workbench/browser/modal/modal';
|
||||
@@ -22,6 +21,7 @@ import { attachCalloutDialogStyler } from 'sql/workbench/common/styler';
|
||||
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||
import { escapeLabel, escapeUrl, unquoteText } from 'sql/workbench/contrib/notebook/browser/calloutDialog/common/utils';
|
||||
import { ITextResourcePropertiesService } from 'vs/editor/common/services/textResourceConfiguration';
|
||||
import { defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
export interface ILinkCalloutDialogOptions {
|
||||
insertTitle?: string,
|
||||
@@ -116,7 +116,8 @@ export class LinkCalloutDialog extends Modal {
|
||||
this._contextViewService,
|
||||
{
|
||||
placeholder: constants.linkTextPlaceholder,
|
||||
ariaLabel: constants.linkTextLabel
|
||||
ariaLabel: constants.linkTextLabel,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
});
|
||||
this._linkTextInputBox.value = this._defaultLabel;
|
||||
DOM.append(linkTextRow, linkTextInputContainer);
|
||||
@@ -133,15 +134,17 @@ export class LinkCalloutDialog extends Modal {
|
||||
this._contextViewService,
|
||||
{
|
||||
placeholder: constants.linkAddressPlaceholder,
|
||||
ariaLabel: constants.linkAddressLabel
|
||||
ariaLabel: constants.linkAddressLabel,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
});
|
||||
this._linkUrlInputBox.value = this._defaultLinkUrl;
|
||||
DOM.append(linkAddressRow, linkAddressInputContainer);
|
||||
}
|
||||
|
||||
private registerListeners(): void {
|
||||
this._register(styler.attachInputBoxStyler(this._linkTextInputBox, this._themeService));
|
||||
this._register(styler.attachInputBoxStyler(this._linkUrlInputBox, this._themeService));
|
||||
// {{SQL CARBON TODO}} - apply styles
|
||||
// this._register(styler.attachInputBoxStyler(this._linkTextInputBox, this._themeService));
|
||||
// this._register(styler.attachInputBoxStyler(this._linkUrlInputBox, this._themeService));
|
||||
}
|
||||
|
||||
protected override onAccept(e?: StandardKeyboardEvent) {
|
||||
|
||||
@@ -397,22 +397,22 @@ export class CellToggleMoreActionViewItem extends DropdownMenuActionViewItem {
|
||||
this.setActionContext(this._cellContext);
|
||||
this._actions = [
|
||||
instantiationService.createInstance(ConvertCellAction, 'convertCell', localize('convertCell', "Convert Cell")),
|
||||
new Separator(),
|
||||
<any>new Separator(),
|
||||
instantiationService.createInstance(RunCellsAction, 'runAllAbove', localize('runAllAbove', "Run Cells Above"), false),
|
||||
instantiationService.createInstance(RunCellsAction, 'runAllBelow', localize('runAllBelow', "Run Cells Below"), true),
|
||||
new Separator(),
|
||||
<any>new Separator(),
|
||||
instantiationService.createInstance(AddCellFromContextAction, 'codeAbove', localize('codeAbove', "Insert Code Above"), CellTypes.Code, false),
|
||||
instantiationService.createInstance(AddCellFromContextAction, 'codeBelow', localize('codeBelow', "Insert Code Below"), CellTypes.Code, true),
|
||||
new Separator(),
|
||||
<any>new Separator(),
|
||||
instantiationService.createInstance(AddCellFromContextAction, 'markdownAbove', localize('markdownAbove', "Insert Text Above"), CellTypes.Markdown, false),
|
||||
instantiationService.createInstance(AddCellFromContextAction, 'markdownBelow', localize('markdownBelow', "Insert Text Below"), CellTypes.Markdown, true),
|
||||
new Separator(),
|
||||
<any>new Separator(),
|
||||
instantiationService.createInstance(CollapseCellAction, 'collapseCell', localize('collapseCell', "Collapse Cell"), true),
|
||||
instantiationService.createInstance(CollapseCellAction, 'expandCell', localize('expandCell', "Expand Cell"), false),
|
||||
new Separator(),
|
||||
<any>new Separator(),
|
||||
instantiationService.createInstance(ParametersCellAction, 'makeParameterCell', localize('makeParameterCell', "Make parameter cell"), true),
|
||||
instantiationService.createInstance(ParametersCellAction, 'removeParameterCell', localize('RemoveParameterCell', "Remove parameter cell"), false),
|
||||
new Separator(),
|
||||
<any>new Separator(),
|
||||
instantiationService.createInstance(ClearCellOutputAction, 'clear', localize('clear', "Clear Result")),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -406,8 +406,9 @@ export class CodeComponent extends CellView implements OnInit, OnChanges {
|
||||
|
||||
private updateLanguageMode(): void {
|
||||
if (this._editorModel && this._editor) {
|
||||
let modeValue = this._languageService.createById(this.cellModel.language);
|
||||
this._modelService.setMode(this._editorModel, modeValue);
|
||||
// let modeValue = this._languageService.createById(this.cellModel.language);
|
||||
// {{SQL CARBON TODO}} - do we still need this
|
||||
// this._modelService.setMode(this._editorModel, modeValue);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ export class LinkHandlerDirective {
|
||||
// Store fragment before converting, since asFileUri removes the uri fragment
|
||||
const fragment = uri.fragment;
|
||||
// Convert vscode-file protocol URIs to file since that's what Notebooks expect to work with
|
||||
uri = FileAccess.asFileUri(uri);
|
||||
uri = FileAccess.uriToFileUri(uri);
|
||||
if (this.isSupportedLink(uri)) {
|
||||
if (fragment && fragment.length > 0 && uri.fsPath === this.workbenchFilePath.fsPath) {
|
||||
this.notebookService.navigateTo(this.notebookUri, fragment);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
import 'vs/css!./markdownToolbar';
|
||||
import * as DOM from 'vs/base/browser/dom';
|
||||
import { Button, IButtonStyles } from 'sql/base/browser/ui/button/button';
|
||||
import { Button } from 'sql/base/browser/ui/button/button';
|
||||
import { Component, Input, Inject, ViewChild, ElementRef, HostListener } from '@angular/core';
|
||||
import { localize } from 'vs/nls';
|
||||
import { CellEditModes, ICellModel } from 'sql/workbench/services/notebook/browser/models/modelInterfaces';
|
||||
@@ -28,6 +28,7 @@ import { NotebookLinkHandler } from 'sql/workbench/contrib/notebook/browser/note
|
||||
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||
import { KeyCode } from 'vs/base/common/keyCodes';
|
||||
import { FileAccess } from 'vs/base/common/network';
|
||||
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
export const MARKDOWN_TOOLBAR_SELECTOR: string = 'markdown-toolbar-component';
|
||||
const linksRegex = /\[(?<text>.+)\]\((?<url>[^ ]+)(?: "(?<title>.+)")?\)/;
|
||||
@@ -117,13 +118,15 @@ export class MarkdownToolbarComponent extends AngularDisposable {
|
||||
private initActionBar() {
|
||||
let linkButtonContainer = DOM.$('li.action-item');
|
||||
linkButtonContainer.setAttribute('role', 'presentation');
|
||||
let linkButton = new Button(linkButtonContainer);
|
||||
let linkButton = new Button(linkButtonContainer, defaultButtonStyles);
|
||||
linkButton.title = this.insertLink;
|
||||
linkButton.element.setAttribute('class', 'action-label codicon insert-link masked-icon');
|
||||
let buttonStyle: IButtonStyles = {
|
||||
buttonBackground: null
|
||||
};
|
||||
linkButton.style(buttonStyle);
|
||||
|
||||
// {{SQL CARBON TODO}} - reenable
|
||||
// let buttonStyle: IButtonStyles = {
|
||||
// buttonBackground: null
|
||||
// };
|
||||
// linkButton.style(buttonStyle);
|
||||
|
||||
this._register(DOM.addDisposableListener(linkButtonContainer, DOM.EventType.CLICK, async e => {
|
||||
await this.onInsertButtonClick(e, MarkdownButtonType.LINK_PREVIEW);
|
||||
@@ -131,11 +134,12 @@ export class MarkdownToolbarComponent extends AngularDisposable {
|
||||
|
||||
let imageButtonContainer = DOM.$('li.action-item');
|
||||
imageButtonContainer.setAttribute('role', 'presentation');
|
||||
let imageButton = new Button(imageButtonContainer);
|
||||
let imageButton = new Button(imageButtonContainer, defaultButtonStyles);
|
||||
imageButton.title = this.insertImage;
|
||||
imageButton.element.setAttribute('class', 'action-label codicon insert-image masked-icon');
|
||||
|
||||
imageButton.style(buttonStyle);
|
||||
// {{SQL CARBON TODO}} - reenable
|
||||
//imageButton.style(buttonStyle);
|
||||
|
||||
this._register(DOM.addDisposableListener(imageButtonContainer, DOM.EventType.CLICK, async e => {
|
||||
await this.onInsertButtonClick(e, MarkdownButtonType.IMAGE_PREVIEW);
|
||||
@@ -263,7 +267,7 @@ export class MarkdownToolbarComponent extends AngularDisposable {
|
||||
// VS Code blocks loading directly from the file protocol - we have to transform it to a vscode-file URI
|
||||
// first. Currently we assume that the path here is always going to be a path since we don't support
|
||||
// embedding images from web links.
|
||||
const uri = FileAccess.asBrowserUri(URI.file(imageCalloutResult.imagePath));
|
||||
const uri = FileAccess.uriToBrowserUri(URI.file(imageCalloutResult.imagePath));
|
||||
let base64String = await this.getFileContentBase64(uri);
|
||||
let mimeType = await this.getFileMimeType(uri);
|
||||
const originalImageName: string = path.basename(imageCalloutResult.imagePath).replace(/\s/g, '');
|
||||
|
||||
@@ -35,7 +35,7 @@ const componentRegistry = <IMimeComponentRegistry>Registry.as(Extensions.MimeCom
|
||||
templateUrl: decodeURI(require.toUrl('./output.component.html'))
|
||||
})
|
||||
export class OutputComponent extends CellView implements OnInit, AfterViewInit {
|
||||
@ViewChild('output', { read: ElementRef }) override output: ElementRef;
|
||||
@ViewChild('output', { read: ElementRef }) protected override output: ElementRef;
|
||||
@ViewChild(ComponentHostDirective) componentHost: ComponentHostDirective;
|
||||
@Input() cellOutput: nb.ICellOutput;
|
||||
@Input() cellModel: ICellModel;
|
||||
|
||||
@@ -24,6 +24,7 @@ import { attachInputBoxStyler } from 'sql/platform/theme/common/styler';
|
||||
import { AngularDisposable } from 'sql/base/browser/lifecycle';
|
||||
import { Deferred } from 'sql/base/common/promise';
|
||||
import { ICellModel, CellExecutionState } from 'sql/workbench/services/notebook/browser/models/modelInterfaces';
|
||||
import { defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
export const STDIN_SELECTOR: string = 'stdin-component';
|
||||
@Component({
|
||||
@@ -52,7 +53,8 @@ export class StdInComponent extends AngularDisposable implements AfterViewInit {
|
||||
ngAfterViewInit(): void {
|
||||
let inputOptions: IInputOptions = {
|
||||
placeholder: '',
|
||||
ariaLabel: this.prompt
|
||||
ariaLabel: this.prompt,
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
};
|
||||
this._input = new InputBox(this._inputContainer.nativeElement, this.contextViewService, inputOptions);
|
||||
if (this.password) {
|
||||
|
||||
@@ -41,7 +41,7 @@ const USER_SELECT_CLASS = 'actionselect';
|
||||
templateUrl: decodeURI(require.toUrl('./textCell.component.html'))
|
||||
})
|
||||
export class TextCellComponent extends CellView implements OnInit, OnChanges {
|
||||
@ViewChild('preview', { read: ElementRef }) override output: ElementRef;
|
||||
@ViewChild('preview', { read: ElementRef }) protected override output: ElementRef;
|
||||
@ViewChildren(CodeComponent) private markdowncodeCell: QueryList<CodeComponent>;
|
||||
|
||||
@Input() cellModel: ICellModel;
|
||||
|
||||
@@ -12,7 +12,7 @@ import * as dom from 'vs/base/browser/dom';
|
||||
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||
import { IMouseEvent } from 'vs/base/browser/mouseEvent';
|
||||
import { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';
|
||||
import { FindInput, IFindInputStyles } from 'vs/base/browser/ui/findinput/findInput';
|
||||
import { FindInput } from 'vs/base/browser/ui/findinput/findInput';
|
||||
import { IMessage as InputBoxMessage } from 'vs/base/browser/ui/inputbox/inputBox';
|
||||
import { Widget } from 'vs/base/browser/ui/widget';
|
||||
import { Sash, ISashEvent, Orientation, IVerticalSashLayoutProvider } from 'vs/base/browser/ui/sash/sash';
|
||||
@@ -22,9 +22,9 @@ import { FIND_IDS, CONTEXT_FIND_INPUT_FOCUSED } from 'vs/editor/contrib/find/bro
|
||||
import { FindReplaceState, FindReplaceStateChangedEvent } from 'vs/editor/contrib/find/browser/findState';
|
||||
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { IColorTheme, IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
import * as colors from 'vs/platform/theme/common/colorRegistry';
|
||||
import { IEditorAction } from 'vs/editor/common/editorCommon';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { defaultInputBoxStyles, defaultToggleStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
const NLS_FIND_INPUT_LABEL = nls.localize('label.find', "Find");
|
||||
const NLS_FIND_INPUT_PLACEHOLDER = nls.localize('placeholder.find', "Find");
|
||||
@@ -300,19 +300,20 @@ export class FindWidget extends Widget implements IOverlayWidget, IVerticalSashL
|
||||
}
|
||||
|
||||
private _applyTheme(theme: IColorTheme) {
|
||||
let inputStyles: IFindInputStyles = {
|
||||
inputActiveOptionBorder: theme.getColor(colors.inputActiveOptionBorder),
|
||||
inputBackground: theme.getColor(colors.inputBackground),
|
||||
inputForeground: theme.getColor(colors.inputForeground),
|
||||
inputBorder: theme.getColor(colors.inputBorder),
|
||||
inputValidationInfoBackground: theme.getColor(colors.inputValidationInfoBackground),
|
||||
inputValidationInfoBorder: theme.getColor(colors.inputValidationInfoBorder),
|
||||
inputValidationWarningBackground: theme.getColor(colors.inputValidationWarningBackground),
|
||||
inputValidationWarningBorder: theme.getColor(colors.inputValidationWarningBorder),
|
||||
inputValidationErrorBackground: theme.getColor(colors.inputValidationErrorBackground),
|
||||
inputValidationErrorBorder: theme.getColor(colors.inputValidationErrorBorder)
|
||||
};
|
||||
this._findInput.style(inputStyles);
|
||||
// {{SQL CARBON TODO}} - reenable styles
|
||||
// let inputStyles: IFindInputStyles = {
|
||||
// inputActiveOptionBorder: theme.getColor(colors.inputActiveOptionBorder),
|
||||
// inputBackground: theme.getColor(colors.inputBackground),
|
||||
// inputForeground: theme.getColor(colors.inputForeground),
|
||||
// inputBorder: theme.getColor(colors.inputBorder),
|
||||
// inputValidationInfoBackground: theme.getColor(colors.inputValidationInfoBackground),
|
||||
// inputValidationInfoBorder: theme.getColor(colors.inputValidationInfoBorder),
|
||||
// inputValidationWarningBackground: theme.getColor(colors.inputValidationWarningBackground),
|
||||
// inputValidationWarningBorder: theme.getColor(colors.inputValidationWarningBorder),
|
||||
// inputValidationErrorBackground: theme.getColor(colors.inputValidationErrorBackground),
|
||||
// inputValidationErrorBorder: theme.getColor(colors.inputValidationErrorBorder)
|
||||
// };
|
||||
//this._findInput.style(inputStyles);
|
||||
}
|
||||
|
||||
// ----- Public
|
||||
@@ -380,13 +381,15 @@ export class FindWidget extends Widget implements IOverlayWidget, IVerticalSashL
|
||||
|
||||
private _buildFindPart(): HTMLElement {
|
||||
// Find input
|
||||
this._findInput = this._register(new FindInput(null, this._contextViewProvider, true, {
|
||||
this._findInput = this._register(new FindInput(null, this._contextViewProvider, {
|
||||
width: FIND_INPUT_AREA_WIDTH,
|
||||
label: NLS_FIND_INPUT_LABEL,
|
||||
placeholder: NLS_FIND_INPUT_PLACEHOLDER,
|
||||
appendCaseSensitiveLabel: this._keybindingLabelFor(FIND_IDS.ToggleCaseSensitiveCommand),
|
||||
appendWholeWordsLabel: this._keybindingLabelFor(FIND_IDS.ToggleWholeWordCommand),
|
||||
appendRegexLabel: this._keybindingLabelFor(FIND_IDS.ToggleRegexCommand),
|
||||
inputBoxStyles: defaultInputBoxStyles,
|
||||
toggleStyles: defaultToggleStyles,
|
||||
validation: (value: string): InputBoxMessage => {
|
||||
if (value.length === 0) {
|
||||
return null;
|
||||
|
||||
@@ -133,7 +133,7 @@ export class HTMLMarkdownConverter {
|
||||
if (node?.src) {
|
||||
// Image URIs are converted to vscode-file URIs for the underlying HTML so that they can be loaded by ADS,
|
||||
// but we want to convert them back to their file URI when converting back to markdown for displaying to the user
|
||||
let imgUri = FileAccess.asFileUri(URI.parse(node.src));
|
||||
let imgUri = FileAccess.uriToFileUri(URI.parse(node.src));
|
||||
const notebookFolder: string = this.notebookUri ? path.join(path.dirname(this.notebookUri.fsPath), path.sep) : '';
|
||||
let relativePath = findPathRelativeToContent(notebookFolder, imgUri);
|
||||
if (relativePath) {
|
||||
|
||||
@@ -42,6 +42,7 @@ import { ITextResourcePropertiesService } from 'vs/editor/common/services/textRe
|
||||
import { IEditorResolverService } from 'vs/workbench/services/editor/common/editorResolverService';
|
||||
import { isEqual } from 'vs/base/common/resources';
|
||||
import { NotebookEditor } from 'sql/workbench/contrib/notebook/browser/notebookEditor';
|
||||
import { IAttachedView } from 'vs/editor/common/model';
|
||||
|
||||
export type ModeViewSaveHandler = (handle: number) => Thenable<boolean>;
|
||||
const languageAssociationRegistry = Registry.as<ILanguageAssociationRegistry>(LanguageAssociationExtensions.LanguageAssociations);
|
||||
@@ -239,7 +240,7 @@ export abstract class NotebookInput extends EditorInput implements INotebookInpu
|
||||
private _modelResolveInProgress: boolean = false;
|
||||
private _modelResolved: Deferred<void> = new Deferred<void>();
|
||||
private _containerResolved: Deferred<void> = new Deferred<void>();
|
||||
|
||||
private _attachedView: IAttachedView;
|
||||
private _notebookFindModel: NotebookFindModel;
|
||||
|
||||
constructor(private _title: string,
|
||||
@@ -445,19 +446,19 @@ export abstract class NotebookInput extends EditorInput implements INotebookInpu
|
||||
let textOrUntitledEditorModel: ITextFileEditorModel | IUntitledTextEditorModel | TextResourceEditorModel;
|
||||
if (this.resource.scheme === Schemas.untitled) {
|
||||
if (this._untitledEditorModel) {
|
||||
this._untitledEditorModel.textEditorModel.onBeforeAttached();
|
||||
this._attachedView = this._untitledEditorModel.textEditorModel.onBeforeAttached();
|
||||
textOrUntitledEditorModel = this._untitledEditorModel;
|
||||
} else {
|
||||
let resolvedInput = await this._textInput.resolve();
|
||||
if (!(resolvedInput instanceof BinaryEditorModel)) {
|
||||
(resolvedInput as ITextEditorModel).textEditorModel.onBeforeAttached();
|
||||
this._attachedView = (resolvedInput as ITextEditorModel).textEditorModel.onBeforeAttached();
|
||||
}
|
||||
textOrUntitledEditorModel = resolvedInput as TextFileEditorModel | UntitledTextEditorModel | TextResourceEditorModel;
|
||||
}
|
||||
} else {
|
||||
const textEditorModelReference = await this.textModelService.createModelReference(this.resource);
|
||||
this._register(textEditorModelReference);
|
||||
textEditorModelReference.object.textEditorModel.onBeforeAttached();
|
||||
this._attachedView = textEditorModelReference.object.textEditorModel.onBeforeAttached();
|
||||
await textEditorModelReference.object.resolve();
|
||||
textOrUntitledEditorModel = textEditorModelReference.object as TextFileEditorModel | TextResourceEditorModel;
|
||||
}
|
||||
@@ -509,8 +510,8 @@ export abstract class NotebookInput extends EditorInput implements INotebookInpu
|
||||
}
|
||||
|
||||
public override dispose(): void {
|
||||
if (this._model && this._model.editorModel && this._model.editorModel.textEditorModel) {
|
||||
this._model.editorModel.textEditorModel.onBeforeDetached();
|
||||
if (this._model && this._model.editorModel && this._model.editorModel.textEditorModel && this._attachedView) {
|
||||
this._model.editorModel.textEditorModel.onBeforeDetached(this._attachedView);
|
||||
}
|
||||
this._disposeContainer();
|
||||
super.dispose();
|
||||
|
||||
@@ -13,7 +13,7 @@ import { localize } from 'vs/nls';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { attachSelectBoxStyler } from 'vs/platform/theme/common/styler';
|
||||
import { attachSelectBoxStyler } from 'sql/platform/theme/common/vsstyler';
|
||||
import { MenuId, IMenuService, MenuItemAction } from 'vs/platform/actions/common/actions';
|
||||
import { IAction, Action, SubmenuAction } from 'vs/base/common/actions';
|
||||
import { IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||
@@ -59,6 +59,7 @@ import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||
import { KeyCode } from 'vs/base/common/keyCodes';
|
||||
import { debounce } from 'vs/base/common/decorators';
|
||||
import { ToggleAddCellDropdownAction } from 'sql/workbench/contrib/notebook/browser/cellToolbarActions';
|
||||
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
export const NOTEBOOK_SELECTOR: string = 'notebook-component';
|
||||
const PRIORITY = 105;
|
||||
@@ -632,7 +633,7 @@ export class NotebookComponent extends AngularDisposable implements OnInit, OnDe
|
||||
|
||||
private addButton(label: string, onDidClick?: () => void, enabled?: boolean): void {
|
||||
const container = DOM.append(this.bookNav.nativeElement, DOM.$('.dialog-message-button'));
|
||||
let button = new Button(container);
|
||||
let button = new Button(container, defaultButtonStyles);
|
||||
button.label = label;
|
||||
if (onDidClick) {
|
||||
this._register(button.onDidClick(onDidClick));
|
||||
@@ -669,7 +670,7 @@ export class NotebookComponent extends AngularDisposable implements OnInit, OnDe
|
||||
let secondary: IAction[] = [];
|
||||
let notebookBarMenu = this.menuService.createMenu(MenuId.NotebookToolbar, this.contextKeyService);
|
||||
let groups = notebookBarMenu.getActions({ arg: null, shouldForwardArgs: true });
|
||||
fillInActions(groups, { primary, secondary }, false, g => g === '', Number.MAX_SAFE_INTEGER, (action: SubmenuAction, group: string, groupSize: number) => group === undefined || group === '');
|
||||
fillInActions(groups, { primary, secondary }, false, g => g === '', (action: SubmenuAction, group: string, groupSize: number) => group === undefined || group === '');
|
||||
|
||||
this._actionBar.clear();
|
||||
this._actionBar.setContent(this._initialToolbarContent);
|
||||
|
||||
@@ -13,12 +13,9 @@ import { ILanguageAssociationRegistry, Extensions as LanguageAssociationExtensio
|
||||
import { UntitledNotebookInput } from 'sql/workbench/contrib/notebook/browser/models/untitledNotebookInput';
|
||||
import { FileNotebookInput } from 'sql/workbench/contrib/notebook/browser/models/fileNotebookInput';
|
||||
import { FileNoteBookEditorSerializer, NotebookEditorLanguageAssociation, UntitledNotebookEditorSerializer } from 'sql/workbench/contrib/notebook/browser/models/notebookEditorFactory';
|
||||
import { IWorkbenchActionRegistry, Extensions as WorkbenchActionsExtensions } from 'vs/workbench/common/actions';
|
||||
import { SyncActionDescriptor, registerAction2, MenuRegistry, MenuId, Action2 } from 'vs/platform/actions/common/actions';
|
||||
|
||||
import { NotebookEditor } from 'sql/workbench/contrib/notebook/browser/notebookEditor';
|
||||
import { NewNotebookAction, NewNotebookTask } from 'sql/workbench/contrib/notebook/browser/notebookActions';
|
||||
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
|
||||
import { IConfigurationRegistry, Extensions as ConfigExtensions, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry';
|
||||
import { GridOutputComponent } from 'sql/workbench/contrib/notebook/browser/outputs/gridOutput.component';
|
||||
import { PlotlyOutputComponent } from 'sql/workbench/contrib/notebook/browser/outputs/plotlyOutput.component';
|
||||
@@ -71,6 +68,7 @@ import { ConnectionType, IConnectableInput, IConnectionCompletionOptions, IConne
|
||||
import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService';
|
||||
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
|
||||
import { onUnexpectedError } from 'vs/base/common/errors';
|
||||
import { Action2, MenuId, MenuRegistry, registerAction2 } from 'vs/platform/actions/common/actions';
|
||||
|
||||
Registry.as<IEditorFactoryRegistry>(EditorExtensions.EditorFactory)
|
||||
.registerEditorSerializer(FileNotebookInput.ID, FileNoteBookEditorSerializer);
|
||||
@@ -88,18 +86,8 @@ Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench)
|
||||
.registerWorkbenchContribution(NotebookThemingContribution, LifecyclePhase.Restored);
|
||||
|
||||
// Global Actions
|
||||
const actionRegistry = Registry.as<IWorkbenchActionRegistry>(WorkbenchActionsExtensions.WorkbenchActions);
|
||||
|
||||
actionRegistry.registerWorkbenchAction(
|
||||
SyncActionDescriptor.create(
|
||||
NewNotebookAction,
|
||||
NewNotebookAction.ID,
|
||||
NewNotebookAction.LABEL,
|
||||
{ primary: KeyMod.WinCtrl | KeyMod.Alt | KeyCode.KeyN },
|
||||
|
||||
),
|
||||
NewNotebookAction.LABEL
|
||||
);
|
||||
registerAction2(NewNotebookAction);
|
||||
|
||||
// New Notebook
|
||||
new NewNotebookTask().registerTask();
|
||||
@@ -154,7 +142,7 @@ CommandsRegistry.registerCommand({
|
||||
id: OE_NEW_NOTEBOOK_COMMAND_ID,
|
||||
handler: (accessor, actionContext: ObjectExplorerActionsContext) => {
|
||||
const instantiationService = accessor.get(IInstantiationService);
|
||||
return instantiationService.createInstance(NewNotebookAction, NewNotebookAction.ID, NewNotebookAction.LABEL).run(actionContext);
|
||||
return instantiationService.createInstance(NewNotebookAction).run(accessor, actionContext);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -172,7 +160,7 @@ const ExplorerNotebookActionID = 'explorer.notebook';
|
||||
CommandsRegistry.registerCommand(ExplorerNotebookActionID, (accessor, context: ManageActionContext) => {
|
||||
const instantiationService = accessor.get(IInstantiationService);
|
||||
const connectedContext: ConnectedContext = { connectionProfile: context.profile };
|
||||
instantiationService.createInstance(NewNotebookAction, NewNotebookAction.ID, NewNotebookAction.LABEL).run({ connectionProfile: connectedContext.connectionProfile, isConnectionNode: false, nodeInfo: undefined });
|
||||
instantiationService.createInstance(NewNotebookAction).run(accessor, { connectionProfile: connectedContext.connectionProfile, isConnectionNode: false, nodeInfo: undefined });
|
||||
});
|
||||
|
||||
MenuRegistry.appendMenuItem(MenuId.ExplorerWidgetContext, {
|
||||
@@ -190,7 +178,7 @@ const toggleTabFocusAction = new ToggleTabFocusModeAction();
|
||||
CommandsRegistry.registerCommand({
|
||||
id: TOGGLE_TAB_FOCUS_COMMAND_ID,
|
||||
handler: (accessor) => {
|
||||
toggleTabFocusAction.run(accessor, undefined);
|
||||
toggleTabFocusAction.run(accessor);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -290,7 +278,7 @@ MenuRegistry.appendMenuItem(MenuId.CommandPalette, {
|
||||
MenuRegistry.appendMenuItem(MenuId.CommandPalette, {
|
||||
command: {
|
||||
id: TOGGLE_TAB_FOCUS_COMMAND_ID,
|
||||
title: toggleTabFocusAction.label,
|
||||
title: ToggleTabFocusModeAction.LABEL,
|
||||
},
|
||||
when: ContextKeyExpr.and(ActiveEditorContext.isEqualTo(NotebookEditor.ID))
|
||||
});
|
||||
|
||||
@@ -36,11 +36,14 @@ import { IAdsTelemetryService } from 'sql/platform/telemetry/common/telemetry';
|
||||
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
|
||||
import { KernelsLanguage } from 'sql/workbench/services/notebook/common/notebookConstants';
|
||||
import { INotebookViews } from 'sql/workbench/services/notebook/browser/notebookViews/notebookViews';
|
||||
import { Schemas } from 'vs/base/common/network';
|
||||
import { FileAccess, Schemas } from 'vs/base/common/network';
|
||||
import { CONFIG_WORKBENCH_ENABLEPREVIEWFEATURES, CONFIG_WORKBENCH_USEVSCODENOTEBOOKS } from 'sql/workbench/common/constants';
|
||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||
import { Task } from 'sql/workbench/services/tasks/browser/tasksRegistry';
|
||||
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||
import { Action2 } from 'vs/platform/actions/common/actions';
|
||||
import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
|
||||
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
|
||||
|
||||
const msgLoading = localize('loading', "Loading kernels...");
|
||||
export const msgChanging = localize('changing', "Changing kernel...");
|
||||
@@ -904,34 +907,40 @@ export class NewNotebookTask extends Task {
|
||||
}
|
||||
}
|
||||
|
||||
export class NewNotebookAction extends Action {
|
||||
|
||||
export class NewNotebookAction extends Action2 {
|
||||
public static readonly ID = 'notebook.command.new';
|
||||
public static readonly LABEL_ORG = 'New Notebook';
|
||||
public static readonly LABEL = localize('newNotebookAction', "New Notebook");
|
||||
|
||||
constructor(
|
||||
id: string,
|
||||
label: string,
|
||||
@IObjectExplorerService private objectExplorerService: IObjectExplorerService,
|
||||
@IAdsTelemetryService private _telemetryService: IAdsTelemetryService,
|
||||
@INotebookService private _notebookService: INotebookService,
|
||||
@IConfigurationService private _configurationService: IConfigurationService,
|
||||
@ICommandService private _commandService: ICommandService,
|
||||
) {
|
||||
super(id, label);
|
||||
this.class = 'notebook-action new-notebook';
|
||||
constructor() {
|
||||
super({
|
||||
id: NewNotebookAction.ID,
|
||||
icon: {
|
||||
light: FileAccess.asBrowserUri(`sql/workbench/services/connection/browser/media/light/new_notebook.svg`),
|
||||
dark: FileAccess.asBrowserUri(`sql/workbench/services/connection/browser/media/dark/new_notebook_inverse.svg`)
|
||||
},
|
||||
title: { value: NewNotebookAction.LABEL, original: NewNotebookAction.LABEL_ORG },
|
||||
keybinding: { weight: KeybindingWeight.WorkbenchContrib, primary: KeyMod.WinCtrl | KeyMod.Alt | KeyCode.KeyN },
|
||||
f1: true
|
||||
});
|
||||
}
|
||||
|
||||
override async run(context?: azdata.ObjectExplorerContext): Promise<void> {
|
||||
public override async run(accessor: ServicesAccessor, context?: azdata.ObjectExplorerContext): Promise<void> {
|
||||
const objectExplorerService = accessor.get(IObjectExplorerService);
|
||||
const telemetryService = accessor.get(IAdsTelemetryService);
|
||||
const notebookService = accessor.get(INotebookService);
|
||||
const configurationService = accessor.get(IConfigurationService);
|
||||
const commandService = accessor.get(ICommandService);
|
||||
|
||||
let connProfile: azdata.IConnectionProfile;
|
||||
if (context && context.nodeInfo) {
|
||||
let node = await this.objectExplorerService.getTreeNode(context.connectionProfile.id, context.nodeInfo.nodePath);
|
||||
let node = await objectExplorerService.getTreeNode(context.connectionProfile.id, context.nodeInfo.nodePath);
|
||||
connProfile = TreeUpdateUtils.getConnectionProfile(node).toIConnectionProfile();
|
||||
} else if (context && context.connectionProfile) {
|
||||
connProfile = context.connectionProfile;
|
||||
}
|
||||
|
||||
await openNewNotebook(this._telemetryService, this._notebookService, this._configurationService, this._commandService, connProfile);
|
||||
await openNewNotebook(telemetryService, notebookService, configurationService, commandService, connProfile);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -202,7 +202,7 @@ export class NotebookEditorComponent extends AngularDisposable {
|
||||
let secondary: IAction[] = [];
|
||||
let notebookBarMenu = this.menuService.createMenu(MenuId.NotebookToolbar, this.contextKeyService);
|
||||
let groups = notebookBarMenu.getActions({ arg: null, shouldForwardArgs: true });
|
||||
fillInActions(groups, { primary, secondary }, false, g => g === '', Number.MAX_SAFE_INTEGER, (action: SubmenuAction, group: string, groupSize: number) => group === undefined || group === '');
|
||||
fillInActions(groups, { primary, secondary }, false, g => g === '', (action: SubmenuAction, group: string, groupSize: number) => group === undefined || group === '');
|
||||
}
|
||||
|
||||
private get modelFactory(): IModelFactory {
|
||||
|
||||
@@ -152,7 +152,7 @@ export class NotebookEditor extends EditorPane implements IFindNotebookControlle
|
||||
/**
|
||||
* @param parent Called to create the editor in the parent element.
|
||||
*/
|
||||
public createEditor(parent: HTMLElement): void {
|
||||
protected createEditor(parent: HTMLElement): void {
|
||||
this._overlay = document.createElement('div');
|
||||
this._overlay.className = 'overlayWidgets monaco-editor';
|
||||
this._overlay.style.width = '100%';
|
||||
|
||||
@@ -26,7 +26,7 @@ import { ViewPaneContainer } from 'vs/workbench/browser/parts/views/viewPaneCont
|
||||
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
|
||||
import { NotebookSearchWidget, INotebookExplorerSearchOptions } from 'sql/workbench/contrib/notebook/browser/notebookExplorer/notebookSearchWidget';
|
||||
import * as Constants from 'sql/workbench/common/constants';
|
||||
import { IChangeEvent } from 'vs/workbench/contrib/search/common/searchModel';
|
||||
import { IChangeEvent } from 'vs/workbench/contrib/search/browser/searchModel';
|
||||
import { Delayer } from 'vs/base/common/async';
|
||||
import { ITextQuery, IPatternInfo } from 'vs/workbench/services/search/common/search';
|
||||
import { MessageType } from 'vs/base/browser/ui/inputbox/inputBox';
|
||||
@@ -42,6 +42,7 @@ import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
|
||||
import { ITextQueryBuilderOptions, QueryBuilder } from 'vs/workbench/services/search/common/queryBuilder';
|
||||
import { registerIcon } from 'vs/platform/theme/common/iconRegistry';
|
||||
import { Codicon } from 'vs/base/common/codicons';
|
||||
import { defaultInputBoxStyles, defaultToggleStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
export const VIEWLET_ID = 'workbench.view.notebooks';
|
||||
|
||||
@@ -122,7 +123,9 @@ export class NotebookExplorerViewPaneContainer extends ViewPaneContainer {
|
||||
isWholeWords: false,
|
||||
searchHistory: [],
|
||||
replaceHistory: [],
|
||||
preserveCase: false
|
||||
preserveCase: false,
|
||||
inputBoxStyles: defaultInputBoxStyles,
|
||||
toggleStyles: defaultToggleStyles
|
||||
}));
|
||||
|
||||
|
||||
|
||||
@@ -12,9 +12,9 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
|
||||
import { IViewDescriptorService, IViewsService } from 'vs/workbench/common/views';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace';
|
||||
import { ISearchWorkbenchService, Match, FileMatch, SearchModel, IChangeEvent, searchMatchComparer, RenderableMatch, FolderMatch, SearchResult } from 'vs/workbench/contrib/search/common/searchModel';
|
||||
import { ISearchWorkbenchService, Match, FileMatch, SearchModel, IChangeEvent, searchMatchComparer, RenderableMatch, FolderMatch, SearchResult } from 'vs/workbench/contrib/search/browser/searchModel';
|
||||
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { IReplaceService } from 'vs/workbench/contrib/search/common/replace';
|
||||
import { IReplaceService } from 'vs/workbench/contrib/search/browser/replace';
|
||||
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
|
||||
import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences';
|
||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
@@ -30,7 +30,7 @@ import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
|
||||
import { IOpenerService } from 'vs/platform/opener/common/opener';
|
||||
import * as dom from 'vs/base/browser/dom';
|
||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import * as nls from 'vs/nls';
|
||||
import { ISearchComplete, SearchCompletionExitCode, ITextQuery, SearchSortOrder, ISearchConfigurationProperties } from 'vs/workbench/services/search/common/search';
|
||||
import { MessageType } from 'vs/base/browser/ui/inputbox/inputBox';
|
||||
@@ -47,6 +47,8 @@ import { SearchUIState } from 'vs/workbench/contrib/search/common/search';
|
||||
import { IAdsTelemetryService } from 'sql/platform/telemetry/common/telemetry';
|
||||
import * as TelemetryKeys from 'sql/platform/telemetry/common/telemetryKeys';
|
||||
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
|
||||
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
|
||||
const $ = dom.$;
|
||||
|
||||
@@ -87,10 +89,17 @@ export class NotebookSearchView extends SearchView {
|
||||
@IOpenerService openerService: IOpenerService,
|
||||
@ITelemetryService telemetryService: ITelemetryService,
|
||||
@ICommandService commandService: ICommandService,
|
||||
@INotebookService notebookService: INotebookService,
|
||||
@ILogService logService: ILogService,
|
||||
@IAdsTelemetryService private _telemetryService: IAdsTelemetryService,
|
||||
) {
|
||||
|
||||
super(options, fileService, editorService, codeEditorService, progressService, notificationService, dialogService, commandService, contextViewService, instantiationService, viewDescriptorService, configurationService, contextService, searchWorkbenchService, contextKeyService, replaceService, textFileService, preferencesService, themeService, searchHistoryService, contextMenuService, menuService, accessibilityService, keybindingService, storageService, openerService, telemetryService);
|
||||
super(options, fileService, editorService, codeEditorService, progressService,
|
||||
notificationService, dialogService, commandService, contextViewService, instantiationService,
|
||||
viewDescriptorService, configurationService, contextService, searchWorkbenchService, contextKeyService,
|
||||
replaceService, textFileService, preferencesService, themeService, searchHistoryService, contextMenuService,
|
||||
menuService, accessibilityService, keybindingService, storageService, openerService, telemetryService,
|
||||
notebookService, logService);
|
||||
|
||||
this.memento = new Memento(this.id, storageService);
|
||||
this.viewletState = this.memento.getMemento(StorageScope.WORKSPACE, StorageTarget.MACHINE);
|
||||
@@ -148,13 +157,13 @@ export class NotebookSearchView extends SearchView {
|
||||
e.browserEvent.stopPropagation();
|
||||
|
||||
const actions: IAction[] = [];
|
||||
const actionsDisposable = createAndFillInContextMenuActions(this.contextMenu, { shouldForwardArgs: true }, actions);
|
||||
createAndFillInContextMenuActions(this.contextMenu, { shouldForwardArgs: true }, actions);
|
||||
|
||||
this.contextMenuService.showContextMenu({
|
||||
getAnchor: () => e.anchor,
|
||||
getActions: () => actions,
|
||||
getActionsContext: () => e.element,
|
||||
onHide: () => dispose(actionsDisposable)
|
||||
onHide: () => { }
|
||||
});
|
||||
}
|
||||
|
||||
@@ -184,7 +193,7 @@ export class NotebookSearchView extends SearchView {
|
||||
}
|
||||
}
|
||||
|
||||
override renderBody(parent: HTMLElement): void {
|
||||
protected override renderBody(parent: HTMLElement): void {
|
||||
super.callRenderBody(parent);
|
||||
|
||||
this.container = dom.append(parent, dom.$('.search-view'));
|
||||
|
||||
@@ -11,18 +11,18 @@ import { IFocusTracker, append, $, trackFocus } from 'vs/base/browser/dom';
|
||||
import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { Emitter, Event } from 'vs/base/common/event';
|
||||
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
||||
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
|
||||
import * as Constants from 'sql/workbench/common/constants';
|
||||
import { IMessage } from 'vs/base/browser/ui/inputbox/inputBox';
|
||||
import { appendKeyBindingLabel } from 'vs/workbench/contrib/search/browser/searchActions';
|
||||
import { attachFindReplaceInputBoxStyler } from 'vs/platform/theme/common/styler';
|
||||
import { IInputBoxStyles, IMessage } from 'vs/base/browser/ui/inputbox/inputBox';
|
||||
import { appendKeyBindingLabel } from 'vs/workbench/contrib/search/browser/searchActionsBase';
|
||||
import { isMacintosh } from 'vs/base/common/platform';
|
||||
import { KeyMod, KeyCode } from 'vs/base/common/keyCodes';
|
||||
import { ContextScopedFindInput } from 'vs/platform/history/browser/contextScopedHistoryWidget';
|
||||
import { IToggleStyles } from 'vs/base/browser/ui/toggle/toggle';
|
||||
import { defaultInputBoxStyles, defaultToggleStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
export interface INotebookExplorerSearchOptions {
|
||||
value?: string;
|
||||
@@ -33,6 +33,8 @@ export interface INotebookExplorerSearchOptions {
|
||||
replaceHistory?: string[];
|
||||
preserveCase?: boolean;
|
||||
showContextToggle?: boolean;
|
||||
inputBoxStyles: IInputBoxStyles;
|
||||
toggleStyles: IToggleStyles;
|
||||
}
|
||||
|
||||
const ctrlKeyMod = (isMacintosh ? KeyMod.WinCtrl : KeyMod.CtrlCmd);
|
||||
@@ -83,7 +85,6 @@ export class NotebookSearchWidget extends Widget {
|
||||
container: HTMLElement,
|
||||
options: INotebookExplorerSearchOptions,
|
||||
@IContextViewService private readonly contextViewService: IContextViewService,
|
||||
@IThemeService private readonly themeService: IThemeService,
|
||||
@IContextKeyService private readonly contextKeyService: IContextKeyService,
|
||||
@IKeybindingService private readonly keyBindingService: IKeybindingService,
|
||||
@IClipboardService private readonly clipboardServce: IClipboardService,
|
||||
@@ -133,16 +134,17 @@ export class NotebookSearchWidget extends Widget {
|
||||
label: localize('label.Search', 'Search: Type Search Term and press Enter to search or Escape to cancel'),
|
||||
validation: (value: string) => this.validateSearchInput(value),
|
||||
placeholder: localize('search.placeHolder', "Search"),
|
||||
appendCaseSensitiveLabel: appendKeyBindingLabel('', this.keyBindingService.lookupKeybinding(Constants.ToggleCaseSensitiveCommandId), this.keyBindingService),
|
||||
appendWholeWordsLabel: appendKeyBindingLabel('', this.keyBindingService.lookupKeybinding(Constants.ToggleWholeWordCommandId), this.keyBindingService),
|
||||
appendRegexLabel: appendKeyBindingLabel('', this.keyBindingService.lookupKeybinding(Constants.ToggleRegexCommandId), this.keyBindingService),
|
||||
appendCaseSensitiveLabel: appendKeyBindingLabel('', this.keyBindingService.lookupKeybinding(Constants.ToggleCaseSensitiveCommandId)),
|
||||
appendWholeWordsLabel: appendKeyBindingLabel('', this.keyBindingService.lookupKeybinding(Constants.ToggleWholeWordCommandId)),
|
||||
appendRegexLabel: appendKeyBindingLabel('', this.keyBindingService.lookupKeybinding(Constants.ToggleRegexCommandId)),
|
||||
history: options.searchHistory,
|
||||
flexibleHeight: true
|
||||
flexibleHeight: true,
|
||||
inputBoxStyles: options.inputBoxStyles ?? defaultInputBoxStyles,
|
||||
toggleStyles: options.toggleStyles ?? defaultToggleStyles
|
||||
};
|
||||
|
||||
const searchInputContainer = append(parent, $('.search-container.input-box'));
|
||||
this.searchInput = this._register(new ContextScopedFindInput(searchInputContainer, this.contextViewService, inputOptions, this.contextKeyService, true));
|
||||
this._register(attachFindReplaceInputBoxStyler(this.searchInput, this.themeService));
|
||||
this.searchInput = this._register(new ContextScopedFindInput(searchInputContainer, this.contextViewService, inputOptions, this.contextKeyService));
|
||||
this.searchInput.onKeyDown((keyboardEvent: IKeyboardEvent) => this.onSearchInputKeyDown(keyboardEvent));
|
||||
this.searchInput.setValue(options.value || '');
|
||||
this.searchInput.setRegex(!!options.isRegex);
|
||||
|
||||
@@ -24,7 +24,6 @@ import { bootstrapAngular } from 'sql/workbench/services/bootstrap/browser/boots
|
||||
import { localize } from 'vs/nls';
|
||||
import { NotebookViewsExtension } from 'sql/workbench/services/notebook/browser/notebookViews/notebookViewsExtension';
|
||||
import { InsertCellsModule } from 'sql/workbench/contrib/notebook/browser/notebookViews/insertCellsModal.module';
|
||||
import { attachButtonStyler } from 'vs/platform/theme/common/styler';
|
||||
import { truncate } from 'vs/base/common/strings';
|
||||
import { toJpeg } from 'html-to-image';
|
||||
import { IComponentEventArgs } from 'sql/platform/dashboard/browser/interfaces';
|
||||
@@ -97,7 +96,6 @@ export class InsertCellsModal extends Modal {
|
||||
public viewModel: CellOptionsModel;
|
||||
|
||||
private _submitButton: Button;
|
||||
private _cancelButton: Button;
|
||||
private _maxTitleLength: number = 20;
|
||||
private _moduleRef?: NgModuleRef<typeof InsertCellsModule>;
|
||||
|
||||
@@ -210,10 +208,7 @@ export class InsertCellsModal extends Modal {
|
||||
super.render();
|
||||
|
||||
this._submitButton = this.addFooterButton(localize('insertCellsModal.Insert', "Insert"), () => this.onSubmitHandler());
|
||||
this._cancelButton = this.addFooterButton(localize('insertCellsModal.Cancel', "Cancel"), () => this.onCancelHandler(), 'right', true);
|
||||
|
||||
this._register(attachButtonStyler(this._submitButton, this._themeService));
|
||||
this._register(attachButtonStyler(this._cancelButton, this._themeService));
|
||||
this.addFooterButton(localize('insertCellsModal.Cancel', "Cancel"), () => this.onCancelHandler(), 'right', true);
|
||||
|
||||
attachModalDialogStyler(this, this._themeService);
|
||||
this.validate();
|
||||
|
||||
@@ -15,17 +15,16 @@ import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
import * as DOM from 'vs/base/browser/dom';
|
||||
import { attachInputBoxStyler } from 'sql/platform/theme/common/styler';
|
||||
import { attachButtonStyler } from 'vs/platform/theme/common/styler';
|
||||
import { localize } from 'vs/nls';
|
||||
import { IInputOptions, MessageType } from 'vs/base/browser/ui/inputbox/inputBox';
|
||||
import { InputBox } from 'sql/base/browser/ui/inputBox/inputBox';
|
||||
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||
import { INotebookView } from 'sql/workbench/services/notebook/browser/notebookViews/notebookViews';
|
||||
import { ITextResourcePropertiesService } from 'vs/editor/common/services/textResourceConfiguration';
|
||||
import { defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
||||
export class ViewOptionsModal extends Modal {
|
||||
private _submitButton: Button;
|
||||
private _cancelButton: Button;
|
||||
private _optionsMap: { [name: string]: InputBox | Checkbox } = {};
|
||||
private _viewNameInput: InputBox;
|
||||
|
||||
@@ -81,7 +80,8 @@ export class ViewOptionsModal extends Modal {
|
||||
return undefined;
|
||||
}
|
||||
},
|
||||
ariaLabel: localize('viewOptionsModal.name', "View Name")
|
||||
ariaLabel: localize('viewOptionsModal.name', "View Name"),
|
||||
inputBoxStyles: defaultInputBoxStyles
|
||||
});
|
||||
}
|
||||
|
||||
@@ -97,11 +97,9 @@ export class ViewOptionsModal extends Modal {
|
||||
super.render();
|
||||
|
||||
this._submitButton = this.addFooterButton(localize('save', "Save"), () => this.onSubmitHandler());
|
||||
this._cancelButton = this.addFooterButton(localize('cancel', "Cancel"), () => this.onCancelHandler(), 'right', true);
|
||||
this.addFooterButton(localize('cancel', "Cancel"), () => this.onCancelHandler(), 'right', true);
|
||||
|
||||
this._register(attachInputBoxStyler(this._viewNameInput!, this._themeService));
|
||||
this._register(attachButtonStyler(this._submitButton, this._themeService));
|
||||
this._register(attachButtonStyler(this._cancelButton, this._themeService));
|
||||
|
||||
this._register(this._viewNameInput.onDidChange(v => this.validate()));
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ export class NotebookMarkdownRenderer {
|
||||
uri.scheme === Schemas.data ||
|
||||
uri.scheme === Schemas.attachment ||
|
||||
uri.scheme === Schemas.vscodeFileResource)) {
|
||||
uri = FileAccess.asBrowserUri(URI.file(href));
|
||||
uri = FileAccess.uriToBrowserUri(URI.file(href));
|
||||
}
|
||||
attributes.push(`src="${uri.toString(true)}"`);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,9 @@ import { ICellModel } from 'sql/workbench/services/notebook/browser/models/model
|
||||
import { MimeModel } from 'sql/workbench/services/notebook/browser/outputs/mimemodel';
|
||||
import { getErrorMessage } from 'vs/base/common/errors';
|
||||
import * as Plotly from 'plotly.js';
|
||||
import { getResizesObserver } from 'vs/workbench/contrib/notebook/browser/view/cellParts/cellWidgets';
|
||||
import * as DOM from 'vs/base/browser/dom';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { IDimension } from 'vs/base/browser/dom';
|
||||
type ObjectType = object;
|
||||
|
||||
interface FigureLayout extends ObjectType {
|
||||
@@ -147,3 +149,67 @@ export class PlotlyOutputComponent extends AngularDisposable implements IMimeCom
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// port the below code from vscode cellWidgets file since it was deleted
|
||||
export interface IResizeObserver {
|
||||
startObserving: () => void;
|
||||
stopObserving: () => void;
|
||||
getWidth(): number;
|
||||
getHeight(): number;
|
||||
dispose(): void;
|
||||
}
|
||||
|
||||
export class BrowserResizeObserver extends Disposable implements IResizeObserver {
|
||||
private readonly referenceDomElement: HTMLElement | null;
|
||||
|
||||
private readonly observer: ResizeObserver;
|
||||
private width: number;
|
||||
private height: number;
|
||||
|
||||
constructor(referenceDomElement: HTMLElement | null, dimension: IDimension | undefined, changeCallback: () => void) {
|
||||
super();
|
||||
|
||||
this.referenceDomElement = referenceDomElement;
|
||||
this.width = -1;
|
||||
this.height = -1;
|
||||
|
||||
this.observer = new ResizeObserver((entries: any) => {
|
||||
for (const entry of entries) {
|
||||
if (entry.target === referenceDomElement && entry.contentRect) {
|
||||
if (this.width !== entry.contentRect.width || this.height !== entry.contentRect.height) {
|
||||
this.width = entry.contentRect.width;
|
||||
this.height = entry.contentRect.height;
|
||||
DOM.scheduleAtNextAnimationFrame(() => {
|
||||
changeCallback();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
getWidth(): number {
|
||||
return this.width;
|
||||
}
|
||||
|
||||
getHeight(): number {
|
||||
return this.height;
|
||||
}
|
||||
|
||||
startObserving(): void {
|
||||
this.observer.observe(this.referenceDomElement!);
|
||||
}
|
||||
|
||||
stopObserving(): void {
|
||||
this.observer.unobserve(this.referenceDomElement!);
|
||||
}
|
||||
|
||||
override dispose(): void {
|
||||
this.observer.disconnect();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
export function getResizesObserver(referenceDomElement: HTMLElement | null, dimension: IDimension | undefined, changeCallback: () => void): IResizeObserver {
|
||||
return new BrowserResizeObserver(referenceDomElement, dimension, changeCallback);
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView
|
||||
import { ContextMenuService } from 'vs/platform/contextview/browser/contextMenuService';
|
||||
import { CellModel } from 'sql/workbench/services/notebook/browser/models/cell';
|
||||
import { IProductService } from 'vs/platform/product/common/productService';
|
||||
import { Separator } from 'vs/base/common/actions';
|
||||
import { Action, Separator } from 'vs/base/common/actions';
|
||||
import { ICellModel, INotebookModelOptions } from 'sql/workbench/services/notebook/browser/models/modelInterfaces';
|
||||
import { NotebookModel } from 'sql/workbench/services/notebook/browser/models/notebookModel';
|
||||
import { NotebookEditorContentLoader } from 'sql/workbench/contrib/notebook/browser/models/notebookInput';
|
||||
@@ -36,11 +36,12 @@ import { NBFORMAT, NBFORMAT_MINOR } from 'sql/workbench/common/constants';
|
||||
import { Emitter } from 'vs/base/common/event';
|
||||
import { IStandardKernelWithProvider } from 'sql/workbench/services/notebook/browser/models/notebookUtils';
|
||||
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
|
||||
import { ICommandService, NullCommandService } from 'vs/platform/commands/common/commands';
|
||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { ILanguageService } from 'vs/editor/common/languages/language';
|
||||
import { ILogService, NullLogService } from 'vs/platform/log/common/log';
|
||||
import { mock } from 'vs/base/test/common/mock';
|
||||
import { NullCommandService } from 'vs/platform/commands/test/common/nullCommandService';
|
||||
|
||||
suite('CellToolbarActions', function (): void {
|
||||
suite('removeDuplicatedAndStartingSeparators', function (): void {
|
||||
@@ -59,12 +60,12 @@ suite('CellToolbarActions', function (): void {
|
||||
assert(actions.length === 3);
|
||||
});
|
||||
test('Array with only separators is cleared', function (): void {
|
||||
const actions = [new Separator(), new Separator(), new Separator()];
|
||||
const actions = <Action[]>[new Separator(), new Separator(), new Separator()];
|
||||
removeDuplicatedAndStartingSeparators(actions);
|
||||
assert(actions.length === 0);
|
||||
});
|
||||
test('Array with separators not on the ends is unchanged', function (): void {
|
||||
const actions = [
|
||||
const actions = <Action[]>[
|
||||
TypeMoq.Mock.ofType(RunCellsAction).object,
|
||||
new Separator(),
|
||||
TypeMoq.Mock.ofType(AddCellFromContextAction).object,
|
||||
@@ -75,7 +76,7 @@ suite('CellToolbarActions', function (): void {
|
||||
assert(actions.length === 5);
|
||||
});
|
||||
test('Duplicate separators are removed', function (): void {
|
||||
const actions = [
|
||||
const actions = <Action[]>[
|
||||
TypeMoq.Mock.ofType(RunCellsAction).object,
|
||||
new Separator(),
|
||||
new Separator(),
|
||||
@@ -89,7 +90,7 @@ suite('CellToolbarActions', function (): void {
|
||||
assert(actions.length === 5);
|
||||
});
|
||||
test('Starting and ending separators are removed', function (): void {
|
||||
const actions = [
|
||||
const actions = <Action[]>[
|
||||
new Separator(),
|
||||
new Separator(),
|
||||
TypeMoq.Mock.ofType(RunCellsAction).object,
|
||||
|
||||
@@ -28,7 +28,6 @@ import { Schemas } from 'vs/base/common/network';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { generateUuid } from 'vs/base/common/uuid';
|
||||
import { IOverlayWidget, IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser';
|
||||
import { getRandomString } from 'vs/editor/test/common/model/linesTextBuffer/textBufferAutoTestUtils';
|
||||
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { ContextViewService } from 'vs/platform/contextview/browser/contextViewService';
|
||||
import { DidUninstallExtensionEvent, IExtensionManagementService, InstallExtensionEvent } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
@@ -59,6 +58,20 @@ import { IEditorOptions } from 'vs/platform/editor/common/editor';
|
||||
import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration';
|
||||
import { FindReplaceStateChangedEvent, INewFindReplaceState } from 'vs/editor/contrib/find/browser/findState';
|
||||
import { IEditorResolverService } from 'vs/workbench/services/editor/common/editorResolverService';
|
||||
import { CharCode } from 'vs/base/common/charCode';
|
||||
|
||||
function getRandomInt(min: number, max: number): number {
|
||||
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||||
}
|
||||
|
||||
function getRandomString(minLength: number, maxLength: number): string {
|
||||
const length = getRandomInt(minLength, maxLength);
|
||||
let r = '';
|
||||
for (let i = 0; i < length; i++) {
|
||||
r += String.fromCharCode(getRandomInt(CharCode.a, CharCode.z));
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
class NotebookModelStub extends stubs.NotebookModelStub {
|
||||
public contentChangedEmitter = new Emitter<NotebookContentChange>();
|
||||
|
||||
@@ -498,8 +498,8 @@ suite.skip('NotebookService:', function (): void {
|
||||
const methodName = 'removeContributedProvidersFromCache';
|
||||
await notebookService.registrationComplete;
|
||||
const providerId = 'providerId1';
|
||||
extensionServiceMock.setup(x => x.getExtensions()).returns(() => {
|
||||
return Promise.resolve([
|
||||
extensionServiceMock.setup(x => x.extensions).returns(() => {
|
||||
return [
|
||||
<IExtensionDescription>{
|
||||
name: 'testExtension',
|
||||
publisher: 'Test',
|
||||
@@ -521,7 +521,7 @@ suite.skip('NotebookService:', function (): void {
|
||||
forceReload: true,
|
||||
targetPlatform: undefined
|
||||
}
|
||||
]);
|
||||
];
|
||||
});
|
||||
const extensionIdentifier = (<DidUninstallExtensionEvent>{
|
||||
identifier: {
|
||||
@@ -542,7 +542,7 @@ suite.skip('NotebookService:', function (): void {
|
||||
};
|
||||
errorHandler.setUnexpectedErrorHandler(onUnexpectedErrorVerifier);
|
||||
await notebookService.registrationComplete;
|
||||
extensionServiceMock.setup(x => x.getExtensions()).returns(() => undefined);
|
||||
extensionServiceMock.setup(x => x.extensions).returns(() => undefined);
|
||||
const extensionIdentifier = (<DidUninstallExtensionEvent>{
|
||||
identifier: {
|
||||
id: 'id1'
|
||||
|
||||
@@ -35,8 +35,9 @@ import { NBFORMAT, NBFORMAT_MINOR } from 'sql/workbench/common/constants';
|
||||
import { Emitter } from 'vs/base/common/event';
|
||||
import { IStandardKernelWithProvider } from 'sql/workbench/services/notebook/browser/models/notebookUtils';
|
||||
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
|
||||
import { ICommandService, NullCommandService } from 'vs/platform/commands/common/commands';
|
||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||
import { ILanguageService } from 'vs/editor/common/languages/language';
|
||||
import { NullCommandService } from 'vs/platform/commands/test/common/nullCommandService';
|
||||
|
||||
let initialNotebookContent: nb.INotebookContents = {
|
||||
cells: [{
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user