diff --git a/src/sql/base/browser/ui/scrollableSplitview/heightMap.ts b/src/sql/base/browser/ui/scrollableSplitview/heightMap.ts index 301864789e..3e054c93a5 100644 --- a/src/sql/base/browser/ui/scrollableSplitview/heightMap.ts +++ b/src/sql/base/browser/ui/scrollableSplitview/heightMap.ts @@ -32,16 +32,16 @@ export class HeightMap { } public onInsertItems(iterator: INextIterator, 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): 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 = {}; } } diff --git a/src/sql/base/browser/ui/scrollableSplitview/scrollableSplitview.ts b/src/sql/base/browser/ui/scrollableSplitview/scrollableSplitview.ts index fa66bf7186..7eb50c41d3 100644 --- a/src/sql/base/browser/ui/scrollableSplitview/scrollableSplitview.ts +++ b/src/sql/base/browser/ui/scrollableSplitview/scrollableSplitview.ts @@ -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); diff --git a/src/sql/base/browser/ui/table/plugins/autoSizeColumns.plugin.ts b/src/sql/base/browser/ui/table/plugins/autoSizeColumns.plugin.ts index c8a7f3bf8e..e111e61f86 100644 --- a/src/sql/base/browser/ui/table/plugins/autoSizeColumns.plugin.ts +++ b/src/sql/base/browser/ui/table/plugins/autoSizeColumns.plugin.ts @@ -33,7 +33,7 @@ export class AutoColumnSize implements Slick.Plugin { 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 implements Slick.Plugin { }); 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 implements Slick.Plugin { private reSizeColumn(headerEl: JQuery, columnDef: Slick.Column) { 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 implements Slick.Plugin { } private getMaxColumnTextWidth(columnDef, colIndex: number): number { - let texts = []; + let texts: Array = []; let rowEl = this.createRow(columnDef); let data = this._grid.getData(); let viewPort = this._grid.getViewport(); @@ -146,7 +146,7 @@ export class AutoColumnSize implements Slick.Plugin { 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 implements Slick.Plugin { maxTemplate = template || text; } }); - return maxTemplate; + return maxTemplate!; } private createRow(columnDef): JQuery { @@ -194,9 +194,9 @@ export class AutoColumnSize implements Slick.Plugin { 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; } diff --git a/src/sql/base/browser/ui/table/plugins/cellRangeSelector.ts b/src/sql/base/browser/ui/table/plugins/cellRangeSelector.ts index 71b9d566c1..b2128e60bf 100644 --- a/src/sql/base/browser/ui/table/plugins/cellRangeSelector.ts +++ b/src/sql/base/browser/ui/table/plugins/cellRangeSelector.ts @@ -36,7 +36,7 @@ export class CellRangeSelector implements ICellRangeSelector { 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(); public onCellRangeSelected = new Slick.Event<{ range: Slick.Range }>(); @@ -87,7 +87,7 @@ export class CellRangeSelector implements ICellRangeSelector { 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 implements ICellRangeSelector { return; } - this.canvas.classList.remove(this.options.dragClass); + this.canvas.classList.remove(this.options.dragClass!); this.dragging = false; e.stopImmediatePropagation(); this.decorator.hide(); diff --git a/src/sql/base/browser/ui/table/plugins/cellSelectionModel.plugin.ts b/src/sql/base/browser/ui/table/plugins/cellSelectionModel.plugin.ts index bf7112ef53..8458e45348 100644 --- a/src/sql/base/browser/ui/table/plugins/cellSelectionModel.plugin.ts +++ b/src/sql/base/browser/ui/table/plugins/cellSelectionModel.plugin.ts @@ -105,7 +105,7 @@ export class CellSelectionModel implements Slick.SelectionModel) { 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; if (e.shiftKey) { diff --git a/src/sql/base/browser/ui/table/plugins/checkboxSelectColumn.plugin.ts b/src/sql/base/browser/ui/table/plugins/checkboxSelectColumn.plugin.ts index 16ccea23cb..f38ed163d4 100644 --- a/src/sql/base/browser/ui/table/plugins/checkboxSelectColumn.plugin.ts +++ b/src/sql/base/browser/ui/table/plugins/checkboxSelectColumn.plugin.ts @@ -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 implements Slick.Plugin { } private handleSelectedRowsChanged(e: Event, args: Slick.OnSelectedRowsChangedEventArgs): 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 implements Slick.Plugin { 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 implements Slick.Plugin { private handleClick(e: Event, args: Slick.OnClickEventArgs): 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 implements Slick.Plugin { } private handleHeaderClick(e: Event, args: Slick.OnHeaderClickEventArgs): 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 implements Slick.Plugin { 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 implements Slick.Plugin { } private checkboxSelectionFormatter(row, cell, value, columnDef: Slick.Column, 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, ''); } } diff --git a/src/sql/base/browser/ui/table/plugins/headerFilter.plugin.ts b/src/sql/base/browser/ui/table/plugins/headerFilter.plugin.ts index 6277179c5f..7817373461 100644 --- a/src/sql/base/browser/ui/table/plugins/headerFilter.plugin.ts +++ b/src/sql/base/browser/ui/table/plugins/headerFilter.plugin.ts @@ -12,7 +12,7 @@ export class HeaderFilter { public onFilterApplied = new Slick.Event(); public onCommand = new Slick.Event(); - private grid; + private grid: Slick.Grid; 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; + private $menu?: JQuery; 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('
') + const $el = jQuery('
') .addClass('slick-header-menubutton') .data('column', column); @@ -93,13 +93,13 @@ export class HeaderFilter { } private addMenuItem(menu, columnDef, title, command, image) { - let $item = jQuery('
') + const $item = jQuery('
') .data('command', command) .data('column', columnDef) .bind('click', (e) => this.handleMenuItemClick(e, command, columnDef)) .appendTo(menu); - let $icon = jQuery('
') + const $icon = jQuery('
') .appendTo($item); if (title === 'Sort Ascending') { @@ -118,7 +118,7 @@ export class HeaderFilter { jQuery('') .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 += ''; } - 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 = ''; 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 += ''; } } - let $filter = jQuery('
') + const $filter = jQuery('
') .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 = []; 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 = []; 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 = []; 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); diff --git a/src/sql/base/browser/ui/table/plugins/mousewheelTableScroll.plugin.ts b/src/sql/base/browser/ui/table/plugins/mousewheelTableScroll.plugin.ts index 5a8bbea43f..800ce03f45 100644 --- a/src/sql/base/browser/ui/table/plugins/mousewheelTableScroll.plugin.ts +++ b/src/sql/base/browser/ui/table/plugins/mousewheelTableScroll.plugin.ts @@ -28,12 +28,13 @@ export class MouseWheelSupport implements Slick.Plugin { private _disposables: IDisposable[] = []; constructor(options: IMouseWheelSupportOptions = {}) { - this.options = mixin(options, defaultOptions, false); + this.options = defaultOptions; + mixin(this.options, options); } public init(grid: Slick.Grid): 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 { 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 { } 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 { } 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 { } 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 { } else { this.viewport.scrollLeft = this.viewport.scrollLeft - deltaX; this.viewport.dispatchEvent(new Event('scroll')); - event.stopPropagation(); - event.preventDefault(); + e.stopPropagation(); + e.preventDefault(); } } } diff --git a/src/sql/base/browser/ui/table/plugins/rowDetailView.ts b/src/sql/base/browser/ui/table/plugins/rowDetailView.ts index 92466db1a0..8c74664a24 100644 --- a/src/sql/base/browser/ui/table/plugins/rowDetailView.ts +++ b/src/sql/base/browser/ui/table/plugins/rowDetailView.ts @@ -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 '
'; } else { - let html = []; - let rowHeight = this._grid.getOptions().rowHeight; - let bottomMargin = 5; + const html: Array = []; + 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)); } diff --git a/src/sql/base/browser/ui/table/plugins/rowNumberColumn.plugin.ts b/src/sql/base/browser/ui/table/plugins/rowNumberColumn.plugin.ts index 3cade746ff..51fed5ec69 100644 --- a/src/sql/base/browser/ui/table/plugins/rowNumberColumn.plugin.ts +++ b/src/sql/base/browser/ui/table/plugins/rowNumberColumn.plugin.ts @@ -8,8 +8,6 @@ export interface IRowNumberColumnOptions { cssClass?: string; } -const sizePerDigit = 15; - export class RowNumberColumn implements Slick.Plugin { private handler = new Slick.EventHandler(); private grid: Slick.Grid; @@ -63,11 +61,7 @@ export class RowNumberColumn implements Slick.Plugin { } private formatter(row, cell, value, columnDef: Slick.Column, dataContext): string { - if (dataContext) { - // row is zero-based, we need make it 1 based for display in the result grid - // - return `${row + 1}`; - } - return null; + // row is zero-based, we need make it 1 based for display in the result grid + return `${row + 1}`; } } diff --git a/src/sql/base/browser/ui/table/plugins/rowSelectionModel.plugin.ts b/src/sql/base/browser/ui/table/plugins/rowSelectionModel.plugin.ts index 35f2de491d..37b3aafbd2 100644 --- a/src/sql/base/browser/ui/table/plugins/rowSelectionModel.plugin.ts +++ b/src/sql/base/browser/ui/table/plugins/rowSelectionModel.plugin.ts @@ -31,7 +31,7 @@ export class RowSelectionModel implements Slick.Selec } private rangesToRows(ranges: Slick.Range[]): number[] { - let rows = []; + const rows: Array = []; 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 implements Slick.Selec } private rowsToRanges(rows: number[]): Slick.Range[] { - let ranges = []; - let lastCell = this._grid.getColumns().length - 1; + const ranges: Array = []; + 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 implements Slick.Selec } private getRowsRange(from: number, to: number): number[] { - let i, rows = []; + let i: number, rows: Array = []; for (i = from; i <= to; i++) { rows.push(i); } @@ -86,7 +86,7 @@ export class RowSelectionModel 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 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 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 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 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(); diff --git a/src/tsconfig.strictNullChecks.json b/src/tsconfig.strictNullChecks.json index f21bb317de..50b604a73a 100644 --- a/src/tsconfig.strictNullChecks.json +++ b/src/tsconfig.strictNullChecks.json @@ -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", diff --git a/src/typings/globals/slickgrid/index.d.ts b/src/typings/globals/slickgrid/index.d.ts index c4bb327d64..34d73a5cb3 100644 --- a/src/typings/globals/slickgrid/index.d.ts +++ b/src/typings/globals/slickgrid/index.d.ts @@ -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; - } + }; } export interface ColumnMetadata { @@ -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 extends GridEventArgs { @@ -1448,7 +1448,7 @@ declare namespace Slick { export interface CellCssStylesHash { [index: number]: { [id: string]: string; - } + }; } export interface Viewport { diff --git a/src/typings/globals/underscore/index.d.ts b/src/typings/globals/underscore/index.d.ts index 03f2cce2a5..bfff2ba30a 100644 --- a/src/typings/globals/underscore/index.d.ts +++ b/src/typings/globals/underscore/index.d.ts @@ -1084,7 +1084,7 @@ interface UnderscoreStatic { * @param array The array to split * @param count The maximum size of the inner arrays. */ - chunk(array: _.Collection, count: number): (_.Collection)[] + chunk(array: _.Collection, count: number): (_.Collection)[]; /************* * Functions * @@ -3668,7 +3668,7 @@ interface UnderscoreStatic { * @param context `this` object in `iterator`, optional. */ findKey(obj: _.Dictionary, predicate: _.ObjectIterator, 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 { * Wrapped type `object`. * @see _.extend **/ - findKey(predicate: _.ObjectIterator, context? : any): any + findKey(predicate: _.ObjectIterator, context? : any): any; /** * Wrapped type `object`. @@ -5708,7 +5708,7 @@ interface _Chain { * Wrapped type `object`. * @see _.extend **/ - findKey(predicate: _.ObjectIterator, context? : any): _Chain + findKey(predicate: _.ObjectIterator, context? : any): _Chain; /** * Wrapped type `object`.