提交 5b92ca35 编写于 作者: A Alex Dima

No need for a lineNumber attribute on view lines

上级 f86d8949
......@@ -25,7 +25,6 @@ export abstract class FastDomNode {
private _position: string;
private _visibility: string;
private _transform: string;
private _lineNumber: string;
public get domNode(): HTMLElement {
return this._domNode;
......@@ -49,7 +48,6 @@ export abstract class FastDomNode {
this._position = '';
this._visibility = '';
this._transform = '';
this._lineNumber = '';
}
public setMaxWidth(maxWidth: number): void {
......@@ -187,14 +185,6 @@ export abstract class FastDomNode {
protected abstract _setTransform(domNode: HTMLElement, transform: string): void;
public setLineNumber(lineNumber: string): void {
if (this._lineNumber === lineNumber) {
return;
}
this._lineNumber = lineNumber;
this._domNode.setAttribute('lineNumber', this._lineNumber);
}
public setAttribute(name: string, value: string): void {
this._domNode.setAttribute(name, value);
}
......
......@@ -499,19 +499,6 @@ export class MouseTargetFactory {
}
}
// Is it a cursor ?
if (request.target.getAttribute) {
// Target is an Element
const lineNumberAttribute = request.target.getAttribute('lineNumber');
if (lineNumberAttribute) {
const columnAttribute = request.target.getAttribute('column');
if (columnAttribute) {
const position = new Position(parseInt(lineNumberAttribute, 10), parseInt(columnAttribute, 10));
return request.fulfill(MouseTargetType.CONTENT_TEXT, position);
}
}
}
return null;
}
......
......@@ -167,12 +167,11 @@ export class ViewOverlayLine implements IVisibleLine {
this._renderedContent = result;
return `<div lineNumber="${lineNumber}" style="position:absolute;top:${deltaTop}px;width:100%;height:${this._lineHeight}px;">${result}</div>`;
return `<div style="position:absolute;top:${deltaTop}px;width:100%;height:${this._lineHeight}px;">${result}</div>`;
}
public layoutLine(lineNumber: number, deltaTop: number): void {
if (this._domNode) {
this._domNode.setLineNumber(String(lineNumber));
this._domNode.setTop(deltaTop);
this._domNode.setHeight(this._lineHeight);
}
......
......@@ -200,12 +200,11 @@ export class ViewLine implements IVisibleLine {
this._renderedViewLine = renderedViewLine;
return `<div lineNumber="${lineNumber}" style="top:${deltaTop}px;height:${this._options.lineHeight}px;" class="${ClassNames.VIEW_LINE}">${output.html}</div>`;
return `<div style="top:${deltaTop}px;height:${this._options.lineHeight}px;" class="${ClassNames.VIEW_LINE}">${output.html}</div>`;
}
public layoutLine(lineNumber: number, deltaTop: number): void {
if (this._renderedViewLine && this._renderedViewLine.domNode) {
this._renderedViewLine.domNode.setLineNumber(String(lineNumber));
this._renderedViewLine.domNode.setTop(deltaTop);
this._renderedViewLine.domNode.setHeight(this._options.lineHeight);
}
......
......@@ -207,10 +207,15 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
// ----------- HELPERS FOR OTHERS
public getPositionFromDOMInfo(spanNode: HTMLElement, offset: number): Position {
let lineNumber = this._getLineNumberFromDOMInfo(spanNode);
let viewLineDomNode = this._getViewLineDomNode(spanNode);
if (viewLineDomNode === null) {
// Couldn't find view line node
return null;
}
let lineNumber = this._getLineNumberFor(viewLineDomNode);
if (lineNumber === -1) {
// Couldn't find span node
// Couldn't find view line node
return null;
}
......@@ -239,12 +244,29 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
return new Position(lineNumber, column);
}
private _getLineNumberFromDOMInfo(spanNode: HTMLElement): number {
while (spanNode && spanNode.nodeType === 1) {
if (spanNode.className === ClassNames.VIEW_LINE) {
return parseInt(spanNode.getAttribute('lineNumber'), 10);
private _getViewLineDomNode(node: HTMLElement): HTMLElement {
while (node && node.nodeType === 1) {
if (node.className === ClassNames.VIEW_LINE) {
return node;
}
node = node.parentElement;
}
return null;
}
/**
* @returns the line number of this view line dom node.
*/
private _getLineNumberFor(domNode: HTMLElement): number {
const inp = this._linesCollection._get();
const rendLineNumberStart = inp.rendLineNumberStart;
const lines = inp.lines;
for (let i = 0; i < lines.length; i++) {
let lineDomNode = lines[i].getDomNode();
if (domNode === lineDomNode) {
return rendLineNumberStart + i;
}
spanNode = spanNode.parentElement;
}
return -1;
}
......
......@@ -200,7 +200,5 @@ export class ViewCursor {
private updatePosition(newPosition: Position): void {
this._position = newPosition;
this._domNode.domNode.setAttribute('lineNumber', this._position.lineNumber.toString());
this._domNode.domNode.setAttribute('column', this._position.column.toString());
}
}
......@@ -88,11 +88,13 @@ class VisibleIdentitySplitLine implements ISplitLine {
}
public getViewLineRenderingData(model: IModel, modelLineNumber: number, outputLineIndex: number): OutputLineRenderingData {
let lineTokens = model.getLineTokens(modelLineNumber, true);
let lineContent = lineTokens.getLineContent();
return new OutputLineRenderingData(
model.getLineContent(modelLineNumber),
model.getLineMinColumn(modelLineNumber),
model.getLineMaxColumn(modelLineNumber),
model.getLineTokens(modelLineNumber, true).inflate()
lineContent,
1,
lineContent.length + 1,
lineTokens.inflate()
);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册