Vscode merge (#4582)
* Merge from vscode 37cb23d3dd4f9433d56d4ba5ea3203580719a0bd * fix issues with merges * bump node version in azpipe * replace license headers * remove duplicate launch task * fix build errors * fix build errors * fix tslint issues * working through package and linux build issues * more work * wip * fix packaged builds * working through linux build errors * wip * wip * wip * fix mac and linux file limits * iterate linux pipeline * disable editor typing * revert series to parallel * remove optimize vscode from linux * fix linting issues * revert testing change * add work round for new node * readd packaging for extensions * fix issue with angular not resolving decorator dependencies
@@ -14,6 +14,7 @@ import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/v
|
||||
import { ViewContext } from 'vs/editor/common/view/viewContext';
|
||||
import * as viewEvents from 'vs/editor/common/view/viewEvents';
|
||||
import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData';
|
||||
import { withUndefinedAsNull } from 'vs/base/common/types';
|
||||
|
||||
class Coordinate {
|
||||
_coordinateBrand: void;
|
||||
@@ -29,7 +30,7 @@ class Coordinate {
|
||||
|
||||
export class ViewContentWidgets extends ViewPart {
|
||||
|
||||
private _viewDomNode: FastDomNode<HTMLElement>;
|
||||
private readonly _viewDomNode: FastDomNode<HTMLElement>;
|
||||
private _widgets: { [key: string]: Widget; };
|
||||
|
||||
public domNode: FastDomNode<HTMLElement>;
|
||||
@@ -59,7 +60,7 @@ export class ViewContentWidgets extends ViewPart {
|
||||
// --- begin event handlers
|
||||
|
||||
public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {
|
||||
let keys = Object.keys(this._widgets);
|
||||
const keys = Object.keys(this._widgets);
|
||||
for (const widgetId of keys) {
|
||||
this._widgets[widgetId].onConfigurationChanged(e);
|
||||
}
|
||||
@@ -73,7 +74,7 @@ export class ViewContentWidgets extends ViewPart {
|
||||
return true;
|
||||
}
|
||||
public onLineMappingChanged(e: viewEvents.ViewLineMappingChangedEvent): boolean {
|
||||
let keys = Object.keys(this._widgets);
|
||||
const keys = Object.keys(this._widgets);
|
||||
for (const widgetId of keys) {
|
||||
this._widgets[widgetId].onLineMappingChanged(e);
|
||||
}
|
||||
@@ -139,21 +140,21 @@ export class ViewContentWidgets extends ViewPart {
|
||||
}
|
||||
|
||||
public onBeforeRender(viewportData: ViewportData): void {
|
||||
let keys = Object.keys(this._widgets);
|
||||
const keys = Object.keys(this._widgets);
|
||||
for (const widgetId of keys) {
|
||||
this._widgets[widgetId].onBeforeRender(viewportData);
|
||||
}
|
||||
}
|
||||
|
||||
public prepareRender(ctx: RenderingContext): void {
|
||||
let keys = Object.keys(this._widgets);
|
||||
const keys = Object.keys(this._widgets);
|
||||
for (const widgetId of keys) {
|
||||
this._widgets[widgetId].prepareRender(ctx);
|
||||
}
|
||||
}
|
||||
|
||||
public render(ctx: RestrictedRenderingContext): void {
|
||||
let keys = Object.keys(this._widgets);
|
||||
const keys = Object.keys(this._widgets);
|
||||
for (const widgetId of keys) {
|
||||
this._widgets[widgetId].render(ctx);
|
||||
}
|
||||
@@ -180,7 +181,7 @@ class Widget {
|
||||
public readonly allowEditorOverflow: boolean;
|
||||
public readonly suppressMouseDown: boolean;
|
||||
|
||||
private _fixedOverflowWidgets: boolean;
|
||||
private readonly _fixedOverflowWidgets: boolean;
|
||||
private _contentWidth: number;
|
||||
private _contentLeft: number;
|
||||
private _lineHeight: number;
|
||||
@@ -242,8 +243,8 @@ class Widget {
|
||||
}
|
||||
|
||||
private _setPosition(position: IPosition | null | undefined, range: IRange | null | undefined): void {
|
||||
this._position = position || null;
|
||||
this._range = range || null;
|
||||
this._position = withUndefinedAsNull(position);
|
||||
this._range = withUndefinedAsNull(range);
|
||||
this._viewPosition = null;
|
||||
this._viewRange = null;
|
||||
|
||||
@@ -280,17 +281,17 @@ class Widget {
|
||||
// Our visible box is split horizontally by the current line => 2 boxes
|
||||
|
||||
// a) the box above the line
|
||||
let aboveLineTop = topLeft.top;
|
||||
let heightAboveLine = aboveLineTop;
|
||||
const aboveLineTop = topLeft.top;
|
||||
const heightAboveLine = aboveLineTop;
|
||||
|
||||
// b) the box under the line
|
||||
let underLineTop = bottomLeft.top + this._lineHeight;
|
||||
let heightUnderLine = ctx.viewportHeight - underLineTop;
|
||||
const underLineTop = bottomLeft.top + this._lineHeight;
|
||||
const heightUnderLine = ctx.viewportHeight - underLineTop;
|
||||
|
||||
let aboveTop = aboveLineTop - height;
|
||||
let fitsAbove = (heightAboveLine >= height);
|
||||
let belowTop = underLineTop;
|
||||
let fitsBelow = (heightUnderLine >= height);
|
||||
const aboveTop = aboveLineTop - height;
|
||||
const fitsAbove = (heightAboveLine >= height);
|
||||
const belowTop = underLineTop;
|
||||
const fitsBelow = (heightUnderLine >= height);
|
||||
|
||||
// And its left
|
||||
let actualAboveLeft = topLeft.left;
|
||||
@@ -320,8 +321,8 @@ class Widget {
|
||||
}
|
||||
|
||||
private _layoutBoxInPage(topLeft: Coordinate, bottomLeft: Coordinate, width: number, height: number, ctx: RenderingContext): IBoxLayoutResult | null {
|
||||
let aboveLeft0 = topLeft.left - ctx.scrollLeft;
|
||||
let belowLeft0 = bottomLeft.left - ctx.scrollLeft;
|
||||
const aboveLeft0 = topLeft.left - ctx.scrollLeft;
|
||||
const belowLeft0 = bottomLeft.left - ctx.scrollLeft;
|
||||
|
||||
if (aboveLeft0 < 0 || aboveLeft0 > this._contentWidth) {
|
||||
// Don't render if position is scrolled outside viewport
|
||||
@@ -333,39 +334,39 @@ class Widget {
|
||||
let aboveLeft = aboveLeft0 + this._contentLeft;
|
||||
let belowLeft = belowLeft0 + this._contentLeft;
|
||||
|
||||
let domNodePosition = dom.getDomNodePagePosition(this._viewDomNode.domNode);
|
||||
let absoluteAboveTop = domNodePosition.top + aboveTop - dom.StandardWindow.scrollY;
|
||||
let absoluteBelowTop = domNodePosition.top + belowTop - dom.StandardWindow.scrollY;
|
||||
const domNodePosition = dom.getDomNodePagePosition(this._viewDomNode.domNode);
|
||||
const absoluteAboveTop = domNodePosition.top + aboveTop - dom.StandardWindow.scrollY;
|
||||
const absoluteBelowTop = domNodePosition.top + belowTop - dom.StandardWindow.scrollY;
|
||||
let absoluteAboveLeft = domNodePosition.left + aboveLeft - dom.StandardWindow.scrollX;
|
||||
let absoluteBelowLeft = domNodePosition.left + belowLeft - dom.StandardWindow.scrollX;
|
||||
|
||||
let INNER_WIDTH = window.innerWidth || document.documentElement!.clientWidth || document.body.clientWidth;
|
||||
let INNER_HEIGHT = window.innerHeight || document.documentElement!.clientHeight || document.body.clientHeight;
|
||||
const INNER_WIDTH = window.innerWidth || document.documentElement!.clientWidth || document.body.clientWidth;
|
||||
const INNER_HEIGHT = window.innerHeight || document.documentElement!.clientHeight || document.body.clientHeight;
|
||||
|
||||
// Leave some clearance to the bottom
|
||||
let TOP_PADDING = 22;
|
||||
let BOTTOM_PADDING = 22;
|
||||
const TOP_PADDING = 22;
|
||||
const BOTTOM_PADDING = 22;
|
||||
|
||||
let fitsAbove = (absoluteAboveTop >= TOP_PADDING),
|
||||
const fitsAbove = (absoluteAboveTop >= TOP_PADDING),
|
||||
fitsBelow = (absoluteBelowTop + height <= INNER_HEIGHT - BOTTOM_PADDING);
|
||||
|
||||
if (absoluteAboveLeft + width + 20 > INNER_WIDTH) {
|
||||
let delta = absoluteAboveLeft - (INNER_WIDTH - width - 20);
|
||||
const delta = absoluteAboveLeft - (INNER_WIDTH - width - 20);
|
||||
absoluteAboveLeft -= delta;
|
||||
aboveLeft -= delta;
|
||||
}
|
||||
if (absoluteBelowLeft + width + 20 > INNER_WIDTH) {
|
||||
let delta = absoluteBelowLeft - (INNER_WIDTH - width - 20);
|
||||
const delta = absoluteBelowLeft - (INNER_WIDTH - width - 20);
|
||||
absoluteBelowLeft -= delta;
|
||||
belowLeft -= delta;
|
||||
}
|
||||
if (absoluteAboveLeft < 0) {
|
||||
let delta = absoluteAboveLeft;
|
||||
const delta = absoluteAboveLeft;
|
||||
absoluteAboveLeft -= delta;
|
||||
aboveLeft -= delta;
|
||||
}
|
||||
if (absoluteBelowLeft < 0) {
|
||||
let delta = absoluteBelowLeft;
|
||||
const delta = absoluteBelowLeft;
|
||||
absoluteBelowLeft -= delta;
|
||||
belowLeft -= delta;
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import * as viewEvents from 'vs/editor/common/view/viewEvents';
|
||||
import { registerThemingParticipant } from 'vs/platform/theme/common/themeService';
|
||||
|
||||
export class CurrentLineHighlightOverlay extends DynamicViewOverlay {
|
||||
private _context: ViewContext;
|
||||
private readonly _context: ViewContext;
|
||||
private _lineHeight: number;
|
||||
private _renderLineHighlight: 'none' | 'gutter' | 'line' | 'all';
|
||||
private _selectionIsEmpty: boolean;
|
||||
|
||||
@@ -12,7 +12,7 @@ import * as viewEvents from 'vs/editor/common/view/viewEvents';
|
||||
import { registerThemingParticipant } from 'vs/platform/theme/common/themeService';
|
||||
|
||||
export class CurrentLineMarginHighlightOverlay extends DynamicViewOverlay {
|
||||
private _context: ViewContext;
|
||||
private readonly _context: ViewContext;
|
||||
private _lineHeight: number;
|
||||
private _renderLineHighlight: 'none' | 'gutter' | 'line' | 'all';
|
||||
private _selectionIsEmpty: boolean;
|
||||
|
||||
@@ -13,7 +13,7 @@ import { ViewModelDecoration } from 'vs/editor/common/viewModel/viewModel';
|
||||
|
||||
export class DecorationsOverlay extends DynamicViewOverlay {
|
||||
|
||||
private _context: ViewContext;
|
||||
private readonly _context: ViewContext;
|
||||
private _lineHeight: number;
|
||||
private _typicalHalfwidthCharacterWidth: number;
|
||||
private _renderResult: string[] | null;
|
||||
@@ -69,12 +69,12 @@ export class DecorationsOverlay extends DynamicViewOverlay {
|
||||
// --- end event handlers
|
||||
|
||||
public prepareRender(ctx: RenderingContext): void {
|
||||
let _decorations = ctx.getDecorationsInViewport();
|
||||
const _decorations = ctx.getDecorationsInViewport();
|
||||
|
||||
// Keep only decorations with `className`
|
||||
let decorations: ViewModelDecoration[] = [], decorationsLen = 0;
|
||||
for (let i = 0, len = _decorations.length; i < len; i++) {
|
||||
let d = _decorations[i];
|
||||
const d = _decorations[i];
|
||||
if (d.options.className) {
|
||||
decorations[decorationsLen++] = d;
|
||||
}
|
||||
@@ -101,11 +101,11 @@ export class DecorationsOverlay extends DynamicViewOverlay {
|
||||
return Range.compareRangesUsingStarts(a.range, b.range);
|
||||
});
|
||||
|
||||
let visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
let visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
let output: string[] = [];
|
||||
const visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
const visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
const output: string[] = [];
|
||||
for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {
|
||||
let lineIndex = lineNumber - visibleStartLineNumber;
|
||||
const lineIndex = lineNumber - visibleStartLineNumber;
|
||||
output[lineIndex] = '';
|
||||
}
|
||||
|
||||
@@ -116,18 +116,18 @@ export class DecorationsOverlay extends DynamicViewOverlay {
|
||||
}
|
||||
|
||||
private _renderWholeLineDecorations(ctx: RenderingContext, decorations: ViewModelDecoration[], output: string[]): void {
|
||||
let lineHeight = String(this._lineHeight);
|
||||
let visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
let visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
const lineHeight = String(this._lineHeight);
|
||||
const visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
const visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
|
||||
for (let i = 0, lenI = decorations.length; i < lenI; i++) {
|
||||
let d = decorations[i];
|
||||
const d = decorations[i];
|
||||
|
||||
if (!d.options.isWholeLine) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let decorationOutput = (
|
||||
const decorationOutput = (
|
||||
'<div class="cdr '
|
||||
+ d.options.className
|
||||
+ '" style="left:0;width:100%;height:'
|
||||
@@ -135,10 +135,10 @@ export class DecorationsOverlay extends DynamicViewOverlay {
|
||||
+ 'px;"></div>'
|
||||
);
|
||||
|
||||
let startLineNumber = Math.max(d.range.startLineNumber, visibleStartLineNumber);
|
||||
let endLineNumber = Math.min(d.range.endLineNumber, visibleEndLineNumber);
|
||||
const startLineNumber = Math.max(d.range.startLineNumber, visibleStartLineNumber);
|
||||
const endLineNumber = Math.min(d.range.endLineNumber, visibleEndLineNumber);
|
||||
for (let j = startLineNumber; j <= endLineNumber; j++) {
|
||||
let lineIndex = j - visibleStartLineNumber;
|
||||
const lineIndex = j - visibleStartLineNumber;
|
||||
output[lineIndex] += decorationOutput;
|
||||
}
|
||||
}
|
||||
@@ -189,13 +189,13 @@ export class DecorationsOverlay extends DynamicViewOverlay {
|
||||
}
|
||||
|
||||
private _renderNormalDecoration(ctx: RenderingContext, range: Range, className: string, showIfCollapsed: boolean, lineHeight: string, visibleStartLineNumber: number, output: string[]): void {
|
||||
let linesVisibleRanges = ctx.linesVisibleRangesForRange(range, /*TODO@Alex*/className === 'findMatch');
|
||||
const linesVisibleRanges = ctx.linesVisibleRangesForRange(range, /*TODO@Alex*/className === 'findMatch');
|
||||
if (!linesVisibleRanges) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (let j = 0, lenJ = linesVisibleRanges.length; j < lenJ; j++) {
|
||||
let lineVisibleRanges = linesVisibleRanges[j];
|
||||
const lineVisibleRanges = linesVisibleRanges[j];
|
||||
const lineIndex = lineVisibleRanges.lineNumber - visibleStartLineNumber;
|
||||
|
||||
if (showIfCollapsed && lineVisibleRanges.ranges.length === 1) {
|
||||
@@ -228,7 +228,7 @@ export class DecorationsOverlay extends DynamicViewOverlay {
|
||||
if (!this._renderResult) {
|
||||
return '';
|
||||
}
|
||||
let lineIndex = lineNumber - startLineNumber;
|
||||
const lineIndex = lineNumber - startLineNumber;
|
||||
if (lineIndex < 0 || lineIndex >= this._renderResult.length) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@@ -17,8 +17,8 @@ import { getThemeTypeSelector } from 'vs/platform/theme/common/themeService';
|
||||
|
||||
export class EditorScrollbar extends ViewPart {
|
||||
|
||||
private scrollbar: SmoothScrollableElement;
|
||||
private scrollbarDomNode: FastDomNode<HTMLElement>;
|
||||
private readonly scrollbar: SmoothScrollableElement;
|
||||
private readonly scrollbarDomNode: FastDomNode<HTMLElement>;
|
||||
|
||||
constructor(
|
||||
context: ViewContext,
|
||||
@@ -31,7 +31,7 @@ export class EditorScrollbar extends ViewPart {
|
||||
const editor = this._context.configuration.editor;
|
||||
const configScrollbarOpts = editor.viewInfo.scrollbar;
|
||||
|
||||
let scrollbarOptions: ScrollableElementCreationOptions = {
|
||||
const scrollbarOptions: ScrollableElementCreationOptions = {
|
||||
listenOnDomNode: viewDomNode.domNode,
|
||||
className: 'editor-scrollable' + ' ' + getThemeTypeSelector(context.theme.type),
|
||||
useShadows: false,
|
||||
@@ -62,11 +62,11 @@ export class EditorScrollbar extends ViewPart {
|
||||
// the browser will try desperately to reveal that dom node, unexpectedly
|
||||
// changing the .scrollTop of this.linesContent
|
||||
|
||||
let onBrowserDesperateReveal = (domNode: HTMLElement, lookAtScrollTop: boolean, lookAtScrollLeft: boolean) => {
|
||||
let newScrollPosition: INewScrollPosition = {};
|
||||
const onBrowserDesperateReveal = (domNode: HTMLElement, lookAtScrollTop: boolean, lookAtScrollLeft: boolean) => {
|
||||
const newScrollPosition: INewScrollPosition = {};
|
||||
|
||||
if (lookAtScrollTop) {
|
||||
let deltaTop = domNode.scrollTop;
|
||||
const deltaTop = domNode.scrollTop;
|
||||
if (deltaTop) {
|
||||
newScrollPosition.scrollTop = this._context.viewLayout.getCurrentScrollTop() + deltaTop;
|
||||
domNode.scrollTop = 0;
|
||||
@@ -74,7 +74,7 @@ export class EditorScrollbar extends ViewPart {
|
||||
}
|
||||
|
||||
if (lookAtScrollLeft) {
|
||||
let deltaLeft = domNode.scrollLeft;
|
||||
const deltaLeft = domNode.scrollLeft;
|
||||
if (deltaLeft) {
|
||||
newScrollPosition.scrollLeft = this._context.viewLayout.getCurrentScrollLeft() + deltaLeft;
|
||||
domNode.scrollLeft = 0;
|
||||
@@ -126,7 +126,7 @@ export class EditorScrollbar extends ViewPart {
|
||||
public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {
|
||||
if (e.viewInfo) {
|
||||
const editor = this._context.configuration.editor;
|
||||
let newOpts: ScrollableElementChangeOptions = {
|
||||
const newOpts: ScrollableElementChangeOptions = {
|
||||
handleMouseWheel: editor.viewInfo.scrollbar.handleMouseWheel,
|
||||
mouseWheelScrollSensitivity: editor.viewInfo.scrollbar.mouseWheelScrollSensitivity,
|
||||
fastScrollSensitivity: editor.viewInfo.scrollbar.fastScrollSensitivity
|
||||
|
||||
@@ -27,9 +27,9 @@ export abstract class DedupOverlay extends DynamicViewOverlay {
|
||||
|
||||
protected _render(visibleStartLineNumber: number, visibleEndLineNumber: number, decorations: DecorationToRender[]): string[][] {
|
||||
|
||||
let output: string[][] = [];
|
||||
const output: string[][] = [];
|
||||
for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {
|
||||
let lineIndex = lineNumber - visibleStartLineNumber;
|
||||
const lineIndex = lineNumber - visibleStartLineNumber;
|
||||
output[lineIndex] = [];
|
||||
}
|
||||
|
||||
@@ -50,10 +50,10 @@ export abstract class DedupOverlay extends DynamicViewOverlay {
|
||||
let prevClassName: string | null = null;
|
||||
let prevEndLineIndex = 0;
|
||||
for (let i = 0, len = decorations.length; i < len; i++) {
|
||||
let d = decorations[i];
|
||||
let className = d.className;
|
||||
const d = decorations[i];
|
||||
const className = d.className;
|
||||
let startLineIndex = Math.max(d.startLineNumber, visibleStartLineNumber) - visibleStartLineNumber;
|
||||
let endLineIndex = Math.min(d.endLineNumber, visibleEndLineNumber) - visibleStartLineNumber;
|
||||
const endLineIndex = Math.min(d.endLineNumber, visibleEndLineNumber) - visibleStartLineNumber;
|
||||
|
||||
if (prevClassName === className) {
|
||||
startLineIndex = Math.max(prevEndLineIndex + 1, startLineIndex);
|
||||
@@ -74,7 +74,7 @@ export abstract class DedupOverlay extends DynamicViewOverlay {
|
||||
|
||||
export class GlyphMarginOverlay extends DedupOverlay {
|
||||
|
||||
private _context: ViewContext;
|
||||
private readonly _context: ViewContext;
|
||||
private _lineHeight: number;
|
||||
private _glyphMargin: boolean;
|
||||
private _glyphMarginLeft: number;
|
||||
@@ -138,11 +138,11 @@ export class GlyphMarginOverlay extends DedupOverlay {
|
||||
// --- end event handlers
|
||||
|
||||
protected _getDecorations(ctx: RenderingContext): DecorationToRender[] {
|
||||
let decorations = ctx.getDecorationsInViewport();
|
||||
const decorations = ctx.getDecorationsInViewport();
|
||||
let r: DecorationToRender[] = [], rLen = 0;
|
||||
for (let i = 0, len = decorations.length; i < len; i++) {
|
||||
let d = decorations[i];
|
||||
let glyphMarginClassName = d.options.glyphMarginClassName;
|
||||
const d = decorations[i];
|
||||
const glyphMarginClassName = d.options.glyphMarginClassName;
|
||||
if (glyphMarginClassName) {
|
||||
r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, glyphMarginClassName);
|
||||
}
|
||||
@@ -156,19 +156,19 @@ export class GlyphMarginOverlay extends DedupOverlay {
|
||||
return;
|
||||
}
|
||||
|
||||
let visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
let visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
let toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));
|
||||
const visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
const visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
const toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));
|
||||
|
||||
let lineHeight = this._lineHeight.toString();
|
||||
let left = this._glyphMarginLeft.toString();
|
||||
let width = this._glyphMarginWidth.toString();
|
||||
let common = '" style="left:' + left + 'px;width:' + width + 'px' + ';height:' + lineHeight + 'px;"></div>';
|
||||
const lineHeight = this._lineHeight.toString();
|
||||
const left = this._glyphMarginLeft.toString();
|
||||
const width = this._glyphMarginWidth.toString();
|
||||
const common = '" style="left:' + left + 'px;width:' + width + 'px' + ';height:' + lineHeight + 'px;"></div>';
|
||||
|
||||
let output: string[] = [];
|
||||
const output: string[] = [];
|
||||
for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {
|
||||
let lineIndex = lineNumber - visibleStartLineNumber;
|
||||
let classNames = toRender[lineIndex];
|
||||
const lineIndex = lineNumber - visibleStartLineNumber;
|
||||
const classNames = toRender[lineIndex];
|
||||
|
||||
if (classNames.length === 0) {
|
||||
output[lineIndex] = '';
|
||||
@@ -188,7 +188,7 @@ export class GlyphMarginOverlay extends DedupOverlay {
|
||||
if (!this._renderResult) {
|
||||
return '';
|
||||
}
|
||||
let lineIndex = lineNumber - startLineNumber;
|
||||
const lineIndex = lineNumber - startLineNumber;
|
||||
if (lineIndex < 0 || lineIndex >= this._renderResult.length) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import { registerThemingParticipant } from 'vs/platform/theme/common/themeServic
|
||||
|
||||
export class IndentGuidesOverlay extends DynamicViewOverlay {
|
||||
|
||||
private _context: ViewContext;
|
||||
private readonly _context: ViewContext;
|
||||
private _primaryLineNumber: number;
|
||||
private _lineHeight: number;
|
||||
private _spaceWidth: number;
|
||||
@@ -103,11 +103,10 @@ export class IndentGuidesOverlay extends DynamicViewOverlay {
|
||||
|
||||
const visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
const visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
const tabSize = this._context.model.getTabSize();
|
||||
const tabWidth = tabSize * this._spaceWidth;
|
||||
const { indentSize } = this._context.model.getOptions();
|
||||
const indentWidth = indentSize * this._spaceWidth;
|
||||
const scrollWidth = ctx.scrollWidth;
|
||||
const lineHeight = this._lineHeight;
|
||||
const indentGuideWidth = tabWidth;
|
||||
|
||||
const indents = this._context.model.getLinesIndentGuides(visibleStartLineNumber, visibleEndLineNumber);
|
||||
|
||||
@@ -121,19 +120,19 @@ export class IndentGuidesOverlay extends DynamicViewOverlay {
|
||||
activeIndentLevel = activeIndentInfo.indent;
|
||||
}
|
||||
|
||||
let output: string[] = [];
|
||||
const output: string[] = [];
|
||||
for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {
|
||||
const containsActiveIndentGuide = (activeIndentStartLineNumber <= lineNumber && lineNumber <= activeIndentEndLineNumber);
|
||||
const lineIndex = lineNumber - visibleStartLineNumber;
|
||||
const indent = indents[lineIndex];
|
||||
|
||||
let result = '';
|
||||
let leftMostVisiblePosition = ctx.visibleRangeForPosition(new Position(lineNumber, 1));
|
||||
const leftMostVisiblePosition = ctx.visibleRangeForPosition(new Position(lineNumber, 1));
|
||||
let left = leftMostVisiblePosition ? leftMostVisiblePosition.left : 0;
|
||||
for (let i = 1; i <= indent; i++) {
|
||||
let className = (containsActiveIndentGuide && i === activeIndentLevel ? 'cigra' : 'cigr');
|
||||
result += `<div class="${className}" style="left:${left}px;height:${lineHeight}px;width:${indentGuideWidth}px"></div>`;
|
||||
left += tabWidth;
|
||||
const className = (containsActiveIndentGuide && i === activeIndentLevel ? 'cigra' : 'cigr');
|
||||
result += `<div class="${className}" style="left:${left}px;height:${lineHeight}px;width:${indentWidth}px"></div>`;
|
||||
left += indentWidth;
|
||||
if (left > scrollWidth) {
|
||||
break;
|
||||
}
|
||||
@@ -148,7 +147,7 @@ export class IndentGuidesOverlay extends DynamicViewOverlay {
|
||||
if (!this._renderResult) {
|
||||
return '';
|
||||
}
|
||||
let lineIndex = lineNumber - startLineNumber;
|
||||
const lineIndex = lineNumber - startLineNumber;
|
||||
if (lineIndex < 0 || lineIndex >= this._renderResult.length) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="30" height="42" viewBox="0 0 30 42" style="enable-background:new 0 0 30 42;"><polygon style="fill:#FFFFFF;stroke:#000000;stroke-width:2;" points="29,2.4 3.8,27.6 14.3,27.6 9,38.1 15.4,40.2 20.6,29.7 29,36"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="30" height="50" viewBox="0 0 30 50" style="enable-background:new 0 0 30 50;"><polygon style="fill:#FFFFFF;stroke:#000000;stroke-width:2;" points="29,2.4 3.8,27.6 14,27.6 6.4,43 12.6,45 20.2,29.8 29,36"/></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 277 B After Width: | Height: | Size: 273 B |
@@ -1 +1,2 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="36" viewBox="0 0 24 36.1"><defs><style>.a{fill:#fff;}</style></defs><title>flipped-cursor-mac-2x</title><polygon points="8.6 33.1 11.8 23.9 2.2 23.9 23 2.5 23 31.3 17.4 26.1 14.2 35.1 8.6 33.1"/><path class="a" d="M22,29.1l-5-4.6-3.062,8.938-4.062-1.5L13,23H5L22,5M0,25H10.4l-3,8.3L15,36.1l3.125-7.662L24,33V0Z"/></svg>
|
||||
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 26 38" style="enable-background:new 0 0 26 38;" width="26" height="38"><style type="text/css">.st0{stroke:#FFFFFF;stroke-miterlimit:10;}</style> <title>flipped-cursor-mac</title><path class="st0" d="M10.6,33.2l3.2-9.4H4.2L25,2.4v28.8L19.4,26l-3.2,9.2c-0.4,1-1.6,1.6-2.6,1.2L12,35.8 C10.8,35.4,10.2,34.4,10.6,33.2z"/></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 378 B After Width: | Height: | Size: 447 B |
@@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="18" viewBox="0 0 12 18"><style>.st0{fill:#fff}</style><title>flipped-cursor-mac</title><path d="M4.3 16.5l1.6-4.6H1.1L11.5 1.2v14.4L8.7 13l-1.6 4.5z"/><path class="st0" d="M11 14.5l-2.5-2.3L7 16.7 5 16l1.6-4.5h-4l8.5-9M0 12.5h5.2l-1.5 4.1L7.5 18 9 14.2l2.9 2.3V0L0 12.5z"/></svg>
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 13 19" style="enable-background:new 0 0 13 19;" width="13" height="19"><style type="text/css">.st0{stroke:#FFFFFF;stroke-miterlimit:10;}</style><title>flipped-cursor-mac</title><path class="st0" d="M5.3,16.6l1.6-4.7H2.1L12.5,1.2v14.4L9.7,13l-1.6,4.6c-0.2,0.5-0.8,0.8-1.3,0.6L6,17.9 C5.4,17.7,5.1,17.2,5.3,16.6z"/></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 338 B After Width: | Height: | Size: 443 B |
@@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="21" x="0px" y="0px" viewBox="0 0 15 21" style="enable-background:new 0 0 15 21;"><polygon style="fill:#FFFFFF;stroke:#000000" points="14.5,1.2 1.9,13.8 7.1,13.8 4.5,19.1 7.7,20.1 10.3,14.9 14.5,18"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="25" x="0px" y="0px" viewBox="0 0 15 25" style="enable-background:new 0 0 15 25;"><polygon style="fill:#FFFFFF;stroke:#000000" points="14.5,1.2 1.9,13.8 7,13.8 3.2,21.5 6.3,22.5 10.1,14.9 14.5,18"/></svg>
|
||||
|
Before Width: | Height: | Size: 264 B After Width: | Height: | Size: 262 B |
@@ -18,11 +18,12 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
|
||||
|
||||
public static readonly CLASS_NAME = 'line-numbers';
|
||||
|
||||
private _context: ViewContext;
|
||||
private readonly _context: ViewContext;
|
||||
|
||||
private _lineHeight: number;
|
||||
private _renderLineNumbers: RenderLineNumbersType;
|
||||
private _renderCustomLineNumbers: ((lineNumber: number) => string) | null;
|
||||
private _renderFinalNewline: boolean;
|
||||
private _lineNumbersLeft: number;
|
||||
private _lineNumbersWidth: number;
|
||||
private _lastCursorModelPosition: Position;
|
||||
@@ -44,6 +45,7 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
|
||||
this._lineHeight = config.lineHeight;
|
||||
this._renderLineNumbers = config.viewInfo.renderLineNumbers;
|
||||
this._renderCustomLineNumbers = config.viewInfo.renderCustomLineNumbers;
|
||||
this._renderFinalNewline = config.viewInfo.renderFinalNewline;
|
||||
this._lineNumbersLeft = config.layoutInfo.lineNumbersLeft;
|
||||
this._lineNumbersWidth = config.layoutInfo.lineNumbersWidth;
|
||||
}
|
||||
@@ -95,14 +97,23 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
|
||||
if (modelPosition.column !== 1) {
|
||||
return '';
|
||||
}
|
||||
let modelLineNumber = modelPosition.lineNumber;
|
||||
const modelLineNumber = modelPosition.lineNumber;
|
||||
|
||||
if (!this._renderFinalNewline) {
|
||||
const lineCount = this._context.model.getLineCount();
|
||||
const lineContent = this._context.model.getLineContent(modelLineNumber);
|
||||
|
||||
if (modelLineNumber === lineCount && lineContent === '') {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
if (this._renderCustomLineNumbers) {
|
||||
return this._renderCustomLineNumbers(modelLineNumber);
|
||||
}
|
||||
|
||||
if (this._renderLineNumbers === RenderLineNumbersType.Relative) {
|
||||
let diff = Math.abs(this._lastCursorModelPosition.lineNumber - modelLineNumber);
|
||||
const diff = Math.abs(this._lastCursorModelPosition.lineNumber - modelLineNumber);
|
||||
if (diff === 0) {
|
||||
return '<span class="relative-current-line-number">' + modelLineNumber + '</span>';
|
||||
}
|
||||
@@ -128,16 +139,16 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
|
||||
return;
|
||||
}
|
||||
|
||||
let lineHeightClassName = (platform.isLinux ? (this._lineHeight % 2 === 0 ? ' lh-even' : ' lh-odd') : '');
|
||||
let visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
let visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
let common = '<div class="' + LineNumbersOverlay.CLASS_NAME + lineHeightClassName + '" style="left:' + this._lineNumbersLeft.toString() + 'px;width:' + this._lineNumbersWidth.toString() + 'px;">';
|
||||
const lineHeightClassName = (platform.isLinux ? (this._lineHeight % 2 === 0 ? ' lh-even' : ' lh-odd') : '');
|
||||
const visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
const visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
const common = '<div class="' + LineNumbersOverlay.CLASS_NAME + lineHeightClassName + '" style="left:' + this._lineNumbersLeft.toString() + 'px;width:' + this._lineNumbersWidth.toString() + 'px;">';
|
||||
|
||||
let output: string[] = [];
|
||||
const output: string[] = [];
|
||||
for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {
|
||||
let lineIndex = lineNumber - visibleStartLineNumber;
|
||||
const lineIndex = lineNumber - visibleStartLineNumber;
|
||||
|
||||
let renderLineNumber = this._getLineRenderLineNumber(lineNumber);
|
||||
const renderLineNumber = this._getLineRenderLineNumber(lineNumber);
|
||||
|
||||
if (renderLineNumber) {
|
||||
output[lineIndex] = (
|
||||
@@ -157,7 +168,7 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
|
||||
if (!this._renderResult) {
|
||||
return '';
|
||||
}
|
||||
let lineIndex = lineNumber - startLineNumber;
|
||||
const lineIndex = lineNumber - startLineNumber;
|
||||
if (lineIndex < 0 || lineIndex >= this._renderResult.length) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ export class RangeUtil {
|
||||
}
|
||||
|
||||
private static _readClientRects(startElement: Node, startOffset: number, endElement: Node, endOffset: number, endNode: HTMLElement): ClientRectList | DOMRectList | null {
|
||||
let range = this._createRange();
|
||||
const range = this._createRange();
|
||||
try {
|
||||
range.setStart(startElement, startOffset);
|
||||
range.setEnd(endElement, endOffset);
|
||||
@@ -102,7 +102,7 @@ export class RangeUtil {
|
||||
// We go through FloatHorizontalRange because it has been observed in bi-di text
|
||||
// that the clientRects are not coming in sorted from the browser
|
||||
|
||||
let result: FloatHorizontalRange[] = [];
|
||||
const result: FloatHorizontalRange[] = [];
|
||||
for (let i = 0, len = clientRects.length; i < len; i++) {
|
||||
const clientRect = clientRects[i];
|
||||
result[i] = new FloatHorizontalRange(Math.max(0, clientRect.left - clientRectDeltaLeft), clientRect.width);
|
||||
@@ -113,8 +113,8 @@ export class RangeUtil {
|
||||
|
||||
public static readHorizontalRanges(domNode: HTMLElement, startChildIndex: number, startOffset: number, endChildIndex: number, endOffset: number, clientRectDeltaLeft: number, endNode: HTMLElement): HorizontalRange[] | null {
|
||||
// Panic check
|
||||
let min = 0;
|
||||
let max = domNode.children.length - 1;
|
||||
const min = 0;
|
||||
const max = domNode.children.length - 1;
|
||||
if (min > max) {
|
||||
return null;
|
||||
}
|
||||
@@ -152,7 +152,7 @@ export class RangeUtil {
|
||||
startOffset = Math.min(startElement.textContent!.length, Math.max(0, startOffset));
|
||||
endOffset = Math.min(endElement.textContent!.length, Math.max(0, endOffset));
|
||||
|
||||
let clientRects = this._readClientRects(startElement, startOffset, endElement, endOffset, endNode);
|
||||
const clientRects = this._readClientRects(startElement, startOffset, endElement, endOffset, endNode);
|
||||
return this._createHorizontalRangesFromClientRects(clientRects, clientRectDeltaLeft);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,8 +180,8 @@ export class ViewLine implements IVisibleLine {
|
||||
continue;
|
||||
}
|
||||
|
||||
let startColumn = (selection.startLineNumber === lineNumber ? selection.startColumn : lineData.minColumn);
|
||||
let endColumn = (selection.endLineNumber === lineNumber ? selection.endColumn : lineData.maxColumn);
|
||||
const startColumn = (selection.startLineNumber === lineNumber ? selection.startColumn : lineData.minColumn);
|
||||
const endColumn = (selection.endLineNumber === lineNumber ? selection.endColumn : lineData.maxColumn);
|
||||
|
||||
if (startColumn < endColumn) {
|
||||
actualInlineDecorations.push(new LineDecoration(startColumn, endColumn, 'inline-selected-text', InlineDecorationType.Regular));
|
||||
@@ -189,7 +189,7 @@ export class ViewLine implements IVisibleLine {
|
||||
}
|
||||
}
|
||||
|
||||
let renderLineInput = new RenderLineInput(
|
||||
const renderLineInput = new RenderLineInput(
|
||||
options.useMonospaceOptimizations,
|
||||
options.canUseHalfwidthRightwardsArrow,
|
||||
lineData.content,
|
||||
@@ -369,7 +369,7 @@ class FastRenderedViewLine implements IRenderedViewLine {
|
||||
}
|
||||
|
||||
public getColumnOfNodeOffset(lineNumber: number, spanNode: HTMLElement, offset: number): number {
|
||||
let spanNodeTextContentLength = spanNode.textContent!.length;
|
||||
const spanNodeTextContentLength = spanNode.textContent!.length;
|
||||
|
||||
let spanIndex = -1;
|
||||
while (spanNode) {
|
||||
@@ -377,7 +377,7 @@ class FastRenderedViewLine implements IRenderedViewLine {
|
||||
spanIndex++;
|
||||
}
|
||||
|
||||
let charOffset = this._characterMapping.partDataToCharOffset(spanIndex, spanNodeTextContentLength, offset);
|
||||
const charOffset = this._characterMapping.partDataToCharOffset(spanIndex, spanNodeTextContentLength, offset);
|
||||
return charOffset + 1;
|
||||
}
|
||||
}
|
||||
@@ -398,7 +398,7 @@ class RenderedViewLine implements IRenderedViewLine {
|
||||
/**
|
||||
* This is a map that is used only when the line is guaranteed to have no RTL text.
|
||||
*/
|
||||
private _pixelOffsetCache: Int32Array | null;
|
||||
private readonly _pixelOffsetCache: Int32Array | null;
|
||||
|
||||
constructor(domNode: FastDomNode<HTMLElement>, renderLineInput: RenderLineInput, characterMapping: CharacterMapping, containsRTL: boolean, containsForeignElements: ForeignElementType) {
|
||||
this.domNode = domNode;
|
||||
@@ -446,12 +446,12 @@ class RenderedViewLine implements IRenderedViewLine {
|
||||
public getVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] | null {
|
||||
if (this._pixelOffsetCache !== null) {
|
||||
// the text is LTR
|
||||
let startOffset = this._readPixelOffset(startColumn, context);
|
||||
const startOffset = this._readPixelOffset(startColumn, context);
|
||||
if (startOffset === -1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let endOffset = this._readPixelOffset(endColumn, context);
|
||||
const endOffset = this._readPixelOffset(endColumn, context);
|
||||
if (endOffset === -1) {
|
||||
return null;
|
||||
}
|
||||
@@ -464,7 +464,7 @@ class RenderedViewLine implements IRenderedViewLine {
|
||||
|
||||
protected _readVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] | null {
|
||||
if (startColumn === endColumn) {
|
||||
let pixelOffset = this._readPixelOffset(startColumn, context);
|
||||
const pixelOffset = this._readPixelOffset(startColumn, context);
|
||||
if (pixelOffset === -1) {
|
||||
return null;
|
||||
} else {
|
||||
@@ -495,12 +495,12 @@ class RenderedViewLine implements IRenderedViewLine {
|
||||
if (this._pixelOffsetCache !== null) {
|
||||
// the text is LTR
|
||||
|
||||
let cachedPixelOffset = this._pixelOffsetCache[column];
|
||||
const cachedPixelOffset = this._pixelOffsetCache[column];
|
||||
if (cachedPixelOffset !== -1) {
|
||||
return cachedPixelOffset;
|
||||
}
|
||||
|
||||
let result = this._actualReadPixelOffset(column, context);
|
||||
const result = this._actualReadPixelOffset(column, context);
|
||||
this._pixelOffsetCache[column] = result;
|
||||
return result;
|
||||
}
|
||||
@@ -511,7 +511,7 @@ class RenderedViewLine implements IRenderedViewLine {
|
||||
private _actualReadPixelOffset(column: number, context: DomReadingContext): number {
|
||||
if (this._characterMapping.length === 0) {
|
||||
// This line has no content
|
||||
let r = RangeUtil.readHorizontalRanges(this._getReadingTarget(), 0, 0, 0, 0, context.clientRectDeltaLeft, context.endNode);
|
||||
const r = RangeUtil.readHorizontalRanges(this._getReadingTarget(), 0, 0, 0, 0, context.clientRectDeltaLeft, context.endNode);
|
||||
if (!r || r.length === 0) {
|
||||
return -1;
|
||||
}
|
||||
@@ -523,11 +523,11 @@ class RenderedViewLine implements IRenderedViewLine {
|
||||
return this.getWidth();
|
||||
}
|
||||
|
||||
let partData = this._characterMapping.charOffsetToPartData(column - 1);
|
||||
let partIndex = CharacterMapping.getPartIndex(partData);
|
||||
let charOffsetInPart = CharacterMapping.getCharIndex(partData);
|
||||
const partData = this._characterMapping.charOffsetToPartData(column - 1);
|
||||
const partIndex = CharacterMapping.getPartIndex(partData);
|
||||
const charOffsetInPart = CharacterMapping.getCharIndex(partData);
|
||||
|
||||
let r = RangeUtil.readHorizontalRanges(this._getReadingTarget(), partIndex, charOffsetInPart, partIndex, charOffsetInPart, context.clientRectDeltaLeft, context.endNode);
|
||||
const r = RangeUtil.readHorizontalRanges(this._getReadingTarget(), partIndex, charOffsetInPart, partIndex, charOffsetInPart, context.clientRectDeltaLeft, context.endNode);
|
||||
if (!r || r.length === 0) {
|
||||
return -1;
|
||||
}
|
||||
@@ -542,13 +542,13 @@ class RenderedViewLine implements IRenderedViewLine {
|
||||
return [new HorizontalRange(0, this.getWidth())];
|
||||
}
|
||||
|
||||
let startPartData = this._characterMapping.charOffsetToPartData(startColumn - 1);
|
||||
let startPartIndex = CharacterMapping.getPartIndex(startPartData);
|
||||
let startCharOffsetInPart = CharacterMapping.getCharIndex(startPartData);
|
||||
const startPartData = this._characterMapping.charOffsetToPartData(startColumn - 1);
|
||||
const startPartIndex = CharacterMapping.getPartIndex(startPartData);
|
||||
const startCharOffsetInPart = CharacterMapping.getCharIndex(startPartData);
|
||||
|
||||
let endPartData = this._characterMapping.charOffsetToPartData(endColumn - 1);
|
||||
let endPartIndex = CharacterMapping.getPartIndex(endPartData);
|
||||
let endCharOffsetInPart = CharacterMapping.getCharIndex(endPartData);
|
||||
const endPartData = this._characterMapping.charOffsetToPartData(endColumn - 1);
|
||||
const endPartIndex = CharacterMapping.getPartIndex(endPartData);
|
||||
const endCharOffsetInPart = CharacterMapping.getCharIndex(endPartData);
|
||||
|
||||
return RangeUtil.readHorizontalRanges(this._getReadingTarget(), startPartIndex, startCharOffsetInPart, endPartIndex, endCharOffsetInPart, context.clientRectDeltaLeft, context.endNode);
|
||||
}
|
||||
@@ -557,7 +557,7 @@ class RenderedViewLine implements IRenderedViewLine {
|
||||
* Returns the column for the text found at a specific offset inside a rendered dom node
|
||||
*/
|
||||
public getColumnOfNodeOffset(lineNumber: number, spanNode: HTMLElement, offset: number): number {
|
||||
let spanNodeTextContentLength = spanNode.textContent!.length;
|
||||
const spanNodeTextContentLength = spanNode.textContent!.length;
|
||||
|
||||
let spanIndex = -1;
|
||||
while (spanNode) {
|
||||
@@ -565,14 +565,14 @@ class RenderedViewLine implements IRenderedViewLine {
|
||||
spanIndex++;
|
||||
}
|
||||
|
||||
let charOffset = this._characterMapping.partDataToCharOffset(spanIndex, spanNodeTextContentLength, offset);
|
||||
const charOffset = this._characterMapping.partDataToCharOffset(spanIndex, spanNodeTextContentLength, offset);
|
||||
return charOffset + 1;
|
||||
}
|
||||
}
|
||||
|
||||
class WebKitRenderedViewLine extends RenderedViewLine {
|
||||
protected _readVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] | null {
|
||||
let output = super._readVisibleRangesForRange(startColumn, endColumn, context);
|
||||
const output = super._readVisibleRangesForRange(startColumn, endColumn, context);
|
||||
|
||||
if (!output || output.length === 0 || startColumn === endColumn || (startColumn === 1 && endColumn === this._characterMapping.length)) {
|
||||
return output;
|
||||
@@ -583,9 +583,9 @@ class WebKitRenderedViewLine extends RenderedViewLine {
|
||||
if (!this.input.containsRTL) {
|
||||
// This is an attempt to patch things up
|
||||
// Find position of last column
|
||||
let endPixelOffset = this._readPixelOffset(endColumn, context);
|
||||
const endPixelOffset = this._readPixelOffset(endColumn, context);
|
||||
if (endPixelOffset !== -1) {
|
||||
let lastRange = output[output.length - 1];
|
||||
const lastRange = output[output.length - 1];
|
||||
if (lastRange.left < endPixelOffset) {
|
||||
// Trim down the width of the last visible range to not go after the last column's position
|
||||
lastRange.width = endPixelOffset - lastRange.left;
|
||||
|
||||
@@ -76,10 +76,10 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
|
||||
// --- width
|
||||
private _maxLineWidth: number;
|
||||
private _asyncUpdateLineWidths: RunOnceScheduler;
|
||||
private readonly _asyncUpdateLineWidths: RunOnceScheduler;
|
||||
|
||||
private _horizontalRevealRequest: HorizontalRevealRequest | null;
|
||||
private _lastRenderedData: LastRenderedData;
|
||||
private readonly _lastRenderedData: LastRenderedData;
|
||||
|
||||
constructor(context: ViewContext, linesContent: FastDomNode<HTMLElement>) {
|
||||
super(context);
|
||||
@@ -169,14 +169,14 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
private _onOptionsMaybeChanged(): boolean {
|
||||
const conf = this._context.configuration;
|
||||
|
||||
let newViewLineOptions = new ViewLineOptions(conf, this._context.theme.type);
|
||||
const newViewLineOptions = new ViewLineOptions(conf, this._context.theme.type);
|
||||
if (!this._viewLineOptions.equals(newViewLineOptions)) {
|
||||
this._viewLineOptions = newViewLineOptions;
|
||||
|
||||
let startLineNumber = this._visibleLines.getStartLineNumber();
|
||||
let endLineNumber = this._visibleLines.getEndLineNumber();
|
||||
const startLineNumber = this._visibleLines.getStartLineNumber();
|
||||
const endLineNumber = this._visibleLines.getEndLineNumber();
|
||||
for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {
|
||||
let line = this._visibleLines.getVisibleLine(lineNumber);
|
||||
const line = this._visibleLines.getVisibleLine(lineNumber);
|
||||
line.onOptionsChanged(this._viewLineOptions);
|
||||
}
|
||||
return true;
|
||||
@@ -185,8 +185,8 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
return false;
|
||||
}
|
||||
public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {
|
||||
let rendStartLineNumber = this._visibleLines.getStartLineNumber();
|
||||
let rendEndLineNumber = this._visibleLines.getEndLineNumber();
|
||||
const rendStartLineNumber = this._visibleLines.getStartLineNumber();
|
||||
const rendEndLineNumber = this._visibleLines.getEndLineNumber();
|
||||
let r = false;
|
||||
for (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {
|
||||
r = this._visibleLines.getVisibleLine(lineNumber).onSelectionChanged() || r;
|
||||
@@ -195,8 +195,8 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
}
|
||||
public onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean {
|
||||
if (true/*e.inlineDecorationsChanged*/) {
|
||||
let rendStartLineNumber = this._visibleLines.getStartLineNumber();
|
||||
let rendEndLineNumber = this._visibleLines.getEndLineNumber();
|
||||
const rendStartLineNumber = this._visibleLines.getStartLineNumber();
|
||||
const rendEndLineNumber = this._visibleLines.getEndLineNumber();
|
||||
for (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {
|
||||
this._visibleLines.getVisibleLine(lineNumber).onDecorationsChanged();
|
||||
}
|
||||
@@ -204,7 +204,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
return true;
|
||||
}
|
||||
public onFlushed(e: viewEvents.ViewFlushedEvent): boolean {
|
||||
let shouldRender = this._visibleLines.onFlushed(e);
|
||||
const shouldRender = this._visibleLines.onFlushed(e);
|
||||
this._maxLineWidth = 0;
|
||||
return shouldRender;
|
||||
}
|
||||
@@ -282,12 +282,12 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
// ----------- HELPERS FOR OTHERS
|
||||
|
||||
public getPositionFromDOMInfo(spanNode: HTMLElement, offset: number): Position | null {
|
||||
let viewLineDomNode = this._getViewLineDomNode(spanNode);
|
||||
const viewLineDomNode = this._getViewLineDomNode(spanNode);
|
||||
if (viewLineDomNode === null) {
|
||||
// Couldn't find view line node
|
||||
return null;
|
||||
}
|
||||
let lineNumber = this._getLineNumberFor(viewLineDomNode);
|
||||
const lineNumber = this._getLineNumberFor(viewLineDomNode);
|
||||
|
||||
if (lineNumber === -1) {
|
||||
// Couldn't find view line node
|
||||
@@ -304,15 +304,15 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
return new Position(lineNumber, 1);
|
||||
}
|
||||
|
||||
let rendStartLineNumber = this._visibleLines.getStartLineNumber();
|
||||
let rendEndLineNumber = this._visibleLines.getEndLineNumber();
|
||||
const rendStartLineNumber = this._visibleLines.getStartLineNumber();
|
||||
const rendEndLineNumber = this._visibleLines.getEndLineNumber();
|
||||
if (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {
|
||||
// Couldn't find line
|
||||
return null;
|
||||
}
|
||||
|
||||
let column = this._visibleLines.getVisibleLine(lineNumber).getColumnOfNodeOffset(lineNumber, spanNode, offset);
|
||||
let minColumn = this._context.model.getLineMinColumn(lineNumber);
|
||||
const minColumn = this._context.model.getLineMinColumn(lineNumber);
|
||||
if (column < minColumn) {
|
||||
column = minColumn;
|
||||
}
|
||||
@@ -333,10 +333,10 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
* @returns the line number of this view line dom node.
|
||||
*/
|
||||
private _getLineNumberFor(domNode: HTMLElement): number {
|
||||
let startLineNumber = this._visibleLines.getStartLineNumber();
|
||||
let endLineNumber = this._visibleLines.getEndLineNumber();
|
||||
const startLineNumber = this._visibleLines.getStartLineNumber();
|
||||
const endLineNumber = this._visibleLines.getEndLineNumber();
|
||||
for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {
|
||||
let line = this._visibleLines.getVisibleLine(lineNumber);
|
||||
const line = this._visibleLines.getVisibleLine(lineNumber);
|
||||
if (domNode === line.getDomNode()) {
|
||||
return lineNumber;
|
||||
}
|
||||
@@ -345,8 +345,8 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
}
|
||||
|
||||
public getLineWidth(lineNumber: number): number {
|
||||
let rendStartLineNumber = this._visibleLines.getStartLineNumber();
|
||||
let rendEndLineNumber = this._visibleLines.getEndLineNumber();
|
||||
const rendStartLineNumber = this._visibleLines.getStartLineNumber();
|
||||
const rendEndLineNumber = this._visibleLines.getEndLineNumber();
|
||||
if (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {
|
||||
// Couldn't find line
|
||||
return -1;
|
||||
@@ -362,38 +362,38 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
return null;
|
||||
}
|
||||
|
||||
let originalEndLineNumber = _range.endLineNumber;
|
||||
const originalEndLineNumber = _range.endLineNumber;
|
||||
const range = Range.intersectRanges(_range, this._lastRenderedData.getCurrentVisibleRange());
|
||||
if (!range) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let visibleRanges: LineVisibleRanges[] = [], visibleRangesLen = 0;
|
||||
let domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);
|
||||
const domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);
|
||||
|
||||
let nextLineModelLineNumber: number = 0;
|
||||
if (includeNewLines) {
|
||||
nextLineModelLineNumber = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new Position(range.startLineNumber, 1)).lineNumber;
|
||||
}
|
||||
|
||||
let rendStartLineNumber = this._visibleLines.getStartLineNumber();
|
||||
let rendEndLineNumber = this._visibleLines.getEndLineNumber();
|
||||
const rendStartLineNumber = this._visibleLines.getStartLineNumber();
|
||||
const rendEndLineNumber = this._visibleLines.getEndLineNumber();
|
||||
for (let lineNumber = range.startLineNumber; lineNumber <= range.endLineNumber; lineNumber++) {
|
||||
|
||||
if (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let startColumn = lineNumber === range.startLineNumber ? range.startColumn : 1;
|
||||
let endColumn = lineNumber === range.endLineNumber ? range.endColumn : this._context.model.getLineMaxColumn(lineNumber);
|
||||
let visibleRangesForLine = this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(startColumn, endColumn, domReadingContext);
|
||||
const startColumn = lineNumber === range.startLineNumber ? range.startColumn : 1;
|
||||
const endColumn = lineNumber === range.endLineNumber ? range.endColumn : this._context.model.getLineMaxColumn(lineNumber);
|
||||
const visibleRangesForLine = this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(startColumn, endColumn, domReadingContext);
|
||||
|
||||
if (!visibleRangesForLine || visibleRangesForLine.length === 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (includeNewLines && lineNumber < originalEndLineNumber) {
|
||||
let currentLineModelLineNumber = nextLineModelLineNumber;
|
||||
const currentLineModelLineNumber = nextLineModelLineNumber;
|
||||
nextLineModelLineNumber = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new Position(lineNumber + 1, 1)).lineNumber;
|
||||
|
||||
if (currentLineModelLineNumber !== nextLineModelLineNumber) {
|
||||
@@ -425,19 +425,19 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
}
|
||||
|
||||
let result: HorizontalRange[] = [];
|
||||
let domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);
|
||||
const domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);
|
||||
|
||||
let rendStartLineNumber = this._visibleLines.getStartLineNumber();
|
||||
let rendEndLineNumber = this._visibleLines.getEndLineNumber();
|
||||
const rendStartLineNumber = this._visibleLines.getStartLineNumber();
|
||||
const rendEndLineNumber = this._visibleLines.getEndLineNumber();
|
||||
for (let lineNumber = range.startLineNumber; lineNumber <= range.endLineNumber; lineNumber++) {
|
||||
|
||||
if (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let startColumn = lineNumber === range.startLineNumber ? range.startColumn : 1;
|
||||
let endColumn = lineNumber === range.endLineNumber ? range.endColumn : this._context.model.getLineMaxColumn(lineNumber);
|
||||
let visibleRangesForLine = this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(startColumn, endColumn, domReadingContext);
|
||||
const startColumn = lineNumber === range.startLineNumber ? range.startColumn : 1;
|
||||
const endColumn = lineNumber === range.endLineNumber ? range.endColumn : this._context.model.getLineMaxColumn(lineNumber);
|
||||
const visibleRangesForLine = this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(startColumn, endColumn, domReadingContext);
|
||||
|
||||
if (!visibleRangesForLine || visibleRangesForLine.length === 0) {
|
||||
continue;
|
||||
@@ -542,9 +542,9 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
this.onDidRender();
|
||||
|
||||
// compute new scroll position
|
||||
let newScrollLeft = this._computeScrollLeftToRevealRange(revealLineNumber, revealStartColumn, revealEndColumn);
|
||||
const newScrollLeft = this._computeScrollLeftToRevealRange(revealLineNumber, revealStartColumn, revealEndColumn);
|
||||
|
||||
let isViewportWrapping = this._isViewportWrapping;
|
||||
const isViewportWrapping = this._isViewportWrapping;
|
||||
if (!isViewportWrapping) {
|
||||
// ensure `scrollWidth` is large enough
|
||||
this._ensureMaxLineWidth(newScrollLeft.maxHorizontalOffset);
|
||||
@@ -579,7 +579,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
// --- width
|
||||
|
||||
private _ensureMaxLineWidth(lineWidth: number): void {
|
||||
let iLineWidth = Math.ceil(lineWidth);
|
||||
const iLineWidth = Math.ceil(lineWidth);
|
||||
if (this._maxLineWidth < iLineWidth) {
|
||||
this._maxLineWidth = iLineWidth;
|
||||
this._context.viewLayout.onMaxLineWidthChanged(this._maxLineWidth);
|
||||
@@ -587,9 +587,9 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
}
|
||||
|
||||
private _computeScrollTopToRevealRange(viewport: Viewport, range: Range, verticalType: viewEvents.VerticalRevealType): number {
|
||||
let viewportStartY = viewport.top;
|
||||
let viewportHeight = viewport.height;
|
||||
let viewportEndY = viewportStartY + viewportHeight;
|
||||
const viewportStartY = viewport.top;
|
||||
const viewportHeight = viewport.height;
|
||||
const viewportEndY = viewportStartY + viewportHeight;
|
||||
let boxStartY: number;
|
||||
let boxEndY: number;
|
||||
|
||||
@@ -609,7 +609,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
newScrollTop = viewportStartY;
|
||||
} else {
|
||||
// Box is outside the viewport... center it
|
||||
let boxMiddleY = (boxStartY + boxEndY) / 2;
|
||||
const boxMiddleY = (boxStartY + boxEndY) / 2;
|
||||
newScrollTop = Math.max(0, boxMiddleY - viewportHeight / 2);
|
||||
}
|
||||
} else {
|
||||
@@ -623,11 +623,11 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
|
||||
let maxHorizontalOffset = 0;
|
||||
|
||||
let viewport = this._context.viewLayout.getCurrentViewport();
|
||||
let viewportStartX = viewport.left;
|
||||
let viewportEndX = viewportStartX + viewport.width;
|
||||
const viewport = this._context.viewLayout.getCurrentViewport();
|
||||
const viewportStartX = viewport.left;
|
||||
const viewportEndX = viewportStartX + viewport.width;
|
||||
|
||||
let visibleRanges = this.visibleRangesForRange2(new Range(lineNumber, startColumn, lineNumber, endColumn));
|
||||
const visibleRanges = this.visibleRangesForRange2(new Range(lineNumber, startColumn, lineNumber, endColumn));
|
||||
let boxStartX = Number.MAX_VALUE;
|
||||
let boxEndX = 0;
|
||||
|
||||
@@ -653,7 +653,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
boxStartX = Math.max(0, boxStartX - ViewLines.HORIZONTAL_EXTRA_PX);
|
||||
boxEndX += this._revealHorizontalRightPadding;
|
||||
|
||||
let newScrollLeft = this._computeMinimumScrolling(viewportStartX, viewportEndX, boxStartX, boxEndX);
|
||||
const newScrollLeft = this._computeMinimumScrolling(viewportStartX, viewportEndX, boxStartX, boxEndX);
|
||||
return {
|
||||
scrollLeft: newScrollLeft,
|
||||
maxHorizontalOffset: maxHorizontalOffset
|
||||
@@ -668,8 +668,8 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
|
||||
revealAtStart = !!revealAtStart;
|
||||
revealAtEnd = !!revealAtEnd;
|
||||
|
||||
let viewportLength = viewportEnd - viewportStart;
|
||||
let boxLength = boxEnd - boxStart;
|
||||
const viewportLength = viewportEnd - viewportStart;
|
||||
const boxLength = boxEnd - boxStart;
|
||||
|
||||
if (boxLength < viewportLength) {
|
||||
// The box would fit in the viewport
|
||||
|
||||
@@ -11,7 +11,7 @@ import * as viewEvents from 'vs/editor/common/view/viewEvents';
|
||||
|
||||
export class LinesDecorationsOverlay extends DedupOverlay {
|
||||
|
||||
private _context: ViewContext;
|
||||
private readonly _context: ViewContext;
|
||||
|
||||
private _decorationsLeft: number;
|
||||
private _decorationsWidth: number;
|
||||
@@ -66,11 +66,11 @@ export class LinesDecorationsOverlay extends DedupOverlay {
|
||||
// --- end event handlers
|
||||
|
||||
protected _getDecorations(ctx: RenderingContext): DecorationToRender[] {
|
||||
let decorations = ctx.getDecorationsInViewport();
|
||||
const decorations = ctx.getDecorationsInViewport();
|
||||
let r: DecorationToRender[] = [], rLen = 0;
|
||||
for (let i = 0, len = decorations.length; i < len; i++) {
|
||||
let d = decorations[i];
|
||||
let linesDecorationsClassName = d.options.linesDecorationsClassName;
|
||||
const d = decorations[i];
|
||||
const linesDecorationsClassName = d.options.linesDecorationsClassName;
|
||||
if (linesDecorationsClassName) {
|
||||
r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, linesDecorationsClassName);
|
||||
}
|
||||
@@ -79,18 +79,18 @@ export class LinesDecorationsOverlay extends DedupOverlay {
|
||||
}
|
||||
|
||||
public prepareRender(ctx: RenderingContext): void {
|
||||
let visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
let visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
let toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));
|
||||
const visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
const visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
const toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));
|
||||
|
||||
let left = this._decorationsLeft.toString();
|
||||
let width = this._decorationsWidth.toString();
|
||||
let common = '" style="left:' + left + 'px;width:' + width + 'px;"></div>';
|
||||
const left = this._decorationsLeft.toString();
|
||||
const width = this._decorationsWidth.toString();
|
||||
const common = '" style="left:' + left + 'px;width:' + width + 'px;"></div>';
|
||||
|
||||
let output: string[] = [];
|
||||
const output: string[] = [];
|
||||
for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {
|
||||
let lineIndex = lineNumber - visibleStartLineNumber;
|
||||
let classNames = toRender[lineIndex];
|
||||
const lineIndex = lineNumber - visibleStartLineNumber;
|
||||
const classNames = toRender[lineIndex];
|
||||
let lineOutput = '';
|
||||
for (let i = 0, len = classNames.length; i < len; i++) {
|
||||
lineOutput += '<div class="cldr ' + classNames[i] + common;
|
||||
|
||||
@@ -14,7 +14,7 @@ export class Margin extends ViewPart {
|
||||
public static readonly CLASS_NAME = 'glyph-margin';
|
||||
public static readonly OUTER_CLASS_NAME = 'margin';
|
||||
|
||||
private _domNode: FastDomNode<HTMLElement>;
|
||||
private readonly _domNode: FastDomNode<HTMLElement>;
|
||||
private _canUseLayerHinting: boolean;
|
||||
private _contentLeft: number;
|
||||
private _glyphMarginLeft: number;
|
||||
@@ -40,7 +40,7 @@ export class Margin extends ViewPart {
|
||||
}
|
||||
|
||||
private _createDomNode(): FastDomNode<HTMLElement> {
|
||||
let domNode = createFastDomNode(document.createElement('div'));
|
||||
const domNode = createFastDomNode(document.createElement('div'));
|
||||
domNode.setClassName(Margin.OUTER_CLASS_NAME);
|
||||
domNode.setPosition('absolute');
|
||||
domNode.setAttribute('role', 'presentation');
|
||||
@@ -83,7 +83,7 @@ export class Margin extends ViewPart {
|
||||
const adjustedScrollTop = ctx.scrollTop - ctx.bigNumbersDelta;
|
||||
this._domNode.setTop(-adjustedScrollTop);
|
||||
|
||||
let height = Math.min(ctx.scrollHeight, 1000000);
|
||||
const height = Math.min(ctx.scrollHeight, 1000000);
|
||||
this._domNode.setHeight(height);
|
||||
this._domNode.setWidth(this._contentLeft);
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ import { ViewContext } from 'vs/editor/common/view/viewContext';
|
||||
import * as viewEvents from 'vs/editor/common/view/viewEvents';
|
||||
|
||||
export class MarginViewLineDecorationsOverlay extends DedupOverlay {
|
||||
private _context: ViewContext;
|
||||
private readonly _context: ViewContext;
|
||||
private _renderResult: string[] | null;
|
||||
|
||||
constructor(context: ViewContext) {
|
||||
@@ -56,11 +56,11 @@ export class MarginViewLineDecorationsOverlay extends DedupOverlay {
|
||||
// --- end event handlers
|
||||
|
||||
protected _getDecorations(ctx: RenderingContext): DecorationToRender[] {
|
||||
let decorations = ctx.getDecorationsInViewport();
|
||||
const decorations = ctx.getDecorationsInViewport();
|
||||
let r: DecorationToRender[] = [], rLen = 0;
|
||||
for (let i = 0, len = decorations.length; i < len; i++) {
|
||||
let d = decorations[i];
|
||||
let marginClassName = d.options.marginClassName;
|
||||
const d = decorations[i];
|
||||
const marginClassName = d.options.marginClassName;
|
||||
if (marginClassName) {
|
||||
r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, marginClassName);
|
||||
}
|
||||
@@ -69,14 +69,14 @@ export class MarginViewLineDecorationsOverlay extends DedupOverlay {
|
||||
}
|
||||
|
||||
public prepareRender(ctx: RenderingContext): void {
|
||||
let visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
let visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
let toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));
|
||||
const visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
const visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
const toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));
|
||||
|
||||
let output: string[] = [];
|
||||
const output: string[] = [];
|
||||
for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {
|
||||
let lineIndex = lineNumber - visibleStartLineNumber;
|
||||
let classNames = toRender[lineIndex];
|
||||
const lineIndex = lineNumber - visibleStartLineNumber;
|
||||
const classNames = toRender[lineIndex];
|
||||
let lineOutput = '';
|
||||
for (let i = 0, len = classNames.length; i < len; i++) {
|
||||
lineOutput += '<div class="cmdr ' + classNames[i] + '" style=""></div>';
|
||||
|
||||
@@ -200,7 +200,7 @@ class MinimapLayout {
|
||||
* Compute a desired `scrollPosition` such that the slider moves by `delta`.
|
||||
*/
|
||||
public getDesiredScrollTopFromDelta(delta: number): number {
|
||||
let desiredSliderPosition = this.sliderTop + delta;
|
||||
const desiredSliderPosition = this.sliderTop + delta;
|
||||
return Math.round(desiredSliderPosition / this._computedSliderRatio);
|
||||
}
|
||||
|
||||
@@ -350,7 +350,7 @@ class RenderData {
|
||||
}
|
||||
|
||||
_get(): { imageData: ImageData; rendLineNumberStart: number; lines: MinimapLine[]; } {
|
||||
let tmp = this._renderedLines._get();
|
||||
const tmp = this._renderedLines._get();
|
||||
return {
|
||||
imageData: this._imageData,
|
||||
rendLineNumberStart: tmp.rendLineNumberStart,
|
||||
@@ -396,7 +396,7 @@ class MinimapBuffers {
|
||||
public getBuffer(): ImageData {
|
||||
// rotate buffers
|
||||
this._lastUsedBuffer = 1 - this._lastUsedBuffer;
|
||||
let result = this._buffers[this._lastUsedBuffer];
|
||||
const result = this._buffers[this._lastUsedBuffer];
|
||||
|
||||
// fill with background color
|
||||
result.data.set(this._backgroundFillData);
|
||||
@@ -409,7 +409,7 @@ class MinimapBuffers {
|
||||
const backgroundG = background.g;
|
||||
const backgroundB = background.b;
|
||||
|
||||
let result = new Uint8ClampedArray(WIDTH * HEIGHT * 4);
|
||||
const result = new Uint8ClampedArray(WIDTH * HEIGHT * 4);
|
||||
let offset = 0;
|
||||
for (let i = 0; i < HEIGHT; i++) {
|
||||
for (let j = 0; j < WIDTH; j++) {
|
||||
@@ -584,7 +584,7 @@ export class Minimap extends ViewPart {
|
||||
}
|
||||
|
||||
private _onOptionsMaybeChanged(): boolean {
|
||||
let opts = new MinimapOptions(this._context.configuration);
|
||||
const opts = new MinimapOptions(this._context.configuration);
|
||||
if (this._options.equals(opts)) {
|
||||
return false;
|
||||
}
|
||||
@@ -721,7 +721,7 @@ export class Minimap extends ViewPart {
|
||||
|
||||
// Render the rest of lines
|
||||
let dy = 0;
|
||||
let renderedLines: MinimapLine[] = [];
|
||||
const renderedLines: MinimapLine[] = [];
|
||||
for (let lineIndex = 0, lineCount = endLineNumber - startLineNumber + 1; lineIndex < lineCount; lineIndex++) {
|
||||
if (needed[lineIndex]) {
|
||||
Minimap._renderLine(
|
||||
@@ -764,7 +764,7 @@ export class Minimap extends ViewPart {
|
||||
lastRenderData: RenderData | null,
|
||||
): [number, number, boolean[]] {
|
||||
|
||||
let needed: boolean[] = [];
|
||||
const needed: boolean[] = [];
|
||||
if (!lastRenderData) {
|
||||
for (let i = 0, len = endLineNumber - startLineNumber + 1; i < len; i++) {
|
||||
needed[i] = true;
|
||||
@@ -801,10 +801,10 @@ export class Minimap extends ViewPart {
|
||||
continue;
|
||||
}
|
||||
|
||||
let sourceStart = source_dy * WIDTH * 4;
|
||||
let sourceEnd = (source_dy + minimapLineHeight) * WIDTH * 4;
|
||||
let destStart = dest_dy * WIDTH * 4;
|
||||
let destEnd = (dest_dy + minimapLineHeight) * WIDTH * 4;
|
||||
const sourceStart = source_dy * WIDTH * 4;
|
||||
const sourceEnd = (source_dy + minimapLineHeight) * WIDTH * 4;
|
||||
const destStart = dest_dy * WIDTH * 4;
|
||||
const destEnd = (dest_dy + minimapLineHeight) * WIDTH * 4;
|
||||
|
||||
if (copySourceEnd === sourceStart && copyDestEnd === destStart) {
|
||||
// contiguous zone => extend copy request
|
||||
@@ -881,7 +881,7 @@ export class Minimap extends ViewPart {
|
||||
const charCode = content.charCodeAt(charIndex);
|
||||
|
||||
if (charCode === CharCode.Tab) {
|
||||
let insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;
|
||||
const insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;
|
||||
tabsCharDelta += insertSpacesCount - 1;
|
||||
// No need to render anything since tab is invisible
|
||||
dx += insertSpacesCount * charWidth;
|
||||
@@ -890,7 +890,7 @@ export class Minimap extends ViewPart {
|
||||
dx += charWidth;
|
||||
} else {
|
||||
// Render twice for a full width character
|
||||
let count = strings.isFullWidthCharacter(charCode) ? 2 : 1;
|
||||
const count = strings.isFullWidthCharacter(charCode) ? 2 : 1;
|
||||
|
||||
for (let i = 0; i < count; i++) {
|
||||
if (renderMinimap === RenderMinimap.Large) {
|
||||
|
||||
@@ -24,7 +24,7 @@ interface IWidgetMap {
|
||||
export class ViewOverlayWidgets extends ViewPart {
|
||||
|
||||
private _widgets: IWidgetMap;
|
||||
private _domNode: FastDomNode<HTMLElement>;
|
||||
private readonly _domNode: FastDomNode<HTMLElement>;
|
||||
|
||||
private _verticalScrollbarWidth: number;
|
||||
private _minimapWidth: number;
|
||||
@@ -90,7 +90,7 @@ export class ViewOverlayWidgets extends ViewPart {
|
||||
}
|
||||
|
||||
public setWidgetPosition(widget: IOverlayWidget, preference: OverlayWidgetPositionPreference | null): boolean {
|
||||
let widgetData = this._widgets[widget.getId()];
|
||||
const widgetData = this._widgets[widget.getId()];
|
||||
if (widgetData.preference === preference) {
|
||||
return false;
|
||||
}
|
||||
@@ -102,7 +102,7 @@ export class ViewOverlayWidgets extends ViewPart {
|
||||
}
|
||||
|
||||
public removeWidget(widget: IOverlayWidget): void {
|
||||
let widgetId = widget.getId();
|
||||
const widgetId = widget.getId();
|
||||
if (this._widgets.hasOwnProperty(widgetId)) {
|
||||
const widgetData = this._widgets[widgetId];
|
||||
const domNode = widgetData.domNode.domNode;
|
||||
@@ -125,7 +125,7 @@ export class ViewOverlayWidgets extends ViewPart {
|
||||
domNode.setTop(0);
|
||||
domNode.setRight((2 * this._verticalScrollbarWidth) + this._minimapWidth);
|
||||
} else if (widgetData.preference === OverlayWidgetPositionPreference.BOTTOM_RIGHT_CORNER) {
|
||||
let widgetHeight = domNode.domNode.clientHeight;
|
||||
const widgetHeight = domNode.domNode.clientHeight;
|
||||
domNode.setTop((this._editorHeight - widgetHeight - 2 * this._horizontalScrollbarHeight));
|
||||
domNode.setRight((2 * this._verticalScrollbarWidth) + this._minimapWidth);
|
||||
} else if (widgetData.preference === OverlayWidgetPositionPreference.TOP_CENTER) {
|
||||
@@ -141,9 +141,9 @@ export class ViewOverlayWidgets extends ViewPart {
|
||||
public render(ctx: RestrictedRenderingContext): void {
|
||||
this._domNode.setWidth(this._editorWidth);
|
||||
|
||||
let keys = Object.keys(this._widgets);
|
||||
const keys = Object.keys(this._widgets);
|
||||
for (let i = 0, len = keys.length; i < len; i++) {
|
||||
let widgetId = keys[i];
|
||||
const widgetId = keys[i];
|
||||
this._renderWidget(this._widgets[widgetId]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -340,7 +340,7 @@ export class DecorationsOverviewRuler extends ViewPart {
|
||||
|
||||
let y1 = (viewLayout.getVerticalOffsetForLineNumber(startLineNumber) * heightRatio) | 0;
|
||||
let y2 = ((viewLayout.getVerticalOffsetForLineNumber(endLineNumber) + lineHeight) * heightRatio) | 0;
|
||||
let height = y2 - y1;
|
||||
const height = y2 - y1;
|
||||
if (height < minDecorationHeight) {
|
||||
let yCenter = ((y1 + y2) / 2) | 0;
|
||||
if (yCenter < halfMinDecorationHeight) {
|
||||
|
||||
@@ -13,9 +13,9 @@ import { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler';
|
||||
|
||||
export class OverviewRuler extends ViewEventHandler implements IOverviewRuler {
|
||||
|
||||
private _context: ViewContext;
|
||||
private _domNode: FastDomNode<HTMLCanvasElement>;
|
||||
private _zoneManager: OverviewZoneManager;
|
||||
private readonly _context: ViewContext;
|
||||
private readonly _domNode: FastDomNode<HTMLCanvasElement>;
|
||||
private readonly _zoneManager: OverviewZoneManager;
|
||||
|
||||
constructor(context: ViewContext, cssClassName: string) {
|
||||
super();
|
||||
@@ -114,10 +114,10 @@ export class OverviewRuler extends ViewEventHandler implements IOverviewRuler {
|
||||
const width = this._zoneManager.getCanvasWidth();
|
||||
const height = this._zoneManager.getCanvasHeight();
|
||||
|
||||
let colorZones = this._zoneManager.resolveColorZones();
|
||||
let id2Color = this._zoneManager.getId2Color();
|
||||
const colorZones = this._zoneManager.resolveColorZones();
|
||||
const id2Color = this._zoneManager.getId2Color();
|
||||
|
||||
let ctx = this._domNode.domNode.getContext('2d')!;
|
||||
const ctx = this._domNode.domNode.getContext('2d')!;
|
||||
ctx.clearRect(0, 0, width, height);
|
||||
if (colorZones.length > 0) {
|
||||
this._renderOneLane(ctx, colorZones, id2Color, width);
|
||||
|
||||
@@ -15,7 +15,7 @@ import { registerThemingParticipant } from 'vs/platform/theme/common/themeServic
|
||||
export class Rulers extends ViewPart {
|
||||
|
||||
public domNode: FastDomNode<HTMLElement>;
|
||||
private _renderedRulers: FastDomNode<HTMLElement>[];
|
||||
private readonly _renderedRulers: FastDomNode<HTMLElement>[];
|
||||
private _rulers: number[];
|
||||
private _typicalHalfwidthCharacterWidth: number;
|
||||
|
||||
@@ -64,10 +64,11 @@ export class Rulers extends ViewPart {
|
||||
}
|
||||
|
||||
if (currentCount < desiredCount) {
|
||||
const rulerWidth = this._context.model.getTabSize();
|
||||
const { tabSize } = this._context.model.getOptions();
|
||||
const rulerWidth = tabSize;
|
||||
let addCount = desiredCount - currentCount;
|
||||
while (addCount > 0) {
|
||||
let node = createFastDomNode(document.createElement('div'));
|
||||
const node = createFastDomNode(document.createElement('div'));
|
||||
node.setClassName('view-ruler');
|
||||
node.setWidth(rulerWidth);
|
||||
this.domNode.appendChild(node);
|
||||
@@ -79,7 +80,7 @@ export class Rulers extends ViewPart {
|
||||
|
||||
let removeCount = currentCount - desiredCount;
|
||||
while (removeCount > 0) {
|
||||
let node = this._renderedRulers.pop()!;
|
||||
const node = this._renderedRulers.pop()!;
|
||||
this.domNode.removeChild(node);
|
||||
removeCount--;
|
||||
}
|
||||
@@ -90,7 +91,7 @@ export class Rulers extends ViewPart {
|
||||
this._ensureRulersCount();
|
||||
|
||||
for (let i = 0, len = this._rulers.length; i < len; i++) {
|
||||
let node = this._renderedRulers[i];
|
||||
const node = this._renderedRulers[i];
|
||||
|
||||
node.setHeight(Math.min(ctx.scrollHeight, 1000000));
|
||||
node.setLeft(this._rulers[i] * this._typicalHalfwidthCharacterWidth);
|
||||
|
||||
@@ -14,7 +14,7 @@ import { registerThemingParticipant } from 'vs/platform/theme/common/themeServic
|
||||
|
||||
export class ScrollDecorationViewPart extends ViewPart {
|
||||
|
||||
private _domNode: FastDomNode<HTMLElement>;
|
||||
private readonly _domNode: FastDomNode<HTMLElement>;
|
||||
private _scrollTop: number;
|
||||
private _width: number;
|
||||
private _shouldShow: boolean;
|
||||
@@ -38,7 +38,7 @@ export class ScrollDecorationViewPart extends ViewPart {
|
||||
}
|
||||
|
||||
private _updateShouldShow(): boolean {
|
||||
let newShouldShow = (this._useShadows && this._scrollTop > 0);
|
||||
const newShouldShow = (this._useShadows && this._scrollTop > 0);
|
||||
if (this._shouldShow !== newShouldShow) {
|
||||
this._shouldShow = newShouldShow;
|
||||
return true;
|
||||
|
||||
@@ -73,7 +73,7 @@ export class SelectionsOverlay extends DynamicViewOverlay {
|
||||
|
||||
private static readonly ROUNDED_PIECE_WIDTH = 10;
|
||||
|
||||
private _context: ViewContext;
|
||||
private readonly _context: ViewContext;
|
||||
private _lineHeight: number;
|
||||
private _roundedSelection: boolean;
|
||||
private _typicalHalfwidthCharacterWidth: number;
|
||||
@@ -143,7 +143,7 @@ export class SelectionsOverlay extends DynamicViewOverlay {
|
||||
private _visibleRangesHaveGaps(linesVisibleRanges: LineVisibleRangesWithStyle[]): boolean {
|
||||
|
||||
for (let i = 0, len = linesVisibleRanges.length; i < len; i++) {
|
||||
let lineVisibleRanges = linesVisibleRanges[i];
|
||||
const lineVisibleRanges = linesVisibleRanges[i];
|
||||
|
||||
if (lineVisibleRanges.ranges.length > 1) {
|
||||
// There are two ranges on the same line
|
||||
@@ -161,7 +161,7 @@ export class SelectionsOverlay extends DynamicViewOverlay {
|
||||
|
||||
if (previousFrame && previousFrame.length > 0 && linesVisibleRanges.length > 0) {
|
||||
|
||||
let topLineNumber = linesVisibleRanges[0].lineNumber;
|
||||
const topLineNumber = linesVisibleRanges[0].lineNumber;
|
||||
if (topLineNumber === viewport.startLineNumber) {
|
||||
for (let i = 0; !previousFrameTop && i < previousFrame.length; i++) {
|
||||
if (previousFrame[i].lineNumber === topLineNumber) {
|
||||
@@ -170,7 +170,7 @@ export class SelectionsOverlay extends DynamicViewOverlay {
|
||||
}
|
||||
}
|
||||
|
||||
let bottomLineNumber = linesVisibleRanges[linesVisibleRanges.length - 1].lineNumber;
|
||||
const bottomLineNumber = linesVisibleRanges[linesVisibleRanges.length - 1].lineNumber;
|
||||
if (bottomLineNumber === viewport.endLineNumber) {
|
||||
for (let i = previousFrame.length - 1; !previousFrameBottom && i >= 0; i--) {
|
||||
if (previousFrame[i].lineNumber === bottomLineNumber) {
|
||||
@@ -189,24 +189,24 @@ export class SelectionsOverlay extends DynamicViewOverlay {
|
||||
|
||||
for (let i = 0, len = linesVisibleRanges.length; i < len; i++) {
|
||||
// We know for a fact that there is precisely one range on each line
|
||||
let curLineRange = linesVisibleRanges[i].ranges[0];
|
||||
let curLeft = curLineRange.left;
|
||||
let curRight = curLineRange.left + curLineRange.width;
|
||||
const curLineRange = linesVisibleRanges[i].ranges[0];
|
||||
const curLeft = curLineRange.left;
|
||||
const curRight = curLineRange.left + curLineRange.width;
|
||||
|
||||
let startStyle = {
|
||||
const startStyle = {
|
||||
top: CornerStyle.EXTERN,
|
||||
bottom: CornerStyle.EXTERN
|
||||
};
|
||||
|
||||
let endStyle = {
|
||||
const endStyle = {
|
||||
top: CornerStyle.EXTERN,
|
||||
bottom: CornerStyle.EXTERN
|
||||
};
|
||||
|
||||
if (i > 0) {
|
||||
// Look above
|
||||
let prevLeft = linesVisibleRanges[i - 1].ranges[0].left;
|
||||
let prevRight = linesVisibleRanges[i - 1].ranges[0].left + linesVisibleRanges[i - 1].ranges[0].width;
|
||||
const prevLeft = linesVisibleRanges[i - 1].ranges[0].left;
|
||||
const prevRight = linesVisibleRanges[i - 1].ranges[0].left + linesVisibleRanges[i - 1].ranges[0].width;
|
||||
|
||||
if (abs(curLeft - prevLeft) < epsilon) {
|
||||
startStyle.top = CornerStyle.FLAT;
|
||||
@@ -227,8 +227,8 @@ export class SelectionsOverlay extends DynamicViewOverlay {
|
||||
|
||||
if (i + 1 < len) {
|
||||
// Look below
|
||||
let nextLeft = linesVisibleRanges[i + 1].ranges[0].left;
|
||||
let nextRight = linesVisibleRanges[i + 1].ranges[0].left + linesVisibleRanges[i + 1].ranges[0].width;
|
||||
const nextLeft = linesVisibleRanges[i + 1].ranges[0].left;
|
||||
const nextRight = linesVisibleRanges[i + 1].ranges[0].left + linesVisibleRanges[i + 1].ranges[0].width;
|
||||
|
||||
if (abs(curLeft - nextLeft) < epsilon) {
|
||||
startStyle.bottom = CornerStyle.FLAT;
|
||||
@@ -253,9 +253,9 @@ export class SelectionsOverlay extends DynamicViewOverlay {
|
||||
}
|
||||
|
||||
private _getVisibleRangesWithStyle(selection: Range, ctx: RenderingContext, previousFrame: LineVisibleRangesWithStyle[] | null): LineVisibleRangesWithStyle[] {
|
||||
let _linesVisibleRanges = ctx.linesVisibleRangesForRange(selection, true) || [];
|
||||
let linesVisibleRanges = _linesVisibleRanges.map(toStyled);
|
||||
let visibleRangesHaveGaps = this._visibleRangesHaveGaps(linesVisibleRanges);
|
||||
const _linesVisibleRanges = ctx.linesVisibleRangesForRange(selection, true) || [];
|
||||
const linesVisibleRanges = _linesVisibleRanges.map(toStyled);
|
||||
const visibleRangesHaveGaps = this._visibleRangesHaveGaps(linesVisibleRanges);
|
||||
|
||||
if (!isIEWithZoomingIssuesNearRoundedBorders && !visibleRangesHaveGaps && this._roundedSelection) {
|
||||
this._enrichVisibleRangesWithStyle(ctx.visibleRange, linesVisibleRanges, previousFrame);
|
||||
@@ -282,25 +282,25 @@ export class SelectionsOverlay extends DynamicViewOverlay {
|
||||
}
|
||||
|
||||
private _actualRenderOneSelection(output2: string[], visibleStartLineNumber: number, hasMultipleSelections: boolean, visibleRanges: LineVisibleRangesWithStyle[]): void {
|
||||
let visibleRangesHaveStyle = (visibleRanges.length > 0 && visibleRanges[0].ranges[0].startStyle);
|
||||
let fullLineHeight = (this._lineHeight).toString();
|
||||
let reducedLineHeight = (this._lineHeight - 1).toString();
|
||||
const visibleRangesHaveStyle = (visibleRanges.length > 0 && visibleRanges[0].ranges[0].startStyle);
|
||||
const fullLineHeight = (this._lineHeight).toString();
|
||||
const reducedLineHeight = (this._lineHeight - 1).toString();
|
||||
|
||||
let firstLineNumber = (visibleRanges.length > 0 ? visibleRanges[0].lineNumber : 0);
|
||||
let lastLineNumber = (visibleRanges.length > 0 ? visibleRanges[visibleRanges.length - 1].lineNumber : 0);
|
||||
const firstLineNumber = (visibleRanges.length > 0 ? visibleRanges[0].lineNumber : 0);
|
||||
const lastLineNumber = (visibleRanges.length > 0 ? visibleRanges[visibleRanges.length - 1].lineNumber : 0);
|
||||
|
||||
for (let i = 0, len = visibleRanges.length; i < len; i++) {
|
||||
let lineVisibleRanges = visibleRanges[i];
|
||||
let lineNumber = lineVisibleRanges.lineNumber;
|
||||
let lineIndex = lineNumber - visibleStartLineNumber;
|
||||
const lineVisibleRanges = visibleRanges[i];
|
||||
const lineNumber = lineVisibleRanges.lineNumber;
|
||||
const lineIndex = lineNumber - visibleStartLineNumber;
|
||||
|
||||
let lineHeight = hasMultipleSelections ? (lineNumber === lastLineNumber || lineNumber === firstLineNumber ? reducedLineHeight : fullLineHeight) : fullLineHeight;
|
||||
let top = hasMultipleSelections ? (lineNumber === firstLineNumber ? 1 : 0) : 0;
|
||||
const lineHeight = hasMultipleSelections ? (lineNumber === lastLineNumber || lineNumber === firstLineNumber ? reducedLineHeight : fullLineHeight) : fullLineHeight;
|
||||
const top = hasMultipleSelections ? (lineNumber === firstLineNumber ? 1 : 0) : 0;
|
||||
|
||||
let lineOutput = '';
|
||||
|
||||
for (let j = 0, lenJ = lineVisibleRanges.ranges.length; j < lenJ; j++) {
|
||||
let visibleRange = lineVisibleRanges.ranges[j];
|
||||
const visibleRange = lineVisibleRanges.ranges[j];
|
||||
|
||||
if (visibleRangesHaveStyle) {
|
||||
const startStyle = visibleRange.startStyle!;
|
||||
@@ -366,23 +366,23 @@ export class SelectionsOverlay extends DynamicViewOverlay {
|
||||
private _previousFrameVisibleRangesWithStyle: (LineVisibleRangesWithStyle[] | null)[] = [];
|
||||
public prepareRender(ctx: RenderingContext): void {
|
||||
|
||||
let output: string[] = [];
|
||||
let visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
let visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
const output: string[] = [];
|
||||
const visibleStartLineNumber = ctx.visibleRange.startLineNumber;
|
||||
const visibleEndLineNumber = ctx.visibleRange.endLineNumber;
|
||||
for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {
|
||||
let lineIndex = lineNumber - visibleStartLineNumber;
|
||||
const lineIndex = lineNumber - visibleStartLineNumber;
|
||||
output[lineIndex] = '';
|
||||
}
|
||||
|
||||
let thisFrameVisibleRangesWithStyle: (LineVisibleRangesWithStyle[] | null)[] = [];
|
||||
const thisFrameVisibleRangesWithStyle: (LineVisibleRangesWithStyle[] | null)[] = [];
|
||||
for (let i = 0, len = this._selections.length; i < len; i++) {
|
||||
let selection = this._selections[i];
|
||||
const selection = this._selections[i];
|
||||
if (selection.isEmpty()) {
|
||||
thisFrameVisibleRangesWithStyle[i] = null;
|
||||
continue;
|
||||
}
|
||||
|
||||
let visibleRangesWithStyle = this._getVisibleRangesWithStyle(selection, ctx, this._previousFrameVisibleRangesWithStyle[i]);
|
||||
const visibleRangesWithStyle = this._getVisibleRangesWithStyle(selection, ctx, this._previousFrameVisibleRangesWithStyle[i]);
|
||||
thisFrameVisibleRangesWithStyle[i] = visibleRangesWithStyle;
|
||||
this._actualRenderOneSelection(output, visibleStartLineNumber, this._selections.length > 1, visibleRangesWithStyle);
|
||||
}
|
||||
@@ -395,7 +395,7 @@ export class SelectionsOverlay extends DynamicViewOverlay {
|
||||
if (!this._renderResult) {
|
||||
return '';
|
||||
}
|
||||
let lineIndex = lineNumber - startLineNumber;
|
||||
const lineIndex = lineNumber - startLineNumber;
|
||||
if (lineIndex < 0 || lineIndex >= this._renderResult.length) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@@ -28,16 +28,16 @@ export class ViewCursors extends ViewPart {
|
||||
|
||||
private _isVisible: boolean;
|
||||
|
||||
private _domNode: FastDomNode<HTMLElement>;
|
||||
private readonly _domNode: FastDomNode<HTMLElement>;
|
||||
|
||||
private _startCursorBlinkAnimation: TimeoutTimer;
|
||||
private _cursorFlatBlinkInterval: IntervalTimer;
|
||||
private readonly _startCursorBlinkAnimation: TimeoutTimer;
|
||||
private readonly _cursorFlatBlinkInterval: IntervalTimer;
|
||||
private _blinkingEnabled: boolean;
|
||||
|
||||
private _editorHasFocus: boolean;
|
||||
|
||||
private _primaryCursor: ViewCursor;
|
||||
private _secondaryCursors: ViewCursor[];
|
||||
private readonly _primaryCursor: ViewCursor;
|
||||
private readonly _secondaryCursors: ViewCursor[];
|
||||
private _renderData: IViewCursorRenderData[];
|
||||
|
||||
constructor(context: ViewContext) {
|
||||
@@ -108,15 +108,15 @@ export class ViewCursors extends ViewPart {
|
||||
|
||||
if (this._secondaryCursors.length < secondaryPositions.length) {
|
||||
// Create new cursors
|
||||
let addCnt = secondaryPositions.length - this._secondaryCursors.length;
|
||||
const addCnt = secondaryPositions.length - this._secondaryCursors.length;
|
||||
for (let i = 0; i < addCnt; i++) {
|
||||
let newCursor = new ViewCursor(this._context);
|
||||
const newCursor = new ViewCursor(this._context);
|
||||
this._domNode.domNode.insertBefore(newCursor.getDomNode().domNode, this._primaryCursor.getDomNode().domNode.nextSibling);
|
||||
this._secondaryCursors.push(newCursor);
|
||||
}
|
||||
} else if (this._secondaryCursors.length > secondaryPositions.length) {
|
||||
// Remove some cursors
|
||||
let removeCnt = this._secondaryCursors.length - secondaryPositions.length;
|
||||
const removeCnt = this._secondaryCursors.length - secondaryPositions.length;
|
||||
for (let i = 0; i < removeCnt; i++) {
|
||||
this._domNode.removeChild(this._secondaryCursors[0].getDomNode());
|
||||
this._secondaryCursors.splice(0, 1);
|
||||
@@ -129,7 +129,7 @@ export class ViewCursors extends ViewPart {
|
||||
|
||||
}
|
||||
public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean {
|
||||
let positions: Position[] = [];
|
||||
const positions: Position[] = [];
|
||||
for (let i = 0, len = e.selections.length; i < len; i++) {
|
||||
positions[i] = e.selections[i].getPosition();
|
||||
}
|
||||
@@ -169,7 +169,7 @@ export class ViewCursors extends ViewPart {
|
||||
return true;
|
||||
}
|
||||
public onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {
|
||||
let shouldRender = (position: Position) => {
|
||||
const shouldRender = (position: Position) => {
|
||||
for (let i = 0, len = e.ranges.length; i < len; i++) {
|
||||
if (e.ranges[i].fromLineNumber <= position.lineNumber && position.lineNumber <= e.ranges[i].toLineNumber) {
|
||||
return true;
|
||||
@@ -209,11 +209,11 @@ export class ViewCursors extends ViewPart {
|
||||
this._startCursorBlinkAnimation.cancel();
|
||||
this._cursorFlatBlinkInterval.cancel();
|
||||
|
||||
let blinkingStyle = this._getCursorBlinking();
|
||||
const blinkingStyle = this._getCursorBlinking();
|
||||
|
||||
// hidden and solid are special as they involve no animations
|
||||
let isHidden = (blinkingStyle === TextEditorCursorBlinkingStyle.Hidden);
|
||||
let isSolid = (blinkingStyle === TextEditorCursorBlinkingStyle.Solid);
|
||||
const isHidden = (blinkingStyle === TextEditorCursorBlinkingStyle.Hidden);
|
||||
const isSolid = (blinkingStyle === TextEditorCursorBlinkingStyle.Solid);
|
||||
|
||||
if (isHidden) {
|
||||
this._hide();
|
||||
|
||||
@@ -69,11 +69,11 @@ export class ViewZones extends ViewPart {
|
||||
private _recomputeWhitespacesProps(): boolean {
|
||||
let hadAChange = false;
|
||||
|
||||
let keys = Object.keys(this._zones);
|
||||
const keys = Object.keys(this._zones);
|
||||
for (let i = 0, len = keys.length; i < len; i++) {
|
||||
let id = keys[i];
|
||||
let zone = this._zones[id];
|
||||
let props = this._computeWhitespaceProps(zone.delegate);
|
||||
const id = keys[i];
|
||||
const zone = this._zones[id];
|
||||
const props = this._computeWhitespaceProps(zone.delegate);
|
||||
if (this._context.viewLayout.changeWhitespace(parseInt(id, 10), props.afterViewLineNumber, props.heightInPx)) {
|
||||
this._safeCallOnComputedHeight(zone.delegate, props.heightInPx);
|
||||
hadAChange = true;
|
||||
@@ -150,7 +150,7 @@ export class ViewZones extends ViewPart {
|
||||
column: zone.afterColumn
|
||||
});
|
||||
} else {
|
||||
let validAfterLineNumber = this._context.model.validateModelPosition({
|
||||
const validAfterLineNumber = this._context.model.validateModelPosition({
|
||||
lineNumber: zone.afterLineNumber,
|
||||
column: 1
|
||||
}).lineNumber;
|
||||
@@ -174,8 +174,8 @@ export class ViewZones extends ViewPart {
|
||||
});
|
||||
}
|
||||
|
||||
let viewPosition = this._context.model.coordinatesConverter.convertModelPositionToViewPosition(zoneAfterModelPosition);
|
||||
let isVisible = this._context.model.coordinatesConverter.modelPositionIsVisible(zoneBeforeModelPosition);
|
||||
const viewPosition = this._context.model.coordinatesConverter.convertModelPositionToViewPosition(zoneAfterModelPosition);
|
||||
const isVisible = this._context.model.coordinatesConverter.modelPositionIsVisible(zoneBeforeModelPosition);
|
||||
return {
|
||||
afterViewLineNumber: viewPosition.lineNumber,
|
||||
heightInPx: (isVisible ? this._heightInPixels(zone) : 0),
|
||||
@@ -184,10 +184,10 @@ export class ViewZones extends ViewPart {
|
||||
}
|
||||
|
||||
public addZone(zone: IViewZone): number {
|
||||
let props = this._computeWhitespaceProps(zone);
|
||||
let whitespaceId = this._context.viewLayout.addWhitespace(props.afterViewLineNumber, this._getZoneOrdinal(zone), props.heightInPx, props.minWidthInPx);
|
||||
const props = this._computeWhitespaceProps(zone);
|
||||
const whitespaceId = this._context.viewLayout.addWhitespace(props.afterViewLineNumber, this._getZoneOrdinal(zone), props.heightInPx, props.minWidthInPx);
|
||||
|
||||
let myZone: IMyViewZone = {
|
||||
const myZone: IMyViewZone = {
|
||||
whitespaceId: whitespaceId,
|
||||
delegate: zone,
|
||||
isVisible: false,
|
||||
@@ -221,7 +221,7 @@ export class ViewZones extends ViewPart {
|
||||
|
||||
public removeZone(id: number): boolean {
|
||||
if (this._zones.hasOwnProperty(id.toString())) {
|
||||
let zone = this._zones[id.toString()];
|
||||
const zone = this._zones[id.toString()];
|
||||
delete this._zones[id.toString()];
|
||||
this._context.viewLayout.removeWhitespace(zone.whitespaceId);
|
||||
|
||||
@@ -245,9 +245,9 @@ export class ViewZones extends ViewPart {
|
||||
public layoutZone(id: number): boolean {
|
||||
let changed = false;
|
||||
if (this._zones.hasOwnProperty(id.toString())) {
|
||||
let zone = this._zones[id.toString()];
|
||||
let props = this._computeWhitespaceProps(zone.delegate);
|
||||
// let newOrdinal = this._getZoneOrdinal(zone.delegate);
|
||||
const zone = this._zones[id.toString()];
|
||||
const props = this._computeWhitespaceProps(zone.delegate);
|
||||
// const newOrdinal = this._getZoneOrdinal(zone.delegate);
|
||||
changed = this._context.viewLayout.changeWhitespace(zone.whitespaceId, props.afterViewLineNumber, props.heightInPx) || changed;
|
||||
// TODO@Alex: change `newOrdinal` too
|
||||
|
||||
@@ -261,7 +261,7 @@ export class ViewZones extends ViewPart {
|
||||
|
||||
public shouldSuppressMouseDownOnViewZone(id: number): boolean {
|
||||
if (this._zones.hasOwnProperty(id.toString())) {
|
||||
let zone = this._zones[id.toString()];
|
||||
const zone = this._zones[id.toString()];
|
||||
return Boolean(zone.delegate.suppressMouseDown);
|
||||
}
|
||||
return false;
|
||||
@@ -310,7 +310,7 @@ export class ViewZones extends ViewPart {
|
||||
|
||||
public render(ctx: RestrictedRenderingContext): void {
|
||||
const visibleWhitespaces = ctx.viewportData.whitespaceViewportData;
|
||||
let visibleZones: { [id: string]: IViewWhitespaceViewportData; } = {};
|
||||
const visibleZones: { [id: string]: IViewWhitespaceViewportData; } = {};
|
||||
|
||||
let hasVisibleZone = false;
|
||||
for (let i = 0, len = visibleWhitespaces.length; i < len; i++) {
|
||||
@@ -318,10 +318,10 @@ export class ViewZones extends ViewPart {
|
||||
hasVisibleZone = true;
|
||||
}
|
||||
|
||||
let keys = Object.keys(this._zones);
|
||||
const keys = Object.keys(this._zones);
|
||||
for (let i = 0, len = keys.length; i < len; i++) {
|
||||
let id = keys[i];
|
||||
let zone = this._zones[id];
|
||||
const id = keys[i];
|
||||
const zone = this._zones[id];
|
||||
|
||||
let newTop = 0;
|
||||
let newHeight = 0;
|
||||
|
||||