Strict null check on full "base" code (#4973)

* removes more builder references

* remove builder from profiler

* formatting

* fix profiler dailog

* remove builder from oatuhdialog

* remove the rest of builder references

* formatting

* add more strict null checks to base
This commit is contained in:
Anthony Dresser
2019-04-12 12:59:58 -07:00
committed by GitHub
parent cb1682542b
commit 92b1c59e48
14 changed files with 157 additions and 180 deletions

View File

@@ -32,16 +32,16 @@ export class HeightMap {
}
public onInsertItems(iterator: INextIterator<IViewItem>, afterItemId: string | undefined = undefined): number | undefined {
let viewItem: IViewItem | undefined = undefined;
let viewItem: IViewItem | null = null;
let i: number, j: number;
let totalSize: number;
let sizeDiff = 0;
if (afterItemId === undefined) {
if (afterItemId === null) {
i = 0;
totalSize = 0;
} else {
i = this.indexes[afterItemId] + 1;
i = this.indexes[afterItemId!] + 1;
viewItem = this.heightMap[i - 1];
if (!viewItem) {
@@ -59,7 +59,7 @@ export class HeightMap {
while (viewItem = iterator.next()) {
viewItem.top = totalSize + sizeDiff;
this.indexes[viewItem.view.id] = i++;
this.indexes[viewItem.view.id!] = i++;
itemsToInsert.push(viewItem);
sizeDiff += viewItem.height;
}
@@ -69,7 +69,7 @@ export class HeightMap {
for (j = i; j < this.heightMap.length; j++) {
viewItem = this.heightMap[j];
viewItem.top += sizeDiff;
this.indexes[viewItem.view.id] = j;
this.indexes[viewItem.view.id!] = j;
}
for (j = itemsToInsert.length - 1; j >= 0; j--) {
@@ -89,7 +89,7 @@ export class HeightMap {
// Contiguous items
public onRemoveItems(iterator: INextIterator<string>): void {
let itemId: string | undefined = undefined;
let itemId: string | null = null;
let viewItem: IViewItem;
let startIndex: number | undefined = undefined;
let i = 0;
@@ -122,7 +122,7 @@ export class HeightMap {
for (i = startIndex; i < this.heightMap.length; i++) {
viewItem = this.heightMap[i];
viewItem.top += sizeDiff;
this.indexes[viewItem.view.id] = i;
this.indexes[viewItem.view.id!] = i;
this.onRefreshItem(viewItem);
}
}
@@ -156,14 +156,14 @@ export class HeightMap {
}
public itemAt(position: number): string {
return this.heightMap[this.indexAt(position)].view.id;
return this.heightMap[this.indexAt(position)].view.id!;
}
public withItemsInRange(start: number, end: number, fn: (item: string) => void): void {
start = this.indexAt(start);
end = this.indexAt(end);
for (let i = start; i <= end; i++) {
fn(this.heightMap[i].view.id);
fn(this.heightMap[i].view.id!);
}
}
@@ -202,11 +202,11 @@ export class HeightMap {
}
public itemAfter(item: IViewItem): IViewItem | undefined {
return this.heightMap[this.indexes[item.view.id] + 1] || undefined;
return this.heightMap[this.indexes[item.view.id!] + 1] || undefined;
}
public dispose(): void {
this.heightMap = undefined;
this.indexes = undefined;
this.heightMap = [];
this.indexes = {};
}
}

View File

@@ -239,12 +239,12 @@ export class ScrollableSplitView extends HeightMap implements IDisposable {
if (container.parentElement) {
this.viewContainer.removeChild(container);
}
this.onRemoveItems(new ArrayIterator([item.view.id]));
this.onRemoveItems(new ArrayIterator([item.view.id!]));
});
const disposable = combinedDisposable([onChangeDisposable, containerDisposable]);
const onAdd = view.onAdd ? () => view.onAdd() : () => { };
const onRemove = view.onRemove ? () => view.onRemove() : () => { };
const onAdd = view.onAdd ? () => view.onAdd!() : () => { };
const onRemove = view.onRemove ? () => view.onRemove!() : () => { };
const layoutContainer = this.orientation === Orientation.VERTICAL
? () => item.container.style.height = `${item.size}px`
@@ -342,12 +342,12 @@ export class ScrollableSplitView extends HeightMap implements IDisposable {
if (container.parentElement) {
this.viewContainer.removeChild(container);
}
this.onRemoveItems(new ArrayIterator([item.view.id]));
this.onRemoveItems(new ArrayIterator([item.view.id!]));
});
const disposable = combinedDisposable([onChangeDisposable, containerDisposable]);
const onAdd = view.onAdd ? () => view.onAdd() : () => { };
const onRemove = view.onRemove ? () => view.onRemove() : () => { };
const onAdd = view.onAdd ? () => view.onAdd!() : () => { };
const onRemove = view.onRemove ? () => view.onRemove!() : () => { };
const layoutContainer = this.orientation === Orientation.VERTICAL
? () => item.container.style.height = `${item.size}px`
@@ -610,11 +610,11 @@ export class ScrollableSplitView extends HeightMap implements IDisposable {
this.layoutViews();
} else {
item.size = size;
this.updateSize(item.view.id, size);
this.updateSize(item.view.id!, size);
let top = item.top + item.size;
for (let i = index + 1; i < this.viewItems.length; i++) {
let currentItem = this.viewItems[i];
this.updateTop(currentItem.view.id, top);
this.updateTop(currentItem.view.id!, top);
top += currentItem.size;
}
this.relayout(index);

View File

@@ -33,7 +33,7 @@ export class AutoColumnSize<T> implements Slick.Plugin<T> {
this._$container = jQuery(this._grid.getContainerNode());
this._$container.on('dblclick.autosize', '.slick-resizable-handle', e => this.handleDoubleClick(e));
this._context = document.createElement('canvas').getContext('2d');
this._context = document.createElement('canvas').getContext('2d')!;
}
public destroy() {
@@ -78,7 +78,7 @@ export class AutoColumnSize<T> implements Slick.Plugin<T> {
});
let change = false;
for (let i = 0; i <= headerColumns.children.length; i++) {
let headerEl = jQuery(headerColumns.children.item(i));
let headerEl = jQuery(headerColumns.children.item(i)!);
let columnDef = headerEl.data('column');
if (columnDef) {
let headerWidth = this.getElementWidth(headerEl[0]);
@@ -115,7 +115,7 @@ export class AutoColumnSize<T> implements Slick.Plugin<T> {
private reSizeColumn(headerEl: JQuery, columnDef: Slick.Column<T>) {
let headerWidth = this.getElementWidth(headerEl[0]);
let colIndex = this._grid.getColumnIndex(columnDef.id);
let colIndex = this._grid.getColumnIndex(columnDef.id!);
let origCols = this._grid.getColumns();
let allColumns = clone(origCols);
allColumns.forEach((col, index) => {
@@ -134,7 +134,7 @@ export class AutoColumnSize<T> implements Slick.Plugin<T> {
}
private getMaxColumnTextWidth(columnDef, colIndex: number): number {
let texts = [];
let texts: Array<string> = [];
let rowEl = this.createRow(columnDef);
let data = this._grid.getData();
let viewPort = this._grid.getViewport();
@@ -146,7 +146,7 @@ export class AutoColumnSize<T> implements Slick.Plugin<T> {
let template = this.getMaxTextTemplate(texts, columnDef, colIndex, data, rowEl);
let width = this.getTemplateWidth(rowEl, template);
this.deleteRow(rowEl);
return width > this._options.maxWidth ? this._options.maxWidth : width;
return width > this._options.maxWidth! ? this._options.maxWidth! : width;
}
private getTemplateWidth(rowEl: JQuery, template: JQuery | HTMLElement): number {
@@ -172,7 +172,7 @@ export class AutoColumnSize<T> implements Slick.Plugin<T> {
maxTemplate = template || text;
}
});
return maxTemplate;
return maxTemplate!;
}
private createRow(columnDef): JQuery {
@@ -194,9 +194,9 @@ export class AutoColumnSize<T> implements Slick.Plugin<T> {
private getElementWidth(element: HTMLElement): number {
let width, clone = element.cloneNode(true) as HTMLElement;
clone.style.cssText = 'position: absolute; visibility: hidden;right: auto;text-overflow: initial;white-space: nowrap;';
element.parentNode.insertBefore(clone, element);
element.parentNode!.insertBefore(clone, element);
width = clone.offsetWidth;
clone.parentNode.removeChild(clone);
clone.parentNode!.removeChild(clone);
return width;
}

View File

@@ -36,7 +36,7 @@ export class CellRangeSelector<T> implements ICellRangeSelector<T> {
private handler = new Slick.EventHandler();
private decorator: ICellRangeDecorator;
private canvas: HTMLCanvasElement;
private currentlySelectedRange: { start: Slick.Cell, end: Slick.Cell };
private currentlySelectedRange: { start: Slick.Cell, end?: Slick.Cell };
public onBeforeCellRangeSelected = new Slick.Event<Slick.Cell>();
public onCellRangeSelected = new Slick.Event<{ range: Slick.Range }>();
@@ -87,7 +87,7 @@ export class CellRangeSelector<T> implements ICellRangeSelector<T> {
return;
}
this.canvas.classList.add(this.options.dragClass);
this.canvas.classList.add(this.options.dragClass!);
this.grid.setActiveCell(cell.row, cell.cell);
@@ -125,7 +125,7 @@ export class CellRangeSelector<T> implements ICellRangeSelector<T> {
return;
}
this.canvas.classList.remove(this.options.dragClass);
this.canvas.classList.remove(this.options.dragClass!);
this.dragging = false;
e.stopImmediatePropagation();
this.decorator.hide();

View File

@@ -105,7 +105,7 @@ export class CellSelectionModel<T> implements Slick.SelectionModel<T, Array<Slic
private handleHeaderClick(e: MouseEvent, args: Slick.OnHeaderClickEventArgs<T>) {
if (!isUndefinedOrNull(args.column)) {
let columnIndex = this.grid.getColumnIndex(args.column.id);
let columnIndex = this.grid.getColumnIndex(args.column.id!);
if (this.grid.canCellBeSelected(0, columnIndex)) {
let ranges: Array<Slick.Range>;
if (e.shiftKey) {

View File

@@ -8,6 +8,7 @@ import { ICheckboxStyles } from 'vs/base/browser/ui/checkbox/checkbox';
import * as strings from 'vs/base/common/strings';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { KeyCode } from 'vs/base/common/keyCodes';
import { range } from 'vs/base/common/arrays';
export interface ICheckboxSelectColumnOptions extends Slick.PluginOptions, ICheckboxStyles {
columnId?: string;
@@ -19,7 +20,7 @@ export interface ICheckboxSelectColumnOptions extends Slick.PluginOptions, IChec
const defaultOptions: ICheckboxSelectColumnOptions = {
columnId: '_checkbox_selector',
cssClass: null,
cssClass: undefined,
toolTip: nls.localize('selectDeselectAll', 'Select/Deselect All'),
width: 30
};
@@ -54,7 +55,7 @@ export class CheckboxSelectColumn<T> implements Slick.Plugin<T> {
}
private handleSelectedRowsChanged(e: Event, args: Slick.OnSelectedRowsChangedEventArgs<T>): void {
let selectedRows = this._grid.getSelectedRows();
const selectedRows = this._grid.getSelectedRows();
let lookup = {}, row, i;
for (i = 0; i < selectedRows.length; i++) {
row = selectedRows[i];
@@ -72,11 +73,11 @@ export class CheckboxSelectColumn<T> implements Slick.Plugin<T> {
if (!this._options.title) {
if (selectedRows.length && selectedRows.length === this._grid.getDataLength()) {
this._grid.updateColumnHeader(this._options.columnId,
this._grid.updateColumnHeader(this._options.columnId!,
strings.format(checkboxTemplate, 'checked'),
this._options.toolTip);
} else {
this._grid.updateColumnHeader(this._options.columnId,
this._grid.updateColumnHeader(this._options.columnId!,
strings.format(checkboxTemplate, ''),
this._options.toolTip);
}
@@ -108,7 +109,7 @@ export class CheckboxSelectColumn<T> implements Slick.Plugin<T> {
private handleClick(e: Event, args: Slick.OnClickEventArgs<T>): void {
// clicking on a row select checkbox
if (this._grid.getColumns()[args.cell].id === this._options.columnId && jQuery(e.target).is('input[type="checkbox"]')) {
if (this._grid.getColumns()[args.cell].id === this._options.columnId && jQuery(e.target!).is('input[type="checkbox"]')) {
// if editing, try to commit
if (this._grid.getEditorLock().isActive() && !this._grid.getEditorLock().commitCurrentEdit()) {
e.preventDefault();
@@ -131,7 +132,7 @@ export class CheckboxSelectColumn<T> implements Slick.Plugin<T> {
}
private handleHeaderClick(e: Event, args: Slick.OnHeaderClickEventArgs<T>): void {
if (!this._options.title && args.column.id === this._options.columnId && jQuery(e.target).is('input[type="checkbox"]')) {
if (!this._options.title && args.column.id === this._options.columnId && jQuery(e.target!).is('input[type="checkbox"]')) {
// if editing, try to commit
if (this._grid.getEditorLock().isActive() && !this._grid.getEditorLock().commitCurrentEdit()) {
e.preventDefault();
@@ -139,18 +140,15 @@ export class CheckboxSelectColumn<T> implements Slick.Plugin<T> {
return;
}
if (jQuery(e.target).is('input[checked]')) {
let rows = [];
for (let i = 0; i < this._grid.getDataLength(); i++) {
rows.push(i);
}
if (jQuery(e.target!).is('input[checked]')) {
const rows = range(this._grid.getDataLength());
this._grid.setSelectedRows(rows);
this._grid.updateColumnHeader(this._options.columnId,
this._grid.updateColumnHeader(this._options.columnId!,
strings.format(checkboxTemplate, 'checked'),
this._options.toolTip);
} else {
this._grid.setSelectedRows([]);
this._grid.updateColumnHeader(this._options.columnId,
this._grid.updateColumnHeader(this._options.columnId!,
strings.format(checkboxTemplate, ''), this._options.toolTip);
e.stopPropagation();
e.stopImmediatePropagation();
@@ -173,11 +171,8 @@ export class CheckboxSelectColumn<T> implements Slick.Plugin<T> {
}
private checkboxSelectionFormatter(row, cell, value, columnDef: Slick.Column<T>, dataContext): string {
if (dataContext) {
return this._selectedRowsLookup[row]
? strings.format(checkboxTemplate, 'checked')
: strings.format(checkboxTemplate, '');
}
return null;
return this._selectedRowsLookup[row]
? strings.format(checkboxTemplate, 'checked')
: strings.format(checkboxTemplate, '');
}
}

View File

@@ -12,7 +12,7 @@ export class HeaderFilter {
public onFilterApplied = new Slick.Event();
public onCommand = new Slick.Event();
private grid;
private grid: Slick.Grid<any>;
private handler = new Slick.EventHandler();
private defaults = {
filterImage: 'src/sql/media/icons/filter.svg',
@@ -20,7 +20,7 @@ export class HeaderFilter {
sortDescImage: 'sort-desc.gif'
};
private $menu: JQuery<HTMLElement>;
private $menu?: JQuery<HTMLElement>;
private options: any;
private okButton: Button;
private clearButton: Button;
@@ -70,16 +70,16 @@ export class HeaderFilter {
private hideMenu() {
if (this.$menu) {
this.$menu.remove();
this.$menu = null;
this.$menu = undefined;
}
}
private handleHeaderCellRendered(e, args) {
let column = args.column;
const column = args.column;
if (column.id === '_detail_selector') {
return;
}
let $el = jQuery('<div></div>')
const $el = jQuery('<div></div>')
.addClass('slick-header-menubutton')
.data('column', column);
@@ -93,13 +93,13 @@ export class HeaderFilter {
}
private addMenuItem(menu, columnDef, title, command, image) {
let $item = jQuery('<div class="slick-header-menuitem">')
const $item = jQuery('<div class="slick-header-menuitem">')
.data('command', command)
.data('column', columnDef)
.bind('click', (e) => this.handleMenuItemClick(e, command, columnDef))
.appendTo(menu);
let $icon = jQuery('<div class="slick-header-menuicon">')
const $icon = jQuery('<div class="slick-header-menuicon">')
.appendTo($item);
if (title === 'Sort Ascending') {
@@ -118,7 +118,7 @@ export class HeaderFilter {
jQuery('<input class="input" placeholder="Search" style="margin-top: 5px; width: 206px">')
.data('column', columnDef)
.bind('keyup', (e) => {
let filterVals = this.getFilterValuesByInput(jQuery(e.target));
const filterVals = this.getFilterValuesByInput(jQuery(e.target));
self.updateFilterInputs(menu, columnDef, filterVals);
})
.appendTo(menu);
@@ -132,13 +132,13 @@ export class HeaderFilter {
this.workingFilters = columnDef.filterValues.slice(0);
for (let i = 0; i < filterItems.length; i++) {
let filtered = _.contains(this.workingFilters, filterItems[i]);
const filtered = _.contains(this.workingFilters, filterItems[i]);
filterOptions += '<label><input type="checkbox" value="' + i + '"'
+ (filtered ? ' checked="checked"' : '')
+ '/>' + filterItems[i] + '</label>';
}
let $filter = menu.find('.filter');
const $filter = menu.find('.filter');
$filter.empty().append(jQuery(filterOptions));
jQuery(':checkbox', $filter).bind('click', (e) => {
@@ -147,7 +147,7 @@ export class HeaderFilter {
}
private showFilter(e) {
let $menuButton = jQuery(e.target);
const $menuButton = jQuery(e.target);
this.columnDef = $menuButton.data('column');
this.columnDef.filterValues = this.columnDef.filterValues || [];
@@ -179,14 +179,14 @@ export class HeaderFilter {
let filterOptions = '<label><input type="checkbox" value="-1" />(Select All)</label>';
for (let i = 0; i < filterItems.length; i++) {
let filtered = _.contains(this.workingFilters, filterItems[i]);
const filtered = _.contains(this.workingFilters, filterItems[i]);
if (filterItems[i] && filterItems[i].indexOf('Error:') < 0) {
filterOptions += '<label><input type="checkbox" value="' + i + '"'
+ (filtered ? ' checked="checked"' : '')
+ '/>' + escape(filterItems[i]) + '</label>';
}
}
let $filter = jQuery('<div class="filter">')
const $filter = jQuery('<div class="filter">')
.append(jQuery(filterOptions))
.appendTo(this.$menu);
@@ -194,7 +194,7 @@ export class HeaderFilter {
this.okButton.label = 'OK';
this.okButton.title = 'OK';
this.okButton.element.id = 'filter-ok-button';
let okElement = jQuery('#filter-ok-button');
const okElement = jQuery('#filter-ok-button');
okElement.bind('click', (ev) => {
this.columnDef.filterValues = this.workingFilters.splice(0);
this.setButtonImage($menuButton, this.columnDef.filterValues.length > 0);
@@ -205,7 +205,7 @@ export class HeaderFilter {
this.clearButton.label = 'Clear';
this.clearButton.title = 'Clear';
this.clearButton.element.id = 'filter-clear-button';
let clearElement = jQuery('#filter-clear-button');
const clearElement = jQuery('#filter-clear-button');
clearElement.bind('click', (ev) => {
this.columnDef.filterValues.length = 0;
this.setButtonImage($menuButton, false);
@@ -216,7 +216,7 @@ export class HeaderFilter {
this.cancelButton.label = 'Cancel';
this.cancelButton.title = 'Cancel';
this.cancelButton.element.id = 'filter-cancel-button';
let cancelElement = jQuery('#filter-cancel-button');
const cancelElement = jQuery('#filter-cancel-button');
cancelElement.bind('click', () => this.hideMenu());
attachButtonStyler(this.okButton, this._themeService);
attachButtonStyler(this.clearButton, this._themeService);
@@ -226,8 +226,8 @@ export class HeaderFilter {
this.workingFilters = this.changeWorkingFilter(filterItems, this.workingFilters, jQuery(e.target));
});
let offset = jQuery(e.target).offset();
let left = offset.left - this.$menu.width() + jQuery(e.target).width() - 8;
const offset = jQuery(e.target).offset();
const left = offset.left - this.$menu.width() + jQuery(e.target).width() - 8;
let menutop = offset.top + jQuery(e.target).height();
@@ -243,8 +243,8 @@ export class HeaderFilter {
}
private changeWorkingFilter(filterItems, workingFilters, $checkbox) {
let value = $checkbox.val();
let $filter = $checkbox.parent().parent();
const value = $checkbox.val();
const $filter = $checkbox.parent().parent();
if ($checkbox.val() < 0) {
// Select All
@@ -256,11 +256,11 @@ export class HeaderFilter {
workingFilters.length = 0;
}
} else {
let index = _.indexOf(workingFilters, filterItems[value]);
const index = _.indexOf(workingFilters, filterItems[value]);
if ($checkbox.prop('checked') && index < 0) {
workingFilters.push(filterItems[value]);
let nextRow = filterItems[(parseInt(value) + 1).toString()];
const nextRow = filterItems[(parseInt(value) + 1).toString()];
if (nextRow && nextRow.indexOf('Error:') >= 0) {
workingFilters.push(nextRow);
}
@@ -276,11 +276,11 @@ export class HeaderFilter {
}
private setButtonImage($el, filtered) {
let element: HTMLElement = $el.get(0);
const element: HTMLElement = $el.get(0);
if (filtered) {
element.className += ' filtered';
} else {
let classList = element.classList;
const classList = element.classList;
if (classList.contains('filtered')) {
classList.remove('filtered');
}
@@ -296,9 +296,9 @@ export class HeaderFilter {
}
private getFilterValues(dataView, column) {
let seen = [];
const seen: Array<any> = [];
for (let i = 0; i < dataView.getLength(); i++) {
let value = dataView.getItem(i)[column.field];
const value = dataView.getItem(i)[column.field];
if (!_.contains(seen, value)) {
seen.push(value);
@@ -308,18 +308,18 @@ export class HeaderFilter {
}
private getFilterValuesByInput($input) {
let column = $input.data('column'),
const column = $input.data('column'),
filter = $input.val(),
dataView = this.grid.getData(),
seen = [];
seen: Array<any> = [];
for (let i = 0; i < dataView.getLength(); i++) {
let value = dataView.getItem(i)[column.field];
const value = dataView.getItem(i)[column.field];
if (filter.length > 0) {
let itemValue = !value ? '' : value;
let lowercaseFilter = filter.toString().toLowerCase();
let lowercaseVal = itemValue.toString().toLowerCase();
const itemValue = !value ? '' : value;
const lowercaseFilter = filter.toString().toLowerCase();
const lowercaseVal = itemValue.toString().toLowerCase();
if (!_.contains(seen, value) && lowercaseVal.indexOf(lowercaseFilter) > -1) {
seen.push(value);
}
@@ -335,9 +335,9 @@ export class HeaderFilter {
}
private getAllFilterValues(data, column) {
let seen = [];
const seen: Array<any> = [];
for (let i = 0; i < data.length; i++) {
let value = data[i][column.field];
const value = data[i][column.field];
if (!_.contains(seen, value)) {
seen.push(value);

View File

@@ -28,12 +28,13 @@ export class MouseWheelSupport implements Slick.Plugin<any> {
private _disposables: IDisposable[] = [];
constructor(options: IMouseWheelSupportOptions = {}) {
this.options = mixin(options, defaultOptions, false);
this.options = defaultOptions;
mixin(this.options, options);
}
public init(grid: Slick.Grid<any>): void {
this.canvas = grid.getCanvasNode();
this.viewport = this.canvas.parentElement;
this.viewport = this.canvas.parentElement!;
let onMouseWheel = (browserEvent: IMouseWheelEvent) => {
let e = new StandardWheelEvent(browserEvent);
this._onMouseWheel(e);
@@ -44,8 +45,8 @@ export class MouseWheelSupport implements Slick.Plugin<any> {
private _onMouseWheel(e: StandardWheelEvent) {
if (e.deltaY || e.deltaX) {
let deltaY = e.deltaY * this.options.scrollSpeed;
let deltaX = e.deltaX * this.options.scrollSpeed;
let deltaY = e.deltaY * this.options.scrollSpeed!;
let deltaX = e.deltaX * this.options.scrollSpeed!;
const scrollHeight = this.canvas.clientHeight;
const scrollWidth = this.canvas.clientWidth;
const height = this.viewport.clientHeight;
@@ -67,8 +68,8 @@ export class MouseWheelSupport implements Slick.Plugin<any> {
} else {
this.viewport.scrollTop = this.viewport.scrollTop - deltaY;
this.viewport.dispatchEvent(new Event('scroll'));
event.stopPropagation();
event.preventDefault();
e.stopPropagation();
e.preventDefault();
}
// scroll up
} else {
@@ -78,8 +79,8 @@ export class MouseWheelSupport implements Slick.Plugin<any> {
} else {
this.viewport.scrollTop = this.viewport.scrollTop - deltaY;
this.viewport.dispatchEvent(new Event('scroll'));
event.stopPropagation();
event.preventDefault();
e.stopPropagation();
e.preventDefault();
}
}
@@ -91,8 +92,8 @@ export class MouseWheelSupport implements Slick.Plugin<any> {
} else {
this.viewport.scrollLeft = this.viewport.scrollLeft - deltaX;
this.viewport.dispatchEvent(new Event('scroll'));
event.stopPropagation();
event.preventDefault();
e.stopPropagation();
e.preventDefault();
}
// scroll left
} else {
@@ -102,8 +103,8 @@ export class MouseWheelSupport implements Slick.Plugin<any> {
} else {
this.viewport.scrollLeft = this.viewport.scrollLeft - deltaX;
this.viewport.dispatchEvent(new Event('scroll'));
event.stopPropagation();
event.preventDefault();
e.stopPropagation();
e.preventDefault();
}
}
}

View File

@@ -49,10 +49,10 @@ export class RowDetailView {
public destroy() {
this._handler.unsubscribeAll();
this.onAsyncResponse.unsubscribe(undefined);
this.onAsyncEndUpdate.unsubscribe(undefined);
this.onAfterRowDetailToggle.unsubscribe(undefined);
this.onBeforeRowDetailToggle.unsubscribe(undefined);
this.onAsyncResponse.unsubscribe();
this.onAsyncEndUpdate.unsubscribe();
this.onAfterRowDetailToggle.unsubscribe();
this.onBeforeRowDetailToggle.unsubscribe();
}
public getOptions(options: any) {
@@ -73,7 +73,7 @@ export class RowDetailView {
return;
}
let item = this._dataView.getItem(args.row);
const item = this._dataView.getItem(args.row);
// trigger an event before toggling
this.onBeforeRowDetailToggle.notify({
@@ -102,21 +102,21 @@ export class RowDetailView {
// If we scroll save detail views that go out of cache range
public handleScroll(e, args) {
let range = this._grid.getRenderedRange();
const range = this._grid.getRenderedRange();
let start: number = (range.top > 0 ? range.top : 0);
let end: number = (range.bottom > this._dataView.getLength() ? range.bottom : this._dataView.getLength());
const start: number = (range.top > 0 ? range.top : 0);
const end: number = (range.bottom > this._dataView.getLength() ? range.bottom : this._dataView.getLength());
if (end <= 0) {
return;
}
// Get the item at the top of the view
let topMostItem = this._dataView.getItemByIdx(start);
const topMostItem = this._dataView.getItemByIdx(start);
// Check it is a parent item
if (topMostItem._parent === undefined) {
// This is a standard row as we have no parent.
let nextItem = this._dataView.getItemByIdx(start + 1);
const nextItem = this._dataView.getItemByIdx(start + 1);
if (nextItem !== undefined && nextItem._parent !== undefined) {
// This is likely the expanded Detail Row View
// Check for safety
@@ -127,7 +127,7 @@ export class RowDetailView {
}
// Find the bottom most item that is likely to go off screen
let bottomMostItem = this._dataView.getItemByIdx(end - 1);
const bottomMostItem = this._dataView.getItemByIdx(end - 1);
// If we are a detailView and we are about to go out of cache view
if (bottomMostItem._parent !== undefined) {
@@ -151,9 +151,9 @@ export class RowDetailView {
// Saves the current state of the detail view
public saveDetailView(item) {
let view = jQuery('#innerDetailView_' + item.id);
const view = jQuery('#innerDetailView_' + item.id);
if (view) {
let html = jQuery('#innerDetailView_' + item.id).html();
const html = jQuery('#innerDetailView_' + item.id).html();
if (html !== undefined) {
item._detailContent = html;
}
@@ -231,7 +231,6 @@ export class RowDetailView {
args.itemDetail._detailViewLoaded = true;
let idxParent = this._dataView.getIdxById(args.itemDetail.id);
this._dataView.updateItem(args.itemDetail.id, args.itemDetail);
// trigger an event once the post template is finished loading
@@ -255,9 +254,9 @@ export class RowDetailView {
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
public getPaddingItem(parent, offset) {
let item: any = {};
const item: any = {};
for (let prop in this._grid.getData()) {
for (const prop in this._grid.getData()) {
item[prop] = null;
}
item.id = parent.id + '.' + offset;
@@ -272,7 +271,7 @@ export class RowDetailView {
}
public getErrorItem(parent, offset) {
let item: any = {};
const item: any = {};
item.id = parent.id + '.' + offset;
item._collapsed = true;
item._isPadding = false;
@@ -288,15 +287,15 @@ export class RowDetailView {
//////////////////////////////////////////////////////////////
public applyTemplateNewLineHeight(item, showError = false) {
// the height seems to be calculated by the template row count (how many line of items does the template have)
let rowCount = this._options.panelRows;
const rowCount = this._options.panelRows;
//calculate padding requirements based on detail-content..
//ie. worst-case: create an invisible dom node now &find it's height.
let lineHeight = 13; //we know cuz we wrote the custom css innit ;)
const lineHeight = 13; //we know cuz we wrote the custom css innit ;)
item._sizePadding = Math.ceil(((rowCount * 2) * lineHeight) / this._grid.getOptions().rowHeight);
item._height = (item._sizePadding * this._grid.getOptions().rowHeight);
let idxParent = this._dataView.getIdxById(item.id);
const idxParent = this._dataView.getIdxById(item.id);
for (let idx = 1; idx <= item._sizePadding; idx++) {
if (showError) {
this._dataView.insertItem(idxParent + idx, this.getErrorItem(item, 'error'));
@@ -336,9 +335,9 @@ export class RowDetailView {
} else if (dataContext._collapsed) {
return '<div class=\'detailView-toggle expand\'></div>';
} else {
let html = [];
let rowHeight = this._grid.getOptions().rowHeight;
let bottomMargin = 5;
const html: Array<string> = [];
const rowHeight = this._grid.getOptions().rowHeight;
const bottomMargin = 5;
//V313HAX:
//putting in an extra closing div after the closing toggle div and ommiting a
@@ -369,9 +368,9 @@ export class RowDetailView {
}
// Grad each of the dom items
let mainContainer = document.getElementById('detailViewContainer_' + item.id);
let cellItem = document.getElementById('cellDetailView_' + item.id);
let inner = document.getElementById('innerDetailView_' + item.id);
const mainContainer = document.getElementById('detailViewContainer_' + item.id);
const cellItem = document.getElementById('cellDetailView_' + item.id);
const inner = document.getElementById('innerDetailView_' + item.id);
if (!mainContainer || !cellItem || !inner) {
return;
@@ -381,14 +380,14 @@ export class RowDetailView {
this._dataView.deleteItem(item.id + '.' + idx);
}
let rowHeight = this._grid.getOptions().rowHeight; // height of a row
let lineHeight = 13; //we know cuz we wrote the custom css innit ;)
const rowHeight = this._grid.getOptions().rowHeight; // height of a row
const lineHeight = 13; //we know cuz we wrote the custom css innit ;)
// Get the inner Item height as this will be the actual size
let itemHeight = inner.clientHeight;
const itemHeight = inner.clientHeight;
// Now work out how many rows
let rowCount = Math.ceil(itemHeight / rowHeight) + 1;
const rowCount = Math.ceil(itemHeight / rowHeight) + 1;
item._sizePadding = Math.ceil(((rowCount * 2) * lineHeight) / rowHeight);
item._height = (item._sizePadding * rowHeight);
@@ -404,7 +403,7 @@ export class RowDetailView {
cellItem.setAttribute('style', `height: ${item._height}px;top:${rowHeight}px`);
}
let idxParent = this._dataView.getIdxById(item.id);
const idxParent = this._dataView.getIdxById(item.id);
for (let idx = 1; idx <= item._sizePadding; idx++) {
this._dataView.insertItem(idxParent + idx, this.getPaddingItem(item, idx));
}

View File

@@ -8,8 +8,6 @@ export interface IRowNumberColumnOptions {
cssClass?: string;
}
const sizePerDigit = 15;
export class RowNumberColumn<T> implements Slick.Plugin<T> {
private handler = new Slick.EventHandler();
private grid: Slick.Grid<T>;
@@ -63,11 +61,7 @@ export class RowNumberColumn<T> implements Slick.Plugin<T> {
}
private formatter(row, cell, value, columnDef: Slick.Column<T>, dataContext): string {
if (dataContext) {
// row is zero-based, we need make it 1 based for display in the result grid
//
return `<span>${row + 1}</span>`;
}
return null;
// row is zero-based, we need make it 1 based for display in the result grid
return `<span>${row + 1}</span>`;
}
}

View File

@@ -31,7 +31,7 @@ export class RowSelectionModel<T extends Slick.SlickData> implements Slick.Selec
}
private rangesToRows(ranges: Slick.Range[]): number[] {
let rows = [];
const rows: Array<number> = [];
for (let i = 0; i < ranges.length; i++) {
for (let j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {
rows.push(j);
@@ -41,8 +41,8 @@ export class RowSelectionModel<T extends Slick.SlickData> implements Slick.Selec
}
private rowsToRanges(rows: number[]): Slick.Range[] {
let ranges = [];
let lastCell = this._grid.getColumns().length - 1;
const ranges: Array<Slick.Range> = [];
const lastCell = this._grid.getColumns().length - 1;
for (let i = 0; i < rows.length; i++) {
ranges.push(new Slick.Range(rows[i], 0, rows[i], lastCell));
}
@@ -69,7 +69,7 @@ export class RowSelectionModel<T extends Slick.SlickData> implements Slick.Selec
}
private getRowsRange(from: number, to: number): number[] {
let i, rows = [];
let i: number, rows: Array<number> = [];
for (i = from; i <= to; i++) {
rows.push(i);
}
@@ -86,7 +86,7 @@ export class RowSelectionModel<T extends Slick.SlickData> implements Slick.Selec
}
private handleKeyDown(e: KeyboardEvent): void {
let activeRow = this._grid.getActiveCell();
const activeRow = this._grid.getActiveCell();
if (activeRow && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey && (e.which === 38 || e.which === 40)) {
let selectedRows = this.getSelectedRows();
selectedRows.sort((x, y) => x - y);
@@ -106,8 +106,8 @@ export class RowSelectionModel<T extends Slick.SlickData> implements Slick.Selec
}
if (active >= 0 && active < this._grid.getDataLength()) {
this._grid.scrollRowIntoView(active, undefined);
let tempRanges = this.rowsToRanges(this.getRowsRange(top, bottom));
this._grid.scrollRowIntoView(active);
const tempRanges = this.rowsToRanges(this.getRowsRange(top, bottom));
this.setSelectedRanges(tempRanges);
}
@@ -117,7 +117,7 @@ export class RowSelectionModel<T extends Slick.SlickData> implements Slick.Selec
}
private handleClick(e: KeyboardEvent): boolean {
let cell = this._grid.getCellFromEvent(e);
const cell = this._grid.getCellFromEvent(e);
if (!cell || !this._grid.canCellBeActive(cell.row, cell.cell)) {
return false;
}
@@ -128,7 +128,7 @@ export class RowSelectionModel<T extends Slick.SlickData> implements Slick.Selec
}
let selection = this.rangesToRows(this._ranges);
let idx = jQuery.inArray(cell.row, selection);
const idx = jQuery.inArray(cell.row, selection);
if (idx === -1 && (e.ctrlKey || e.metaKey)) {
selection.push(cell.row);
@@ -137,20 +137,22 @@ export class RowSelectionModel<T extends Slick.SlickData> implements Slick.Selec
selection = selection.filter(o => o !== cell.row);
this._grid.setActiveCell(cell.row, cell.cell);
} else if (selection.length && e.shiftKey) {
let last = selection.pop();
let from = Math.min(cell.row, last);
let to = Math.max(cell.row, last);
selection = [];
for (let i = from; i <= to; i++) {
if (i !== last) {
selection.push(i);
const last = selection.pop();
if (last) {
const from = Math.min(cell.row, last);
const to = Math.max(cell.row, last);
selection = [];
for (let i = from; i <= to; i++) {
if (i !== last) {
selection.push(i);
}
}
selection.push(last);
}
selection.push(last);
this._grid.setActiveCell(cell.row, cell.cell);
}
let tempRanges = this.rowsToRanges(selection);
const tempRanges = this.rowsToRanges(selection);
this.setSelectedRanges(tempRanges);
e.stopImmediatePropagation();

View File

@@ -11,21 +11,7 @@
"./vs/vscode.proposed.d.ts",
"./sql/azdata.d.ts",
"./sql/azdata.proposed.d.ts",
"./sql/base/browser/ui/breadcrumb/*.ts",
"./sql/base/browser/ui/button/*.ts",
"./sql/base/browser/ui/checkbox/*.ts",
"./sql/base/browser/ui/dropdownList/*.ts",
"./sql/base/browser/ui/editableDropdown/*.ts",
"./sql/base/browser/ui/inputBox/*.ts",
"./sql/base/browser/ui/listBox/*.ts",
"./sql/base/browser/ui/panel/*.ts",
"./sql/base/browser/ui/radioButton/*.ts",
"./sql/base/browser/ui/scrollable/*.ts",
"./sql/base/browser/ui/selectBox/*.ts",
"./sql/base/browser/ui/table/*.ts",
"./sql/base/browser/ui/taskbar/*.ts",
"./sql/base/common/**/*.ts",
"./sql/base/node/**/*.ts",
"./sql/base/**/*.ts",
"./sql/platform/angularEventing/**/*.ts",
"./sql/platform/clipboard/**/*.ts",
"./sql/platform/credentials/**/*.ts",

View File

@@ -69,8 +69,8 @@ declare namespace Slick {
* @method unsubscribe
* @param fn {Function} Event handler to be removed.
*/
public unsubscribe(fn: (e: EventData, data: T) => any): void;
public unsubscribe(fn: (e: DOMEvent, data: T) => any): void;
public unsubscribe(fn?: (e: EventData, data: T) => any): void;
public unsubscribe(fn?: (e: DOMEvent, data: T) => any): void;
/***
* Fires an event notifying all subscribers.
@@ -716,7 +716,7 @@ declare namespace Slick {
* Metadata indexed by column index
*/
[index: number]: ColumnMetadata<T>;
}
};
}
export interface ColumnMetadata<T extends SlickData> {
@@ -1231,10 +1231,10 @@ declare namespace Slick {
public getRenderedRange(viewportTop?: number, viewportLeft?: number): Viewport;
public resizeCanvas(): void;
public updateRowCount(): void;
public scrollRowIntoView(row: number, doPaging: boolean): void;
public scrollRowIntoView(row: number, doPaging?: boolean): void;
public scrollRowToTop(row: number): void;
public scrollCellIntoView(row: number, cell: number, doPaging: boolean): void;
public scrollTo(y: number);
public scrollTo(y: number): void;
public getCanvasNode(): HTMLCanvasElement;
public focus(): void;
@@ -1278,7 +1278,7 @@ declare namespace Slick {
// the documentation is not enlightening
startX: number;
startY: number;
range: { start: Slick.Cell, end: Slick.Cell };
range: { start: Slick.Cell, end?: Slick.Cell };
}
export interface OnDragInitEventArgs<T extends SlickData> extends GridEventArgs<T> {
@@ -1448,7 +1448,7 @@ declare namespace Slick {
export interface CellCssStylesHash {
[index: number]: {
[id: string]: string;
}
};
}
export interface Viewport {

View File

@@ -1084,7 +1084,7 @@ interface UnderscoreStatic {
* @param array The array to split
* @param count The maximum size of the inner arrays.
*/
chunk<T>(array: _.Collection<T>, count: number): (_.Collection<T>)[]
chunk<T>(array: _.Collection<T>, count: number): (_.Collection<T>)[];
/*************
* Functions *
@@ -3668,7 +3668,7 @@ interface UnderscoreStatic {
* @param context `this` object in `iterator`, optional.
*/
findKey<T>(obj: _.Dictionary<T>, predicate: _.ObjectIterator<T, boolean>, context? : any): string;
/**
* Return a copy of the object, filtered to only have values for the whitelisted keys
* (or array of valid keys).
@@ -4748,7 +4748,7 @@ interface Underscore<T> {
* Wrapped type `object`.
* @see _.extend
**/
findKey(predicate: _.ObjectIterator<any, boolean>, context? : any): any
findKey(predicate: _.ObjectIterator<any, boolean>, context? : any): any;
/**
* Wrapped type `object`.
@@ -5708,7 +5708,7 @@ interface _Chain<T> {
* Wrapped type `object`.
* @see _.extend
**/
findKey(predicate: _.ObjectIterator<any, boolean>, context? : any): _Chain<T>
findKey(predicate: _.ObjectIterator<any, boolean>, context? : any): _Chain<T>;
/**
* Wrapped type `object`.