提交 88535290 编写于 作者: A Alex Dima

Clean up contentWidgets.ts

上级 2db33029
...@@ -6,11 +6,11 @@ ...@@ -6,11 +6,11 @@
'use strict'; 'use strict';
import 'vs/css!./contentWidgets'; import 'vs/css!./contentWidgets';
import DomUtils = require('vs/base/browser/dom');
import * as DomUtils from 'vs/base/browser/dom';
import {ViewPart} from 'vs/editor/browser/view/viewPart'; import {ViewPart} from 'vs/editor/browser/view/viewPart';
import EditorBrowser = require('vs/editor/browser/editorBrowser'); import * as EditorBrowser from 'vs/editor/browser/editorBrowser';
import EditorCommon = require('vs/editor/common/editorCommon'); import * as EditorCommon from 'vs/editor/common/editorCommon';
interface IWidgetData { interface IWidgetData {
allowEditorOverflow: boolean; allowEditorOverflow: boolean;
...@@ -109,7 +109,7 @@ export class ViewContentWidgets extends ViewPart { ...@@ -109,7 +109,7 @@ export class ViewContentWidgets extends ViewPart {
this._requestModificationFrameBeforeRendering(() => { this._requestModificationFrameBeforeRendering(() => {
// update the maxWidth on widgets nodes, such that `onReadAfterForcedLayout` // update the maxWidth on widgets nodes, such that `onReadAfterForcedLayout`
// below can read out the adjusted width/height of widgets // below can read out the adjusted width/height of widgets
var widgetId:string; let widgetId:string;
for (widgetId in this._widgets) { for (widgetId in this._widgets) {
if (this._widgets.hasOwnProperty(widgetId)) { if (this._widgets.hasOwnProperty(widgetId)) {
DomUtils.StyleMutator.setMaxWidth(this._widgets[widgetId].widget.getDomNode(), this._contentWidth); DomUtils.StyleMutator.setMaxWidth(this._widgets[widgetId].widget.getDomNode(), this._contentWidth);
...@@ -135,7 +135,7 @@ export class ViewContentWidgets extends ViewPart { ...@@ -135,7 +135,7 @@ export class ViewContentWidgets extends ViewPart {
// ---- end view event handlers // ---- end view event handlers
public addWidget(widget: EditorBrowser.IContentWidget): void { public addWidget(widget: EditorBrowser.IContentWidget): void {
var widgetData: IWidgetData = { let widgetData: IWidgetData = {
allowEditorOverflow: widget.allowEditorOverflow || false, allowEditorOverflow: widget.allowEditorOverflow || false,
widget: widget, widget: widget,
position: null, position: null,
...@@ -144,7 +144,7 @@ export class ViewContentWidgets extends ViewPart { ...@@ -144,7 +144,7 @@ export class ViewContentWidgets extends ViewPart {
}; };
this._widgets[widget.getId()] = widgetData; this._widgets[widget.getId()] = widgetData;
var domNode = widget.getDomNode(); let domNode = widget.getDomNode();
domNode.style.position = 'absolute'; domNode.style.position = 'absolute';
DomUtils.StyleMutator.setMaxWidth(domNode, this._contentWidth); DomUtils.StyleMutator.setMaxWidth(domNode, this._contentWidth);
DomUtils.StyleMutator.setVisibility(domNode, 'hidden'); DomUtils.StyleMutator.setVisibility(domNode, 'hidden');
...@@ -160,19 +160,19 @@ export class ViewContentWidgets extends ViewPart { ...@@ -160,19 +160,19 @@ export class ViewContentWidgets extends ViewPart {
} }
public setWidgetPosition(widget: EditorBrowser.IContentWidget, position: EditorCommon.IPosition, preference:EditorBrowser.ContentWidgetPositionPreference[]): void { public setWidgetPosition(widget: EditorBrowser.IContentWidget, position: EditorCommon.IPosition, preference:EditorBrowser.ContentWidgetPositionPreference[]): void {
var widgetData = this._widgets[widget.getId()]; let widgetData = this._widgets[widget.getId()];
widgetData.position = position; widgetData.position = position;
widgetData.preference = preference; widgetData.preference = preference;
this.shouldRender = true; this.shouldRender = true;
} }
public removeWidget(widget: EditorBrowser.IContentWidget): void { public removeWidget(widget: EditorBrowser.IContentWidget): void {
var widgetId = widget.getId(); let widgetId = widget.getId();
if (this._widgets.hasOwnProperty(widgetId)) { if (this._widgets.hasOwnProperty(widgetId)) {
var widgetData = this._widgets[widgetId]; let widgetData = this._widgets[widgetId];
delete this._widgets[widgetId]; delete this._widgets[widgetId];
var domNode = widgetData.widget.getDomNode(); let domNode = widgetData.widget.getDomNode();
domNode.parentNode.removeChild(domNode); domNode.parentNode.removeChild(domNode);
domNode.removeAttribute('monaco-visible-content-widget'); domNode.removeAttribute('monaco-visible-content-widget');
...@@ -182,32 +182,32 @@ export class ViewContentWidgets extends ViewPart { ...@@ -182,32 +182,32 @@ export class ViewContentWidgets extends ViewPart {
private _layoutBoxInViewport(position:EditorCommon.IEditorPosition, domNode:HTMLElement, ctx:EditorBrowser.IRenderingContext): IBoxLayoutResult { private _layoutBoxInViewport(position:EditorCommon.IEditorPosition, domNode:HTMLElement, ctx:EditorBrowser.IRenderingContext): IBoxLayoutResult {
var visibleRange = ctx.visibleRangeForPosition(position); let visibleRange = ctx.visibleRangeForPosition(position);
if (!visibleRange) { if (!visibleRange) {
return null; return null;
} }
var width = domNode.clientWidth; let width = domNode.clientWidth;
var height = domNode.clientHeight; let height = domNode.clientHeight;
// Our visible box is split horizontally by the current line => 2 boxes // Our visible box is split horizontally by the current line => 2 boxes
// a) the box above the line // a) the box above the line
var aboveLineTop = visibleRange.top; let aboveLineTop = visibleRange.top;
var heightAboveLine = aboveLineTop; let heightAboveLine = aboveLineTop;
// b) the box under the line // b) the box under the line
var underLineTop = visibleRange.top + visibleRange.height; let underLineTop = visibleRange.top + visibleRange.height;
var heightUnderLine = ctx.viewportHeight - underLineTop; let heightUnderLine = ctx.viewportHeight - underLineTop;
var aboveTop = aboveLineTop - height; let aboveTop = aboveLineTop - height;
var fitsAbove = (heightAboveLine >= height); let fitsAbove = (heightAboveLine >= height);
var belowTop = underLineTop; let belowTop = underLineTop;
var fitsBelow = (heightUnderLine >= height); let fitsBelow = (heightUnderLine >= height);
// And its left // And its left
var actualLeft = visibleRange.left; let actualLeft = visibleRange.left;
if (actualLeft + width > ctx.viewportLeft + ctx.viewportWidth) { if (actualLeft + width > ctx.viewportLeft + ctx.viewportWidth) {
actualLeft = ctx.viewportLeft + ctx.viewportWidth - width; actualLeft = ctx.viewportLeft + ctx.viewportWidth - width;
} }
...@@ -225,45 +225,45 @@ export class ViewContentWidgets extends ViewPart { ...@@ -225,45 +225,45 @@ export class ViewContentWidgets extends ViewPart {
} }
private _layoutBoxInPage(position: EditorCommon.IEditorPosition, domNode: HTMLElement, ctx: EditorBrowser.IRenderingContext): IBoxLayoutResult { private _layoutBoxInPage(position: EditorCommon.IEditorPosition, domNode: HTMLElement, ctx: EditorBrowser.IRenderingContext): IBoxLayoutResult {
var visibleRange = ctx.visibleRangeForPosition(position); let visibleRange = ctx.visibleRangeForPosition(position);
if (!visibleRange) { if (!visibleRange) {
return null; return null;
} }
var left = visibleRange.left - ctx.viewportLeft; let left0 = visibleRange.left - ctx.viewportLeft;
if (left < 0 || left > this._contentWidth) { if (left0 < 0 || left0 > this._contentWidth) {
return null; return null;
} }
var width = domNode.clientWidth, let width = domNode.clientWidth,
height = domNode.clientHeight; height = domNode.clientHeight;
var aboveTop = visibleRange.top - height, let aboveTop = visibleRange.top - height,
belowTop = visibleRange.top + visibleRange.height, belowTop = visibleRange.top + visibleRange.height,
left = left + this._contentLeft; left = left0 + this._contentLeft;
var domNodePosition = DomUtils.getDomNodePosition(this._viewDomNode); let domNodePosition = DomUtils.getDomNodePosition(this._viewDomNode);
var absoluteAboveTop = domNodePosition.top + aboveTop - document.body.scrollTop - document.documentElement.scrollTop, let absoluteAboveTop = domNodePosition.top + aboveTop - document.body.scrollTop - document.documentElement.scrollTop,
absoluteBelowTop = domNodePosition.top + belowTop - document.body.scrollTop - document.documentElement.scrollTop, absoluteBelowTop = domNodePosition.top + belowTop - document.body.scrollTop - document.documentElement.scrollTop,
absoluteLeft = domNodePosition.left + left - document.body.scrollLeft - document.documentElement.scrollLeft; absoluteLeft = domNodePosition.left + left - document.body.scrollLeft - document.documentElement.scrollLeft;
var INNER_WIDTH = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, let INNER_WIDTH = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
INNER_HEIGHT = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; INNER_HEIGHT = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
// Leave some clearance to the bottom // Leave some clearance to the bottom
var BOTTOM_PADDING = 22; let BOTTOM_PADDING = 22;
var fitsAbove = (absoluteAboveTop >= 0), let fitsAbove = (absoluteAboveTop >= 0),
fitsBelow = (absoluteBelowTop + height <= INNER_HEIGHT - BOTTOM_PADDING); fitsBelow = (absoluteBelowTop + height <= INNER_HEIGHT - BOTTOM_PADDING);
if (absoluteLeft + width + 20 > INNER_WIDTH) { if (absoluteLeft + width + 20 > INNER_WIDTH) {
var delta = absoluteLeft - (INNER_WIDTH - width - 20); let delta = absoluteLeft - (INNER_WIDTH - width - 20);
absoluteLeft -= delta; absoluteLeft -= delta;
left -= delta; left -= delta;
} }
if (absoluteLeft < 0) { if (absoluteLeft < 0) {
var delta = absoluteLeft; let delta = absoluteLeft;
absoluteLeft -= delta; absoluteLeft -= delta;
left -= delta; left -= delta;
} }
...@@ -278,7 +278,7 @@ export class ViewContentWidgets extends ViewPart { ...@@ -278,7 +278,7 @@ export class ViewContentWidgets extends ViewPart {
} }
private _prepareRenderWidgetAtExactPosition(position:EditorCommon.IEditorPosition, ctx:EditorBrowser.IRenderingContext): IMyWidgetRenderData { private _prepareRenderWidgetAtExactPosition(position:EditorCommon.IEditorPosition, ctx:EditorBrowser.IRenderingContext): IMyWidgetRenderData {
var visibleRange = ctx.visibleRangeForPosition(position); let visibleRange = ctx.visibleRangeForPosition(position);
if (!visibleRange) { if (!visibleRange) {
return null; return null;
...@@ -296,19 +296,19 @@ export class ViewContentWidgets extends ViewPart { ...@@ -296,19 +296,19 @@ export class ViewContentWidgets extends ViewPart {
} }
// Do not trust that widgets have a valid position // Do not trust that widgets have a valid position
var validModelPosition = this._context.model.validateModelPosition(widgetData.position), let validModelPosition = this._context.model.validateModelPosition(widgetData.position),
position = this._context.model.convertModelPositionToViewPosition(validModelPosition.lineNumber, validModelPosition.column), position = this._context.model.convertModelPositionToViewPosition(validModelPosition.lineNumber, validModelPosition.column),
pref:EditorBrowser.ContentWidgetPositionPreference, pref:EditorBrowser.ContentWidgetPositionPreference,
pass:number, pass:number,
i:number; i:number;
var placement: IBoxLayoutResult = null; let placement: IBoxLayoutResult = null;
var fetchPlacement = () => { let fetchPlacement = () => {
if (placement) { if (placement) {
return; return;
} }
var domNode = widgetData.widget.getDomNode(); let domNode = widgetData.widget.getDomNode();
if (widgetData.allowEditorOverflow) { if (widgetData.allowEditorOverflow) {
placement = this._layoutBoxInPage(position, domNode, ctx); placement = this._layoutBoxInPage(position, domNode, ctx);
} else { } else {
...@@ -352,7 +352,7 @@ export class ViewContentWidgets extends ViewPart { ...@@ -352,7 +352,7 @@ export class ViewContentWidgets extends ViewPart {
} }
_render(ctx:EditorBrowser.IRenderingContext): void { _render(ctx:EditorBrowser.IRenderingContext): void {
var data:IMyRenderData = {}, let data:IMyRenderData = {},
renderData: IMyWidgetRenderData, renderData: IMyWidgetRenderData,
widgetId: string; widgetId: string;
...@@ -366,7 +366,7 @@ export class ViewContentWidgets extends ViewPart { ...@@ -366,7 +366,7 @@ export class ViewContentWidgets extends ViewPart {
} }
this._requestModificationFrame(() => { this._requestModificationFrame(() => {
var widgetId:string, let widgetId:string,
widget:IWidgetData, widget:IWidgetData,
domNode: HTMLElement; domNode: HTMLElement;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册