Compare commits

...

17 Commits

Author SHA1 Message Date
Alan Yu
295004c42e Adding CMS readme (#5417) 2019-05-07 17:59:15 -07:00
Alan Ren
45333e8852 bump the version of schema compare extension (#5411) 2019-05-07 17:59:06 -07:00
Aditya Bist
e1280022d6 Fix agent css in packaged builds (#5409)
* fix agent css in packaged

* fix agent css
2019-05-07 14:24:22 -07:00
Karl Burtram
c90d630703 Bump agent, import, profiler extension versions (#5405) 2019-05-07 13:03:28 -07:00
Karl Burtram
bfcdf28cbc Merge branch 'release/1.7' of https://github.com/Microsoft/azuredatastudio into release/1.7 2019-05-07 12:35:58 -07:00
Anthony Dresser
1c694cbd3b Fix css to fix new dashboard tab dialog (#5385)
* fix css to fix new dashboard tab dialog

* add readonly
2019-05-07 09:08:13 -07:00
kisantia
2b0aba119d bump dacpac extension version (#5387) 2019-05-07 09:08:04 -07:00
Karl Burtram
59cc8e5d7f Bump the VS Code version metadata (#5392) 2019-05-07 09:07:53 -07:00
Chris LaFreniere
f8da5bd1c7 Don't scroll when running code cell if in view (#5365) 2019-05-07 09:03:19 -07:00
Anthony Dresser
26667eb1dc Fix css to fix new dashboard tab dialog (#5385)
* fix css to fix new dashboard tab dialog

* add readonly
2019-05-06 17:33:26 -07:00
kisantia
5e6a9ca9fa bump dacpac extension version (#5387) 2019-05-06 17:33:19 -07:00
Karl Burtram
4ecf5fae84 Bump the VS Code version metadata (#5392) 2019-05-06 17:33:13 -07:00
Alan Ren
f76500d5f0 fix profiler formatter issue (#5372) 2019-05-06 15:58:55 -07:00
Maddy
2a212edf1e Maddy/newline overrides edit data (#5364)
* formatting it before displaying

* replace with space

* added comments and method to handle the line break space conversion
2019-05-06 15:58:47 -07:00
Anthony Dresser
7bcd19987b add a applystyle function with saftey checks in header filter (#5380) 2019-05-06 15:58:39 -07:00
Anthony Dresser
0ce5f02dd2 fix error icon (#5373) 2019-05-06 15:58:31 -07:00
udeeshagautam
0831e9e161 Changing the start for Schema compare and adding some text (#5356)
* Dialog Ok will not start Schema compare explit compare will. Adding wait text.

* Fixing variable name and spelling
2019-05-06 15:58:20 -07:00
20 changed files with 126 additions and 49 deletions

View File

@@ -2,7 +2,7 @@
"name": "agent", "name": "agent",
"displayName": "SQL Server Agent", "displayName": "SQL Server Agent",
"description": "Manage and troubleshoot SQL Server Agent jobs", "description": "Manage and troubleshoot SQL Server Agent jobs",
"version": "0.38.0", "version": "0.39.0",
"publisher": "Microsoft", "publisher": "Microsoft",
"preview": true, "preview": true,
"license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/master/LICENSE.txt", "license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/master/LICENSE.txt",

28
extensions/cms/README.md Normal file
View File

@@ -0,0 +1,28 @@
# Microsoft Central Management Servers for Azure Data Studio
## Central Management Servers *(preview)*
The Central Management Servers extension allows users to store a list of instances of SQL Server that is organized into one or more groups. Actions that are taken using a CMS group act on all servers in the server group.
This experience is currently in its initial preview. Please report issues and feature requests [here.](https://github.com/microsoft/azuredatastudio/issues)
<img src="https://user-images.githubusercontent.com/30873802/57338070-eba5af00-70e0-11e9-911c-ddaa166b59b8.png" width="800px" />
### How do I start Central Management Servers?
Central Management Servers can be viewed by clicking on the Connections icon (Ctrl/Cmd + G). The first time you download the extension, the CMS view will be minimized, and you can open it by click on **Central Management Servers**
### Where can I learn more about Central Management Servers
To learn more conceptually about Central Management Servers, [you can read more here.](https://docs.microsoft.com/sql/ssms/register-servers/create-a-central-management-server-and-server-group)
## Code of Conduct
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
## Privacy Statement
The [Microsoft Enterprise and Developer Privacy Statement](https://privacy.microsoft.com/en-us/privacystatement) describes the privacy statement of this software.
## License
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the [Source EULA](https://raw.githubusercontent.com/Microsoft/azuredatastudio/master/LICENSE.txt).

View File

@@ -2,7 +2,7 @@
"name": "dacpac", "name": "dacpac",
"displayName": "SQL Server Dacpac", "displayName": "SQL Server Dacpac",
"description": "SQL Server Dacpac for Azure Data Studio.", "description": "SQL Server Dacpac for Azure Data Studio.",
"version": "0.1.0", "version": "0.2.0",
"publisher": "Microsoft", "publisher": "Microsoft",
"preview": true, "preview": true,
"engines": { "engines": {

View File

@@ -2,7 +2,7 @@
"name": "import", "name": "import",
"displayName": "SQL Server Import", "displayName": "SQL Server Import",
"description": "SQL Server Import for Azure Data Studio supports importing CSV or JSON files into SQL Server.", "description": "SQL Server Import for Azure Data Studio supports importing CSV or JSON files into SQL Server.",
"version": "0.7.0", "version": "0.8.0",
"publisher": "Microsoft", "publisher": "Microsoft",
"preview": true, "preview": true,
"engines": { "engines": {

View File

@@ -2,7 +2,7 @@
"name": "profiler", "name": "profiler",
"displayName": "SQL Server Profiler", "displayName": "SQL Server Profiler",
"description": "SQL Server Profiler for Azure Data Studio", "description": "SQL Server Profiler for Azure Data Studio",
"version": "0.7.0", "version": "0.8.0",
"publisher": "Microsoft", "publisher": "Microsoft",
"preview": true, "preview": true,
"license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/master/LICENSE.txt", "license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/master/LICENSE.txt",

View File

@@ -2,7 +2,7 @@
"name": "schema-compare", "name": "schema-compare",
"displayName": "SQL Server Schema Compare", "displayName": "SQL Server Schema Compare",
"description": "SQL Server Schema Compare for Azure Data Studio supports comparing the schemas of databases and dacpacs.", "description": "SQL Server Schema Compare for Azure Data Studio supports comparing the schemas of databases and dacpacs.",
"version": "0.1.0", "version": "0.2.0",
"publisher": "Microsoft", "publisher": "Microsoft",
"preview": true, "preview": true,
"engines": { "engines": {

View File

@@ -11,7 +11,7 @@ import * as os from 'os';
import { SchemaCompareResult } from '../schemaCompareResult'; import { SchemaCompareResult } from '../schemaCompareResult';
const localize = nls.loadMessageBundle(); const localize = nls.loadMessageBundle();
const CompareButtonText: string = localize('schemaCompareDialog.compare', 'Compare'); const OkButtonText: string = localize('schemaCompareDialog.ok', 'Ok');
const CancelButtonText: string = localize('schemaCompareDialog.cancel', 'Cancel'); const CancelButtonText: string = localize('schemaCompareDialog.cancel', 'Cancel');
const SourceTitle: string = localize('schemaCompareDialog.SourceTitle', 'Source'); const SourceTitle: string = localize('schemaCompareDialog.SourceTitle', 'Source');
const TargetTitle: string = localize('schemaCompareDialog.TargetTitle', 'Target'); const TargetTitle: string = localize('schemaCompareDialog.TargetTitle', 'Target');
@@ -75,7 +75,7 @@ export class SchemaCompareDialog {
this.initializeDialog(); this.initializeDialog();
this.dialog.okButton.label = CompareButtonText; this.dialog.okButton.label = OkButtonText;
this.dialog.okButton.onClick(async () => await this.execute()); this.dialog.okButton.onClick(async () => await this.execute());
this.dialog.cancelButton.label = CancelButtonText; this.dialog.cancelButton.label = CancelButtonText;

View File

@@ -16,6 +16,8 @@ const diffEditorTitle = localize('schemaCompare.ObjectDefinitionsTitle', 'Object
export class SchemaCompareResult { export class SchemaCompareResult {
private differencesTable: azdata.TableComponent; private differencesTable: azdata.TableComponent;
private loader: azdata.LoadingComponent; private loader: azdata.LoadingComponent;
private startText: azdata.TextComponent;
private waitText: azdata.TextComponent;
private editor: azdata.workspace.ModelViewEditor; private editor: azdata.workspace.ModelViewEditor;
private diffEditor: azdata.DiffEditorComponent; private diffEditor: azdata.DiffEditorComponent;
private splitView: azdata.SplitViewContainer; private splitView: azdata.SplitViewContainer;
@@ -76,7 +78,7 @@ export class SchemaCompareResult {
this.createGenerateScriptButton(view); this.createGenerateScriptButton(view);
this.createApplyButton(view); this.createApplyButton(view);
this.createOptionsButton(view); this.createOptionsButton(view);
this.resetButtons(); this.resetButtons(true);
let toolBar = view.modelBuilder.toolbarContainer(); let toolBar = view.modelBuilder.toolbarContainer();
toolBar.addToolbarItems([{ toolBar.addToolbarItems([{
@@ -131,15 +133,24 @@ export class SchemaCompareResult {
this.sourceTargetFlexLayout.addItem(this.targetNameComponent, { CSSStyles: { 'width': '45%', 'height': '25px', 'margin-top': '10px', 'margin-left': '15px' } }); this.sourceTargetFlexLayout.addItem(this.targetNameComponent, { CSSStyles: { 'width': '45%', 'height': '25px', 'margin-top': '10px', 'margin-left': '15px' } });
this.loader = view.modelBuilder.loadingComponent().component(); this.loader = view.modelBuilder.loadingComponent().component();
this.waitText = view.modelBuilder.text().withProperties({
value: localize('schemaCompare.waitText', 'Initializing Comparison. This might take a moment.')
}).component();
this.startText = view.modelBuilder.text().withProperties({
value: localize('schemaCompare.startText', 'Press Compare to start Schema Comparison.')
}).component();
this.noDifferencesLabel = view.modelBuilder.text().withProperties({ this.noDifferencesLabel = view.modelBuilder.text().withProperties({
value: localize('schemaCompare.noDifferences', 'No schema differences were found') value: localize('schemaCompare.noDifferences', 'No schema differences were found.')
}).component(); }).component();
this.flexModel = view.modelBuilder.flexContainer().component(); this.flexModel = view.modelBuilder.flexContainer().component();
this.flexModel.addItem(toolBar.component(), { flex: 'none' }); this.flexModel.addItem(toolBar.component(), { flex: 'none' });
this.flexModel.addItem(sourceTargetLabels, { flex: 'none' }); this.flexModel.addItem(sourceTargetLabels, { flex: 'none' });
this.flexModel.addItem(this.sourceTargetFlexLayout, { flex: 'none' }); this.flexModel.addItem(this.sourceTargetFlexLayout, { flex: 'none' });
this.flexModel.addItem(this.loader, { CSSStyles: { 'margin-top': '30px' } }); this.flexModel.addItem(this.startText, { CSSStyles: { 'margin': 'auto' } });
this.flexModel.setLayout({ this.flexModel.setLayout({
flexFlow: 'column', flexFlow: 'column',
height: '100%' height: '100%'
@@ -151,7 +162,6 @@ export class SchemaCompareResult {
public start(): void { public start(): void {
this.editor.openEditor(); this.editor.openEditor();
this.execute();
} }
private async execute(): Promise<void> { private async execute(): Promise<void> {
@@ -202,6 +212,7 @@ export class SchemaCompareResult {
}); });
this.flexModel.removeItem(this.loader); this.flexModel.removeItem(this.loader);
this.flexModel.removeItem(this.waitText);
this.switchButton.enabled = true; this.switchButton.enabled = true;
this.compareButton.enabled = true; this.compareButton.enabled = true;
this.optionsButton.enabled = true; this.optionsButton.enabled = true;
@@ -267,10 +278,12 @@ export class SchemaCompareResult {
return script; return script;
} }
private reExecute(): void { private startCompare(): void {
this.flexModel.removeItem(this.splitView); this.flexModel.removeItem(this.splitView);
this.flexModel.removeItem(this.noDifferencesLabel); this.flexModel.removeItem(this.noDifferencesLabel);
this.flexModel.removeItem(this.startText);
this.flexModel.addItem(this.loader, { CSSStyles: { 'margin-top': '30px' } }); this.flexModel.addItem(this.loader, { CSSStyles: { 'margin-top': '30px' } });
this.flexModel.addItem(this.waitText, { CSSStyles: { 'margin-top': '30px', 'align-self': 'center' } });
this.diffEditor.updateProperties({ this.diffEditor.updateProperties({
contentLeft: os.EOL, contentLeft: os.EOL,
contentRight: os.EOL, contentRight: os.EOL,
@@ -278,7 +291,7 @@ export class SchemaCompareResult {
}); });
this.differencesTable.selectedRows = null; this.differencesTable.selectedRows = null;
this.resetButtons(); this.resetButtons(false);
this.execute(); this.execute();
} }
@@ -293,7 +306,7 @@ export class SchemaCompareResult {
}).component(); }).component();
this.compareButton.onDidClick(async (click) => { this.compareButton.onDidClick(async (click) => {
this.reExecute(); this.startCompare();
}); });
} }
@@ -376,10 +389,17 @@ export class SchemaCompareResult {
}); });
} }
private resetButtons(): void { private resetButtons(beforeCompareStart: boolean): void {
this.compareButton.enabled = false; if (beforeCompareStart) {
this.optionsButton.enabled = false; this.compareButton.enabled = true;
this.switchButton.enabled = false; this.optionsButton.enabled = true;
this.switchButton.enabled = true;
}
else {
this.compareButton.enabled = false;
this.optionsButton.enabled = false;
this.switchButton.enabled = false;
}
this.generateScriptButton.enabled = false; this.generateScriptButton.enabled = false;
this.applyButton.enabled = false; this.applyButton.enabled = false;
this.generateScriptButton.title = localize('schemaCompare.generateScriptEnabledButton', 'Generate script to deploy changes to target'); this.generateScriptButton.title = localize('schemaCompare.generateScriptEnabledButton', 'Generate script to deploy changes to target');
@@ -421,7 +441,7 @@ export class SchemaCompareResult {
] ]
}); });
this.reExecute(); this.startCompare();
}); });
} }

View File

@@ -34,7 +34,7 @@
"gettingStartedUrl": "https://go.microsoft.com/fwlink/?linkid=862039", "gettingStartedUrl": "https://go.microsoft.com/fwlink/?linkid=862039",
"releaseNotesUrl": "https://go.microsoft.com/fwlink/?linkid=875578", "releaseNotesUrl": "https://go.microsoft.com/fwlink/?linkid=875578",
"documentationUrl": "https://go.microsoft.com/fwlink/?linkid=862277", "documentationUrl": "https://go.microsoft.com/fwlink/?linkid=862277",
"vscodeVersion": "1.31.1", "vscodeVersion": "1.33.1",
"commit": "9ca6200018fc206d67a47229f991901a8a453781", "commit": "9ca6200018fc206d67a47229f991901a8a453781",
"date": "2017-12-15T12:00:00.000Z", "date": "2017-12-15T12:00:00.000Z",
"recommendedExtensions": [ "recommendedExtensions": [
@@ -47,6 +47,7 @@
"Microsoft.import", "Microsoft.import",
"Microsoft.powershell", "Microsoft.powershell",
"Microsoft.profiler", "Microsoft.profiler",
"Microsoft.schema-compare",
"Microsoft.sql-vnext", "Microsoft.sql-vnext",
"Redgate.sql-search", "Redgate.sql-search",
"IDERA.sqldm-performance-insights" "IDERA.sqldm-performance-insights"

View File

@@ -28,6 +28,7 @@ export class HeaderFilter {
private cancelButton: Button; private cancelButton: Button;
private workingFilters: any; private workingFilters: any;
private columnDef: any; private columnDef: any;
private buttonStyles: IButtonStyles;
constructor(options: any) { constructor(options: any) {
this.options = mixin(options, this.defaults, false); this.options = mixin(options, this.defaults, false);
@@ -220,6 +221,8 @@ export class HeaderFilter {
const cancelElement = jQuery('#filter-cancel-button'); const cancelElement = jQuery('#filter-cancel-button');
cancelElement.bind('click', () => this.hideMenu()); cancelElement.bind('click', () => this.hideMenu());
this.applyStyles();
jQuery(':checkbox', $filter).bind('click', (e) => { jQuery(':checkbox', $filter).bind('click', (e) => {
this.workingFilters = this.changeWorkingFilter(filterItems, this.workingFilters, jQuery(e.target)); this.workingFilters = this.changeWorkingFilter(filterItems, this.workingFilters, jQuery(e.target));
}); });
@@ -237,9 +240,25 @@ export class HeaderFilter {
} }
public style(styles: IButtonStyles): void { public style(styles: IButtonStyles): void {
this.okButton.style(styles); this.buttonStyles = styles;
this.clearButton.style(styles); this.applyStyles();
this.cancelButton.style(styles); }
private applyStyles() {
if (this.buttonStyles) {
const styles = this.buttonStyles;
if (this.okButton) {
this.okButton.style(styles);
}
if (this.clearButton) {
this.clearButton.style(styles);
}
if (this.cancelButton) {
this.cancelButton.style(styles);
}
}
} }
private columnsResized() { private columnsResized() {

View File

@@ -176,10 +176,12 @@ export class EditDataComponent extends GridParentComponent implements OnInit, On
this.overrideCellFn = (rowNumber, columnId, value?, data?): string => { this.overrideCellFn = (rowNumber, columnId, value?, data?): string => {
let returnVal = ''; let returnVal = '';
// replace the line breaks with space since the edit text control cannot
// render line breaks and strips them, updating the value.
if (Services.DBCellValue.isDBCellValue(value)) { if (Services.DBCellValue.isDBCellValue(value)) {
returnVal = value.displayValue; returnVal = this.spacefyLinebreaks(value.displayValue);
} else if (typeof value === 'string') { } else if (typeof value === 'string') {
returnVal = value; returnVal = this.spacefyLinebreaks(value);
} }
return returnVal; return returnVal;
}; };
@@ -405,6 +407,13 @@ export class EditDataComponent extends GridParentComponent implements OnInit, On
this.refreshGrid(); this.refreshGrid();
} }
/**
* Replace the line breaks with space.
*/
private spacefyLinebreaks(inputStr: string): string {
return inputStr.replace(/(\r\n|\n|\r)/g, ' ');
}
private refreshGrid(): Thenable<void> { private refreshGrid(): Thenable<void> {
return new Promise<void>((resolve, reject) => { return new Promise<void>((resolve, reject) => {
const self = this; const self = this;

View File

@@ -259,6 +259,8 @@ table.step-list tr.step-row td {
jobhistory-component { jobhistory-component {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100%;
width: 100%;
} }
jobhistory-component > .jobhistory-heading-container { jobhistory-component > .jobhistory-heading-container {

View File

@@ -15,12 +15,6 @@ jobsview-component {
display: block; display: block;
} }
jobhistory-component {
height: 100%;
width : 100%;
display: block;
}
.job-heading-container { .job-heading-container {
height: 50px; height: 50px;
border-bottom: 3px solid #f4f4f4; border-bottom: 3px solid #f4f4f4;

View File

@@ -306,7 +306,7 @@ export class CodeComponent extends AngularDisposable implements OnInit, OnChange
private setFocusAndScroll(): void { private setFocusAndScroll(): void {
if (this.cellModel.id === this._activeCellId) { if (this.cellModel.id === this._activeCellId) {
this._editor.focus(); this._editor.focus();
this._editor.getContainer().scrollIntoView(); this._editor.getContainer().scrollIntoView({ behavior: 'smooth', block: 'nearest' });
} }
} }

View File

@@ -287,7 +287,7 @@ export class TextCellComponent extends CellView implements OnInit, AfterContentI
this.toggleEditMode(this.isActive()); this.toggleEditMode(this.isActive());
if (this.output && this.output.nativeElement) { if (this.output && this.output.nativeElement) {
(<HTMLElement>this.output.nativeElement).scrollTo(); (<HTMLElement>this.output.nativeElement).scrollTo({ behavior: 'smooth' });
} }
} }

View File

@@ -141,7 +141,11 @@ export class ProfilerTableEditor extends BaseEditor implements IProfilerControll
this._findCountChangeListener = input.data.onFindCountChange(() => this._updateFinderMatchState()); this._findCountChangeListener = input.data.onFindCountChange(() => this._updateFinderMatchState());
this._profilerTable.setData(input.data); this._profilerTable.setData(input.data);
this._profilerTable.columns = input.columns; this._profilerTable.columns = input.columns.map(c => {
c.formatter = textFormatter;
return c;
});
this._profilerTable.autosizeColumns(); this._profilerTable.autosizeColumns();
this._input.data.currentFindPosition.then(val => { this._input.data.currentFindPosition.then(val => {
this._profilerTable.setActiveCell(val.row, val.col); this._profilerTable.setActiveCell(val.row, val.col);

View File

@@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.cls-1{fill:#d02e00;}</style></defs><title>globalerror_red</title><path class="cls-1" d="M8,0a7.92,7.92,0,0,1,4,1.09A8.15,8.15,0,0,1,14.91,4a8,8,0,0,1,.81,1.91,8,8,0,0,1-.81,6.16A8.15,8.15,0,0,1,12,14.92a8,8,0,0,1-8.07,0,8.15,8.15,0,0,1-2.87-2.87A8,8,0,0,1,1.09,4,8.15,8.15,0,0,1,4,1.11,7.92,7.92,0,0,1,8,0ZM8,15a6.88,6.88,0,0,0,1.86-.25,7,7,0,0,0,4.89-4.89,7.07,7.07,0,0,0,0-3.73A7,7,0,0,0,9.86,1.27a7.07,7.07,0,0,0-3.73,0A7,7,0,0,0,1.25,6.15a7.07,7.07,0,0,0,0,3.73,7,7,0,0,0,4.89,4.89A6.88,6.88,0,0,0,8,15Zm3.46-9.76L8.71,8l2.75,2.76-.7.7L8,8.73,5.24,11.48l-.7-.7L7.29,8,4.54,5.26l.7-.7L8,7.31l2.76-2.75Z"/></svg>

After

Width:  |  Height:  |  Size: 721 B

View File

@@ -45,7 +45,7 @@
display: inline-block; display: inline-block;
} }
.monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.not-started { .vs .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.not-started {
background-image: url('status_queuedtask.svg'); background-image: url('status_queuedtask.svg');
} }
@@ -63,14 +63,14 @@
background-image: url("loading_inverse.svg"); background-image: url("loading_inverse.svg");
} }
.vs .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.success, .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.success {
.vs-dark .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.success,
.hc-black .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.success {
background-image: url("status_success.svg"); background-image: url("status_success.svg");
} }
.vs .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.canceled, .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.canceled {
.vs-dark .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.canceled,
.hc-black .monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.canceled {
background-image: url("status_cancelled.svg"); background-image: url("status_cancelled.svg");
} }
.monaco-tree .monaco-tree-rows > .monaco-tree-row > .content > .task-group > .task-icon.error {
background-image: url("error.svg");
}

View File

@@ -47,6 +47,7 @@
.extension-view .extensionTab-view .list-row.extensionTab-list .extension-details .title { .extension-view .extensionTab-view .list-row.extensionTab-list .extension-details .title {
font-size: 15px; font-size: 15px;
line-height: 1.4em;
font-weight: 700; font-weight: 700;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
@@ -56,6 +57,7 @@
.extension-view .extensionTab-view .list-row.extensionTab-list .extension-details .description { .extension-view .extensionTab-view .list-row.extensionTab-list .extension-details .description {
font-size: 13px; font-size: 13px;
line-height: 1.4em;
overflow: hidden; overflow: hidden;
white-space: pre-wrap; white-space: pre-wrap;
text-overflow: ellipsis; text-overflow: ellipsis;
@@ -63,6 +65,7 @@
.extension-view .extensionTab-view .list-row.extensionTab-list .extension-details .publisher { .extension-view .extensionTab-view .list-row.extensionTab-list .extension-details .publisher {
font-size: 90%; font-size: 90%;
line-height: 1.4em;
padding-right: 6px; padding-right: 6px;
opacity: .6; opacity: .6;
font-weight: 600; font-weight: 600;
@@ -71,4 +74,4 @@
.no-extensionTab-label { .no-extensionTab-label {
font-size: 12px; font-size: 12px;
padding: 15px; padding: 15px;
} }

View File

@@ -29,13 +29,10 @@ import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/la
class ExtensionListDelegate implements IListVirtualDelegate<IDashboardUITab> { class ExtensionListDelegate implements IListVirtualDelegate<IDashboardUITab> {
constructor( private static readonly HEIGHT = 101;
private _height: number
) {
}
public getHeight(element: IDashboardUITab): number { public getHeight(element: IDashboardUITab): number {
return this._height; return ExtensionListDelegate.HEIGHT;
} }
public getTemplateId(element: IDashboardUITab): string { public getTemplateId(element: IDashboardUITab): string {
@@ -91,7 +88,6 @@ class ExtensionListRenderer implements IListRenderer<IDashboardUITab, ExtensionL
} }
export class NewDashboardTabDialog extends Modal { export class NewDashboardTabDialog extends Modal {
public static EXTENSIONLIST_HEIGHT = 101;
// MEMBER letIABLES //////////////////////////////////////////////////// // MEMBER letIABLES ////////////////////////////////////////////////////
private _addNewTabButton: Button; private _addNewTabButton: Button;
@@ -165,7 +161,7 @@ export class NewDashboardTabDialog extends Modal {
private createExtensionList(container: HTMLElement) { private createExtensionList(container: HTMLElement) {
// Create a fixed list view for the extensions // Create a fixed list view for the extensions
let extensionTabViewContainer = DOM.$('.extensionTab-view'); let extensionTabViewContainer = DOM.$('.extensionTab-view');
let delegate = new ExtensionListDelegate(NewDashboardTabDialog.EXTENSIONLIST_HEIGHT); let delegate = new ExtensionListDelegate();
let extensionTabRenderer = new ExtensionListRenderer(); let extensionTabRenderer = new ExtensionListRenderer();
this._extensionList = new List<IDashboardUITab>(extensionTabViewContainer, delegate, [extensionTabRenderer]); this._extensionList = new List<IDashboardUITab>(extensionTabViewContainer, delegate, [extensionTabRenderer]);