mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-24 09:35:37 -05:00
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
This commit is contained in:
@@ -253,7 +253,7 @@ export class HitTestContext {
|
||||
|
||||
public static getZoneAtCoord(context: ViewContext, mouseVerticalOffset: number): IViewZoneData | null {
|
||||
// The target is either a view zone or the empty space after the last view-line
|
||||
let viewZoneWhitespace = context.viewLayout.getWhitespaceAtVerticalOffset(mouseVerticalOffset);
|
||||
const viewZoneWhitespace = context.viewLayout.getWhitespaceAtVerticalOffset(mouseVerticalOffset);
|
||||
|
||||
if (viewZoneWhitespace) {
|
||||
let viewZoneMiddle = viewZoneWhitespace.verticalOffset + viewZoneWhitespace.height / 2,
|
||||
@@ -295,16 +295,16 @@ export class HitTestContext {
|
||||
public getFullLineRangeAtCoord(mouseVerticalOffset: number): { range: EditorRange; isAfterLines: boolean; } {
|
||||
if (this._context.viewLayout.isAfterLines(mouseVerticalOffset)) {
|
||||
// Below the last line
|
||||
let lineNumber = this._context.model.getLineCount();
|
||||
let maxLineColumn = this._context.model.getLineMaxColumn(lineNumber);
|
||||
const lineNumber = this._context.model.getLineCount();
|
||||
const maxLineColumn = this._context.model.getLineMaxColumn(lineNumber);
|
||||
return {
|
||||
range: new EditorRange(lineNumber, maxLineColumn, lineNumber, maxLineColumn),
|
||||
isAfterLines: true
|
||||
};
|
||||
}
|
||||
|
||||
let lineNumber = this._context.viewLayout.getLineNumberAtVerticalOffset(mouseVerticalOffset);
|
||||
let maxLineColumn = this._context.model.getLineMaxColumn(lineNumber);
|
||||
const lineNumber = this._context.viewLayout.getLineNumberAtVerticalOffset(mouseVerticalOffset);
|
||||
const maxLineColumn = this._context.model.getLineMaxColumn(lineNumber);
|
||||
return {
|
||||
range: new EditorRange(lineNumber, 1, lineNumber, maxLineColumn),
|
||||
isAfterLines: false
|
||||
@@ -430,8 +430,8 @@ function createEmptyContentDataInLines(horizontalDistanceToText: number): IEmpty
|
||||
|
||||
export class MouseTargetFactory {
|
||||
|
||||
private _context: ViewContext;
|
||||
private _viewHelper: IPointerHandlerHelper;
|
||||
private readonly _context: ViewContext;
|
||||
private readonly _viewHelper: IPointerHandlerHelper;
|
||||
|
||||
constructor(context: ViewContext, viewHelper: IPointerHandlerHelper) {
|
||||
this._context = context;
|
||||
@@ -439,8 +439,8 @@ export class MouseTargetFactory {
|
||||
}
|
||||
|
||||
public mouseTargetIsWidget(e: EditorMouseEvent): boolean {
|
||||
let t = <Element>e.target;
|
||||
let path = PartFingerprints.collect(t, this._viewHelper.viewDomNode);
|
||||
const t = <Element>e.target;
|
||||
const path = PartFingerprints.collect(t, this._viewHelper.viewDomNode);
|
||||
|
||||
// Is it a content widget?
|
||||
if (ElementPath.isChildOfContentWidgets(path) || ElementPath.isChildOfOverflowingContentWidgets(path)) {
|
||||
@@ -459,7 +459,7 @@ export class MouseTargetFactory {
|
||||
const ctx = new HitTestContext(this._context, this._viewHelper, lastViewCursorsRenderData);
|
||||
const request = new HitTestRequest(ctx, editorPos, pos, target);
|
||||
try {
|
||||
let r = MouseTargetFactory._createMouseTarget(ctx, request, false);
|
||||
const r = MouseTargetFactory._createMouseTarget(ctx, request, false);
|
||||
// console.log(r.toString());
|
||||
return r;
|
||||
} catch (err) {
|
||||
@@ -510,7 +510,7 @@ export class MouseTargetFactory {
|
||||
private static _hitTestContentWidget(ctx: HitTestContext, request: ResolvedHitTestRequest): MouseTarget | null {
|
||||
// Is it a content widget?
|
||||
if (ElementPath.isChildOfContentWidgets(request.targetPath) || ElementPath.isChildOfOverflowingContentWidgets(request.targetPath)) {
|
||||
let widgetId = ctx.findAttribute(request.target, 'widgetId');
|
||||
const widgetId = ctx.findAttribute(request.target, 'widgetId');
|
||||
if (widgetId) {
|
||||
return request.fulfill(MouseTargetType.CONTENT_WIDGET, null, null, widgetId);
|
||||
} else {
|
||||
@@ -523,7 +523,7 @@ export class MouseTargetFactory {
|
||||
private static _hitTestOverlayWidget(ctx: HitTestContext, request: ResolvedHitTestRequest): MouseTarget | null {
|
||||
// Is it an overlay widget?
|
||||
if (ElementPath.isChildOfOverlayWidgets(request.targetPath)) {
|
||||
let widgetId = ctx.findAttribute(request.target, 'widgetId');
|
||||
const widgetId = ctx.findAttribute(request.target, 'widgetId');
|
||||
if (widgetId) {
|
||||
return request.fulfill(MouseTargetType.OVERLAY_WIDGET, null, null, widgetId);
|
||||
} else {
|
||||
@@ -583,9 +583,9 @@ export class MouseTargetFactory {
|
||||
}
|
||||
|
||||
private static _hitTestViewZone(ctx: HitTestContext, request: ResolvedHitTestRequest): MouseTarget | null {
|
||||
let viewZoneData = ctx.getZoneAtCoord(request.mouseVerticalOffset);
|
||||
const viewZoneData = ctx.getZoneAtCoord(request.mouseVerticalOffset);
|
||||
if (viewZoneData) {
|
||||
let mouseTargetType = (request.isInContentArea ? MouseTargetType.CONTENT_VIEW_ZONE : MouseTargetType.GUTTER_VIEW_ZONE);
|
||||
const mouseTargetType = (request.isInContentArea ? MouseTargetType.CONTENT_VIEW_ZONE : MouseTargetType.GUTTER_VIEW_ZONE);
|
||||
return request.fulfill(mouseTargetType, viewZoneData.position, null, viewZoneData);
|
||||
}
|
||||
|
||||
@@ -602,8 +602,8 @@ export class MouseTargetFactory {
|
||||
|
||||
private static _hitTestMargin(ctx: HitTestContext, request: ResolvedHitTestRequest): MouseTarget | null {
|
||||
if (request.isInMarginArea) {
|
||||
let res = ctx.getFullLineRangeAtCoord(request.mouseVerticalOffset);
|
||||
let pos = res.range.getStartPosition();
|
||||
const res = ctx.getFullLineRangeAtCoord(request.mouseVerticalOffset);
|
||||
const pos = res.range.getStartPosition();
|
||||
let offset = Math.abs(request.pos.x - request.editorPos.x);
|
||||
const detail: IMarginData = {
|
||||
isAfterLines: res.isAfterLines,
|
||||
@@ -683,7 +683,7 @@ export class MouseTargetFactory {
|
||||
private static _hitTestScrollbarSlider(ctx: HitTestContext, request: ResolvedHitTestRequest): MouseTarget | null {
|
||||
if (ElementPath.isChildOfScrollableElement(request.targetPath)) {
|
||||
if (request.target && request.target.nodeType === 1) {
|
||||
let className = request.target.className;
|
||||
const className = request.target.className;
|
||||
if (className && /\b(slider|scrollbar)\b/.test(className)) {
|
||||
const possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);
|
||||
const maxColumn = ctx.model.getLineMaxColumn(possibleLineNumber);
|
||||
@@ -707,8 +707,8 @@ export class MouseTargetFactory {
|
||||
}
|
||||
|
||||
public getMouseColumn(editorPos: EditorPagePosition, pos: PageCoordinates): number {
|
||||
let layoutInfo = this._context.configuration.editor.layoutInfo;
|
||||
let mouseContentHorizontalOffset = this._context.viewLayout.getCurrentScrollLeft() + pos.x - editorPos.x - layoutInfo.contentLeft;
|
||||
const layoutInfo = this._context.configuration.editor.layoutInfo;
|
||||
const mouseContentHorizontalOffset = this._context.viewLayout.getCurrentScrollLeft() + pos.x - editorPos.x - layoutInfo.contentLeft;
|
||||
return MouseTargetFactory._getMouseColumn(mouseContentHorizontalOffset, this._context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth);
|
||||
}
|
||||
|
||||
@@ -716,14 +716,14 @@ export class MouseTargetFactory {
|
||||
if (mouseContentHorizontalOffset < 0) {
|
||||
return 1;
|
||||
}
|
||||
let chars = Math.round(mouseContentHorizontalOffset / typicalHalfwidthCharacterWidth);
|
||||
const chars = Math.round(mouseContentHorizontalOffset / typicalHalfwidthCharacterWidth);
|
||||
return (chars + 1);
|
||||
}
|
||||
|
||||
private static createMouseTargetFromHitTestPosition(ctx: HitTestContext, request: HitTestRequest, lineNumber: number, column: number): MouseTarget {
|
||||
let pos = new Position(lineNumber, column);
|
||||
const pos = new Position(lineNumber, column);
|
||||
|
||||
let lineWidth = ctx.getLineWidth(lineNumber);
|
||||
const lineWidth = ctx.getLineWidth(lineNumber);
|
||||
|
||||
if (request.mouseContentHorizontalOffset > lineWidth) {
|
||||
if (browser.isEdge && pos.column === 1) {
|
||||
@@ -741,7 +741,7 @@ export class MouseTargetFactory {
|
||||
return request.fulfill(MouseTargetType.UNKNOWN, pos);
|
||||
}
|
||||
|
||||
let columnHorizontalOffset = visibleRange.left;
|
||||
const columnHorizontalOffset = visibleRange.left;
|
||||
|
||||
if (request.mouseContentHorizontalOffset === columnHorizontalOffset) {
|
||||
return request.fulfill(MouseTargetType.CONTENT_TEXT, pos);
|
||||
@@ -750,7 +750,7 @@ export class MouseTargetFactory {
|
||||
// Let's define a, b, c and check if the offset is in between them...
|
||||
interface OffsetColumn { offset: number; column: number; }
|
||||
|
||||
let points: OffsetColumn[] = [];
|
||||
const points: OffsetColumn[] = [];
|
||||
points.push({ offset: visibleRange.left, column: column });
|
||||
if (column > 1) {
|
||||
const visibleRange = ctx.visibleRangeForPosition2(lineNumber, column - 1);
|
||||
@@ -786,9 +786,9 @@ export class MouseTargetFactory {
|
||||
|
||||
// In Chrome, especially on Linux it is possible to click between lines,
|
||||
// so try to adjust the `hity` below so that it lands in the center of a line
|
||||
let lineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);
|
||||
let lineVerticalOffset = ctx.getVerticalOffsetForLineNumber(lineNumber);
|
||||
let lineCenteredVerticalOffset = lineVerticalOffset + Math.floor(ctx.lineHeight / 2);
|
||||
const lineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);
|
||||
const lineVerticalOffset = ctx.getVerticalOffsetForLineNumber(lineNumber);
|
||||
const lineCenteredVerticalOffset = lineVerticalOffset + Math.floor(ctx.lineHeight / 2);
|
||||
let adjustedPageY = request.pos.y + (lineCenteredVerticalOffset - request.mouseVerticalOffset);
|
||||
|
||||
if (adjustedPageY <= request.editorPos.y) {
|
||||
@@ -798,9 +798,9 @@ export class MouseTargetFactory {
|
||||
adjustedPageY = request.editorPos.y + ctx.layoutInfo.height - 1;
|
||||
}
|
||||
|
||||
let adjustedPage = new PageCoordinates(request.pos.x, adjustedPageY);
|
||||
const adjustedPage = new PageCoordinates(request.pos.x, adjustedPageY);
|
||||
|
||||
let r = this._actualDoHitTestWithCaretRangeFromPoint(ctx, adjustedPage.toClientCoordinates());
|
||||
const r = this._actualDoHitTestWithCaretRangeFromPoint(ctx, adjustedPage.toClientCoordinates());
|
||||
if (r.position) {
|
||||
return r;
|
||||
}
|
||||
@@ -811,7 +811,7 @@ export class MouseTargetFactory {
|
||||
|
||||
private static _actualDoHitTestWithCaretRangeFromPoint(ctx: HitTestContext, coords: ClientCoordinates): IHitTestResult {
|
||||
|
||||
let range: Range = document.caretRangeFromPoint(coords.clientX, coords.clientY);
|
||||
const range: Range = document.caretRangeFromPoint(coords.clientX, coords.clientY);
|
||||
|
||||
if (!range || !range.startContainer) {
|
||||
return {
|
||||
@@ -821,18 +821,18 @@ export class MouseTargetFactory {
|
||||
}
|
||||
|
||||
// Chrome always hits a TEXT_NODE, while Edge sometimes hits a token span
|
||||
let startContainer = range.startContainer;
|
||||
const startContainer = range.startContainer;
|
||||
let hitTarget: HTMLElement | null = null;
|
||||
|
||||
if (startContainer.nodeType === startContainer.TEXT_NODE) {
|
||||
// startContainer is expected to be the token text
|
||||
let parent1 = startContainer.parentNode; // expected to be the token span
|
||||
let parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line container span
|
||||
let parent3 = parent2 ? parent2.parentNode : null; // expected to be the view line div
|
||||
let parent3ClassName = parent3 && parent3.nodeType === parent3.ELEMENT_NODE ? (<HTMLElement>parent3).className : null;
|
||||
const parent1 = startContainer.parentNode; // expected to be the token span
|
||||
const parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line container span
|
||||
const parent3 = parent2 ? parent2.parentNode : null; // expected to be the view line div
|
||||
const parent3ClassName = parent3 && parent3.nodeType === parent3.ELEMENT_NODE ? (<HTMLElement>parent3).className : null;
|
||||
|
||||
if (parent3ClassName === ViewLine.CLASS_NAME) {
|
||||
let p = ctx.getPositionFromDOMInfo(<HTMLElement>parent1, range.startOffset);
|
||||
const p = ctx.getPositionFromDOMInfo(<HTMLElement>parent1, range.startOffset);
|
||||
return {
|
||||
position: p,
|
||||
hitTarget: null
|
||||
@@ -842,12 +842,12 @@ export class MouseTargetFactory {
|
||||
}
|
||||
} else if (startContainer.nodeType === startContainer.ELEMENT_NODE) {
|
||||
// startContainer is expected to be the token span
|
||||
let parent1 = startContainer.parentNode; // expected to be the view line container span
|
||||
let parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line div
|
||||
let parent2ClassName = parent2 && parent2.nodeType === parent2.ELEMENT_NODE ? (<HTMLElement>parent2).className : null;
|
||||
const parent1 = startContainer.parentNode; // expected to be the view line container span
|
||||
const parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line div
|
||||
const parent2ClassName = parent2 && parent2.nodeType === parent2.ELEMENT_NODE ? (<HTMLElement>parent2).className : null;
|
||||
|
||||
if (parent2ClassName === ViewLine.CLASS_NAME) {
|
||||
let p = ctx.getPositionFromDOMInfo(<HTMLElement>startContainer, (<HTMLElement>startContainer).textContent!.length);
|
||||
const p = ctx.getPositionFromDOMInfo(<HTMLElement>startContainer, (<HTMLElement>startContainer).textContent!.length);
|
||||
return {
|
||||
position: p,
|
||||
hitTarget: null
|
||||
@@ -867,17 +867,17 @@ export class MouseTargetFactory {
|
||||
* Most probably Gecko
|
||||
*/
|
||||
private static _doHitTestWithCaretPositionFromPoint(ctx: HitTestContext, coords: ClientCoordinates): IHitTestResult {
|
||||
let hitResult: { offsetNode: Node; offset: number; } = (<any>document).caretPositionFromPoint(coords.clientX, coords.clientY);
|
||||
const hitResult: { offsetNode: Node; offset: number; } = (<any>document).caretPositionFromPoint(coords.clientX, coords.clientY);
|
||||
|
||||
if (hitResult.offsetNode.nodeType === hitResult.offsetNode.TEXT_NODE) {
|
||||
// offsetNode is expected to be the token text
|
||||
let parent1 = hitResult.offsetNode.parentNode; // expected to be the token span
|
||||
let parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line container span
|
||||
let parent3 = parent2 ? parent2.parentNode : null; // expected to be the view line div
|
||||
let parent3ClassName = parent3 && parent3.nodeType === parent3.ELEMENT_NODE ? (<HTMLElement>parent3).className : null;
|
||||
const parent1 = hitResult.offsetNode.parentNode; // expected to be the token span
|
||||
const parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line container span
|
||||
const parent3 = parent2 ? parent2.parentNode : null; // expected to be the view line div
|
||||
const parent3ClassName = parent3 && parent3.nodeType === parent3.ELEMENT_NODE ? (<HTMLElement>parent3).className : null;
|
||||
|
||||
if (parent3ClassName === ViewLine.CLASS_NAME) {
|
||||
let p = ctx.getPositionFromDOMInfo(<HTMLElement>hitResult.offsetNode.parentNode, hitResult.offset);
|
||||
const p = ctx.getPositionFromDOMInfo(<HTMLElement>hitResult.offsetNode.parentNode, hitResult.offset);
|
||||
return {
|
||||
position: p,
|
||||
hitTarget: null
|
||||
@@ -903,7 +903,7 @@ export class MouseTargetFactory {
|
||||
let resultPosition: Position | null = null;
|
||||
let resultHitTarget: Element | null = null;
|
||||
|
||||
let textRange: IETextRange = (<any>document.body).createTextRange();
|
||||
const textRange: IETextRange = (<any>document.body).createTextRange();
|
||||
try {
|
||||
textRange.moveToPoint(coords.clientX, coords.clientY);
|
||||
} catch (err) {
|
||||
@@ -916,14 +916,14 @@ export class MouseTargetFactory {
|
||||
textRange.collapse(true);
|
||||
|
||||
// Now, let's do our best to figure out what we hit :)
|
||||
let parentElement = textRange ? textRange.parentElement() : null;
|
||||
let parent1 = parentElement ? parentElement.parentNode : null;
|
||||
let parent2 = parent1 ? parent1.parentNode : null;
|
||||
const parentElement = textRange ? textRange.parentElement() : null;
|
||||
const parent1 = parentElement ? parentElement.parentNode : null;
|
||||
const parent2 = parent1 ? parent1.parentNode : null;
|
||||
|
||||
let parent2ClassName = parent2 && parent2.nodeType === parent2.ELEMENT_NODE ? (<HTMLElement>parent2).className : '';
|
||||
const parent2ClassName = parent2 && parent2.nodeType === parent2.ELEMENT_NODE ? (<HTMLElement>parent2).className : '';
|
||||
|
||||
if (parent2ClassName === ViewLine.CLASS_NAME) {
|
||||
let rangeToContainEntireSpan = textRange.duplicate();
|
||||
const rangeToContainEntireSpan = textRange.duplicate();
|
||||
rangeToContainEntireSpan.moveToElementText(parentElement!);
|
||||
rangeToContainEntireSpan.setEndPoint('EndToStart', textRange);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user